summaryrefslogtreecommitdiff
path: root/graphics/pstricks/contrib/pedigree
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/pstricks/contrib/pedigree
Initial commit
Diffstat (limited to 'graphics/pstricks/contrib/pedigree')
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/LICENSE340
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Makefile57
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/NEWS21
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.3174
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.pm112
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.3177
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.pm148
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.3251
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.pm452
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.3181
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.pm150
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.3212
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.pm459
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Makefile42
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.3215
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.pm346
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.3379
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.pm1240
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.3171
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.pm237
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.3232
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.pm389
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.3180
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.pm172
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/README31
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/doc/Makefile75
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/doc/abortions.tex19
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english.tex46
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english1.tex32
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.bib49
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.pdfbin0 -> 287012 bytes
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.ps27305
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.tex1153
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/doc/russian.tex27
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/abortions.csv5
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/badsort.csv14
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/childlessness.csv6
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/consanguinic.csv11
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.cfg76
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.csv12
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english1.cfg76
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english_short.cfg76
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/pedigree.cfg47
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.cfg78
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.csv7
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort1.csv12
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort2.csv12
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort3.csv12
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/examples/twins.csv12
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.1185
-rw-r--r--graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.pl544
-rw-r--r--graphics/pstricks/contrib/pedigree/pst-pdgr/Makefile54
-rw-r--r--graphics/pstricks/contrib/pedigree/pst-pdgr/NEWS14
-rw-r--r--graphics/pstricks/contrib/pedigree/pst-pdgr/README26
-rw-r--r--graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.bib50
-rw-r--r--graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.dtx2193
-rw-r--r--graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.ins48
-rw-r--r--graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.pdfbin0 -> 200792 bytes
58 files changed, 38644 insertions, 0 deletions
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/LICENSE b/graphics/pstricks/contrib/pedigree/pedigree-perl/LICENSE
new file mode 100644
index 0000000000..f90922eea3
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/LICENSE
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <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 Lesser General
+Public License instead of this License.
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Makefile b/graphics/pstricks/contrib/pedigree/pedigree-perl/Makefile
new file mode 100644
index 0000000000..446d533238
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Makefile
@@ -0,0 +1,57 @@
+#
+# Makefile for pedigree
+# $Id: Makefile,v 2.2 2007-07-29 19:52:51 boris Exp $
+#
+# This file is in public domain
+#
+
+PREFIX = /usr/local
+
+PERLSCRIPTS=pedigree.pl
+
+PERLLIBS = \
+ Pedigree.pm
+
+MANPAGES1=${PERLSCRIPTS:%.pl=%.1}
+MANPAGES3=${PERLLIBS:%.pm=%.3}
+
+
+all: man
+ cd Pedigree; ${MAKE} $@
+
+man: ${MANPAGES1} ${MANPAGES3}
+
+docs:
+ cd doc; ${MAKE} all
+
+install: all
+ install pedigree.pl $(PREFIX)/bin/pedigree
+ mkdir -p $(PREFIX)/lib/site_perl
+ install -m 644 ${PERLLIBS} $(PREFIX)/lib/site_perl
+ cd Pedigree; ${MAKE} $@
+
+installman:
+ install -m 644 pedigree.1 $(PREFIX)/man/man1
+ for x in ${MANPAGES3}; do install -m 644 $$x $(PREFIX)/man/man3/$$x; done
+ cd Pedigree; ${MAKE} $@
+
+%.1: %.pl
+ pod2man --section=1 -n $* -s 1 $< $@
+
+%.3: %.pm
+ pod2man --section=3 -n $* -s 3 $< $@
+
+clean:
+ cd doc; ${MAKE} $@
+ cd Pedigree; ${MAKE} $@
+
+distclean: clean
+ $(RM) ${MANPAGES1} ${MANPAGES3}
+ cd doc; ${MAKE} $@
+ cd Pedigree; ${MAKE} $@
+
+#
+# Archive for the distribution. Includes typeset documentation and man pages
+#
+archive: all docs clean
+ tar -czvf pedigree.tgz --exclude '*~' --exclude '*.tgz' --exclude CVS .
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/NEWS b/graphics/pstricks/contrib/pedigree/pedigree-perl/NEWS
new file mode 100644
index 0000000000..3e8d5ad7b2
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/NEWS
@@ -0,0 +1,21 @@
+pedigree NEWS: History of user interface changes
+
+Changes in v0.4, 2012/03/15
+
+* Added TeXLive compatibility
+
+Changes in v0.3, 2007/07/31
+
+* Added support for twins, infertility, abortions
+
+* Added support for multiple probands
+
+* Added (limited) support for consanguinic unions
+
+* Automatic scaling and rotation of large charts
+
+* Added support for additional node information on the chart
+
+* INCOMPATIBLE CHANGE: requires pst-pdgr v0.3 or later.
+
+This file is in public domain \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.3
new file mode 100644
index 0000000000..e1f63a36a8
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.3
@@ -0,0 +1,174 @@
+.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Pedigree 3"
+.TH Pedigree 3 "2007-07-09" "perl v5.10.0" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Pedigree \- the main library for Pedigree.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+use Pedigree;
+.PP
+\&\f(CW$node\fR = Pedigree\->MakeNode($params);
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+This is the main package for pedigree construction. It calls other
+libraries in the Pedigree:: family
+.Sp
+.RS 4
+\&\fBMakeNode\fR(\fI\f(CI$params\fI\fR);
+.Sp
+Construct a new node from the given parameters. Check what kind of node
+should we construct.
+.RE
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0
+or 1.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIpedigree\fR\|(1),
+\&\fIPedigree::AbortionNode\fR\|(3),
+\&\fIPedigree::Area\fR\|(3),
+\&\fIPedigree::ChildlessNode\fR\|(3),
+\&\fIPedigree::Language\fR\|(3),
+\&\fIPedigree::MarriageNode\fR\|(3),
+\&\fIPedigree::Node\fR\|(3),
+\&\fIPedigree::Parser\fR\|(3),
+\&\fIPedigree::PersonNode\fR\|(3),
+\&\fIPedigree::TwinsNode\fR\|(3),
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman, Leila Akhmadeeva, 2007
+.SH "POD ERRORS"
+.IX Header "POD ERRORS"
+Hey! \fBThe above document had some coding errors, which are explained below:\fR
+.IP "Around line 18:" 4
+.IX Item "Around line 18:"
+You can't have =items (as at line 46) unless the first thing after the =over is an =item
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.pm
new file mode 100644
index 0000000000..c92a027b86
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.pm
@@ -0,0 +1,112 @@
+=pod
+
+=head1 NAME
+
+Pedigree - the main library for Pedigree.
+
+=head1 SYNOPSIS
+
+use Pedigree;
+
+$node = Pedigree->MakeNode($params);
+
+=head1 DESCRIPTION
+
+This is the main package for pedigree construction. It calls other
+libraries in the Pedigree:: family
+
+=over 4
+
+=cut
+
+
+
+####################################################################
+# Define the package #
+####################################################################
+
+package Pedigree;
+use Pedigree::AbortionNode;
+use Pedigree::Area;
+use Pedigree::ChildlessNode;
+use Pedigree::Language;
+use Pedigree::MarriageNode;
+use Pedigree::Node;
+use Pedigree::Parser;
+use Pedigree::PersonNode;
+use Pedigree::TwinsNode;
+use strict;
+
+####################################################################
+# MakeNode #
+####################################################################
+
+=pod
+
+=item B<MakeNode>(I<$params>);
+
+Construct a new node from the given parameters. Check what kind of node
+should we construct.
+
+=cut
+
+sub MakeNode {
+ my ($class,$params)=@_;
+
+ my $self;
+
+ if ($params->{'Name'} =~ s/^\#//) {
+ if ($params->{'Name'} eq 'abortion') {
+ $self=new Pedigree::AbortionNode(%{$params});
+ } elsif ($params->{'Name'} eq 'childless') {
+ $self=new Pedigree::ChildlessNode(%{$params});
+ } else {
+ print STDERR "Unknown special name: ", $params->{'Name'},
+ "\n";
+ }
+ } else {
+ $self=new Pedigree::PersonNode(%{$params});
+ }
+ return $self;
+
+}
+
+
+
+
+####################################################################
+# THE END #
+####################################################################
+
+=pod
+
+=back
+
+=head1 ENVIRONMENT
+
+The calling program should define B<$main::DEBUG> and set it to 0
+or 1.
+
+=head1 SEE ALSO
+
+pedigree(1),
+Pedigree::AbortionNode(3),
+Pedigree::Area(3),
+Pedigree::ChildlessNode(3),
+Pedigree::Language(3),
+Pedigree::MarriageNode(3),
+Pedigree::Node(3),
+Pedigree::Parser(3),
+Pedigree::PersonNode(3),
+Pedigree::TwinsNode(3),
+
+
+=head1 AUTHOR
+
+Boris Veytsman, Leila Akhmadeeva, 2007
+
+
+
+=cut
+
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.3
new file mode 100644
index 0000000000..1d1569d08d
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.3
@@ -0,0 +1,177 @@
+.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Pedigree::AbortionNode 3"
+.TH Pedigree::AbortionNode 3 "2007-07-22" "perl v5.10.0" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Pedigree::AbortionNode \- an abortion in a pedigree
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+use Pedigree::AbortionNode;
+.PP
+\&\f(CW$node\fR = new Pedigree::AbortionNode(\fI\f(CI%params\fI\fR);
+.PP
+\&\f(CW$node\fR\->DrawNode(\fI\f(CI$xidst\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR,
+\&\fI\f(CI@fieldsfornode\fI\fR);
+.PP
+\&\f(CW$node\fR\->PrintLegend(\fI\f(CI$land\fI\fR, \fI\f(CI@fields\fI\fR);
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+This package contains data about an abortion. Abortion is like a person,
+but it cannot have kids, and it is drawn differently
+.Sp
+.RS 4
+\&\fBDrawNode\fR(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR,
+\&\fI\f(CI@fieldsfornode\fI\fR);
+.Sp
+Output the command to draw this node. The parameters are
+distances between the nodes (in cm) and fields for abovetext.
+.Sp
+\&\fBPrintLegend\fR(\fI\f(CI$lang\fI\fR, \fI\f(CI@fields\fI\fR);
+.Sp
+Print the legend for the given node, including \fI\f(CI@fields\fI\fR in the given
+language \fI\f(CI$lang\fI\fR, and excluding the fields, that have no meaning for
+this node.
+.RE
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0
+or 1.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3)
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman, Leila Akhmadeeva, 2007
+.SH "POD ERRORS"
+.IX Header "POD ERRORS"
+Hey! \fBThe above document had some coding errors, which are explained below:\fR
+.IP "Around line 23:" 4
+.IX Item "Around line 23:"
+You can't have =items (as at line 46) unless the first thing after the =over is an =item
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.pm
new file mode 100644
index 0000000000..df56988c16
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.pm
@@ -0,0 +1,148 @@
+=pod
+
+=head1 NAME
+
+Pedigree::AbortionNode - an abortion in a pedigree
+
+=head1 SYNOPSIS
+
+use Pedigree::AbortionNode;
+
+$node = new Pedigree::AbortionNode(I<%params>);
+
+$node->DrawNode(I<$xidst>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>,
+I<@fieldsfornode>);
+
+$node->PrintLegend(I<$land>, I<@fields>);
+
+=head1 DESCRIPTION
+
+This package contains data about an abortion. Abortion is like a person,
+but it cannot have kids, and it is drawn differently
+
+=over 4
+
+=cut
+
+
+
+####################################################################
+# Define the package #
+####################################################################
+
+package Pedigree::AbortionNode;
+use Pedigree;
+use strict;
+our @ISA=('Pedigree::PersonNode');
+
+
+
+####################################################################
+# DrawNode #
+####################################################################
+
+=pod
+
+=item B<DrawNode>(I<$xdist>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>,
+I<@fieldsfornode>);
+
+Output the command to draw this node. The parameters are
+distances between the nodes (in cm) and fields for abovetext.
+
+=cut
+
+sub DrawNode {
+ my $self=shift;
+ my ($xdist, $ydist, $belowtextfont, $abovetextfont, @fieldsfornode) = @_;
+ my $result = '\rput('.($xdist*$self->GetAbsX()).", ".
+ ($ydist*$self->GetAbsY()).'){\pstAbortion[';
+ my @opts=($self->Condition(),
+ 'belowtext={'."$belowtextfont ".$self->GetGenName().'}');
+ if ($self->Type() eq 'sab') {
+ push @opts, 'sab';
+ }
+ my @abovetext;
+ if ($self->Sex() ne 'unknown') {
+ push @abovetext, $self->Sex();
+ }
+ foreach my $field (@fieldsfornode) {
+ if (($field ne 'Sex') && ($field ne 'Name')) {
+ push @abovetext, $self->{$field};
+ }
+ }
+ if (scalar @abovetext) {
+ push @opts,'abovetext={'."$abovetextfont ".join('; ',@abovetext).'}';
+ }
+ $result .= join(', ',@opts);
+ $result .= ']{'.$self->Id()."}}\n";
+ return $result;
+}
+
+####################################################################
+# PrintLegend #
+####################################################################
+
+=pod
+
+=item B<PrintLegend>(I<$lang>, I<@fields>);
+
+Print the legend for the given node, including I<@fields> in the given
+language I<$lang>, and excluding the fields, that have no meaning for
+this node.
+
+
+=cut
+
+sub PrintLegend {
+ my ($self, $lang, @fields) = @_;
+ my $result = '\item['.$self->GetGenName().'] ';
+ my @desc;
+ foreach my $field (@fields) {
+ if (exists $self->{$field} && ($field ne 'DoD') &&
+ ($field ne 'AgeAtDeath')) {
+ my $res = $lang->PrintField($field, $self->{$field});
+ if (length($res)>0) {
+ push @desc, $res;
+ }
+ }
+ }
+ $result .= join ("; ",@desc);
+ $result .= ".\n";
+ #
+ # We print only the nodes, for which there is an information
+ #
+ if (scalar @desc) {
+ return $result;
+ }
+ return;
+}
+
+
+
+####################################################################
+# THE END #
+####################################################################
+
+=pod
+
+=back
+
+=head1 ENVIRONMENT
+
+The calling program should define B<$main::DEBUG> and set it to 0
+or 1.
+
+=head1 SEE ALSO
+
+pedigree(1), Pedigree(3)
+
+
+=head1 AUTHOR
+
+Boris Veytsman, Leila Akhmadeeva, 2007
+
+
+
+=cut
+
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.3
new file mode 100644
index 0000000000..c200cbbf0f
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.3
@@ -0,0 +1,251 @@
+.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Pedigree::Area 3"
+.TH Pedigree::Area 3 "2007-07-08" "perl v5.10.0" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Pedigree::Area \- Calculate the area taken by a tree or a clump
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+use Pedigree::Area;
+.PP
+\&\f(CW$area\fR = new Pedigree::Area($node);
+.PP
+\&\f(CW$Ymin\fR=$area\->\fIGetYmin()\fR;
+.PP
+\&\f(CW$area\fR\->SetYmin($Ymin);
+.PP
+\&\f(CW$Ymax\fR=$area\->\fIGetYmax()\fR;
+.PP
+\&\f(CW$area\fR\->SetYmax($Ymax);
+.PP
+\&\f(CW$Xmin\fR=$area\->GetXmin($y);
+.PP
+\&\f(CW$area\fR\->SetXmin($y,$x);
+.PP
+\&\f(CW$Xmax\fR=$area\->GetXmax($y);
+.PP
+\&\f(CW$area\fR\->SetXmax($y,$x);
+.PP
+\&\f(CW$area\fR\->AddRight($otherarea);
+.PP
+\&\f(CW$area\fR\->AddLeft($otherarea);
+.PP
+\&\f(CW$rootnode\fR=$area\->\fIGetRootNode()\fR;
+.PP
+\&\f(CW$area\fR\->MoveLowerLayers($x);
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The algorithm of \fIpedigree\fR\|(1) uses the notion of area: a part of
+a picture taken by a tree or a clump. This package implements this
+notion.
+.PP
+Each Area has \fBrootnode\fR \- the reference node for all calculations.
+All distances are calculated as relative to the coordinates of the
+\&\fBrootnode\fR.
+.PP
+The units are distances between the nodes in X and Y direction. The
+Y axis is \fIdownward\fR: the earlier generations have smaller Y
+coordinates.
+.Sp
+.RS 4
+\&\fBnew\fR(\fI\f(CI$rootnode\fI\fR);
+.Sp
+Construct a new area around the given rootnode
+.Sp
+\&\fBGetYmin\fR();
+.Sp
+Get the lower bound of the area.
+.Sp
+\&\fBSetYmin\fR(\fI\f(CI$y\fI\fR);
+.Sp
+Set the lower bound of the area.
+.Sp
+\&\fBGetYmax\fR();
+.Sp
+Get the upper bound of the area.
+.Sp
+\&\fBSetYmax\fR(\fI\f(CI$y\fI\fR);
+.Sp
+Set the upper bound of the area.
+.Sp
+\&\fBGetXmin\fR(\fI\f(CI$y\fI\fR);
+.Sp
+Get the minimal X coordinate of the area on the level Y.
+.Sp
+\&\fBSetXmin\fR(\fI\f(CI$y\fI, \f(CI$x\fI\fR);
+.Sp
+Set the minimal X coordinate of the area on the level Y.
+.Sp
+\&\fBGetXmax\fR(\fI\f(CI$y\fI\fR);
+.Sp
+Get the maximal X coordinate of the area the the level Y.
+.Sp
+\&\fBSetXmax\fR(\fI\f(CI$y\fI, \f(CI$x\fI\fR);
+.Sp
+Set the maximal X coordinate of the area the the level Y.
+.Sp
+\&\fBAddRight\fR(\fI\f(CI$otherarea\fI\fR);
+.Sp
+Add the new area \fI\f(CI$otherarea\fI\fR to the given area at the right. The
+\&\*(L"other area\*(R" should have a root node that is relative to our root
+node. The relative Y of the other root node is used, the relative
+X is set.
+.Sp
+\&\fBAddLeft\fR(\fI\f(CI$otherarea\fI\fR);
+.Sp
+Add the new area \fI\f(CI$otherarea\fI\fR to the given area at the left. The
+\&\*(L"other area\*(R" should have a root node that is relative to our root
+node. The relative Y of the other root node is used, the relative
+X is set.
+.Sp
+\&\fBGetRootNode\fR();
+.Sp
+Return the root node of the area.
+.Sp
+\&\fBMoveLowerLayers\fR(\fI\f(CI$x\fI\fR);
+.Sp
+Shift the lower layers (>0) of the area in the X direction by \fI\f(CI$x\fI\fR
+.RE
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0
+or 1.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3)
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman, Leila Akhmadeeva, 2006, 2007
+.SH "POD ERRORS"
+.IX Header "POD ERRORS"
+Hey! \fBThe above document had some coding errors, which are explained below:\fR
+.IP "Around line 51:" 4
+.IX Item "Around line 51:"
+You can't have =items (as at line 69) unless the first thing after the =over is an =item
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.pm
new file mode 100644
index 0000000000..12cda99deb
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.pm
@@ -0,0 +1,452 @@
+=pod
+
+=head1 NAME
+
+Pedigree::Area - Calculate the area taken by a tree or a clump
+
+=head1 SYNOPSIS
+
+use Pedigree::Area;
+
+$area = new Pedigree::Area($node);
+
+$Ymin=$area->GetYmin();
+
+$area->SetYmin($Ymin);
+
+$Ymax=$area->GetYmax();
+
+$area->SetYmax($Ymax);
+
+$Xmin=$area->GetXmin($y);
+
+$area->SetXmin($y,$x);
+
+$Xmax=$area->GetXmax($y);
+
+$area->SetXmax($y,$x);
+
+$area->AddRight($otherarea);
+
+$area->AddLeft($otherarea);
+
+$rootnode=$area->GetRootNode();
+
+$area->MoveLowerLayers($x);
+
+=head1 DESCRIPTION
+
+The algorithm of pedigree(1) uses the notion of area: a part of
+a picture taken by a tree or a clump. This package implements this
+notion.
+
+Each Area has B<rootnode> - the reference node for all calculations.
+All distances are calculated as relative to the coordinates of the
+B<rootnode>.
+
+The units are distances between the nodes in X and Y direction. The
+Y axis is I<downward>: the earlier generations have smaller Y
+coordinates.
+
+=over 4
+
+=cut
+
+####################################################################
+# Define the package #
+####################################################################
+
+package Pedigree::Area;
+use strict;
+
+
+####################################################################
+# new #
+####################################################################
+
+=pod
+
+=item B<new>(I<$rootnode>);
+
+Construct a new area around the given rootnode
+
+=cut
+
+sub new {
+ my ($class, $node) = @_;
+ my $self={};
+ #
+ # Top and bottom in the Y direction
+ #
+ $self->{'Ymin'}=0;
+ $self->{'Ymax'}=0;
+ #
+ # Hashes of Xmin and Xmax
+ #
+ $self->{'Xmin'}->{0}=0;
+ $self->{'Xmax'}->{0}=0;
+ $self->{'RootNode'}=$node;
+ bless ($self, $class);
+ return $self;
+
+}
+
+####################################################################
+# GetYmin #
+####################################################################
+
+=pod
+
+=item B<GetYmin>();
+
+Get the lower bound of the area.
+
+=cut
+
+sub GetYmin {
+ my $self = shift;
+ return $self->{'Ymin'};
+}
+
+####################################################################
+# SetYmin #
+####################################################################
+
+=pod
+
+=item B<SetYmin>(I<$y>);
+
+Set the lower bound of the area.
+
+=cut
+
+sub SetYmin {
+ my $self = shift;
+ my $y=shift;
+ $self->{'Ymin'}=$y;
+ return $y;
+}
+
+####################################################################
+# GetYmax #
+####################################################################
+
+=pod
+
+=item B<GetYmax>();
+
+Get the upper bound of the area.
+
+=cut
+
+sub GetYmax {
+ my $self = shift;
+ return $self->{'Ymax'};
+}
+
+####################################################################
+# SetYmax #
+####################################################################
+
+=pod
+
+=item B<SetYmax>(I<$y>);
+
+Set the upper bound of the area.
+
+=cut
+
+sub SetYmax {
+ my $self = shift;
+ my $y=shift;
+ $self->{'Ymax'}=$y;
+ return $y;
+}
+
+####################################################################
+# GetXmin #
+####################################################################
+
+=pod
+
+=item B<GetXmin>(I<$y>);
+
+Get the minimal X coordinate of the area on the level Y.
+
+=cut
+
+sub GetXmin {
+ my $self = shift;
+ my $y=shift;
+ return $self->{'Xmin'}->{$y};
+}
+
+####################################################################
+# SetXmin #
+####################################################################
+
+=pod
+
+=item B<SetXmin>(I<$y, $x>);
+
+Set the minimal X coordinate of the area on the level Y.
+
+=cut
+
+sub SetXmin {
+ my $self = shift;
+ my $y=shift;
+ my $x=shift;
+ $self->{'Xmin'}->{$y}=$x;
+ return $x;
+}
+
+####################################################################
+# GetXmax #
+####################################################################
+
+=pod
+
+=item B<GetXmax>(I<$y>);
+
+Get the maximal X coordinate of the area the the level Y.
+
+=cut
+
+sub GetXmax {
+ my $self = shift;
+ my $y=shift;
+ return $self->{'Xmax'}->{$y};
+}
+
+####################################################################
+# SetXmax #
+####################################################################
+
+=pod
+
+=item B<SetXmax>(I<$y, $x>);
+
+Set the maximal X coordinate of the area the the level Y.
+
+=cut
+
+sub SetXmax {
+ my $self = shift;
+ my $y=shift;
+ my $x=shift;
+ $self->{'Xmax'}->{$y}=$x;
+ return $x;
+}
+
+
+####################################################################
+# AddRight #
+####################################################################
+
+=pod
+
+=item B<AddRight>(I<$otherarea>);
+
+Add the new area I<$otherarea> to the given area at the right. The
+"other area" should have a root node that is relative to our root
+node. The relative Y of the other root node is used, the relative
+X is set.
+
+=cut
+
+sub AddRight {
+ my ($self, $other) = @_;
+ my $deltaY = $other->GetRootNode()->GetRelY();
+
+ #
+ # First, we calculate the intersection of two areas
+ # It is between max(Y_{min,1}, Y_{min,2}+deltaY)
+ # and min(Y_{max,1}, Y_{max,2}+deltaY)
+ #
+ my $intMin=$self->GetYmin();
+ if ($other->GetYmin()+$deltaY > $intMin) {
+ $intMin = $other->GetYmin()+$deltaY;
+ }
+ my $intMax = $self->GetYmax();
+ if ($other->GetYmax()+$deltaY < $intMax) {
+ $intMax=$other->GetYmax()+$deltaY;
+ }
+
+ #
+ # Now we are ready to calculate relative X shift
+ #
+ my $deltaX=0;
+ for (my $y=$intMin; $y<=$intMax; $y++) {
+ my $x0 = $self->GetXmax($y);
+ my $x1 = $other->GetXmin($y-$deltaY);
+ if ($x1 + $deltaX - $x0 <1) {
+ $deltaX = 1 + $x0 - $x1;
+ }
+ }
+ #
+ # And set the relative X
+ #
+ $other->GetRootNode()->SetRelX($deltaX);
+
+ #
+ # Now we recalculate our area
+ #
+ for (my $y=$intMin; $y<=$intMax; $y++) {
+ $self->SetXmax($y, $other->GetXmax($y-$deltaY) + $deltaX);
+ }
+ if ($other->GetYmin()+$deltaY < $self->GetYmin()) {
+ for (my $y=$other->GetYmin()+$deltaY; $y<$self->GetYmin(); $y++) {
+ $self->SetXmin($y, $other->GetXmin($y-$deltaY)+$deltaX);
+ $self->SetXmax($y, $other->GetXmax($y-$deltaY)+$deltaX);
+ }
+ $self->SetYmin($other->GetYmin()+$deltaY);
+ }
+ if ($other->GetYmax()+$deltaY > $self->GetYmax()) {
+ for (my $y=$self->GetYmax()+1; $y<=$other->GetYmax()+$deltaY; $y++) {
+ $self->SetXmin($y, $other->GetXmin($y-$deltaY)+$deltaX);
+ $self->SetXmax($y, $other->GetXmax($y-$deltaY)+$deltaX);
+ }
+ $self->SetYmax($other->GetYmax()+$deltaY);
+ }
+}
+
+####################################################################
+# AddLeft #
+####################################################################
+
+=pod
+
+=item B<AddLeft>(I<$otherarea>);
+
+Add the new area I<$otherarea> to the given area at the left. The
+"other area" should have a root node that is relative to our root
+node. The relative Y of the other root node is used, the relative
+X is set.
+
+=cut
+
+sub AddLeft {
+ my ($self, $other) = @_;
+ my $deltaY = $other->GetRootNode()->GetRelY();
+
+ #
+ # First, we calculate the intersection of two areas
+ # It is between max(Y_{min,1}, Y_{min,2}+deltaY)
+ # and min(Y_{max,1}, Y_{max,2}+deltaY)
+ #
+ my $intMin=$self->GetYmin();
+ if ($other->GetYmin()+$deltaY > $intMin) {
+ $intMin = $other->GetYmin()+$deltaY;
+ }
+ my $intMax = $self->GetYmax();
+ if ($other->GetYmax()+$deltaY < $intMax) {
+ $intMax=$other->GetYmax()+$deltaY;
+ }
+
+ #
+ # Now we are ready to calculate relative X shift
+ #
+ my $deltaX=0;
+ for (my $y=$intMin; $y<=$intMax; $y++) {
+ my $x0 = $other->GetXmax($y-$deltaY);
+ my $x1 = $self->GetXmin($y);
+ if ($x1 + $deltaX - $x0 <1) {
+ $deltaX = 1 + $x0 - $x1;
+ }
+ }
+ #
+ # And set the relative X
+ #
+ $other->GetRootNode()->SetRelX(-$deltaX);
+
+ #
+ # Now we recalculate our area
+ #
+ for (my $y=$intMin; $y<=$intMax; $y++) {
+ $self->SetXmin($y, $other->GetXmin($y-$deltaY) - $deltaX);
+ }
+ if ($other->GetYmin()+$deltaY < $self->GetYmin()) {
+ for (my $y=$other->GetYmin()+$deltaY; $y<$self->GetYmin(); $y++) {
+ $self->SetXmin($y, $other->GetXmin($y-$deltaY)-$deltaX);
+ $self->SetXmax($y, $other->GetXmax($y-$deltaY)-$deltaX);
+ }
+ $self->SetYmin($other->GetYmin()+$deltaY);
+ }
+ if ($other->GetYmax()+$deltaY > $self->GetYmax()) {
+ for (my $y=$self->GetYmax()+1; $y<=$other->GetYmax()+$deltaY; $y++) {
+ $self->SetXmin($y, $other->GetXmin($y-$deltaY)-$deltaX);
+ $self->SetXmax($y, $other->GetXmax($y-$deltaY)-$deltaX);
+ }
+ $self->SetYmax($other->GetYmax()+$deltaY);
+ }
+}
+
+####################################################################
+# GetRootNode #
+####################################################################
+
+=pod
+
+=item B<GetRootNode>();
+
+Return the root node of the area.
+
+=cut
+
+sub GetRootNode {
+ my $self = shift;
+ return $self->{'RootNode'};
+}
+
+####################################################################
+# MoveLowerLayers #
+####################################################################
+
+=pod
+
+=item B<MoveLowerLayers>(I<$x>);
+
+Shift the lower layers (>0) of the area in the X direction by I<$x>
+
+=cut
+
+sub MoveLowerLayers {
+ my $self = shift;
+ my $x=shift;
+ for (my $y=-1; $y>=$self->GetYmin; $y--) {
+ $self->SetXmin($y, $self->GetXmin($y)+$x);
+ $self->SetXmax($y, $self->GetXmax($y)+$x);
+ }
+ return 0;
+}
+
+
+
+####################################################################
+# THE END #
+####################################################################
+
+
+=pod
+
+=back
+
+=head1 ENVIRONMENT
+
+The calling program should define B<$main::DEBUG> and set it to 0
+or 1.
+
+=head1 SEE ALSO
+
+pedigree(1), Pedigree(3)
+
+=head1 AUTHOR
+
+Boris Veytsman, Leila Akhmadeeva, 2006, 2007
+
+
+
+=cut
+
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.3
new file mode 100644
index 0000000000..0051778ed5
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.3
@@ -0,0 +1,181 @@
+.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Pedigree::ChildlessNode 3"
+.TH Pedigree::ChildlessNode 3 "2007-07-22" "perl v5.10.0" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Pedigree::ChildlessNode \- an abortion in a pedigree
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+use Pedigree::ChildlessNode;
+.PP
+\&\f(CW$node\fR = new Pedigree::ChildlessNode(\fI\f(CI%params\fI\fR);
+.PP
+\&\f(CW$node\fR\->DrawNode(\fI\f(CI$xidst\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR,
+\&\fI\f(CI@fieldsfornode\fI\fR);
+.PP
+\&\f(CW$node\fR\->PrintLegend(\fI\f(CI$land\fI\fR, \fI\f(CI@fields\fI\fR);
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+This package contains data about a \*(L"childlessness\*(R" node. This node
+is not numbered in pedigree.
+.Sp
+.RS 4
+\&\fBnew\fR(\fI\f(CI%params\fI\fR);
+.Sp
+Construct a new node from the given parameters.
+.Sp
+\&\fBDrawNode\fR(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR,
+\&\fI\f(CI@fieldsfornode\fI\fR);
+.Sp
+Output the command to draw this node. The parameters are
+distances between the nodes (in cm) and fields for abovetext (not used
+here). We only print the Comment field below the node, and draw this
+node higher than other nodes.
+.Sp
+\&\fBPrintLegend\fR(\fI\f(CI$lang\fI\fR, \fI\f(CI@fields\fI\fR);
+.Sp
+This subroutine does nothing since childlessness has no legend.
+.RE
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0
+or 1.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3)
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman, Leila Akhmadeeva, 2007
+.SH "POD ERRORS"
+.IX Header "POD ERRORS"
+Hey! \fBThe above document had some coding errors, which are explained below:\fR
+.IP "Around line 24:" 4
+.IX Item "Around line 24:"
+You can't have =items (as at line 45) unless the first thing after the =over is an =item
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.pm
new file mode 100644
index 0000000000..db4b1c985b
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.pm
@@ -0,0 +1,150 @@
+=pod
+
+=head1 NAME
+
+Pedigree::ChildlessNode - an abortion in a pedigree
+
+=head1 SYNOPSIS
+
+use Pedigree::ChildlessNode;
+
+$node = new Pedigree::ChildlessNode(I<%params>);
+
+$node->DrawNode(I<$xidst>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>,
+I<@fieldsfornode>);
+
+$node->PrintLegend(I<$land>, I<@fields>);
+
+
+=head1 DESCRIPTION
+
+This package contains data about a "childlessness" node. This node
+is not numbered in pedigree.
+
+=over 4
+
+=cut
+
+
+
+####################################################################
+# Define the package #
+####################################################################
+
+package Pedigree::ChildlessNode;
+use Pedigree;
+use strict;
+our @ISA=('Pedigree::PersonNode');
+
+####################################################################
+# new #
+####################################################################
+
+=pod
+
+=item B<new>(I<%params>);
+
+Construct a new node from the given parameters.
+
+=cut
+
+sub new {
+ my ($class,%params)=@_;
+ my $self=$class->SUPER::new(%params);
+ if (!ref($self)) {
+ return 0;
+ }
+
+ #
+ # These nodes are NOT numbered in pedigrees
+ #
+
+ $self->{'Numbered'}=0;
+
+ return $self;
+
+}
+
+
+####################################################################
+# DrawNode #
+####################################################################
+
+=pod
+
+=item B<DrawNode>(I<$xdist>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>,
+I<@fieldsfornode>);
+
+Output the command to draw this node. The parameters are
+distances between the nodes (in cm) and fields for abovetext (not used
+here). We only print the Comment field below the node, and draw this
+node higher than other nodes.
+
+=cut
+
+sub DrawNode {
+ my $self=shift;
+ my ($xdist, $ydist, $belowtextfont, $abovetextfont, @fieldsfornode) = @_;
+ my $result = '\rput('.($xdist*$self->GetAbsX()).", ".
+ ($ydist*($self->GetAbsY()+0.6)).'){\pstChildless[';
+ my @opts=('belowtextrp=t');
+ if ($self->{'Comment'}) {
+ push @opts,
+ 'belowtext={'."$belowtextfont ".$self->{'Comment'}.'}';
+ }
+ if ($self->Type() eq 'infertile') {
+ push @opts, 'infertile';
+ }
+ if (scalar @opts) {
+ $result .= join(', ',@opts);
+ }
+ $result .= ']{'.$self->Id()."}}\n";
+ return $result;
+}
+
+####################################################################
+# PrintLegend #
+####################################################################
+
+=pod
+
+=item B<PrintLegend>(I<$lang>, I<@fields>);
+
+This subroutine does nothing since childlessness has no legend.
+
+=cut
+
+sub PrintLegend {
+
+ return;
+}
+
+
+
+####################################################################
+# THE END #
+####################################################################
+
+=pod
+
+=back
+
+=head1 ENVIRONMENT
+
+The calling program should define B<$main::DEBUG> and set it to 0
+or 1.
+
+=head1 SEE ALSO
+
+pedigree(1), Pedigree(3)
+
+
+=head1 AUTHOR
+
+Boris Veytsman, Leila Akhmadeeva, 2007
+
+
+
+=cut
+
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.3
new file mode 100644
index 0000000000..2b3059bd7b
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.3
@@ -0,0 +1,212 @@
+.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Pedigree::Language 3"
+.TH Pedigree::Language 3 "2007-10-21" "perl v5.10.0" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Pedigree::Language \- encapsulating language issues for pedigree library
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+use Pedigree::Language;
+.PP
+\&\f(CW$lang\fR = new Pedigree::Language(\fI\f(CI$language\fI\fR[, \fI\f(CI$encoding\fI\fR]);
+.PP
+\&\f(CW$lang\fR\->\fIHeader()\fR;
+.PP
+\&\f(CW$lang\fR\->\fILanguage()\fR;
+.PP
+\&\f(CW$lang\fR\->\fIEncoding()\fR;
+.PP
+\&\f(CW$lang\fR\->\fIGetFieldNames()\fR;
+.PP
+\&\f(CW$lang\fR\->\fIGetValues()\fR;
+.PP
+\&\f(CW$lang\fR\->\fIGetSpecialNames()\fR;
+.PP
+\&\f(CW$lang\fR\->PrintField(\fI\f(CI$field\fI\fR, $<$value>);
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+This package defines the language-dependent parts of the pedigree
+library. The idea is to gather everything about language here, so adding
+a new language should be (presumably) be easy.
+.Sp
+.RS 4
+\&\fBnew\fR(\fI\f(CI$language\fI\fR[, \fI\f(CI$encoding\fI\fR]);
+.Sp
+Construct the new interpreter from the given language and encoding names.
+.Sp
+\&\fBHeader\fR ()
+.Sp
+Print the language-related lines of the document preamble
+.Sp
+\&\fBLanguage\fR ()
+.Sp
+Print the current language
+.Sp
+\&\fBEncoding\fR ()
+.Sp
+Print the current encoding
+.Sp
+\&\fBGetFieldNames\fR();
+.Sp
+Outputs a reference to a hash
+\&\*(L"field_name_in_this_language\*(R"=>\*(L"field_name_in_English\*(R"
+.Sp
+\&\fBGetValues\fR();
+.Sp
+Outputs a reference to a hash
+\&\*(L"field_value_in_this_language\*(R"=>\*(L"field_value_in_English\*(R"
+.Sp
+\&\fBGetSpecialNames\fR();
+.Sp
+Some values for the 'Name' field start with \f(CW\*(C`#\*(C'\fR. They are special.
+This subroutine outputs a reference to a hash
+\&\*(L"special_name_in_this_language\*(R"=>\*(L"special_name\*(R"
+.Sp
+\&\fBPrintField\fR(\fI\f(CI$field\fI\fR, \fI\f(CI$value\fI\fR);
+.Sp
+Formats the value \fI\f(CI$value\fI\fR of the given field \fI\f(CI$field\fI\fR according
+to the rules of the given language.
+.RE
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0
+or 1.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3)
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman, Leila Akhmadeeva, 2006, 2007
+.SH "POD ERRORS"
+.IX Header "POD ERRORS"
+Hey! \fBThe above document had some coding errors, which are explained below:\fR
+.IP "Around line 34:" 4
+.IX Item "Around line 34:"
+You can't have =items (as at line 57) unless the first thing after the =over is an =item
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.pm
new file mode 100644
index 0000000000..bcae95d307
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.pm
@@ -0,0 +1,459 @@
+=pod
+
+=head1 NAME
+
+Pedigree::Language - encapsulating language issues for pedigree library
+
+=head1 SYNOPSIS
+
+use Pedigree::Language;
+
+$lang = new Pedigree::Language(I<$language>[, I<$encoding>]);
+
+$lang->Header();
+
+$lang->Language();
+
+$lang->Encoding();
+
+$lang->GetFieldNames();
+
+$lang->GetValues();
+
+$lang->GetSpecialNames();
+
+$lang->PrintField(I<$field>, $<$value>);
+
+
+=head1 DESCRIPTION
+
+This package defines the language-dependent parts of the pedigree
+library. The idea is to gather everything about language here, so adding
+a new language should be (presumably) be easy.
+
+=over 4
+
+=cut
+
+####################################################################
+# Define the package #
+####################################################################
+
+package Pedigree::Language;
+use strict;
+
+#
+# And package methods
+#
+
+
+####################################################################
+# new #
+####################################################################
+
+=pod
+
+
+=item B<new>(I<$language>[, I<$encoding>]);
+
+Construct the new interpreter from the given language and encoding names.
+
+=cut
+
+
+sub new {
+ my $self={};
+ my ($class,$language,$encoding)=@_;
+ $self->{'language'}=$language;
+ if (!defined($encoding) && ($language eq 'russian')) {
+ $encoding='cp1251';
+ }
+ if (defined($encoding)) {
+ $self->{encoding}=$encoding;
+ }
+ bless $self, $class;
+ return ($self);
+}
+
+
+####################################################################
+# Header #
+####################################################################
+
+
+=pod
+
+=item B<Header> ()
+
+Print the language-related lines of the document preamble
+
+=cut
+
+sub Header {
+ my $self=shift;
+ my $result;
+ if ($self->Encoding()) {
+ $result .= '\usepackage['.$self->Encoding().']{inputenc}'."\n";
+ }
+ if (!($self->Language() eq 'english')) {
+ $result .= '\usepackage['.$self->Language().']{babel}'."\n";
+ }
+ return $result;
+
+}
+
+
+####################################################################
+# Language #
+####################################################################
+
+
+=pod
+
+=item B<Language> ()
+
+Print the current language
+
+=cut
+
+sub Language {
+ my $self=shift;
+ return $self->{'language'};
+}
+
+####################################################################
+# Encoding #
+####################################################################
+
+
+=pod
+
+=item B<Encoding> ()
+
+Print the current encoding
+
+=cut
+
+sub Encoding {
+ my $self=shift;
+ return $self->{'encoding'};
+}
+
+
+####################################################################
+# GetFieldNames #
+####################################################################
+
+
+=pod
+
+=item B<GetFieldNames>();
+
+Outputs a reference to a hash
+"field_name_in_this_language"=>"field_name_in_English"
+
+=cut
+
+sub GetFieldNames() {
+ my $self=shift;
+ my %result=();
+
+ #
+ # The English names are default
+ #
+ %result=(
+ 'Id'=>'Id',
+ 'Name'=>'Name',
+ 'Sex'=>'Sex',
+ 'DoB'=>'DoB',
+ 'DoD'=>'DoD',
+ 'Mother'=>'Mother',
+ 'Father'=>'Father',
+ 'Proband'=>'Proband',
+ 'Condition'=>'Condition',
+ 'Type'=>'Type',
+ 'Twins'=>'Twins',
+ 'Comment'=>'Comment',
+ 'SortOrder'=>'SortOrder',
+ 'Sort'=>'SortOrder');
+
+ #
+ # Russian names depend on the encoding
+ #
+ if (($self->Language() eq 'russian') && ($self->Encoding() eq 'koi8-r')) {
+ $result{'éÄÅÎÔ'}='Id';
+ $result{'æéï'}='Name';
+ $result{'ðÏÌ'}='Sex';
+ $result{'òÏÖÄ'}='DoB';
+ $result{'õÍÅÒ'}='DoD';
+ $result{'íÁÔØ'}='Mother';
+ $result{'ïÔÅÃ'}='Father';
+ $result{'ðÒÏÂÁÎÄ'}='Proband';
+ $result{'óÏÓÔÏÑÎÉÅ'}='Condition';
+ $result{'ôÉÐ'}='Type';
+ $result{'âÌÉÚÎÅÃÙ'}='Twins';
+ $result{'ëÏÍÍÅÎÔÁÒÉÊ'}='Comment';
+ $result{'ðÏÒÑÄÏËóÏÒÔÉÒÏ×ËÉ'}='SortOrder';
+ $result{'óÏÒÔ'}='SortOrder';
+ }
+ if (($self->Language() eq 'russian') && ($self->Encoding() eq 'cp1251')) {
+ $result{'Èäåíò'}='Id';
+ $result{'ÔÈÎ'}='Name';
+ $result{'Ïîë'}='Sex';
+ $result{'Ðîæä'}='DoB';
+ $result{'Óìåð'}='DoD';
+ $result{'Ìàòü'}='Mother';
+ $result{'Îòåö'}='Father';
+ $result{'Ïðîáàíä'}='Proband';
+ $result{'Ñîñòîÿíèå'}='Condition';
+ $result{'Òèï'}='Type';
+ $result{'×íêÿïåçý'}='Twins';
+ $result{'Êîììåíòàðèé'}='Comment';
+ $result{'ÏîðÿäîêÑîðòèðîâêè'}='SortOrder';
+ $result{'Ñîðò'}='SortOrder';
+ }
+
+
+ return \%result;
+}
+
+####################################################################
+# GetValues #
+####################################################################
+
+
+=pod
+
+=item B<GetValues>();
+
+Outputs a reference to a hash
+"field_value_in_this_language"=>"field_value_in_English"
+
+=cut
+
+sub GetValues {
+ my $self=shift;
+ my %result=();
+
+ #
+ # The English values are default
+ #
+ %result=(
+ 'male'=>'male',
+ 'female'=>'female',
+ 'unknown'=>'unknown',
+ 'yes'=>1,
+ 'no'=>0,
+ 'normal'=>'normal',
+ 'obligatory'=>'obligatory',
+ 'oblig'=>'obligatory',
+ 'asymptomatic'=>'asymptomatic',
+ 'asymp'=>'asymptomatic',
+ 'affected'=>'affected',
+ 'affect'=>'affected',
+ 'infertile'=>'infertile',
+ 'Infertile'=>'infertile',
+ 'sab'=>'sab',
+ 'Sab'=>'sab',
+ 'monozygotic'=>'monozygotic',
+ 'monozygot'=>'monozygotic',
+ 'qzygotic'=>'qzygotic',
+ 'qzygot'=>'qzygotic',
+ '?'=>'qzygotic',
+ );
+
+ #
+ # Russian names depend on the encoding
+ #
+ if (($self->Language() eq 'russian') && ($self->Encoding() eq 'koi8-r')) {
+ $result{'ÍÕÖ'} = 'male';
+ $result{'ÖÅÎ'} = 'female';
+ $result{'Í'} = 'male';
+ $result{'Ö'} = 'female';
+ $result{'ÎÅÉÚ×'} = 'unknown';
+ $result{'ÎÅÉÚ×ÅÓÔÎÏ'} = 'unknown';
+ $result{'ÄÁ'} = 1;
+ $result{'ÎÅÔ'} = 0;
+ $result{'äÁ'} = 1;
+ $result{'îÅÔ'} = 0;
+ $result{'ÎÏÒÍ'} = 'normal';
+ $result{'ÚÄÏÒÏ×'} = 'normal';
+ $result{'ÏÂÌÉÇÁÔ'} = 'obligatory';
+ $result{'ÁÓÉÍÐ'} = 'asymptomatic';
+ $result{'ÂÏÌØÎ'} = 'affected';
+ $result{'ÂÏÌÅÎ'} = 'affected';
+ $result{'ÂÅÓÐÌÏÄÎ'} = 'infertile';
+ $result{'×ÙËÉÄÙÛ'} = 'sab';
+ $result{'ÏÄÎÏÑÊÃÅ×'} = 'monozygotic';
+ $result{'ÍÏÎÏÚÉÇÏÔÎ'} = 'monozygotic';
+ $result{'ÍÏÎÏÚÉÇ'} = 'monozygotic';
+ $result{'ÄÉÚÉÇ'} = '';
+ }
+
+ if (($self->Language() eq 'russian') && ($self->Encoding() eq 'cp1251')) {
+ $result{'ìóæ'} = 'male';
+ $result{'æåí'} = 'female';
+ $result{'ì'} = 'male';
+ $result{'æ'} = 'female';
+ $result{'íåèçâ'} = 'unknown';
+ $result{'íåèçâåñòíî'} = 'unknown';
+ $result{'äà'} = 1;
+ $result{'íåò'} = 0;
+ $result{'Äà'} = 1;
+ $result{'Íåò'} = 0;
+ $result{'íîðì'} = 'normal';
+ $result{'ÿäðôðþ'} = 'normal';
+ $result{'îáëèãàò'} = 'obligatory';
+ $result{'àñèìï'} = 'asymptomatic';
+ $result{'áîëüí'} = 'affected';
+ $result{'÷ðíåï'} = 'affected';
+ $result{'÷åõòíðäï'} = 'infertile';
+ $result{'þýìêäýù'} = 'sab';
+ $result{'ðäïðóëçåþ'} = 'monozygotic';
+ $result{'îðïðÿêúðæï'} = 'monozygotic';
+ $result{'îðïðÿêú'} = 'monozygotic';
+ $result{'äêÿêú'} = '';
+ }
+
+ return \%result;
+}
+
+####################################################################
+# GetSpecialNames #
+####################################################################
+
+
+=pod
+
+=item B<GetSpecialNames>();
+
+Some values for the 'Name' field start with C<#>. They are special.
+This subroutine outputs a reference to a hash
+"special_name_in_this_language"=>"special_name"
+
+=cut
+
+sub GetSpecialNames {
+ my $self=shift;
+ my %result=();
+
+ #
+ # The English values are default
+ #
+ %result=(
+ 'abort'=>'abortion',
+ 'childless'=>'childless',
+ );
+
+ #
+ # Russian names depend on the encoding
+ #
+ if (($self->Language() eq 'russian') && ($self->Encoding() eq 'koi8-r')) {
+ $result{'ÁÂÏÒÔ'} = 'abortion';
+ $result{'ÂÅÚÄÅÔÎ'} = 'childless';
+ }
+
+ if (($self->Language() eq 'russian') && ($self->Encoding() eq 'cp1251')) {
+ $result{'â÷ðôæ'} = 'abortion';
+ $result{'÷åÿäåæï'} = 'childless';
+ }
+
+ return \%result;
+}
+
+
+
+####################################################################
+# PrintField #
+####################################################################
+
+
+=pod
+
+=item B<PrintField>(I<$field>, I<$value>);
+
+Formats the value I<$value> of the given field I<$field> according
+to the rules of the given language.
+
+=cut
+
+sub PrintField {
+ my $self=shift;
+ my ($field, $value) = @_;
+
+
+ #
+ # The English values are default
+ #
+
+ if ($self->Language() eq 'english') {
+ if ($field eq 'DoB' ) {
+ return "born: $value";
+ }
+ if ($field eq 'DoD' ) {
+ return "died: $value";
+ }
+ if ($field eq 'AgeAtDeath') {
+ return "age at death: $value";
+ }
+ }
+
+ if ($self->Language() eq 'russian') {
+ if ($value eq 'unknown') {
+ $value = '{\cyr\cyrn\cyre\cyri\cyrz\cyrv.}';
+ }
+ if ($field eq 'DoB' ) {
+ return '{\cyr\cyrr\cyro\cyrd.}'." $value";
+ }
+ if ($field eq 'DoD') {
+ return '{\cyr\cyru\cyrm.}'." $value";
+ }
+ if ($field eq 'AgeAtDeath') {
+ return '{\cyr\cyru\cyrm. \cyrv{} \cyrv\cyro\cyrz\cyrr. }'." $value";
+ }
+ #
+ # Special name
+ #
+ if ($field eq 'Name' && $value eq 'abortion') {
+ return '{\cyr\cyra\cyrb\cyro\cyrr\cyrt}';
+ }
+ }
+
+
+ #
+ # The last resort
+ #
+ return $value;
+
+
+}
+
+
+
+####################################################################
+# THE END #
+####################################################################
+
+
+=pod
+
+=back
+
+=head1 ENVIRONMENT
+
+The calling program should define B<$main::DEBUG> and set it to 0
+or 1.
+
+=head1 SEE ALSO
+
+pedigree(1), Pedigree(3)
+
+=head1 AUTHOR
+
+Boris Veytsman, Leila Akhmadeeva, 2006, 2007
+
+
+
+=cut
+
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Makefile b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Makefile
new file mode 100644
index 0000000000..5afbb317dd
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Makefile
@@ -0,0 +1,42 @@
+#
+# Makefile for pedigree
+# $Id: Makefile,v 2.4 2007-07-09 22:49:33 boris Exp $
+#
+# This file is in public domain
+#
+
+PREFIX = /usr/local
+
+
+PERLLIBS = \
+ AbortionNode.pm \
+ Area.pm \
+ ChildlessNode.pm \
+ Language.pm \
+ MarriageNode.pm \
+ Node.pm \
+ Parser.pm \
+ PersonNode.pm \
+ TwinsNode.pm
+
+MANPAGES3=${PERLLIBS:%.pm=%.3}
+
+all: man
+
+man: ${MANPAGES3}
+
+install: all
+ mkdir -p $(PREFIX)/lib/site_perl/Pedigree
+ install -m 644 ${PERLLIBS} $(PREFIX)/lib/site_perl/Pedigree
+
+installman: all
+ for x in ${MANPAGES3}; do install -m 644 $$x $(PREFIX)/man/man3/Pedigree::$$x; done
+
+
+%.3: %.pm
+ pod2man --section=3 -n Pedigree::$* -s 3 $< $@
+
+clean:
+
+distclean: clean
+ $(RM) *.3
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.3
new file mode 100644
index 0000000000..780588f4c1
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.3
@@ -0,0 +1,215 @@
+.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Pedigree::MarriageNode 3"
+.TH Pedigree::MarriageNode 3 "2007-07-15" "perl v5.10.0" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Pedigree::MarriageNode \- a marriage in a pedigree
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+use Pedigree::MarriageNode;
+.PP
+\&\f(CW$node\fR = new Pedigree::MarriageNode(\fI\f(CI%params\fI\fR);
+.PP
+\&\f(CW$FSpouse\fR = \f(CW$node\fR\->\fIFSpouse()\fR;
+.PP
+\&\f(CW$MSpouse\fR = \f(CW$node\fR\->\fIMSpouse()\fR;
+.PP
+\&\f(CW$consang\fR = \f(CW$self\fR\->\fIisConsanguinic()\fR;
+.PP
+\&\f(CW$area\fR = \f(CW$node\fR\->\fISetArea()\fR;
+.PP
+\&\f(CW$node\fR\->CalcAbsCoord(\fI\f(CI$x\fI\fR, \fI\f(CI$y\fI\fR);
+.PP
+\&\f(CW$node\fR\->DrawNode(\fI\f(CI$xidst\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR,
+\&\fI\f(CI@fieldsfornode\fI\fR);
+.PP
+\&\f(CW$node\fR\->\fIDrawConnections()\fR;
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+This package contains data about a marriage.
+.Sp
+.RS 4
+\&\fBnew\fR(\fI\f(CI%params\fI\fR);
+.Sp
+Construct a new node from the given parameters.
+.Sp
+\&\fBFSpouse\fR();
+.Sp
+Get female spouse of a node.
+.Sp
+\&\fBMSpouse\fR();
+.Sp
+Get female spouse of a node.
+.Sp
+\&\fBisConsanguinic\fR();
+.Sp
+Check whether the node is consanguinic
+.Sp
+\&\fBSetArea\fR();
+.Sp
+Calculate relative coordinates for all nodes, that are descendants of
+the given node \fIand\fR the spouses that form the marriage. We create a
+\&\fIPedigree::Area\fR\|(3) around the given node and recursively apply the
+function to all descendants. The subroutine
+returns the reference to the created area.
+.Sp
+\&\fBCalcAbsCoor\fR(\fI\f(CI$x\fI\fR, $<y>);
+.Sp
+Set the absolute coordinates of the given node, if the absolute
+coordinates of the parent node are (\fI\f(CI$x\fI\fR, \fI\f(CI$y\fI\fR), and recursively
+do this for all descendants of this node, and right and left clumps.
+.Sp
+\&\fBDrawNode\fR(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR,
+\&\fI\f(CI@fieldsfornode\fI\fR);
+.Sp
+Output the command to draw this node. The parameters are
+distances between the nodes (in cm).
+.Sp
+\&\fBDrawConnections\fR();
+.Sp
+Draw the connections from the given node to its descendants and
+the spouses
+.RE
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0
+or 1.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3)
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman, Leila Akhmadeeva, 2006, 2007
+.SH "POD ERRORS"
+.IX Header "POD ERRORS"
+Hey! \fBThe above document had some coding errors, which are explained below:\fR
+.IP "Around line 33:" 4
+.IX Item "Around line 33:"
+You can't have =items (as at line 55) unless the first thing after the =over is an =item
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.pm
new file mode 100644
index 0000000000..39e20bf58f
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.pm
@@ -0,0 +1,346 @@
+=pod
+
+=head1 NAME
+
+Pedigree::MarriageNode - a marriage in a pedigree
+
+=head1 SYNOPSIS
+
+use Pedigree::MarriageNode;
+
+$node = new Pedigree::MarriageNode(I<%params>);
+
+$FSpouse = $node->FSpouse();
+
+$MSpouse = $node->MSpouse();
+
+$consang = $self->isConsanguinic();
+
+$area = $node->SetArea();
+
+$node->CalcAbsCoord(I<$x>, I<$y>);
+
+$node->DrawNode(I<$xidst>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>,
+I<@fieldsfornode>);
+
+$node->DrawConnections();
+
+
+=head1 DESCRIPTION
+
+This package contains data about a marriage.
+
+=over 4
+
+=cut
+
+
+
+####################################################################
+# Define the package #
+####################################################################
+
+package Pedigree::MarriageNode;
+use Pedigree;
+use strict;
+our @ISA=('Pedigree::Node');
+
+
+####################################################################
+# new #
+####################################################################
+
+=pod
+
+=item B<new>(I<%params>);
+
+Construct a new node from the given parameters.
+
+=cut
+
+sub new {
+ my ($class,%params)=@_;
+ my $self=$class->SUPER::new(%params);
+ if (!ref($self)) { # Bad node
+ return 0;
+ }
+
+ bless ($self,$class);
+
+ #
+ # Normally marriage nodes are not consanguinic
+ #
+ if (!exists($self->{'Consanguinic'})) {
+ $self->{'Consanguinic'} = 0;
+ }
+
+ # After we constructed the node, we want to move the kids
+ # from the parent nodes to the marriage node
+
+ my $selfId = $self->{'Id'};
+ if (exists($self->{'FSpouse'}) && exists($self->{'MSpouse'})) {
+ my $fspouse = $self->{'FSpouse'};
+ my $fspouseId = $fspouse->Id();
+ my $mspouse = $self->{'MSpouse'};
+ my $mspouseId = $mspouse->Id();
+
+
+ foreach my $kidId (keys %{$self->{'kids_by_parent_id'}->{$fspouseId}}) {
+ if ($main::DEBUG) {
+ print STDERR "Checking kid $kidId for $selfId\n";
+ }
+ if (exists ($self->{'kids_by_parent_id'}->{$mspouseId}->{$kidId})) {
+ if ($main::DEBUG) {
+ print STDERR
+ "Moving $kidId from $fspouseId and $mspouseId to ".
+ "$selfId\n";
+ }
+ delete $self->{'kids_by_parent_id'}->{$mspouseId}->{$kidId};
+ delete $self->{'kids_by_parent_id'}->{$fspouseId}->{$kidId};
+ $self->{'kids_by_parent_id'}->{$selfId}->{$kidId}=1;
+ }
+ }
+ }
+
+ return $self;
+}
+
+
+####################################################################
+# FSpouse #
+####################################################################
+
+=pod
+
+=item B<FSpouse>();
+
+Get female spouse of a node.
+
+=cut
+
+sub FSpouse {
+ my $self = shift;
+ return $self->{'FSpouse'};
+}
+
+
+####################################################################
+# MSpouse #
+####################################################################
+
+=pod
+
+=item B<MSpouse>();
+
+Get female spouse of a node.
+
+=cut
+
+sub MSpouse {
+ my $self = shift;
+ return $self->{'MSpouse'};
+}
+
+####################################################################
+# isConsanguinic #
+####################################################################
+
+=pod
+
+=item B<isConsanguinic>();
+
+Check whether the node is consanguinic
+
+=cut
+
+sub isConsanguinic {
+ my $self = shift;
+ return $self->{'Consanguinic'};
+}
+
+
+####################################################################
+# SetArea #
+####################################################################
+
+=pod
+
+=item B<SetArea>();
+
+Calculate relative coordinates for all nodes, that are descendants of
+the given node I<and> the spouses that form the marriage. We create a
+Pedigree::Area(3) around the given node and recursively apply the
+function to all descendants. The subroutine
+returns the reference to the created area.
+
+=cut
+
+sub SetArea {
+ my $self = shift;
+ my $area = $self->SUPER::SetArea();
+
+ #
+ # Female is to the right, male is to the left unless we have
+ # Sort Order set for anybody. If it is set, the order
+ # is OPPOSITE to the SortOrder
+ #
+ my ($left,$right) = ($self->MSpouse(), $self->FSpouse());
+ if ($left->SortOrder() <=> $right->SortOrder()) {
+ ($left,$right) =
+ sort {$a->SortOrder() <=> $b->SortOrder()} ($left,$right);
+ }
+ my ($rightRoot,$gen) = @{$right->FindRoot(0,-1)};
+ $rightRoot->SetRelY($gen);
+ my $rightArea=$rightRoot->SetArea();
+ $area->AddRight($rightArea);
+
+ my ($leftRoot,$gen) = @{$left->FindRoot(0,1)};
+ $leftRoot->SetRelY($gen);
+ my $leftArea=$leftRoot->SetArea();
+ $area->AddLeft($leftArea);
+
+ $self->{'Area'}=$area;
+
+ if ($main::DEBUG) {
+ print STDERR "Setting area for marriage node ",$self->Id(),"\n";
+ for (my $y=$area->GetYmin(); $y<=$area->GetYmax(); $y++) {
+ print STDERR "\t$y: ", $area->GetXmin($y), ", ",
+ $area->GetXmax($y), "\n";
+ }
+ }
+
+
+ return $area;
+}
+
+
+####################################################################
+# CalcAbsCoor #
+####################################################################
+
+=pod
+
+=item B<CalcAbsCoor>(I<$x>, $<y>);
+
+Set the absolute coordinates of the given node, if the absolute
+coordinates of the parent node are (I<$x>, I<$y>), and recursively
+do this for all descendants of this node, and right and left clumps.
+
+=cut
+
+sub CalcAbsCoor {
+ my $self=shift;
+ my ($x,$y) = @_;
+ $self->SUPER::CalcAbsCoor($x, $y);
+ $x += $self->GetRelX();
+ $y += $self->GetRelY();
+
+ my ($FRoot,undef) = @{$self->FSpouse()->FindRoot(0)};
+ $FRoot->CalcAbsCoor($x, $y);
+
+ my ($MRoot,undef) = @{$self->MSpouse()->FindRoot(0)};
+ $MRoot->CalcAbsCoor($x, $y);
+
+ return 0;
+}
+
+
+####################################################################
+# DrawNode #
+####################################################################
+
+=pod
+
+=item B<DrawNode>(I<$xdist>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>,
+I<@fieldsfornode>);
+
+Output the command to draw this node. The parameters are
+distances between the nodes (in cm).
+
+=cut
+
+sub DrawNode {
+ my $self=shift;
+ my ($xdist, $ydist, $belowtextfont, $abovetextfont, @fieldsfornode) = @_;
+ my $result = '\rput('.($xdist*$self->GetAbsX()).", ".
+ ($ydist*$self->GetAbsY()).'){\pnode{'.
+ $self->Id()."}}\n";
+ return $result;
+}
+
+####################################################################
+# DrawConnections #
+####################################################################
+
+=pod
+
+=item B<DrawConnections>();
+
+Draw the connections from the given node to its descendants and
+the spouses
+
+=cut
+
+sub DrawConnections {
+ my $self = shift;
+ my $xdist = shift;
+ my $ydist = shift;
+ my $result = $self->SUPER::DrawConnections($xdist, $ydist);
+ my $Id=$self->Id();
+ my $style="";
+ if ($self->isConsanguinic()) {
+ $style='doubleline=true, ';
+ }
+ foreach my $spouse ($self->FSpouse(), $self->MSpouse()) {
+ if (!ref($spouse)) {
+ next;
+ }
+ my $sId=$spouse->Id();
+ # Check whether spouse nodes are adjacent to the marriage node.
+ # We do this check only for non-consanguinic unions
+ if (!($self->isConsanguinic()) &&
+ (abs($self->GetIndexX() - $spouse->GetIndexX()) > 1)) {
+ my ($nodeA,$nodeB) = sort
+ {$a->GetIndexX() <=> $b->GetIndexX()} ($spouse, $self);
+ my $IdA=$nodeA->Id();
+ my $IdB=$nodeB->Id();
+ $result .=
+ "\\ncloop[$style angleA=0, angleB=180, loopsize=".
+ 0.4*$ydist . ', arm=' . 0.4*$xdist .
+ ']{'.$IdA.'}{'.$IdB.'}'."\n";
+ } else {
+ $result .= "\\ncline[$style]{".$Id.'}{'.$sId.'}'."\n";
+ }
+ }
+ return $result;
+}
+
+
+
+
+####################################################################
+# THE END #
+####################################################################
+
+=pod
+
+=back
+
+=head1 ENVIRONMENT
+
+The calling program should define B<$main::DEBUG> and set it to 0
+or 1.
+
+=head1 SEE ALSO
+
+pedigree(1), Pedigree(3)
+
+=head1 AUTHOR
+
+Boris Veytsman, Leila Akhmadeeva, 2006, 2007
+
+
+
+=cut
+
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.3
new file mode 100644
index 0000000000..0c6dba5c79
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.3
@@ -0,0 +1,379 @@
+.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Pedigree::Node 3"
+.TH Pedigree::Node 3 "2009-01-05" "perl v5.10.0" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Pedigree::Node \- the base package for nodes in pedigree charts
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+use Pedigree::Node;
+.PP
+\&\f(CW$node\fR = new Pedigree::Node(\fI\f(CI%params\fI\fR);
+.PP
+\&\f(CW$node\fR\->\fICheckAllParents()\fR;
+.PP
+\&\f(CW$Id\fR = \f(CW$node\fR\->\fIId()\fR;
+.PP
+\&\f(CW$node\fR\->SetSortOrder(\-1|0|1);
+.PP
+\&\f(CW$result\fR = \f(CW$node\fR\->\fISortOrder()\fR;
+.PP
+\&\f(CW$is_numbered\fR=$node\->\fIisNumbered()\fR;
+.PP
+\&\f(CW$type\fR = \f(CW$node\fR\->\fIType()\fR;
+.PP
+\&\f(CW$Kids\fR = \f(CW$node\fR\->\fIKids()\fR;
+.PP
+\&\f(CW$node\fR\->\fIGetAndSortKids()\fR;
+.PP
+($root, \f(CW$newgen\fR) = \f(CW$node\fR\->FindRoot(\fI\f(CI$generation\fI\fR, [\fI\f(CI$sort_order\fI\fR]);
+.PP
+\&\f(CW$x\fR = \f(CW$node\fR\->\fIGetRelX()\fR;
+.PP
+\&\f(CW$y\fR = \f(CW$node\fR\->\fIGetRelY()\fR;
+.PP
+\&\f(CW$node\fR\->SetRelX(\fI\f(CI$x\fI\fR);
+.PP
+\&\f(CW$node\fR\->SetRelX(\fI\f(CI$y\fI\fR);
+.PP
+\&\f(CW$x\fR = \f(CW$node\fR\->\fIGetAbsX()\fR;
+.PP
+\&\f(CW$y\fR = \f(CW$node\fR\->\fIGetAbsY()\fR;
+.PP
+\&\f(CW$node\fR\->SetIndexX(\fI\f(CI$n\fI\fR);
+.PP
+\&\f(CW$node\fR\->SetAbsX(\fI\f(CI$x\fI\fR);
+.PP
+\&\f(CW$node\fR\->SetAbsY(\fI\f(CI$y\fI\fR);
+.PP
+\&\f(CW$n\fR = \f(CW$node\fR\->\fIGetIndexX()\fR;
+.PP
+\&\f(CW$area\fR = \f(CW$node\fR\->\fISetArea()\fR;
+.PP
+\&\f(CW$delta\fR = \f(CW$node\fR\->\fICenterKids()\fR;
+.PP
+\&\f(CW$node\fR\->CalcAbsCoord(\fI\f(CI$x\fI\fR, \fI\f(CI$y\fI\fR);
+.PP
+\&\f(CW$node\fR\->\fIAddConsanguinicMarriages()\fR;
+.PP
+\&\f(CW$node\fR\->AddTwins($ydist);
+.PP
+\&\f(CW$frame\fR = \f(CW$node\fR\->SetFrame(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR);
+.PP
+\&\f(CW$node\fR\->DrawAll(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR,
+ \fI\f(CI@fieldsfornode\fI\fR);
+.PP
+\&\f(CW$node\fR\->\fIDrawConnections()\fR;
+.PP
+\&\f(CW$node\fR\->PrintAllLegends(\fI\f(CI$land\fI\fR, \fI\f(CI@fields\fI\fR);
+.PP
+\&\f(CW$node\fR\->PrintLegend(\fI\f(CI$land\fI\fR, \fI\f(CI@fields\fI\fR);
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+This is the basic package that defines nodes for pedigrees.
+\&\fIPedigree::PersonNode\fR\|(3) and \fIPedigree::MarriageNode\fR\|(3) inherit from
+this package.
+.Sp
+.RS 4
+\&\fBnew\fR(\fI\f(CI%params\fI\fR);
+.Sp
+Construct a new node from the given parameters. If a node with
+the give Id exists, add new information to the node.
+.Sp
+\&\fBCheckAllParents\fR();
+.Sp
+Check whether mothers and fathers of all nodes exist
+.Sp
+\&\fBId\fR();
+.Sp
+Get Id of a node. Note that there is no way to set an Id of a node
+that was already created.
+.Sp
+\&\fBSetSortOrder\fR(\fI\-1|0|1\fR);
+.Sp
+Normally the sibs nodes are sorted by age. However, if the nodes or
+their descendants are connected by a marriage line, we must sort them
+in the special way: all way to the left or all way to the right. The
+procedure \fBSetSortOrder\fR sets this flag for the node or deletes it
+depending on the argument.
+.Sp
+\&\fBSortOrder\fR();
+.Sp
+Normally the sibs nodes are sorted by age. However, if the nodes or
+their descendants are connected by a marriage line, we must sort them
+in the special way: all way to the left or all way to the right. The
+procedure \fBSortOrder\fR checks this flag.
+.Sp
+\&\fBisNumbered\fR();
+.Sp
+Check whether the node should be numbered in pedigree
+.Sp
+\&\fBType\fR()
+.Sp
+Return node type.
+.Sp
+\&\fBKids\fR();
+.Sp
+Get the reference to the array of kids
+.Sp
+\&\fBGetAndSortKids\fR();
+.Sp
+Apply sort the array of kids for the given node
+.Sp
+\&\fBFindRoot\fR(\fI\f(CI$generation\fI\fR, [\fI\f(CI$sort_order\fI\fR]);
+.Sp
+Finds the root of the tree to which the current node belongs.
+Takes the current generation number and returns the root and its
+generation number. Here generation numbers go \*(L"backwards\*(R": the older
+generations have higher numbers. The found node is assigned sort order
+\&\fI\f(CI$sort_order\fI\fR.
+.Sp
+\&\fBGetRelX\fR();
+.Sp
+Find the relative x coordinate of the node. The coordinate is
+relative to the precedessor or to the marriage node, which connects
+this node to the proband
+.Sp
+\&\fBGetRelY\fR();
+.Sp
+Find the relative Y coordinate of the node. The coordinate is
+relative to the precedessor or to the marriage node, which connects
+this node to the proband. Note that the Y axis is down.
+.Sp
+\&\fBSetRelX\fR(\fI\f(CI$x\fI\fR);
+.Sp
+Set the relative x coordinate of the node. The coordinate is
+relative to the precedessor or to the marriage node, which connects
+this node to the proband.
+.Sp
+\&\fBSetRelY\fR(\fI\f(CI$y\fI\fR);
+.Sp
+Set the relative y coordinate of the node. The coordinate is
+relative to the precedessor or to the marriage node, which connects
+this node to the proband. Note that the Y axis is down.
+.Sp
+\&\fBGetAbsX\fR();
+.Sp
+Find the absolute x coordinate of the node.
+.Sp
+\&\fBGetAbsY\fR();
+.Sp
+Find the absolute Y coordinate of the node.
+.Sp
+\&\fBGetIndexX\fR();
+.Sp
+Find the number of the node in the given generation.
+.Sp
+\&\fBSetAbsX\fR(\fI\f(CI$x\fI\fR);
+.Sp
+Set the absolute x coordinate of the node.
+.Sp
+\&\fBSetAbsY\fR(\fI\f(CI$y\fI\fR);
+.Sp
+Set the absolute y coordinate of the node.
+.Sp
+\&\fBSetIndexX\fR(\fI\f(CI$n\fI\fR);
+.Sp
+Set the number of the node in the given generation.
+.Sp
+\&\fBSetArea\fR();
+.Sp
+Calculate relative coordinates for all nodes, that are descendants of
+the given node. We create a \fIPedigree::Area\fR\|(3) around the given node
+and recursively apply the function to all descendants. The subroutine
+returns the reference to the created area.
+.Sp
+\&\fBCenterKids\fR();
+.Sp
+Move the relative coordinates of all the kids of the given node
+so the given node is centered in relation to the kids. Returns
+the shift to be applied to the \fIPedigree::Area\fR\|(3).
+.Sp
+\&\fBCalcAbsCoor\fR(\fI\f(CI$x\fI\fR, $<y>);
+.Sp
+Set the absolute coordinates of the given node, if the absolute
+coordinates of the parent node are (\fI\f(CI$x\fI\fR, \fI\f(CI$y\fI\fR), and recursively
+do this for all descendants of this node. Additionally set up
+\&\fB\f(CB%node_by_gen\fB\fR.
+.Sp
+\&\fBAddConsanguinicMarriages\fR();
+.Sp
+Check the pedigree and add consanguinic marriages to it. Note
+that this procedure must be called \fBafter\fR SetAbsCoor, so
+the coordinates of all nodes are set.
+.Sp
+\&\fBAddTwins\fR(\fI\f(CI$ydist\fI\fR);
+.Sp
+Check the pedigree and add twin nodes. Note
+that this procedure must be called \fBafter\fR SetAbsCoor and
+AddConsanguinicMarriages.
+.Sp
+\&\fBSetFrame\fR(\fI\f(CI$xidst\fI\fR, \fI\f(CI$ydist\fI\fR);
+.Sp
+Calculate the frame: coordinates of the lower left and upper right
+corners of the picture (in ps units). As a side effect, add generation
+numbers to each person node and calculate the X index of each node.
+.Sp
+\&\fBDrawConnections\fR();
+.Sp
+Draw the connections from the given node to its descendants
+.Sp
+\&\fBDrawAll\fR(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR,
+ \fI\f(CI$abovetextfont\fI\fR, \fI\f(CI@fieldsfornode\fI\fR);
+.Sp
+Draw all nodes and connections in the form suitable for
+pspicture
+.Sp
+\&\fBPrintAllLegends\fR(\fI\f(CI$lang\fI\fR, \fI\f(CI@fields\fI\fR);
+.Sp
+Print legend for all the nodes. The first parameter is the
+language, the other is the fields to be included in the legend.
+.Sp
+\&\fBPrintLegend\fR(\fI\f(CI$lang\fI\fR, \fI\f(CI@fields\fI\fR);
+.Sp
+This subroutine does nothing: a generic node has no legend. It
+is overriden by \fIPedigree::PersonNode\fR\|(3) and \fIPedigree::AbortionNode\fR\|(3).
+.RE
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0
+or 1.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3)
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman, Leila Akhmadeeva, 2006, 2007
+.SH "POD ERRORS"
+.IX Header "POD ERRORS"
+Hey! \fBThe above document had some coding errors, which are explained below:\fR
+.IP "Around line 80:" 4
+.IX Item "Around line 80:"
+You can't have =items (as at line 136) unless the first thing after the =over is an =item
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.pm
new file mode 100644
index 0000000000..445f92abaf
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.pm
@@ -0,0 +1,1240 @@
+=pod
+
+=head1 NAME
+
+Pedigree::Node - the base package for nodes in pedigree charts
+
+=head1 SYNOPSIS
+
+use Pedigree::Node;
+
+$node = new Pedigree::Node(I<%params>);
+
+$node->CheckAllParents();
+
+$Id = $node->Id();
+
+$node->SetSortOrder(-1|0|1);
+
+$result = $node->SortOrder();
+
+$is_numbered=$node->isNumbered();
+
+$type = $node->Type();
+
+$Kids = $node->Kids();
+
+$node->GetAndSortKids();
+
+($root, $newgen) = $node->FindRoot(I<$generation>, [I<$sort_order>]);
+
+$x = $node->GetRelX();
+
+$y = $node->GetRelY();
+
+$node->SetRelX(I<$x>);
+
+$node->SetRelX(I<$y>);
+
+$x = $node->GetAbsX();
+
+$y = $node->GetAbsY();
+
+$node->SetIndexX(I<$n>);
+
+$node->SetAbsX(I<$x>);
+
+$node->SetAbsY(I<$y>);
+
+$n = $node->GetIndexX();
+
+$area = $node->SetArea();
+
+$delta = $node->CenterKids();
+
+
+$node->CalcAbsCoord(I<$x>, I<$y>);
+
+$node->AddConsanguinicMarriages();
+
+$node->AddTwins($ydist);
+
+$frame = $node->SetFrame(I<$xdist>, I<$ydist>);
+
+
+$node->DrawAll(I<$xdist>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>,
+ I<@fieldsfornode>);
+
+$node->DrawConnections();
+
+$node->PrintAllLegends(I<$land>, I<@fields>);
+
+$node->PrintLegend(I<$land>, I<@fields>);
+
+=head1 DESCRIPTION
+
+This is the basic package that defines nodes for pedigrees.
+Pedigree::PersonNode(3) and Pedigree::MarriageNode(3) inherit from
+this package.
+
+=over 4
+
+=cut
+
+####################################################################
+# Define the package #
+####################################################################
+
+package Pedigree::Node;
+use strict;
+use Pedigree;
+
+####################################################################
+# package variables #
+####################################################################
+
+#
+# The pool: %node_by_id keeps the relation between
+# nodes and references
+#
+
+our %node_by_id;
+
+#
+# The hash %node_by_gen is a hash of hasehs. The keys
+# are generation numbers (with zero being the root of pedigree),
+# and the values are the hashes Id->node
+#
+our %node_by_gen;
+
+#
+# The hash %kids_by_parent_id is a hash of hashes. The keys are
+# Ids of parents. The hashes are $kid->1, where $kid is the kid id
+# (NOT the kid node due to limitations of Perl)
+#
+our %kids_by_parent_id;
+
+#
+# The array @twin_sets lists all twin nodes. Each twin node is
+# a has with entries 'Type' and 'KidIds'. They store
+# twins type (monozygotic, qzygotic or empty) and Ids of the
+# kid nodes correspondingly (KidIds is actually a hash of
+# node Ids).
+#
+our @twin_sets;
+
+####################################################################
+# And package methods #
+####################################################################
+
+####################################################################
+# new #
+####################################################################
+
+=pod
+
+=item B<new>(I<%params>);
+
+Construct a new node from the given parameters. If a node with
+the give Id exists, add new information to the node.
+
+=cut
+
+sub new {
+ my ($class,%params)=@_;
+
+ if (!exists($params{'Id'})) {
+ print STDERR "Warning: cannot create node from %params\n";
+ return 0;
+ }
+
+ my $Id=$params{'Id'};
+ my $self;
+ if (exists($node_by_id{$Id})) {
+ $self=$node_by_id{$Id};
+ } else {
+ $self={};
+ bless ($self,$class);
+ $node_by_id{$Id}=$self;
+ }
+
+ foreach my $key (keys %params) {
+ $self->{$key} = $params{$key};
+ }
+
+ #
+ # Calculate age at death
+ #
+ if (exists($self->{'DoB'}) && exists($self->{'DoD'})) {
+ $self->{'AgeAtDeath'} = 'unknown';
+ if (($self->{'DoB'} ne 'unknown') &&
+ ($self->{'DoD'} ne 'unknown')) {
+ my ($y1, $m1, $d1) = split /\./, $self->{'DoB'};
+ my ($y2, $m2, $d2) = split /\./, $self->{'DoD'};
+ $self->{'AgeAtDeath'} = int(($y2-$y1) + ($m2-$m1)/12
+ + ($d2-$d1)/12/30);
+ }
+ }
+
+
+ #
+ # Only Person Nodes are numbered in pedigrees
+ #
+ $self->{'Numbered'}=0;
+
+ #
+ # The field 'Kids' is special. This is a reference
+ # to an array filled by GetAndSortKids()
+ #
+ if (!exists($self->{'Kids'})) {
+ $self->{'Kids'}=[];
+ }
+
+ #
+ # Hashes %kids_by_parent_id
+ #
+ if (exists($self->{'Mother'})) {
+ my $parent = $self->{'Mother'};
+ $kids_by_parent_id{$parent}->{$self->Id()}=1;
+ }
+ if (exists($self->{'Father'})) {
+ my $parent = $self->{'Father'};
+ $kids_by_parent_id{$parent}->{$self->Id()}=1;
+ }
+
+ #
+ # Add references to the hashes
+ #
+
+ $self->{'node_by_id'} = \%node_by_id;
+ $self->{'node_by_gen'} = \%node_by_gen;
+ $self->{'kids_by_parent_id'} = \%kids_by_parent_id;
+ $self->{'twin_sets'} = \@twin_sets;
+
+ #
+ # Initially the nodes are sorted by age only
+ #
+ if (!($self->{'SortOrder'})) {
+ $self->{'SortOrder'} = 0;
+ }
+
+
+ return $self;
+
+}
+
+####################################################################
+# CheckAllParents #
+####################################################################
+
+=pod
+
+=item B<CheckAllParents>();
+
+Check whether mothers and fathers of all nodes exist
+
+=cut
+
+sub CheckAllParents {
+ my $self = shift;
+
+ foreach my $parentId (keys %kids_by_parent_id) {
+ if (!exists($node_by_id{$parentId}) ) {
+ print STDERR
+ "Node $parentId does not exist and is listed as parent for nodes";
+ foreach my $kidId (keys %{$kids_by_parent_id{$parentId}}) {
+ print STDERR " ", $kidId;
+ my $kid = $node_by_id{$kidId};
+ if ($kid->{'Mother'} eq $parentId) {
+ delete $kid->{'Mother'};
+ }
+ if ($kid->{'Father'} eq $parentId) {
+ delete $kid->{'Father'};
+ }
+ }
+ print STDERR ". Deleting\n";
+ delete $kids_by_parent_id{$parentId};
+ } elsif ($main::DEBUG) {
+ print STDERR "Node $parentId is OK\n";
+ }
+ }
+
+ return 0;
+}
+
+
+####################################################################
+# Id #
+####################################################################
+
+=pod
+
+=item B<Id>();
+
+Get Id of a node. Note that there is no way to set an Id of a node
+that was already created.
+
+=cut
+
+sub Id {
+ my $self = shift;
+ return $self->{'Id'};
+}
+
+####################################################################
+# SetSortOrder #
+####################################################################
+
+=pod
+
+=item B<SetSortOrder>(I<-1|0|1>);
+
+Normally the sibs nodes are sorted by age. However, if the nodes or
+their descendants are connected by a marriage line, we must sort them
+in the special way: all way to the left or all way to the right. The
+procedure B<SetSortOrder> sets this flag for the node or deletes it
+depending on the argument.
+
+=cut
+
+sub SetSortOrder {
+ my $self = shift;
+ my $order = shift;
+ $self->{'SortOrder'}=$order;
+ return $order;
+}
+
+####################################################################
+# SortOrder #
+####################################################################
+
+=pod
+
+=item B<SortOrder>();
+
+Normally the sibs nodes are sorted by age. However, if the nodes or
+their descendants are connected by a marriage line, we must sort them
+in the special way: all way to the left or all way to the right. The
+procedure B<SortOrder> checks this flag.
+
+=cut
+
+sub SortOrder {
+ my $self = shift;
+ return $self->{'SortOrder'};
+}
+
+####################################################################
+# isNumbered #
+####################################################################
+
+=pod
+
+=item B<isNumbered>();
+
+Check whether the node should be numbered in pedigree
+
+=cut
+
+sub isNumbered {
+ my $self = shift;
+ return $self->{'Numbered'};
+}
+
+####################################################################
+# Type #
+####################################################################
+
+=pod
+
+=item B<Type>()
+
+Return node type.
+
+=cut
+
+sub Type {
+ my $self=shift;
+ return $self->{'Type'};
+}
+
+
+
+####################################################################
+# Kids #
+####################################################################
+
+=pod
+
+=item B<Kids>();
+
+Get the reference to the array of kids
+
+=cut
+
+sub Kids {
+ my $self = shift;
+ return $self->{'Kids'};
+}
+
+
+####################################################################
+# GetAndSortKids #
+####################################################################
+
+=pod
+
+=item B<GetAndSortKids>();
+
+Apply sort the array of kids for the given node
+
+=cut
+
+sub GetAndSortKids {
+ my $self=shift;
+ my @kids;
+ my $Id = $self->Id();
+ foreach my $kidId (keys %{$self->{'kids_by_parent_id'}->{$Id}}) {
+ push @kids, $self->{'node_by_id'}->{$kidId};
+ }
+ @kids = sort by_sibs_order @kids;
+ $self->{'Kids'}=\@kids;
+ if ($main::DEBUG) {
+ print STDERR "Node ",$self->Id(),", Kids: ";
+ foreach my $kid (@{$self->Kids()}) {
+ print STDERR $kid->Id(), " ";
+ }
+ print STDERR "\n";
+ }
+ return 0;
+}
+
+####################################################################
+# FindRoot #
+####################################################################
+
+=pod
+
+=item B<FindRoot>(I<$generation>, [I<$sort_order>]);
+
+Finds the root of the tree to which the current node belongs.
+Takes the current generation number and returns the root and its
+generation number. Here generation numbers go "backwards": the older
+generations have higher numbers. The found node is assigned sort order
+I<$sort_order>.
+
+=cut
+
+sub FindRoot {
+ my ($self,$gen,$sort)=@_;
+
+ if (defined $sort && !($self->SortOrder())) {
+ $self->SetSortOrder($sort);
+ }
+
+ # If there are no parents, I am the root
+ if (!exists($self->{'Mother'}) && !exists($self->{'Father'})) {
+ my @result=($self,$gen);
+ return \@result;
+ }
+
+ # If there are both parents, their union is the root
+ if (exists($self->{'Mother'}) && exists($self->{'Father'})) {
+ my $motherId=$self->{'Mother'};
+ my $mother=$node_by_id{$motherId};
+ my $fatherId=$self->{'Father'};
+ my $father=$node_by_id{$fatherId};
+
+
+ my $marriageId = $fatherId."_m_".$motherId;
+ my $marriage =
+ new Pedigree::MarriageNode (
+ 'Id'=>$marriageId,
+ 'MSpouse'=>$father,
+ 'FSpouse'=>$mother
+ );
+ if (defined $sort) {
+ $marriage->SetSortOrder($sort);
+ }
+ my @result = ($marriage,$gen+1);
+ return \@result;
+ }
+
+ # Ok, only one parent is there. The search goes further
+
+ my $parentId;
+ if (exists($self->{'Mother'})) {
+ $parentId=$self->{'Mother'};
+ } else {
+ $parentId=$self->{'Father'};
+ }
+ my $parent=$node_by_id{$parentId};
+ return $parent->FindRoot($gen+1,$sort);
+}
+
+####################################################################
+# GetRelX #
+####################################################################
+
+=pod
+
+=item B<GetRelX>();
+
+Find the relative x coordinate of the node. The coordinate is
+relative to the precedessor or to the marriage node, which connects
+this node to the proband
+
+=cut
+
+sub GetRelX {
+ my $self = shift;
+ return $self->{'RelX'};
+}
+
+####################################################################
+# GetRelY #
+####################################################################
+
+=pod
+
+=item B<GetRelY>();
+
+Find the relative Y coordinate of the node. The coordinate is
+relative to the precedessor or to the marriage node, which connects
+this node to the proband. Note that the Y axis is down.
+
+=cut
+
+sub GetRelY {
+ my $self = shift;
+ return $self->{'RelY'};
+}
+
+
+####################################################################
+# SetRelX #
+####################################################################
+
+=pod
+
+=item B<SetRelX>(I<$x>);
+
+Set the relative x coordinate of the node. The coordinate is
+relative to the precedessor or to the marriage node, which connects
+this node to the proband.
+
+=cut
+
+sub SetRelX {
+ my ($self, $x) = @_;
+ $self->{'RelX'} = $x;
+ return 0;
+}
+
+####################################################################
+# SetRelY #
+####################################################################
+
+=pod
+
+=item B<SetRelY>(I<$y>);
+
+Set the relative y coordinate of the node. The coordinate is
+relative to the precedessor or to the marriage node, which connects
+this node to the proband. Note that the Y axis is down.
+
+=cut
+
+sub SetRelY {
+ my ($self, $y) = @_;
+ $self->{'RelY'} = $y;
+ return 0;
+}
+
+####################################################################
+# GetAbsX #
+####################################################################
+
+=pod
+
+=item B<GetAbsX>();
+
+Find the absolute x coordinate of the node.
+
+=cut
+
+sub GetAbsX {
+ my $self = shift;
+ return $self->{'AbsX'};
+}
+
+####################################################################
+# GetAbsY #
+####################################################################
+
+=pod
+
+=item B<GetAbsY>();
+
+Find the absolute Y coordinate of the node.
+
+=cut
+
+sub GetAbsY {
+ my $self = shift;
+ return $self->{'AbsY'};
+}
+
+####################################################################
+# GetIndexX #
+####################################################################
+
+=pod
+
+=item B<GetIndexX>();
+
+Find the number of the node in the given generation.
+
+=cut
+
+sub GetIndexX {
+ my $self = shift;
+ return $self->{'IndexX'};
+}
+
+
+
+####################################################################
+# SetAbsX #
+####################################################################
+
+=pod
+
+=item B<SetAbsX>(I<$x>);
+
+Set the absolute x coordinate of the node.
+
+=cut
+
+sub SetAbsX {
+ my ($self, $x) = @_;
+ $self->{'AbsX'} = $x;
+ return 0;
+}
+
+####################################################################
+# SetAbsY #
+####################################################################
+
+=pod
+
+=item B<SetAbsY>(I<$y>);
+
+Set the absolute y coordinate of the node.
+
+=cut
+
+sub SetAbsY {
+ my ($self, $y) = @_;
+ $self->{'AbsY'} = $y;
+ return 0;
+}
+
+
+####################################################################
+# SetIndexX #
+####################################################################
+
+=pod
+
+=item B<SetIndexX>(I<$n>);
+
+Set the number of the node in the given generation.
+
+=cut
+
+sub SetIndexX {
+ my ($self, $n) = @_;
+ $self->{'IndexX'} = $n;
+ return 0;
+}
+
+
+
+####################################################################
+# SetArea #
+####################################################################
+
+=pod
+
+=item B<SetArea>();
+
+Calculate relative coordinates for all nodes, that are descendants of
+the given node. We create a Pedigree::Area(3) around the given node
+and recursively apply the function to all descendants. The subroutine
+returns the reference to the created area.
+
+=cut
+
+sub SetArea {
+ my $self = shift;
+ $self->GetAndSortKids();
+ my $area = new Pedigree::Area ($self);
+ foreach my $kid (@{$self->Kids()}) {
+ my $kidarea = $kid->SetArea();
+ $kid->SetRelY(-1);
+ $area->AddRight($kidarea);
+ }
+ #
+ # We want the node to be the center of siblings
+ # subtrees
+ #
+ my $deltaX=$self->CenterKids();
+ $area->MoveLowerLayers($deltaX);
+ if ($main::DEBUG) {
+ print STDERR "Setting area for ",$self->Id(),"\n";
+ for (my $y=$area->GetYmin(); $y<=$area->GetYmax(); $y++) {
+ print STDERR "\t$y: ", $area->GetXmin($y), ", ",
+ $area->GetXmax($y), "\n";
+ }
+ }
+ $self->{'Area'} = $area;
+ return $area;
+}
+
+####################################################################
+# CenterKids #
+####################################################################
+
+=pod
+
+=item B<CenterKids>();
+
+Move the relative coordinates of all the kids of the given node
+so the given node is centered in relation to the kids. Returns
+the shift to be applied to the Pedigree::Area(3).
+
+=cut
+
+sub CenterKids {
+ my $self=shift;
+ my $nKids=scalar @{$self->Kids()};
+ if ($nKids < 2) { # One or no kids - no need to center
+ return 0;
+ }
+ my $x0 = $self->Kids()->[0]->GetRelX();
+ my $x1 = $self->Kids()->[$nKids-1]->GetRelX();
+ my $delta = -($x0+$x1)/2;
+ foreach my $kid (@{$self->Kids()}) {
+ $kid->SetRelX($kid->GetRelX()+$delta);
+ }
+ return $delta;
+}
+
+
+####################################################################
+# CalcAbsCoor #
+####################################################################
+
+=pod
+
+=item B<CalcAbsCoor>(I<$x>, $<y>);
+
+Set the absolute coordinates of the given node, if the absolute
+coordinates of the parent node are (I<$x>, I<$y>), and recursively
+do this for all descendants of this node. Additionally set up
+B<%node_by_gen>.
+
+=cut
+
+sub CalcAbsCoor {
+ my $self=shift;
+ my ($x,$y) = @_;
+ $x += $self->GetRelX();
+ $y += $self->GetRelY();
+ #
+ # Consanguinic kids may be already set
+ #
+ if (!exists($self->{'AbsY'}) || $self->{'AbsY'} > $y) {
+ $self->SetAbsX($x);
+ $self->SetAbsY($y);
+ foreach my $kid (@{$self->Kids()}) {
+ $kid->CalcAbsCoor($x,$y);
+ }
+ $node_by_gen{$y}->{$self->Id()}= $self;
+ if ($main::DEBUG) {
+ print STDERR "Abs Coords for ", $self->Id(), ": $x, $y\n";
+ }
+ } else {
+ if ($main::DEBUG) {
+ print STDERR "Not setting abs coords for ",$self->Id(),"\n";
+ }
+ }
+
+ return 0;
+}
+
+
+####################################################################
+# AddConsanguinicMarriages #
+####################################################################
+
+=pod
+
+=item B<AddConsanguinicMarriages>();
+
+Check the pedigree and add consanguinic marriages to it. Note
+that this procedure must be called B<after> L<SetAbsCoor>, so
+the coordinates of all nodes are set.
+
+=cut
+
+#
+# This is rather a hack. Basically we think that a union is
+# consanguinic if the spouses are already set in the pedigree.
+# We check all kids which are in the pedigree and add those
+# who have both mother and father that list them as kids.
+#
+
+sub AddConsanguinicMarriages {
+ my $self = shift;
+ foreach my $gen (keys %node_by_gen) {
+ foreach my $kid (values %{$node_by_gen{$gen}}) {
+ if (!exists($kid->{'Mother'}) ||
+ !exists($kid->{'Father'})) {
+ next; # kid
+ }
+ my $motherId=$kid->MotherId();
+ my $fatherId=$kid->FatherId();
+ my $mother=$node_by_id{$motherId};
+ my $father=$node_by_id{$fatherId};
+ if (!exists($mother->{'AbsX'}) ||
+ !exists($father->{'AbsX'})) {
+ next; # kid
+ }
+ if (exists($node_by_id{$fatherId."_m_".$motherId})) {
+ next; # kid
+ }
+ #
+ # If we are here, we found a consangunic marriage!
+ #
+ if ($main::DEBUG) {
+ print STDERR "Found a consanguinic marriage between ",
+ "$fatherId and $motherId. The kid is ",
+ $kid->Id(), "\n";
+ }
+ my $marriageId=$fatherId."_m_".$motherId;
+ my $marriage=
+ new Pedigree::MarriageNode (
+ Id=>$marriageId,
+ 'Consanguinic'=>1,
+ 'FSpouse'=>$mother,
+ 'MSpouse'=>$father
+ );
+ #
+ # We set up this node in the middle between father
+ # and mother
+ #
+ $marriage->SetAbsX(($father->GetAbsX()+$mother->GetAbsX())/2);
+ $marriage->SetAbsY(($father->GetAbsY()+$mother->GetAbsY())/2);
+ $node_by_gen{$marriage->GetAbsY()}->{$marriageId}= $marriage;
+
+ #
+ # Repopulate parents' kids
+ #
+ $mother->GetAndSortKids();
+ $father->GetAndSortKids();
+
+ #
+ # We would like to make the kids to belong to this marriage,
+ # but it might be wrong: it might be in the wrong generation!
+ # Let is check it
+ if (($marriage->GetAbsY() - $kid->GetAbsY()) == 1) {
+ $marriage->GetAndSortKids();
+ } else {
+ #
+ # Ok, we need an additional node. It has the same
+ # abscissa as $marriage, but is one generation above kids
+ #
+ my $marriage1Id=$fatherId."_m1_".$motherId;
+ my $marriage1 =
+ new Pedigree::MarriageNode (
+ Id=>$marriage1Id,
+ 'Consanguinic'=>1,
+ );
+ $marriage1->SetAbsX($marriage->GetAbsX());
+ $marriage1->SetAbsY(1+$kid->GetAbsY());
+ $node_by_gen{$marriage1->GetAbsY()}->{$marriage1Id}=
+ $marriage1;
+ #
+ # Now we transfer kids
+ #
+ $kids_by_parent_id{$marriage1Id} =
+ $kids_by_parent_id{$marriageId};
+ delete $kids_by_parent_id{$marriageId};
+ $kids_by_parent_id{$marriageId}->{$marriage1Id}=1;
+ $marriage->GetAndSortKids();
+ $marriage1->GetAndSortKids();
+ }
+ }
+ }
+}
+
+
+####################################################################
+# AddTwins #
+####################################################################
+
+=pod
+
+=item B<AddTwins>(I<$ydist>);
+
+Check the pedigree and add twin nodes. Note
+that this procedure must be called B<after> L<SetAbsCoor> and
+L<AddConsanguinicMarriages>.
+
+=cut
+
+sub AddTwins {
+ my $self = shift;
+ my $ydist= shift;
+ #
+ # First, delete all kids from $twin_sets, for which there
+ # are no nodes
+ #
+ foreach my $set (@twin_sets) {
+ foreach my $kidId (keys %{$set->{'KidIds'}}) {
+ if (!exists($node_by_id{$kidId})) {
+ delete $set->{'KidIds'}->{$kidId};
+ if ($main::DEBUG) {
+ print STDERR "Bad node \"$kidId\" in twin sets\n";
+ }
+ }
+ }
+ }
+
+ #
+ # Now we are ready to check for twins
+ #
+ foreach my $gen (keys %node_by_gen) {
+ foreach my $parentId (keys %{$node_by_gen{$gen}}) {
+ foreach my $kidId (keys %{$kids_by_parent_id{$parentId}}) {
+ for (my $i=0; $i<scalar @twin_sets; $i++) {
+ if (exists $twin_sets[$i]->{'KidIds'}->{$kidId}) {
+ my @kidIds = keys %{$twin_sets[$i]->{'KidIds'}};
+ my $type = $twin_sets[$i]->{'Type'};
+ my $twinsId = 't_'.join('_',@kidIds);
+ my $twinsNode =
+ Pedigree::TwinsNode->new (
+ 'Id'=>$twinsId,
+ 'Type'=>$type,
+ 'ParentId'=>$parentId,
+ 'KidIds'=>
+ $twin_sets[$i]->{'KidIds'}
+ );
+ #
+ # Change kids
+ #
+ my $parent = $node_by_id{$parentId};
+ $parent->GetAndSortKids();
+ $twinsNode->GetAndSortKids();
+
+ #
+ # Now the coordinates of the node.
+ # It is centered over kids nodes and 0.24 $ydist above
+ #
+ my @kids = sort {$a->GetAbsX() <=>
+ $b->GetAbsX()}
+ @{$twinsNode->Kids()};
+ my $leftKid=$kids[0];
+ my $rightKid=$kids[scalar(@kids)-1];
+ $twinsNode->SetAbsX(($leftKid->GetAbsX() +
+ $rightKid->GetAbsX())/2.0);
+ $twinsNode->SetAbsY($leftKid->GetAbsY() +
+ 0.2*$ydist);
+ $node_by_gen{$twinsNode->GetAbsY()}->
+ {$twinsId}= $twinsNode;
+
+ #
+ # There is no need to keep this in the twins set
+ #
+ splice @twin_sets, $i,1;
+ last; # twin_sets
+ }
+ }
+ }
+ }
+ }
+ return 0;
+}
+
+
+
+
+
+####################################################################
+# SetFrame #
+####################################################################
+
+=pod
+
+=item B<SetFrame>(I<$xidst>, I<$ydist>);
+
+Calculate the frame: coordinates of the lower left and upper right
+corners of the picture (in ps units). As a side effect, add generation
+numbers to each person node and calculate the X index of each node.
+
+=cut
+
+sub SetFrame {
+ my $self=shift;
+ my ($xdist, $ydist) = @_;
+
+ my $xmin=0;
+ my $xmax=0;
+
+ my @sorted_gens = sort {$b <=> $a} keys %node_by_gen;
+ my $ymin=$sorted_gens[(scalar @sorted_gens) -1];
+ my $ymax=$sorted_gens[0];
+ #
+ # The names of the nodes look like I:1, V:5. Let the
+ # first number be $i, and the second one be $j.
+ # IndexX is different from $j by the fact that marriage nodes
+ # are not skipped.
+ #
+ my $i=1;
+ foreach my $gen (@sorted_gens) {
+ my $roman=roman_num($i);
+ my @sorted_nodes =
+ sort {$a->GetAbsX() <=> $b->GetAbsX()} values %{$node_by_gen{$gen}};
+ my $num_nodes= scalar @sorted_nodes;
+ if ($sorted_nodes[0]->GetAbsX()<$xmin) {
+ $xmin=$sorted_nodes[0]->GetAbsX();
+ }
+ if ($sorted_nodes[$num_nodes-1]->GetAbsX()>$xmax) {
+ $xmax=$sorted_nodes[$num_nodes-1]->GetAbsX();
+ }
+ my $j=1;
+ my $indexX=1;
+ foreach my $node (@sorted_nodes) {
+ $node->SetIndexX($indexX);
+ if ($main::DEBUG) {
+ print STDERR "Node ", $node->Id(), ", index ",
+ $node->GetIndexX(), "\n";
+ }
+ $indexX++;
+ if ($node->isNumbered()) {
+ $node->SetGenName("$roman:$j");
+ if ($main::DEBUG) {
+ print STDERR $node->Id(), ": ", $node->GetGenName(),
+ "\n";
+ }
+ $j++;
+ }
+ }
+ #
+ # The fractional "generations" are for twin nodes
+ # and consanguinic marriage nodes.
+ #
+ if ($gen == int($gen)) {
+ $i++;
+ }
+ }
+ my @result = ($xdist*($xmin-1), $ydist*($ymin-1),
+ $xdist*($xmax+1), $ydist*($ymax+1));
+ return \@result;
+}
+
+
+
+####################################################################
+# DrawConnections #
+####################################################################
+
+=pod
+
+=item B<DrawConnections>();
+
+Draw the connections from the given node to its descendants
+
+=cut
+
+sub DrawConnections {
+ my $self = shift;
+ my $xdist = shift;
+ my $ydist = shift;
+ my $result;
+ my $Id=$self->Id;
+ foreach my $kid (@{$self->Kids()}) {
+ my $kidId = $kid->Id();
+ $result .= '\pstDescent{'.$Id.'}{'.$kidId.'}'."\n";
+ }
+ return $result;
+}
+
+
+
+
+
+####################################################################
+# DrawAll #
+####################################################################
+
+=pod
+
+=item B<DrawAll>(I<$xdist>, I<$ydist>, I<$belowtextfont>,
+ I<$abovetextfont>, I<@fieldsfornode>);
+
+Draw all nodes and connections in the form suitable for
+pspicture
+
+=cut
+
+sub DrawAll {
+ my ($self, $xdist, $ydist, $belowtextfont,
+ $abovetextfont, @fieldsfornode) = @_;
+
+ #
+ # Commands to draw nodes
+ #
+ my $nodes;
+
+ #
+ # Commands to draw connections
+ #
+ my $connections;
+
+
+ foreach my $gen (keys %node_by_gen) {
+ foreach my $node (values %{$node_by_gen{$gen}}) {
+ #
+ # We draw only the nodes, who belong to the right
+ # generation (consanguinity may lead to duplicate nodes
+ #
+ #
+ if ($node->GetAbsY() <=> $gen) {
+ delete $node_by_gen{$gen}->{$node->Id()};
+ next;
+ }
+
+ $nodes .= $node->DrawNode($xdist, $ydist,
+ $belowtextfont, $abovetextfont,
+ @fieldsfornode);
+ $connections .=$node->DrawConnections($xdist, $ydist);
+ }
+ }
+ return $nodes.$connections;
+}
+
+####################################################################
+# PrintAllLegends #
+####################################################################
+
+=pod
+
+=item B<PrintAllLegends>(I<$lang>, I<@fields>);
+
+Print legend for all the nodes. The first parameter is the
+language, the other is the fields to be included in the legend.
+
+=cut
+
+sub PrintAllLegends {
+ my ($self, $lang, @fields) = @_;
+
+ my $result="\n\\begin{description}\n";
+
+ foreach my $gen (sort {$b <=> $a} keys(%node_by_gen)) {
+ foreach my $node
+ (sort {$a->GetIndexX() <=> $b->GetIndexX()}
+ values(%{$node_by_gen{$gen}})) {
+ $result .= $node->PrintLegend($lang,@fields);
+ }
+ }
+
+ $result .= "\\end{description}\n";
+
+ return $result;
+}
+
+
+####################################################################
+# PrintLegend #
+####################################################################
+
+=pod
+
+=item B<PrintLegend>(I<$lang>, I<@fields>);
+
+This subroutine does nothing: a generic node has no legend. It
+is overriden by Pedigree::PersonNode(3) and Pedigree::AbortionNode(3).
+
+=cut
+
+sub PrintLegend {
+
+ return;
+}
+
+
+
+
+####################################################################
+# by_sibs_order #
+####################################################################
+
+#
+# Internal procedure for sorting kids
+#
+
+sub by_sibs_order {
+ #
+ # We compare sort order, and if it is the same, DoB
+ #
+ return ($a->SortOrder() <=> $b->SortOrder()) ||
+ ($a->DoB() cmp $b->DoB());
+}
+
+####################################################################
+# roman_num #
+####################################################################
+
+#
+# Internal procedure for roman numerals
+#
+
+sub roman_num {
+ my $i=shift;
+ my @nums=qw(0 I II III IV V VI VII VIII IX X XI XII XIII XIV XV
+ XVI XVII XVIII XIX XX XXI XXII XXIII XXIV);
+ return $nums[$i];
+}
+
+
+####################################################################
+# THE END #
+####################################################################
+
+
+=pod
+
+=back
+
+=head1 ENVIRONMENT
+
+The calling program should define B<$main::DEBUG> and set it to 0
+or 1.
+
+=head1 SEE ALSO
+
+pedigree(1), Pedigree(3)
+
+=head1 AUTHOR
+
+Boris Veytsman, Leila Akhmadeeva, 2006, 2007
+
+
+
+=cut
+
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.3
new file mode 100644
index 0000000000..65e9d7b716
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.3
@@ -0,0 +1,171 @@
+.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Pedigree::Parser 3"
+.TH Pedigree::Parser 3 "2007-07-16" "perl v5.10.0" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Pedigree::Parser \- parser for the input file
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+use Pedigree::Parser;
+.PP
+\&\f(CW$parser\fR = new Pedigree::Parser(I{$inputline>, \fI\f(CI$lang\fI\fR)
+.PP
+\&\f(CW$parser\fR\->Parse($inputline);
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+This package parses input for the pedigree library and is used to
+define nodes.
+.Sp
+.RS 4
+\&\fBnew\fR(\fI\f(CI$inputline\fI\fR, \fI\f(CI$lang\fI\fR);
+.Sp
+Construct a new parser from the pipe-separated line at input
+.Sp
+\&\fBParse\fR(\fI\f(CI$inputline\fI\fR);
+.Sp
+Take a line of comma-separated values; return a reference to a
+hash of parsed values
+.RE
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0
+or 1.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3)
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman, Leila Akhmadeeva, 2006, 2007
+.SH "POD ERRORS"
+.IX Header "POD ERRORS"
+Hey! \fBThe above document had some coding errors, which are explained below:\fR
+.IP "Around line 21:" 4
+.IX Item "Around line 21:"
+You can't have =items (as at line 59) unless the first thing after the =over is an =item
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.pm
new file mode 100644
index 0000000000..7978064f47
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.pm
@@ -0,0 +1,237 @@
+=pod
+
+=head1 NAME
+
+Pedigree::Parser - parser for the input file
+
+=head1 SYNOPSIS
+
+use Pedigree::Parser;
+
+$parser = new Pedigree::Parser(I{$inputline>, I<$lang>)
+
+$parser->Parse($inputline);
+
+
+=head1 DESCRIPTION
+
+This package parses input for the pedigree library and is used to
+define nodes.
+
+=over 4
+
+=cut
+
+####################################################################
+# Define the package #
+####################################################################
+
+package Pedigree::Parser;
+use strict;
+
+####################################################################
+# package variables #
+####################################################################
+
+#
+# %fields_to_convert: the hash of fields that contain limited
+# number of values and the default value for such field
+#
+
+my %fields_to_convert = (
+ 'Sex'=>'unknown',
+ 'Proband'=>0,
+ 'Condition'=>'normal',
+ 'Type' => ''
+);
+
+
+####################################################################
+# And package methods #
+####################################################################
+
+####################################################################
+# new #
+####################################################################
+
+=pod
+
+=item B<new>(I<$inputline>, I<$lang>);
+
+Construct a new parser from the pipe-separated line at input
+
+=cut
+
+sub new {
+ my ($class,$inputline,$lang)=@_;
+ my $self={};
+
+ #
+ # The hash $self->{fields} is the main stored data structure.
+ # The key is the field, the value is the number of the field
+ # in the input lines.
+ #
+ my %fieldnames=%{$lang->GetFieldNames()};
+ chomp $inputline;
+ $inputline =~ s/^\s+//;
+ $inputline =~ s/\s+$//;
+ my @input = split /\s*\|\s*/, $inputline;
+ for (my $i=0; $i<scalar @input; $i++) {
+ my $name=$input[$i];
+ if (exists $fieldnames{$name}) {
+ my $field=$fieldnames{$name};
+ $self->{fields}->{$field}=$i;
+ } else {
+ print STDERR "Warning: unknown field $name\n";
+ }
+ }
+
+ if ($main::DEBUG) {
+ print STDERR "Field names:\n";
+ foreach my $key (keys %fieldnames) {
+ my $field=$fieldnames{$key};
+ my $pos=$self->{fields}->{$field};
+ print STDERR "\t$key\t$field\t$pos\n";
+ }
+ }
+
+ #
+ # The hash $self->{values} contains values for fields
+ # with closed sets of values.
+ #
+ my %values=%{$lang->GetValues()};
+ $self->{values}=\%values;
+
+ if ($main::DEBUG) {
+ print STDERR "Field values:\n";
+ foreach my $key (keys %values) {
+ my $value=$values{$key};
+ print STDERR "\t$key\t$value\n";
+ }
+ }
+
+
+ #
+ # The hash $self->{special_names} contains special values
+ # for the 'Name' field
+ #
+ my %special=%{$lang->GetSpecialNames()};
+ $self->{'special_names'}=\%special;
+
+ if ($main::DEBUG) {
+ print STDERR "Special names:\n";
+ foreach my $key (keys %special) {
+ my $value=$special{$key};
+ print STDERR "\t$key\t$value\n";
+ }
+ }
+
+ if ($main::DEBUG) {
+ print STDERR "Special fields:\n";
+ foreach my $key (keys %fields_to_convert) {
+ my $value=$fields_to_convert{$key};
+ print STDERR "\t$key\t$value\n";
+ }
+ }
+
+ bless ($self,$class);
+ return $self;
+}
+
+
+####################################################################
+# Parse #
+####################################################################
+
+=pod
+
+=item B<Parse>(I<$inputline>);
+
+Take a line of comma-separated values; return a reference to a
+hash of parsed values
+
+=cut
+
+sub Parse {
+ my ($self,$inputline)=@_;
+ chomp $inputline;
+ $inputline =~ s/^\s+//;
+ $inputline =~ s/\s+$//;
+ my @input = split /\s*\|\s*/, $inputline;
+ if ($main::DEBUG) {
+ print STDERR "Parsing line:$inputline\n";
+ }
+
+ my %result;
+
+ foreach my $field (keys %{$self->{fields}}) {
+ my $i=$self->{fields}->{$field};
+ my $value=$input[$i];
+ #
+ # Special fields...
+ #
+ if (exists $self->{values}->{$value}) {
+ $value=$self->{values}->{$value};
+ }
+ if (exists $fields_to_convert{$field}) {
+ if (length($value) == 0 ) {
+ $value=$fields_to_convert{$field};
+ }
+ }
+ #
+ # Dropping empty fields
+ #
+ if (length($value) == 0 ) {
+ next;
+ }
+
+ #
+ # Converting Name field
+ #
+ if (($field eq 'Name') && ($value =~ /^\#/)) {
+ foreach my $regexp (keys %{$self->{'special_names'}}) {
+ my $name=$self->{'special_names'}->{$regexp};
+ $value =~ s/^(\#$regexp.*)/\#$name/i;
+ }
+ }
+
+ #
+ # And finishing
+ #
+ $result{$field}=$value;
+ if ($main::DEBUG) {
+ print STDERR "\t$field\t$value\n";
+ }
+ }
+
+ return \%result;
+
+}
+
+####################################################################
+# THE END #
+####################################################################
+
+=pod
+
+=back
+
+=head1 ENVIRONMENT
+
+The calling program should define B<$main::DEBUG> and set it to 0
+or 1.
+
+=head1 SEE ALSO
+
+pedigree(1), Pedigree(3)
+
+=head1 AUTHOR
+
+Boris Veytsman, Leila Akhmadeeva, 2006, 2007
+
+
+
+=cut
+
+1;
+
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.3
new file mode 100644
index 0000000000..8876211f53
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.3
@@ -0,0 +1,232 @@
+.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Pedigree::PersonNode 3"
+.TH Pedigree::PersonNode 3 "2007-07-22" "perl v5.10.0" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Pedigree::PersonNode \- a person in a pedigree
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+use Pedigree::PersonNode;
+.PP
+\&\f(CW$node\fR = new Pedigree::PersonNode(\fI\f(CI%params\fI\fR);
+.PP
+\&\f(CW$Id\fR = \f(CW$node\fR\->\fIMotherId()\fR;
+\&\f(CW$Id\fR = \f(CW$node\fR\->\fIFatherId()\fR;
+.PP
+\&\f(CW$isProband\fR = \f(CW$node\fR\->\fIisProband()\fR;
+.PP
+\&\f(CW$sex\fR = \f(CW$node\fR\->\fISex()\fR;
+.PP
+\&\f(CW$DoB\fR = \f(CW$node\fR\->\fIDoB()\fR;
+.PP
+\&\f(CW$DoD\fR = \f(CW$node\fR\->\fIDoD()\fR;
+.PP
+\&\f(CW$cond\fR = \f(CW$node\fR\->\fICondition()\fR;
+.PP
+\&\f(CW$GenName\fR = \f(CW$node\fR\->\fIGetGenName()\fR;
+.PP
+\&\f(CW$node\fR\->SetGenName(\fI\f(CI$name\fI\fR);
+.PP
+\&\f(CW$node\fR\->DrawNode(\fI\f(CI$xidst\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR,
+\&\fI\f(CI@fieldsfornode\fI\fR);
+.PP
+\&\f(CW$node\fR\->PrintLegend(\fI\f(CI$land\fI\fR, \fI\f(CI@fields\fI\fR);
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+This package contains data about a person.
+.Sp
+.RS 4
+\&\fBnew\fR(\fI\f(CI%params\fI\fR);
+.Sp
+Construct a new node from the given parameters.
+.Sp
+\&\fBMotherId\fR();
+.Sp
+Return Mother Id.
+.Sp
+\&\fBFatherId\fR();
+.Sp
+Return Father Id.
+.Sp
+\&\fBisProband\fR();
+.Sp
+Return 1 if the pesron is a Proband and zero otherwise
+.Sp
+\&\fBSex\fR();
+.Sp
+Get the sex of the node
+.Sp
+\&\fBDoB\fR();
+.Sp
+Get the DoB of the node
+.Sp
+\&\fBDoD\fR();
+.Sp
+Get the DoB of the node
+.Sp
+\&\fBCondition\fR();
+.Sp
+Returns node conditon.
+.Sp
+\&\fBGetGenName\fR();
+.Sp
+Find the generation name for the node
+.Sp
+\&\fBSetGenName\fR(\fI\f(CI$name\fI\fR);
+.Sp
+Set the generation name of the node
+.Sp
+\&\fBDrawNode\fR(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR,
+\&\fI\f(CI@fieldsfornode\fI\fR);
+.Sp
+Output the command to draw this node. The parameters are
+distances between the nodes (in cm) and fields for abovetext.
+.Sp
+\&\fBPrintLegend\fR(\fI\f(CI$lang\fI\fR, \fI\f(CI@fields\fI\fR);
+.Sp
+Print the legend for the given node, including \fI\f(CI@fields\fI\fR in the given
+language \fI\f(CI$lang\fI\fR.
+.RE
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0
+or 1.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3)
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman, Leila Akhmadeeva, 2006, 2007
+.SH "POD ERRORS"
+.IX Header "POD ERRORS"
+Hey! \fBThe above document had some coding errors, which are explained below:\fR
+.IP "Around line 39:" 4
+.IX Item "Around line 39:"
+You can't have =items (as at line 58) unless the first thing after the =over is an =item
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.pm
new file mode 100644
index 0000000000..6d341cb715
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.pm
@@ -0,0 +1,389 @@
+=pod
+
+=head1 NAME
+
+Pedigree::PersonNode - a person in a pedigree
+
+=head1 SYNOPSIS
+
+use Pedigree::PersonNode;
+
+$node = new Pedigree::PersonNode(I<%params>);
+
+$Id = $node->MotherId();
+$Id = $node->FatherId();
+
+$isProband = $node->isProband();
+
+$sex = $node->Sex();
+
+$DoB = $node->DoB();
+
+$DoD = $node->DoD();
+
+$cond = $node->Condition();
+
+$GenName = $node->GetGenName();
+
+$node->SetGenName(I<$name>);
+
+$node->DrawNode(I<$xidst>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>,
+I<@fieldsfornode>);
+
+$node->PrintLegend(I<$land>, I<@fields>);
+
+=head1 DESCRIPTION
+
+This package contains data about a person.
+
+=over 4
+
+=cut
+
+####################################################################
+# Define the package #
+####################################################################
+
+package Pedigree::PersonNode;
+use Pedigree;
+use strict;
+our @ISA=('Pedigree::Node');
+
+####################################################################
+# new #
+####################################################################
+
+=pod
+
+=item B<new>(I<%params>);
+
+Construct a new node from the given parameters.
+
+=cut
+
+sub new {
+ my ($class,%params)=@_;
+ my $self=$class->SUPER::new(%params);
+
+ if (!ref($self)) {
+ return 0;
+ }
+
+ #
+ # Only Person Nodes are numbered in pedigrees
+ #
+
+ $self->{'Numbered'}=1;
+
+ #
+ # Now Twins...
+ #
+
+ if (exists $self->{'Twins'}) {
+ my $Id=$self->{'Id'};
+ my $string = $self->{'Twins'};
+ $string =~ s/^\s*//;
+ $string =~ s/\s*$//;
+ my @twinIds=($Id, split (/[\s,;]+/, $string));
+ if ($main::DEBUG) {
+ print STDERR "Found twins: ", join(', ',@twinIds), "\n";
+ }
+ my $found=0;
+ for (my $i=0; $i<scalar @{$self->{'twin_sets'}}; $i++) {
+ if (exists $self->{'twin_sets'}->[$i]->{'KidIds'}->{$Id}) {
+ $found=1;
+ foreach my $kidId (@twinIds) {
+ $self->{'twin_sets'}->[$i]->{'KidIds'}->{$kidId}=1;
+ }
+ if ($main::DEBUG) {
+ print STDERR "Added to twin set number $i\n";
+ }
+ last; # twin_set
+ }
+ }
+ if (!$found) { # Add twin set
+ my $set;
+ $set->{'Type'} = $self->{'Type'};
+ foreach my $kidId (@twinIds) {
+ $set->{'KidIds'}->{$kidId}=1;
+ }
+ push @{$self->{'twin_sets'}}, $set;
+ if ($main::DEBUG) {
+ print STDERR "Started a new twin set number ",
+ scalar(@{$self->{'twin_sets'}})-1, "\n";
+ }
+ }
+ }
+
+ return $self;
+
+}
+
+
+####################################################################
+# MotherId #
+####################################################################
+
+=pod
+
+=item B<MotherId>();
+
+Return Mother Id.
+
+=cut
+
+sub MotherId {
+ my $self=shift;
+ return $self->{'Mother'};
+}
+
+####################################################################
+# FatherId #
+####################################################################
+
+=pod
+
+=item B<FatherId>();
+
+Return Father Id.
+
+=cut
+
+sub FatherId {
+ my $self=shift;
+ return $self->{'Father'};
+}
+
+
+####################################################################
+# isProband #
+####################################################################
+
+=pod
+
+=item B<isProband>();
+
+Return 1 if the pesron is a Proband and zero otherwise
+
+=cut
+
+sub isProband {
+ my $self=shift;
+ if ($self->{Proband} == 1) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+####################################################################
+# Sex #
+####################################################################
+
+=pod
+
+=item B<Sex>();
+
+Get the sex of the node
+
+=cut
+
+sub Sex {
+ my $self = shift;
+ return $self->{'Sex'};
+}
+
+####################################################################
+# DoB #
+####################################################################
+
+=pod
+
+=item B<DoB>();
+
+Get the DoB of the node
+
+=cut
+
+sub DoB {
+ my $self = shift;
+ return $self->{'DoB'};
+}
+
+####################################################################
+# DoB #
+####################################################################
+
+=pod
+
+=item B<DoD>();
+
+Get the DoB of the node
+
+=cut
+
+sub DoD {
+ my $self = shift;
+ return $self->{'DoD'};
+}
+
+####################################################################
+# Condition #
+####################################################################
+
+=pod
+
+=item B<Condition>();
+
+Returns node conditon.
+
+=cut
+
+sub Condition {
+ my $self=shift;
+ return $self->{'Condition'};
+}
+
+
+####################################################################
+# GetGenName #
+####################################################################
+
+=pod
+
+=item B<GetGenName>();
+
+Find the generation name for the node
+
+=cut
+
+sub GetGenName {
+ my $self = shift;
+ return $self->{'GenName'};
+}
+
+
+####################################################################
+# SetGenName #
+####################################################################
+
+=pod
+
+=item B<SetGenName>(I<$name>);
+
+Set the generation name of the node
+
+=cut
+
+sub SetGenName {
+ my ($self, $name) = @_;
+ $self->{'GenName'} = $name;
+ return 0;
+}
+
+
+####################################################################
+# DrawNode #
+####################################################################
+
+=pod
+
+=item B<DrawNode>(I<$xdist>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>,
+I<@fieldsfornode>);
+
+Output the command to draw this node. The parameters are
+distances between the nodes (in cm) and fields for abovetext.
+
+=cut
+
+sub DrawNode {
+ my $self=shift;
+ my ($xdist, $ydist, $belowtextfont, $abovetextfont, @fieldsfornode) = @_;
+ my $result = '\rput('.($xdist*$self->GetAbsX()).", ".
+ ($ydist*$self->GetAbsY()).'){\pstPerson[';
+ my @opts=($self->Sex(), $self->Condition(),
+ 'belowtext={'."$belowtextfont ".$self->GetGenName().'}');
+ if (length($self->DoD())>0) {
+ push @opts, 'deceased';
+ }
+ if ($self->isProband()) {
+ push @opts, 'proband';
+ }
+ if (scalar @fieldsfornode) {
+ my @abovetext;
+ foreach my $field (@fieldsfornode) {
+ push @abovetext, $self->{$field};
+ }
+ push @opts,'abovetext={'."$abovetextfont ".join('; ',@abovetext).'}';
+ }
+ $result .= join(', ',@opts);
+ $result .= ']{'.$self->Id()."}}\n";
+ return $result;
+}
+
+####################################################################
+# PrintLegend #
+####################################################################
+
+=pod
+
+=item B<PrintLegend>(I<$lang>, I<@fields>);
+
+Print the legend for the given node, including I<@fields> in the given
+language I<$lang>.
+
+=cut
+
+sub PrintLegend {
+ my ($self, $lang, @fields) = @_;
+ my $result = '\item['.$self->GetGenName().'] ';
+ my @desc;
+ foreach my $field (@fields) {
+ if (exists $self->{$field}) {
+ my $res = $lang->PrintField($field, $self->{$field});
+ if (length($res)>0) {
+ push @desc, $res;
+ }
+ }
+ }
+ $result .= join ("; ",@desc);
+ $result .= ".\n";
+ #
+ # We print only the nodes, for which there is an information
+ #
+ if (scalar @desc) {
+ return $result;
+ }
+ return;
+}
+
+
+
+####################################################################
+# THE END #
+####################################################################
+
+
+=pod
+
+=back
+
+=head1 ENVIRONMENT
+
+The calling program should define B<$main::DEBUG> and set it to 0
+or 1.
+
+
+=head1 SEE ALSO
+
+pedigree(1), Pedigree(3)
+
+=head1 AUTHOR
+
+Boris Veytsman, Leila Akhmadeeva, 2006, 2007
+
+
+
+=cut
+
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.3
new file mode 100644
index 0000000000..731818a28f
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.3
@@ -0,0 +1,180 @@
+.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Pedigree::TwinsNode 3"
+.TH Pedigree::TwinsNode 3 "2007-07-15" "perl v5.10.0" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Pedigree::TwinsNode \- an auxillary twins node in a pedigree
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+use Pedigree::TwinsNode;
+.PP
+\&\f(CW$node\fR = new Pedigree::TwinsNode(\fI\f(CI%params\fI\fR);
+.PP
+\&\f(CW$node\fR\->DrawNode(\fI\f(CI$xidst\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR,
+\&\fI\f(CI@fieldsfornode\fI\fR);
+.PP
+\&\f(CW$node\fR\->\fIDrawConnections()\fR;
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+This package contains data about a twins node. Twins node is
+a special node between the parent and the twins.
+.Sp
+.RS 4
+\&\fBnew\fR(\fI\f(CI%params\fI\fR);
+.Sp
+Construct a new node from the given parameters.
+.Sp
+\&\fBDrawNode\fR(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR,
+\&\fI\f(CI@fieldsfornode\fI\fR);
+.Sp
+Output the command to draw this node. The parameters are
+distances between the nodes (in psunits).
+.Sp
+\&\fBDrawConnections\fR();
+.Sp
+Draw the connections from the given node to its descendants and
+the parent
+.RE
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0
+or 1.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3)
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman, Leila Akhmadeeva, 2007
+.SH "POD ERRORS"
+.IX Header "POD ERRORS"
+Hey! \fBThe above document had some coding errors, which are explained below:\fR
+.IP "Around line 25:" 4
+.IX Item "Around line 25:"
+You can't have =items (as at line 47) unless the first thing after the =over is an =item
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.pm
new file mode 100644
index 0000000000..c8557230bd
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.pm
@@ -0,0 +1,172 @@
+=pod
+
+=head1 NAME
+
+Pedigree::TwinsNode - an auxillary twins node in a pedigree
+
+=head1 SYNOPSIS
+
+use Pedigree::TwinsNode;
+
+$node = new Pedigree::TwinsNode(I<%params>);
+
+
+$node->DrawNode(I<$xidst>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>,
+I<@fieldsfornode>);
+
+$node->DrawConnections();
+
+
+=head1 DESCRIPTION
+
+This package contains data about a twins node. Twins node is
+a special node between the parent and the twins.
+
+=over 4
+
+=cut
+
+
+
+####################################################################
+# Define the package #
+####################################################################
+
+package Pedigree::TwinsNode;
+use Pedigree;
+use strict;
+our @ISA=('Pedigree::Node');
+
+
+####################################################################
+# new #
+####################################################################
+
+=pod
+
+=item B<new>(I<%params>);
+
+Construct a new node from the given parameters.
+
+=cut
+
+sub new {
+ my ($class,%params)=@_;
+ my $self=$class->SUPER::new(%params);
+ if (!ref($self)) { # Bad node
+ return 0;
+ }
+
+ bless ($self,$class);
+
+ # After we constructed the node, we want to move the kids
+ # from the parent node to the twins node
+
+ my $selfId = $self->{'Id'};
+ my $parentId = $self->{'ParentId'};
+ foreach my $kidId (keys %{$self->{'KidIds'}}) {
+ if ($main::DEBUG) {
+ print STDERR
+ "Moving $kidId from $parentId and to $selfId\n";
+ }
+ delete $self->{'kids_by_parent_id'}->{$parentId}->{$kidId};
+ $self->{'kids_by_parent_id'}->{$selfId}->{$kidId}=1;
+ }
+
+ return $self;
+}
+
+
+
+####################################################################
+# DrawNode #
+####################################################################
+
+=pod
+
+=item B<DrawNode>(I<$xdist>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>,
+I<@fieldsfornode>);
+
+Output the command to draw this node. The parameters are
+distances between the nodes (in psunits).
+
+=cut
+
+sub DrawNode {
+ my $self=shift;
+ my ($xdist, $ydist, $belowtextfont, $abovetextfont, @fieldsfornode) = @_;
+ my $result = '\rput('.($xdist*$self->GetAbsX()).", ".
+ ($ydist*$self->GetAbsY()).'){\pnode{'.
+ $self->Id()."}}\n";
+ return $result;
+}
+
+####################################################################
+# DrawConnections #
+####################################################################
+
+=pod
+
+=item B<DrawConnections>();
+
+Draw the connections from the given node to its descendants and
+the parent
+
+=cut
+
+sub DrawConnections {
+ my $self = shift;
+ my $xdist = shift;
+ my $ydist = shift;
+ my $Id=$self->Id();
+ my $parentId = $self->{'ParentId'};
+ my @kids = @{$self->Kids()};
+ my $leftKid=shift @kids;
+ my $leftKidId=$leftKid->Id();
+ my $rightKid= pop @kids;
+ my $rightKidId=$rightKid->Id();
+ my @opts;
+ if ($self->Type()) {
+ push @opts, $self->Type();
+ }
+ foreach my $kid (@kids) {
+ push @opts, "addtwin=".$kid->Id();
+ }
+ my $result = '\pstTwins[';
+ if (scalar @opts) {
+ $result .= join (", ",@opts);
+ }
+ $result .= ']{'.$parentId.'}{'.
+ $Id.'}{'.$leftKidId.'}{'.$rightKidId.'}'."\n";
+ return $result;
+}
+
+
+
+
+####################################################################
+# THE END #
+####################################################################
+
+=pod
+
+=back
+
+=head1 ENVIRONMENT
+
+The calling program should define B<$main::DEBUG> and set it to 0
+or 1.
+
+=head1 SEE ALSO
+
+pedigree(1), Pedigree(3)
+
+=head1 AUTHOR
+
+Boris Veytsman, Leila Akhmadeeva, 2007
+
+
+
+=cut
+
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/README b/graphics/pstricks/contrib/pedigree/pedigree-perl/README
new file mode 100644
index 0000000000..506b12063e
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/README
@@ -0,0 +1,31 @@
+ A Program for Generation TeX Pedigrees From CSV Files
+ Boris Veytsman & Leila Akhmadeeva
+ Version 1.0, April 2012
+
+This program generates TeX commands to typeset pedigrees - either TeX
+fragments of full LaTeX files. It has support for multilanguage
+pedigrees (at the present moment English and Russian languages are
+supported).
+
+To create manual pages for this program, issue make in the main
+directory. To install the program and the library files issue make
+install (this command assumes location /usr/local/bin/ for the
+binaries and /usr/local/lib/site_perl for Perl libraries). Optionally
+you can install manual pages to the proper location on your system.
+The typeset manual in in the doc subdirectory.
+
+For manual installation:
+
+1. Install pedigree.pl as /usr/local/bin/pedigree
+
+2. Install Pedigree subdirectory as /usr/local/lib/site_perl/Pedigree
+ and move there all .pm modules.
+
+3. Optionally install man pages & documentation.
+
+Copyright 2006-2012, Boris Veytsman <borisv@lk.net>, Leila Akhmadeeva
+
+This work may be distributed and/or modified under the conditions of
+the GNU Public License, either version 2 of this license or (at your
+option) any later version.
+
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/Makefile b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/Makefile
new file mode 100644
index 0000000000..864566de3b
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/Makefile
@@ -0,0 +1,75 @@
+#
+# Makefile for pedigree program
+#
+# This file is in public domain
+#
+# $Id: Makefile,v 2.10 2007-07-29 19:52:53 boris Exp $
+#
+
+TEXFILES = pedigree.tex
+
+INCLUDES = \
+ english.tex \
+ english1.tex \
+ russian.tex \
+ twins.tex \
+ abortions.tex \
+ childlessness.tex \
+ sort1.tex \
+ sort2.tex \
+ sort3.tex \
+ badsort.tex \
+ consanguinic.tex
+
+
+PDFS = ${TEXFILES:%.tex=%.pdf}
+
+all: $(PDFS)
+
+
+%.pdf: %.ps
+ ps2pdf -sAutoRotatePages=None $<
+
+%.ps: %.dvi
+ dvips -Ppdf -o $@ $<
+
+
+#
+# We need to cancel the implicit rule
+#
+%.dvi: %.tex
+
+%.dvi: %.tex $(INCLUDES)
+ latex $<
+ - bibtex $*
+ latex $<
+ latex $<
+ while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log) \
+ do latex $<; done
+
+
+%.tex: ../examples/english_short.cfg ../examples/%.csv
+ cd ..; perl -I. pedigree.pl -c examples/english_short.cfg -o doc/$*.tex examples/$*.csv
+
+
+english1.tex: ../examples/english1.cfg ../examples/english.csv
+ cd ..; perl -I. pedigree.pl -c examples/english1.cfg -o doc/$@ examples/english.csv
+
+abortions.tex: ../examples/english.cfg ../examples/abortions.csv
+ cd ..; perl -I. pedigree.pl -c examples/english.cfg -o doc/$@ examples/abortions.csv
+
+
+english.tex: ../examples/english.cfg ../examples/english.csv
+ cd ..; perl -I. pedigree.pl -c examples/english.cfg -o doc/$@ examples/english.csv
+
+russian.tex: ../examples/russian.cfg ../examples/russian.csv
+ cd ..; perl -I. pedigree.pl -c examples/russian.cfg -o doc/$@ examples/russian.csv
+
+
+
+clean:
+ $(RM) *.aux *.bbl *.dvi *.log *.out *.toc *.blg *.lof *.lot *.lol pst-pdgr.tex pst-pdgr.sty
+
+distclean: clean
+ rm -f ${PDFS} $(INCLUDES)
+
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/abortions.tex b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/abortions.tex
new file mode 100644
index 0000000000..c6d33951c2
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/abortions.tex
@@ -0,0 +1,19 @@
+{%
+\psset{descarmA=0.8}%
+\begin{pspicture}(-4,-4)(4,2)
+\rput(0, 0){\pstPerson[female, affected, belowtext={\small I:1}, abovetext={\scriptsize Ann}]{A0}}
+\rput(2, -2){\pstPerson[male, affected, belowtext={\small II:3}, proband, abovetext={\scriptsize John}]{B3}}
+\rput(-2, -2){\pstAbortion[affected, belowtext={\small II:1}, abovetext={\scriptsize female}]{B1}}
+\rput(0, -2){\pstAbortion[normal, belowtext={\small II:2}, sab, abovetext={\scriptsize male}]{B2}}
+\pstDescent{A0}{B1}
+\pstDescent{A0}{B2}
+\pstDescent{A0}{B3}
+\end{pspicture}%
+}
+
+\begin{description}
+\item[I:1] Ann; born: 1970.06.15.
+\item[II:1] abortion; born: 1990.03.01.
+\item[II:2] abortion; born: 2000.10.10.
+\item[II:3] John; born: 2002.12.01.
+\end{description}
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english.tex b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english.tex
new file mode 100644
index 0000000000..5d812a19c2
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english.tex
@@ -0,0 +1,46 @@
+{%
+\psset{descarmA=0.8}%
+\begin{pspicture}(-8,-4)(6,4)
+\rput(-6, 2){\pstPerson[male, normal, belowtext={\small I:1}, deceased, abovetext={\scriptsize Joseph Smith}]{GF1}}
+\rput(0, 2){\pstPerson[male, normal, belowtext={\small I:3}, abovetext={\scriptsize Jim Brown}]{GF2}}
+\rput(4, 2){\pstPerson[female, normal, belowtext={\small I:4}, abovetext={\scriptsize Lisa Brown}]{GM2}}
+\rput(2, 2){\pnode{GF2_m_GM2}}
+\rput(-4, 2){\pnode{GF1_m_GM1}}
+\rput(-2, 2){\pstPerson[female, asymptomatic, belowtext={\small I:2}, deceased, abovetext={\scriptsize Joan Smith}]{GM1}}
+\rput(0, 0){\pnode{F1_m_M1}}
+\rput(-5, 0){\pstPerson[female, obligatory, belowtext={\small II:1}, abovetext={\scriptsize Ann Gold}]{A1}}
+\rput(2, 0){\pstPerson[female, normal, belowtext={\small II:3}, abovetext={\scriptsize Mary Smith}]{M1}}
+\rput(-3, 0){\pstPerson[male, affected, belowtext={\small II:2}, abovetext={\scriptsize Bill Smith}]{F1}}
+\rput(0, -2){\pstPerson[female, affected, belowtext={\small III:3}, abovetext={\scriptsize Rebecca Smith}]{S1}}
+\rput(2, -2){\pstPerson[male, normal, belowtext={\small III:4}, abovetext={\scriptsize Alexander Smith}]{S2}}
+\rput(-2, -2){\pstPerson[male, affected, belowtext={\small III:2}, proband, abovetext={\scriptsize John Smith}]{P}}
+\rput(-5, -2){\pstPerson[female, affected, belowtext={\small III:1}, abovetext={\scriptsize Jenny Smith}]{C1}}
+\pstDescent{GF2_m_GM2}{M1}
+\ncline[]{GF2_m_GM2}{GM2}
+\ncline[]{GF2_m_GM2}{GF2}
+\pstDescent{GF1_m_GM1}{A1}
+\pstDescent{GF1_m_GM1}{F1}
+\ncline[]{GF1_m_GM1}{GM1}
+\ncline[]{GF1_m_GM1}{GF1}
+\pstDescent{F1_m_M1}{P}
+\pstDescent{F1_m_M1}{S1}
+\pstDescent{F1_m_M1}{S2}
+\ncline[]{F1_m_M1}{M1}
+\ncline[]{F1_m_M1}{F1}
+\pstDescent{A1}{C1}
+\end{pspicture}%
+}
+
+\begin{description}
+\item[I:1] Joseph Smith; born: unknown; age at death: unknown.
+\item[I:2] Joan Smith; born: 1902/07/01; age at death: 73.
+\item[I:3] Jim Brown; born: 1905/11/01.
+\item[I:4] Lisa Brown; born: 1910/03/03.
+\item[II:1] Ann Gold; born: 1941/09/02; Aunt of the proband.
+\item[II:2] Bill Smith; born: 1938/04/03.
+\item[II:3] Mary Smith; born: 1940/02/05.
+\item[III:1] Jenny Smith; born: 1969/12/03; Cousin of the proband.
+\item[III:2] John Smith; born: 1970/02/05; Evaluated 2005/12/01.
+\item[III:3] Rebecca Smith; born: 1972/12/25.
+\item[III:4] Alexander Smith; born: 1975/11/12.
+\end{description}
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english1.tex b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english1.tex
new file mode 100644
index 0000000000..a652cdbb04
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english1.tex
@@ -0,0 +1,32 @@
+{%
+\psset{descarmA=0.9}%
+\begin{pspicture}(-6,-3.6)(4.5,3.6)
+\rput(-4.5, 1.8){\pstPerson[male, normal, belowtext={\small I:1}, deceased]{GF1}}
+\rput(0, 1.8){\pstPerson[male, normal, belowtext={\small I:3}]{GF2}}
+\rput(3, 1.8){\pstPerson[female, normal, belowtext={\small I:4}]{GM2}}
+\rput(1.5, 1.8){\pnode{GF2_m_GM2}}
+\rput(-3, 1.8){\pnode{GF1_m_GM1}}
+\rput(-1.5, 1.8){\pstPerson[female, asymptomatic, belowtext={\small I:2}, deceased]{GM1}}
+\rput(0, 0){\pnode{F1_m_M1}}
+\rput(-3.75, 0){\pstPerson[female, obligatory, belowtext={\small II:1}]{A1}}
+\rput(1.5, 0){\pstPerson[female, normal, belowtext={\small II:3}]{M1}}
+\rput(-2.25, 0){\pstPerson[male, affected, belowtext={\small II:2}]{F1}}
+\rput(0, -1.8){\pstPerson[female, affected, belowtext={\small III:3}]{S1}}
+\rput(1.5, -1.8){\pstPerson[male, normal, belowtext={\small III:4}]{S2}}
+\rput(-1.5, -1.8){\pstPerson[male, affected, belowtext={\small III:2}, proband]{P}}
+\rput(-3.75, -1.8){\pstPerson[female, affected, belowtext={\small III:1}]{C1}}
+\pstDescent{GF2_m_GM2}{M1}
+\ncline[]{GF2_m_GM2}{GM2}
+\ncline[]{GF2_m_GM2}{GF2}
+\pstDescent{GF1_m_GM1}{A1}
+\pstDescent{GF1_m_GM1}{F1}
+\ncline[]{GF1_m_GM1}{GM1}
+\ncline[]{GF1_m_GM1}{GF1}
+\pstDescent{F1_m_M1}{P}
+\pstDescent{F1_m_M1}{S1}
+\pstDescent{F1_m_M1}{S2}
+\ncline[]{F1_m_M1}{M1}
+\ncline[]{F1_m_M1}{F1}
+\pstDescent{A1}{C1}
+\end{pspicture}%
+}
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.bib b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.bib
new file mode 100644
index 0000000000..a705bc192c
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.bib
@@ -0,0 +1,49 @@
+,-------------------.
+| BIBTEX ENTRIES |
+`-------------------'
+
+@article{PedigreeNomenclature95,
+ author = {Robin L. Bennett and Kathryn A. Steinhaus and
+ Stefanie B. Uhrich and Corrine K. O'Sullivan and
+ Robert G. Resta and Debra Lochner-Doyle and
+ Dorene S. Markei and Victoria Vincent and
+ Jan Hamanishi},
+ journal = {Am. J. Hum. Genet.},
+ number = {3},
+ pages = {745--752},
+ title = {Recommendations for Standardized Human Pedigree
+ Nomenclature},
+ volume = {56},
+ year = {1995},
+}
+
+@Manual{pst-pdgr06,
+ title = {Creating Medical Pedigrees with PSTricks and \LaTeX},
+ author = {Boris Veytsman and Leila Akhmadeeva},
+ month = {July},
+ year = 2007,
+ note = {\url{http://ctan.tug.org/tex-archive/graphics/pstricks/contrib/pedigree/pst-pdgr}}
+}
+
+@Manual{PSTricks93,
+ title = {PSTricks: PostScript Macros for Generic \TeX},
+ author = {Van Zandt, Timothy},
+ editor = {Denis Girou},
+ month = {July},
+ year = 2007,
+ note = {\url{http://ctan.tug.org/tex-archive/graphics/pstricks/base/doc}}
+}
+
+
+@book{GraphDrawing99,
+ address = {New Jersey},
+ author = {Di Battista, Giuseppe and Peter Eades and
+ Roberto Tamassia and Ioannis G. Tollis},
+ publisher = {Prentice Hall},
+ series = {An Alan R.~Apt Book},
+ title = {Graph Drawing: Algortihms for the Visualization of
+ Graphs},
+ year = {1999},
+}
+
+This file is in public domain \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.pdf b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.pdf
new file mode 100644
index 0000000000..9683fa29c8
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.pdf
Binary files differ
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.ps b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.ps
new file mode 100644
index 0000000000..b23c498b68
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.ps
@@ -0,0 +1,27305 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.991 Copyright 2011 Radical Eye Software
+%%Title: pedigree.dvi
+%%CreationDate: Sat Apr 14 12:51:54 2012
+%%Pages: 32
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%DocumentFonts: CMR17 CMTT12 CMR12 CMBX9 CMR9 CMTT9 CMR10 CMBX12 CMBX10
+%%+ CMTT10 CMR7 CMSS10 CMTI10 CMR6 CMR8 CMTT8 CMITT10 CMSS8 CMSLTT10
+%%+ SFTT0900 SFRM0700 SFRM0900 SFBX1000 SFRM1000 CMSY10 CMTI7
+%%DocumentPaperSizes: Letter
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -Ppdf -o pedigree.ps pedigree.dvi
+%DVIPSParameters: dpi=8000
+%DVIPSSource: TeX output 2012.04.14:1251
+%%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
+/dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3
+def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90
+rotate}{show}ifelse}ifelse}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: alt-rule.pro 0 0
+%!
+% Patch by TVZ
+% Makes dvips files draw rules with stroke rather than fill.
+% Makes narrow rules more predictable at low resolutions
+% after distilling to PDF.
+% May have unknown consequences for very thick rules.
+% Tested only with dvips 5.85(k).
+TeXDict begin
+/QV {
+ gsave newpath /ruleY X /ruleX X
+ Rx Ry gt
+ { ruleX ruleY Ry 2 div sub moveto Rx 0 rlineto Ry }
+ { ruleX Rx 2 div add ruleY moveto 0 Ry neg rlineto Rx }
+ ifelse
+ setlinewidth 0 setlinecap stroke grestore
+} bind def
+end
+
+%%EndProcSet
+%%BeginProcSet: pstricks.pro 0 0
+% $Id: pstricks.pro 647 2012-02-12 15:03:40Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 1.12, 2012/02/12
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+%
+% Define the follwing gs-functions if not known, eg when using distiller
+%
+systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if
+systemdict /.setblendmode known not {/.setblendmode { pop } def } if
+systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if
+%
+/tx@Dict 200 dict def % the main PSTricks dictionary
+tx@Dict begin
+/ADict 25 dict def % The arrow dictionaray
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/TMatrix { } def
+/RAngle { 0 } def
+/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments
+/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
+/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter)
+/Div { dup 0 eq { pop } { div } ifelse } def % control the division
+/tan { dup cos abs 1.e-10 lt
+ { pop 1.e10 } % return 1.e10 as infinit
+ { dup sin exch cos div } ifelse % default sin/cos
+} def
+/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees
+/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root
+ pop pop 0 }{ sqrt exch atan} ifelse } def
+/NET { neg exch neg exch T } def % change coordinate system to the negative one
+/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter
+/Pyth2 { % Pythagoras, xA yA xB yB
+ 3 -1 roll % xA xB yB yA
+ sub % xA xB yB-yA
+ 3 1 roll % yB-yA xA xB
+ sub % yB-yA xA-xB
+ Pyth } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian
+/Rand { rand 4294967295 div } def % a real random number
+%----------------- hv added 20050516 ---------------
+/PiDiv2 1.57079632680 def
+/Pi 3.14159265359 def
+/TwoPi 6.28318530718 def
+/Euler 2.71828182846 def
+%/e Euler bind def
+%
+/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees
+/DegtoRad { Pi mul 180 div } bind def % viceversa
+%----------------- hv end---------------------------
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
+%
+/PathLength {
+ flattenpath /z 0 def
+ { /y1 ED /x1 ED /y2 y1 def /x2 x1 def }
+ { /y ED /x ED PathLength@ }
+ {}
+ { /y y2 def /x x2 def PathLength@ }
+ /pathforall load stopped { pop pop pop pop } if
+ z
+} def
+%
+/STP { .996264 dup scale } def % BP/PT scaling
+/STV { SDict begin normalscale end STP } def %
+%
+/DashLine {
+ dup 0 gt
+ { /a .5 def PathLength exch div }
+ { pop /a 1 def PathLength } ifelse
+ /b ED % pattern should fit evenly in b
+ dup /X ED % pattern array
+ 0 get /y ED % length of first black segment
+ /z 0 X {add} forall def % length of the full pattern
+ %% Computation of the scaling factor as described by van Zandt:
+ b a .5 sub 2 mul y mul sub z Div round
+ z mul a .5 sub 2 mul y mul add b exch Div
+ %%%% scaling factor on stack.
+ /z ED %% now, z is the scaling factor
+ false % for the length test below
+ X { z mul } forall X astore %% modification TN 04-08-07
+ %%% Checking whether at least one dash in X has positive length:
+ {0 gt or} forall
+ { X 1 a sub y mul }
+ { [ 1 0 ] 0 }
+ ifelse
+ setdash stroke
+} def
+%
+/DotLine {
+ /b PathLength def
+ /a ED /z ED /y CLW def
+ /z y z add def
+ a 0 gt {
+ /b b a div def
+ }{
+ a 0 eq {
+ /b b y sub def
+ }{ a -3 eq {
+ /b b y add def } if
+ } ifelse
+ } ifelse
+ [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
+ a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
+ setdash 1 setlinecap stroke
+} def
+%
+/SymbolLine { % on stack [ x y x y ...
+ counttomark % number of elements
+ 2 div cvi /n ED % n pairs
+ /YA ED /XA ED % the start point
+ n 1 sub {
+ /YB ED /XB ED
+ /XLength XB XA sub def
+ /YLength YB YA sub def
+ /PAngle YLength XLength Atan def
+ /XYLength XLength YLength Pyth def
+
+ %% for negative SymStep we calculate the distance
+ SymStep 0 lt
+ { %XYLength SymStep div abs cvi
+ /nSym SymStep abs cvi def }
+ { /nSym XYLength SymStep div cvi def }
+ ifelse
+ 0.5 setflat
+ /Shift Symbol stringwidth pop 2 div def
+ /deltaX XLength nSym div def
+ /deltaY YLength nSym div def
+ curveticks
+ { XA YA moveto }
+ { XA Shift sub YA Shift sub moveto }
+ ifelse
+ nSym {
+ gsave
+ curveticks
+ { PAngle 180 sub CorrAngle sub tickAngle add /rotAngle ED
+ currentpoint translate rotAngle rotate
+ 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto
+ SymbolLinewidth setlinewidth stroke
+ }
+ {
+ rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if
+ Symbol show
+ }
+ ifelse
+ grestore
+ deltaX deltaY rmoveto
+ } repeat
+ /YA YB def /XA XB def
+ } repeat
+ curveticks
+ { XA YA moveto }
+ { XA Shift sub YA Shift sub moveto }
+ ifelse
+ gsave
+ curveticks
+ { PAngle 180 sub CorrAngle sub tickAngle add /rotAngle ED
+ XA YA translate rotAngle rotate
+ 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto
+ SymbolLinewidth setlinewidth stroke
+ }
+ {
+ rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if
+ Symbol show
+ }
+ ifelse
+ grestore
+ pop % delete the mark symbol
+} def
+%
+/LineFill { % hv ------------ patch 7 -------------
+ gsave
+ abs /hatchWidthInc ED
+ abs /hatchSepInc ED
+ abs CLW add /a ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ 2 setlinecap
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ x2 x1 sub 1 add {
+ x1 a mul y1 moveto 0 y2 rlineto stroke
+ /x1 x1 1 add
+ hatchWidthInc 0 gt { CLW add } if
+ def
+ hatchSepInc 0 gt hatchWidthInc 0 gt or {
+ /a a hatchSepInc add def
+ CLW hatchWidthInc add SLW
+ } if
+ } repeat
+ grestore
+ pop pop } def
+%
+/DotFill {% on stack: dot radius
+ /dotRadius ED
+ abs CLW add /a ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform
+ pathbbox % llx lly urx ury of smallest bounding box
+ /y2 ED /x2 ED /y1 ED /x1 ED
+ y2 y1 sub a div 2 add cvi /Ny ED
+ x2 x1 sub a div 2 add cvi /Nx ED
+ clip
+ newpath
+ /yA y1 dotRadius add CLW add def
+ /xA0 x1 dotRadius add CLW add def
+ Ny {
+ /xA xA0 def
+ Nx {
+ newpath
+ xA yA dotRadius 0 360 arc
+ SolidDot { gsave fill grestore } if
+ stroke
+ xA a add /xA ED
+ } repeat
+ yA a add /yA ED
+ } repeat
+ grestore
+} def
+%
+/PenroseFill {% on stack: scaling factor
+ dup dup scale
+ 1 exch div round /penroseFactor ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul}
+ { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall
+ [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto
+ i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25
+ mul j l + S rmoveto}F i L j L stroke }F}F}F}F
+ grestore
+ pop pop
+} def
+%
+/TruchetFill { % on stack: scaling factor
+ 10 dict begin
+ dup dup scale
+ 1 exch div round /penroseFactor ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ /ma a neg def
+ /ha a 2 div def
+ /mha ha neg def
+ /tile {
+ rand dup 2 idiv 2 mul eq { 90 rotate } if
+ mha mha moveto ha mha lineto
+ ha ha lineto mha ha lineto
+% closepath .1 setlinewidth stroke
+ contents
+ } def
+ /contents{
+ 0 ha moveto ha 0 lineto
+ 0 mha moveto mha 0 lineto
+% 1 setlinewidth stroke
+ } def
+ /dotiling {
+ f ma mul a f a mul {
+ /i exch def
+ f ma mul a f a mul {
+ /j exch def
+ gsave i j translate
+ tile stroke grestore
+ } for
+ } for
+ } def
+%
+ /f 3 def
+ 5 srand dotiling
+ end % local user dict
+} def
+%
+/BeginArrow {
+ ADict begin % hold it local, for end see EndArrow
+ /@mtrx CM def
+ gsave
+ 2 copy T
+ 2 index sub neg exch
+ 3 index sub exch Atan
+ rotate newpath
+} def
+%
+/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict
+%
+/Arrow {
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /a ED
+ { 0 h T 1 -1 scale } if
+ w neg h moveto
+ 0 0 L w h L w neg a neg rlineto
+ gsave fill grestore
+} def
+%
+/ArrowD { % the sides are drawn as curves (hv 20071211)
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /Inset ED
+ { 0 h T 1 -1 scale } if % changes the direction
+% we use y=w/h^2 * x^2 as equation for the control points
+% for the coordinates the arrow is seen from top to bottom
+% the bottom (tip) is (0;0)
+ w neg h moveto % lower left of >
+ w 9 div 4 mul neg h 3 div 2 mul
+ w 9 div neg h 3 div
+ 0 0 curveto % tip of >
+ w 9 div h 3 div
+ w 9 div 4 mul h 3 div 2 mul
+ w h curveto % upper left of >
+ w neg Inset neg rlineto % move to x=0 and inset
+ gsave fill grestore
+} def
+%
+/Tbar {
+ CLW mul add /z ED
+ z -2 div CLW 2 div moveto
+ z 0 rlineto stroke
+ 0 CLW moveto
+} def
+%
+/Bracket {
+ CLW mul add dup CLW sub 2 div
+ /x ED mul CLW add /y ED /z CLW 2 div def
+ x neg y moveto
+ x neg CLW 2 div L x CLW 2 div L x y L stroke
+ 0 CLW moveto
+} def
+%
+/RoundBracket {
+ CLW mul add dup 2 div
+ /x ED mul /y ED /mtrx CM def
+ 0 CLW 2 div T x y mul 0 ne { x y scale } if
+ 1 1 moveto
+ .85 .5 .35 0 0 0 curveto
+ -.35 0 -.85 .5 -1 1 curveto
+ mtrx setmatrix stroke 0 CLW moveto
+} def
+%
+/SD { 0 360 arc fill } def
+%
+/EndDot { % DS is the dot size
+ { /z DS def } { /z 0 def } ifelse % outer or inner dimen
+ /b ED % the color definition
+ 0 z DS SD
+ b { 0 z DS CLW sub SD } if
+ 0 DS z add CLW 4 div sub
+ moveto
+} def
+%
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+ /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
+ load } if ] cvx newpath 3 1 roll T exec } def
+%
+/NArray { % holds the coordinates and on top of stack the showpoints boolean
+ /showpoints ED
+ counttomark 2 div dup cvi /n ED % n 2 div on stack
+ n eq not { exch pop } if % even numbers of points? delete one
+ ] aload /Points ED
+ showpoints not { Points aload pop } if
+% { ] aload /Points ED }
+% { n 2 mul 1 add -1 roll pop } ifelse % delete the mark symbol
+} def
+%
+/Line {
+ NArray n 0 eq not
+ { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
+ n { Lineto } repeat
+ CP 4 2 roll ArrowB L pop pop
+ } if
+} def
+%
+/LineToYAxis {
+ /Ox ED % Save the x origin value
+ NArray % all x-y pairs on stack
+ n { 2 copy moveto % go to current point
+ Ox exch Lineto % line to y-axis
+ pop % delete old x-value
+ } repeat
+} def
+%
+/LineToXAxis{
+ /Oy ED % Save the y origin value
+ NArray % all x-y pairs on stack
+ n 0 eq not
+ { n 1 eq { 0 0 /n 2 def } if
+ ArrowA
+ /n n 2 sub def
+ CP 2 copy moveto pop Oy Lineto
+ n { 2 copy moveto pop Oy Lineto } repeat
+ CP
+ 4 2 roll
+ ArrowB
+ 2 copy moveto pop Oy
+ L
+ pop pop } if
+} def
+%
+/Arcto {
+ /a [ 6 -2 roll ] cvx def
+ a r
+ /arcto load stopped { 5 } { 4 } ifelse { pop } repeat
+ a
+} def
+%
+/CheckClosed {
+ dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+ and { pop pop /n n 1 sub def } if
+} def
+%
+/Polygon {
+ NArray n 2 eq { 0 0 /n 3 def } if
+ n 3 lt
+ { n { pop pop } repeat }
+ { n 3 gt { CheckClosed } if
+ n 2 mul -2 roll
+ /y0 ED /x0 ED /y1 ED /x1 ED
+ x1 y1
+ /x1 x0 x1 add 2 div def
+ /y1 y0 y1 add 2 div def
+ x1 y1 moveto
+ /n n 2 sub def
+ n { Lineto } repeat
+ x1 y1 x0 y0 6 4 roll Lineto
+ Lineto pop pop closepath } ifelse
+} def
+%
+/SymbolPolygon { % on stack [ x y x y ...
+ counttomark % number of elements
+ 2 add /m ED
+ 2 copy m 2 roll % copy last two
+ m 2 div cvi /n ED % n pairs
+ /YA ED /XA ED % the start point
+ n 1 sub {
+ /YB ED /XB ED
+ /XLength XB XA sub def
+ /YLength YB YA sub def
+ /PAngle YLength XLength Atan def
+ /XYLength XLength YLength Pyth def
+ /nSym XYLength SymStep Div cvi def
+ /Shift Symbol stringwidth pop 2 Div def
+ /deltaX XLength nSym Div def
+ /deltaY YLength nSym Div def
+ XA Shift sub YA Shift sub moveto
+ nSym {
+ gsave rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if
+ Symbol show
+ grestore
+ deltaX deltaY rmoveto
+ } repeat
+% XB Shift sub YB Shift sub moveto Symbol show
+ /YA YB def /XA XB def
+ } repeat
+ pop % delete the mark symbol
+} def
+%
+/Diamond {
+ /mtrx CM def
+ T rotate
+ /h ED
+ /w ED
+ dup 0 eq { pop } { CLW mul neg
+ /d ED
+ /a w h Atan def
+ /h d a sin Div h add def
+ /w d a cos Div w add def } ifelse
+ mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
+ /ArrowA { moveto } def
+ /ArrowB { } def
+ false Line
+ closepath mtrx setmatrix } def
+%
+/Triangle {
+ /mtrx CM def
+ translate
+ rotate /h ED 2 div /w ED
+ dup CLW mul /d ED
+ /h h d w h Atan sin Div sub def
+ /w w d h w Atan 2 div dup cos exch sin Div mul sub def
+ mark
+ 0 d w neg d 0 h w d 0 d
+ /ArrowA { moveto } def
+ /ArrowB { } def
+ false
+ Line
+ closepath
+ mtrx
+% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+% setmatrix } def
+ setmatrix pop
+} def
+% DG/SR modification end
+%
+/CCA {
+ /y ED /x ED
+ 2 copy y sub /dy1 ED
+ x sub /dx1 ED
+ /l1 dx1 dy1 Pyth def
+} def
+%
+/CC {
+ /l0 l1 def
+ /x1 x dx sub def
+ /y1 y dy sub def
+ /dx0 dx1 def
+ /dy0 dy1 def
+ CCA
+ /dx dx0 l1 c exp mul dx1 l0 c exp mul add def
+ /dy dy0 l1 c exp mul dy1 l0 c exp mul add def
+ /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def
+ /x2 x l0 dx mul m mul sub def
+ /y2 y l0 dy mul m mul sub def
+ /dx l1 dx mul m mul neg def
+ /dy l1 dy mul m mul neg def
+} def
+%
+/IC {
+ /c c 1 add def
+ c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse
+ /a a 2 mul 3 div 45 cos b exp div def
+ CCA
+ /dx 0 def
+ /dy 0 def
+} def
+%
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+%
+/OpenCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
+} def
+%
+/CurvePath {
+ %% for negative SymStep we calculate the distance
+ SymStep 0 lt { gsave PathLength SymStep div abs /SymStep ED grestore } if
+ 0.5 setflat
+ flattenpath /z 0 def /z0 0 def
+ { /y1 ED /x1 ED /y2 y1 def /x2 x1 def
+ x1 Shift sub y1 Shift sub moveto
+ gsave
+ curveticks
+ { x1 y1 translate startAngle rotate
+ 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto
+ SymbolLinewidth setlinewidth stroke
+ }
+ { startAngle rotate Symbol show }
+ ifelse
+ grestore /z0 z def }
+ { /y ED /x ED PathLength@ z z0 sub SymStep ge {
+ x Shift sub y Shift sub moveto
+ gsave
+ curveticks
+ { y yOld sub x xOld sub Atan 180 sub CorrAngle sub /rotAngle ED
+ x y translate rotAngle rotate
+ 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto
+ SymbolLinewidth setlinewidth stroke
+ }
+ {
+ rotateSymbol { y yOld sub x xOld sub Atan 180 sub CorrAngle sub rotate } if
+ Symbol show
+ }
+ ifelse
+ grestore /z0 z def } if
+ /yOld y def /xOld x def }
+ {} %% the lineto part
+ { /y y2 def /x x2 def PathLength@
+ x Shift sub y Shift sub moveto
+ gsave
+ curveticks
+ { y yOld sub x xOld sub Atan 180 sub /rotAngle ED
+ x y translate rotAngle rotate
+ 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto
+ SymbolLinewidth setlinewidth stroke
+ }
+ {
+ x Shift sub y Shift sub moveto
+ rotateSymbol { y yOld sub x xOld sub Atan 180 sub CorrAngle sub rotate } if
+ Symbol show
+ }
+ ifelse
+ grestore
+ }
+ pathforall
+% curveticks
+% { gsave
+% x y translate rotAngle rotate
+% 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto
+% SymbolLinewidth setlinewidth stroke grestore
+% } if
+ z
+} def
+%
+/OpenSymbolCurve {
+ OpenCurve
+ 0.1 setflat
+ /Shift Symbol stringwidth pop 2 div def
+ CurvePath
+} def
+%
+/AltCurve {
+ { false NArray n 2 mul 2 roll
+ [ n 2 mul 3 sub 1 roll ] aload
+ /Points ED
+ n 2 mul -2 roll }
+ { false NArray } ifelse
+ n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse
+} def
+%
+/AltOpenSymbolCurve {
+ AltCurve
+ 0.1 setflat
+ /Shift Symbol stringwidth pop 2 div def
+ CurvePath
+} def
+%
+/ClosedCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { n 3 gt { CheckClosed } if
+ 6 copy n 2 mul 6 add 6 roll
+ IC CC x y moveto n { NC } repeat
+ closepath pop pop
+ } ifelse
+} def
+%
+/ClosedSymbolCurve {
+ ClosedCurve
+ 0.1 setflat
+ /Shift Symbol stringwidth pop 2 div def
+ CurvePath
+} def
+%
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore } def
+%
+/FontDot {
+ DS 2 mul dup
+ matrix scale matrix concatmatrix exch matrix
+ rotate matrix concatmatrix exch
+ findfont exch makefont setfont
+} def
+%
+/Rect {
+ x1 y1 y2 add 2 div moveto
+ x1 y2 lineto
+ x2 y2 lineto
+ x2 y1 lineto
+ x1 y1 lineto
+ closepath
+} def
+%
+/OvalFrame {
+ x1 x2 eq y1 y2 eq or
+ { pop pop x1 y1 moveto x2 y2 L }
+ { y1 y2 sub abs x1 x2 sub abs 2 copy gt
+ { exch pop } { pop } ifelse
+ 2 div exch { dup 3 1 roll mul exch } if
+ 2 copy lt { pop } { exch pop } ifelse
+ /b ED
+ x1 y1 y2 add 2 div moveto
+ x1 y2 x2 y2 b arcto
+ x2 y2 x2 y1 b arcto
+ x2 y1 x1 y1 b arcto
+ x1 y1 x1 y2 b arcto
+ 16 { pop } repeat
+ closepath
+ } ifelse
+} def
+%
+/Frame {
+ CLW mul /a ED
+ 3 -1 roll
+ 2 copy gt { exch } if
+ a sub /y2 ED
+ a add /y1 ED
+ 2 copy gt { exch } if
+ a sub /x2 ED
+ a add /x1 ED
+ 1 index 0 eq { pop pop Rect } { OvalFrame } ifelse
+} def
+%
+/BezierNArray {
+ /f ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat
+ f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/OpenBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { ArrowA n 4 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ 6 2 roll 4 2 roll ArrowB curveto } ifelse
+} def
+%
+/OpenSymbolBezier {
+ OpenBezier
+ 0.1 setflat
+ /Shift Symbol stringwidth pop 2 div def
+ CurvePath
+} def
+%
+/ClosedBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { moveto n 1 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ closepath } ifelse
+} def
+%
+/ClosedSymbolBezier {
+ /f ED % save showpoints value
+ 2 copy /yEnd ED /xEnd ED
+ counttomark -2 roll 2 copy /yStart ED /xStart ED
+ counttomark 2 roll
+ f
+ ClosedBezier
+ 0.1 setflat
+ /Shift Symbol stringwidth pop 2 div def
+ CurvePath
+ [ xEnd yEnd xStart yStart SymbolLine
+} def
+%
+/BezierShowPoints {
+ gsave
+ Points aload length 2 div cvi /n ED
+ moveto
+ n 1 sub { lineto } repeat
+ CLW 2 div SLW [ 4 4 ] 0 setdash stroke
+ grestore
+} def
+%
+/Parab {
+ /y0 ED /x0 ED /y1 ED /x1 ED
+ /dx x0 x1 sub 3 div def
+ /dy y0 y1 sub 3 div def
+ x0 dx sub y0 dy add x1 y1 ArrowA
+ x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB
+ curveto
+ /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def
+} def
+%
+/Parab1 { % 1 end | 0 SP
+ /ySP ED /xSP ED /y1 ED /x1 ED
+ /dx xSP x1 sub 3 div def
+ /dy ySP y1 sub 3 div def
+ newpath x1 y1 moveto xSP y1 lineto xSP ySP lineto
+ x1 ySP lineto closepath clip
+ currentpoint
+ newpath moveto
+ xSP dx sub ySP dy add x1 y1 ArrowA
+ xSP dx add ySP dy add xSP 2 mul x1 sub y1 ArrowB
+ curveto
+ /Points [ x1 y1 xSP ySP xSP 2 mul x1 sub y1 ] def
+} def
+%
+/Grid {
+ newpath
+ /a 4 string def
+ /b ED % psk@gridlabels in pt
+ /c ED % { \pst@usecolor\psgridlabelcolor }
+ /n ED % psk@griddots
+ cvi dup 1 lt { pop 1 } if
+ /s ED % \psk@subgriddiv
+ s div dup 0 eq { pop 1 } if
+ /dy ED s div dup 0 eq { pop 1 } if % \pst@number\psyunit abs
+ /dx ED dy div round dy mul % \pst@number\psxunit abs
+ /y0 ED dx div round dx mul
+ /x0 ED dy div round cvi
+ /y2 ED dx div round cvi
+ /x2 ED dy div round cvi
+ /y1 ED dx div round cvi
+ /x1 ED
+ /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def
+ /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def
+ b 0 gt {
+ /z1 b 4 div CLW 2 div add def
+% /Helvetica findfont b scalefont setfont
+ /b b .95 mul CLW 2 div add def } if
+ systemdict /setstrokeadjust known
+ { true setstrokeadjust /t { } def }
+ { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
+ exch itransform } bind def } ifelse
+ gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse
+ /i x1 def
+ /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def
+ /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def
+ x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if
+ { i dx mul dup y0 moveto
+ b 0 gt
+ { gsave c i a cvs dup stringwidth pop
+ /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse
+ h 0 gt {b neg}{z1} ifelse
+ rmoveto show grestore } if
+ dup t f moveto
+ g t L stroke
+ /i i w add def
+ } repeat
+ grestore
+ gsave
+ n 0 gt
+ % DG/SR modification begin - Nov. 7, 1997 - Patch 1
+ %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
+ { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
+ % DG/SR modification end
+ { 2 setlinecap } ifelse
+ /i y1 def
+ /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def
+ /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def
+ y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if
+ { newpath i dy mul dup x0 exch moveto
+ b 0 gt { gsave c i a cvs dup stringwidth pop
+ /z2 ED
+ w 0 gt {z1 z2 add neg} {z1} ifelse
+ h 0 gt {z1} {b neg} ifelse
+ rmoveto show grestore } if
+ dup f exch t moveto
+ g exch t L stroke
+ /i i h add def
+ } repeat
+ grestore
+} def
+%
+/ArcArrow {
+ /d ED /b ED /a ED
+ gsave
+ newpath 0 -1000 moveto clip
+ newpath
+ 0 1 0 0 b
+ grestore
+ c mul
+ /e ED
+ pop pop pop r a e d PtoC y add exch x add
+ exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+ mul neg d
+} def
+%
+/Ellipse {
+ /rotAngle ED
+ /mtrx CM def
+ T
+ rotAngle rotate
+ scale 0 0 1 5 3 roll arc
+ mtrx setmatrix
+} def
+%
+/ArcAdjust { %%%% Vincent Guirardel
+% given a target length (targetLength) and an initial angle (angle0) [in the stack],
+% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
+% This computes an angle t such that (x0,y0) is at distance
+% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
+% NOTE: this an absolute angle, it does not have to be added or substracted to angle0
+% contrary to TvZ's code.
+% To achieve, this, one iterates the following process: start with some angle t,
+% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
+% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
+%
+% Another difference with TvZ's code is that we need d (=add/sub) to be defined.
+% the value of d = add/sub is used to know on which side we have to move.
+% It is only used in the initialisation of the angle before the iteration.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Input stack: 1: target length 2: initial angle
+% variables used : rx, ry, d (=add/sub)
+%
+ /targetLength ED /angle0 ED
+ /x0 rx angle0 cos mul def
+ /y0 ry angle0 sin mul def
+% we are looking for an angle t such that (x0,y0) is at distance targetLength
+% from the point M(t)=(rx*cos(t),ry*sin(t)))
+%initialisation of angle (using 1st order approx = TvZ's code)
+ targetLength 57.2958 mul
+ angle0 sin rx mul dup mul
+ angle0 cos ry mul dup mul
+ add sqrt div
+% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
+% (if the ellipse is very curved at the point where we draw the arrow, %
+% the value can be much more than 360 degrees !)
+% this should avoid going on the wrong side (more than 180 degrees) or go near
+% a bad attractive point (at 180 degrees)
+ dup 90 ge { pop 90 } if
+ angle0 exch d % add or sub
+% maximum number of times to iterate the iterative procedure:
+% iterative procedure: takes an angle t on top of stack, computes a
+% better angle (and put it on top of stack)
+ 30 { dup
+% compute distance D between (x0,y0) and M(t)
+ dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
+% if D almost equals targetLength, we stop
+ dup targetLength sub abs 1e-5 le { pop exit } if
+% stack now contains D t
+% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
+% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
+ exch dup cos rx mul x0 sub exch sin ry mul y0 sub
+% stack contains: y(t)-y0, x(t)-x0, d
+ 2 index Div targetLength mul y0 add ry Div exch
+ 2 index Div targetLength mul x0 add rx Div
+% stack contains x(t')/rx , y(t')/ry , d
+% now compute t', and remove D from stack
+ atan exch pop
+ } repeat
+% we don't look at what happened... in particular, if targetLength is greater
+% than the diameter of the ellipse...
+% the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
+% after iteration, stack contains an angle t such that M(t) is the tail of the arrow
+% to give back the result as a an angle relative to angle0 we could add the following line:
+% angle0 sub 0 exch d
+%
+% begin bug fix 2006-01-11
+% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180
+%(we don't want to make the ellipse turn more or less than it should)...
+dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse
+% end bug fix
+} def
+%
+/EllipticArcArrow {
+ /d ED % is add or sub
+ /b ED % arrow procedure
+ /a1 ED % angle
+ gsave
+ newpath
+ 0 -1000 moveto
+ clip % Set clippath far from arrow.
+ newpath
+ 0 1 0 0 b % Draw arrow to determine length.
+ grestore
+% Length of arrow is on top of stack. Next 3 numbers are junk.
+%
+ a1 exch ArcAdjust % Angular position of base of arrow.
+ /a2 ED
+ pop pop pop
+ a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig
+ a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig
+ a1 cos rx mul xOrig add %
+ a1 sin ry mul yOrig add %
+% Now arrow tip coor and base coor are on stack.
+ b pop pop pop pop % Draw arrow, and discard coordinates.
+ a2 CLW 8 div
+% change value of d (test it by looking if `` 1 1 d '' gives 2 or not )
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
+ ArcAdjust
+% resets original value of d
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap.
+} def
+%%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
+%
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+%
+/RotBegin {
+ tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
+ /TMatrix [ TMatrix CM ] cvx def
+ /a ED
+ a Rot /RAngle [ RAngle dup a add ] cvx def
+} def
+%
+/RotEnd {
+ /TMatrix [ TMatrix setmatrix ] cvx def
+ /RAngle [ RAngle pop ] cvx def
+} def
+%
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
+/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
+%
+/Uput {
+ /a ED
+ add 2 div /h ED 2
+ div /w ED
+ /s a sin def
+ /c a cos def
+ /b s abs c abs 2 copy gt dup
+ /q ED
+ { pop } { exch pop } ifelse def
+ /w1 c b div w mul def
+ /h1 s b div h mul def
+ q { w1 abs w sub dup c mul abs }{ h1 abs h sub dup s mul abs } ifelse
+} def
+%
+/UUput {
+ /z ED
+ abs /y ED
+ /x ED
+ q { x s div c mul abs y gt }{ x c div s mul abs y gt } ifelse
+ { x x mul y y mul sub z z mul add sqrt z add }
+ { q { x s div } { x c div } ifelse abs
+ } ifelse
+ a PtoC
+ h1 add exch
+ w1 add exch
+} def
+%
+/BeginOL {
+ dup (all) eq exch TheOL eq or
+ { IfVisible not { Visible /IfVisible true def } if }
+ { IfVisible { Invisible /IfVisible false def } if } ifelse
+} def
+%
+/InitOL {
+ /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
+ /Visible { CP OLUnit idtransform T moveto } def
+ /Invisible { CP OLUnit neg exch neg exch idtransform T moveto } def
+ /BOL { BeginOL } def
+ /IfVisible true def
+} def
+%
+%%%%%%%%%%%%%%%%% tools %%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% ### bubblesort ###
+%% syntax : array bubblesort --> array2 trie par ordre croissant
+%% code de Bill Casselman
+%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
+/bubblesort {
+4 dict begin
+ /a exch def
+ /n a length 1 sub def
+ n 0 gt {
+ % at this point only the n+1 items in the bottom of a remain to
+ % the sorted largest item in that blocks is to be moved up into
+ % position n
+ n {
+ 0 1 n 1 sub {
+ /i exch def
+ a i get a i 1 add get gt {
+ % if a[i] > a[i+1] swap a[i] and a[i+1]
+ a i 1 add
+ a i get
+ a i a i 1 add get
+ % set new a[i] = old a[i+1]
+ put
+ % set new a[i+1] = old a[i]
+ put
+ } if
+ } for
+ /n n 1 sub def
+ } repeat
+ } if
+ a
+end
+} def
+%
+%
+/concatstringarray{ % [(a) (b) ... (z)] --> (ab...z) 20100422
+ 0 1 index { length add } forall
+ string
+ 0 3 2 roll
+ { 3 copy putinterval length add }forall
+ pop
+} bind def
+%
+/dot2comma {% on stack a string (...)
+ 2 dict begin
+ /Output exch def
+ 0 1 Output length 1 sub {
+ /Index exch def
+ Output Index get 46 eq { Output Index 44 put } if
+ } for
+ Output
+ end
+} def
+%
+end
+%-----------------------------------------------------------------------------%
+%
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-algparser.pro 0 0
+% $Id: pst-algparser.pro 594 2011-10-31 18:13:18Z herbert $
+%%
+%% PostScript prologue for PSTricks algorithm parser
+%% Version 0.04, 2011/10/21
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%%-----------------------------------------------------------------------------%
+%
+/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez
+%
+/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin
+%
+% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.13
+%
+% 09/2011 DR factorial with ! added
+%
+% E->T|E+T
+% T->FS|T*FS
+% FS -> F | +FS | -FS
+% F->P|F^SF|P!
+% P->(E)|literal
+% literal->number|var|var[E]|func(params)
+% params->E|E,param
+% number->TOBEFINISHED
+%
+%% E expression, T term, SF signed factor, F factor, P power
+%
+%% parser
+%
+%% str
+%
+%% C->E<condition_operators>E
+%% STR index -> STR index+lenExpr
+/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def
+%
+%% analyze Expression List (separator , or | )
+%% STR index -> STR index+lenExpr
+%% /AnalyzeListOfE {
+%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar
+%% NextNonBlankChar dup 0 eq { pop exit } if
+%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if
+%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop
+%% AnalyzeListOfEPostHook
+%% } def
+/AnalyzeListOfE {
+ /NotFirst false def
+ { NextNonBlankChar pop AnalyzeExpr
+ NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse
+ dup Strlen eq { exit } if NextNonBlankChar
+ dup 44 ne 1 index 124 ne and
+ { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse }
+ if pop 1 add } loop
+ AnalyzeListOfEPostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% E->T|E+T
+%% STR index -> STR index+lenExpr
+/AnalyzeExpr {
+ AnalyzePreHook AnalyzeTerm IsEndingExpr
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% T->FS|T*FS
+%% STR index
+/AnalyzeTerm {
+ AnalyzePreHook AnalyzeSignedFactor IsEndingTerm
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FS -> F | +FS | -FS
+%% STR index
+/AnalyzeSignedFactor {
+ AnalyzePreHook 2 copy get dup IsUnaryOp
+ { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp }
+ { pop AnalyzeFactor }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% F->P|F^P|P!
+%% STR index
+/AnalyzeFactor {
+ AnalyzePreHook AnalyzePower IsEndingFactor
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { dup 33 eq%% is there a ! DR 09/2011
+ { pop 1 add NextNonBlankChar pop EvalFactorial }
+ { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower }
+ ifelse
+ IsEndingFactor { pop exit } if } loop }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% P->(E)|literal
+%% STR index
+/AnalyzePower {
+ %% depending of first char either a number, or a literal
+ 2 copy get dup 40 eq%%an open par
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop }
+ { AnalyzeLiteral }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index STR[index] -> STR index
+%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def
+/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% recognize + or -
+%% chr -> T/F
+/IsUnaryOp { dup 43 eq exch 45 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadNumber {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read mantissa
+ { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop
+ dup 101 eq exch 69 eq or
+ %%% there is a "e" or "E" -> read exponant
+ { 1 add 2 copy get dup IsUnaryOp
+ { pop 1 add 2 copy get } if
+ { IsNumber not { exit } if 1 add 2 copy get } loop }
+ if
+ dup 4 1 roll
+ 3 -1 roll exch 1 index sub getinterval
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadCondOp {
+ NextNonBlankChar 1 index 4 1 roll
+ { IsCondOp not { exit } if 1 add 2 copy get } loop
+ 2 copy 5 -1 roll
+ exch 1 index sub getinterval 3 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can contain only : 0123456789.
+%% chr -> T/F
+/IsLiteral {%
+ dup 48 ge exch dup 57 le 3 -1 roll and exch
+ dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch
+ dup 97 ge exch 122 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)?
+%% STR index -> literal STR index' nextchr
+/ReadLiteral {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read literal core
+ { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop
+ 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a clpar
+%% STR index -> STR index STR[index] T/F
+/IsEndingExpr {%
+ 2 copy dup Strlen eq
+ %% if end of str is reached -> end !
+ { pop pop 0 true }
+ %% ending chr -> clpar, comma, |, <, >, =, !,
+ {get dup dup 41 eq
+ exch dup 124 eq
+ exch dup 93 eq
+ exch dup 44 eq
+ exch dup 30 eq
+ exch dup 60 ge exch 62 le and or or or or or}
+ ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a +-
+%% STR index -> STR index STR[index] T/F
+/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or */
+%% STR index -> STR index STR[index] T/F
+/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or ^
+%% STR index -> STR index STR[index] T/F
+/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index STR[index]
+/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def
+/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% DEBUG
+/BRK {false} def
+/BRKtrue {/BRK true def} def
+/BRKStop {BRK {BRKtoto} if } def
+/BRKEvalStop {BRK exch if } def
+/BRKBRK2true {BRK {BRK2true} if } def
+/BRK2 {false} def
+/BRK2true {/BRK2 true def} def
+/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def
+end
+%
+%-------------------------------------------------------------------------------%
+%
+/tx@AlgToPs 12 dict def tx@AlgToPs begin
+%
+%% algExpr -> PSVector
+/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def
+/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def
+/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def
+/Strlen 0 def
+/EvalListOfExpr {} def%
+/EvalNumber {%
+ ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx
+ exch 1 add array astore def NextNonBlankChar pop } def
+/EvalAddSub {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def
+} def
+/EvalMulDiv {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def
+} def
+/EvalPower {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ pop /exp cvx exch 1 add array astore def
+} def
+/EvalFactorial {% DR 09/2011
+ /ExpressionVector ExpressionVector aload length
+ /fact cvx exch 1 add array astore def
+} def
+/EvalLiteral {%
+ ReadLiteral
+ dup 40 eq%%% there is an open par -> function call
+ { pop 2 index
+ dup (Sum) eq { EvalSum }
+ { dup (IfTE) eq { EvalCond }
+ { dup (Derive) eq { pop EvalDerive }
+ { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx
+ exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }
+ { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def
+ dup 91 eq%%% there is an open bracket -> vector element
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr
+ /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add }
+ { pop NextNonBlankChar pop }
+ ifelse}
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% the derive function : Derive(n,f(x))
+%% firstparindex lastparindex ->
+/EvalDerive {
+ %% manage the function descripiton
+ 1 add ReadNumber 3 1 roll NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ 1 add NextNonBlankChar pop
+ 3 -1 roll cvi
+ dup 0 eq
+ { pop AnalyzeExpr 3 -1 roll pop 1 add }
+ { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll
+ { (x) tx@Derive begin Derive end } repeat
+ ExpressionVector exch /ExpressionVector [] def
+ AlgToPs aload length
+ /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def
+ l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add
+ 1 index length /Strlen exch def } ifelse
+} def
+/EvalSum {%
+ pop 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll
+ 5 -1 roll 4 add array astore def
+ %% keep ExpressionVector for later and create a new one for internal Sum computation
+ ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def
+ 1 add NextNonBlankChar pop AnalyzeExpr
+ %% add each term
+ /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
+ /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add
+ array astore def 3 -1 roll pop 1 add
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+/EvalCond {%
+ pop 1 add AnalyzeCond NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ ExpressionVector 3 1 roll /ExpressionVector [] def
+ 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def
+ NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add AnalyzeExpr
+ NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if
+ ExpressionVector
+ /ExpressionVector 6 -1 roll aload length dup
+ 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def
+ 1 add 3 -1 roll pop
+} def
+%% CondOp STR index
+/EvalCondOp {%
+ 3 -1 roll
+ dup (=) eq { /eq } {%
+ dup (<) eq { /lt } {%
+ dup (>) eq { /gt } {%
+ dup (>=) eq { /ge } {%
+ dup (<=) eq { /ge } {%
+ dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator }
+ ifelse } ifelse } ifelse } ifelse } ifelse } ifelse
+ cvx exch pop
+ /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def
+/EvalUnaryOp {
+ 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook {} bind def
+/PreEvalHook {} bind def
+/AnalyzeListOfEPostHook {} bind def
+/AnalyzePostHook {} def
+/RollOp { 3 1 roll } bind def
+end %tx@CoreAnalyzerDict
+%
+%--------------------------------------------------------------------%
+%
+/tx@Derive 41 dict def tx@Derive begin
+%%increase ^^ for each function added
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable -> PSVector
+/Derive {%
+ 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end
+} def
+/Strlen 0 def
+/InitParser { dup length /Strlen exch def 0 } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable index -> PSVector
+/DeriveIndexed {%
+ 3 1 roll 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u,v)'=-(u',v')
+/EvalListOfExpr {%
+ 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe
+ 2 copy 7 -1 roll dup length 4 1 roll putinterval add
+ 6 -2 roll pop pop
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (-u)'=-(u')
+/EvalUnaryOp {
+ 4 -2 roll 4 index (0) eq
+ { (0) StrConcat 7 -1 roll pop }
+ { 7 -1 roll 45 eq
+ { AddSub AddOpPar true } { false } ifelse
+ 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (number)'=0
+/EvalNumber { ReadNumber (0) 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u+v)'=u'+v'
+/EvalAddSub {%
+ 7 index dup (0) eq
+ { pop true }%% du=0 nothing added
+ { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false }
+ ifelse
+ 5 index dup (0) eq
+ { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0
+ { exch
+ { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added
+ { 5 -2 roll 7 index 43 eq%%something yet added
+ { AddAdd false } { AddSub AddOpPar true } ifelse }
+ ifelse 11 1 roll
+ 3 -1 roll StrConcat 10 -1 roll { AddClPar } if
+ 2 copy pop 0 6 2 roll GetIntervalNewStr }
+ ifelse
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)' or (u/v)'
+/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)'=u'*v+u*v'
+/EvalMul {%
+ 4 -2 roll 7 index dup (0) eq
+ { pop false }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if
+ true }%%du!=0
+ ifelse
+ 5 1 roll 5 index (0) eq
+ { 5 -1 roll not { (0) StrConcat } if }%%dv=0
+ { 5 -1 roll { AddAdd } if
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ }%%dv!=0
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u/v)'=(u'*v-u*v')/v^2
+/EvalDiv {%
+ 4 -2 roll
+ 4 index (0) eq%%dv=0 -> u'/v
+ { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse }
+ { 7 index dup (0) eq
+ { pop }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0
+ ifelse
+ AddSub
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ %}%%dv!=0
+ 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar
+ AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add }
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str1 index str2 -> str1 index
+/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def
+/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+/EvalPower {%
+ 4 -2 roll 7 index (0) eq
+ {%%if du=0 then (u^v)'=v'ln(u)u^v
+ 4 index (0) eq
+ { (0) StrConcat }%%if dv=0 then (u^v)'=0
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if
+ AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse
+ }
+ {%%du!=0
+ 4 index (0) eq
+ {%%if dv=0 then (u^v)'=vu'u^(v-1)
+ 5 index dup IsStrNumber
+ { dup (0) eq
+ { StrConcat }
+ { dup dup (1) eq exch (1.0) eq or
+ { StrConcat }
+ { StrConcat
+ 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1
+ { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006
+ (*\() StrConcat 8 index StrConcat (\)) StrConcat
+ 5 index dup dup (2) eq exch (2.0) eq or
+ { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }
+ { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)) StrConcat } ifelse
+ }
+ {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+ 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if
+ AddOpPar 5 index StrConcat (\)*\() StrConcat
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)+\() StrConcat
+ 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (\)*ln\() StrConcat
+ 8 index StrConcat AddClPar
+ } ifelse
+ } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% No derivative for factorial ! only cst => null derivative
+/EvalFactorial {% DR 09/2011
+ 4 index (0) eq
+ { (0) mark 8 -2 roll cleartomark 2 index 7 index dup 4 index exch sub getinterval exch 6 2 roll }
+ { DERIVATIVE_ENGINE_ERROR_no_variable_in_factorial } ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str -> true/false
+/IsStrNumber {%
+ true exch
+ { dup 48 lt exch dup 57 gt 3 -1 roll or
+ exch dup 46 ne%%.
+ exch dup 43 ne%%+
+ exch 45 ne%%-
+ and and and { pop false } if } forall
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalLiteral {%
+ ReadLiteral dup 40 eq%%% there is an open par -> function call
+ { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec }
+ { dup 91 eq%%% there is an open bracket -> vector element
+ { DERIVATIVE_ENGINE_ERROR_vector_not_yet_implemented }
+ { pop EvalVariable }
+ ifelse }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% first last parpos Expr[first:parpos-1] ->
+/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (f(u))'=u'f'(u)
+/EvalFunc {
+ 4 2 roll 4 index (1) ne
+ { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Func derivative -> Eval<func>
+/EvalFunc_sin {%
+ PreCommonFunc
+ { (cos\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_cos {%
+ PreCommonFunc
+ { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_tan {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_asin {%
+ PreCommonFunc
+ { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_acos {%
+ PreCommonFunc
+ { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_atg {%
+ PreCommonFunc
+ { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_ln {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_exp {%
+ PreCommonFunc
+ { (exp\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_EXP {%
+ PreCommonFunc
+ { (EXP\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_sqrt {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Fact {%
+ PreCommonFunc { DERIVATIVE_ENGINE_ERROR_no_variable_expression_in_Fact } if
+ PostCommonFunc } def
+/EvalFunc_sh {%
+ PreCommonFunc
+ { (ch\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_ch {%
+ PreCommonFunc
+ { (sh\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_th {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argsh {%
+ PreCommonFunc
+ { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argch {%
+ PreCommonFunc
+ { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argth {%
+ PreCommonFunc
+ { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/PreCommonFunc {
+ 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 2 roll 4 index (0) eq
+ { (0) StrConcat false }
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse
+} def
+/PostCommonFunc {
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+/EvalFunc_Derive {%
+ 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs
+ 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add
+ 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval
+ exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_Sum {%
+ 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop 3 -1 roll pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if
+ 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat
+ 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_IfTE {%
+ 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond
+ NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop dup 5 1 roll
+ AnalyzeExpr NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop
+ AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat
+ 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% advance in str until a comma is found (no error detection!)
+%% str index -> str index'
+/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% No derivative for condition....
+/EvalCondOp { 3 -1 roll pop } bind def
+/PutIntervalOneAdd {putinterval 1 add} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add close parenthesis in string at the given index
+%% str index -> str index+1
+/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add 0 in string at the given index
+%% str index -> str index+1
+/AddZero {2 copy (0) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddMul {2 copy (*) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddDiv {2 copy (/) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a plus sign in string at the given index
+%% str index -> str index+1
+/AddAdd {2 copy (+) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a minus sign in string at the given index
+%% str index -> str index+1
+/AddSub {2 copy (-) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a pipe sign in string at the given index
+%% str index -> str index+1
+/AddPipe {2 copy (|) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook { dup 5 1 roll } bind def
+/PreEvalHook {} def
+/AnalyzePostHook { 7 -1 roll pop } bind def
+/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def
+/RollOp { 5 1 roll } bind def
+end%%%tx@CoreAnalyzerDict
+/tx@AddMathFunc 12 dict def tx@AddMathFunc begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% NEW FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2))
+%% x -> theta
+/asin {%
+ dup abs 1 gt { EQDFasinrangeerror } if
+ dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad
+} def
+%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x)
+%% x -> theta
+/acos {%
+ dup abs 1 gt { EQDFacosrangeerror } if
+ dup dup mul 1 exch sub sqrt exch atan DegtoRad
+} def
+%% function arctangent in radians
+%% x -> theta
+/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def
+%% HYPERBOLIC FUNCTIONS
+/sh { dup Ex exch neg Ex sub 2 div } def
+/ch { dup Ex exch neg Ex add 2 div } def
+/th { dup sh exch ch div } def
+/Argsh { dup dup mul 1 add sqrt add ln } def
+/Argch { dup dup mul 1 sub sqrt add ln } def
+/Argth { dup 1 add exch 1 exch sub div ln 2 div } def
+%% modified exponential funtion for 0
+%% x n -> x^n
+/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def
+%% modified exponential funtion for 0
+%% x -> e^x
+/Ex { Euler exch exp } bind def
+%%
+%% factorial function
+%% n -> n!
+/Fact { 1 exch 2 exch 1 exch { mul } for } bind def
+/fact { Fact } bind def
+/! { Fact } bind def
+end
+%
+% END pst-algparser.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-tools.pro 0 0
+% $Id: pst-tools.pro 622 2012-01-01 15:36:14Z herbert $
+%
+%% PostScript tools prologue for pstricks.tex.
+%% Version 0.02, 2012/01/01
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+%
+/Pi2 1.57079632679489661925640 def
+/factorial { % n on stack, returns n!
+ dup 0 eq { 1 }{
+ dup 1 gt { dup 1 sub factorial mul } if }
+ ifelse } def
+%
+/MoverN { % m n on stack, returns the binomial coefficient m over n
+ 2 dict begin
+ /n exch def /m exch def
+ n 0 eq { 1 }{
+ m n eq { 1 }{
+ m factorial n factorial m n sub factorial mul div } ifelse } ifelse
+ end
+} def
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% subroutines for complex numbers, given as an array [a b]
+% which is a+bi = Real+i Imag
+%
+/cxadd { % [a1 b1] [a2 b2] = [a1+a2 b1+b2]
+ dup 0 get % [a1 b1] [a2 b2] a2
+ 3 -1 roll % [a2 b2] a2 [a1 b1]
+ dup 0 get % [a2 b2] a2 [a1 b1] a1
+ 3 -1 roll % [a2 b2] [a1 b1] a1 a2
+ add % [a2 b2] [a1 b1] a1+a2
+ 3 1 roll % a1+a2 [a2 b2] [a1 b1]
+ 1 get % a1+a2 [a2 b2] b1
+ exch 1 get % a1+a2 b1 b2
+ add 2 array astore
+} def
+%
+/cxneg { % [a b]
+ dup 1 get % [a b] b
+ exch 0 get % b a
+ neg exch neg % -a -b
+ 2 array astore
+} def
+%
+/cxsub { cxneg cxadd } def % same as negative addition
+%
+% [a1 b1][a2 b2] = [a1a2-b1b2 a1b2+b1a2] = [a3 b3]
+/cxmul { % [a1 b1] [a2 b2]
+ dup 0 get % [a1 b1] [a2 b2] a2
+ exch 1 get % [a1 b1] a2 b2
+ 3 -1 roll % a2 b2 [a1 b1]
+ dup 0 get % a2 b2 [a1 b1] a1
+ exch 1 get % a2 b2 a1 b1
+ dup % a2 b2 a1 b1 b1
+ 5 -1 roll dup % b2 a1 b1 b1 a2 a2
+ 3 1 roll mul % b2 a1 b1 a2 b1a2
+ 5 -2 roll dup % b1 a2 b1a2 b2 a1 a1
+ 3 -1 roll dup % b1 a2 b1a2 a1 a1 b2 b2
+ 3 1 roll mul % b1 a2 b1a2 a1 b2 a1b2
+ 4 -1 roll add % b1 a2 a1 b2 b3
+ 4 2 roll mul % b1 b2 b3 a1a2
+ 4 2 roll mul sub % b3 a3
+ exch 2 array astore
+} def
+%
+% [a b]^2 = [a^2-b^2 2ab] = [a2 b2]
+/cxsqr { % [a b] square root
+ dup 0 get exch 1 get % a b
+ dup dup mul % a b b^2
+ 3 -1 roll % b b^2 a
+ dup dup mul % b b^2 a a^2
+ 3 -1 roll sub % b a a2
+ 3 1 roll mul 2 mul % a2 b2
+ 2 array astore
+} def
+%
+/cxsqrt { % [a b]
+% dup cxnorm sqrt /r exch def
+% cxarg 2 div RadtoDeg dup cos r mul exch sin r mul cxmake2
+ cxlog % log[a b]
+ 2 cxrdiv % log[a b]/2
+ aload pop exch % b a
+ 2.781 exch exp % b exp(a)
+ exch cxconv exch % [Re +iIm] exp(a)
+ cxrmul %
+} def
+%
+/cxarg { % [a b]
+ aload pop % a b
+ exch atan % arctan b/a
+ DegtoRad % arg(z)=atan(b/a)
+} def
+%
+% log[a b] = [a^2-b^2 2ab] = [a2 b2]
+/cxlog { % [a b]
+ dup % [a b][a b]
+ cxnorm % [a b] |z|
+ log % [a b] log|z|
+ exch % log|z|[a b]
+ cxarg % log|z| Theta
+ cxmake2 % [log|z| Theta]
+} def
+%
+% square of magnitude of complex number
+/cxnorm2 { % [a b]
+ dup 0 get exch 1 get % a b
+ dup mul % a b^2
+ exch dup mul add % a^2+b^2
+} def
+%
+/cxnorm { % [a b]
+ cxnorm2 sqrt
+} def
+%
+/cxconj { % conjugent complex
+ dup 0 get exch 1 get % a b
+ neg 2 array astore % [a -b]
+} def
+%
+/cxre { 0 get } def % real value
+/cxim { 1 get } def % imag value
+%
+% 1/[a b] = ([a -b]/(a^2+b^2)
+/cxrecip { % [a b]
+ dup cxnorm2 exch % n2 [a b]
+ dup 0 get exch 1 get % n2 a b
+ 3 -1 roll % a b n2
+ dup % a b n2 n2
+ 4 -1 roll exch div % b n2 a/n2
+ 3 1 roll div % a/n2 b/n2
+ neg 2 array astore
+} def
+%
+/cxmake1 { 0 2 array astore } def % make a complex number, real given
+/cxmake2 { 2 array astore } def % dito, both given
+%
+/cxdiv { cxrecip cxmul } def
+%
+% multiplikation by a real number
+/cxrmul { % [a b] r
+ exch aload pop % r a b
+ 3 -1 roll dup % a b r r
+ 3 1 roll mul % a r b*r
+ 3 1 roll mul % b*r a*r
+ exch 2 array astore % [a*r b*r]
+} def
+%
+% division by a real number
+/cxrdiv { % [a b] r
+ 1 exch div % [a b] 1/r
+ cxrmul
+} def
+%
+% exp(i theta) = cos(theta)+i sin(theta) polar<->cartesian
+/cxconv { % theta
+ RadtoDeg dup sin exch cos cxmake2
+} def
+
+%%%%% ### bubblesort ###
+%% syntax : array bubblesort --> array2 trie par ordre croissant
+%% code de Bill Casselman
+%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
+/bubblesort { % on stack must be an array [ ... ]
+4 dict begin
+ /a exch def
+ /n a length 1 sub def
+ n 0 gt {
+ % at this point only the n+1 items in the bottom of a remain to
+ % the sorted largest item in that blocks is to be moved up into
+ % position n
+ n {
+ 0 1 n 1 sub {
+ /i exch def
+ a i get a i 1 add get gt {
+ % if a[i] > a[i+1] swap a[i] and a[i+1]
+ a i 1 add
+ a i get
+ a i a i 1 add get
+ % set new a[i] = old a[i+1]
+ put
+ % set new a[i+1] = old a[i]
+ put
+ } if
+ } for
+ /n n 1 sub def
+ } repeat
+ } if
+ a % return the sorted array
+end
+} def
+%
+/concatstringarray{ % [(a) (b) ... (z)] --> (ab...z) 20100422
+ 0 1 index { length add } forall
+ string
+ 0 3 2 roll
+ { 3 copy putinterval length add }forall
+ pop
+} bind def
+%
+/dot2comma {% on stack a string (...)
+ 2 dict begin
+ /Output exch def
+ 0 1 Output length 1 sub {
+ /Index exch def
+ Output Index get 46 eq { Output Index 44 put } if
+ } for
+ Output
+ end
+} def
+%
+%-----------------------------------------------------------------------------%
+% END pst-tools.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-dots.pro 0 0
+% $Id: pst-dots.pro 130 2009-08-27 08:55:03Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 2.02, 2009/06/16
+%%
+%% For distribution, see pstricks.tex.
+%%
+%% Timothy Van Zandt <tvz@Princeton.EDU>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% Modified by Etienne Riga - Dec. 16, 1999
+%% Modified by Etienne Riga - 2005/01/01 (er)
+%% to add /Diamond, /SolidDiamond and /BoldDiamond
+%% Modified by Herbert Voss (hv) - 2008/04/17
+%
+10 dict dup begin % hold local
+ /FontType 3 def
+ /FontMatrix [.001 0 0 .001 0 0] def
+% /FontBBox [-571.5 -742.5 571.5 742.5] def % changed to next line 20060616 hv
+ /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph
+ /Encoding 256 array def
+ 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef
+ Encoding % replace with given dot names
+ dup (b) 0 get /Bullet put % get the numerical position of b in ASCII
+% % and save /Bullet at this place in Encoding
+ dup (c) 0 get /Circle put
+ dup (C) 0 get /BoldCircle put % 67
+ dup (u) 0 get /SolidTriangle put
+ dup (t) 0 get /Triangle put
+ dup (T) 0 get /BoldTriangle put
+ dup (r) 0 get /SolidSquare put
+ dup (s) 0 get /Square put
+ dup (S) 0 get /BoldSquare put
+ dup (q) 0 get /SolidPentagon put
+ dup (p) 0 get /Pentagon put
+ dup (P) 0 get /BoldPentagon put
+%%%
+ dup (k) 0 get /Asterisk put
+ dup (K) 0 get /BoldAsterisk put
+ dup (J) 0 get /SolidAsterisk put
+ dup (h) 0 get /Hexagon put
+ dup (H) 0 get /BoldHexagon put
+ dup (G) 0 get /SolidHexagon put
+ dup (f) 0 get /Octogon put % 2008-04-18 hv
+ dup (F) 0 get /BoldOctogon put % 2008-04-18 hv
+ dup (g) 0 get /SolidOctogon put % 2008-04-18 hv
+ dup (a) 0 get /Add put
+ dup (A) 0 get /BoldAdd put % 65
+ dup (x) 0 get /Mul put
+ dup (X) 0 get /BoldMul put
+ dup (m) 0 get /Oplus put
+ dup (M) 0 get /BOplus put
+ dup (e) 0 get /SolidOplus put
+ dup (n) 0 get /Otimes put
+ dup (N) 0 get /BOtimes put
+ dup (E) 0 get /SolidOtimes put
+ dup (i) 0 get /Bar put
+ dup (I) 0 get /BoldBar put
+ dup (l) 0 get /SolidDiamond put
+ dup (d) 0 get /Diamond put
+ (D) 0 get /BoldDiamond put
+%%%
+/CharProcs 47 dict def
+CharProcs begin
+ /CirclePath {0 0 500 0 360 arc closepath} def
+ /Bullet {CirclePath fill} def
+ /Circle {CirclePath .9 .9 scale CirclePath eofill} def
+ /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def
+ /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def
+ /SolidTriangle {TrianglePath fill} def
+ /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def
+ /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def
+ /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def
+ /SolidSquare {SquarePath fill} def
+ /Square {SquarePath .89 .89 scale SquarePath eofill} def
+ /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def
+ /PentagonPath {
+ -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto
+ 0 574.7 lineto -546.6 177.6 lineto closepath
+ } def
+ /SolidPentagon {PentagonPath fill} def
+ /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def
+ /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def
+%-------------- hv begin 2004/07/25 from: er 2003/03/24
+ /HexagonPath {
+ 0 550 moveto -476 275 lineto -476 -275 lineto
+ 0 -550 lineto 476 -275 lineto 476 275 lineto closepath
+ } def
+ /SolidHexagon {HexagonPath fill} def
+ /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def
+ /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def
+% 2008-04-18 hv
+ /OctogonPath {
+ 550 dup 22.5 tan mul dup neg dup add /xMove exch def
+ exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def
+ /SolidOctogon { OctogonPath fill } def
+ /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def
+ /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def
+%
+ /AsteriskPath {
+ 20 0 moveto 10 250 180 500 0 500 curveto
+ -180 500 -10 250 -20 0 curveto closepath
+ } def
+ /Asterisk {
+ AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
+ 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill
+ } def
+%
+ /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def
+ /BoldAsteriskPath {
+ 50 30 cos 100 mul moveto Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp closepath
+ } def
+ /BoldAsterisk {BoldAsteriskPath fill} def
+ /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def
+ /CrossPath {
+ 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto
+ -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto
+ 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath
+ } def
+ /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto
+ -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto
+ 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath
+ } def
+ /Add {CrossPath fill} def
+ /Mul {45 rotate CrossPath fill} def
+ /BoldAdd {BoldCrossPath fill} def
+ /BoldMul {45 rotate BoldCrossPath fill} def
+ /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def
+ /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def
+ /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def
+ /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def
+ /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def
+ /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def
+ /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def
+ /Bar {BarPath fill} def
+ /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def
+ /BoldBar {BoldBarPath fill} def
+ /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def
+ /SolidDiamond {DiamondPath fill} def
+ /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def
+ /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def
+%%%
+ /.notdef { } def
+end
+%
+/BuildGlyph {
+ exch
+ begin
+% Metrics 1 index get exec 0
+ 0 0
+% BBoxes 3 index get exec
+ -1000 -1000 1000 1000
+% -571.5 -742.5 571.5 742.5
+ setcachedevice
+ CharProcs begin load exec end
+ end
+} def
+%
+/BuildChar {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+} bind def
+%
+end
+/PSTricksDotFont exch definefont pop
+%
+%% end
+
+%%EndProcSet
+%%BeginProcSet: pst-node.pro 0 0
+% $Id: pst-node.pro 645 2012-02-12 09:09:51Z herbert $
+%%
+%% PostScript prologue for pst-node.tex.
+%% Version 1.13, 2011/11/21.
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+/tx@NodeDict 400 dict def tx@NodeDict begin
+tx@Dict begin % from main pstricks dict
+ /T /translate load def
+ /CP /currentpoint load def
+end
+/NewNode { % on stack: { x y } boolean N@name type InitXnode
+ gsave
+ NodeScale % a bugfix for xelatex, it's empty for dvips
+ /next exch def % { x y } boolean N@name type
+ dict dup % { x y } boolean N@name dict dict
+ 3 1 roll def % { x y } boolean dict N@name dict def
+ exch { dup 3 1 roll def } if % { x y } dict boolean
+ begin % { x y } dict begin
+ tx@Dict begin
+ STV CP T exec % set scaling
+ end
+ /NodeMtrx CM def % save CM
+ next % InitXNode
+ end
+ grestore
+} def
+%
+/InitPnode {
+ /Y ED /X ED
+ /NodePos { NodeSep Cos mul NodeSep Sin mul } def
+} def
+%
+/InitCnode {
+ /r ED /Y ED /X ED
+ /NodePos { NodeSep r add dup Cos mul exch Sin mul } def
+} def
+%
+/GetRnodePos {
+ Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse
+ Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse
+ dx Sin mul abs dy
+ Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse
+} def
+%
+/InitRnode {
+ /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED
+ /NodePos { GetRnodePos } def
+} def
+%
+/DiaNodePos {
+ w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
+ Cos mul exch Sin mul
+} def
+%
+/TriNodePos {
+ Sin s lt
+ { d NodeSep sub dup Cos mul Sin Div exch }
+ { w h mul w Sin mul h Cos abs mul add Div
+ NodeSep add dup Cos mul exch Sin mul
+ } ifelse
+} def
+%
+/InitTriNode {
+ sub 2 div exch
+ 2 div exch
+ 2 copy T
+ 2 copy 4 index index /d ED
+ pop pop pop pop
+ -90 mul rotate
+ /NodeMtrx CM def
+ /X 0 def /Y 0 def
+ d sub abs neg /d ED
+ d add /h ED
+ 2 div h mul h d sub Div /w ED
+ /s d w Atan sin def
+ /NodePos { TriNodePos } def
+} def
+%
+/OvalNodePos {
+ /ww w NodeSep add def
+ /hh h NodeSep add def
+ Sin ww mul Cos hh mul Atan dup cos ww mul exch sin hh mul
+} def
+%
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+%
+/XYPos {
+ dup sin exch cos Do
+ /Cos ED /Sin ED /Dist ED
+ Cos 0 gt
+ { Dist Dist Sin mul Cos div }
+ { Cos 0 lt
+ { Dist neg Dist Sin mul Cos div neg }
+ { 0 Dist Sin mul } ifelse
+ } ifelse
+ Do
+} def
+%
+/GetEdge {
+ dup 0 eq
+ { pop begin 1 0 NodeMtrx dtransform
+ CM idtransform
+ exch atan sub
+ dup
+ sin /Sin ED
+ cos /Cos ED
+ /NodeSep ED
+ NodePos NodeMtrx dtransform CM idtransform end }
+ { 1 eq {{exch}} {{}} ifelse /Do ED pop XYPos } ifelse
+} def
+%
+/AddOffset {
+ 1 index 0 eq
+ { pop pop }
+ { 2 copy 5 2 roll cos mul add 4 1 roll sin mul sub exch } ifelse
+} def
+%
+/GetEdgeA {
+ NodeSepA AngleA NodeA NodeSepTypeA GetEdge
+ OffsetA AngleA AddOffset
+ yA add /yA1 ED
+ xA add /xA1 ED
+} def
+%
+/GetEdgeB {
+ NodeSepB AngleB NodeB NodeSepTypeB GetEdge
+ OffsetB AngleB AddOffset
+ yB add /yB1 ED
+ xB add /xB1 ED
+} def
+%
+/GetArmA {
+ ArmTypeA 0 eq
+ { /xA2 ArmA AngleA cos mul xA1 add def
+ /yA2 ArmA AngleA sin mul yA1 add def }
+ { ArmTypeA 1 eq {{exch}} {{}} ifelse
+ /Do ED
+ ArmA AngleA XYPos OffsetA AngleA AddOffset
+ yA add /yA2 ED
+ xA add /xA2 ED } ifelse
+} def
+%
+/GetArmB {
+ ArmTypeB 0 eq
+ { /xB2 ArmB AngleB cos mul xB1 add def
+ /yB2 ArmB AngleB sin mul yB1 add def }
+ { ArmTypeB 1 eq {{exch}} {{}} ifelse
+ /Do ED
+ ArmB AngleB XYPos OffsetB AngleB AddOffset
+ yB add /yB2 ED
+ xB add /xB2 ED } ifelse
+} def
+%
+/InitNC {
+ /b ED /a ED % second and first node
+ /NodeSepTypeB ED /NodeSepTypeA ED
+ /NodeSepB ED /NodeSepA ED
+ /OffsetB ED /OffsetA ED
+ tx@NodeDict a known tx@NodeDict b known and dup {
+ /NodeA a load def
+ /NodeB b load def
+ NodeA GetCenter /yA ED /xA ED
+ NodeB GetCenter /yB ED /xB ED } if
+} def
+%
+/LPutLine {
+ 4 copy
+ 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED
+ 1 t sub mul
+ 3 1 roll 1 t sub mul
+ 4 1 roll t mul add /Y ED
+ t mul add /X ED
+} def
+%
+/LPutLines {
+ mark LPutVar counttomark 2 div 1 sub /n ED
+% t floor dup n gt
+ t floor dup n ge % to allow npos<= hv 2008-08-14
+ { pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse
+ cvi 2 mul { pop } repeat
+ LPutLine
+ cleartomark
+} def
+%
+/BezierMidpoint {
+ /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED /t ED
+ /cx x1 x0 sub 3 mul def
+ /cy y1 y0 sub 3 mul def
+ /bx x2 x1 sub 3 mul cx sub def
+ /by y2 y1 sub 3 mul cy sub def
+ /ax x3 x0 sub cx sub bx sub def
+ /ay y3 y0 sub cy sub by sub def
+ ax t 3 exp mul bx t t mul mul add
+ cx t mul add x0 add ay t 3 exp mul
+ by t t mul mul add cy t mul add
+ y0 add 3 ay t t mul mul mul 2
+ by t mul mul add cy add 3 ax t t mul mul mul
+ 2 bx t mul mul add cx add atan /NAngle ED
+ /Y ED /X ED
+} def
+%
+/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
+} def
+/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def
+/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
+} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
+} def
+/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
+} def
+/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def
+/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
+exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
+VPosEnd } def
+/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
+roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
+def grestore exec /LPutVar /SaveLPutVar load def } def
+/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
+GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
+LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
+LPutVar VPutLine } def LPutVar } def
+%
+/NCLine {
+ NCCoor
+ tx@Dict begin
+ ArrowA CP 4 2 roll
+ ArrowB
+ lineto pop pop
+ end
+} def
+%
+/NCLines {
+ false NArray
+ n 0 eq
+ { NCLine }
+ { 2 copy yA sub exch xA sub Atan /AngleA ED
+ n 2 mul dup index exch index yB sub exch xB sub
+ Atan /AngleB ED
+ GetEdgeA GetEdgeB
+ /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1 yA1 ] cvx def
+ mark LPutVar
+ tx@Dict begin false Line end
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def
+ } ifelse
+} def
+%
+/NCCurve {
+ GetEdgeA
+ GetEdgeB
+ xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
+roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
+GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
+begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
+cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
+} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
+%
+/NCAngles {
+ GetEdgeA GetEdgeB GetArmA GetArmB
+ /mtrx AngleA matrix rotate def
+ xA2 yA2 mtrx transform pop
+ xB2 yB2 mtrx transform exch pop
+ mtrx itransform
+ /y0 ED /x0 ED
+ mark ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 x0 y0 xA2 yA2
+ ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def } def
+%
+/NCAngle {
+ GetEdgeA GetEdgeB GetArmB
+ /mtrx AngleA matrix rotate def
+ xB2 yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
+ /y0 ED /x0 ED
+ mark
+ ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 x0 y0 xA1 yA1
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def
+} def
+%
+/NCBar {
+ GetEdgeA GetEdgeB GetArmA GetArmB
+ /mtrx AngleA matrix rotate def
+ xA2 yA2 mtrx itransform pop
+ xB2 yB2 mtrx itransform pop
+ sub dup 0 mtrx transform
+ 3 -1 roll 0 gt
+ { /yB2 exch yB2 add def /xB2 exch xB2 add def }
+ { /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse
+ mark
+ ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def
+} def
+%
+/NCDiag {
+ /lineAngle ED
+ GetEdgeA GetEdgeB GetArmA GetArmB mark
+ lineAngle abs 0 gt {
+ /xTemp xA2 10 add def
+ /yTemp yA2 lineAngle dup sin exch cos div 10 mul add def
+ /dY1 yTemp yA2 sub def
+ /dX1 xTemp xA2 sub def
+ /dY2 yB2 yB1 sub def
+ /dX2 xB2 xB1 sub def
+ dX1 abs 0.01 lt {
+ /m2 dY2 dX2 div def
+ /xB2 xA2 def
+ /yB2 xA2 xB1 sub m2 mul yB1 add def
+ }{
+ dX2 abs 0.01 lt {
+ /m1 dY1 dX1 div def
+ /xB2 xB1 def
+ /yB2 xB1 xA2 sub m1 mul yA2 add def
+ }{%
+ /m1 dY1 dX1 div def
+ /m2 dY2 dX2 div def
+ /xB2 m1 xA2 mul m2 xB1 mul sub yA2 sub yB1 add m1 m2 sub div def
+ /yB2 xB2 xA2 sub m1 mul yA2 add def
+ } ifelse
+ } ifelse
+ } if
+ ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 xA2 yA2
+ ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def
+%
+% GetEdgeA GetEdgeB GetArmA GetArmB mark
+% ArmB 0 ne { xB1 yB1 } if
+% xB2 yB2 xA2 yA2
+% ArmA 0 ne { xA1 yA1 } if
+% tx@Dict begin false Line end
+% /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def
+% /LPutPos { LPutLines } def
+% /HPutPos { HPutLines } def
+% /VPutPos { VPutLines } def
+} def
+%
+/NCDiagg {
+ /lineAngle ED
+ GetEdgeA GetArmA
+ lineAngle abs 0 gt
+ { lineAngle }
+ { yB yA2 sub xB xA2 sub Atan 180 add } ifelse
+ /AngleB ED
+ GetEdgeB mark
+ lineAngle abs 0 gt {
+ /dY2 yA2 yA1 sub def
+ /dX2 xA2 xA1 sub def
+ lineAngle abs 90 eq {
+ /m2 dY2 dX2 div def
+ /yA2 xB xA2 sub m2 mul yA2 add def
+ /xA2 xB def
+ }{
+ /m1 lineAngle dup sin exch cos div def % tan alpha
+ dX2 abs 0.01 lt {
+ /yA2 xA1 xB sub m1 mul yB add def
+ /xA2 xA1 def
+ }{%
+ /m2 dY2 dX2 div def
+ /xA2 m1 xB mul m2 xA2 mul sub yA2 add yB sub m1 m2 sub div def
+ /yA2 xA2 xB sub m1 mul yB add def
+ } ifelse
+ } ifelse
+ } if
+ xB1 yB1 xA2 yA2
+ ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def
+%
+% GetEdgeA GetArmA
+% yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
+% GetEdgeB
+% mark
+% xB1 yB1 xA2 yA2
+% ArmA 0 ne { xA1 yA1 } if
+% tx@Dict begin false Line end
+% /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def
+% /LPutPos { LPutLines } def
+% /HPutPos { HPutLines } def
+% /VPutPos { VPutLines } def
+} def
+%
+/NCLoop {
+ GetEdgeA GetEdgeB GetArmA GetArmB
+ /mtrx AngleA matrix rotate def
+ xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED
+ /xB3 xB2 yB2 mtrx transform pop def
+ xB3 yA3 mtrx itransform /yB3 ED /xB3 ED
+ xA3 yA3 mtrx itransform /yA3 ED /xA3 ED
+ mark ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def
+} def
+%
+% DG/SR modification begin - May 9, 1997 - Patch 1
+%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
+%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+%
+/NCCircle {
+ NodeSepA 0 NodeA 0 GetEdge pop
+ 2 div dup 2 exp r r mul sub abs sqrt
+ atan 2 mul /a ED
+ r AngleA 90 add PtoC yA add exch xA add
+ exch 2 copy
+ /LPutVar [ 4 2 roll r AngleA ] cvx def
+ /LPutPos {
+ LPutVar t 360 mul add dup 5 1 roll 90 sub PtoC
+ 3 -1 roll add
+ /Y ED add /X ED /NAngle ED
+% DG/SR modification end
+ } def
+ /HPutPos { LPutPos } def
+ /VPutPos { LPutPos } def
+ r AngleA 90 sub a add AngleA 270 add a sub
+ tx@Dict begin
+ /angleB ED /angleA ED /r ED
+ /c 57.2957 r Div def
+ /y ED /x ED
+} def
+%
+/NCBox {
+ /d ED /h ED
+ /AngleB yB yA sub xB xA sub Atan def
+ /AngleA AngleB 180 add def
+ GetEdgeA GetEdgeB
+ /dx d AngleB sin mul def
+ /dy d AngleB cos mul neg def
+ /hx h AngleB sin mul neg def
+ /hy h AngleB cos mul def
+ /LPutVar [
+ xA1 hx add yA1 hy add xB1 hx add yB1 hy add
+ xB1 dx add yB1 dy add xA1 dx add yA1 dy add ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { xB yB xA yA LPutLine } def
+ /VPutPos { HPutPos } def
+ mark
+ LPutVar tx@Dict begin false Polygon end
+} def
+%
+/NCArcBox {
+ /l ED neg /d ED /h ED /a ED
+ /AngleA yB yA sub xB xA sub Atan def
+ /AngleB AngleA 180 add def
+ /tA AngleA a sub 90 add def
+ /tB tA a 2 mul add def
+ /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
+ /x0 xA r tA cos mul add def
+ /y0 yA r tA sin mul add def
+ /c 57.2958 r div def
+ /AngleA AngleA a sub 180 add def
+ /AngleB AngleB a add 180 add def
+ GetEdgeA GetEdgeB
+ /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul sub def
+ /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def
+ l 0 eq {
+ x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn
+ }{
+ x0 y0 translate
+ /tA AngleA l c mul add def
+ /tB AngleB l c mul sub def
+ 0 0 r h add tA tB arc r h add
+ AngleB PtoC r d add
+ AngleB PtoC 2 copy
+ 6 2 roll l arcto 4 { pop } repeat
+ r d add tB PtoC l arcto 4 { pop } repeat
+ 0 0 r d add tB tA arcn r d add
+ AngleA PtoC r h add
+ AngleA PtoC 2 copy 6 2 roll
+ l arcto 4 { pop } repeat
+ r h add tA PtoC l arcto 4 { pop } repeat
+ } ifelse
+ closepath
+ /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def
+ /LPutPos {
+ LPutVar /d ED /h ED
+ /AngleB ED /AngleA ED
+ /r ED /y0 ED /x0 ED
+ t 1 le {
+ r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC
+ }{t 2 lt {
+ /NAngle AngleB 180 add def r 2 t sub
+ h mul t 1 sub d mul add add AngleB PtoC
+ }{
+ t 3 lt {
+ r d add AngleB 3 t sub mul AngleA 2 t sub
+ mul add dup 90 sub /NAngle ED PtoC
+ }{
+ /NAngle AngleA 180 add def
+ r 4 t sub d mul t 3 sub h mul add add AngleA PtoC
+ } ifelse
+ } ifelse
+ } ifelse
+ y0 add /Y ED x0 add /X ED
+ } def
+ /HPutPos { LPutPos } def
+ /VPutPos { LPutPos } def
+} def
+%
+/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
+sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
+ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
+w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
+{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
+{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
+def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
+/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
+%
+/LPutCoor {
+ NAngle
+ tx@Dict begin /NAngle ED end
+ gsave
+ CM STV
+ CP Y sub neg exch X sub neg exch moveto
+ setmatrix CP
+ grestore
+} def
+%
+/LPut {
+ tx@NodeDict /LPutPos known
+ { LPutPos } { CP /Y ED /X ED /NAngle 0 def } ifelse
+ LPutCoor
+} def
+%
+/HPutAdjust {
+ Sin Cos mul 0 eq
+ { 0 }
+ { d Cos mul Sin div flag not { neg } if
+ h Cos mul Sin div flag { neg } if
+ 2 copy gt { pop } { exch pop } ifelse
+ } ifelse
+ s add flag { r add neg }{ l add } ifelse
+ X add /X ED
+} def
+%
+/VPutAdjust {
+ Sin Cos mul
+ 0 eq
+ { 0 }
+ { l Sin mul Cos div flag { neg } if
+ r Sin mul Cos div flag not { neg } if
+ 2 copy gt { pop } { exch pop } ifelse
+ } ifelse
+ s add flag { d add } { h add neg } ifelse
+ Y add /Y ED
+} def
+%
+%
+end
+%
+% END pst-node.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-3d.pro 0 0
+%% $Id: pst-3d.pro 247 2010-01-04 22:45:42Z herbert $
+% PostScript prologue for pst-3d.tex.
+% Version 0.01, 2010/01/01
+%
+/tx@3Ddict 300 dict def
+tx@3Ddict begin
+%
+/SetMatrixThreeD {
+ dup sin /e ED cos /f ED
+ /p3 ED /p2 ED /p1 ED
+ p1 0 eq
+ { /a 0 def /b p2 0 le { 1 } { -1 } ifelse def
+ p3 p2 abs
+ }
+ { p2 0 eq
+ { /a p1 0 lt { -1 } { 1 } ifelse def /b 0 def
+ p3 p1 abs
+ }
+ { p1 dup mul p2 dup mul add sqrt dup
+ p1 exch div /a ED
+ p2 exch div neg /b ED
+ p3 p1 a div
+ }
+ ifelse
+ }
+ ifelse
+ atan dup sin /c ED cos /d ED
+ /Matrix3D
+ [
+ b f mul c a mul e mul sub
+ a f mul c b mul e mul add
+ d e mul
+ b e mul neg c a mul f mul sub
+ a e mul neg c b mul f mul add
+ d f mul
+ ] def
+} def
+%
+/ProjThreeD {
+ /z ED /y ED /x ED
+ Matrix3D aload pop
+ z mul exch y mul add exch x mul add
+ 4 1 roll
+ z mul exch y mul add exch x mul add
+ exch
+} def
+%
+/SetMatrixEmbed {
+ SetMatrixThreeD
+ Matrix3D aload pop
+ /z3 ED /z2 ED /z1 ED /x3 ED /x2 ED /x1 ED
+ SetMatrixThreeD
+ [
+ Matrix3D aload pop
+ z3 mul exch z2 mul add exch z1 mul add 4 1 roll
+ z3 mul exch z2 mul add exch z1 mul add
+ Matrix3D aload pop
+ x3 mul exch x2 mul add exch x1 mul add 4 1 roll
+ x3 mul exch x2 mul add exch x1 mul add
+ 3 -1 roll 3 -1 roll 4 -1 roll 8 -3 roll 3 copy
+ x3 mul exch x2 mul add exch x1 mul add 4 1 roll
+ z3 mul exch z2 mul add exch z1 mul add
+ ]
+ concat
+} def
+%
+/TMSave {
+ tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
+ /TMatrix [ TMatrix CM ] cvx def
+} def
+%
+/TMRestore { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
+%
+/TMChange {
+ TMSave
+ /cp [ currentpoint ] cvx def % ??? Check this later.
+ CM
+ CP T STV
+ CM matrix invertmatrix % Inv(M')
+ matrix concatmatrix % M Inv(M')
+ exch exec
+ concat cp moveto
+} def
+%
+end % of tx@3Ddict
+%%
+%% End of file `pst-3d.pro'.
+
+%%EndProcSet
+%%BeginProcSet: pst-math.pro 0 0
+% -*- Mode: Postscript -*-
+% pst-math.pro --- PostScript header file pst-math.pro
+%
+% Author : Christophe JORSSEN
+% Author : Herbert Voß <hvoss@tug.org>
+% Created the : Sat 20 March 2004
+% Last Mod : $Date: 2010/10/02 $
+% Version : 0.62 $
+%
+/PI 3.14159265359 def
+/ENeperian 2.71828182846 def
+%
+/DegToRad {PI mul 180 div} bind def
+/RadToDeg {180 mul PI div} bind def
+%
+/COS {RadToDeg cos} bind def
+/SIN {RadToDeg sin} bind def
+/TAN {dup SIN exch COS Div} bind def
+/tan {dup sin exch cos Div} bind def
+/ATAN {neg -1 atan 180 sub DegToRad} bind def
+/ACOS {dup dup mul neg 1 add sqrt exch atan DegToRad} bind def
+/acos {dup dup mul neg 1 add sqrt exch atan} bind def
+/ASIN {neg dup dup mul neg 1 add sqrt neg atan 180 sub DegToRad} bind def
+/asin {neg dup dup mul neg 1 add sqrt neg atan 180 sub} bind def
+%
+/EXP {ENeperian exch exp} bind def
+%
+/COSH {dup EXP exch neg EXP add 2 div} bind def
+/SINH {dup EXP exch neg EXP sub 2 div} bind def
+/TANH {dup SINH exch COSH div} bind def
+/ACOSH {dup dup mul 1 sub sqrt add ln} bind def
+/ASINH {dup dup mul 1 add sqrt add ln} bind def
+/ATANH {dup 1 add exch neg 1 add Div ln 2 div} bind def
+%
+%/SINC {dup SIN exch Div} bind def
+/SINC { dup 0 eq { pop 1 } { dup SIN exch div } ifelse } bind def
+
+/GAUSS {dup mul 2 mul dup 4 -2 roll sub dup mul exch div neg EXP exch PI mul sqrt div} bind def
+%
+/GAMMA { 2 dict begin % hv 2007-08-30
+ /z exch def
+ 1.000000000190015 % p(0)
+ 0 1 5 { % on stack is 0 1 2 3 4 5
+ dup % n-1 n-1
+ [ 76.18009172947146
+ -86.50532032941677
+ 24.0140982483091
+ -1.231739572450155
+ 0.1208650973866179E-2
+ -0.5395239384953E-5 ] exch get exch % p(n) n-1
+ 1 add z add div % p(n)/(z+n)
+ add % build the sum
+ } for
+ Pi 2 mul sqrt z div mul
+ z 5.5 add z 0.5 add exp mul ENeperian z 5.5 add neg exp mul
+ end } bind def
+%
+/GAMMALN {dup dup dup 5.5 add dup ln 3 -1 roll .5 add mul sub neg 1.000000000190015
+ 0 1 5 {
+ [76.18009172947146 -86.50532032941677 24.0140982483091 -1.231739572450155
+ .1208650973866179E-2 -.5395239384953E-5 2.5066282746310005] exch get
+ 4 -1 roll 1 add dup 5 1 roll div add} for
+ 4 -1 roll div 2.5066282746310005 mul ln add exch pop} bind def
+/BETA {2 copy add GAMMALN neg exch GAMMALN 3 -1 roll GAMMALN EXP} bind def
+%
+/HORNER {aload length
+ dup 2 add -1 roll
+ exch 1 sub {
+ dup 4 1 roll
+ mul add exch
+ } repeat
+ pop
+} bind def
+%
+/BESSEL_J0 {dup abs 8 lt {
+ dup mul dup [57568490574 -13362590354 651619640.7 -11214424.18 77392.33017 -184.9052456] HORNER
+ exch [57568490411 1029532985 9494680.718 59272.64853 267.8532712 1] HORNER
+ Div}
+ {abs dup .636619772 exch div sqrt exch dup .785398164 sub exch 8 exch div dup dup mul dup
+ [1 -1.098628627E-2 .2734510407E-4 -.2073370639E-5 .2093887211E-6] HORNER
+ 3 index COS mul
+ exch [-.1562499995E-1 .1430488765E-3 -.6911147651E-5 .7621095161E-6 -.934945152E-7] HORNER
+ 4 -1 roll SIN mul 3 -1 roll mul neg add mul}
+ ifelse} bind def
+%
+/BESSEL_Y0 {dup 8 lt {
+ dup dup mul dup [-2957821389 7062834065 -512359803.6 10879881.29 -86327.92757 228.4622733] HORNER
+ exch [40076544269 745249964.8 7189466.438 47447.26470 226.1030244 1] HORNER
+ Div exch dup ln exch BESSEL_J0 .636619772 mul mul add}
+ {dup .636619772 exch div sqrt exch dup .785398164 sub exch 8 exch div dup dup mul dup
+ [1 -.1098628627E-2 .2734510407E-4 -.2073370639E-5 .2093887211E-6] HORNER
+ 3 index SIN mul
+ exch [-.1562499995E-1 .1430488765E-3 -.6911147651E-5 .7621095161E-6 -.934945152E-7] HORNER
+ 4 -1 roll COS mul 3 -1 roll mul add mul}
+ ifelse} bind def
+%
+/BESSEL_J1 {dup abs 8 lt {
+ dup dup mul dup 3 -2 roll [72362614232 -7895059235 242396853.1 -2972611.439 15704.48260 -30.16036606] HORNER mul
+ exch [144725228442 2300535178 18583304.74 99447.43394 376.9991397 1] HORNER
+ Div}
+ {dup abs dup .636619772 exch div sqrt exch dup 2.356194491 sub exch 8 exch div dup dup mul dup
+ [1 .183105E-2 -.3516396496E-4 .2457520174E-5 -.240337019E-6] HORNER
+ 3 index COS mul
+ exch [.04687499995 6.2002690873E-3 .8449199096E-5 -.88228987E-6 .105787412E-6] HORNER
+ 4 -1 roll SIN mul 3 -1 roll mul neg add mul exch dup abs Div mul}
+ ifelse} bind def
+%
+/BESSEL_Y1 {dup 8 lt {
+ dup dup dup mul dup [-.4900604943E13 .1275274390E13 -.5153428139E11 .7349264551E9 -.4237922726E7 .8511937935E4] HORNER
+ exch [.2499580570E14 .4244419664E12 .3733650367E10 .2245904002E8 .1020426050E6 .3549632885E3 1] HORNER
+ Div mul exch dup dup ln exch BESSEL_J1 mul exch 1 exch div sub .636619772 mul add}
+ {dup .636619772 exch div sqrt exch dup 2.356194491 sub exch 8 exch div dup dup mul dup
+ [1 .183105E-2 -.3516396496E-4 .2457520174E-5 -.240337019E-6] HORNER
+ 3 index SIN mul
+ exch [.04687499995 -.2002690873E-3 .8449199096E-5 6.88228987E-6 .105787412E-6] HORNER
+ 4 -1 roll COS mul 3 -1 roll mul add mul}
+ ifelse} bind def
+%
+% En cours...
+/BESSEL_Yn {dup 0 eq {pop BESSEL_Y0}{dup 1 eq {pop BESSEL_Y1}{
+ exch dup BESSEL_Y0 exch dup BESSEL_Y1 exch 2 exch Div {
+ mul 3 -1 roll mul 2 index sub pstack} for
+ } ifelse } ifelse } bind def
+%
+/SIMPSON { 1 dict begin %% on stack a b var f ierr Dominik Rodriguez
+ 3 index 5 index sub % compute h
+ 1 % a b var f ierr h n
+ 4 index 7 index def 3 index exec % a b var f ierr h n f(a)
+ 5 index 7 index def 4 index exec add % a b var f ierr h n f(a)+f(b)
+ 5 index 8 index 4 index 2 div add def 4 index exec % a b var f ierr h n f(a)+f(b) f(a+h/2)
+ exch 1 index 4 mul add 0 % a b var f ierr h n old=f(a+h/2) Estim=f(a)+f(b)+4f(a+h/2) NbLoop
+ { % a b var f ierr h n old Estim NbLoop
+ 5 -1 roll 2 div dup 6 1 roll % h<-h/2
+ 5 -1 roll 2 mul 5 1 roll % n<-2n
+ % a b var f ierr h n old Estim NbLoop h
+ 2 div 10 index add 0 % a b var f ierr h n old Estim NbLoop a+h/2 Cumul
+ 5 index {
+ 1 index 10 index exch def 8 index exec add exch 6 index add exch
+ } repeat % a b var f ierr h n old Estim NbLoop a+nh/2 Cumul
+ exch pop % a b var f ierr h n old Estim NbLoop New
+ 2 index 1 index 4 mul 6 -1 roll 2 mul sub sub % a b var f ierr h n Estim NbLoop New Diff
+ 4 -1 roll 2 mul 1 index sub 4 1 roll % a b var f ierr h n Estim NbLoop New Diff
+ exch 4 1 roll % a b var f ierr h n old Estim NbLoop Diff
+ 5 index 6 div mul abs 6 index lt { exit } if
+ 1 add dup 9 eq { exit } if
+ } loop % a b var f ierr h n old Estim NbLoop
+ exch 5 -1 roll 6 div mul mark 10 2 roll cleartomark
+end
+} def
+% ------------------------------------ math stuff ----------------------------------
+%
+% Matrix A in arrays of rows A[[row1][row2]...]
+% with [row1]=[a11 a12 ... b1]
+% returns on stack solution vector X=[x1 x2 ... xn]
+/SolveLinEqSystem { % on stack matrix M=[A,b] (A*x=b)
+ 10 dict begin % hold all ocal
+ /A exch def
+ /Rows A length def % Rows = number of rows
+ /Cols A 0 get length def % Cols = number of columns
+ /Index [ 0 1 Rows 1 sub { } for ] def % Index = [0 1 2 ... Rows-1]
+ /col 0 def
+ /row 0 def
+ /PR Rows array def % PR[c] = pivot row for row row
+ { % starts the loop, find pivot entry in row r
+ col Cols ge row Rows ge or { exit } if % col < Cols and row < Rows else exit
+ /pRow row def % pRow = pivot row
+ /max A row get col get abs def % get A[row[col]], first A[0,0]
+ row 1 add 1 Rows 1 sub { % starts for loop 1 1 Rows-1
+ /j exch def % index counter
+ /x A j get col get abs def % get A[j[r]]
+ x max gt { % x>max, then save position
+ /pRow j def
+ /max x def
+ } if
+ } for % now we have the row with biggest A[0,1]
+ % with pRow = the pivot row
+ max 0 gt { % swap entries pRow and row in i
+ /tmp Index row get def
+ Index row Index pRow get put
+ Index pRow tmp put % and columns pRow and row in A
+ /tmp A row get def
+ A row A pRow get put
+ A pRow tmp put % pivot
+ /row0 A row get def % the pivoting row
+ /p0 row0 col get def % the pivot value
+ row 1 add 1 Rows 1 sub { % start for loop
+ /j exch def
+ /c1 A j get def
+ /p c1 col get p0 div def
+ c1 col p put % subtract (p1/p0)*row[i] from row[j]
+ col 1 add 1 Cols 1 sub { % start for loop
+ /i exch def
+ c1 dup i exch % c1 i c1
+ i get row0 i get p mul sub put
+ } for
+ } for
+ PR row col put
+ /col col 1 add def
+ /row row 1 add def
+ }{ % all zero entries
+ /row row 1 add def % continue loop with same row
+ } ifelse
+ } loop
+ /X A def % solution vector
+ A Rows 1 sub get dup
+ Cols 1 sub get exch
+ Cols 2 sub get div
+ X Rows 1 sub 3 -1 roll put % X[n]
+ Rows 2 sub -1 0 { % for loop to calculate X[i]
+ /xi exch def % current index
+ A xi get % i-th row
+ /Axi exch def
+ /sum 0 def
+ Cols 2 sub -1 xi 1 add {
+ /n exch def
+ /sum sum Axi n get X n get mul add def
+ } for
+ Axi Cols 1 sub get % b=Axi[Cols-1]
+ sum sub % b-sum
+ Axi xi get div % b-sum / Axi[xi]
+ X xi 3 -1 roll put % X[xi]
+ } for
+ X
+ end
+} def
+%
+/c@_0 2.515517 def
+/c@_1 0.802853 def
+/c@_2 0.010328 def
+/d@_1 1.432788 def
+/d@_2 0.189269 def
+/d@_3 0.001308 def
+/norminv {
+ 5 dict begin
+ neg 1 add 1 exch div ln 2 mul sqrt
+ /t exch def
+ /t2 t dup mul def
+ /t3 t2 t mul def
+ c@_0 c@_1 t mul add c@_2 t2 mul add 1 d@_1 t mul add
+ d@_2 t2 mul add d@_3 t3 mul add div neg t add
+ end
+} def
+%end{norminv Michael Sharpe}
+%
+%
+% END pst-math.pro
+
+%%EndProcSet
+%%BeginProcSet: pstricks-add.pro 0 0
+%% $Id: pstricks-add.pro 328 2010-05-24 15:56:43Z herbert $
+% PostScript prologue for pstricks-add.tex.
+% Version 0.23, 2009/12/17
+%
+/tx@addDict 410 dict def tx@addDict begin
+%%
+realtime srand % set random generator
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/GTriangle {
+ gsave
+ /mtrx CM def
+ /colorA ED /colorB ED /colorC ED % save the colors
+ /yA ED /xA ED % save the origin
+ xA yA translate
+ rotate % \psk@gangle
+ /yB ED /xB ED /yC ED /xC ED % save other coordinates
+ /ds [ % save data in a array
+ 0 0 0 colorA aload pop % fd x y xr xg xb
+ 0 xB xA sub yB yA sub colorB aload pop
+ 0 xC xA sub yC yA sub colorC aload pop
+% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD
+ ] def
+ newpath
+ <<
+ /ShadingType 4 % single Gouraud
+ /ColorSpace [ /DeviceRGB ]
+ /DataSource ds
+ >>
+ shfill
+ closepath
+ mtrx
+ setmatrix grestore} def
+%
+/RGBtoCMYK { % on stack r g b -> C M Y K
+ 3 dict begin
+ /Blue ED /Green ED /Red ED
+ 1 Red sub % Cyan
+ 1 Green sub % Magenta
+ 1 Blue sub % Yellow
+ 0 % Black
+ end
+} def
+%
+/CMYKtoGRAY { % on stack c m y k -> gray
+ exch 0.11 mul add
+ exch 0.59 mul add
+ exch 0.3 mul add
+ dup 1 gt { pop 1 } if
+ neg 1 add
+} def
+%
+/RGBtoGRAY { % on stack r g b -> gray
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+} def
+%
+/HSBtoGRAY {
+ 6 dict begin
+ /b exch def
+ /s exch def 6 mul dup cvi dup
+ /i exch def sub
+ /f exch def
+ /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def
+ F i get { s mul neg 1 add b mul} forall
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+ end
+} def
+%
+%% convertisseur longueur d'onde ->R,G,B Manuel Luque
+%% lambda max=780 nanometres
+%% lambda min=380 nanometres
+%% adaptation de :
+%% http://www.physics.sfasu.edu/astro/color.html
+%% www.efg2.com/lab
+%
+/Gamma 0.8 def
+/calculateRGB {
+ lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 380 ge {lambda 439 le {
+ /R {lambda 440 sub neg 440 380 sub div} def
+ /Red R factor mul Gamma exp def
+ /G 0 def
+ /Green G factor mul Gamma exp def
+ /B 1 def
+ /Blue B factor mul Gamma exp def} if
+ } if
+ lambda 440 ge { lambda 489 le {
+ /G {lambda 440 sub 490 440 sub div} def
+ /Green G factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /B 1 def
+ /Blue B factor mul Gamma exp def } if
+ } if
+ lambda 490 ge {lambda 509 le {
+ /B {lambda 510 sub neg 510 490 sub div} def
+ /Blue B factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 510 ge {lambda 579 le {
+ /R {lambda 510 sub 580 510 sub div } def
+ /Red R factor mul Gamma exp def
+ /Blue 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 580 ge {lambda 644 le {
+ /G {lambda 645 sub neg 645 580 sub div } def
+ /Green G factor mul Gamma exp def
+ /Blue 0 def
+ /R 1 def
+ /Red R factor mul Gamma exp def } if
+ } if
+ lambda 645 ge { lambda 780 le {
+ /Red 1 factor mul Gamma exp def
+ /Blue 0 def
+ /Green 0 def } if
+ } if
+} def
+%
+/factor {
+ lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
+ lambda 420 ge {lambda 700 le { 1 } if } if
+ lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
+} def
+%
+/wavelengthToRGB { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ calculateRGB
+} def % now the colors are saved in Red Green Blue
+%
+/wavelengthToGRAY { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ calculateRGB
+ Red Green Blue RGBtoGRAY
+} def % now the gray color is on the stack
+%
+/wavelengthToCMYK { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ gsave
+ calculateRGB Red Green Blue RGBtoCMYK
+ /Black ED /Yellow ED /Magenta ED /Cyan ED
+ grestore
+} def % now the colors are saved in Cyan Magenta Yellow Black
+%
+/axfill {
+ 8 dict begin
+ /xw exch def /nl exch def
+ /C1 exch def /y1 exch def/x1 exch def
+ /C0 exch def /y0 exch def/x0 exch def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ x0 y0 x1 y1 ]
+ /EmulatorHints [ xw 2 div dup ]
+ /Function <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 C0
+ /C1 C1
+ /N 1
+ >>
+ >> shfill
+ end
+} bind def
+%
+%/amplHand {.8} def
+%/dtHand 2 def
+/varHand { rand sin amplHand mul add } def
+/MovetoByHand { moveto } def
+%/MovetoByHand { /y0 ED /x0 ED x0 y0 moveto } def
+/LinetoByHand { 4 dict begin
+ /y1 ED /x1 ED
+ currentpoint /y0 ED /x0 ED
+ x0 x1 sub dup mul y0 y1 sub dup mul add sqrt /dEnd ED
+ 0 dtHand dEnd { dup
+ x1 x0 sub mul dEnd div x0 add varHand exch
+ y1 y0 sub mul dEnd div y0 add varHand lineto
+ } for
+% /x0 x1 def /y0 y1 def
+ end
+} def
+%
+end
+%
+% END pstricks-add.pro
+
+%%EndProcSet
+%%BeginProcSet: cm-super-t2a.enc 0 0
+% This file is generated from `T2Auni.map' and `glyphlist.txt', `gl-other.txt'
+%
+% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;
+% LIGKERN quoteleft quoteleft =: quotedblleft ;
+% LIGKERN quoteright quoteright =: quotedblright ;
+% LIGKERN comma comma =: quotedblbase ; less less =: guillemotleft ;
+% LIGKERN greater greater =: guillemotright ;
+% LIGKERN f f =: ff ; f i =: fi ; f l =: fl ; ff i =: ffi ; ff l =: ffl ;
+%
+% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ;
+% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ;
+% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ;
+% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ;
+% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ;
+% LIGKERN nine {} * ; * {} nine ;
+%
+/T2AEncoding [
+% 0x00
+/grave
+/acute
+/circumflex
+/tilde
+/dieresis
+/hungarumlaut
+/ring
+/caron
+/breve
+/macron
+/dotaccent
+/cedilla
+/ogonek
+/uni04C0
+/angleleft
+/angleright
+% 0x10
+/quotedblleft
+/quotedblright
+/cyrflex
+/dblgrave
+/cyrbreve
+/endash
+/emdash.cyr % CYRILLIC EM DASH
+/afii61664
+/perthousandzero % PERTHOUSAND ZERO
+/dotlessi
+/dotlessj
+/ff
+/fi
+/fl
+/ffi
+/ffl
+% 0x20
+/uni2423
+/exclam
+/quotedbl
+/numbersign
+/dollar
+/percent
+/ampersand
+/quoteright
+/parenleft
+/parenright
+/asterisk
+/plus
+/comma
+/hyphen
+/period
+/slash
+% 0x30
+/zero
+/one
+/two
+/three
+/four
+/five
+/six
+/seven
+/eight
+/nine
+/colon
+/semicolon
+/less
+/equal
+/greater
+/question
+% 0x40
+/at
+/A
+/B
+/C
+/D
+/E
+/F
+/G
+/H
+/I
+/J
+/K
+/L
+/M
+/N
+/O
+% 0x50
+/P
+/Q
+/R
+/S
+/T
+/U
+/V
+/W
+/X
+/Y
+/Z
+/bracketleft
+/backslash
+/bracketright
+/asciicircum
+/underscore
+% 0x60
+/quoteleft
+/a
+/b
+/c
+/d
+/e
+/f
+/g
+/h
+/i
+/j
+/k
+/l
+/m
+/n
+/o
+% 0x70
+/p
+/q
+/r
+/s
+/t
+/u
+/v
+/w
+/x
+/y
+/z
+/braceleft
+/bar
+/braceright
+/asciitilde
+/hyphen.alt % HANGING HYPHEN
+% 0x80
+/afii10050
+/uni0492
+/afii10051
+/afii10060
+/uni04BA
+/uni0496
+/uni0498
+/afii10058
+/afii10056
+/uni049A
+/uni04A0
+/uni049C
+/uni04D4
+/uni04A2
+/uni04A4
+/afii10054
+% 0x90
+/uni04E8
+/uni04AA
+/afii10062
+/uni04AE
+/uni04B0
+/uni04B2
+/afii10145
+/uni04B8
+/uni04B6
+/afii10053
+/uni04D8
+/afii10059
+/afii10023
+/afii61352
+/currency
+/section
+% 0xA0
+/afii10098
+/uni0493
+/afii10099
+/afii10108
+/uni04BB
+/uni0497
+/uni0499
+/afii10106
+/afii10104
+/uni049B
+/uni04A1
+/uni049D
+/uni04D5
+/uni04A3
+/uni04A5
+/afii10102
+% 0xB0
+/uni04E9
+/uni04AB
+/afii10110
+/uni04AF
+/uni04B1
+/uni04B3
+/afii10193
+/uni04B9
+/uni04B7
+/afii10101
+/afii10846
+/afii10107
+/afii10071
+/quotedblbase
+/guillemotleft.cyr
+/guillemotright.cyr
+% 0xC0
+/afii10017
+/afii10018
+/afii10019
+/afii10020
+/afii10021
+/afii10022
+/afii10024
+/afii10025
+/afii10026
+/afii10027
+/afii10028
+/afii10029
+/afii10030
+/afii10031
+/afii10032
+/afii10033
+% 0xD0
+/afii10034
+/afii10035
+/afii10036
+/afii10037
+/afii10038
+/afii10039
+/afii10040
+/afii10041
+/afii10042
+/afii10043
+/afii10044
+/afii10045
+/afii10046
+/afii10047
+/afii10048
+/afii10049
+% 0xE0
+/afii10065
+/afii10066
+/afii10067
+/afii10068
+/afii10069
+/afii10070
+/afii10072
+/afii10073
+/afii10074
+/afii10075
+/afii10076
+/afii10077
+/afii10078
+/afii10079
+/afii10080
+/afii10081
+% 0xF0
+/afii10082
+/afii10083
+/afii10084
+/afii10085
+/afii10086
+/afii10087
+/afii10088
+/afii10089
+/afii10090
+/afii10091
+/afii10092
+/afii10093
+/afii10094
+/afii10095
+/afii10096
+/afii10097
+] def
+
+%%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
+@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
+%%BeginProcSet: color.pro 0 0
+%!
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+TeXDict begin @defspecial
+
+ systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get
+put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict
+/cleartomark get put}ifelse
+
+ /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution
+mul} def/BPToDvips{72 div Resolution mul}def/BorderArrayPatch{[exch{dup
+dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def/HyperBorder
+{1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx
+pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly
+exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx
+exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips
+exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx
+exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF
+HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder
+sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint
+exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def
+
+@fedspecial end
+%%BeginFont: CMTI7
+%!PS-AdobeFont-1.0: CMTI7 003.002
+%%Title: CMTI7
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTI7.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTI7 known{/CMTI7 findfont dup/UniqueID known{dup
+/UniqueID get 5000825 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTI7 def
+/FontBBox {-27 -250 1268 750 }readonly def
+/UniqueID 5000825 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTI7.) readonly def
+/FullName (CMTI7) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 65 /A put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7
+5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99
+8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716
+EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C
+02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D
+46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A
+4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C525641D2B175DB6E
+FE5425043CA62CE886B802B23F41D33FF06CB9EAB7DCFEE2AB63C1333D9B042F
+B0A32D7634E2BC65BD7B7C53695C585079EBE138B40ED4BC7D06B30C88B5E0C8
+E93FF20138D513B24866986C4A633304FC4945EA8A6C6BFFBA1FDCC8F7474BA3
+D997548C23060E15A15687E9B58A8D2E2D749776BA364A2E28FB03DA767645CF
+34BC9E787E5D3A5B05F67D169D710592108F4647A0004F71159950253FCF9A25
+028DBDB4FCDB2AB5F17E49A5DEE3C366C693E0784A4D036F92FC97F1C0A0C08D
+E3FD9FB57AA80ADCBF047193DC787C35FB3237AB63613A9244727FB93754EDFC
+323A8B936100717C26AFD2A4EC3F66C438FECC2D6EC4C2728ED313AFE51896DE
+9BB5E98049A4940FE2EC90074C0EF991AD2073AE06B7AA62C2D6A1E74E72D3D3
+739BF7461E7AD856263A57673F6C7E33C07E330A9486B20BC9FE4D2908DBAE9C
+1078C36AD01B070C267BE3A1C8D1212DEC9CB71683F464783AA3503DD646FFF8
+C0D859A4356E4995246790E5A2FFE5D46CDCE889E32516264498AE92D769897C
+A8E5FCA9C15392A3AC0BEE3573EE14EABE243E07F10E33BCFB4CDFC7AEFEAB6C
+F62C21EE29CFAA994A575D56C692C6E040FABBFBC5C0C79A23174E728658C967
+A64D87103716B3D29D724DAFFFD2DB429F9C60EA4CE589C3B5FDFC57297CE277
+80E9A72FFED79394E57C4CE22C5CD55433B3BB329F78F35B25BB3F635DD11897
+75C1BE2A808F26E0840D95A04FE7FE0A85B2513745D1FCA46A54BC1EABF596B4
+F0344BE1A8297EC0E7932E1C82051868BF9A463ABFE0C63ED8F0760A44DEB196
+4643D15E499017B5BCC3D28C576A2E0523BC3C282FC3D078B4F944B22506D29D
+8EADCD89A7E73BBA812C34E4D2728C387AFFD3BC4776236A1DD646ACF4ABD7FF
+6A09AFC5EEDFC35F3E9A3C0BE49425D85B0E1A935DD5C076062888DA3B4DBD7C
+72BD35B29BBF1042EC8A64E64AC472D3E446FFC36FE86ED8B95B65E6756EBF02
+FFB1FA08D7CDD1A5104AFDDBAB721951E5BB5D091BE3F827DE1D2667ABFF201F
+AFEFEC030C90440D358259A25A2BC111BB56B3E53E5BE0AC8E366CF112C289A5
+48442A1E48C0115DF1119349ACB1FE6983D805071DC20D576D9267AACA497EFE
+CEF2593A4AC5AF2167627B00C5EA97D125EB8A47E58CD9B213D74F2D37F8E474
+D9E3EFE626E138F6B09EC1B90E207C2DE0539CF5AAB4A5CDC331B295D8202562
+8482DA317D4BA1404A291D299E0A0F6024696EA9225E4C7B15839F733EC4BFFD
+E85B7CE1F0883A5A0B4544E534015E25DF3BF5305682C20B1625C3C6A5700087
+72969CBE2D79712C8EBB9F9776DA3D6A7A35C79C6508F8962B1E34007F4F9EB3
+E4BBED40B4C76C56974838F6296ACFE974A249F80FFD668AA8159841E46DE0D2
+6A5BA7E19B006D7DECFE918E0B792F4D0C04FA774F6B399E165F7687B4962646
+2595E5B24DAAA8BB1BF33B972776A258F3D039FFA6CAC49B3274F193070D95EF
+B96B07A2C5A413FE43C59F6D8F843795472ABE1F73107C0F5A5B9274CFF2346E
+7627355D5E7B3B3451C89DF5572F4E9BDCAF526425B34D71875B515E62DA8609
+B45B1BEA5002053BC1F0896E9FBFC00A83FC660BBC5258426108155DA6C00024
+AAF2DA69949B5DB8D9EA06A599F2B277E45DB331C6BC2F40660A33BB33FA468C
+9F8C6B65CB2E273BE3E076B0C57680E227163C6183C06A4308A0285526E98445
+8763C550EE9422B987AF5EA62E89630C007C63E4BB5FFF01BC59793A20DDD35C
+BFB5C79B5416EF06B967B572F3C58ECB0A3798C438778F42DCE24943ED290743
+6CD8F32177192AD8EF12373CA6E493DA0F045C1CFDDCD49F6E4C067324CA0A3B
+389CFF8E2C408D8A4083427D4DD8CE33ACB202800A75E581404334E3A910EE37
+9B6DBD1D296C8C164B7B9E1B744A09AAB39963E396F5EAF36D7A02FAC04A666F
+6184E9CD0BC31B6C3ECD327960336FB1F9F9EB3B63284E0BEFF29DF468916260
+15E6DC9206DDD65F43D75762520C3D6D221FBCBC530EA8ACD715995411F785DD
+212848B1DAF379667F67763E6E4AEDE090130D1632153135992A292A12541702
+3CCECE5CC690C755E8D6F4FEB9D0C1F5C7BE9E5388520CFB9F705F227E131FD2
+ECF6FAEAF05ADC9D7343FCB8CDA6CACF0A89DA6E2F0F58DD74ACD2A670F3AAAC
+51C82B11ACF98BBCD1D1DC49E6A8B9815116137E9DE4E3975D3363779165F11A
+4EE8B49058750A45DF8D3548CB628EF51A05B36FE8317A864CC5126C073A056F
+A1F3DFC27F4A5516782E58C26CDBB2C24693F66FA7BDE6430184675C5BDE38B8
+FB08777618A8057F0B8102B14A9122214037FB150322003A0B4EC789F94863C4
+7DB0F028D37EBE23863834060E0E7A557B97E9C83B3D1765C08A86A5BC59EAF9
+356A0B1A4652044F5757B3CAF077A53D09FAC644D69B3C8FF220E23AC9461FAF
+3EDCE217FC3222278BFBFAE76E8A3BE95920C58711CE421E21B3208438871E76
+468EABB998E3B8C5A914F2E6D8F3A8390A3F3802843FF261BD4629F369E1E5ED
+9A94C4B2724D31091117DBF20F6857873BFCCFEC228FDF1F42DE699A5B3F6633
+00EFE62983F273CF97E171823BD3A4B2275D0D7B4980357B1CA613F8383C90FC
+080A28C3CA09B30FB156C508C88DA67EA995A4805C0F56A0169CE2F4F165BC67
+75D9256A9A182D17804CC75DC09E4195DADA5AB7410132B32AC9FFBD8E91F0EC
+5E16F90B4845926B31240ED66CF7E7B30B09A2F0A8B5321E1D41A85C5BC9592B
+81E62AB9E1C7689F5F3DD004B32D2F2DFCFF536FA73B708EEB1EC50431F01831
+497CF6907E3E0AE42240C1F95CF761BD7C6D063805D473C94371C07CA1065F38
+B6B75779F8B4B08993CD240F4ECA804E083034BA706FC89997A900A368D1F65C
+E4D4035CA5F16EE160DA90FE84F81DFDD7B89928BBA041CE048841E96F90934B
+877CC64D608B2AEC9BEE8B80A0E5181EB32F93463F93E7A2EA94AE70A60CFB8E
+94FB7B11A47D9F8CD338296F9B8993BCE0B89AECB520FCE80452B8C5668A7BE1
+65484C4F33340EAE118D1DD35772DCA7EE26E9D3097832357431FA2EC7AB1FC9
+50E5C8CF1AC6CE26AC96066F5E1141461BC4E9B5D9E8238D6344C201FE1AB5A9
+EA45B0714D1BE5DC27C06046BA9A3715129D41065DA246AA3CA2B2C81B1AD030
+1218981023F8F5C0C500FCA63C4F745CEC91A8DA9B80BDB28DFC525950F82EC2
+E7867CA9E096DA38FF5CE0DE0DDF7033F4CD1EBE11273B1373B76168930EBBFD
+0A80E139FA67DAD2DE2F3F5A8233BBEB24354254171B18D4195F613047E63686
+90FE10D47434A7DD0C619F2514DC5A46A4075E7B8BA6677E38956368F84158A0
+CB37CF43C2E48A3856C0BA0F69BCD63F6782D8475D955566104C34C0453E01F0
+9AA0091C9BEB71FCF385D90027C0E69AD0EB7C91B61B2976E31BF9D9AAE65588
+498881E5F9AD116E6D4DEAE2182FB848DCED82868355E08D395E1AD26EDB5C24
+9B92294E3DF2D11314DA237CDF52A5689AA1FA4E49C4A82381E5C8638B9186CB
+633333610FF4112D7D02C3CA9AA6B44F5CAC4582EA66542B552A88598A759F3B
+E3DBC0443A40B25DEFC7DC0114E5465FEBC3543E82494CA44FF09613103941F4
+6BA67CE6FFA9BE0FE7A71A1BC60ED190BED3C0B3E7A7702520631D0A730231E5
+F3B53095017F80525DC287F0A8400E1630A3D92F076A13E5E3D947F9F0277FCB
+890123AF04932938C6938D7533D2429E580566681049AFD0AC057B59708BADF0
+8FC7E5DF40CBD80F49503331A81A5C56375F5BFB4C4BCA6FC94B7C6FAFAEF6DA
+93C704F907BF8558173DAAA78588CD8C7D1B13F838AE94C4E5152C29CBC171C5
+B8B3146FB0CE369F0B0CEAE5EC657E60E74321BAA347D2307CC55DCFE06E47BF
+FFDB7A813FC6D30C0FCE5BD3E77393CFC51B38EF275C84C866E69CA9C74C9AB4
+A6A6DC7D12DB626552D87856DDD69AD28AECDC9756A00A0D32257A43D6E9CDAB
+C8127E06C4FB513129926FF0395F0CC1C2D808C97635D33BA2F8C833F2F84F66
+3B05BDE41F950EEDEE73DF90F644ECD7A72CB2CFEC1FCF17A867E0B0C0F5A7AA
+59AF4501570A50EB302F85E542BD29ABA6D74332400F4C8365C3C9E988752F99
+B839B7A0F630C740BE32D1486981D8000FF636C90F694FE379FC0709EE7CC746
+F883810903E238C932073A90AC78E8F7DF9583C1152C559A6CCD3E5C7C0BCAB9
+73AF3DFA8615A7F299FCF7CE7206D5F4B9040D387CD3C52DBD08E0E9A80C9616
+5EA0EB493768C53E93FCE41BCCE064A047BE8C050266583ABAFED74E2B968BF8
+6CE1507105B9503D6FC29CE61BF07ED568B0F1497796B6CF781E7262762C1675
+F25E86F56CBD7E68B03350481DEFD02438DCFBB7EE50FF276387740E79E5CFB2
+CD7A6FA367377707DF63029ECDEC47A4EAD2C87CF75E4A9112444FB2B5BE55B6
+C25515FF648509AD54D739CDF040FCC34B6A88788E0372528E9B112FDB8C7843
+5D557151B6FCEE99F53BD5FFF13026B95ECBAC75A0EF4F856D2F150817B0CC7E
+20AB39ACEDC30E1B777C6F06D3B893DAC73FAEEDD93EFE3346C6255DEE89E26D
+E279834A7C2FF9FC63E5BB9AF74295CC5F8C6CEE33046B00DAB455A40FD74A3F
+B7D9B4251448507F2463443E9141E68D6C244EE00D1E009E7F739AA650C7A651
+4901CBF31A83D7A188F7980E74F75BE0EBBDAF01F106293F5E56FE9A440E5CF5
+89C2C6FD9026198136C5F0B51DC53C878577C932E2B2B549B3FEA7B8D12CAC8F
+B975965E6805C79A02A08779D78D582548412620F69F70908E351852CBE389B8
+A2084B98B072902E74E59ABE2E32531475866B3C5E515DD140B3BD06F77FE41F
+8D7ABAD142B5DD71CE0FB171D93C72C1C113397D5C6BCA124297997581284FDF
+3655C15DEF9EBEFB6EBA58153BAB51631CF70FF79180B28411419303B349E7B5
+CFB24E53E6383A11041562E4F938100EA504B10FE0B58D0036273D44AEA380C8
+D14901EACF5B826685E27B15D9C81F0C6E4581DFA876650C6F708A65937DBC9E
+D53DA2057F6796D4CF06F7ACDAA3858386DB21B6E14CE1A4351C9B190BE38A5D
+2A59CABDAA767FCE533243C6129DBC22634E979EDADD3B8E9B6C9407ADED11CB
+E7DE1E57DA279A804612FF97E38F78A88B9A65186D33DE5043F2681518036CB6
+05F77954E61B7231819803D8DB4FF8DB67F56A47893D2A65549AA44BB38739F9
+C34A17A00ED72D004C627212B84D5B521CE8160C0F4D6836F02F7FBDA4F7B159
+94A7A9719AFF6F28060D6798C25325F9B383F7BEFB70397BF0720C9D4DEE43CE
+5A278D83310ACE58573A5C3A8B5CBBF50727556FED673F0E6D3D362B9A406127
+A35F11282B39178A7157A0AD5E3F6B324D8C83805C6F12659EC333C89B849631
+4CBAECBD29AAB3075239D0D3840D49EE57C23AE53DEEFA123810371BA2F44EBF
+C8DC4BD214933E60B17971AFA46F64389621AE2037946772D7357164850C7EEF
+9454DC7000DBA7F66EBF61BC00C46ACFE18C346C984477181FD298E5A2EA60C8
+BDCAED5006C6DAE30796D7FE32FFB67EA010C68701A0310C07F97F04B928AA48
+7964C458ECC4EC69A47DE4035AA97F97DD83E0BB9013833154D013E84204D9B7
+FCFD0804760635839FB6CAD93935654EE8C9B7AC136DEE00EDD88D693A50FE11
+2FE74E9B91DF1B2B4CD1E0E4AB2533A56CC0AD18305753A244620CD879ECB18D
+473DABE960D6ACDFC3FC0ACB06A42DCCA04D73E18CD6E53123869411140CC9BB
+06F7B54717E6437979E88248F7364602F4117968131676F4B8B05AE44FB24B2A
+517FD4A7E3FAC0848F01788425C9497445B09F50FAA7DD10718F74DD7EAE0435
+83AA8BB6BB68247DF6862EA85923F1FB13EB660D9F361989AE7D2F6E4C720D80
+7B3D28C17D150ED27A89B5DD2C53DB1C1FCFC9DDE0AAF18FEF819FCF7EB75616
+610CA0101EBDFE9FBF4A9A2A0687071331B07DB41E666F7186E5AA42BBA3D76D
+9E2C0A1172F00DA496C9145ECB1CC5C900593C5BBFDB66C73B65A69B8E9887CB
+7E8E4D4137123E9E22D1F08CB3B7CBDBE40A36D4C51FDEAB241B7C00BD0D2B7B
+D493700B99FD83DAEBBA8E35A1B01105FEED52E133271E1F9FF215DA20CEAF59
+FFB2D74563ED4317B3C56E3F58F367FA2D285916CA08CE517EDD722E8B06CDA5
+F59F90BB13E2579B133C2D645F5DF5EEAE8A18D6115DB17DBADE038B8DEC5D71
+B71F9203ADBDAC8CDE2A75ED88219E4D32847F1D5B1C0B74D6E03B74CF27DBC2
+B4A0A1828F238B498664555F6DCB51A05ACB5F4669BFFF59D90ED267113C3CE4
+BB7AA57C660229728175C2E11D451C4F132572CA8895D3963528AB7F4B65E4B7
+F359DFC14A05E2211538FB21B4D0DC4AAB98F06AED736CCA3662CCBA0D937B3E
+DEC8B155790F5A37CEC51BF0A85A309871028A67C2C3C451FED7FA0D45FE2437
+B1C1550DBE4A512AFEA4679A30FA62B0BD33925AB97798CCC88AF9F5066ED9A0
+818B1FD2A2954709907475074CAAC88363706F7C4AF74800974BFA1F0A080B34
+8438DCD198325C68E88D3579FD298ED4F6C747E0335D2A4218BF03D95E6ECBC2
+80A094FB09A5FB86923D79197F001EB06D4640CEEC20FD2340926619393DE5CA
+EEDB2FEBE0818CE00B01ECB5834DB9395671C985FADC459805E29A7E640049C7
+E70F06036015E4C4D1F6EF105AA6D1414F6DDF186D2B751F3DAB51F03819A8BC
+1BF747716A4B3150E2FD10C1FF5009739F7FDF01980167219D33534D77945B09
+1A12A93E748613E9998276569D1D97134980ABADCE4511795EA176B1F5358235
+909E52F8512E6BDFB95AE41ABE56D672FA606B69D8361438805548ADFBB35F1E
+CCF286DD2C100E646AB14FD73A283903D0DDD8CD8DC214A665B117C9D263C716
+DA3460FC43621B9176D2E7E4920C4A068D6C13DBD4BCC1D4E7F790A8F9FFD349
+EB48FFDB1B70376756E41C75EB4956CC901C6901BDC7F3F4AE48660E59B7B3F9
+818F4D87D4D9DAAF84B4D947F0DA57CCDF44D2C03FC9BDC48B2D2311B140DA11
+3485996DEC121F96567B91F2FD7AA9B39DE9504C23A6BD69A07E00C52A5A8B80
+A42C8D10E764C3F9ACF723D221D29CF701E8CB168B50699BC434EB3793C19457
+78EBBD462218F249BC2CB3B97315EDF9A1209C817EE4BFAFEDFDA894B8808B26
+CA587CB7739FB7A91B9FFF302E727AD2EFE0BA46EF95A1F21A9C32B2B4F4FAA2
+1F7036CCAA6ACAF7440FCD1E571DA4AED838F9EF1007EF7B8248981B8B15165F
+733A0B6FB8D697B5758FF0E632246938A19BA25F3D5594C7EEE79D45A48972A6
+8F66701041F42F42563CF2C57E9E9C173C365EBB414895045085951648719AC4
+CFD520A335DE30DE06E7D13107EDEA3C4BEA82335E6063F2C47953AB23288ACA
+F9A9010EBB8BC97EF4B1A21FC6670A8DCBF67943B672F7782D3EF1BC773C95E1
+3523B5197F0E8920EDA0A2A4A857DF028AC0399DF5BB1E95642D39F8FF740370
+3C8E4E80F6E4A00CC55A13A6C722A77268F33FA16B94230CDF2109F52AC97282
+65ABE9C3BD2AA33CAFB4A15659737A36081C13D02F8FBBA8AA1CE951FD498D47
+3FF1E448D7655E28E1D3F07B0EA05F5A756073B85FEACB5E957EFA5E03C8ABED
+088D7F3118CC190632BDEA2B646DABE0CB35B69369C888AAB955C1C41F01D4B9
+8559AD18A4180053B7E9268CF93B9763BA70C77A829AE89EF45B04602E42C6C0
+B9768CC5723E28652053FE405016E1B8F6DBAA629B78A8211BCD40FAEB10782D
+5B82ECFE97A524374BCB3721B63707254C53A523120636C294C00F85B09FC649
+0E2B44BD08F8EF9F9AEBB3E81E96F921AEEEAA6CBBD95228CC6A5AED354CCC47
+34D8606F88420E963EF20049FFB86DDA1C41E625A80D55975AC5DA348656E87D
+F959F4D94FA23125502C9CCBDE79158D00FF6B8AFF1E0C2B43F5314E693CDCBA
+9D643E9DF2801F52835E8586284247634E941D0079BAA75740D33A15E776E27D
+7356C1062654690D2B2896781AD675273E4E179894830561351EBE2054280EFB
+4BA5EDD3FB10763911AB574C7FAB6920079A4C7104DA53F564F40376D068DFCD
+60003A21D7EF05203396667443355ED6D755FDD063A5835079C8B7FB2AFA58CC
+21A892FD89DDDBFDA976C49A83D3439EFB7CB42AE298DF55AA04FA236DD4C84E
+7E2BF19EC08A12612B7804B3A1CED52922E0AB7F80025FB2BC7CC7220C7E66F4
+F2FFFE2DC97711C85D2A854B379BC82A29939C500DB209860593F6A7E9035D06
+B4780E45489510921809980AA0
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMSY10
+%!PS-AdobeFont-1.0: CMSY10 003.002
+%%Title: CMSY10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSY10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup
+/UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMSY10 def
+/FontBBox {-29 -960 1116 775 }readonly def
+/UniqueID 5096651 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSY10.) readonly def
+/FullName (CMSY10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 120 /section put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0
+7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81
+DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91
+511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6
+1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD
+028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86
+1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4
+3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021
+91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2
+E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A
+11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97
+C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857
+D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20
+B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3
+93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F
+10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D
+7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF
+B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B
+491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB
+F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6
+019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6
+915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36
+356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0
+5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D
+9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64
+3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1
+FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252
+720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5
+D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726
+BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5
+7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377
+DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56
+AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7
+A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E
+0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743
+AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18
+CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023
+0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD
+5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B
+5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F
+E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB
+54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809
+E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F
+A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906
+4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378
+4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4
+038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4
+B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308
+5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC
+B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837
+A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD
+2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D
+CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246
+455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE
+FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03
+16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C
+16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F
+483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352
+67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2
+3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472
+1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770
+93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA
+051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B
+8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4
+8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436
+6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0
+06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7
+84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0
+D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6
+DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB
+0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD
+8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC
+C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34
+754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406
+1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05
+CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523
+1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F
+153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02
+905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718
+617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2
+8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A
+98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278
+53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B
+888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D
+052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A
+CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501
+A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F
+07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56
+B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672
+10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2
+CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D
+3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12
+D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F
+849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16
+648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE
+84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA
+2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD
+2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204
+9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0
+B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B
+D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7
+135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE
+EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939
+C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782
+7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0
+4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2
+9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171
+050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486
+3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271
+C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8
+843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342
+CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B
+B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50
+3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175
+19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946
+FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0
+17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6
+8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B
+CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003
+F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194
+1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E
+4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194
+2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929
+9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593
+E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB
+8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB
+BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027
+04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5
+C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404
+ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C
+4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909
+84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6
+C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6
+09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777
+D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503
+56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF
+035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB
+FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333
+CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663
+B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A
+F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD
+CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B
+0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C
+B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9
+33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6
+4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D
+F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E
+2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A
+CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5
+88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37
+17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0
+55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A
+A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50
+2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3
+406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8
+AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B
+60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388
+C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6
+5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50
+822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E
+94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02
+D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA
+343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE
+894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5
+DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327
+DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F
+8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324
+A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA
+DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270
+E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947
+DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC
+4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653
+5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1
+02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8
+88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70EB02A
+60651FC2E263002D3986B7B20CC2AA08330B9FC2E26765CD52266969A86EE30E
+71E0B41B6C1C6DA423D3A7E1553D2FAF26EF40DC183099322D362E4965695C52
+9FC3E5BD7ABD743CDCB717DB10372A722A39CE53FABB454EADE2179C4CBFC016
+A8E893C28EF549CA1692C8D8ADFC471DCCDE266FB4E97A1F3035801F3F034D44
+AE6ADA0192657E8078A1D27420093FEBA111333314658021B90DA4E7A8D4B829
+F1795501020D5FF0AD25584C1D57D87BB7871ED859BFD1BFEDC15EC6ECBB7011
+67E52CC9234CFE6188BDFD6D28BA6BC46D3D6DD5F92C92544B9443A6AD81CA17
+9B78F6601C9B3EAEFD7B3DE8CE8A0B1844BACE90971F4795842AA110AEB35008
+AFFF3EB61BC66C4286758FDD6456130C434FC887858BB213A9579F4DFA8B08A2
+4E5C2A52C50B26E621B95319F58A396E71CF6CE1FE150CFDE951C5930A164117
+D50F53563BBED7E2958BF8C44B94DF155CE49EFF889A72E80FA91164D07F3918
+3E8F90ACEF29867634D20799F3A8A13A8B75D965417030450B5F9212D84CE0A1
+BDE1320C5EC0BE67F0498F3AA48FB1F0C4CC62AF5615A65DDA620D66F843BE89
+F17C4F525076B548E0DEC9A45052D08ECC498D4BB0C17B222A9AFD298724F181
+56FA4E5EB2576F18769C14C35C25993D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: SFRM1000
+%!FontType1-1.0: SFRM1000 0.3
+%%CreationDate: Wed Sep 12 2001
+% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>.
+% See the file COPYING (GNU General Public License) for license conditions.
+% Converted from METAFONT EC/TC and LH fonts:
+% ecrm1000, tcrm1000, larm1000, lbrm1000, lcrm1000, rxrm1000.
+11 dict begin
+/FontInfo 6 dict dup begin
+/version (0.3) def
+/FullName (Computer Modern Roman) def
+/FamilyName (Computer Modern) def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/Weight (Medium) def
+end readonly def
+/FontName /SFRM1000 def
+/Encoding StandardEncoding def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/FontBBox{-189 -321 1456 937}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11
+69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB
+CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89
+F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3
+F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C
+EF25195F68A2A98170E48759F267FE330B57DF626EBF73D2779A4A6B462AE6E5
+19E5878939A488F2FE1094A76925CD24DAD4573AD3CF34E426708CF06E7EBFFC
+BEF5595408106E2189F418D17AD510ED5B6A528E8902AA3A5F0FF52AE3DEAB07
+32F06B63E28BB88229E046F4FF8A356BBDDE82DF2A197F2E26CA00D5594725A1
+83A89A36487EAAE1AC312C929CDCE50722FA6C596C261E4D78D6C6ABF77F5CCE
+0E410ED74287A0F201140F8D9674A7AC585D3CBC72CCB824F9E1CEBD08AEDB3A
+A4015CADF471F7ABD9B0F0AF73A8274FD441BC1988A61799856E4770155341D6
+516CD0E25BFA59B67AB7E0571DF3F5BA70AB52137D9E6A79EFADBE70CA05AC8D
+991D0895C8FFC747FBC0E9A7212BAE6560B9E2B64FFCC58112E64A3B4CF7ECF7
+595F51C34AD1342F5678FE1E62EC5A389CF04E82B5F832914B91F921F30A7E32
+CA3919F57A2D9DE844CAAAC0DC751C255C9916595E8C9532E7A0A84A0AEFCACD
+83EDE059FD06EEE9951473180B517F25F609F347DBA012AE9F004DC3C771777B
+BE812787C3C50315D67254A384EB65F260943C6E16B2CDC64E15EEEDC67C5544
+8ADE9981A6867405E46222CACCEF79F9DC8674268BBBE1EFEC2187A75FB7FBF8
+CB2DB2134848DEA2F9CED443DCF561E7272B38F830871B2A5196A787924EF556
+4B7E9093ADD414ACBC10147944D216D351CC744DBC13B0749FD0A129D7C47983
+7FEC7FDDECB3FF4166FE295814B8EF751B79196DF6FB2F28CA8CB00807F682E5
+1F37B8DBFA6963E77ACF4A16586D58C87B0F882FD7BAD0A5173202958267F567
+6D66D0511364EB31556C37BA1973151C35046863FB4F3F5E6434479279EE110A
+575DAF0531EC6A4D83FAAAA64995A7B97207724374CF283D0FEE36BBF7582F5B
+CED7CEB37EBAFD8206E691F7D0D17C63527AFB2AC537B47C402716FD6C23FE57
+22BC8B95E994FF0C6A6469AFD70C020C711DA6F19D4C46B9DBCA6769B6FF2733
+21E813E7E86FDD3101BAB642B1553FA2642DFCDE99A053213ED3C70CBDBBF19F
+C743F1F168B5A21E570C8DF7C108FEEEE50C825EF2714E974749A7317D535316
+2D369F1673DFEFFFA71E41E520792075672344DCEE4F9F1687F0FBBDFC25FBDA
+0D8A6A1C3DAD8BDEEE8161AFD70C020C711DA6F19D4C46B9DBCA6F9D79D26E79
+9F1D26CDA56B940E651D0D4D017BD65B3ED72939301FFDBAAEC98AC821AFAD33
+5BEFBC695F2746A01CF510E684C7D589F29C9B5E0BB1C42C9A96843918976FB4
+22225AFE3A3F92B85B2D1EAA81D0F1D4BF85B1FBE305A01C6207D95271423B66
+11D3879FD381D567701AF1B0B0749E05027D5493A806A353E3265170C00076E4
+86ADADA8AF511EC5FE32E5834EE0CA7341F16665D0EC4DDE1F80C894D3049706
+CB5FF8EC37092ED0A93D27A2EE85982E48AAB7AFA36EBB74CE59EEBC8CDC41B5
+A08A3098954BBC19648F65AD5241827219F9BF72D4813A30646A85A3E9C558E1
+31B17DD5EBE155667B73C135EDF4295FA4DA7A1C9895AA3F6C1F61BD658159C8
+88E89E3E48BFA5BE91BD3DC050837B89D74F7872C976386C425054BCA530CF6C
+7A33BCABA8689139753CED4E4AD623924858E2D38A7D4BDE1BC5D5EB4F85BE37
+AC869A6CFC87E1FCA5CD9D3B850D16B50260C9C30CFA7DD1FF25580BDDDF4106
+F5E5BE85533BE7D472D65C01DD80A54683E962767BDEF178B162417A7B7522EC
+6B606CF186D582DD972C54BCA767918EC9225192DCF9AF7F4409C06926511480
+479F0307DD5A7B8E16D3FA14AE4D7C9AAF0789516E44D9E4187A63CE0397C28F
+3414FA7B2C2D61BFCA9492B32DDE38885072B38149BEC1A5CCE0C84A4963D11F
+2E56709565C8818A538DA896944A83934003AE6EC6CD98A11CF309661E2BC60C
+143604AF24AFFC6126699DF619A02E659CA508BFB7697284F9D1B44FFCD31970
+F8CAD34EEB68EA6DB154204ED9DCE3E7E23FB72C2692041C4FF3728CD309F215
+414595B073EB8B80508C2EDC1C4DF8C38E89CE919F2A837D1397202EB314ABD4
+09CFD87B215EF9299486B7EE9D4CBEF1D42B2D5DF35592C3A28ACB384F4F0C01
+CAC17DC73091C42F7AC741CDFE7268453DA56BF31816E435F38EB8C23C5093A6
+162863EE9B7A881D2F2352217CB6BA4B3F58880A43FD7A9F5D3E2CB24D42FE33
+605E3C8345BCAE8E072279A50EBA843179D2A95808D1CE24CF78652958EB8A30
+ADAC715CF070A47C44BAD93D952A6763841D6D5207A8BDB9FF4385997C0EA83D
+3AD039FE0720013D660C4BDFC2FCA9D28A6742AF910205C9B62146E86F913D6A
+CD406A2E9041682E2C5192F197090EE5235882FFF6C169C9A3E1E6D2F4739971
+EDA2684391831CC4E37F45277B62E03769C06DB70A2626B6321ED398C79220B7
+B304F5F744EAF5DB260B14B3D5859FBE06922B232B0AC83BFAF49AA95B7C0C0D
+3060AF32B145FE7CDB50F0C24D0AF11A161E21A6AB4CAA2CEDB52F9EC740EB57
+78E39C741CC32E2D7F209C93817387E1008E89241DEF3224534DFA43673A0E41
+90244B84241A7F524982C47DF34CB09E310FD1644CE582EB7FBDC53D90EDC6C9
+D0C2AD47B679838CD6DEC2BF89521C1664A09F906D7D4347562C404D0FE57EEF
+2870E0A797E0EFBF9FC06108C2D3CA63159A0300C7F03BDC40678E627A5EBA53
+AF2DD411BE8E42D4B10E9085C6F770F2704FEDA818B81260A3A1AA4B2AC1083E
+33A7800BBDCBDABC57592D173D97119C98ED76194C28DF9541BF4E95E51909FA
+21A965428B0FC127B39D9A2488319CABD93BC84CF44FD1B87D580EC68142CFAB
+9D75C4F6D6A73FB4C07FA71626373BC973423EA18C82839F55A8A6A0FEF2F923
+41A948A8F8DD351882D0FD4A250382DCDB836B55F212F19C2A5C008E3C422AD6
+A6011E641B73BD918AB2A143C4142FACF80F1249C3D953D33B6C8CD92A37EB6E
+ABD8263983CDBA107F2C8E7A85BA09D427BC7A24441BAEA7F51AB95C11C210BD
+B0C8F7D62D2446A2E1F94FC480077D037EA8DC31714AB4CFAC640686AD6277B1
+E978E94B1CDD91326981634512AF675BD1F1DBD790D61561AE5C0616226C44B1
+E472DE4B65DC86690B13EF02D74C31D8C21F3E56A714E0F32D58426AE5F0EE8B
+851B995E240815E2A866A4A74D6EAE3F5360559EDAF5779D2B205C39C40D9E11
+850734F78DCDCA0C179B7644517394AEC07CD03845CC7EA6AEC3594DA32A4877
+94284ED0FA153FCF1F373CE79CC401F71407301BF2EB03C1ADBC77754FE919CB
+EFA5C9999CD1C08162B9B486E52E15F7B5FC5500684228382F709FEF2F0E2FA7
+C04FBB62C5383E878AC4927C4ED480DA135D62E500F1CFA744FF88838E08E36E
+D9A71B21499A87C0AD1446154D1B0CCBF61A17BD7C840A1CAE04C0B973F1D907
+8EF3FC556588F36CE870E720C069E1FB5510EB663BD4F4259E6596290A1977BC
+CC8AAC45C94657B38B3D9CB2C1B402F33EF5020E537C383C054339C0B59D107D
+1B47D0FAB417144C6D8E04034D6CB673308AAE1E717301AD77008B19009B3A8A
+C75365FBA2F62C1B30E247FAAC7EF825F484170B90F4C84ECCB6E989D587ABB9
+715C492B257104ECDC5DEE84CB467AD76C2C39A3696712B9E797567533E6AE76
+83889239262AF3879A559E707AD15B7E245CE288FF2EDCBFFD84BF9CCE9E0398
+07F0FEDA4B043F9162C39E484DF8605EAA3705D32122B0282A3D3213526C1223
+4AA260E3D8461DEBEC4B6B172972FA8407B8F8AFBD91CAD98263AEAB5AD4CA15
+D3BB121D97C7395A2B076F4D900E9C3470E16B056015C1D27A302A38208B99EB
+0B9BFE812FFF13B922F1FC0A070251AB09E2FA6A38AC067DDF9287A6DD0DF043
+72480238C3A58142A856E41F55E78C23332C8C45B0179F04613CECFDC108FDCF
+E182AADFA502B592F29F4ECD69FD347A453EA719304A34AA5C72F2ED69E7254B
+B077FDBE8CB8A5FBBF721E34F0139932876A8C1BDC0BB8CF777B6D4BFB54F373
+A9CDFFD3673734CF5BD8D26B30D7AEA555822BF5FD6C097D80179D2EFD2936C1
+B63D2AA73221F6C261FB223E55574BC6C5F188BA6CD7E211F0363C070B8712C3
+4ACFA5BBAFC4AE780BBE824682F67BF746E85C18EABBA5C8859118DCE36A4C67
+AD7E76C12BBC90944D371843611D0BB625E227C1394A02184F9EDEB92E92D518
+71AEBC24CFF248EC622A009826CA2F60B0166207F7F13475CD71A39B3C32BDF8
+A354C9CEC1281F967337DC487299AC4C0D7FF5DA27B164A6E789176FABEAB6E0
+BFB6DF84EFC5830D796F810686720C7300E1D7C5E3D6161FF626461B0D0857D1
+C425BB6FEC2597D681EB4AC7FE97768FE3268CF65119A1C563F00FB88D12C24E
+EF8E6265DBE574300079E65214FF64BF79DE14D5021FF1F7A2B6AFEC021C3ED8
+52840E35B2EF8EC566BEAF52F586DE03A1E87A876B6089B8FB12422B0DF8A4E2
+4785C27689BEE6AFEF3A8A1EED73B68826B15C388DDB60F5B7127CC969CCF460
+9576ED3B57778C0135B45F94E83B6107150C7E075E43B2CAB8609B97E6B3DAA1
+159517D1805ED8C87D4208A4E413A919A1192B6422AC8380F3CA98AA0501F920
+58125B62B30FA33DC7471C53D6A975354A103E7F7EBDC73F2A3B22A8BD8CB8AC
+FC88A922EA237D0913B251DB0ADD125F38A16182BFA3C525BA13383C7624269C
+1DCA788959F10A53351BB61EE0F7D9B88CC93C4A05C660E5876D3E85F53F6D24
+9EE85EF5D1A629260CCAFE322EBD1F9588ACA9B0683F0E4E26CA876A37A89795
+E58F9AC8D492046291F076FBEC3EACD81F2AAEF1880655C0CDB8C5A06FD483CC
+E175AD7D7524313FE3EB67A241557DA2826177001A14EDB8BBE36315E7AE7422
+537E86BB09C3EDD6C2784D902D6B246E690542945364E6CC4B9D012D9FB770A2
+D654F8148CE1526CFC7290DE41FEBA409F51DFA84C1430E0CCD1D519F1550191
+583EF27B1A6CC6448A4C4BF05681143CBCF27EFA0BADB256BD057299F792A4C0
+9027AD134781131D4DA202512D16C5AC7A31F723EDA98E72DB5D96F3E3A02FB2
+D3ADE2358B473264D82EE03B424FFA559E31987D2B980CDB9138B87A3337C21E
+270FC43E3204A6FBCBE218962E37B87F4847224C65683F6B5B894C2039BC04EB
+112AE678F69F1EAE5F23F02B8B93E97B355E324A6F55AA6598E315902A97B728
+B56B22AB4C04302A2CC3B826CFC339D54BD2CD3B621DFC1FC54D17CCAE19B9FE
+8F76F505038B55FE1341DEEEE82BBF82342DFEBEBDD0053909FC0E73A441DC9D
+15ADF1CEDDCF4C663FD18133BA6B01AB0CB41BC0DF5937CB785477ABE9874EA7
+668E8BA6B44B1C33992E97B0E803E2EA3BBBEB1B32C0296CCBCF1BF1F3388182
+5EA867CF7FC083A5444CFFCA340D89A7AF9B702B6B01D0C7684F9CFDADABB26E
+15CAD0C381AF7450134F0784C6D6745AC30DED5BD339204F37786CFE74A43B7E
+6B716E972FDB8AD62C98E41501101AF50B501278CB1E65ED7F447D701B48B81F
+5DFE38367EC3ADBC7775C590AA47EC8BF5E69405743F56EBE83CF4FAAA711E7E
+84EE00761CB99C98E28611672B7D85B1B653928DCDA5CEB0E5E36A3BBC2C5502
+E960074098EE208170447306EA4D4E2BF509062926B55E7F75E7FA09BDB80A17
+9367F7DF308F12BD9C984EE5269E22B1725153A8338ED37F663D8A185F69A767
+8FCF4727DC836A72132D1CA61DA08877FB0085E4584E589E242831A28816092A
+B5C7066486714D05D29C940737ACEB4102F3CC493AF5BEF8A307841826D8B89C
+C6D898D250DC6A85C3EF4C86B8CBC7DFF25A7AA818AE3DF1743A172DC778B71F
+64D0CCDADA09A077839FA7EE598772B76C72F09CD044FFCCF494D01487E6A39F
+C0971734BB62776C4EDD373FA3474D9B6ED36626C93D995588ED740BB8937D87
+73AD94B834074C2AD9037DED0B93FA18F0D1AC01C613D997B42A5D595ACC5B37
+6A425B37F9D9CC8530BBCBC20A2332C56824BB6E7C6101AF5B4721201CD20AD7
+EBFBB371B81F69BF1CC3417AED6CCF2D72FA9ED9B79C21B1667E2748D7E1FB25
+80C019563C6909B64C934913357BB4DDF2E772175273E6AD3DF7B7BA6C67F417
+1CBA1DEBB862E345E09059F1AFF60BBB6D5192EA6486DE4440EA9B780D682870
+6F18005670DD492FB86C8C3E80DEE3F0D3A09145E90DC393ECFD1F0D1FF1A494
+D7743C70D67FD09717C6DF992584C499D5C2F475051035B174A1B0C3CB14AE9A
+61C6A3EA8490EDAB3461A1C65ABFFC54E058D3E91C9B924FB42DCBD46CBB1F74
+36193EAAD4C9BDEF3B2631F8E518506118D8394D3C4E95364A01AD3186824885
+F26D10BF19A25FB52FE7FB520AF9A9092E291F617F1E8ACCB4FEB162BC519E03
+81CCCD92B8606041ED5FD67646FEEA876A3AAD2947EF117AFA0B6697324B0DAF
+CC039402F240750657977FAEAB374299C2E9B0F4B2F48809DB1C7394DD39A632
+56D34FB44A79F22947FBF908AE07875AA9CEB548E54EA57F452E3896BCA6B0C4
+DC037D5FD25FA65D96A214E3614CC6801EB478FCCA8CF88559925A96E6FFDF4E
+273B44C708E86EDE45C3A9B18AB5FAFCA8A80DE656955F5983E4674953253E0B
+2337E08B5A1A4199CC9D7FF6F1C1CCF90A4BB9A217A130D3B7C9D4BB8F738CE8
+E686759EAFE88A6BEEC50E0704F27927A854234631E806863CFC0D6EBE884BA6
+DB391153F939FB1E9803A07B47558EB409FEBC95E755B0C17065C0F916F43427
+238A33D70B1ACBEE3C571D04138428ED9AA90AE0D47EB9AA39ECAFE5A210304B
+B5A456EAF97B87CB0EB1B6200350E3B9ED16596CAABB2CB8CA3E598CA752E257
+7FE988887B638FD046DE70ECC18218B9B5D0E50CA0065FDCE02FFB4874A8036A
+7ECF9576B42AABD5CFD3E2FB855CAE60CCCB2B1BE8C3803C8C57941FDDCF672D
+299A933EB6F148BB7C3D61066CCC93A58F6EDF32EC908D93346E2FC72612019C
+CA43081B667F8B6D1C3CD574544745C640E0A70908EC73B81E95714793D08A72
+47DBA5336E6EEF1C51EFAF1A5E50151B0A3BBAA8B6AAA751ABFE802349FAAB09
+8DCC3B2DA44C8A9F47097547E3505ABAAD4474BE2512183A96C577044CC14073
+847C45A8C94644767DED16E2DD7AAA550E93CCF5789B579190F177AA1D507199
+E063C8E1F6304F982C1C374A22B7264B2BEFB17509CACC9C39A3C152CA0A6F6C
+22E4ADF5B4E3CB7147DA237B6439575C23953D5B8A1120F688E18C410ED9FB49
+C0B5A4984E5D647E64BEC8314DECA894C6AC618011E948916CC451F0FDB65C43
+DED235BBF30B005D70005AA35D72311B35B564F30AA1F268AC3846BA4F16F1A3
+A945F7D24379C97C347BE7F593A0126FA10690C9260DBD8815D319AF700607B0
+7FF1CD17B89D5F13B4126192FE536911E684C7D589F29C9B5E0BB1C42C9A9682
+482D080E00960473DD6D25C68AB8F0DDF594B4E91F381C566CF9C76964C2FBF1
+7DDB8714A80D19B6FC3A41389937E5B2316F4BA911AE4FFB0A7C6442AD1DD294
+CC46C962B61FCAE106241C80A1E685100824A14D0997DD1DCEE34274535EE57C
+BE03C44D9B4E881F6E7DBC863830DA7E72E57DEB9A2350E19579642B5A8FD71C
+6B6362466410CCDC042BABA22921CFE0497494A35168628FC5BC63343CBEB9BC
+ADC17997831D98B6452B9CC478F58DD1B49864BFC9C9FDAA8F861BB04842F006
+C8AF17A8080473BF69CA8BF46959291A879E9B8EA83B9D69D43746B27718181E
+8F54A4B51A49C44F4B200EE16303368DBDE0BCB10E45D3C9E115B691DADA7898
+7127BF301D1F805FBBC2B0A3D093805B9784EB3FFD52113A07B4F1DD4E042B67
+3C3735B53A18412A376398A46621EE521BAFEB079C8D314319E81FB289534F6E
+AD97459A862103D2CCC4ED4925CC1A998112FCE61C1C0CDCBE72A0E14BF19B46
+31F1869EE10F40D2FE4D4428E388229D7325DEB5AC6FD3C60A20539137A9BCD6
+607E25DC313491562947C92273E55B4AF2A738C2C03D05018F0CE1D8272BB220
+D988BCD8C42462489D359F82213E9D5046B24B2888605828AFCB80D174E3E4A0
+851EA03255B9ECFB39FAFBCA6A1E9B80816B526F61C50ADFEA0C2ACA8C2D958F
+D9DC45C228A8DAF476A00A93AEAF086AB80689C2C00EC7226DF86483BEDB07C0
+2338AF26CA3EE7B25D42BA4C5C3612E3206F440659F70C5B905E1FDCD1B2C8A9
+566FCF5C88927336487D54CF0E0C9DD17935372163C9D7C93773BF0BEDD07179
+307EAABC51F425AAC0866A00F81DB82B439C1D786A6A6171C2254C0C87D25128
+19A26FCEAF1F0DDAC1AB92A4CE704368099EC6265CCA87548BF00226EFC9BBCD
+CC152596F0A95B5EE60502B5D08DD228B0A05AC886A7F399F4767FD1FDEBA907
+22379609D3824A76A540F89B5C7F34567E93DC7267453A068D94CF7ACB4B2643
+DB1E234415D5C34226855B511453A952D4300AC961DCC125BD4A86E754EFDA16
+BCA1054A95B09A2795749FEAEE6F3EFE676522E95315ACC8755EFF2C1A1D4F08
+981397321244DEE92FCEA136F517DB61E1D3039E5B276614E30A7F4912F020CA
+6EC27CBD74F8F257304C2950E90E84C0A3967D8DDA377B3352AF777A1B1E43FC
+1CAC9C13BE788C463EBF3BCCB2EB475A9BE17EB08A5ADA04C82D5A06F6C77FB5
+58D0AAF789A8805F8D7189A8BD8D5CF0D71FAF511946BB0240F44F5A05103564
+B183077B4A384AB9E02C217C4E98C9FE82972965D74DCEE3125CC2F22EB648B6
+99D1676B33429253435588B749C98B80C94DF87D954FF40A24FA21A2EDC0D22C
+7D47DBA5336E6EEF1C51EFAF1A5E50146A7241683FD5C85EAFFE33959A117F17
+6E24740A2D0E0AA2BCA5529C72A8E2493D8DC15FC950D9CBEFC9AC174A47437C
+C4A06BDA932C9FE1BBE2A182386CCAD0BDF77AB63F1F98B53DF2E6926A0586B8
+725FAD35C862B912A9A1EEAC1933496992B2BA2CEF3964F5035716C5FFC37C09
+6E9E29BF4BED766BEF1DEA20C4BE1B5AA10B887365BE6BE3CDCF278181DC4CA7
+397744EAA89F919658C8528B742B87CF1B43D1968DA4DD8A6184CC6F537EDC6C
+F4428446CBA9B40684E28C14ED137B983B1A5ED673DB178FE0B0A2DC35B5B7DF
+7107BE17C107E32BF73F83820258E869FF3B2A422DB6F3F214B3B94A26D9914C
+344872DBFC2E014B2852AC88D4C024EB3974C26588628A5B1028DE6F768B0B3A
+583DB75106DCE52C14771D6FC00ABB73A8AAFFF9DB786D7E7240B2CC3FF51DC3
+02D4A39CD8E1B14126211C26BAA768F5A9F93690EAAD13ACD5A89185DCEE1189
+F070340C4B3ACE43C28028ED2099A4A221710F245C7DF4DAA1C5F2AF7AC801DA
+9F249B07774C64D3539DEDB60DA652E2542CE695ADFB7CAA107669EEA5C46FE2
+EE971C71B66A9E5F57A611531F44120A0306308F1017345791BE01187D075731
+4D17DDBF8BD6E51017CBB9BE14AB037971D4926EB73EAFE3B1CABABB482532E9
+F0DFAEF79F7CBDD92563CBCA6C2C6B50905C92286C6E64516507CD42FA169D2F
+D026E09A805BED38F519E42A2903384C57BFFF54E7FC6373399C23B63238252B
+3B7A69483B2170CEA4E9E2AC5CEF9F939A79327515A31DD32346A04839437B78
+5EF7082EA8A7DA9114F6C73207FA46B320AB68A367D1FC76296364094771961D
+74B39533FAAD78F695DC2D53028F18C8F005173602E03A07034BCCC153E3BF85
+9686F6F09A2346C7125730106C85518CD8C85DFA38E72C8A4D8C462D8E42653F
+E1B67833CD25D4EAD6C07D2DA7DECBDA595AA03EB130C12D4DFED870186012B6
+0FD0E369E294E3DF4F25220060FE23E1DD23A6F4AF5E70B13F6F6CA317C1A735
+1FD138D194D67FB179A172CE41A84F0A02D1B93D7EE4D2DE7B6799061D86AAA6
+CA373D543736BADA33D5762A71D368BA08C9F096AFEBC5B2282EAC89791D1421
+4728D08DDD71FB6CD5DC9EB9E491D69A5D39FBF00F1BD7F807F680A6E45C06B6
+85D9B93733B9276E3611A675565CF5D7C8D514095FE4487251BD1366E4190E3D
+D8CE459454C7582A8C0893F629D6044761F6BC693258128CEB7E5AEA54E4DB89
+30BC9E9B0AA5E268385070E6B6D9702B7C21F5F8B72FB3875C001E76EC93A0A3
+2E854275497E30AC3F2D05C451564AD392300CC4933DBFC87ABEAF2BFDC1929B
+3886B07E4F363255EB92F6A69012CF997B6327D50218E2E0F0150E8F5177E12F
+FB0413462DBDB8D300F44232A2AF75FAEF2BAD2290BCD058875B34AA23432618
+53876451323A6B9C07A11141C8920891D0F79B11DCDC0A9903CCCD68C5AAE4B2
+B7A6A708F88124F11535117931D2011CD9ACB450EBBD2504F8D229B13E1FFE1D
+47AC52F08DB31C0E263A52DCA6FA3788BFF62383A90C15B0E47F7A526C7EB97B
+728D03D40DD47373B2F039ACC9440DAD0769F65ACAD1AB7F466603A4E82CBEC8
+82E9ACAE27783E583C4694CC3AEB8257896BC944D2C8110004057BF9DE96A1BE
+1AE5D4C34139973BA00CB10996927B3ED544AAE5E21F4D9D3444409FC9537F05
+4C1C60614D701AE41D3E11315D0D6503A411756AD8F129D952A8533998678417
+97563D118A88C2EB0FA1C951DB0ADD125F3A06B7D6574E8217A7D2BBE4184493
+FC6CD49359FBD8687DC93083763D0264E4B82391D964CF7FD5BFE84A48B47391
+B1AB66CFECED6DF74C6A2ADDFA22353A0A09EAFD6CD51D1C3E4A0EB5D0EB0AB8
+6E72B8F384934BC1658EF313A78EF9FE4B498DA00E281EE0537B5F81640998D7
+5DA1A96E38EB16AF70F63D378B020D9BBA2F2750B03421C5F46107D3FE6E1AE8
+726336A0CE48C2D458AC060E041BFCC4831A048ACA4E3E340A55A5E872D3864A
+224200B7DE4F47BD97BCDCA95F0925498FD290D0115268BD31695A11CC6BFBD2
+9233C4903317D173CDCC9750DBB35A99BCB5D94031545DDC45F7DBF5191C5254
+40AF9D81DF82909FE635AABB7D3A3EDBE1B8D69562843B44CF8E6A6C2183EB49
+EBA5856FF1BA4E4FD96954773F34E1E727FEEE0979D03EC726B4D55AEB1DF9BD
+61D064B0937A1115DEFEAD6EF053D8CC18B040312B998A51CB2A1E10C8A19387
+0923FE8A1C55D04F89901A8391E60EACED9B0CF4312389FD49B2F73B15AA06EF
+3D0A58FD1125624B25BE7E69ED691C6AC39E9A827C0A5BB1C3D02380DC9576EC
+EAF1CC6C414F461AE32BF4355F860128995EB7C8D61E464BEACB41D4075C7D3F
+CCD45751A096DF33C6848F5DFDA87D2A315A09B88C3CA4F7927A69F6A4973668
+749143D43EE2397F72135049059C7FF570B81C8B7E1B140438078CE9686EB5EF
+C8B134E7077F199067CDE5993231E7D7C62B91CCC4B5D0A21DD5CA3A83023E06
+0292F9EACAA9DB8D45F1EC56D1ADD5D7D4B3A3FB4DC1AC698863266FDA695318
+0C6019B9E8428360BB09D4DB7C2918986F398DBD8AF0B88413D119D9392249ED
+E7FD7F91B7959794F145B15A36C9B6C154BF1C1BE1745695F1DA047902F55E4C
+CF716855D279920FDC5873E268E65CEC8F039080423EA4479F285BEA7F35F21E
+C61DD5A2853CFCBEA94A0F91003F410AA42B5F5DF6BC7CC63F07429EDEBFC353
+ACEED85F65524D36D5F9AD0026521621F41AA3D7E7FF51C55F5DB0DBB928E45A
+CA61F6B0E2446522DDCC0EF37A3FAB3C9B6FA0C248F98C0672B0B8F40FC33D0F
+1A05C2437133F753DEF7B3FEA31C62E54B10A984FAD0311BF204A31D3633306F
+98A7D26E985456765A2E398170ABD59BB9712825456388C53332359B820BE151
+2B31FEF4DDDC1EE3837941C0D95BC57DC99E5612041D759EC64A33B0EECF528A
+B41F60D3260FABFE7593E11940EFF64A7A65621CF733A44F8FD226BFC865D7ED
+AD5106F748AEAC673B9A3CC07CEA9151BB39D89CCCF380085F19F63F56B8A5C5
+A2BB71A7DAEA55F6EF21A37F6B14CC43C354FB4E9C3C41DA75B3EDBBC2E8AE95
+B1FA4C2F65DA207A19657B81279556A07EEEF9688AAFF6AAD7EDD6FB4289EC57
+7BEF4F37042C855D604956545BCF99915951A663A73C0175AA093A73EC0C41A6
+3D4DE17DA33B2DE921B0AF5AF8175F9B2CE57A7FA1FF6AB9EFC88354867802AD
+758D16B5792F176659CBB1D8828F4377FFC20B03CEDA4C842ACF7E978CE2EA76
+73139B02ED185C5F23910DAF380CBACF04EC12E1B36A15E9731D8ACFEE6641E4
+C5F8560ECEF1EA18AC2F079A5A8DA728538CB8B7CE69E2FFAFC93110751B59EB
+D319B0B1AC6692D9CC06F195DBC92372FA72839104629201DED5777F11E4344A
+BF91D975DD427C47DF2E86E9D5E3D3027547F82894C6A0DCB9E04BAE62AE56F9
+DB92C1A65927DAC1E8E5B074239CF3A166C3C3BFE5941C85C242046F3455378D
+AA02A55E28DFC40144CC9C5846D703E9B044052117FDB4C7D6D472E991B643E2
+F05EE48ACC97E1673210439C48570C51ABD441F2AA90E40EACC17E21373BC973
+BEBC2CC2B5CC76CA9FAA8B3C2F0D2865018632B42602CB3940F8C0D3C5187D95
+72A5463EF6D0CDD5D0301B8D7B52EE6ED6B96C4AA9861BFEDCD09D8A4A921CAA
+97603AF46CF4415C5B744FAD4D632BB23F86EAE1B0295DB72601D74C12EF77E6
+448E040D68CD6D383B9D93FD9C8CF7934A82C720BE4166434207F479BC9EB2FF
+69E7F3079B6CD66D8B330B24A05739A6089EC3F6C4E115B5BD5895070514E8E5
+513A1E8A8FAC4890E1D1405EE5CA4751FD7FACDCCE3EA9B72109291BB73DEA2B
+8D22FD6EBB39E55DAFC1C94CF72D16E676767D07C5D64FDD900BD8C39AC821B1
+B553C36AE6B3FDFAB69683C6120AC5541CBEB3E402FF74FA95665BC6BC84A676
+E87AE3D010F24DAAF4A235E8607AD153091804325EDECCCB7BDBFA7E97845ECF
+8EF3B6A3D13C4693044DB5FDF9C2B36E67C5F3775CAEDADF087F8126C6D28845
+850181CD42EF2EC8AAF85DB331890A74C6B8C95F76977E198F032F7940EED0C3
+4F6D95D7FF795482F7EF532A4EBEE3D909B0655EEB3D3F70A98FAF118A0205DA
+B8816B14A3BA5E41B5BA06E197AEFD2BF6FFEEF482842F59F9FFBAC6391EEC22
+202DEBF0BC70A92D3B64D1FDF723DCAEDF3CBAA7528FB63863F88AD36C39363E
+DF50F26289C06E1D550E4B5A45C9C58403594A63C81A889E9E2EA7C796D7FFB0
+FE98888FDF6C9841236414199EFB82B1D1E2E7D1F87F069DBC611A41B5A5BDB5
+3A9752A46A69BFEACE2BD3CB1EC9398900960AA8741CB60C8E95C309B6E0D4CC
+330C8F87EFD2A91F77BF14C9A9A4E3F160D2EC4C5C58AB549B58246B7F96A93C
+8201C812B1A69014378C33A660729F9E2E1A1F760498C875EFE5093FC266EB58
+50D333ED1C49CBE7C4DA2BB6BD57DA5F643F97B9D8336D40A60E388C405F255B
+1AEB6A15491E783B389678BB7F2CEAF3188350D866D7541C39D765EAF2D4D238
+2C72719067286F6F70BD2D1AC262019BDF629C518276083BA82348893BB5494A
+ABCD0020FFD3FBE4EC8FA718D977F909563D56833CE0E5AB8C547C662B898F65
+330D585AEED767BABE21F7B50B04B6F7E0A0576350ED68DEF618B911E1AD17E5
+B6ED645BAE914E3C26F506662A9A2DCB58755BEF7A9D45B6C583192843A71361
+A28CDF1B9CD0F3F77C1370C8BFE081832EFAB5813E8AE85D3311E5B6EE262F03
+198E0B8F82D7979E31732E676EB53DEA1B1DFDA3ECF14ACD9EB9258E709F3607
+307608F4F1B2E0162FBEC7BCF7B574A75F2F6ED58F26AE6BE96C46D34931B4D1
+566B478E0D9E6DDD321D55E00AE1D954EA7E966F5CBF8BEA36CCF55C98F1C793
+E55F2B423B99B07C8DDB7BB4923007B9D2BC965832803E347A3E9F093BC6FF29
+A066BFA47B7F4816D0568CFE3D6FF8330E2BA96B04DB2FC9A04234ED01C6865B
+A7B57763218E6E04D79897CED74EB5CDA668D91B89BFD4703B3EF8A52BFD2B0D
+73AF1352B67EDF6DD029942C0B8F56A07C3422190A3FC56C9525FC4DBB672882
+A031A274F2D597E9D4D629DEC88493BEA6BEA39EEF22DA7715CBAC3C6E4FED5D
+34B47DC120CDBB67C4B270DBC8A09D56A027F2801FB8B18634E806AD80973806
+8E7878898C64529179DF9A162FD4A49C1F783A6172A1F73B7AAA8EEA65942911
+30655FBE6E34A8F8C31CD229535DAA3639B351C8EF330672C958459F4759FEF6
+F3AB2DB73E296CE5DB4AAFD79A87CA7435DC8A6098EC6BE0A1C2BE7CC1FC268C
+E0BD513B1AA7737B95800CA8EF1A65381063BD783CCDA519B1B3997620BB2A47
+6AE7EF629FDD3578FA02E0F2A2C0F3B3CBF18EA141EE1DEBE1164BBA45AADEEA
+C0F9F751F09E527C37172F8FC1F8663F7AD65A525DB0DBB928E45ACA61F6B0E2
+4465238833E7FA112D321954DC91F8178303A63B4F4161F7014C5F88DB62865A
+0148B1C3DD513E5D23D85B1D215753B007CEB7A37F71B9247BDE343C7FCBD09A
+5F60F7F1D3AC6A0920A764207D55EEBFAF54DEF3676124586D044E3DE7C80E7F
+089BD49AF829EC0737FDCA5985B75428D8B3AFB379881A43D7BED3235F1ED829
+F4EB85BBCAEC301EB631A73BDB2182202D7B777A2E5FB9D86EF8ADE49FD22FF8
+FE2A39122698607C186BB6F60424A22FE676D9EE2F6C36F6BCDDDD4375327C26
+B9C2F93FD51FE8C1589E0BCB26D5FAAAD54BB465A4ABB828E39E23CEE6E6E8B5
+0E5E5E5D776ECC1C763357E43BAABB236C2C8E6C3D519F2E840D067C175F433D
+AE4653C788F5A48DB10AA77AEF255E71D0B75477491E3943213EA7F9A750572B
+7FF67AD02190763821613AEFC926CB0AA35F5EA6B6643BC81C9A8B87D420A22F
+22F16763F13D4A8D6FC3E47285F8AD1C23070B5C1B8F2F9EB35A95B1D76A3450
+31105EE90C397C3F20F4C0FF0CC77FEB432EA06F8EB873489E6B86CB0E9FF10C
+1A7CC2752AFBB820DF1451922877B947C9A6837C8438973A47816079551B1439
+DE7693DDECA987E3AAB6A28410FE28E604C5D835E005687AE177CE14F73F6D9E
+E7061E75C6D3F70DD0A5D66BE2637B56035F3EE033C47CDBC6A7ACE8863F5EF4
+F77B0BDEE8EEA36FFB7FD9E45356D1D31BE6F985F5557B0BD90A0C7CC7D49465
+94630B3ED4E988DC6C45D22C3733AB1DF83AE6635D8329D42F674AD767980A7A
+1290CF8214B6DF1CFD292EBD1AD543D221C830371E40CF6DE194B9C5A4C97ABA
+46B57D8FDF3F03D9C5BE25A61D56D5B321D24C1D50CFCE0A60FB490B810E2D6B
+5AD420BBDFEDEDB6DC7DC54CC0022AB885D227217356400EB19A0ED893449EBD
+1FB12DB30FC715863658CA6D8673CE0ABB18CC41C441B6F53A3C3C64EE366906
+C03D96A1682F440AEBF350AA433914C96E6189E0CAF12C59C67C3157C5C5C65B
+8E24B9E010C86F386556704DEF05D05EDCBED4CBB9E7D46577D2E0226C730C00
+4099D29DD860D1FFEA2144E2ECF1391E8DC49D0B64755E4ED9C556E570DCE685
+5BBBBD71E15D3C35A805726E45C62AB41EEE04B388F0C44D1292417145916C5A
+0FF0F571EE5F5CA6C20F480FE97472E840089B35400059FD292436CE8BE875D8
+20E6F0D143ECD761088B7A47E5A29D437ED90253B397EC6ABE41FA7449BD527B
+3CD06229C194E9F4EC64F8F10DBD73993E9282374F99C252E502CAF45ABCF71A
+8C718CA01D976A606E0317688A1F65B826C33D4F3BD763CC881F9CB8E4189845
+7599928620D1E3C657FA3DA74D15F53FDE191E7E4839D484125FB32909DC5EDB
+0170BAAF30495EC91D2BADFA3B62A55B1F53CBBCD5BCFD1ADE5A9DAAC3075501
+9C9FBCB26A721BB01A236B15A7C0C270EEDEA3061803AE2CB43A03BAA4575CB0
+53735938F31B6111B0037BDFC5E917837F5F183F421CF6B0DBA68CE7EFA7F416
+7D7685098B601E4B6D2E00FF1FA932736E933227F4E3A139806332E9A96544B1
+C6DADA476B3B9C532FBCC1A21555EAA4C3EB604C73D2DF08E1830924C4928AB2
+39E1A9F65D8D6813C34D0C6F788E19174A19BFDE61078551D77F1D0D9CF099F1
+E4CFBDFFC914D00BA948A759E4068FBCAF6239EA0DD5218DAFDD66C1B7A599C9
+EFA349CBB6A3629ACFE939C25D17E7C487EB1FD2DA4B0EB6B64B9400DCB02133
+25AFB7B15B8053985FFE296C94A6A8965FAD2A4EB1DEE8C4EEC6551F8E13A35D
+69366E14A6EE11C5D2478FEA60FE7FA11857AD3C415A294F17C6CEE5288E1904
+289C0C533A2B8F20C90106230E937E52C8E4DDCCB65AD4FBE2396ACFA1BBF315
+625758E3070CA6CF6F9C46576FBE0AA2C2A0EB003BDDE3CB41777B63A343BB35
+9E8C07643B47FD68C6988F90A8434D9AD697FD1AE6471F2D4A07A52DF022F18F
+75D166142EFABEDDB9A7F685F62175AE5B76D56839D1AE2F1DF5B79B566BD9A1
+AFA5D9A8CDB1C665FBDA452E310ABDEE48FA37280B14DB32E0742DF56B77F282
+1F0E6DD300CA06FAE4441A45248CF982454DD037ACAC23670DC306D99AC3D3DD
+83E73DA13EFB45684DD28987AD46485684CC37F72A5D563F58C405D3A6F3D5F3
+7449418DF367B89D68082D63DAAC3B471F9229CF955DEBF04BFF094641D62CA8
+2F0618D41176D3818A39270907F89C96388CF99D80512194E9A4A9532F06FE61
+9DA9CD3B08BBF9D4FDB3DD56D9FB5155F9447CBC31A948E77D0E9D2927EA8B85
+01F6C663DD41CF6E982793A078053BA9DB95AF93414006D730FC4FF3CF48FBAE
+1965BEE7E9AB05A9616DDDB609E752C2A82A5D774A775DE37463AEF83F05077E
+76EA2A12E3A0431CE0A478783B2A55A6489CCD0BEF8093996E2E57073A41C56C
+C4C90544989BFA7046636A9712F782D2238CA808F817A7149529D21A5EB6715B
+A83466299CA9E923AC9F6EF33251F88FA439E6F8E884B8AC340C6138ECAD36FF
+BC47FA0A849510989893EB8605B9AD73B493FED083BA5C8DAC6C2695B9ACE98E
+7530C41B81B657E8A9659CF0AD16827E7883BC7422B095C22961BBFDA8F035ED
+C4B97EA8C3CA0052E953CFE30BBDD67EB5474176035C124D1C0D8FC5C93919B7
+8EF6B7690795E090355B81E4ABBE9E480C9471E036DF7198A36E6546AD46EC73
+BE429720CE5D6DE8B366C47623BF68D73CA01BDB0161AB63BF2C9F2D616A524B
+519F6132813EC71BAEDE7354AB53BF751BF89BC200307B433C07D508E018DD79
+DF6AE9CF394BCDCABE30152AAD7B8EB6FC8785764FD1272F895ACB888325A72D
+8CE40D5E698E7B4BB8E6A5F231D22D40D43EF51D5D48B4B3874997FE609BB1C9
+AB544F5EEF3447E53782E5395FB225B84BF24AB849C93DCE27D6E4F9B5C8B25E
+C602B8C5263B494ED95732E9F09772D59ACAAE6B6B2EA5F7F7574ACE3CCCC75D
+E690CFA51BB4E9F4BB469684DAB734D97B8A0DFEFCF86FFAE8469A1D4F730B6C
+2C674B9E9C68C227602E47D5A1DCBFD228C3A88B0B9A4D59BEE5A1CC3968EBE3
+F2D8D0EA28D17C1A03A10386EAC96140B93BE21F16B582A90D0797D40F48236B
+8CA75F0423D5C14EBA375EFB9FC1233B501B5DE1404D54B012D73BDD380F16EE
+76180DCFCA364D5F3A821AE382DD8DE3BA0113F20FD7FF5B693437753805BB9B
+AE56F688DB0FEB06834B27E63C3C0AEA6CB013F05123A7ACDB1458A5F28610B7
+579CE6DDD8F8E0536FA8991B561B8441FBF6A7A5CAD6E08022EF695FC5335DE9
+163BAD747FF07BF83006E45E011BE4D1122FAF89A179BFE707521F8B7AA14EE4
+E989C69A9BF2650731674C8558933C69873126235D6630F89DB0EE27AC118786
+D7B54106282283A60C929FC6B25275EC05BC64DA16C8E3E9C725B444338BB074
+0A00D5C9D5A48CD9C364DBA69019E516BCCA4193F48D84A861D8145EE859218A
+D50624F1627DD3A30F1264EDEDFD32807459FB463F06A349C3E5BA802751D85F
+BC1EF6C3F11D68AD18C410111A18402315C5A9AA582BF4B058409CCF247C11F9
+0CC2BD7DB143D472FAFD7E90FD7E99266072AB7F0D356A5EB24A6ED211C90590
+D09622832313D30BE881FBBB3E27CE14881C78FBAB20BBECACA95B3FAD1BC3B6
+07E40345180EAEB37727F9CD8041315F870EDCB680E93A3C6DEFA59692A69702
+42B952D5CF1AD58B5273484F86688DE17F4159144D50894465278A1773069408
+4F89F2C4A795D1E129ACB1B1B317E1A55DD1EA84C45966166BA8D15B77632F63
+3A0D5297C6828BBE117CABA4CFDCD599889B863C60DE4B0F52011354B278AAE3
+E05E6E0E31FBA0E825072F170375B64E10F96A0744D72786ED5326A820D3F09A
+C1EE26F70FB8A12D8DDD28A429F2623D7654CE176793F57BF1F5E23D3BDA132D
+39D5AC3EC2404236A706F32A409DB16D48A9ED4F9B9A826FF79EB2842AE4FC45
+81DF3620CDBA08A87326555D686B87F5A5107E26E14847839829494AF79272B9
+6A0801FA7B750B2E89FF4FF31183D8F8BDF5E8690CB0EF156DEB38C4F70DBF6D
+7AEBAE4522208C5D182DBA47AA1FB27A0279DBE47A295F0DB4587CCDBAE5EB2F
+9C3839C82B328AFCBDC3C0AF8B9E58F4D89836555C9EF56B1F4971DCC6CFCF9E
+43117D5675B0DD72989D05CC7F02EEEB432362B00951F732D0BC931A032FE889
+37790C62B28FD5C92565FAADBA89E1CCA69852A3AEE0D9C075E2823EA380603B
+5787D601B11354D440B0C64ED7C41C6AA25BB7F0490A8C3E63E1F3385D519EC6
+0D1C9FC416B5491C11572E3DD82A06A75E70B13FA577D4EA53969360A5F74ACF
+65781A3D9E7C9A53CF7BB37EDA53B638656E3DDE9C587279599B979335540CCE
+5E685920E44143D043D5B9371A7F2C2CBCC43967E1BB28AEB41FEB86FFA0C173
+585867D7FD87B791FC7CF59D7B56436B6082366AF70B1777A622432F0E229A75
+DDCC980F5B20C8DFE376AC82B15030E76B42673EC365E09A46152BA2E2B9B889
+4390C691EFF3BBEFB3EC4F110477FFC838E510BA979A2EC83C35E69355142BCF
+DB79C3726882681C44DBC7B05BC427A1731F5DFEA9C05BB67BBA321DC1363EC3
+A097228BBD5CE877DC097473AF34C668D8743825DA4BDAF0EA9B59AAE74D6C5F
+4E9A8FAA5E5403C3E38C23AB65B26D3C0B582E6D371704ECC92246E522A54732
+DD7357B9DD911DEC894E1E4DB968217EF926DDDAC6DFAA9FD9F53AFB4D1690CD
+A8CA8F19A3109C1A75589F200EE97D042EB71981471E840724F3F3FBB2B576B4
+65865085659444C722E5E277C8BBD12CBD16153AB408FBEC774EE581A5F86BCE
+B54FB1417448344F3836556B3A14921F0DF459A2814013D04E9B454F8AC9B8FF
+240A8A185BD4D2138E5D1E9034A370488A2CCE0914D80E593D3272C7C4767EF5
+979AC25AFAE05E65D96898EAEBE30C5AAF9EC224A86E0F5EF8D0896B0965FB6A
+2C91DCF08533348F245862E46F8F6BDC91F2FB32286AA6353F42672ADF311141
+2C20539CEBA8ADF4297BADA607E48C2B14AE9FF43E863366E3794A50C4D6C1D3
+AFF82D12A6E12FD08CFA83FE4E460AB15D633D80D139F1875719C48BA7B84D1B
+5EA70FCAA9CF5156708847224313A84B1FA903E8BB87D4168A4C098C00A1A207
+B0990106E36F68C20ED571AE4AB86C6FDBFC45094ABF6CAC5EA7B4A74D3DC71E
+B8D078B7497408202DB3048CC13BE711D9C54F9EB12C07A35A8A92558FD02609
+7D52C3188E45F3950C2C86F9D9A69FD4BACB2BEF2226274EB67B1426B03CF204
+A07219ABE3D5575AB41AF743E6A3A9E0D429D84B2ED88DCCE0191019690D1D20
+7EF99BA34E71A21D8966713879171C1787EF6E38698F3CCA1722A811315D6353
+36694F597494F2B87D691928DF8209BFD3DF83D9E858A9C54EED3E6FEA9C46FA
+47254800DC889B333DD910ACDA675CFB557D167731DB0395C9C42B01565B075A
+901EFF3528E5CE38BABCFFFF3405EAC4CE2FE4BFC8E450FE371E57BEF0ED9162
+2BDF929B80F83D1C1D1B1C3D0C24F51B4800ECD5F19C4A81908FCE3F2A4E0E0F
+723C0D9591A4DCF433DC3BF7EB8AFE93E07DAAE92045FF1EBA0C9E4DFBFA4E36
+00C474D7F1D19851C8452A4F9AEA3C4D54A1EDCF8246F90F2734372BC4DFB29A
+E60A9019036E6EAA1CF650E738445B2E15D2F67613D576BFAE3B4C29BB5F5599
+AEB2C5FE783CD001A38622EF912E4D8F08C63A948301A18860F7170A43CE445C
+D694FEC3FF15AD1F1739DF248E1FB26079C7CD1C3863A94E673EE85049BFD4D0
+06B4311E53E153FE98D8617281F893862DECA291F383BEA35F480CFCFF5F4ACA
+D10CB600D303CEEC585A3D80F5A3576416266999C4E2DE32C5628BE0B291FFAD
+B8EAB748A616A7D08BC69F4B9D83818DE37DA644D330B373E5469DE6F41F72AF
+A9A30BF5950668B80831832AEE3FB47EEB6A6DFF9B89AF47F5B4E99D5517E626
+235E1E6F10162D59A983003764DDEB208FDF343E71FFDF5F6351688C196A165B
+3BC95F41E00159C2632A6C05AE421140E7755342D47D3D7AA4B8AEA1BD5AB846
+D0C1EAD9C6DBB04F1EACDD026BC3A09EF21E7BD2B3FF0CCCF544538AA158FA34
+283963D166FFDBFA67F9811023FF9DE30EBC7A58CA1FA8DA7D18594E6930CD7F
+02BC2C84B4D34081D8ECD14CD40939C2C1BA621B0F63A280D3E89F5484F38AC5
+BBB45092E5F59B08070351C7B95C4A301A970E12C56314EDC254D7AAB8C359C6
+6C6D7ADA541C56812675AC95EC20A27B716B667C1F0C820A092D33D731D27500
+D61E6749527ACD758B9A8574137F3C1E1C03F845F2C449E0FBBF7F5FE56026DC
+A108785D37FE52A0E198207667CA649CAEA3B9BE9771ACD171D6CE170AC59C05
+950DCD07979389D9C8D70E1A2875D32780B66D6822038A11BFC60E7B0C7D2688
+A8C2113712C63465DA4CE735F76641E3AC09CA69630194A84276E8F189255004
+36774AEDF9A2B483BE149F8D6CD852804E736A107580B6B36F81AE12F9CDD054
+9B53A68477D10827E993F5CA47FAFC54B916507091217258F628BCE15419AE3A
+D5EDA15DF75FB9DF4F1162B5453B566B34B27FD0AC1CA4EF3AA6CD86B7F23181
+514C1171857EF7CF75FFC0DB741406BA891B34A673BD88709FEAF94F4019429B
+60419D15323F61E327E8A5EC59A8F6CEAF1DFD123410A8F90483AF9373C26A81
+9CBA9639823947FB42E2D037F6A0D1A487CC073F5470203E61F3CC78D61B024C
+97218ECF3500CB3A7178145731551C9C83C5FA90549C90CFA8E49E7AA97CF2A6
+BC2EB4E39F31F0DCD2F3597378338580167AD55D483E1724DFA700F7A519EB42
+43B9B28F819E161D2F380AA37A26EDEB6D6274935179053D9E5F8094F31D644E
+9C28DB823EB248734BAFF5922FCD7DC9455FE48B4A67D891F83285EDA376A583
+27ACDBFA56B5D30964D64D7FBE8BB2A6C1AEF1BBA02106C18BDE001D3986F157
+CAE0FBFCE11B1D6820807212C661C98B3C528A9EBB0B613DA64B0FDF8F1DBE69
+4A620AB0FF2DC9E387EE468E990A3229356855683E7DAA363F45D5DB67BA8AF8
+468ABBC6B1C05A54DF26D33CC2FE4DA3493BD4B32111D98518B3570952323F0E
+DE145556DAC5425C6A0628B08472FF28E48E4CA1265E1882E1980F8961370D25
+6A2F42D9B24559B0DAB9B5C6D5145670F5442418503E73DA897CFC4682ABA026
+018AD948D16FAD2F75C3F1B46D96DBCBE68FA93955127EF557D4DFBB3DFF138F
+793517AB4E6E41E7B979F8D6FF20E2D9830C6819CE79189F87BABD662B6A2DBC
+F4E91B620A7FA6075FDBA041C6B8B72B6E9357FDF24663A3A9487988C66E8BEB
+CB8F5FEBBF3FFB5D1597C05C73427642C1208FC6082DC00A00CA6A2312B45EF3
+1F1B177143B4ED7A910B262B28A021F96AFFCCAB73C8DBCE294E10439A98C792
+9A7C06A041E562B9D3328EF76C05BED4C7BB3DCABFDB6A9037F9EEA1789921EA
+4AB166C9DE3A73AE683B2E8B6A56B8008524F52E518B0569AA27FB4D8D3CA77B
+BFEFDFC82F5A417C6A8CC0D492E6D0FE6D3E045C900C6961F9798FEE6D1E9294
+573C7399567C6DEF9BA34ADCE9103403A49FE1553070FFA9BD213969662126EA
+EEDC5E923BA922C9D8A409379383C482311C53BAA7B2177CD6D09A35986D46D3
+76863A27764640A77FBF842AF80CDB7ADDDA72A614E3FB763A150D25696EC971
+544338BBDA8D2FFADCA23B0A1A507C21CB868640FE084C48ED09E4EBFFD13C11
+EA9AFFA2990F096C928DCD2F8BBDA9A4ABC8157C8180FD4B01CCBC48B37C4829
+A84FAAC1F2AB9FBB056FEF3CD77210FA5B8F8D8118436F02628971C0CF54E878
+19AFEEB26E45602883B114DF5B31AD673389BCA33D845E39A436B0E658E12432
+0761AFF0137321C005D566DB3D37F8EB5B27890A9FF16E6B2BB0E8C556EEBD2E
+1577F2E428B1D1ECB6C7FFE53D1BAAB5C3BA656F554D573E73F50ACC101C0121
+DCF5F9B076C8F554C2D065C55579E0263C04DB2FB20C254EE7B7140AD3482F25
+C34F290D51081B6B7364C8D50B02E2F0F03B3B07162A609D2C64A1FF4912EF56
+DB93391F91479199C79EF43285D174C51FE08958598A772C8FD641AF8FB560C9
+E8C084301239427D52F13586F167FA3372C2E48E7D2F22F037E046434B1EF334
+29F6EDC5D588FE135712E4F26A7298C9F57D140CD1B2EADFA17B204DEDE712A9
+19B746BD34232952DFDED4226239A6716A2F9EC94B6DF822012F0E2DF0E348D1
+74C35652C040F703D9C2B95353CD6115F4B66BEB128AE1B34FDFC165316A053A
+CBF84A83D3A9890A10B713FF3303621F584B3C945B41904DBD4F7EE2A98147DC
+0A68659DBA339DB920C3E9DBC05DA683F6465EF20FF946778BE836BD952C9CEC
+0A60DD366E758AA0A248DD12C7F714558F72180EF2C2484870657873DBA07142
+7A7575598DA644E9C040AF9FFC52F6E30739A8F21697EF340BB9FA3A66930A2C
+BF9B27FC6186010778649C6F7B4A2F5F42977D0AEFB154BBB06879E9617516BD
+BB31792D5C80DBC747CD820C5D3DB791B8C80C04BA5045E9DCC980C3907940A8
+D24EF82CE60F2D7803C2939688ACBD184103535A001C11831A6C904C64F6CBC5
+E25CC8DCB77E50B8C65054F784468DABB5125F56A2A8610D2E625D4A6450AB19
+77FA63F353D3069B60B7E364C1A5DE0CAFEFC32F05CFE83CBB87400F1869ABE3
+DAFB3EB319E45677588C059DE939673C7A6B0153284A3A43AFDDEB34D73ABEB4
+D05C0693902D6BBBA612C3387CFA52D4E8D125AC5828BE3F5C8EF758CBE89B19
+3596ED93A424331F4DFA165BB07580562FFB579DBC30B3EAD05CDA06E2D1E49D
+9573BA785663D5E1B3D32BC743848645FC1ECC4D182610CD3DDE8B2B1FD66BB7
+72F3348766CDECE21C461393B1B20F3D27A82197A50418A2F2C53B9927130A61
+FF5104F12DC612FA9A4E366FC04A0A9519F3AF1F02004C00D2468BFA1305FB5F
+39E1AA628AE8EE6816255E9382A34CCB456F14CBB6D9380110070F4C444A5873
+A203D78E2025225B60860CE5270D094EF53CD66EF0D6A6734271ED718B10B9F9
+DAA0702EEE522774F8C0EF74CCEDC0774759DE4AEF62D0A898E3D9289EF8A21C
+11301C42D3449D771DCCAEBB5489B75559353239D3E3BD3BCF854A025B949AD1
+0402F64CE7D55FB2E3D324BFDC162C7AF6827D25CC128AE327CCAF19B83AA90D
+8E0C1BDEDD4574484DDC30DB5ADD9188EA22AEDEEF4595A5D1E30793D54B8717
+9A324119AEEC95920781BABA10B2EC7806C9DA21363173FA0D572837B5D3EA86
+E2F2D61F42FFCBDFEE234AC838E251249F90CDEE409B7B5CFEA247B3D0FA9B09
+EE7A69E9CC4FF7EDC29DF36EAC32AB2DE8FA07434EFEFFA50812FA5822D6D217
+0B1C9679AEE4D7677617269963A38FFD7E89ADAF54C3C3F2788C597F80AAE88A
+75732DDF6E58A8FE2E929621351620DB25B8F69F6603E41C5D24435F144D12A9
+2E0F368DB54E55E5683C2B00BBBEE9E6F0E0A3A23BC033BC8A730516D2A6E205
+96D411F41EF20D0D273C05EC2665219A936D1351E4C7F502BA13F255D75F3040
+E78289A9DE233F7C820809F91A5AA336B4B5544BB9BEB350A526AE2FE1AF4A8D
+571CB1F2A0C98383EF9D3F9F362DE3C813487A0033CE43F3DE4788294707EF9E
+6BD9EB22B99C2C67616CF1692CD6A9CAB62B0BF149F7A3D8F6E5A3027CA9C5E4
+70223BA442205CA6806F38164A3F26F2482FF73EA93DEF3F415A13D50AB2880F
+E598C43D765B9321B4694E813CF0B1BB62741BBA0A8B1B89E7FB97281352FE4B
+3551269401BE0964158633C72306956A20EDF41BC278B492F84242EAF18081CC
+75F9E54E502F0C0AFA540047ADE503960AC2A978D811B217892059555691EBB9
+400F9307F40B1F0435CC873FC94F75B9B70C692D7011AA99B07C60A1CFE60AD1
+4250AEACB21C92ECAFC2623950BF06F241F6529A13A0B6DFCBAF87AF64C33A4F
+2BE622EC91671C99FCF2FEAD0AC21E8015B568A023AE5236F4EFA40BDA90BCCC
+7790FD932EEFE1D03AAFE1FDAC25E244A5DCBDE59D33399C69E1C6C1853076D7
+459155A09997C89E5B5E24EC4371567189D03EE33E7FCDFAC88115A7D883C45E
+330055E5CDE4F7AF283D7C28DC8637F95F10DFC2E5F763E1D21771BF2003609C
+69B50E1A61AC0068D8F3F8A98AED54A9BFC3B4B4E51038DA96390833AB28E6E3
+F58BEAC48EA80B08EF819CEE42C4F96DD717AE83C879F248CDB9703EC211E745
+65897656B3809D3A48A4BBB350E290F5D5B78A1F643EED55BB4AD4A0B50FE111
+7671E2C8FC3FFAB0AC8D541CC3C56C75C443220DEDE2B1D7F78A23720A1E50F0
+659F1BD13B8F6A13D61B3293797DFD5F3D7ACDB4C52E5DEEA26C999A7E68487F
+836FCF35E53128803E04E9C4F69565986D79A4DD0B8188413CE256C7853B45CB
+336AB539B0B269B5F183A051307A0E37F6ABF64C91D5E171458DF3FB48C55CD0
+304A51DB0082656D03018F6EB0F6973280F141C93F8DD99466F87463C4B55828
+385E36269DD1D06B015728535E602E781149DD0E354E9C5934EDE7D49CA12B52
+779DED1E3BA644B590C213C2525F967D234B27B1F34E3A003754D943EBF0187B
+564E79C5D37EC12B8CAEB7328CC87393AAB58A9193AB5403F57F5C9A7C2FF211
+08534F9643B3F9533EC4CC3309D514586FB6AD161D294E9F55CDD21515FEA55E
+74304733F23B42ECBFE145702B74E42BDBF0DFB01F655DA14D93E81103DB8E84
+20B8101F8D5B8E3F909B780C03F75539056E811015532BF5DE9007033B17BEE8
+25E9DF06A64D23431D99B1DE541CAB436178F55A0A82271FE970250C4FBD0FEE
+35F2CA2A256F93CC0327D7FD9142A868C4BB817EB2FF2E7399F001079456F3F4
+36B05B6772520ADD3CA3C4313C3C454FFB368D0FAF62D81F97DB55731F447D2B
+A19966C48A53D5885A383B6B1E30F1E2C0185E2418C387935BF5A7EF8058C1A9
+0036B3F38FB4C6415037AA3E9D406DD37DB59EB80FDA5D9F8D6B03E176F0B633
+3F33040635B7C256CCD4868EDC88379925DA0B93BC0CE03E23D3D480C005AEB0
+6D49C9F9853785AF6F3BB50765D674A73AB585E72888F2CD66F714ABCE2A50C4
+5EE528EA125262432AB7F6EAF963307D0D5EBD65BDACAE98558ABA7D0BE48C28
+27FB1A64F779E0B9C06FF13F00A995DB0E9C2784DE9C48EC873AEB560F3EB3CE
+5C09D9C28FC9BD3B49B709BA8821B4A0454B4B6F061B449671F59283EEB003F2
+62A9EFA38050ACA655C6D74310930204EE46C58553778C1D29F29ECC271F4733
+3ABAA09100A9F2E0A99D53CC02DF3169B7FCE3FA7B59BA5C0FC7327D55CA9339
+732308498EA899BB7838F75B9C8E99BBC85F6F63BA4F1AFFE24B1AA4F90FA00D
+E007CCE120F45CA11D70A6E06D2CCE6BA22BD02F62DAA5186D5CE8B8EF18B469
+D80E9825C926611AD47ACBA8EF0F3D16FA308414D6AF95E55282F25F76A975E2
+A3537A7373BBF7DAD0B8B61CB772BD5EA3659CD0724E4E187946B596C8CCC11E
+9D4674246EA6CDD60D64534BF0085E4250837E57FCCF6DAC3B62419D9AD7B072
+05FFB475C87B4D45C067998EF3215A9E37FB0AA796F262D1786754D9E913107C
+22C8BC97A0E73742F79D6ABD2C66CCE64C6C9AEDA81CBFCBA8D1C016F5C7A931
+633AB0EF0BE245D0931E53071A86003F9837C142E53B3D4FCD0CA44E4A4BF046
+CDF448593D2D85F7F07B1274544AE57960A6BFF34EB84EFF3F7A687C634A1A33
+FE97FC48A5D80C7831E99A3571DD2DD5796DD61BFC05F5E4FFAC100ADE9499D8
+0361577C89D25A4D337EC77776C032F6FFEEF4826E82C52E6D1702979ACF2A62
+CE5A88421A084EE624123D6E6A95DEC36E780A9EC9F1331FE1F5E9D954667DBA
+4ABCEA60ED770E3DD58CB359ADFFEEBAB9790E91929F05EDC38FE7022574D7EB
+22E556404AA74516358D5B9590075D9C1FE57947CBCD4C7EFF1C333C5457AF84
+992A754B0CB4766B0F5B858127A1B61BF2B3AD62683306993B396FBB0DD079DE
+96C84E76106A2B476AC4EFA40880EF47EAC0F5E858DAC1A9B99F8EB181B989CB
+03F13D9AC22464ACAB3537DF786E510A45AE7EA4B9D90A8332B3E5ABEA3999E8
+AEABF59F9EC0FFFA7B7F78B4CFB6D77BAD9677D9AC71569F80100AB7A3B8AE9B
+E862807D87074D5130061E9C02757006F787D6B49AA625A5BDAA921005BA4F85
+5EECCE30FB3D8DF4BA6166C8A89492DB62224A0C29BD564A1244691429FDFD36
+F559BF5FB22FA888F78599357D0E723A692C9B349312A96A8C75F49E43247104
+18F43A634199B92EC4E7013AE4081786A8D4939B7318F416CEFD093A8D8634E1
+CC10D8125EA0D2DC3CC756FEDDAAD8994A969E02D9F6A835403077EC77D2FB5A
+E4E1C2B2CCE6251A2CD94487CE5A4C1F3E7DAC460E764A140B9FC1E4085ACBC9
+55EB562779726F89A67570E2FEFA2AABC0E6552D33DAFC08D2719AB8B98ECC3A
+05FA1C90E3498322B8B26E02707FB330137E898E9E506F7A2A6DB52EA23E34A8
+B1AD13D1A5D0A91F40F8FD9D09AC48DAC8B0A3F3D6F5F4716B4C0AB3A2F002BF
+2BBD53698333FAFAB8D3F80E05B48A9C3B772750B4EB3FB8DDCC514DD3E2D01F
+C17205B08F6904CED62F6D07AEFEFC0C9B2E6BE85F7FE444B6AFAF60301779B9
+7331C94C1F8B0001255C39D653E14371B08678978B4794E7ECD9CCFD5D934D9C
+4E3E8BFFE9D3D1C077E9A1797078BF583187027EEAC2F99197211CFFA3A65230
+4564F3552334F1CA8BD9861F640D36FE47852934C4264F3673A582B50290936C
+8983BD4BB9BE067F6AF6AA8759AC4A8A3267FD6393CF9456DB382F2F9F3821D3
+C0579D91DA414382E200D05621970D3E5516719C3A0572249F8D5371877C0434
+42D71D6FD78EA7EF4AE676904FD9BF23B30568108DC67FF8190ABDD587FF04D4
+A55D3CEA088DD86DCA852E6A0F9FB33B6EA2C3E751CDCAC1E210CBB78E83A785
+146CBFCD3C7DB518E1D78892EC4A21824902A487E9A96E554088A2F9F596B923
+0A624C6DAA4A20E73D3BD5556DF76D4906FEE9D753451B00AF1E1D2504219592
+50DD2BB41F053A0BBBD09CDFADAD67A911EE31D678587D716F5D2479D21CCCB5
+EA00723B60006291E5E2947F0A2CCD10AC4EF0DF4000A1358F3285578A0791C3
+7381D1D0AF81587D700299DF0F4A5032BE80665277C8999CCA1891FDAB8D3E78
+43A024A4FA96360B626C007D973503D0F20A77084D5A96510265E74517B52EB8
+3CF1B8546FFCC2C23F85122E55889EE0A83C7E127C47270BED44492624F046C8
+6F9F742AE75AFD14F6EEAADBB45A0EAFB24F63689919A2C3455BD345CDAF3983
+DB46A0FC48728B2B88A1FDB39FD2B8AABCA784AC5AABC91F7E2B549F5F3177C9
+1FBCF682F1A38E4723B9862FF91AAF3532A4A27E9E0A00CEC702268707BB1864
+B208EAF9BB9814B69A8A8075D67A4F4AD8113B1622FE60708DA5AA3AA60E428F
+C0981BFB2449F4A16E259B56F9888FA6B2365EFAB0DED5569B0744351B71469D
+4499CBF7FD02BE4C6A85CBEDC10DF237C85635A9C1BBE0CAD05428D5E2C98D65
+D81BFB7DABF55470812E118F3A7A0A487D6D2E07B6CD4BFEE64810657D33D09E
+89D59519A4D5AC86B9267AA05AD1014F83D2ED254ED9DFA1915B1D33840AF670
+F34B4E545CC477396EE20C51FC2A0A8E1D57E24495BF4D09F9388F9C601EB560
+BAAF0E6D0891A6594231ABD3D6F3C4F795A6217876A3232EF8D75C0D4B9DA132
+B9E717B868B063DB6E3B1EFCCC3677CE2F877073E92FAA8F850047E59C31CC66
+7201265071FE53EC268F8C93F4B4607ADDE537E86226B6967AE2A544F6F8DF84
+118C0697B40670BDC52F52DE8E55EE31D853AA2DA391FC9CC811D3714DAF5FD8
+A79944792171289D8E0654950B3C67DFD2CC95AFB41BB8C31C5F09DD2345CA5B
+3B878B3899996F1DECD4C9A4DBD849EF0A63CBAB4FD7B62F5AAD85EA3B6BD2EC
+90D607B4586EF50BA66E01BE3C5CDF4875B00B7914FFAC3DE80322D8527A7A4E
+F8432E5141F486924613438884B3D8ABA4BAEFB68955E4C09DFC2F513396FB9D
+BCFBA400069341376AB98F3B7F796F8EA7CB1855F7A04BB140A2B7CECEC7BE80
+2A5E0250FCED075C83B662EA5CDA1B627DC8E5BBD7827218DB6C59F71A57B7DC
+3AAA94ABBE8A7E722C3557F1A9F877BBC69ECDFB2C22A9B8B2B0C51DBD9FF2C4
+DD16A00C9390A19B7320ABC521A89705E22E3CAAF1EA39524DB1B10562869AF7
+9B019929A5C648E59BCAAEA76333E52EBA03B167D518F8D955D90583459E6611
+3DA6212756C819C613BE40C29A58FAE9835AB409CC660A87D2FFB2CB3214F750
+4A1E189B0E24B0B541496B6C04069803F7F8072F940D3B010DAED32243220B27
+645560A3F713ECDA4B46F34E34D71E5C7F459C5DB5FF8F34BD5F768D42D3C430
+3ADBAA347AD11143C5A8FFE9670D3F40D34148AD71E2677ACBC4C5E70AF58AA4
+AE728F096976C0C2BE634219B3945E16AFD291559C41C4952028934352F35FCF
+21B6BFEFF2035062B4ABCAF40E376D488C219918005400C63384817EF68EC86E
+20197D6947936AF736FFFDEBB5E33A1135226BD652A150D843D331AF77F0E649
+0E39AF1A6A9A41E0B8A93301E49C2154D85B74DEBC4DFF06C479F3F51305AB49
+632726607B5501D2CD47EBDF98A3D3A8CAFBE306E83E31798921B5691EC160B3
+300BD035AFBEA931FB34DB96AA0B51EA5D610F59DD306A876E81643AB7835BF7
+3335B25A1129CAB953980E855235ABF5F1FC13F162FB2B2B9CF90F059CDE8A48
+4F938EA5EA631E4EDA7A63D91281F5C29B282570FFAF9E569C942B7033AC8FDC
+C6CFAA4F0DF4E7C95863EFA6A297461DA2E911334E42CA98512D997B7F0DEBB5
+DA585E355646FB4E7837297EC08733D37A9F815186740D8439521A160DFAF879
+E04BE8CF8E55D7D29F1753656F86F019AF4C3518762AC60F5A2952BE80E59178
+A6EF753C62A13680CF33F75EA58DF1D1BBD5DE332DF6541C7D5325AEA29C91D8
+6075DDC241728CC84F602C58F1A573F298032912F6273AEF60C1CB265138B245
+7FB6135D21C8537946FBFB6315BAFA89CAFE4C282CEA4C1DA6C98CBFEDB3224F
+8D898AE736EAB91616CFABF11C57AF0C3BCB07AED9AF076D2C48E482EC258241
+23010ADB742A17545996263B9F7BBF981AE401918B286A66EC04BD99C41F7761
+28D9A8DD8CAEAB77B0F5E2ADF542F8EF5E4C0A59D85D6643F497D1B4264B07FE
+1F7EE3C9CCB90B950A548F82FFE5B1126A29FDD09F7AB934CC5F13ABFE59DA95
+FAAD71143AA259317A0E2903ECC927BBB5DB5C77A547F3E8000E491B788FA1E0
+CE8F19C43AFD981B13C5FEFF1DD3ADFB114950E1E30CFFB1239FD04728D8B7EA
+68A7F8A58B5D09397115E6E74956B8
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: SFBX1000
+%!FontType1-1.0: SFBX1000 0.3
+%%CreationDate: Wed Sep 12 2001
+% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>.
+% See the file COPYING (GNU General Public License) for license conditions.
+% Converted from METAFONT EC/TC and LH fonts:
+% ecbx1000, tcbx1000, labx1000, lbbx1000, lcbx1000, rxbx1000.
+11 dict begin
+/FontInfo 6 dict dup begin
+/version (0.3) def
+/FullName (Computer Modern Bold Extended) def
+/FamilyName (Computer Modern) def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/Weight (Bold) def
+end readonly def
+/FontName /SFBX1000 def
+/Encoding StandardEncoding def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/FontBBox{-229 -316 1737 939}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11
+69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB
+CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89
+F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3
+F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C
+EF25195F68A2A98170E4875AA1B1ED6A435C02C357D527BF5BAE9F3163F8850F
+4267F16F7320BDD6979C2F8C665632114CE1D7FCD000F5FBD3E05848929A6E47
+97361D305E2B3EF0D3289006D6D4A92B4915A07861EFFD2EAD6D0E44D7F2BC50
+0393AB5D4E20487C48DB19B78C49FB68EBB7ECED723428C77D753A22B7D69614
+D9508C82BA58E2D874CC9F68A68F2A40B655CEC8A6308B67DD6ABE39F97FAD75
+03DA383F4C166B7EAF7A3ED4BB7FC5E6B5D2832CD0A6587B17539297FED807CA
+ED127D2F0B4D1835845D8E3FA03981EE7410C5EDBF3C000051861E7C98A1CD97
+D8CFEF6B875885BFF5832E8FCD91B4780EBE0E908E59EF5D3FA8CC9D67787EB9
+9FF5335E365F2B9EEE281ACC85039C952D301529C2A7B52B3A174115FDBB2268
+D98A22B25EAAC4F57C64C0C1DBC34B0FE96C1D9DAC2B7FF6749250D8502C5C28
+3B8CE334C9E727CD19A3AB4FF6D3339E7E9C3F43BAD7A78D4C7113CD45530995
+E6A70147ED0D3BE8A22B346818368B4AA3AB2ECEBDF089D4134F08780B4CE5F1
+D96EA7AF6FC84DD5FDF8C9EB273059C87A568B0E6B0D41B1745D6DB55C621F11
+5E7797466B74ECA431199CB2C9D974DB020DE52EB9C39B2CE83FEEE98D229076
+8C6B6237B150DFDDCB233858DB62479384302233B6472BCE3E34BAAE8F821E9C
+4B6ACF55A88DCA7FB297973FA132DA117E7DE71F434C49F649C3503F0A523806
+D96939D6D04782E7062DB0E069E7156DE7C7DA1E413CB8575A1FACCA04679230
+6F4032B42CF9083332D26AFB6C8E3D6930E9E7AAE06FD6BC3907CE4DF582F592
+96379AE779C820D54A857448394B86C9BE2D4126610FBF1F1B2F374A2244E21A
+2B42A9DC74A983963AD571173DE252CD75109FEF87474B052B0CCEA27C458CA7
+BB1E9CB1D3B2959532D51E9AC040EF3CE5D679AA2ACDFFDE672DB5CF41D58F8A
+3786ACED5AF7463460B0414B467C22C08F8C635AA1EC6DA06B74863BD647F308
+2B70770DD0A127E16CDBB6D2462EE400855189890440CF05D5AE4F5D461B609A
+00F50A56A32427703C2272187E904E982FF9C31F7A82E1D0E843B81EAC0F6734
+555466FFBF205B862880F752C654963AB26C6BED171301ADC1A5B1F05D0EDA4F
+DD952913E8B4D18EBAEC0229D1CDAADEBC1F64C2D9355172346B6A73A4466B26
+DB5E3B27B69291868237D74EEF1577F24EDC31431572DE621E19C5260409FBA4
+16102F83081A06DEFDC3D19C90436160FC3CBEC2EB1BB1C8DC65235F1EA754BE
+8F665657C97F774E174C189F281C5E79B01793F45E26BD0BF8AD9704552EF609
+57868BD0E17E9A229E759BD8526399D5C30144D3072ED3620F2EFC3BC1526710
+54673E898B8D601E711EF054DAD9670047F88503418DA3E9AA8D78BA655B1C18
+40EDCD9B7A5AC033F6B1E9744D32AA75C87F9A3ACE24BBC3E683DE99B81B3128
+8A2D384D75D4A99B7BFA298E5D64216C70220F16763DB2D4D1566D4CD4A07812
+76A23F7C26E9FA324D4DF532B600A24686CDF900AA0C9D9FAE7FA6EA76002927
+1F2DEF03F4B769A688D193A866F5A44BFE1E3A599F0FAC1A10D674BC0BBE8C2E
+74EA1DC605B5F9B9165F9B96C1C3BD82B23A4728AD042F54825AD91AE6AF3431
+EA995BEB
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: SFRM0900
+%!FontType1-1.0: SFRM0900 0.3
+%%CreationDate: Wed Sep 12 2001
+% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>.
+% See the file COPYING (GNU General Public License) for license conditions.
+% Converted from METAFONT EC/TC and LH fonts:
+% ecrm0900, tcrm0900, larm0900, lbrm0900, lcrm0900, rxrm0900.
+11 dict begin
+/FontInfo 6 dict dup begin
+/version (0.3) def
+/FullName (Computer Modern Roman) def
+/FamilyName (Computer Modern) def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/Weight (Medium) def
+end readonly def
+/FontName /SFRM0900 def
+/Encoding StandardEncoding def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/FontBBox{-196 -322 1502 937}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11
+69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB
+CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89
+F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3
+F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C
+EF25195F68A2A98170E48759F267FE330B57DF626EBF73D2779A4A6B462AE6E5
+19E5878939A488F2FE1094A76925CD24DAD4573AD3CF34E426708CF06E7EBFFC
+BEF5595408106E2189F418D17AD510ED5B6A528E8902AA3A5F0FF52AE3DEAB07
+32F06B63E28BB88229E046F4FF8A356BBDDE82DF2A197F2E26CA00D5594725A1
+83A89A36487EAAE1AC312C929CDCE50722FA6C596C261E4D78D6C6ABF77F5CCE
+0E410ED74287A0F201140F8D9674A7AC585D3CBC72CCB824F9E1CEBD08AEDB3A
+A4015CADF471F7ABD9B0F0AF73A8274FD441BC1988A61799856E4770155341D6
+516CD0E25BFA59B67AB7E0571DF3F5BA70A82798D4CE6D9F23F52CF97CA370D5
+FFD6359959DB68E52196D89FFB84700E1CCF3E2E6A52CCB43303FEB31F296C29
+34B019803C53D8D5DCFDE72099BFBA29C176DA3AA9F20106D6AE6D530A490578
+AA65868A24DD5024A28C6E372C33EA2F6573A6592AE985F03A99884CCF7CA096
+043D8D33EC0550084F5D85656F821D8E06996DB3E47A7C4E20CB4FA8F9A1FDBA
+8A8D5E42F16B4FE307D36B86A652C196C9968BB436C9CB66C9CA27658DDBDFD5
+28224AA3A9BDE394CE703771433B4BD8B2867327DCED10CD89FDAAA5663DD04C
+0F4EDA21B96627D495493471C6F0A2BFEBFC2951896E3A52824E1B82EC39B16B
+F11A8545D54E1C5AF4BC701B47E1D8D4DB124DED5732AA9A94A16B44FAC0B8D9
+3A726784FBD263820B6DCF6ADC98A5662C1DE90DEB617ED5B7D6F728DCE0074B
+7DA3EDE577EC66869BDC6D10A4ED23283175DB32F0407570803990AF10B48047
+39898B8893B5E2465C61DE187F762ED4E8577B217C2DA630FA3E70A93D368F8A
+1715026139E79E419A5B7A0C017F16CEF082F0FF1D9C196F9E2B9DE1F8475E0F
+7B50A348BD2987A45AE742E1769D60475F75B0D8D85732DA28DF03365091EC8D
+EA4471222B0BAC8739A7407E3687B32BE3388478CCDD5814AD3F556061535199
+A8147612F8FE12D52CB002A2D66F80014EA3861089AC8F1622266546EDC9CC8F
+984BC14FFAF5573603F11D6B6CF11194DBA8350C9D1497290B727E979BFE8FA2
+E5348257AFCF78B5AD0127ED86ECF4043D63503CAD6548D0F2F3D145731C69CC
+6EC9CD8DD59FD1C7F22843ACCD63FF658A8C58C74B40F86B92F013A73EA21CB9
+5A499ECF13E311E51AB788BC68FC7BCFDBBF13AE645E83C542A3B026EB61CB15
+309BD27EC19C8D31C9300BCE1D6544668A511FEE990DA3A11225ABB2C22FC7DE
+D064B45FB23D9CB14BB0DA1F2F9DA4C2E8D072E8F70CFFD833BFFF0E511BCD47
+A16C17073AC9D62BD413CEE14A9BE91B69F98C73AEEDE6A3DF245A673DE56F0E
+0F1C719564F5889ADE60EB828698BED9792557A26E6E104A080B995B8A2F065E
+EDD89F309FDBEE7B1B280345683C7598990B5288EBFA21BBC8589E6EE2434924
+8DBD3A97ECEB0B630D6D07846FDEAD673C861CC4EEE6D14EBFB27E2C3ABC32E6
+4EA6C0EBD9E38F8A4FCF1CBE6DEA027C700519410D86F3813394F02060A51033
+30DD39F9308332B7A224A4A4BCFC487D0CF227BA3EE5EB69F699CF432658B880
+F98923E90E9529CCB0106CEE0C0E07DB2EAD8BEE6BFBE255AD609AA62E763B13
+816795FF5F6BCEB846926337B4B8A3706DC71C0E3903C9A02FB6AE1647DD403B
+FE9A7FB706EB44130268D5ED62D967B847DFB274BEAE378AA9B6FA0D74A025DA
+1E80A0027CB712C1049E230758A2DE86A7E5A86B8B6249A125B20E374D194F98
+4558314A256C554C63B8DFF7822A8B47E423ACEC79E8DA15A08AC4E053D2676A
+D74CF36E3FD0DB3A43EA5F06F9BF790EA9B56459BEE6955D3E4F0F4BCC7AE2F0
+68302B479C23EF642100EB801F931BABA395984CE73E67169DC41770B5F7CCE5
+B766F5D2B487A03399B4968C65DD95ED8373F7A7AD84593AABFAC53E5F6A86C0
+D8E5730E808893BADF82963F203BF8846B57ADCB5A230B890A316E4B81195CB1
+58677203751B981FCBAC7B8A6BD1AC40266BF611A5968AE062DDE38C54BD8201
+4D86233C2D47AB90B928C9BF8699D1A13E7D573ED08F73B027856BC96DC3E56F
+D29A98AE4EAACA821ACEF9F9B04DB72D662C790D17BCBFDB3F8933AF12D1ECD7
+18BE4E606081A106519CA3BBBA8EFD1F8CF34144B09F4BD9445CF649CAF72395
+712B5F85A86A1DEAE13F908AFE15463FB71C01B2C65AC5DDBDFE1444D5B30ACC
+69E0FD328E021294FBF621B462CE1EB6FD26A10AEE723E78F3CA779E6B6A7E15
+FD01219849B6497FA6DB4943722AF79001DCD3F9DEE6E3D1420E455A08DB57D4
+5E12D0E2A9D2105795885557A1811C0009DB48537708D9DCA34E91549C56A3D8
+AE8E55606CA677643FB82F1736D55A53F94F734BBCBE96D74CD4152936C2184C
+36AEADA9CB6DC92F990D8AABCC309FEDD4FA497D23E9C78A27595FAF70C64C19
+D13699569928B4DA77817C69EDC3C3A9108BE9A86888F724105C3344EE80F36B
+650B643B2423BF5A5405121678BCA02DC9469D380C43040D8CD86B76E9F2ACFA
+05ABDB8FB50D9F5293B2C7BE7AD027D53C3B70A9597CB66F5CC61AC7F19985F9
+4EA8B1EE5047D5A37CC93E3C704AA03DE8B811E081D3B0B0BBD26237E283FEC7
+94CEDC09F9077349C96C24E8D18B85A7B5AAD82FE5688E208064BD0AB6082ED8
+2935AE602BD3DC8A877823505DF922C8A8E5A787DE997CE19D3DE210A1A63ECB
+F93355E11B89A257114B6A7F5AE6E3A6FEA87C468560148549627AF0285C62CD
+E874E189CF1F78C4703E41D7FA628B86507E9E71732DF9726C2DEEF841B74A60
+9C7444D1D2D813AB4366AF966589C1EF16030B59A64029BBB64BE415567AC1B7
+B06404E61479138E8CF1351E212670DD71D2FCA8B192D0F6BFD1AC6EF8A1D771
+165892598B0748B26C9EA50163D375FC63B281459A2519D59B1E037EA930F21D
+F005329024B77548F1EE51E864140B729364F831B26C86ABBAB08E030CD43125
+DC82E9FD230281E2EE9B0433771A8A899D8366122FA7C4D6C1C00BB52ABB6EEF
+29081882A6BC87B8E5E649D84EBC5B50F0335693231295B2FE8226C328E6F059
+DA7E1C6E7A336E30C092741BA7F80FE6D3008E70A27C86889647B411DF2A995D
+D0A6BBF886439B13C0CC247210E750752F8CBF9A743B0CB701B9A7E61D4FF951
+32C720F3693D59A2458EE4862D6C07BC2974FD671BD0D4853ECA073DC424A072
+AAF769FD817E5E1564B5EB0C7138321AC39763F966898561B385AF97652AE4D5
+E2480661F7104B40AC6A90130CAD43D0B767BEFC65BADA583311E5B6EE262F03
+198E0B8F82D792AEDF38FE9400C351D86CDB7C52B7287916DCFAEBF60530958D
+C202AA5699AB0AF95D98385807D968B84A7FB100468C4529613CD0D628B3186F
+93B271E7972AEEACC0F308418DA1AF98A63A5A303C846C383A1C9ACE97B11048
+23F78C49B1F2133C323F865B4E6D2AA1225323B52F9C586FD4F08000C6F00BB1
+7FFA336F406CC91C048711EF040EDBF40E256299F1E73E53505205ADEF48DF07
+FCB02F5D97726C153EC014F2559DAF8ABC7006F08C2A7F0236D0498B8D3264DF
+63396ACE48DFD3C79570D37DD24FE745496C107D365CC95A38617E9571C1AA63
+7B4E4E7AED216B60BD8E8DE59349F07C18994FF414A09045B9BE5281CB07EE02
+3427A92F9CE85DE54F75000CC9DE58D2EFEF8E3D81853E0BA1CAD18D0139CECD
+A56F30DCF88F5999DFF552EAAE78982829448D5300BB08D9818F14A9D458A871
+9BECF2F91476B4495F9750FF9322A44B38B0B11741030844DFDAE96D5CC594E9
+01374DC11480BDE1C823F1EC06C9C111953CEEA1F61950C05BB9FE5B9F19317B
+D6BDAA8BAC3FF70DFD0B03969BA2F22612B4BEE355EFED7F84DB3BCB2AC04684
+8E3DD50B382998A4D6042910DA2DF65070564E6C18A2C9EAB8C268A8A3577618
+287E0544AC6747ACD6C9576C3412987F9D1C3472BBF278F7C9B55785FFA7D5D8
+E4CAD2571CACD45660016B380CE26B9807513FDD96D23484DD0AB063DB4FF777
+BBFD9AF095C7174704C62901112C2196C827C6108722EDDA95317EA4E7786D75
+0C09528DDF1BC4E4960791DBB5E08A39F1FC64176ADC20CD8B0E809105958939
+8323EDB1EF54E133B52FC61510D917F4EF01782DD1D4D1EE1927A3BD20A6C76C
+5EF6BF5F08A5373C30B5E0A7197F6A85F36884B3640A23DFA6BE42A8B89D6D89
+D9312AEF4C50F66B95BBDE9D3B32994F076D1269C3B619C316E1AB71D7CE20AB
+C17D4175328E0E6E8E605095672AF75411568D3890232BE6C15C259AEC31E561
+7CE9D77A93C30BEEBFF2BCAFB8ECFC153031CD1AC52516191F8214ECBA866518
+648D3D8BDC5D7D165BAB011AD527E221050F3425F991BF88A3C88F54091C8B09
+B0D8F00844F8C4605EBE9ADA836C39AEF3FF77045FCCB189CB3131235C701CDB
+627AEFC03823134F46BCF7A3BA286143939F28CABDCE6C680F4945A75B985040
+01EFFD4053B2D53CFCAE49A624819A95488DD5A3CC69C76B1CB5E6B253B2CB02
+67AF3E2C0B51AB4A815C5F77E049996FB49464F74D0605FF377C5CC9B2F92706
+2C125BB08B9A0906330212962E94841A533B098D45EDFCB4E7DD1C0E0D164966
+7A5B69615002951E80F571B7450F2EBED560F97BC99FEB6BE21270A2FC838959
+D75A87A7CCAD1EE54F8669DF366D3E114638BDBBC18E2728B70126C263CAC0EA
+C2F99A936F790E8B4CB06F4227DC96828162AE88FCF72132C6912EFD701E3E02
+2AE569F73DF756169A76CC8F3BD0A976E2D25DC0B7FADD1ED132230D6C539D99
+56444E02C7B6C98B9CA3558B105DD2EE7616669DD6BAE28F83283BFD4D31C6DF
+BF53361CF3B055209688AB8E0138F2860266852A3DB40FFCB0E78F80017A32DC
+F5C29CFCB650858D06B1442F8C580C56911A4F84265709195AD1DAED7FC1DDBA
+2AD9E035A47F01853AEF9D53DA94D7C0D70280A7042968A144019E894E4BF860
+01CA4EA354E74DBBE94CAC3E85E5EA545AF1B4C5522B15A07E9ECF4FE407287E
+87395978F11AC308B638A4C935C8D2894784FDA23E7A3684AA579655B657066A
+DFE881CB373D4934364E8DB22C5E531A678FD552A2D5D67B095EE66027673F40
+E02FAD91EB50B8F75DC9500B9BF23C4C6B1B47C24A56E0AF3F99991447A1E7F7
+DC36D8B558C00D9B79C37F16FF316FB5446A9665CE151D210F648A0B93540670
+76F88B3EC719E230FCD0A2331D1E9B24DF6AB9ED7C85272EE765C359679764FB
+DFBC0C34193E9439EFCC2B1AB20ACD452F67318FABE14467AA84BC39F8E13679
+7BFDE24078C8D01D6B24D37D53FC830929423A18AF3378762504B4CDE9EC0C5D
+329F728669DD4F41D320087275373FEEA3A5FD9DB16A14CD271718777AEF2CC3
+9C62C3854E358D3EED44A41A2D1F03F096387341436E4E6C5484EB7CB4542178
+D6B0B4E237F919152F8D9E86229BFCB8D33DF9AF0D1C7C6FAEB9C6D11B2A3203
+3DA3663044B10987945AFC328FE6F40F1E05096B63C5927121444FF89028B03F
+6EC8038BF1FADC240E4F7C0F29D16F70989D63440B66EC8B773C12A8F8C55D4D
+2E9046B3DCD915A3C53E9071E7DEA09C2B22244FD50486A53B96E199F7C78ECA
+9E22092502FED1072C263D861C05DC4B6B73885E3AC77CD9B80F38A49806D776
+571848560BE3E6370F85A4B8D8B01ADDCCDF489CC6FCBE00A4EBFFFA8AB2B39A
+00DE9EF2C0573B375CF75E49725A1EED4392F8D780F9CB2509B6551F60D249CF
+337C0EABFDF41F56AB44A01ECCA5D14C632C968C9361BE5E42DC9C42A7399B92
+F551E52AB7B7C0355E7F1B35DBBA45FC96AED455C93DABCEB8DF4FB3EA2C40AA
+EF085D447F0DDF3AF7CA2489D97FAC2C726E65CA153D9EC6B5E7C71C69E82101
+530011814CA1D634F32260C663899A2BED950BE41B25CA239C077AE34E53218F
+B837E7B6E396E0AB49CB67CD43A0683927443CE0E528440564874A0481321552
+0E44FCA5F79A1996BBD7AB4C8E56B08EFBA820D03FFBBCDE090D218B2ABF7405
+C9E6A7DE351875F518089527528EF3F4F7A039B9875F47393186923C5E37A616
+98D10B7269A239F52F58F50D6B38A50E77F656B02B6DFF3EAE8F805D15D84C20
+C73ABE08A2533DDCFAF431908E772862978941F646916C431E0E308517D8CADB
+3D8C5F32233104A9F80E163B9465A1B42F2C86A103CFABCDF52A0C87F0577BF3
+4B836EEBD6D957E70FA5EF377C784878759518C8AE7799F35377E9C384E1FFF8
+9A19604AA99CB59E42BEA3B7CA2508355C56BD744D1CCB034B70C51814640FDD
+1497802EE753649DBB6117A1B74FDD47BD4F4E78C6F147F03257CE6641D3C5EC
+1A9A84A3A6BA2081895138C2DF1726237804FB337197373E3119AB3704F849C2
+316F95BE42F08D47AA3E7934AB8E09F6E413D028AEB7212CA301D20988E7A7DC
+6A88F5BD6D7ACB8A14499BA62D73559AD391590675AB907C4F917EB8B80A1793
+67F7DF308F12BD9C984EE6D9A935568443F75E188B20547A9B74D21736FA1CF8
+55063D865B93F325AD24664C9D4B85467ECE18A054078391772A98DBF497EEB2
+2DD2380FBC4E38C0CBC3F1CC17443251CEFE5D7849D734BC9844749FF7C02F4D
+F5E66E0643A87E6BE3400B41F28F26C0F4A6979CC50B0EE4C75B3F8CD9989BED
+C94649432F2358C8C2CDFDD5BD7F38DFFD8BD31FD90CEE0E95DEC08A13061D24
+AD69B436077DD39A39525BD652ABFEDD8F72FC219C7291C6B3F0FE67C13EEDBE
+27EABE615294AE5E1A431EF7D1728B113FD08E9F8A345DAE9F579C5508BE8362
+57E746FA0487DC1879799D0C01F608F4FD1AE5538A2F89574635150C7D0D3099
+371E6AA729F1588ECD60F0E66A4AB04796C0B05D90A5A8231299055538AE87C0
+C4AB4BC1164FBF23EB2C41862105A78BCE295734D57AC1470B4E2C6091DC23FD
+6868316364B9FC0C8133A84721D8CC7833598B51D81420F45BB03781F64840D0
+B72AA42E87FD05AF4A75B3DDBACBD0BAC7B2DBA3DC7A94213A35415EE8DE6DCE
+408DB7E133600207A256EAAF61837F4FF9CE1E03E7E8EEE843E2E4E40056EEE0
+E6467A7CF07E4D73C5A839F9BBDCA90CBC58D06767918B0BE4AA2722A2768A6A
+32D8509F3E3C080F78CEAAC2E92F4608AC9063FF903763E721F9CC044A1714AF
+FC5A5E4B14C74D3901F119F04DF26E064FCDC6E29156E0406C7A9B52E1643116
+E662CAC5F8B14B952547E92EF479D9566F7DA7B06C9E2844A8E56C5B11EDFADB
+FB9C2639835A0665FF22496D4B261AB5EAC44985F2B8E409E73E461CEFCF08FF
+B050674B58E05684E9A79FE1FC31E998D9344F025143778C98161F8256991A2E
+C97CAD29745F53B387387BDD3C1962ABB39D9BAD046ED9C554677B7112BFDD1D
+ED4092B5D812332F4650FA123C4813ED0274DBC3A845069AFDED9B92ABE56B4C
+B2B348F367B14FFF52C3AEEADF5FA2851C69A341B418C7AB2462EF5004F76FC8
+3D45B9D3E8B265EF4A41358355DFF2D4DAECA436BD408395737188974BFEBF70
+AD9543A3ADBEE1536B27831370A5C8593A2B7DBB1040A41878FB037EB78941F9
+2320DE4402EC81EE1F89B4D048C81F97A88BE8780AF14EBBF4130710825FFD2D
+739D352143F5E2B9EE5862A24A67E93A161DDF1095B3676EE853A4409C2E5560
+7D7B814502D167C1EFF5F8CE100A807E8B596F0E61E8D325E4F0660D6F0E072B
+D8798568C40DFAC99FEBC2B0D19282375E4FAE1C5FB74B5913C87DDFA45129F8
+8CE783C3A191546D7C03D407DBF4E83C8F434B5648961F74E75B5267AF360854
+7BFBBF6CDADDC56C29B4CA959785EEB01883F62FB1517B74615BFF5B59CBB58E
+E2E9E0DF6DB12DDE4F5AF40664D87C5C1935010F2314BA90D65E9A64F8E9E6A3
+28BF57F4FC9D8B98D16F60B7201B996A7C66E0B2E15E8C7B66094DAD9B9CB526
+47ED165AF16EF3189D7E2557E4B86194EB2609BB2B9692CC6C28F085E729BAA3
+282C78EE28FD1B2F57BF1BA48D07852E2B840CBB08F461991A79327D40BF0EDC
+82F0E602F640B773C7627EAF7A19922B4B65FD1EACFD67F58BD2BC328E633FCD
+E38253B7E0D3E8863B2161664E82A7707EC346530E9A0828FC2A6D8B6284C9DB
+4B027F9895AF004AA7D07DC68D87C2B199A172E0551A37C55A715742BE83214C
+A4BDA3F57514891FD61D4EF00A7EE360511EF177419FF97A7BFE63B5C591975E
+184E3B7877753704E4C39F6C46ED173F8C4EECCCB01ED50FAE4CFE6395FA3F54
+FC400D57A53C2963CBBEC87F96A585940FCC74C45DDE542B97C7C741D1D24B4C
+DC6D666CD1F60F0A096484397D45E7F68DDF09481F93912BE4F9EE5A4ADF0FA3
+85697C2B0624A0C2C0EA9AD0AC601B97C41B96EC10F055B6DE1FDA80F7D8C5C7
+303119298ADB6185A4DCE8AA40E782DF8FD0F9F384FBDFF0DFF458DED8D8743C
+57F3367230A51B399CA9696D4C3C7A5CB7F809B51C753F227A25C7FB64BCEA12
+93C24498C4FBD0A7712ABCC3F6091AE21E7D3D37430A020D9A407E1E57D1119F
+0DFE3379AAAD3B20F37E8DF818B75954045FE68D90AD698A57B3875D882E82A6
+513B7E770BAC5694D088A62506D09B74D9E1D937EF5084B5F9C5D739AF490898
+A837B20A781FF0792E75F63756A334C9ACDD59F389D357685AA0D659F1EE8103
+139A162D9638BD7E2A8D5F50CE1674702C3A59AEEA5C58A595377A0CF84226C1
+74996677ABD3E20D27C9AF84A3B09E3BF073144FED6D114FE794AFF63471890E
+3AFE741C6258C821D77E8DCD3F08AD8D11580B8730EB6489FD40B49AF07AAF28
+D859A8DB3D672668018FFFFB9FA06EE71BD8C24516FDE6C6A13756E93F1E7DD8
+7A764008B31214E0DF6B79EC022F0AD1EF6861E018B0847F3D994300CEFF043D
+F91CCFCF1ACDFFD7A0712B2173E814586CB6D055B89F150C7EF67B62D346AFA9
+770DB3104E46E66217D98EDE2BFA475E0180490AF65DBBA3BA11895B14F2858D
+3D1B4DFE01092FB03BF9CE1A0D432BF31C9E7520C01FD707D1366F2D74823376
+46210F44F0521190A4EE3C0F22E3E700093C25C0D663275CFC275592D7D9206B
+18B91167663F8C2BA19B1E43F5A5C3750E55B3157D2AC53810088D33169622FA
+5672A9CD67F2FA44ABE91B3A47A98F054C8D83D72C702B121CEC046439073854
+F704D7D8B9E4D4A7FB7B49503B3C76B27A45576E8CE8A43918A1B2033F71D29F
+2C14D0B612697DBF00A180AB1183360FAC1D9B45939CB36B20330AA232561583
+F1FCABFEF3F797217AB9A8F76700607469F44CFB2993CB0F680BB526FAAD4DCB
+66C80216B8EB4AF7416374506C
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: SFRM0700
+%!FontType1-1.0: SFRM0700 0.3
+%%CreationDate: Wed Sep 12 2001
+% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>.
+% See the file COPYING (GNU General Public License) for license conditions.
+% Converted from METAFONT EC/TC and LH fonts:
+% ecrm0700, tcrm0700, larm0700, lbrm0700, lcrm0700, rxrm0700.
+11 dict begin
+/FontInfo 6 dict dup begin
+/version (0.3) def
+/FullName (Computer Modern Roman) def
+/FamilyName (Computer Modern) def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/Weight (Medium) def
+end readonly def
+/FontName /SFRM0700 def
+/Encoding StandardEncoding def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/FontBBox{-203 -320 1628 942}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11
+69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB
+CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89
+F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3
+F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C
+EF25195F68A2A98170E48759F33528B839DFD4B92DF0482493852C44DC635E3E
+0E29551E072F9AF208EDBDE681F2A25022B9758023CEE66E71B499EC03B0DCB8
+776788D7C9EEA9C8A55C4051AFB58C8580ACF5C1E76AA745AC43137D7FADDCC2
+ECC373F673B9F896016BAF3DCAAD7A1E982A9A9D5F459EBF287B057484AC0344
+010753C274C38A6704F869833E51F45F91D8FD54CF7F4EA910EBA59783AA6CBE
+A5963B4E5E41841A8CC0734ACB9679EA0341518770ADD726DFA8DD26AC8BE0C8
+93478DEE80AA4676F6E5451772348BE3F3242DBF7F727B6CE01BBCBB0F6B6CD1
+097F6065C56A9DB11299EFEA04204672740C1EAF81CFEA33A414C8A3FBC097A2
+789BD70B825861F9977FE1F2C556C2470E710BB50DCB709DC41C337F18B9BA95
+983DE7ADF0218165DFB1FAC6389F1FC446413E660AF4601F1935AE3801C1ACC4
+9A2A696F645918A8546D5C090D0F9AABBC99667D458EEDCCD0CFC60FA74C97AB
+D5D3C05A769932A1905F17170A86E307F730F17B7CBB77E583D20DEA14D76F02
+FF9CE7599E0DC09CAB37336C3D6DC6A91510BD76E458F2F009E24983EEBC220C
+572E997C37FCDA62DA400A703999BB3862B0F2C8BF611DE181A1F6814CCED57B
+FEC1F3573C3625283CD37815AB5F9C0C6FE819A83091CE1D5DE3923B1BB8BF28
+A2C22E7865E86FB42E506501C1DCCD2CBA7C2AB4307080693F54A3CD885FDD32
+EA5A81E6D7C58B6D43B135A8D63611F16C7FAD20D7CFB9565BC85B007D4DE8FF
+D9574FB7FD87333B8F00FFA70F271832CE4DCE864095C3C178662263758FB998
+DA57E0414649B9442625ED8F2E3F711F4A871931FA91378F1D3E054934D4FFDF
+86FCE519E27F26A8144C7D57622FBE3174F64A01FB6BEDDF2E6FF27F4B23BB20
+B9784BF61030191552277DDC1D0AE4153E4CDF61A014B2A4EE6C78CFC51ADBD6
+0B4CC365B29EA2F4594C16265668EB5E8C6740E09773393CE626A9D6F729BB4A
+9784463F90AD6A52E1ECE852D70775F39CF127B912A2419CB005F9C3A50B2DE3
+3B43B3DF9F517A6D2F7CC78E90219471EA02FC965632C5C642A1A2C17FB8E306
+640DDE1AE69B3F433351054C5900F8D4D18CB36C4EED051DAB0765C871FC6329
+57F373159AC49F917FDCE2D64F2604418C986D2AEAC08FC3FB9EF54D834FCFFD
+11FD8DA623BFBD5571921C8D75FBCEB230BBA2CE4ACD1D0A7FFD7F1E17471E3F
+ABCF3A8113C5F886C67B0D2F337701B25744ABA552243149770B81E3A60ACEEA
+96BDE7DBE7E2EFF13DE5B83BCF6A010D9C2F9CB9F513EE814AF7027587020F10
+8C8E0D4A3F0C3CE8A597F2BF67F7AC49B171E87AF4ACA332BDC8CCD4819F6CC2
+401C41405AB4179BA790D1C4853F414DD105E8402AFA7A9CFCE48ECC2D527F33
+3B8AD05931490409D02F3CC1F8941CA9BC0A19E8A3348F9E2974856105954499
+0F98520CB64FF37AE7FBF866535A1FACCA845698B4C033E07E8E18FFA611DC81
+47CBD79254353F36F4E0AF6A8E4D25E7A0656A7ADCC2A73404EF2F397A3BBEBA
+973B5D65EDD95E20DF0C11FD9EEAD9DB2057549B55DAB5D72510F8A9111F02B5
+E4A0C6F7FD4CD6F5A578A1B1BBA3E92751BF4083B295E46F4C3CE71601BB44A1
+CB7EC830F322EA5989BEC7CB5D223E526F0D8902D3A1DF2C2B785F8A3EC9DC9E
+F6F1E1AD8276E4A5A5274B96DF29D79EA322BFAEE47366095EC334CBF9C1738F
+C0BE8A602CC5424CBACCA8857B4DF7C38BE9D03BBFC425440BE90AF57021BBF4
+61047C7505001D61BE66B1A4D3E6D68ABF7C3BE55F7E8C58229E55180EA381C3
+B8504485E3BA4FD94789E8F0ACE83B90FE156D55A3E56C4B5AB4D041064F94F1
+7A4A1CDC8A14AC86DDA6834EF4E9CF895B9BE09A07D56892AAA0CA1763DD2AF6
+646AE3A16A2A43888777D32D687A6FD856FAAE2DE25C9C7B71D30BBACA149CF0
+B00AFA79E4436C6564C3C8774C04B67839EF0EBFB33505DF478C8C12F32A2F5C
+12FB86AC6CCF271460659BD4D6EBE275AC2A9BD780CE9FFD454A2F2D28CB0FD7
+8979602EE49524B86A2A957A36890F3CFDAC3872033E6CA7B01FECD47B15CE3E
+8740C1ED599F55E134A99FFE63A8F1AB2ED3D21567ECCD4DAEF355F953DAEC24
+3FE25DC85F44E84ED069BE591A7F2AD06A7DF7557128CDF102258F6637F2CFDE
+6259FEF86B9163FEB5AC17852E7B8DFFDD0C41E45F7F61CC55F83704400F259C
+896B43EC1A43A5E9E3B86B001846E41606DD510D2C7D0BE9DD17E90DAC1AADA4
+63774FBA5BDB44B280133A26823DC5BBB8E2882171382C7E5046F62361978A88
+83921365C7DBD28DDB3CA10162E0A8087DF237C9582217693A50FBAF52406BE7
+1B86D35F23912234DA3D210C726A64A81C6C3C737A290008A595C0EEFC36CC7A
+26ABD744E01F0739ABE7C56E0F2ECA5A8AEE0DDBB535193DB8F882B1BE9D7E4E
+7151EAA86B6EC144DE291B753BCA732F2E24FDC4CA8C2BE326036CC04718B577
+718330EE8875B34AB842F161BA1A0BC11EE94FE7949D746B5C36CCA603C70C8A
+72B15CFF9D1820E68CC0CC63E3A54F87016BAF8C5B46A2453BB0A1DB0CAFCD7C
+199D2E7DBC7D8A8567D8451623FD7A4DC61D98D55F11AE5AEEE2C12EFE28050D
+9FCF086634B118256214FDF5F7739EBBF62B2836E1944222C1DC54F980A469B6
+175A46AE3A1595A412F03E16A2194688C683D308D7B13FA06629F652EC32AD5A
+F9EFE01EE2F7D960BF57C4692316DFCE9E3FBADF4ED841FD5E3A4295B5D7FB36
+AD1D6303DCB61AAB3121C702BF531A9547631B4A9BC829EF1B74D06DF66B16B1
+97D515100F93AFF40954FBD1CE464B43801A35FBCB962C4EA6754905373D8359
+F079840D3F413E146511ED668CA5275403A02A28FBD48EAC90F7C4A07362320F
+B6E64530DEA1DB2820BDB56B2EB9F5E036CBC33861018367344C3533332731CF
+1D31C1FC1CB6A9E46A291C55AEF9322AA0787B76732E80276DCC686D77CFDCED
+41D9055C9357898A0064C7EEA5F1B867DE401B09EBE71CA5DE4E2767AF75E536
+A2CF9A016DFA6EF00BB3F49FAF541FA97A821C7699772E4E916430F66DB9B897
+52E4B15956A171AD001BCAACD3ECDBCA10C2CDDE6A14700276649D850B6E201C
+4D2E958EF58893637397AE47CD1B4DA1C520A73527E0F3C9033409F62DC4A7E0
+6D4F44E3ED2D84B5CEB6B88D6DAD7A3EAE2E34233E1388EC3823D030DD8DF654
+30114AB7322575BE392EF94E3EA3004D6D37C02CA2001E5E5F4BE904EABC6BD3
+9053135647587A108FC78BFBD54BBDD8E09F25D875B129DA26C9DFE4E4526112
+28A8E64D8F940E9DD924428FCEC68670BEBA69CFD455CCAAA6F2FD0E2F2F6125
+859100452AAE08844A356990C46BB614AE3C72C7846B5E158A522B5E424B3AA4
+4DD6EE65279D7C5926D1B557C66D1327FF21FE901B3E17A24453CA57F2AF9974
+24CB87D8777787C9DD5B1A5F8632596CB77E73602F55EE3D3ECFFA56DB1009C0
+5BB2A1BC1CBF2D6FBF64BA6446D5B8ACCB4658D0ECD0C142742CC8710E6F4251
+7B8507C8149EBFAF73EB897BCB334BFB0728DA727DFF61B20D59A681931AADA4
+A4C9159A7D960DBCE77385E78500879B375DFA2AFA5BFCBEC5E332DE6CDA501F
+4BA0C82A8E45200CAD71D6DE83DC7BD1F33F122EAACDE396251BE474E1CD0421
+AFDF8EF8BBEF1C3BEE47FEB933A6BCA1396F2043E9B5773B78A4F7ACEBF0C8E6
+59D4C6BDA43FCFAFB7BA2A7267DAFA80728411956761169D95A925148B083F68
+9451BE6D0131B866B55FF09AF3BD0656F584CECE76A17151913D7926BA1FCE10
+8B92B759751E10C76409A0FB7902FE1655B33B822830C3B2E11A6248C7D929A7
+82D59C627972AA618682D0AE03DE66B5196C57B881D5D0462B0EE7B1431E1114
+A58D5237009C7C55C4A8621B9643624794DD9F30F6C3579C03206BF002948406
+A8E35B53E773231CE797F60F76DF3EE5C4DED380B329618C3B80B4ED3B0BECE8
+7FD515FD164B90C46081FBD3C2064534F300477C5CE61ECAE26A40DB639AD665
+9502F90DE95A167DE22CBE1645022A0477E269C4D95D6B663A14DB42FC6D4384
+B9FD83FAE697F01367FC98ABDED489AA7158495B3075A43BC855B9C55684E5F8
+1CFA25492A4509171C1F67D2C08E8FB1A81D6663AC4B028833926C4F52F45A28
+00E87A58D2469CA423FDF2255B0D45388E67F0AE516B72E82AEFCCF76972E049
+2600FA8EC8FCFD3FE4F4BD5FE649A03D0269FE3B9085CC680B1C5F19476091A0
+EE9B14C72976CCF55F2E61DB62F5D16063485594726DBE4904FA0B90AD71DB8A
+DDCB6EAA4C14832705F37B72557A6FB3D590A51BC0350662A4098F08CAAF7D71
+79806B176F5A4B26E3E6C6C63D373CD1ACCDACF82E74D2136DC7A277FDB0D72E
+63755279EC160FDBE6859E9DD7C64F95217A0845473A9946C4C556603469105E
+C3D4E2F0230BBE74792D1F52A58D657DEA997E133DC99D44B8E793E2FE0E4359
+B41B3257AF837DF2DCF4D25B5ABF17A2BE196E5E1366EDBD5C8E840497D01DBA
+B7C573C089B975E7707F5275AC0F5C9BDBB254505673655F4CD050C8F45CBD90
+2A0FAE9E741F890D5B26839A647143D1F9A6800D4EC4FE4125774CAC70DE94C0
+A1519C3483556D3B22E9C6092E9598D006DFA78D98F352F67530DB5CBBA6E15D
+977C0F4B860EDFEF53751328E391BA09D252A962B02B4234C1E026AFD9B5D801
+6DC7E455E771FA41B86F57900A9C7299AF2A70E6A8858DE675FB68CF2E2C06D8
+BC584CED3882466910EEC2A2BF84375A5B8302EF81E571161FF04167E0FFF971
+DBE1A9D19953B691444E262CD6B7E72A0116E3379AAB8DD2BF3C2672A4FB796F
+59551EA794895FF914DB416CCC6883242F7EDB6FEE53989E2081E54D5258A8BD
+60E5729A48B8C3E760F19FD1A8E20B38F642D54197C26130F4E6CCB94D7651BA
+AE60063291437656EE331F452A1BF5CE9DD8634611FDF0523ECFF6048A67B6C9
+149975A538C936EDAAEF98864FCAEEA8500D58C483D7FF0E0752D104FA177E1B
+809739E25CF526F45B6665B82189DF94D50C02D215294D22681A0F9F7F3BD270
+3FD5F48360371D61A02E73CC011F38E34B049EF3BA4D6B84E9BE81F5020C9C6D
+8A79A0FD0077FCD06D0FFEC2FCC2DD5ED0582A07E175A0980354F775CCC9E51F
+5780F79E2573504E908773850F02E89503FC4D5C87BE11613347AD972595B0BF
+D0746AFB81B097572610C7EA038CF4B904F504642CFD40FF950ECBBAA02E2544
+2FC4DB96C15B184EC8C63FE8B1DB1193B8F9615EB2E76E6F8B16F3AE7AB55064
+EBFBA78A7B05DF4C366E7E0DAEF7187295EBD56063FDCC47019E5AD3F62D930B
+71AAEC8B88F1F5DCBACC2CBB94628D669250626AF858F9A1959288FFB6363736
+7C81EB98A5748467C5D8CCBB28189AE9C43D83F2E81488637ED5C6424C6D0960
+C4FB2BC02732C5EB8F7753DD2A8F4654B1F2497A10935CE8F681DFF83E7AF220
+D40FB900B820B92DB77892A7FEBC6C8FDD73E0B5E86C8B330BC03489FADDFFBC
+47882A58B93EAE36ACDF1C7D5C65ED6EFCBB8878833EFF01F731DDC573AF3EE8
+2DDC0BC62DC80E8CB7A1A2B2B8BCAEE867F9CB65F0340976EC388B2670558DCC
+656F54EF7A0051F6319C550C26992BC9A2BF3A718F0E6D9532355D5123A91D30
+C8DE870B14C732C9336649C93E76430950940A49C43F022989DB6405624503FF
+1F8AAA2330B9F6F7900517F450A35191227FCD198B217097785D120F399E3008
+0C857E92A2614CCA05073141C80EF295AAAA002172D37C39F5FA2C09BA5A3025
+263C051519AE32FC392F46B6BB9402758407786064099C2AEC2D5C86E975DA62
+E91B6C29F9B59BE5C74895721DCBDF10ECC5E68E79B6B77D1A48F1EC85AC2D60
+FA34AA5ACAB169C4DB747D16796899F819A7F8E828FBFED827D89770D84B4BFF
+EDD14033E3B2E25AB9C247FDA0800455244AE2C6444910DCBDBF5317CFD553BF
+E4694614F01249AFF70DB09C56ADA9281936DF74F71F2CFBFECFE9886B190BD1
+B8DD2304A53BDE1C33874797D981D981AC1E98CF9100A2619C4A3B17724B338C
+356B42380C68F185980BEEEB98BFD21443054008FC5CF978518A50D5DB2EECBF
+7D46ECE48470775838C0F5B9530FC8C10E7FE8B87D7FE416B4B81B0EB636E4DE
+1AAC22EC83B92A09FA0CCD03A7DFCD4FC2D580998F9E08DF914CEE769EC10EEF
+AF9E32278AAAC6CAAE7A5E7662AFA964DF5312F92022C5D8E513D4CC5F0A18A9
+6906514057D5370F1CC561A5FC8F1519C29CE0BB7329C0106A137F217924A751
+071F7636A6C3A72D25A11EE416C4FE7DB9771BF47465F27FD72C7ECECC16593D
+E38EB1B2D55012C8D94324C1038D86CE27718681BD43D69C26DD0B3A2CA0D8AD
+9A1D51ABCB54D1AD938600D8EDAEFEC5C5AE6DE03A87917E30F41CE95C2ACB88
+6F8E5DB510FD40177B4E700546D2965D92E61ED7DF47148041D25A7835DD6E39
+CECD654950795D08A0D7C797A6FE0A07D0E99F6270C871FEDF9E4DBDF036C839
+1A34CB3E2C22D3003976AC2E0F8BC59461A09EF3A5564F3A8A8517B25EE15BF7
+6A1816312B61941DADAA5F9E8A1A2CDECCBC03A7B6173EFD8DFE1BD25C23001D
+95C0DAD9F2A1BB14D6191D511982A5D8EBED7726AEFF2165228D6FB49DD87E65
+5B321D70FBC7D1A294BBD33CF33DAF8A4BC2C999DA93F9BB64C3D4CE44CC616F
+A04BAF43DA1C74EFA33456371C541C67748FCB30A352F141B903914003E0EA71
+19629C1A5597FF7ED694F8D90AB6DEF1908A117934F11144E6C68A1B6348449D
+BCD6EE569C6800389CBF12C7B22D8512F1A5245E37DAAD4E05A3D794B7D1FA5C
+0E0D00ED43E67633AC39BCA169B6BAFF006B69B6D818272612E554BE182281F1
+B3628A6502263CDACA54B5051FBBCF0408B2259EF0317FBD248720F8E4D5B4D9
+FC0D30D42BAED7D0D98AADAEDD95AA28CBE166F6B877F7CC251A1A6B032EFFD2
+64E7569C5E7DAB444162C212D6A55B73A04B539C69C3A973CC3F6DB72E310B73
+572A556E126D289B5167DFBB7EFA1993445F29FD2B297D0CBA19482CECBCEE7F
+80EBAD6D2E6D5993AB753B490EC5569B2DB12942BEDF7A40109543A0E33F06DF
+B8454F8BAD8A8ED1D017A68C7A9F57A11962E3CB7EBBA4BC62BC1421DD7E62FB
+DEE63C22CE0688CB38FAD877C8818CEC5F7D18EA999ED1B7414F479BEA165484
+DCC9405131AA659048AC21384C28631A43B722839B5D76C73FBDA5BD8E129363
+F2F130DA97A0F043F08C6EFEA7AC8FD41420C4CFAE093323981CE217FF8D1052
+2CFA6C233373C9A04D6D535F422FDCEEEFF00D8649F2868EC52EDE61B67C0F61
+6611A90F96E9BB87EA87FF6E8186B59D99604AC5A2C17231E0DF91E46DC72505
+3E3E262EAF87F740D2E01478881F66DD0D21798A2CF51A1943B8063CD10932FC
+7C074A1BD61474104C3CBD3D29031466E7411364878591ABADEAB2550914DCF2
+7C6B9730D932ED166236573D8380F20E39783AB0D3E5B383515C177B9818D3B7
+D3B7ABA74066DFE96487390FD4704DE0024936D17B863049DD3C91A0EE8C67EB
+46779DCA5740C355A09077BE453DA07F67DF4D072AA91A229C4F1E52B0E67A56
+39E34BD9F1BC3527995D087305FE9CF9E7D74B15B368FA5A70728E161C69E821
+015300142A3443BCC8D308A87B579F8C7C23F16CC76DF6BFF8170AADFA5A728C
+31B3352B33A999C50CA17B7D076C6009475F81CDC71293A5809F6D43CDA4983D
+20B805962D3A5049AEB66851FF6AAD3B1D842958E6B651789BDF83DABDAC0B20
+D2C45B2F76EDC73A2332A8F7611C697B2358EBC0358DE506B7985A34C661DB28
+13651C520AB24E0D3850EC9F51D84BE4537DA0FA7E0C342D3D61C69641C09833
+98E677B451E00AC3127FD7EF01053DB503773A3FA39B1D4E94090B1F032C8103
+3CB87B0A635A3BBD3F94AF1DAAE06FD6BC39061814FB4CDAE4E7320FD0816287
+644374D8F83A266C47DE3DC6B596D3DC87AB035DED1F804A399D527D135E52C9
+CF6A6877852BBEC3A0C295D1510ADD011D365BE2C51E7612A80F3D9C39763163
+E56C5E1C9A35D8B773A8126FA10690C9260DBD8815D319AF700A5FCF65476B35
+1D4032278D13574FC2C667638F1C83B9A24918730C0FC37425534BE0A0AF6993
+B5FE1422AA7045E7A9BB9C95F6F0EACE21073B0644E4901DD854D2709F17DE12
+E30B96DB62E90026C231610AB9794B39CD9E0602BD13C3593FFECCF79AF452AD
+F17D9E84A54BE377B54EB6D9BD1D20BD56E495772C702C4FDA23DB576384D456
+A6159313B0C2720DEBB9432F01A550980BF7F3796AA817CE3DAB393984BFEE7C
+64ED54DD390F067EBB85D9935823E4FFA7E954CD121204454B952104FF25A308
+FDD23BF1D08E7C5893D93E4F21F7C16E9B21C62F2B79922B1A9B23B06E0893AB
+418AF962394550504EA68D06A0AB66A45A2B1A0D756B5C7DECF1B0E138E55E8B
+08FFA75E0E4DD995D035F1FB391A6239822F22289B07904E2B745650C2695930
+D3D5AF7802187C22DC9FA2E760AB1D04F95B4C11422AE12ACF74C361D81EB5F8
+C9F89BA1AACD47D5706D9F0A6B016069E90783AE6AD73D8CDF09FFD552163CED
+06A1FAF22F143CFEB7394D5B99D465CF35487A11F4E4ED26530CB1B2C5ACB706
+A5C1853F9AF629DA7E638C3346BB7DA15769AA6C705BB50ACEFCE078C19369F0
+F95BBBE67960DA4A413A00CFEC4DAD2CAB9951961FFFD41CFF622F57F0BA79FE
+F8377A061435DD0EE57F6801307A4C719FF10404082E069ADC2098B971664CFD
+BD3F1808F705FC0DDA50D742B3DD3441DC391D232034070D8745018DD993E832
+C7087545BB7EBD0ACD83CF8ED9E65D60FD9BEFD2D0497A8FF563004DE3BBDAE5
+80D9FFBAC5936F1E1041C7C82BEA9D33ADDA96924138EE471C943E9F2578C0ED
+9F0FE81A58F720904E41A09C8E620280BFD37113EB593027705BADFB227F6B94
+555F9610FA63248A467785F34513440D734C53F0825896AD0DD462D8286E23CC
+0CCFA96436A09A66A92692ECB8564958BA5192E9D7B19BE34C32D70AE84699D1
+8556A92C123A3E4A0D08987AA9E2BBAFD0DD1940FDF9A4B7DBAC147367B175F1
+BBD9459018AA81D0F1D4BF85B1FBE305A01C62062EC6480F356EC5DBBB5783C8
+294E84BB9E4B7E58955E2685077F066B5579A4C94BE60E4F803AEEF852C12A13
+2BFF79C0CF85CC81333971CD93C9FDFE3BBDD14A68CE87B7D9973555CEA06B5E
+9322B1A6CA9DC9E2EF984B5CF57A3C63B8A7569637850D2AE40E2C99E18907D5
+1ED4D40256BAA74303D3F2071BE5C83214F75082654AFAF4CCC70AAA293C0EFA
+703D8F38668E5B029DA47528066BA092DC73480762C5FB6D70BFFA48734DBBC9
+00398534B47160DB99A579EC88E8BA13A7B8DBB6040E07C628ADFA0BBD27CC9F
+F45D3E09294CB02100C7649003F84951DD642136CBB1D714DF8ED2259395F9FC
+F7BD8903616A802A195D981BE9C9FE203C53FFF502ACA18CD14FD71402EB3502
+8B31B84272A26A3DE2C2E28436CF9546D1A66FF7F24F46B803D45D4E2A9B63D5
+D06DB1786BC77C86D59EF3AA782D160F9BFCE4B248333C5C814FD022A35535F0
+DAE95C28705A11421DDB10AD9A3D6C4DD4BB3ADF55F4C8A7A1D1586C00039806
+CEFE554DE1FFA0ACDE9B6BF7778D7C7B7D71DA1ADA92747A342F4E4FF5AF0218
+974CF2DFFD420F77F92C688BA3152DEA46756F6111B519233511491DDBBA0A2B
+A18D2853F351F6215737CAEAE6F16247F6C48155A30A3B5A5F84083C72896BBB
+F3D9BCCC58B4FB170514406A9A18A4ABF3AEC932F59D55EC9EC2A13AF37C691A
+7520446FA1266DDEB7A64A1A0A99E4027C18ACE894B28C88DD46ACD5F72204FF
+176E12C62A3630C90CC8676E4BAB64361F3DD921373F4A1F897F01997D24E9FE
+88CB321570A99412D0A69C377DDE8AC8B2776393C75219832783FDC16ACC0186
+CEC13397B5DDE276EB0D8B12B256913E5070675B950F3AF6BF82772093C6BA15
+1711258881A3A8656C0C5EE499A8D210044D0E9F952CE31AF4E17CC1F93196E9
+A924154F41D051FD93C488DBD72DD54B96DF1275DF573E4C7BC68A05EB709358
+E23E24F2A6015198078A27BBE36853CEA97EB561C27273EC391D3D361F27B3DE
+B241D1A62CB567BC1E7275C6311EA1F81B834C73297332C338032BF4EBA18FB4
+CFED469E2451BCBF639E389961F56380DA04C4AF200FE0F2066BB058F9C26C5E
+B7E28467107305F5FEF70CA241D0CDEF4030377B0EB7875A1B125267D985B621
+FC39F4A8F868D6B0A8696C753A50CC0E74977CCE7A7B7DB617FBCB3CD16C29CF
+8F8F6BA06BC35EEB95637073FC26EF3349C67E25F2CBBB081CA44CA48BABA007
+8A0AC1B8AEF5E3292CED27F1F0C287857DAD3EA12433669FC487660B3C019D69
+D5AF4650A55D337F12B58DBDF17DDE3CA45312D7B0EAFAF57440AEE816773EAD
+CD4DD36C3EEB87C6B3C79BAAEFD374F9E0CD71A7D5D51EB5688187B3AA4BB903
+476FEC7EF998C17E1BA181478BA5733CE1653627C2BCFEA672BDD0706C4DF71B
+A27543B7291FAC2FE211F992AC7A7D0A1C30A2A22C16F67E46C2EC172858409D
+442D2CB77DA2D90F257BB664B9BF93568CB220B2278973D5F246E7ACBEC569D7
+F9D1298895F65E12326EF2141A4436086A308D4FA31635484CB7DA3C5942C58D
+E7241B07B85087CD094EE00DAE9A20EBFEE7BF8BCE7D61CA9D4022EE41ADC729
+ECB5AA19FFA0CF414268C4ECBF3063C504E3AB6EB3CB67BFEED5893239639232
+83A1C142A2A2148EC0B081D72A703D5328A1F444771BCA405B26527885291E88
+F499FE569595C0865FAF03A38C60445C170F0A8919B4D2B973CE656E5089CAC1
+6F64BEDB8003EF517E7AD0841C8436C59EF20421165088D9D53753EB25502A50
+C51EA7C3239E3DD2239995B7280403DC4A8548189C21AF07C0D361EB5A164F1D
+A48863D0C7A833EF780721DFCEF25BBD0A0B92612E81751DF1EDDC95CFA997B2
+02535B53CA95AA7E57B57E3635DF30DA78AA48958BC3734014EDF2E2C3C22817
+4CCD901AD9E7E7296E1C66EC000AEC174BD407EF9E2FF67494E212B30198CC04
+7FA084AEF76C7DB9FF2C8305926E51AD6D20490452A2D42D06649C3B8BB5DBD7
+3871CF0BA4B78252C9F8B1FD55EEFB5131BFA2BC72F9CF088C618E37C5303E14
+07762DAD95D6D7BE289E41EAE43D2A03ECE6B61A9700E5DE7BF39BA0965DC030
+DDA4016A760B530A81C6744B50DF8A912EBA8E906E9638799F3C684870616299
+27CE034EC6631577D41086C34143F401E6166947B3C96BD3F38EE230D39F55D4
+69804A40EB951C9DC6E4C653DE2541979B3F330CA0BA37EF4B48B441463785A0
+CC6DACA85A9214DC989C163879652DED2ED22E4047DBC44A9AB9CA1361612272
+6EA87CA5074E5E36F3F46AD1CBE9F5644B63DDEA4206E93261FCD6EFDBD2C70B
+5234CE5442661FCCB32BB13CBE2162222C042D0A51DE2A47FAEB965CA8070463
+6AF299652B6615176AC7518B7D4F8D376FC46CF6937C61BD1CF2F49BCECAD088
+DA0823BF66F340E3D277E6D7FA46E38AD3A5AB7E7B752EDBCF667062D7B84137
+EB3990E25CE9C1352A83877A5AD37474F7534D8EAEEC9067C13FC71813B267AC
+85133DBB3FA6FF397D8F74A19169354417E63E4FADDC9FC1B5423DF29639703E
+4E24729D073F79F8BDD7452CB60FE1C43A290BD11A408744E1EC0521F928659D
+C795BB1196AE1160145D3BF26B3EF78BCB81FB69539BDD6C22AE6857A8546B3D
+5F8A71867FC42DFD220EE219ED209016CBAF3AEDD69D18BBB97E0F920994575F
+C2A0EC86609F812568642683A65C1F5BFB591FA5446C3C37310DF15E126F0554
+49C2B07980A945F6D6E2AF41C69AE12A8606A1C9A9018E271CC223E4B3333A9C
+3A491A2451BC13F1A56D3199D004683C0DD91FE61F116482C90A677644F35A37
+C46DBBBE5A622C19507288E28B83F808E924242A8EE5408142A6BFCBB5229888
+5D75298EFD28F3F4EE31184A4FFF586137CBF91B85A64BEE693F920D587E0CA3
+DCCA1DDED3AAF623E395B4711D69548D1283B04A4B2984B6E89DD50A27964E4E
+9F815BE0C42CC62C47A61B7D67B1047527F04566CB60230107C49D1532AFF59B
+67094EBDFC3ECD753ACE391122D26129A364A6E4AA6BC72CF0F8F428B999EC8D
+13C61CCDE1549E2A67A9585B2ED15D02F1E9EF223EEF93FB80CDE2296F774B0F
+9B33B92ABE283D4DBC09198D47454993DA72659E34FD779787BC7CC263DFD03D
+96E824D1026E8EDD22E25E81035839F926F00412098554C9C6E61905BAB698EC
+9A0F37D62192C2765795A969DABE55436E270D396AD7D782927DE458713D72A1
+D8B2B9A001C8198FDCD2BF6FEF5E56C38B4FF622DD47A5EA6D980C198A91BC57
+E0C9375BDEE41C91C7C636272AF85744833C42D64395868642384B18F71B8A7E
+146508AD0F19ED7A49EADEE9E2CFD09AE7ED8733F8BB7AB0A278DF2858F70623
+8F9E663CC6B4D961CC47E3CE8BFD5D45AF48B98680AEAE0847205E5700D143FC
+6E56F32EDF3DB57F1CFF1598F5BCB06AC53BAA616F1CE3A0272872917C769979
+1FF653D88D7C4BAAFBA4DDBA616D98E84886F2027BCC7F5C01AFABD6D337964D
+25A27D85882992CC142E5066A11E62CF5677FA6387DDD60AFEE69D31EF0FF4B1
+D62271725C64B690ADEDA39F97ECD4FF1AA8A5E3BB3B1BA1C110F2B396828215
+D9B5E8156DDAC7D152B57EAA4A0EB5306233CD4233F3CEEA9743C2BDEB03C760
+A97A914018F1CF0A96F1E2859694A4FA2434474DCE77FA2D4AA336F6489F6C58
+D20CA26D273126228E3C02D8A5BFE4B33FDC0214FC6B946BA07D825037BFC6C3
+D9A392328DC21737522D04D949726B106DF860AB3113936DE2B88F9D821AAE89
+4CF56E2CF620D73833CF07C91E60AD09B1BD4322E51BB6BE5A79D432F7531EF6
+E3AF2069AC043799A378099D570F5270A99F9EBE3CA063D0DC763B3D368BEE9F
+ED1127289EDADC595BD80080FC06070AFD2140840D0492306A28FCE01682BFFF
+18BA8E48CBF164ACD3E9DD0939CB2D0C53B1B99963A46D265EAA1B798DE74D84
+87093079AADA3FC574231BB37ECB6ACF0AFF4603E0D0E191F7DE5EFD7E427E68
+4FBD3ABD7E78EE5D8E46E85D0C1B9645D9DDE0E87BDFCAB81ADC114F1DA38FE4
+0354CCA83E15D19F822B90A8E3F8797C9E55ED0003200CF56495FBD5DF251BFD
+4472D773F06DBC7E646A9027D9A4A0CF0CB96FC867553CFA98E8BCAC2111530A
+C1144846788F63A2B35F6D6F254F6F593F260FDE652AF510B300C62630EA9474
+437E26880F70E28F92EC4E1BEB7F6D60779803796A578397E7D47540C6E30A77
+DC4730380E48B7B0231A0E4F6FB0D15CA028302D43B136B4EFE296DDD061A9C0
+5EE6CBAA454AF5BEABD6B399D187CEBF35412F263EF0205C932345624EC0FF39
+6BF0FF11F398BD1E6A6297D02A37242C790539A7F5942683DCB472D3BD46F1FB
+B4A95BC3CBB21C545A1A57DF730AB1E6687D416F466119C7F3DE1E8B27BDCF00
+37F42B3F7FB1E54F3D85B54400066FDEC97F1228D717F63E2B293A18453E2A5C
+D38D0DF64AB2FC04FD490494337966CC36F2E9DBD18F657AF2D361278A015663
+801E9CA8A250434BFA5394D8946CC7B64D679E91238D3246585E901DE09D3598
+A86E85B4A50C1C29DDFDBBDEA63E7113A394C451FA958C02E16D51034793F71D
+A17B1035BD431F7DD1C4F503A6DB7744095A03A937EDBE3A0D93B1946CCF7CBC
+BA5370F812E528C54E637575077843F9EC6DCFED973217B0181C10C96BDB493A
+BD08F69CDE5D25AB3C7843A62E04DBD97CBC25C514C80237F9811B74F878E624
+6FB1869E3A013A985C4858530E8EC04177E0B386ED12AD96649AB22A42F5686A
+1853AE83A1F473B4656D2CE0133EF352D2A2FE57F5B094B3845E68747DB56030
+3D27F1680541BC19DEBAFF1882C38726537E03ED68CEDA0534DB3893F7EAD80E
+240791AEBB77714F29C84FCC78E743386877CCF89E94C8D62A4B7A5986FA07FA
+FC2AF55AFF298983C0768CF30EC623910DA93C4A471BB1B68DA5B2B7328618F0
+BE546364B76248091064D78B5802B0E0E946D0DA2F37BB308441284CC9706038
+32C934E878EDB5FCFD907B8839FCDBA142264F3AB39A7826A41935DB115F5DDD
+AB63FBF3EFE85CB04F3CC3446FD8D86209602125BCB5579211A50C0FB239B7BE
+F323C147D842FC71C3A32C5D978DE389EFCC9B946EAC375FF96FE00EDAC887FA
+0FFDD5A5232DAE91D1B36C4222A4FDA12F8D845FE593375F22F89A4FBDD80716
+F278B8FB3D8E003B5FB73C37F6C534847169686613B4A8DDD28D1447A957F482
+FD1CA006EDDFC956AE94818A9AFB202E92F78097E2499B5E907F6FBF58204193
+07A9F13E62BD1EE3FA0EA82D4B4A8AA606FF1112857EF86F12798447241CDB8E
+61EEF2243AAE185CF4EE98E79B0FE4F0BABAD33DCF6704454DB0A8D0691ACBE4
+F24ED862B9035F96EA404389C49828E66A08BA8E7D6E3D21741EBABEAB9CC9E1
+640D6EE109B93857CF29A6E89702320FD391F1F7A588995158ABBFBE00C989B9
+5C4E9E325FEDC4A05F1C8CF27050FB1547609F82C9C5E658E56211C41B8CFEAA
+99F2C49CBAA451670DE1772E2B53AC09F701C499A48F98D8E0DCA2BCA7EAB3FE
+D4134EC0096839B0D9A96ADED7C5F97BC0E11AA64AF5B1B7B1DBFE6971F5BF4D
+7559AB056C63EF1CE60B523FDD769ED6723800B847B082CE32F2DC71E78A9535
+2F8E92338E259998B8A12FE1329B64CCAB8C7DCA0569BC5A58F1610897040FFD
+2CE6C572A92111787F750CE05598B021D3F930465DE23874BD78A0D35BCEB6C3
+7766ADF60F3BA013E8340DBCF4E7020DF7F8FDEC349E1A692CCECB15AEEADF99
+06F3D6550CD4863D14DA4516A68823B0B2FCC7F47B131595029D3C87AB682FB7
+EC82A46F013EE477D8C1D08A9E5C4DC674B48F5F6364EB2D3621ECE9A3592DD8
+B90691B263A18095AA22BAF2D46BC111548257CF04C01842BCE6170013FCA827
+5FCA4794ABFFD5CB80FB4F5CED3096538474EA757ECCDD99984CD359B428F4DA
+B17F2F432E8A0E2E067ED9FBA5BD137CA0C5584CB46814E2E2473C65B2214F0C
+F77069088565BF1ACB613ABD7A82D2DF321DA8B3E92A15F2F893911F485D72AD
+3D252FDE7BAABD964506D26E864EB713DF1CEBD9158863E405B2C16D790CEA44
+26F8314708FCD74F86D78BEA53B81CD29E74CC1B04AFF6617B9406DEFB7FD1AE
+A44615E932929F4F0A2787D1A8D51D777C7C45C6DAC92F7538F4CC2CCE43E0F9
+1F88A407B9CAB5E094163B99D4C322CBE25F18E0AD664127E79D16D81084098C
+1C063C131AA27A118120414E84DFC8B9C2A3025B53EEBE9AF03CE57F3DEA6CC5
+D03536974D760C1E734E1F5C25A7A34F1E2C18038A3C9F14C11E3DBA3AF10CB6
+AF8D8C1970A5B2A1FF3928A5DFE9192EB55FD3B412D20F408B7B1316309B98E9
+ED5F55EB5DEC8B09F4547C544E5123A95A3B3A997F5A8F768512415A1E3C8FCD
+E6861E79024DE59F158895D5D18801AAE777808C22D3AE33DB5BEB20C663C8D6
+7326B3CB0ED3A5DD613374C2E3C006CEA3C1FC7BB3F69F4F3D653004B9BF83C8
+7DF8F42AD90458D762B27701D006C67C0C0327ED383A1C49783E4CDFCA635B21
+8FEA611DC8E3092872B4AD7DE34320C3CCAC28E7F552C61789FF79173B979E6C
+E6701502F0881633ADC2973885F89CA3CB3B96A5860898B17B776CEDED2143E5
+AC821F9CCE54F8072BDDAB17088063E4687FF54C1079794CBB37B88A89639437
+2BDAF37CF904B485109417D091CB376971A83128781DE7DB5052C09B291335A2
+82DB7065686A43395D90D1FBFDA8BDE095ED8214CCE702F249A8EF8F2C3FDCF3
+459FFA35D40DEE6F5D84B93C1971FE5599AB2923202A2D7A0C319886CCC7537B
+281BC9BC2905005D0F0912D4DDA6750BA4E33F6584EFF5541CEAE787C99471FC
+D1D5E959FAB922FF95B8BFDE03922890404A22822901FC57DF8412A02A40069A
+6C7DF4D5BC45B505EAA44A9149B0AF4DBC71977342215880CBEBD4B3D7F7E41D
+B0CA512BC19E847ADE48687EC90DB5346A1A752BC578678E28CCF908B6A32D04
+CBF3B9443DC4BD732C3D4D67657D7177BEC7A15DC2C92120ED337B08ED13B13A
+32A0AB9CAAF7B9977DBDBFBD5A4DED107D33B973A8602436088ABAB4F7890C5B
+24398190F2812D21627E2CD2F30F8E4BF6009A82ABD5D5E0966FA0EE62C356B0
+04EB823A44016E579E724FF2D0EE68F1381F20A96B5D536262D58705EFF6F51D
+E34B5F7BC89621CF950AEEFF1FD89E1EEBEB83DE1CF667FD366D41701CF11592
+09EF326F2B88B9955A96E32A02E28251EF9FFA8EFC1040AF2678455A96473CD2
+A97225F8C93ECAD77B478B6D51B70AA6D7A9A4A0B73D58470B10C75E2913734F
+7E6657F480E09DED5232123DD13B9FB5BF1DA7697C6797CD19399EB8FD6B87E3
+DBDCF54B0154A1C6564ED336D1908785A8A5FB0B145BF6ED7AD91C02D2E565BD
+F8C5A5F0A619E7B28B9A30BA16FDFCC5234F9891D3291CA8B27EB2A8EECE4ED6
+6E1DE553F845D3186055BE35E51C4C2F78178F93B12FFDCA3CCC1122AD68F12F
+2FF2BEF754A88535FA014CA1A958760F581E51B2C9D205F67F76CA8A73E835EE
+9BAF73DA150DEDE5BED41C4B37110F01BEBD3719739EB4DB4AAB9CA76F92C205
+9AF5C08B5F2DAF9675A7E07322452DDA5D8349061A01093C86555660E5D84A64
+F0034AA438655B50123DA3B6B3F11DB84A6D954ED765423ABBB9F45286869F07
+D3E7D68E53029914301A839CEF831D963195DA8AFE09C22F0B6AC38CBD057027
+512B802B53D6B1F16EE945B46B841C72F4AC91A7E6FBA7
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: SFTT0900
+%!FontType1-1.0: SFTT0900 0.3
+%%CreationDate: Wed Sep 12 2001
+% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>.
+% See the file COPYING (GNU General Public License) for license conditions.
+% Converted from METAFONT EC/TC and LH fonts:
+% ectt0900, tctt0900, latt0900, lbtt0900, lctt0900, rxtt0900.
+11 dict begin
+/FontInfo 6 dict dup begin
+/version (0.3) def
+/FullName (Computer Modern Typewriter) def
+/FamilyName (Computer Modern) def
+/ItalicAngle 0 def
+/isFixedPitch true def
+/Weight (Medium) def
+end readonly def
+/FontName /SFTT0900 def
+/Encoding StandardEncoding def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/FontBBox{-210 -359 1376 844}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11
+69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB
+CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89
+F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3
+F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C
+EF25195F68A2A98170E4875AA1B1ED6A435B5950D136AD73C6971F428B426C43
+EF6BA04718C56B3F4BBCDCB96EA318696C5D8219438F35CDE7EB43EA820F8071
+ED3A1711AF5838D3BCFF9EBE45C1D0233E470FBE967365465526E1B356B5FA9B
+EE60989352F1A6BA7384F7882FFB0FB2572BC58896CF6D5CC0FCCE614E95AF5B
+661862F6A9EAE5501CFB34B95B833FC180273FD88D23FB68AD872E49FA25F76B
+C922A11DB6F8C1C06897034CCCF52DF7199EC7D17771C8E640088AE27CF1454E
+34B0DECFFADCACE80C197443563ABE34BC422AF9C65141D6A215839C521CDA04
+DE75B43810A7E57954F25FB8514CF3F1A0996031F3CD9DC9D37A8BF28C7295AF
+A8094842C0528401E61EAB53E4EEDF7820C74B5576C30A61A98D3657F7D40FBF
+ECA60C44B6EACA558451A23F10AB2350E40216C1B074C0CEF3BB61505E9D3AFA
+D0E54D16A6462AA90DB9EAD539D8CA243399DF4B1F0120D28B7133DB7D9E1FB6
+3B9308A0B937FFE2140DF6725E4FA9F123A262F25401F4124B7B21B96144EA5B
+B7804086A958A37F1AF271B4E42385864622093CD5982AB635B1D953DD5FCBEC
+F9094062C3BE52EE0A67D1F14DC6447B613F66EABD8F648FA9EF53F7B4BEA58F
+3D31E45BDC5B055072F09BEA14526CB74EAAC483E72C05CC9755B8BF267E9B67
+B2251E029F1CFE2A71A2CC879076B11717232B16D5EBC945DB067EFC870CE89C
+529F31DD59882963BAC745F35E0F24A387A2891C43C7B444B25607C49F25EBED
+86B1CE2E4E2D17E888A6AE69C64224F7C9334D3290291E6F3874F9F48564FA53
+9BEB4B99C836653A3050A893EACFA4DE898166FA521AF1D2FDC47FD4DC345331
+9ADF6A0D1E7491E51313D6BF89706FAE2CEC255B464D479D6EF8743FFF28036C
+80CEC4A9219C8F4A9B31248F03AA07329268F44A317997D469E768C4461C0EBF
+AFD24265AC7840125D9C77BA76EC22331C2DEF9A2E85A226D4DF1AA509737DE5
+21197C67E3159951324268E51CA72EC227B20A080808C7300708BE33F3599991
+D07DCC84F7721741FB17924690AC44621F6D7A1C21BC2531C8133652D013BE71
+5ECE4EEE1DA1C4DF97A1B435BC1AE23B20461FC129994E37BC2DB86E5487C9BD
+B503D6E697ED90E3ADC4B74DD3B682C3C75A985380529B43E9F27F411DA3EAD2
+EF737DF68F9858E539ED637A3A637CB9592937F848EDC787B34E644F5CB871A6
+339B8A754EC9F02CD6AACD45E5B15CA0787876D75A38C44652325C27444C5C2E
+E1F179055AE55D2C4D4F12B5B8758C87D68C611D1066A9D8C620BDC0F22D5DCA
+B19AF6D54931665D840B3BD946646F58084A7FE5A196C0A0C76BC51B7434ACE4
+CCBEBF778CECA243AA068FF90F702ED2F3DE01FADB7CBA2B969FE5B436289CC9
+216E51BB9FBCB98945611121F5731533BEFE65965F143B00A26A6DD9CD5BD012
+DC48E4BB72EDB0F4C743474905B1E7DFD42DD947DC91B8B94FF94A43F0C27314
+3E753F3F77E87041F3E785D5DBF5A42B5F5DF1B0B9984E3474A9C4554A086B80
+EA65DBDE0E5455263040268722EF4D1102CA1D4A04AA7720241888D3B8A97F5F
+335EDA4BCA1FEC7EF283ADFCB4E87AB110217E0A3BBB290A575B952A8F16F10A
+FE9208DF0CBEBF6566D47CC0AFC93110751B59EE6DF8A23BFF58788E63CEA653
+22A747EE3489CD1A6F52BEFE8FB3D49A7484798BB629601510965FEA5AAE8458
+66983024934FBCB6531F907E7278FD0770E03965BD95C3022AFB919E0E520BEC
+CFCC48F891BF88A3C88F54091C8B09B0D8F00D4D261DBB9491F445114FB265E2
+38F5DA8F3183DC23E00484C793159A4BD8DB7219686FABF7B8BB808537ECD6F2
+2EAE4ED626CB161A51C896786645841C76735BE0C2165334CBF577829A5C77E9
+66173902271E7160B6C5D7DD4D7B0874E9A7EE2C5E078834B951A4FB26544488
+1CD3279F060357ACB962EC7A5CAD2E7DAC2D9C1612EF7EFEE399E838013770FC
+07531B50A9326D5103C15E8BBB23AB548C2BEEC0E0514DC9EFA8531FEFF6298C
+4728CD0035768FAFF64D5C0D1285707759EA2ABF9EF3AE60FA44AD025E2A2E41
+B4F6044DACCB2B04465FBEA8DEC44C86E2EFF0CE244C8BF9D183767E2A31951C
+63F5E9501D52B96C2466FE194D253C3234BF4B8F436A754751D77B78C50CC6E9
+E86B1F59A4199ABB5C36BC967DF98C1B17BA3BBD4201DC1B8CFDB99D1CB98EF0
+95DB83EF4631B548E54EA57F452E3896BCA6B4188453CC7AF118BB135E705123
+42821EFFFAAE8BA4181A6EF2D2CA5F50626F2651A7FB656BE873B8962C3AFC9E
+C243CB7399B04AD778AAE62846C0FF19688AAFCE8461B3D81A1F50D0C0688716
+06D4EDB60B94C6AF35DAA2888C53D6247D7A1CCB22A9BEF7AC54A52EBC6885AB
+05948DAA4E8A44E85FE91C5E0625163FDF2249BB8C7BEEBD84C16B027A788F40
+6EFD35D5F8117581D1D279868906C02981DDD3EFFE84CF9087B5735A9D4BB3D7
+821516E8D1CA8ABE871260D756447BDB6911FE99DC850849311E3CAA83C7DCCA
+EAA4022ED2D17B1F65EE64FF20157DBAAF817F450003E8B8BFAA8A9C9653D2EC
+56876CC04A46AAEA702B2D3D70C5768C0AB3334CD4B64778FC640962BD87EA9B
+A0F21A0132C706675AEB9135266315EBCFBBD358676837ACDE00894CF022CDD8
+965A31C4AC19482CA68151B2A144319FBA904D879C910CEB15799928220DFC4E
+CF5B4A77D36B2A1CE58CB3D2CFD0D1237B3FD94524971ACD40094856B12D9049
+B4A3BBE5E4577DA0EAD2428EBC3518950F8F782124E92B59FFC977DBF5C007D6
+32AD61BCE88B7A49D7E74CE274CFB186696DBE630BA7EAC1355C7A8D2EB1B539
+41ADC76733F8E5FAC431AA012B9194054F8C0D715640D56BB0DA8A1AA943D844
+B4F85384602B9306D371684AE1B93C6BA9E50BFFF3BE09E104E14EE9649FD4FC
+798AD68FE377490CB2ECF9F16E3C80DC2BD05C14EA2C1BEE87B1B787568C9986
+0C48F7B68A00AA79BFC95B08EEFF57C4AE4F5A4FA1AC7BF9404BEDFC78ED012E
+1D8F2129584DABDF695E6C2ECD03328C7D0F204A3B093CA9123BA3B044560FE3
+C5DEF64D7D71D4891C14F42C1AB7897DDBA70762B57F8AAF2CB8F2876AE8152C
+09A3373BD32479CB48D746DBB6357102E277B63263A28E978DEBFC432B64BFF5
+E4EE4268600F85CC0EC177111A6BCC76399717EC8EE23296F33C16CF345CA680
+9E0920A9BF967E563B36DA5DAF39FCA7DA9926147AF043C6C72A7668ADC77E5E
+F93F5C89FD5636AFF9BEC1C0E35C4BE54F97363B5B6A2CE58CB48EF44CA9EB43
+40761A8FB358F5D55533651D791F5D8481C6B74437AAD1B718404261224F7289
+90E5BB9575E230B0127A819A6E27C71C390C32EA39D15855917918D731C0127D
+5465D202056EB5EB568FBD90D3A0A3264F70046B4736889D386F4E1114344F77
+AA7948D6E512836F83C605038A8FA0AEE394CE83436E9B3CCFCD63C4A8A6E52A
+5AA8471D287F1C04B6DDE1FE1ED34594E64A5F5F8934D935205CB32AA47C18D4
+42FD9E99F94B35937A2474F695ACE12A66F596DF870A3073E0D1703A1C6A73A3
+71375FA8CC621CD50860AD79D295ECE1A7B6587B86897AF068D2B7D25B1EBC12
+9EB055DE5359CF88B77A6480E975D2C78B61614D261438028C8E26A9102AD156
+96B2CF5678A7EFC4FE1F03B5161952592E533C82060040611396581F1A77DBFF
+8C55231B26E708F4E454A1FE2107B371CE5D80AE672DC6D18D1A5DBF53364BDD
+D7DC535257D0F5F53BEA58A7E0DFA3C810B88268B86A3EEC2020E990AFCF0D0A
+ABCB55D2BF52F2EFE49FD9878200E31B407B8B557E0D01D16A142C85824A38C3
+760AD42D773507EB8EA56A2ACE521D4ED29199EB733D598F7EFFFAAF0DC9A6C9
+F828FC71A679EDCE7A35DDC3AACABC4CA83C83E407FFFFC7383FDACC0F1A66A8
+81BA25C36C530C88F6424FE1BD52FE08476689354B337A6CFE211D8D39624776
+55796CF77EFC7DAF2CA7A39AE14F2D0A58A1A7C65F656B5E89CBD5264C2DAD1F
+4AB387EA6EAABC1214B58008A2FA7B1A00818F911E727EFE61ED7C48B0F9D65B
+1E974A9E6FC3D89130FB541A33C18EE274856C9BF0F7B0D33BA8EB7129C1F444
+CE4DE1B824CEE0EDB2890D3E5945EF265D6DD1B51CD2ED4CDCC5145DD07180A8
+849721E4E4D545C1D9F66C7EFFE32530B02636A1132336D3C21252001FB9FF6C
+56D848F46BE01BBB437B2273D5C097FE972352DE294B83455E878C87A991E6BD
+4FF89E060F1B93C3CC6C84F16F64FFA7CA0CAB2E8860AB6F61FA0EB60F558AF4
+C9729EC1672902C044289BFA8B7CF2671C173EB2574007088A67BE90FAE9A0C6
+5B29FB256F0D7AD9C42307E9F57DE4A5542CF83545BE60C3D0954E2ED6E6F3C9
+E56868A62B3DDCF692FDADFD2B6DAD75A7F4A4B09682DA32066BF35501449DAA
+474827891C562C4C0CD113BD9D19DBBDBC64E6F59FB422A94DA9D42D253B440C
+C8D54A1B07AA761A7EB309A88C5D9668F6C99690AC6E54D998B8E441F3161074
+E3B41F6053D276DA96EA25D2E4C752EC153DCD59735AD3211AD0499A5B9EDB35
+A5414D985880E0EB45D64D88A870B9935FBA7CFC215111A40C5BCAE33D14D531
+C77AEC1C33CC62876C71311D6FE24AE46FCA7003A22251C6FEAC36E5893F900E
+0E553F4927ACE6A313FF48C562950D1B9DB8A6631974ABA413D5B4DC61C35CC6
+91C59BAF37842784111027AB24DFB3ABA3D3529FEF16DEAE8D919C83009E7784
+3AB97773064B3E71305AB9DE7FA9E6379DA6E19694FC2325AD6DC1446B38B2AB
+5B38C362FDDF541E5A2B076F4D900E99AEC0032E11D8E8DF94FEE7440A64DAC8
+E53E1063BD783CCDA519B1B3997620BB2E99D991D64047A5758ADB937DDD11D6
+0912E555A74ADEABE6ACA9EAD96CF2C11B51CE78BB9C0ABDB48BB8439B6CA23A
+8418AC936A40612764D8E27354230BD298EB33D9DECA68CDF4835B961DF1C0D7
+FA6E43AB24263FB23EC2B4B337CAD11B818B9B0E66A12004ED71E4C55AA8BC09
+9745935F062BC327EAFF6A2F3BADAF809B06AC878EA65EAFB4FBA6E16CDEACE6
+AF49E83746B3382E3EBD06B08A26B3C704E637F8F4A6F6A1C0F6EBDA160AF440
+4A212F1CBA96FBF72CBD3CE298B4028E29C5C0470C1164B9B443A01AA1DCD71E
+36D196951E1C8DED4F198DBA7A8E2CE8C468D67481A68829A8C530D25FB79FDA
+553237E371CBD214054BA9FC6F3B6DA6C7817399A631F15BB446E2DB8F2C33B0
+C9BDE11C460A0091243F23697EDC3EE66D9E70943B665F73F8A8842787A468FA
+39B09605EEF2FE6BC4DA19DF5F562826CEA8A85553B4E306A223CE4EA639E0BE
+937D726C89FFDD903D40D33E727B29311A08C665885366C0A81C4BACE810ABAC
+E7F22FFFF84B1BAA88D51C54EB589A6568E2942E46B029F2CF536705A880E4E3
+BF0F08F586A85B20A9B5773B61D516185D744903A66B75F8C04EFAD3BFC04541
+10A0F057CB7987E0B716993C403E4AC4DF1A89D840042BB77F38A85B06C566B9
+EFA7C9EA0E27190E3EAC23A7183C4B311BDF808BE66F6C580A811508DBAB516E
+40BBD70466A4C80FCD9929C1D816AEBC41CB947DFB110A5B43A02751A5546A0B
+6F3E9899442769CD26A4E0C5F4D5016AAF1EC02ACCDC2308FB27EAC73504F41E
+DA8E84C69CBEDB0549603C0727A5F62163EB8198C8572F1FA15874669244F944
+B0AE721A2BFFD0BB0674D6575AEF4C27BD19C32886971398C48739486D7B8A84
+26BCFCDAEBD1AFB7A7ED99D62EE3584257054325F621D13E70A4B7BA4D8698D0
+3CF2BC22C2C7D09E1D0D4D02C5009DAD1947C8187FDDC20019E76A7776F236FA
+968764FF657D6D256F683EFBE41345CD0BD1FD6C79D15D867E142AD6E6993375
+D0ABCE7BA7EBECC4E9DB22A015221EBEF7C9A696C4DAD9C5C5A42A78EFD1C11F
+0C84656A6780715C5E152957FD1F94EFED513C70F7251AC329B0AF0EB7884D8D
+E9C349DCE5CF58EF5A20705436FE0658EE9CA27A890C1ABE9D7A253E2DD2510C
+B723392E3F9A74C7A219299540E5BAC8759E8F9F8AE663005CCA4F7C008105C6
+77BAF1DF07C5ABAF2528C5D05CBD98E5C545E92F8E77B50E8355308ECC575F3D
+E18E174F6D518807D02C0E738842A9804676D4B1EB01B9A03755668C1ADD63AC
+B5AC29593F93D4857290DC1397C44AF56DEC6294ED7896326E24A0D47CB4C623
+348F3A1FE8426CA4881EF3502D264D57B39D8EABAE1329E588AD8CD668493CA1
+8000AD32EA9D78890B7DB63B131A1F7B87EDDFF259C641D160F82C924D3BAE8E
+7BB33B6BC57F6A6662759B65A8135C8E1DC7088D6279E7AE6D25E81034C170CA
+7E61C7D9584070F4FBE9D0CE98E412010BC15B247AE43B58F8DBF491692E8AF2
+D73F6A5AF8035C49E4CE27842C5C2B88C96F84D2D1A94BC62D842200AA9AD445
+90AD5F6818CE0FAD86BED3ED7AF5D06C23A7B1C0E16F3CA88CAF9D859BAF4854
+C5CB185148CA6727153880B989E3687FDA4BBA7813F98DBDD946E355ED1F3452
+048AA7F0EDF2F772B9BA1D817D20E8AD164551F58A49FE2896541CBFD4951615
+1660B838703BEA7F9DEB3511191D292D294D50C9510CFD28D77A609B503B9735
+F814AFFA84DC3108ED658D753292412E1BD20A8B45C65DE14E9CC2B83BB642D9
+B12104F83F5B68A71D6747595CCD064AAECCACB1B85D1B6ABF06A38B85FE3341
+FE450335B137CA80207D88867A43A9D4FDDEEDCB981BA80871AB1502D80DA733
+95BCA835DBA77B28211FD91795806B801DBE77B0098EBF827C53536033120294
+4BE1362D29F526FB10D79C837E8EE64EA3D8E295AEC15BB017C8D18F4EA1CF3A
+9B7F2DD155061B0AA55A9E8B8DEABC67CAE0D1413220403E4B57F60152B430C9
+6E9A0B88732560D04E5E9C71F8BF7919570526C92D517B2DA362619322E10203
+4B5EA9FD024F57E82DD0F8301E271E252F8D170CA31B2961DB4C9C60E5C19306
+B199C28ED9C017E0305A0836C5C74EFFD302C62835F12AF767D539960E642100
+B0C0EBFC022651EA9305286E320BE4C135BA6A821942472421D7C24D4DF2FA84
+E7FFC88946D757D62386143C32E53BD00CF49D459E5ACAADBE434C82F2B3EB1E
+58EC96F58BFECA7110F15E19FF489044CFD49630415285BDE6A9D8C2DD263F7D
+1B4A8F90B145751507AE3AD1E179B5FA7475BC144DA7AD07DFD4D3106079A36D
+18771FD02C7C4569581D55725B5F206DB3276A13CBC0EB3DE7F9085FD69CAC31
+A111D98F2099F0E770C5299221A13865E896742215AE645B8BF2FBAC45EAC426
+B659FDE76FF925F924FC95B24F82C503D49FCD5008E8448ADB78D43F01605B95
+0F3AF6BF82772093C6BA151710720D88FBDBD7F91548F44CF99EE1E646A4F9B1
+8CADB5695994BE6A1762074169263BE355BA6F7181D35740F05E52C3B31BEAB8
+E1BD4D7B418A019F2AEB94773574AF9236004A1297B981B5CD5FAACB58218CFA
+01979D62DCAFC235CBF69C99E171AC8A5ED112E6F2E395697DC8D48E670C50DF
+969F3B5FC6FDFE3919CB75C2FDB7E810D7C7DD6EE60F1F6915AE90F7B49BE821
+75AE419A2BFC55E2BC2157E635E6018AEB195F99F5CC39F2BB5797962C8CEE07
+36D5CD05544030F0D1ACC86B8C168CAC6D44274454E4AA7CAD3A4A2F8C580C56
+911A4F84265709195AD2886162183BF33E8AE06DFD0A4D19ECD6F172DBE84E05
+2EDA61CCEA24C675AA7545CB63A34DC535F127E668C52AC8754731876E7F8F1E
+95E0B76A9F7B6CFA6FCB9D760D309A8D33A660729F9E2E1A1F760498C875E93E
+C67FC8D3BBA23AECD64B49FD662131D2D940D8D5E5F3015FD8891781C3A34FEB
+774510C33915559DB092FA4DB7BDB7431E5F8A5714E0044D29F1946C997C9550
+8948DCECDD8194409C9107A29D15A7CE24DD0C1661495F541CD490F800A3848E
+8BFF0D46BC4B109948F718AE3F3838F308B512C2ADE58DB756EAAB2F3A8710BE
+DF4B7F7C38809DC48364E41B76E2535EFFE243981CCE9FAE3AB1C7042C2EE290
+7A4F67CB1609A79265A38ECB9E0766D8032ABE75712DFECD2A617D188E5134A2
+7E8A5A106D86E395ADE5035CAB53A30883AD0E478802D0CC5BB2D006660FCCC5
+1C00E86B378F07A32CF7B87A3D351E151FC5C0B3F80E91D5ADB4ADEAAC81B93A
+06C7114F4AD6BE959B74509EE24E3CED4B1FC719F4390767ABEEA1F8653C2ABB
+F6384011FCB599AE191A2FA2AC15CA290AFC02A09FFABB5F96312C2B9A22BA4F
+3C62EAEA569259AFB5A96A0BE5BA264829CBBD273E3D6DD2B68F6F4201E8E71D
+4CA126DC312F3BB0F94AFBA79ACAF57A1CDD7F7328DF1CAFB920B8AC2AB00DF2
+FB0A2B19553AB58A29DB3439B125CDAFBDA90E38E1552C6EC33B2DF2C18AB0FB
+3774815CB1180BDFDB355963489C3175DB5CA612B4D67F8498855822597126E4
+FE532300C341084E1B1835F9158CFE83C4413CD2F16FCF27146063221F5FCB8F
+4793D691586DACB628F3C6FFB99123DEBF9510FCABB4488B685B409A70D139F0
+6A0282285E5F2B3F2D460067CEF741400C570F8402F971C275EF00278C493B69
+266831FE34FA75D0F69C92390E4AA06F9D12D51E64D053409ED44A232B3192CF
+E265A0F34F72531A3339CE5E1ACC4E17A9631BDA6402DA9D7E403F56C74837BC
+BF3F167AA8A10AC0EDF889E69E407E0E4EDC260F3F33D3739F5910527C9A2CEB
+A09A2C556D7C9235240A27C8F93262B6330B97295833BF165A46C57EEA148A65
+F470304557D3C5B733CA80FF41B8EFCDEE684313C171B4C8A862F1BF8B03B7DC
+0DC3D0E9E5FC8771BE5A0BFB05C3494D63FA5F9F7F756E3299B26701295073CC
+BEA51C346638B2A861EC7D90F14CABD2248C5CF72BFC26639574689609412B35
+FE3B3FF28581F2678A10433A5DCE9E5DDF6AFC7329E60FF71BF765EF0307AEAE
+D1DAA9F471A0E0CA7D0B08F6DD1C205AA7159C29F617BB3C8FB0C0ABC55E08BD
+B194865146A487F3843F681B037218C4BD5C7372217EC944B173EAF093D7AC11
+07B194B82ECCC74DE4830ED08047B935BF6B057D91C556B2CEC807E009E610CB
+F667B8F2F44590CEDA8D1CDBC4D20F3F418BA417939226593306DB2EF556B10F
+19B253DBB3289C0A616ACDE90B4B72C4F2DDF20BB1BC364E2B9ABA45E3C444DD
+FED494334254229F2DB30E74A09791A69E8620A52EC3A8AB36E6B2D68A182D35
+F5BBE508C03E2B60F679A1F1FC17CAA481C36B3E67F6CEF174EB4396E4D67A9D
+8209061B2554CFA14094C68240A8CFE8A3B1C00B087A33F5E0E810790FBC010F
+B4106447EEC505F322C4F100B33D6FC446951EF1E3B7BC0390E2A67D5E1A1260
+4C2C2AB6A426B8B038E2EEDBB1F63AF389EB1DC7F29214E8FCF04076486737AF
+D40B431C32FC363DB28AE74D7C08A5679355542890EE54BAC37AF9DD15A04141
+3ECB7E4D69D2D9C00EC73685E74E7773B9645F0239703B35D633875594963FAE
+9EFAA4666A89658D763586E7B93E692BDE864848CC732DF73A363CB67BC496FE
+4D76F4B79A54E95553153675A672E0AF0F5984604A25E73649993EC85472487E
+330E0B4C86BAB4DF6D611220029FC54C9D6A4BFA4C36107AC5008EB66FCB803E
+E5720B14EF205A863CBEED9B500C937EC155BCA00FEC77B493723D66AE110706
+21268AAF3C59A2933BA0298D1F27766AE938E17CDE33D8F1363D880CC0381ADF
+48E6BDEF3B55BD82B626E80F5014FA64B966511D4AF533B9FFECAE91870924C3
+113CEF98FF7C1D3D46EE22BE0725E3C0DF14AB47FD565D5D0014ED36A34C8552
+C571ADC7C213662058D44B18786727F28CB660B738180B560FEDFAC0D9CD8219
+B2BFD3852D68726C2EE2A9FE11D0A9AC74725E3B3062409183C653A5765A068C
+5F247BD87472592808C26E1C8B3F494F898277C0AC298D9DB49E020A36A8F9E1
+3136D7021D818A876F13387AB6FBB315878EE15115EEA81B9EEC3438A12F2003
+9D1000959B5F5A5158A450EB9F054F8D44F2AF27D2D6F83477110748A275A915
+B5804A8F3D278C01C6A7DAFD44C997A0DBB618A40B63613D07CFA3D451C51D33
+03C10894FCFFDEC9B497E7593C45B8F5C2BABD5289A526DB2A67B1F3601E0B57
+1EFB462B1AB6CC4BBF92C09593CACA2C796F2DA4EE87BBFDD82BCD03A208F38C
+A43F5908F4337D5CA78B984479B2CDD0FC2901149EE9F13F344B0B86E091280B
+17DF4FF0C26CE81F92620252A98957C411A2A2AD2CFB7E546D786DB112283208
+818DF43427DADFA4314247750657977FAF513D0D807D48989FA2FAE78E9CF89A
+2AFE21B84C2C91416191F3E2E8D867F7A98ABC7B725C97CDCCDF8CBC3604F2D7
+723852474F811D338292341AC42031F198BC59218088C0A31863B47F0DB0F163
+84A4F1E539C8E196B4A3FCF660A6A05BB8C3A5FD56C0B02B27FBDAFF95A05E1F
+43C55B706FC2A5EE52040D744A1DF18D435619D86DEDFC1C8046612AC10A3681
+4D09396F41E0163FEB1341BFC6BE641A982BEE3ECB9C7848874DE8831C777603
+EC9DEB70018F340B6F054E2CCFEC68B7B05E2A8E412461D41721BDC769BD67B6
+E31BC9A983B145A78A4561EA8F903E297B8C2C6E72A18AEFD6D7798FACAD3B73
+70933611A6C3560E6F1C40B84D6AB8483612F7CB94A0D0218AC49959D1C3B2EE
+24ABD913E36FD16208E6269C3852C71FE1D42577951735AB30E65E5297896E59
+359BCC3629C9FFEACBC97E5D20DED2112F66E7CAC5380EC67D7C3AF7108C06B5
+14056CA27646ABA7858456FD04C16C8EE6A517B122315925F704336249B64FCE
+B1778D94082239DC40998268A023C7F9BBAAF71789EACBBDB028FFCC6FD160D7
+4FE0505B23F74E1A074790626E66646F65133D7E3F4F0AD1FDFA816635D24120
+2B5357270FC15CB041FB85D2F56AAE471155968573B4C439ABB8FE5B55E9482F
+8C4AF71BF68325745A149CD38C1741A6771CF60CEBF7927D5D7BC896F525ECD1
+4BD25878595736CDF90E1BC0C46F760BA86B250C9B195E7857A167EDDFD6EDF5
+CA7F33929A42C4455DC08A13012C6B8EAC49BB127D950E619BC943CA995EB9EF
+6686AEF9E5FB2C146D133AB4F7E2FFFF44E01700F6F031FA39C1BF117197243A
+AC188D40DD39B82A1857EBC78C5084966CB1F824956ED9E18789D98591F262C0
+C5D6F8C2FCE9A151330C2463DA790C85C50087CC229A5AEE62719F4011CFC3E1
+A07E4C3294EF2E50E6E7E3968593B908CC73E801ACDB8B645C2143FECFFF5C77
+74DB00EB9774CE7C64949B1AF21EC1B218848E9E29CE91AFCD03982615563EDE
+73605E33B1B0E7E740C7BD11BEAC2CF89DB02DCC30A54D6B60C19C386F9DBA9D
+0819EEEF8EE302DA291E90B1D70CCF6BD5C958579A801E9D4CCB14CD4E03B197
+865B66EEDCB85F0EA2FB526D70A757CF8A7C5B37E05DE8F78898E727A5434373
+ABF98B839D0AF47E512F124913EF2A09918C89EE934DCBEDB8BBE36315E2A2A0
+30D3B7C9D4BB8F738CE8E686759EA931BE4CEFEFF3550A0DD64039C230A6A9FB
+F40CDF07EE15DDCBB38C2DAA5D9E328843BFABFCF12E93C4292186EEB8F51235
+51ADC3932CB05DA5AF20B551159F13B93D9B5040D04A29EB3D64BC3F79B2D06F
+BCCD7C932303E57E64C34D52A553E90C85A0877B57EDC3FE976CD6A3524D2581
+7CFA6F32579C54634FFD469D060D4353F0965474CAFE59C8C1F11CD1B9BB8332
+F72F8A46FEDC0851DF4CFFDC5659ED8BEB0E329312EC88BB0D08C5F12D2F5E22
+4BCCA17EBA9D1EA2E407FFFFC7383AD24F4187F8F476030CA1C8A71B0BCF4F1C
+290E4C968ABDBFA6D35CF856DCBE432D11F7F39D3EB87A8D013D6D80AA0AEB49
+B33188EDBA9C09F62DC4A7E06844A5089ED60D619956FDA33CA1475325CFBE1F
+A39EEE88E8B556C5822207ED746002311946570B724C597B33669C7EEFC573A0
+5561D4341C21CBAB14E583324E5B66DA0A753CCB6E4C801131726766D08794C1
+D9797196E98B8E3A5A1DD18270374B095CC3FBE4B17037C055DBDC12C846E02C
+FAE2147CAEF216A5A1FECD65990AC2C15E08EC30F880F99229A9286C4E65AFC4
+73409A183F82EB2FA5E5B60CA51D1490C53B9A81FDA289217F14F95651290FA2
+1D59E8456073945B10B7644561C15E5D0014ED36A34C8552C571ADC7C2142B29
+4178DE58D98192144970EBC5B25A613492A174655D85678BF3FF0727B94E23FB
+0A1EFB195DEAD35D80CD4D1C6EE919C34735F10B3E2FDDB5298E72FB76777454
+D420943A4876541551C769EF6C0B1EDBFCAC616DF1A839E2DF940F9A074440DB
+A4375893FDC73080640EE3EF6BE87EBF525AB4076263B49784AB7D637241BD2C
+225EAF9E732387D4FCEA7D97445C1DC9386DEBD1987279C753488E52F2FF97AE
+49DC99A22855EF728B3743F2B9496B3AAEAA48288A3818DFA171AC54CE1D6FE2
+4AE46FCA7003A22251C368E759A57C1B1D67B5F907B4B1304696B77343F1742D
+54356D83326B0D545CE6B8DC49DB5726A3656FEC57456870BD7E64EC7F6DE890
+4092A8B6845AA15A81595D0492029A3F4345F9908DEDA9A35BF9298A753B4360
+FEF54401B7FA5BA81CBDD4A9A4810B46781661CCD72C20F5E2444EA6AAA8137C
+474CC789F9566A0DE3C615698EC35D335F66E65680859673EE6A440A589B3603
+90E9A8A5416B446F1CCA55C9BFCF1FD7764794CA151C70B380466E377DE82A00
+329C607B703A9E530FE1BB6705F9661760CA5A4D28C00C9BBD26C8A970802430
+17A0AB8F65ADCCC409D12F86A14DD4A5C7DA308F5C5C3C70A89D76AEF549FBA9
+1D657FF06AABA5BC25C9F83F4652E8B0010BB095D1BB8CC8938FE1A725F848F1
+5DBAE9B5C7F3767BECF1C2862197DAEBE12E9FD441015C20F8A2C7CA041DB79E
+42CF5856A0F0397161046527138CD2A6B83F242CD7D3BBE4559246C9FA7615CD
+1FFA7D72E763B487540BB51DAE959137EC348899D7652E9A512A4D6804B4B23C
+BBAFDAB3FC976E0DB7F4D8FD546F0A68E6973464A7F23BE4AA34C545F35E0F24
+A3824D17FBE806BFD987609F4E2AC1F6C8A56F2AD7BF3AA14B3AE79FB3CAE949
+DB069E5C69D4993E654E72028390CE59D54CE093637B92A283E72839A9806A70
+E8ED74EE7E53A7E4B53006DBE34E767090910A9D3DE174AD6ABA512884B03BA3
+C0E60A55961A476567275A2C54FB59140F85B887E8C2B17A5482CC1BF1A0C9DC
+9D7A3AFDFBA7D7963CEF2742BE14F2B4C476EC9354A759A85F77B928F8E2E6B9
+904BA52EE91D736A70CC3AC0AC13066B2CF6DBF5ED05609E3009FA466B17FA0A
+97BE72D58FCCECB5DB7221EF2057500237EB1E1FED95683C903A99C7D9C0CC4A
+4A89B8BE23C75AF2781AC711EC68B29FB5BB1F3A6D5103C1AD19F9A89ADBF284
+2776BDA75B3CEE6B8B16A472C9A1269BFE3A492B5749D402CF176A499008BFEE
+4C5F7BF6960C8E0FC0D69DD282F277DBDDFE4BD695497861553BAF0EC4FC2FB3
+4BEA516535300E343C13B7ADD37B1F6C29967529A4BAD58E1F82282E4552EF40
+52EFC81F7524E83F7239E6EC34630E3DD28B0E0B15E423290FF879FE8BFC47A8
+6E49037E8773FE82B7E0A62712FB9B0C033EEAE87C5EE1B4EDEE8DBECD8C5EFC
+80A220108282768F39E9641FBFA6CC820B82A22191BBE5C1638CFA5B1303F17F
+B746D97881EBEBECC416209F3BB8CAE9B1539EB6A8721B67003BAC419B073DBC
+56F0FFFAE7266ED5439B5631B2420339423A48576F652E61A78ECCC81FDF9807
+01DBE5BDFC566A58B68454EA4C2333D775D4E176ECE2C70273F41162443F70DA
+337620EF06BC9103D7ABB95F3508ABFE1017DDCC5C38291E2EDB6B87A3710F9C
+7066B862C64CDC8682F4371E54A8B358C7B5EDCD9B5D8222102AE686821E08EB
+A5177C9745B8EAE3A1EC4F117A22B0C1AE7037731F9AB167B820AD80DF62C405
+A550BB7ACEF3636510604ED2D6C44B2BB2DB81ECFA40B16226B9A2EB39D15840
+EDA7AEC4B64266481E4F07321F68C4733C612F428F425A1943D6F8511710CDD3
+BB5767487B5266E5A4094DBDD786B1AFF698A4E2691DEBFDE89719257F780623
+83D2C1A29078415ADC8A8D23BEA699DC2893D4857290DC1444A646728330B9D0
+ED26E6FF885E2D243E3BD2BE2F5EFE3127C302DDB1E87FE23F11E21C8A8C6F95
+0DA342BB5A92E860CFCF81F4BA5477FEBBF2BF15C36AE5102FE3B76F5D2F9876
+C108F561111A87BF5A78A036958D506F0D9E1C10C45238CEFEDD60D974075C16
+721BE2E738CBA1275687CE7E0FBEC4EB740B873D242A181D3022FE0F3C65FF93
+374B1C7F466D85131C0EAFCED360A9270BF7C049F570B5184EC0051F70FA13C4
+10FAFAC56DCBE7CD996573A6D0313F55091CC5BCC1A675A618D4012B6ACB6AF7
+0F12FF3ACC84F0E494A30CF8D276745C88DA2EC25B75C01085EEE69AE2E2FE28
+E7EF6933B10C9F7CE2061F36A107702071BF7B2C3FD3B8D5CD433FC2636CE834
+0DE56947F7970B76BE54F518A09CDB7F557F30E8A7B10F602B7934BAFA5000BB
+921972C220D291372C1B05B6C1427F88669A1995923B5A13F14B2B3C2C7D5C61
+F187E979A23EB33118724176D9A1530D401FB487532450064197078DDEEC01E3
+0AD9081326C9D3A7343DB2FC155A510BC2131C39B17A1E279BBE7401186B355E
+58AB8487FFC56F020A0D5773D1489DD7B6F1BACEE4694763B342DCC668575192
+24814F28DE13B974FED7474D3478BB816106ED980BC9994C48210070AA4CFAFE
+399853E3F9C47153199DD531E1FB405D9049F0BF2CEA26F4E397C0F7F51592CF
+4C952C8B7044767539C6E314D908EC23D286C4935E67B3B9339F338F77149907
+16C2D5D77E67CBE2333ACD6F7E5034A9ECF725A526C6D9AEF0762EC59F4F080D
+DE019C00578B69CBF60BF5CAD8E57397FF5476EE7A86DC0BEBCD356D40C53D50
+8EECDD32B10DF6141F4C5264B9BE3BCDABFC49721A2578B207C8D5950B844325
+3C759F02782BA38C96187E050534E73B9218216718410E69CDF6E34092818476
+9F560847BF8C38EE70C776EE7A114A4A817A05A3F34F3175576E4531770A00EA
+4279C811155361073F65BF9F09CAD5C9345E05BDC9E879EEEBB609EC1AD41DDD
+63C927878CFF6276A54B70A66CB292B593C198EB9C0AB2645E8040D2A098AEF1
+086AAA8EDF209EFC9AAE47C91A82555B3B2592FCAFA57D0CD8DE86610384E4C5
+4102864A275DDBED2464E20312CFD99DDA77D46407DFBD19FAC6A39573E02E96
+FDBAD4CF2B0D79D17114BC75D5437B64D1159EC8596C01329CB38269BDA3E9E3
+38FC1235AF17FAA093A03ABA1F25989A475E324B2117A94A65D609E95DD11CF4
+FC0BE4C5532A3ABD21F49B35B7EE0F61393BC976B1D2CE23F32004311A7EECFB
+4CC59352B03696508616623C00E7FD4C56E69547B5F5B9E5E26A35D18D789AB0
+841E5820FEA8F638A46CCA01C5DE1A2A9A74137B8F33DDB8DCDDCE93C105BDAC
+634953C121E92EA2733D8F29E936CDBF37CFDABDE4D99752B6EC445AFD7EA207
+100230F364A51770A7CF13A8250B9C1A0D252777A7696722D1D562D4AA249D1F
+E4F0B9952DECEE2BBF6631ABAE6A96D03FCF803CCFC1C9F8D78750CC3B079243
+344518F7408D79B93F9B37BFD1A0FCB1710F359A649F669DAB577F37002871E1
+7B2F024959C0B43DC6923464D018EFB62536F7C52F7BDE58D9816158E8C6B9DD
+4C3BEA5DFFACE2B5C030A7D2F02DEE4BE14979CFDCE5117CB2E1337A8DEBE30D
+6791EC4E89D76172F263EC0E28EBBDFC550CBE12A13C8B2D6DAE2C3C63F21DFD
+8B4071EAC1A6A4D7A43E8902A5E8A2DD3A24389AAC09586077689354781239E4
+8936C705A92BAE86A97EC6F6BD97BF6CD7E211F0363C070B8712C34ACFA17AF4
+40569D8ED4C1B320375342B8752BBCD7CF8463EBB376C406BF6591E6FE5E557E
+2106A817A02E1AC882503F4DD682DCBC9B6C458A3F4A53139FCE87F14739C514
+452805FABC555605418D851BE78517A0088802A89A1D1FC0384018C2D56A3990
+EEBC4C7CD636C6AE76C2ADBA3125358ED3BC4DC803082D16C3E275C94163D689
+B7A043AD54861C74726264C1BB05480AF125585F7C89C334C577F78D8EB282C2
+06760D8A721F817284B06862E7B1FE67EAFA4CAACCB1C6945362973ABEA2F092
+A3E45DF945866220E6749780611DD23E08C45D70AF7FC68B14E0F24DC1ED9D74
+EE64AE761F12FF22794C96F8B565E8CA669BDC27B97F4A0F15C93A619D23382D
+4BF0ADD34C400EC269707EB08A5ADA04CEC21FFE4B7B27A5255D6884C7AE701A
+4596C87ECB908FA96EEFC59494047EBE0D2FBCD12F18CD543039DD09679BAFD6
+4EF6E130EE238AAC05BECDC1B077FEBD0D485F880314EBE049B2DF6C7ABFC840
+E57074709F7BB73513A9C36DC656C72A66D3A4359A8DC08CAA7A5191F1641754
+1DE0FAD43B86426AACF2158538F0477F7222ABECE81AF10F3AC45F63D7A5E98A
+BC7B33919F11E16B73526B039A6BB32EA343C41B925270D8F5BB64BF440ABF0B
+ADF1D3B55C7FE80F025F85A1FD11E811405AAB3A4638DABF428F8BEC2DBC4AC3
+6FF1FA24B54E2248DBC10CD7454636E97E399A7E06CBC677F0352167E53BB561
+5E30780458319CD708034FA5D50D15A83A0B408603CDC6B2E6E8EE3FE354B64D
+87C7DF67F88416B4684E61F33BEBC1561BA8D526E8D6153D01902A7B60645B15
+35CF943BF2862E7DA76FB26E5EFA07E8BA7691178C0D596E109FA7B11F311123
+D77041BFF4E49A593F43BB91DFB1915C098DBE87B454FF6E93F270C2EE8EBDF2
+768EF528A49FE1202B31E51622EA3B992518581F1941B689696FBB73F3CA4D48
+000164D053409ED44A232B3192CFE4CCEBC79A9BF8A9FB7F2E3054A705AE4325
+CB1E30231CB0DDDDA3414F9F77D3FBFA2946EF02C97B3931A2F6F08731634F31
+FDDC662402BFFCFA1BF557F94B1FE9FFE39CDA38EE1FA9FB5C750F71C4AB1797
+7A1A7BEBC63A333B4D5F9E8FFE14EC52AD6BC703EB775EC287FAADFCAE91E8C0
+85B8FA4718E8F603A3CEA0D867B9A3843CAD35146BC03E2C654BE6C207EAFFF8
+8871EC117AF693E5EB6F32AA7B5F87ECEE98B147FA6DDC951DA66FB4F34E36A4
+502587042C7BF9804BD0F19256EC5A6D4479CA0965A7A918BFCBA0E1FFC84865
+E2956B23FE914F02167E4F1573A4CB68BB2F0FA2C76AD93B70DAF8B686861D90
+0069E4CAB1F6556AF49420037A908AB9B06BA8BBA99AACE0B524CA6B3611F7BD
+56CF5269028A7F27D4C865DAA62EC2D4975E4C4BABD353D1BE1FA5202AC03166
+45AA6E79F82D3080BEE08DD91C16E50698C63E340D8906BC4BED2B581910D933
+D8A3E7CDB48B0D7C3E3FF2C103F769CBEC1B7ED0E2E65C431A2C270E9F700292
+BE7E9636ADC6BB45060C94C54B1A2A942B27D375490CA2CA59A52AACA65D196D
+846AC0DCE9993C761C9D1C789B9A97D64F2FD32F3598C8F095B673A1B277789C
+3C32B95E2633951FBC2E5C31D2A58E09065562D1DF151237137B5A5828F3481E
+E03232D0A0DA4A2F1D8CE9F946AF9F7CBC582239C8F87677EF0729F6A6507B35
+E8B56FF433CF8586CEAD196CFC2ECB2968F4ED48C4227144F9CFD841A9D8F9FA
+E80720E2BAF6E34745916CF64EFF4AFBB2C0D93C1D85E0635BF92AC4DEF726AA
+CE31E32FCA39C37DE8DFB217422F43524E56F4739E706965E71016AFE4CD49A7
+1C7040444074BDC90FF1692F84FCC3A3D588D038811B7C67647CE47734D1CC5B
+C9A9BE0E1BD3D01C6ECB705D2B910FEEFF1AAEC03675699D94CF5427105BAAE4
+25E5412FC4A75203F2B3BE4E30FAADB18C03FB174B84787F644C42555634A746
+81A192E2E22BAD052619A6CEA8564DBF7145BC5F59B4395881CCBAF2C42E4AF3
+5442B0E0652B44E449388FB7817A679888650573F1C9F7AD7CF20CB97F9C9F1A
+BCE4D243A13CD55176366B5B28AD89C6C140E306763B3CF62F8D188F20809FF3
+DB7EB158489D1634006A9FD5D1ED3DEB4D9C9CDE16A6122095C0F97115306585
+F5423A84C87C7BF119A77328520E40365C86A939704C561DE0ACAA6B4D82E60B
+C6720B050C37FB5A2F90A57149A835B02533C33B93EAA774D4E491C235FC89C6
+94F5BDA0B80D40BF0E8147397C75E26CA957DDD557CAFFDB72AF86488817BF82
+D908BF63F64AC0C5B27D74B2CC4C702BA0CCB76532F18575D38EBD126E622D0E
+2DA54AA0698E72EBE0105DD7FDDB8145CE371C46D33F56C836BFCAC1E50BEC9C
+1246FECFB2B19EA03D4882B82E16DC573B59817831914090843BCAFCDB8BB268
+10372F840D0156BBBBE2E2896CF3E5B7B98D9A4A9A2438E956F584599D03BD07
+C6659ADBAD688E2C594847E28D80D586B1AC6995FD6E17404345DFE38FDD9699
+6D3588587B2B01C3654B195AE60787DB399CB81A19CFC180BCD840CADEF7D4BF
+4E499EBBAB0AACA2517D9AA7AF0B6820671811D63EE05B49F9F3C45B01F05655
+2345D693624E2F4178381427F5AED3784CB873F37B5371F35AD451C122C0C55B
+CDB22E1F984F495B141F1375478DBB41624E57F1F0D63CA0B11C9C9735DE70B6
+9A1739DCAAE01F9BD3725A1D370DF51062DB9BEDC9492C1FDAD99D999345F5A7
+79E4D4D153235E5476F0B3A59CA465156722E45EB0B39A6BC253ABE045D02E06
+83AEB792A8E045D37C587DE43BA5AD2E24ACEA6774C91E41E88B83E3351CA83C
+F517684ED5C21C084ECEF4405FCF7B543310B17221420768D115F62427531DFB
+61E56AE4C363C341F1F04C99F38773F2EC3C62259F4C7C403ED553B9BD63F7A6
+50CBEA7F0F487587E28F976CF20A782776BE7F9624688D7A5C89C60EC5FBE63B
+EFFEC0446D20B76739F372C3103DA920D1A1F542DF2520F9CC5B7F2B9272A073
+5C681B612CF8BFDA13612D8ABCDC3C595AA32928A759EB7703F10907D61BE216
+4BF79359D1B296E7A4CAD00C1F7BC958C7B556C5822207EFD26576E76D31B23C
+C87BAAC65D3ECCA28EF7FFAA0FEB68CD49F45BAD15222735399B0306F96000E6
+FA1F1AD338CC17E17E0CA5C1F43AC1C08A2B50C3C786D15DD2581B17AC9F57CB
+2100ABF625BFB2F9B3AD38AF09C75219398DBD3FDD45B5F5A18A5544EC348CDF
+220FD68D1E5F12D02D00C3C5BA1F5D192C2FAADE11879DCE89B9ACDFD83095F1
+24486B43B8ACBBE65AC89A7B37AF86DC4E4AB89FEA84C466F0ADD0F75CFB4C45
+1D34B2C3DE31E4E520360DCB5829CB45EB3ECD1D3C9C550C26992BC9A2BF3A71
+8F0E6D91FE2FE0F6E7709ACD520B9B4C47E0081BDF2752F35E902FD0BB89B5E4
+69FDBC4831EE47591A10D6B7587CA36C8712E36D1C8D87FFC2A6D3E4EEB355C1
+0F588799D49C30612EE3079C4072E6FA901DBA4BB4CC54F9C3D880C5207C8127
+480BD8B8588BB274601B3119FE4CD94D8EE405956E3B9D418C4407E987DD1659
+74A8C447AFEB06E4A4AAE9DBE321EC7CA8CD79BEBCAAA4FA7A54B4EAC9940F6B
+866260134116D47650F83C296A65B677F99CB6978AA0E9ADED4A97E92F225C6F
+BF92BCCF21C753515F7C1D718777D5413F93364C25ECCB32D60ADEA0BFD5C81E
+C0AD7DB21F765FF70EE8B3FE8E10A40C93C99BB67781C0170356357B3542790E
+BDF13123FE450883DECCA7FF068C88E79ED8153105CAE3818E1B5BFC5D5A5784
+E9F1842149E54C675695018FF1765181852CBD82C7828B790D5A9669A707B677
+1BC0CBCED5F1607B675D19793B5C1DE396B43AA070D345E154801911586F2061
+A45D8BEA5711A149908D132DF202E1B5833C7DAEDABA4741F369EA4ADD2A345E
+E25B121F5A2A231850268EA0A8DB0CAFCD7C199D2E7DBC7D8A8567D6E3515949
+BF12A758C3C38D3816323CE98F9B1BD0653924281F254FC8A135610C3E738CDD
+A1505F27504B85F0F16989E85FCA275411E1ECFADB4574821F26C6740305C40E
+91664D0871D43F3AD23CAA6AC4AC771A78332421B4ADEEBEA1E478EBF5015DA9
+04398E85186420ABE61F4165003FE0BF954410455F1E1CF98E1CD9BCDEE59699
+3FF175F92BB48EE7E3D074F0471625BCB886B6CE99E03905EA5790FEC72ECAC3
+0C35FD1780852BF3248D6E1D4489289E815290381463C72BDB9B732001252A29
+42C6C454C2EC2E3CDAA0BBE84CD94A094C12DCD950DAD2F3EB28E8C2E5BAF75C
+A04E7D99DB37880CE772F5A9EAADBA36DCEA5054940D797AB7E3961E4A9DC844
+1FBAB5BD7E68C13693EC4D97DCCC8F893A69874A3F0293D687F8117DA7414B8B
+B7EF455C242812451BA9E1F38575A2A1E49D9FBCB26AD548F07DFC738AED5790
+00BFE3D82563183AF540749D88789C53BE64E7BC67EFA76F4B319D7B32722B35
+CCC9B8DF7A40109543A0E33F06DFB8454F8E31A1061ABA7C868BE71E233B74E3
+5560D4F674DD6AA349720167FC7767739B2771C9062B9B92C239C0E8018952C7
+AE3F0134DEEF9DC00FAEE97A20A63399B28E406FD90CC42B3CAA892AB93871BC
+EC8B55C960DACCC650EAEA2383627BF5736BCA3DE34E6215CAE3278AB3E9CA87
+CCBC6CFB22842FE646A1E2A3BA85107930B66DC486A1E1F78EE5C35B5647491E
+885469725CF356762F017408E65818FB07E86DAB7FA029F067A65A571A5E54AD
+F6E34988D7AF69F20E64783502B0495F201E46DF12ACFE83998EF726477292FD
+3F1743553D9D26389FAE433B5CA2007E75A36CB09FCB96470F81292E4437C8A2
+8F5949E502F7D48121F5EDA252F0C02D7FA31A958AECFB9BA08D6A7388E3464A
+38D1EEEA64071722A5C2CE7BA89F220A096D9D9F6D9DA7DD0EF8EA89875F1BA7
+2CAF550116688CBFD9976419943DFDE42BA1351FA2B4C0C376BE3EBC32606109
+5793E8AB02E2DD654B33E9B2F6532264D6FF860CA83C4820411C64DEFE53DE75
+7097F9B9BEA9DEC0412DC1E7F2FD6BBB7A442C60C270EE7CD449BEB637BAC68E
+68513D645170342BF3F5B6B2906690D41B787C20A359A0CF417AE9DFB34766B7
+3FEFBCBEAEE982C7FA09872CD93228D9FDD97CB2DFD3A8CECDF954E651B265C8
+DDB4DDE2830A14C0755F198610715497908DA88113F2A9135365ACD7E6E3A7BA
+B5B14E461261549383C68DFEEDD25CE29F2D27E7A53EC4A1BBDF2898F79D701A
+969C67C80F1C6A1B012598149E38DA769C53E983739B9E045F1681269E24107B
+CE6BECF3FCBA1EF02347B5CE65D99A38C4418DC3D038151619C6FF36619FFC6B
+21212750EF57026C436A844B59AF0F0EDC11C6CEAAD6D5DBB7A177821D9F63DE
+FBBD6E5E186ACBBD3FDE3B534D1676FAF8121DF0C1C992A844ABBD3EAB3F9B1E
+1CDA3283C0424B11FB2A612DE94BF4743C8ACF765712D191D61A170F8DAF390C
+7A5378DE013FE008DF3217AAC6D52F763A923535CC35763C2B61D2B47C0AA75A
+0AAC8706E18BD37D29A3BCFCE4B471F99A317941E18CA27973FF22A0D0A5D885
+6A27D13AB23F687A366E412839A1E3B88E00AD7FA9FA045C41D5986EB0A40B5A
+64EE578CB6385FFED63B16304AFB4241A91D08B46A45900A74132F3E037F3F49
+26F77E93CC404F5BA7A5D9F8C4C92A234BC8005B4E4671241A61E61D9492F9B8
+173A6C4B9D8F3151A268EBD36FCB34A44710846BABE1EDBB90D57A46B2993438
+76CD50E2FF8265F103D9C3B46E57D19F344791CBFB5F5BAF705B783CAB4846CF
+A15B31A005C2E3031A6B81AC3D0CC02D84D1204E0B540FD898006CEB1ADD9053
+DC1472EF927447DFA54E1BC558F3D4512D1AB5534D73CCF860F4D5E546A4A5E8
+86251E3B1B30472132ADDFC2BC4404BBB07BF72C738BCE8FFAA6135D164A5719
+4E1E9133C5F44E0739678FDDD206F4785B04C351B1F1DCF0DDDFE2FBF0567790
+6C9BC097C00A71DA032BA85036B11511FC54641A6B9763034716220E340B3900
+6E78E1E17DCF8DD2D5EEEFA6DF697ADDA60AD2549CE4F1D619A49399D391E7DD
+2A15F01E915C11EAAD0AAC6F1B527131E7274EEEAA28E4DC8398A231D3A44BC2
+9751CB1B2D860519384E909D9454FBC1E9DDEA7A46AE14E617E96C5195A29DAA
+B15D42B9817E73A24025E4D686FE17DD515FE0CB61A4A575AEB7D0BB7B21A441
+928177663BDF60082659FFD2A78BD26EB218149DB927D7A893731B17E74315CD
+86F0B80DAC54E27051D23EE8A56FE4A9CAD18D0139CECDA56F30DCF88F599FFB
+C52E4F30F56A0D4608DC7EEEE87EAC19E8DB993DAE9900211D9F79E244A59B27
+F237C95C7824C90A26342FDB0DD55434CC97FF33511D4A1879436E166811918E
+892631B6F065787C8C1DD5A11EBEE1C6A61EE417F8E4B45A1A7F1F50DFE01589
+E5835B0DD4BE4C4AAC9C5F0C596DFF489F6126A199A07F34F791BCD00514333A
+4FD2950BC177A79F525549B7449BE2C6C8BB8B9202B5425263690ECBB953164D
+0D78C30A0CE1F30EF236BC24765B6D63AF63741979196DF6FB2F2175C4EA3EBF
+4226FE968C3672FFD06208B0DD3FCD9E0602BD13C3593FFECCF79AF4585B72CC
+600CD3A21873282B98F5C481E2D0012A787FE5831EFC1FE1A5127BD552B9ED71
+E62A9A50627AA65BDDD1B3233B9397E1FE9BEFFC43989B5E6C1AB2DEF8B54FE0
+42CB75D5A25F3767DDE167F368E66F83EA29A812824BA6912379CEF50DF2BAE3
+64717D4768FD426A85C5EE149F191CA800EF6358DBE6DDEC6A071CEE8115D7BF
+174FAAC6A8F403271FF26B649EED25908E20988FBC4C0D0F3A2A3A48C18B5AC2
+DA8172A2FA4CE6BC64D5A1E9F9CE271D4EF02C7B3F4693DBD40C23114AF5F611
+8F174FBE4846B7575C84F336D46AFAF3B6AE9376E4B2B5C0EACB21DA081374BD
+FD3EE818C316B7D3FA7B56F5C509A9702D2EA19ACE398A99303C380716DFA22A
+CA954BF588F136D430251A144601DA87D45D7133E72A58E0FE79C07C7EDFEF9A
+2FE1D23AB12476A1FB849B502507EFCE18DFEBB2722067AA0FBD3918F7F9AB04
+315BCD13B77C35BC9661B3974327FE71850C5B34DA1E28C32DBF60C14CA596EF
+E21AE8BABE1CDC157D383CF8F7473B92B508491317B3A7BA41DB5929C1528624
+27E6DBD49EC5C8E1ADF63DFE9E3BE2B2ABD660D2BC38E64BB6C1DF9165E00D29
+054A5911CEB7B90DAE29653DE98E34B94F82E516245AB0877A8E26B0BA474841
+88FC01B0349E045E151E287A2E692C941D88C63D583D1AA7F285320CDBE800B6
+0F67191E6BEAF8EDE7C2B44A430F38CEF6AFEC51FEDAAD95397888B7D061A338
+769616C7C50FD29A563527BF8623A6AA5846D2821F7196DD6DB0A566363BD13C
+EAEA2571B27421D56596E6D3C83F5D94963241125C817D6EC5AD4F5B979C9634
+EA4E4DDC2DF0864338E1E66F20BAEC0A9442AE03B50588E9EEC46E9AB8FA9A5F
+A8C0F144423F2D8F9D3C44EF68E4E09A0E2F984F81E9BD06D9A9A538C0CCFAEE
+25746A9CC00F1C5DE9D0FFA7FE80F879C3B5E9DBDB4ED0FCECCE0E9E710836AB
+97CBA97411B693546A8FF6D529C5F085BDE380B680EE3FA3FABF2B71AEA4E13C
+9B978671AC30C412906A5BCF8807DC55E18DC0E5BB406AC8A317527EB8E0BE0D
+8C70324795007691A3D3D3A52C0091F2532C4C19976E04B58E79EBF46A2A0BF8
+2FA89594BD032675C7663104C34F7F3C8193412F69AE7246FCA44E44584DDD2D
+ED389F86D5FAE60EC412240A40A111F2D9EE43919C470B3DAC800159B494593D
+7F7FE0FB41B994AD131029C4A51B637966E0E20CFB779E822E278087B358D2B5
+82137926ECD14BD2F3E9EAA488381A17E9517CA33B6AA606ACE7A7807738D360
+D0744E4D9F0204E2B7F80CDC9C4101F8F792B686E5AC2CEE1D6D1FCF229848D3
+2BF2E940115EE1CBED4DED0EB9A57805037D92124A03F3750B21B633A1CB91F1
+A62504A20E63D93D6F504F36431A14AD355268BE490C90D67851A7C527379808
+1C4E42774A0E97819400EF939C69F5C45FFD14F04A546FCE1B927AF4B05017C8
+CBAE0BCACC94F1660E40A493A34CA5B39325259209D09EAC0C3342F4C4508687
+FB49285C7A49268B60A9384DF835A79D24954346C854C033A1BBEAC0DBCF5682
+A6E25960467011A1D594F9FDD3FF2E6133F47679259B1445DA68BD3AE4E609EA
+8C3A730322B176195BA14C13C2C867491364D57119DE9D994558CC1A4F8BA05B
+F4EADB44E6568EF1704E6CA60D1774E48FA186DD9C6A371FD36C80FCBE83B62D
+CCC0A090270EF6B410D7431A79CE9ADD196DA187E37C930DD68C9DD396976956
+DC37D0A1AF36CA73F0274FA86491AFD607912408F17CD10947DEE04887001CD5
+0B760F70914696A7BD24629ADA33D46E968C096BD2B59BB74BFEF13AFFCDB4B2
+1E54033E02EAAFB0B27AA4A0E19D5FD519D9E111AF73D816CBD4695F794F087B
+023363E3A5C048FEC738F84801ADCCE107A624033BADF6D86FC17A3D5FB823D7
+893239632144E3313CD15986D288315D5123A91D30C8DE870B14C732C93915F3
+AF57BD8382467DFE44E88EE24ED423FA9366CD074FF6977F7A92752FB55CDFE1
+D00CBC019A6E3A33777E2B5CBA7D7E7BABD8B7C191B2796A7672ABFAD8A0E6E0
+543C6BC5312A4D56D8154CAF94CA23892203527007145EF3E344A7A20CB27D67
+C5807A4AA045C640531F5E5B8F702D27757402E83AAAAFE4966BA885BE5235DD
+3D50A5332AE2C457A2C7848EDC71D17A71530F250436270D47365D45E70C5E51
+FE4EDC6CDFB7D0DDE027849BA59F70939ADE4894BF36A317D699542AEE0C19B7
+D84109778F73820F99C82F94D32E1AC7E83B733D482100AFA168DA703E5526C8
+88DDE12057EE597E77D486D159064B8EF9053116194E625020B56DA1BEA002FD
+41E0A53BFD6138EDBF43070BC392C905B89E456CF2AD1F7C8B0165BB593B8731
+354B872BF2C0BFDFA083B6512F7954BFFEB4B0D68DD18F4406AD9459756FFD8F
+5C71225B69A2B2DAE2722FCD1C1B1B5518CC3FE1D4E398F015DCA2A94B5A8BCB
+D4A5C099364D7C4FF94778282D3F3822EB425F396C8D54E3B043C69974C84711
+3B09C57DEA203DC8B6B1A41E8730A84DD6524A30DB6972368B7FBFC2902DDB98
+43E1BD0567637EDBE3895C4E7B3DE356FFEC90CFAA907DAB2AA2B453BADDE82D
+88C8C0DE4ED8F7853E85D3B4A939545360E6A2BAA8096D5D15D99DF877EA14C5
+A0169689BCDA6525C35B175A6FA113F7E427E992F0F94B379DE46AB43A2E4B5E
+97444065AC974779796CFFF55D0009242FDE6AAE4A8B7760829319C95757ED0E
+54BB483F8358472EE4F6D347B2636645E6488BB7A286078BCEBC6D07A2A38620
+2C7708BB58CC8821DC4EDCF67B9D4C4DE6A38D9561E6832B9A48D229099C635B
+9141E0A4C063F9B77AC66EF78C3451886FE7352CD15484C14A5C93C7DA0A77B9
+FE47B32F16617538D36792B8F9244DE19D75EADA387E7C0D6AACE0AFD24577D8
+A9C8235215980E635AC2EE59B8343EF850791DDF81662D8BA0B9143D19D72064
+752BD89C6FE4B519B9FE8F76F50D957D0108A7467598BC640B4ECC3FCCA3EDAE
+23C39C62C3854E358D3EED44A41A2D1467F730726317DDBC543DBBACDD038E74
+E25164EC572BD52008BA77756AD40E704DF8B3E9C2190BAD524A2FD68F1A2CD4
+74FB4FCFE62A6B412F9FBA2D7218262B37A194E671F8048376D604F360F30580
+8CEB9BD6E08AAA72B4749DBFB0CAF953F00B01DF377CAF52034887368138328F
+B60C988A9F02D9D3AAF31C2AFC29BB0727AA5FB2E416C4E428F414C57699C1E1
+A68667C4C42DDC9F7AC3A51BC16945370AD05472C33C523F93D29B32BFF27678
+597B870AEE83A4475CEAF64434C1F8941CA9BC0A19E8A3348F9E297EF70CEBD4
+10C65F5B887EC0E817EE83CF122CED3FFE42B5C7D78DE4D0D5BAAE8A4A4BF7CC
+EFA471413D32BADF2FE050CDB6C3DC6BF965C8CC17A2884DAD18E0EB09FFF008
+59B3500AA6626CFA1D2C8D9F2F62F3EAAB6B83C21194D8601F2904FFDFC47257
+630C92770FC40666D91F1E8E8733E447B03C10760E587AACB0E431E03E170CBD
+A9FF1FC234058F1B813F43FA03987F7CCD03D310B9ECA775B72B83B702613D56
+B94E058D1C1118716A77D1049AFE447C0A3B03C83FC4BF343443F2B9496B3AAE
+AA48288A3818DFAC16EBDADC9BDE7B0E0699B2F10CFE04F2969E04BDAC98F463
+F9E234C13BE5D5861FF5DA96E5409D6261EF5051343DA41EF7DEDA1A84C8542C
+3963B62C01A3039E9969CC04F55F83322736121551E49E7F7642785A87B9A26A
+2191D763AFC09588F5EE57E8013859E42458EE6A9AC264CAA46AFBED21C71C6B
+D2B618B3695A3D7F5A9FCC670D60B0D05B760719B5E4002B19904882579AABC9
+161307EE061CB4F460AD9C333DDF5AEA237BB8B5B2AAF59EE3232412E449DFF8
+8D61A32A729AAF572C4998A01B280870B95BAE53D0E64632B9FCAB8F189B37FA
+FEC3EF8FCEC1A1B7FC77303BE9A0B5873B8B6739483D4072C5C5AE70093518AD
+9000E3CE315A45D019B3C2E2B769844144DE624694FA3894A680A7A220DE0CC1
+F2CD3BBDFA87FDE5511796085996B99730BD1B359883C987339A2FF91E929A21
+8662A364AD55D1AAAF6A11E154452C4AF42A44BEA21E708B5E11CEE44DD1C2B2
+7200E233FA4EA43D258292F8578DB02464D1FF79615304A65FB7C4DADB7D5350
+419E822E60BB4553A5088E3B0088EE32CACACE97F2E345C1A7344ABEC0D139EB
+A085A7D4E739C9818D6DD30C92CA794AF7BFA73F86C0C524A4CB8F29EC3AD93F
+A9C3AD263BE4F8E963EE35F073005F4B13EC2D8FFC9BEC0C1836DF8B985223C5
+9D2CE7B7BB26FF08ED361E898D8D6FE65C93925D9241B808337F8907DD71B548
+8A941C64D12178A2B8DBB6040E07C628ADFA0BBD27CC95887840BAD1BC57B7E5
+C3D80FD1CDEE64F322776540C41188F416029A3A18F1EAE7C5B5574916DB0C7D
+2F8FA27453DF91447D16995CC62334EB6FD4A28CD0DC56E9BC4B14FE8D65AFDC
+98697D63FC27737640F3A294588DF91767DC7A412707B39C1C2FBC208B2D73E5
+CD6EC4DF7924D62EDFEB04EBAA1445531E1CF98E1CD9BCDEE596993FF175F747
+D268DE28F394F6FDCB6E34435AC61CF99CBBAF9B5A61D32621D5FAE49B3D8B81
+C61241B36D4CE6E1F57F7FB987E81C3147D42CDFB3B665F65B481A766DFB21A3
+6E4C642A07D20988E7A7DC6A88F5BD6D7ACB8A1F62468C7203ECC022C0120A16
+DD84FD33EA5F1B4F3D569FCCEE79D31A4AF6733B6246132C32DF5CC083CF926B
+B118497BD332FBFED4BDB2158CE07717E98215C37D3EB3CEC9A6AF3310889438
+048C02DD5F5B323291939A34CD390BE03EBD13FA9C76F082FEFE54AD9C30ED8D
+F04BBA6FD66ED1FC30CF49136625E77057F669992569E9AEDBD94269C2CBEFCE
+0C191E92CBBC6408A9C824F9A2E394EE9589432DD04F968558C89D12E0158036
+7108B85B438D869CE8C7F8B077C2D91AA03C08EA55A8208B058DE6FBAF6CD275
+B5E46AB314067BDB1C51BBD2C4C1BBEBFBE8389D46908B07286B5AEEC6B30517
+B787EAB33C987F1FA2B6D8EFA5E502FB7EB698A4B700DCB2C667987A51DE0F5D
+DFE93E9EB622F9D9770F069C0617AC4609A15B246ADD331478807B1EDAC16875
+81B6906948723B14D175945A3C89DCB80E953C84221C4A19FA7CC1FA84F0D42E
+7A93B344F08FECE42E3B2998699D33E3C7C77416A7195039D8F91F4149195C4C
+0FA45C5EB8C4CE8B85885E255C7E06ED9C9EBEDBFB6061F8B1DFA46199EA8888
+1CD76B0CC9A083B06F5AF66ED5A1053A77F4817FBCF046B7E3D686CF1864660A
+46E551364122199525D77F9DF706FA92C15FA05E17E0DC93A95C4D46B4105E30
+21C3888F966D005B6FFF950A4911CF4FE9B3F0441C04FBB938830AD88DE3EC39
+7AF9D0BAFA2E17269DEA860D77F7ADBDBF3D8D348873F5C76E69F8AB52541562
+9F9DD4E29F24577C867FB162D97D3CD6C5C0FC37CAB195372FAE4B1D56F192CD
+D6CBE2D7C555F849CB46EE4E8A549923ACED6ECB6872B5A4EF12D2954DD2D526
+3183F55C57108E2F23774698EFCBCBB6260AF63D7233E10A6C56AB5558A3B67B
+5F96B6CA723CB16810453FB990F1E06217567E4237E9386C413401E2B1C99EE7
+8D73260B8DB9132F37E345D96F8182479992A3367E850F9D9D2208F49A456F1F
+12AC4A6C56190A170D23BB304969B0857BFC16F30531FFC2D3463B820158D15C
+9C050CD4ED2FD3D131CB5104577F675A4DD2EA85383D49E615B25D88F0F6601C
+05369962E7EEE07A57FAA48B43B1A1D005D575C5CC4C592ED9167A5AA41B2D29
+A6E2AA2B176826D30FB249F02EEC1C0F44FDD4DF74A8F70C079AA25223AF3359
+A61E8E0569BBC5DE72D9D4BA55F2D3F8E8A7374AFE2BB1121234BC6E11CA3FB6
+EA6EDD6984BAB0B56007BF7CC58AD9A476727F3D33DD13B9FDC1B6B67463B18E
+1975C9CFCC1A683AA3B3BABDA1DDA80E3BB53D78035EE6521D41AAC9B1A9ACC5
+F02B837DA85D258481C92987AFAF70467828ECBA2AC350044646AD370B0F1FA7
+D771403E154150F99DB1672296E2823BD2EE1629AE7A70CC048CA441BA58DF6A
+8B3FCDB6613D3A0124F41EBE36A438361E21F854BD89CEAF1BEAEAA1AA4B118B
+E85FA56E4B7AC108B4F0FA2804E0B8BFEAF848EC469D611E0EF07AA173DC6D1D
+CBC67B8753AA3E658FF77B7565896687DD28431EE75598FAF5E9129EA14BA8FB
+EDDFD071262E0838E33DCDD190F68D2E20757CA37AFCBF3AEF1FA9A2DEA357BA
+4A89929F29AE099FB05610B99396D166EAA7C6598EC696CD7D58D8EA58DB48A1
+65A439409570DDF9A03CCD80180FC3378181D99026877FDFE438990E66EFACF8
+7F3698667ED21140E9054DDC6DB3FD91105FA0CD19EB71AA518F603FD1B6FDFE
+F44126492149370676FF5A7212AFAE99B2399045A27A735BD32589AD2AD073CE
+41E565D115026AD9C6B81C6F0EBFDC63445CC494D6189EA60612D4407DDBF831
+2F83E1F2F8BF6AB7845058AC9C9181B8F8D46486C6108D40C19312CEBED38842
+35306D53CB87CD3DE08AA4F174F5B2C4AB9B2B22D9F3F7695CE74A1FBCBA0225
+52BDC3FF4410786185C04F21DE4D460DB6E43B8529957A36890F3CFDAC387203
+3E6CA7B01BACD9FC35FB5C14DB4A44C1F3489647FAFF364F98B3319287500ECC
+A91AF7655F64D923DAD3061B593BBE7A0BBE3F1109BEFC01623757144FCC244F
+442411E096D44CA34B00B0F3D0125D1BBC15746C93C0BCD52F34F7043B31D5FE
+6FC2A7316B6A73A4ADF8718B3E30CF0797DEE8A94B2DBAD869EADDDDFE0C86A1
+B5EE8B38337524D9FF5495F231E450080716ED92A9E6DD973555CEA06B5E9322
+B1A6CA9DC9E2ED3E9B0499E211834D7C78D4B260AA07B1D1AE328B395FD92966
+90CCC73AD6EA7834796250216CF1F4CD8ABF006B6A50A3DB3333B694B10CF339
+FF01F731DDC573AF3EE82DDC0BC62EF781CFAE3BD558D7026DB6D1E2CF5F084C
+E3AB663C143A93AF46D470472C11D6E3C39A564DA23E9EA8DF8BF3A5E3F07DF0
+39E95FCB1DA44E2622631D967DD0B8B58E8E24D0224008C351F87809E70578BD
+97E1D02402D631041D63D458C1DB8F222EFDDF2C4B915D4EEBE9B17608A32F44
+B26DA28481F353411F9774670DEBA48A53AC833F4251F04D159DA667468781C5
+231721BE1C76E177175CDA66BF46C25E84FDE4F468DBA0B9560D738A1CADD30B
+07362C6495FCDCF725F793E1D5B4975437F7567191209F6B7916CD9B58424616
+77E8ED3B3DC028E715FC9967FEF0B00AB87330CD580EA19FC75066D873540863
+5CDCC0156BB105B6495EBB1A26462835C09E8235CDCA3224261089F5E99B17DC
+C21F4C467F7FB83486FAB7E75099FDBDFC9E518A43713BA46ECB346BE217A2F3
+DF3E3CF74999B1CB02B5249208B442988AE5D9431A271BF6D16323ACEE55F1FA
+62CF9AC0C97D5A2EBDA229F9630955F5E06F62F72BACC9B6558AA3E60D8FD4C2
+DF9BA1B8CD46D27DCD006B524919205F68F70D1081284AF072BE982CE3592DEC
+D3A23016E5E1564AB11EE10C5B09E476E049996FB49464F74D0605FF377C5CCE
+A06F0329E4A9DA39D4F6EC8605C490A58E18732D6E93B7070BAADCE2F9C95A76
+CD17A696DB07E68AF9089DEAACE0DADC5290ADE2BEFF9FC918F399773BA58BAE
+417570D2B23AC1D16D0576111071F9843E7E405B5D57F356EF4AF05ABA3AF2BF
+9C0EA3CCB2B7DC11D6579F1C95577ADCFDDC4A585780D02177F2F088D5CF0C73
+1EFBFF595EC6B1DB8B028342D5DA1DC1DC3AECADB99F18BDB43CB2164AA3649D
+1BCC91AD95B811B91EF497A14237C3B5EE1F6785ADA67CB799C6D54471947110
+4FDEDDCDBA16CCD839D917D5C10B78C4A3466D34DF751FD9732B6831FE34FA75
+D0F69C92390E4AA06D22F07496BD4E3E80213634B10F7DBDE3F534AAAD5F9D61
+BC16E9E38A5A389180BC218B420B371607F5C2E7376B7BF06321F4026AADC529
+565CDA5CFDE66638344880CC6F85A6E4576CE5CA9BAED5748281E5AF0F1E4F89
+3C9187A47B4CD8A4945D046E0F7F825A0759523FDAD891125F7D1FBD0A60B14F
+481665CDC62F4AE3766ACB71AD779ACF9A9A2BC3165FCA696BFE121E1D69CDEA
+5149029A46B9E1B59954F7007CCE1AC4F1465E19F5BEE29A0514182B9B957365
+12ACCABDCDA1EA2EAC3C1C4257740EB8842322AE7DD3DE694AC27D5E787F70CF
+E71FF2C0BD024F25E569BFDCCD456BCA6134F73F11CF8B9C160D3CFFF488CC65
+C440766587F62859D350DB066AD380471D52712B846F6977A815008BEF5AB6DA
+89264846E4FE0C6A3936D0F99657223A0A35192F3A5B8292EAC86B9DC38637C6
+7400E0FBBEDB34B6AC1E4520E1A765BAFF3793FFEB5749E0AF065890A9267EFA
+8B48A66C608F7CECE80469201E64134B6F0E06263CAB0ABE5EBD5FE2D26F7730
+D33F20FCFB008D737650D73C050BFABA8C25ECCF847B4FA9E9B3EB82A1277365
+AB26198523B43EEF9E9FD0EF852EB0AF79A5EB6A574B199F17717E8A36B9F577
+7C45E675842E9483EC5B3A2A45BECBAE73627C261A141D432524FF9BFE733F50
+A7FCDCEAAAC7E09BE1703B8FE781EE6D020E3A5A7C0D8E2A0870049D7AD9E574
+8FAB8C19C50BA2BE98552911AD5ED98DF3323A7A8ADDE84CCEB80AD00468239A
+9079DD2FFFB98E6181432F3C28BFC2E503F0E1AF77CCD52BB8E3CB882833958C
+A66E537F4DECD492A52B4D84F183AF761F112B5C25157E4D9109A2BE5A68E8C8
+E2BBB1FD203011B1BC2E1EBC71F5DF033FA446BBDBFB4A344F0A7750DE134EC4
+DB095A4E7D6A1512E1753B82E9A3484F89500A980FF5B0FDD7C26FFEE8887428
+4F7220EC96E7B534C21A1B3426AF9C77C744CB7FB9DFC30F0F781BFBC8E99339
+6B083C93E891FC6F543C670DFBAE15CE91EA3D89D7BACF8C6A5F33C568988701
+EAF0C4B0F61DFE6F39368C16F61F24BE1BDF1ED890D5328776F8B18AE46B65AD
+01CE58A163E2E0753A66DCE85044D5A247AD2DDF5FA0E5F1E246CB946401926E
+D334CF173666EF7B7465AF4DD5363D788F73437794836C78D3737C42B28588FB
+5B0B3CA9789F2C7B3D24F81C40D1D1C9A93EB94D553D542AD31D6B6D72E59CCE
+ADD4EFE91D35DF767B697F74BE531D3B1B7E41694B03D9959B42635197E55F03
+1964060151995222E14EC3674511D11C7E0D12B455E06B4C58F6E68F8EFD7D52
+C2A8058CF06EE121A7675E8F0AE43962FFA9B926ACEAB59CD22AED3C4BA274B7
+83740163AA31AA7AC5DFE1197F5F7B0AD6FAA5A61E49B2592F55D26422533DEC
+D96F02C52E1FACA47658522BE4AE1C62CCE9402A35FAC32CECC210C2566B1037
+798938BD3FAD9A644A43B2497D9CFF8F3FE6FAAC42FD0E05506A827D20B9116B
+2289C0C576DD84A2CF56F2216D58A02E35770875252E8CED1A0852A271019D39
+DB5E8E3AF2D53367B1E6EBD9A7569EC47F205BE79E4E04ABF82BD903F8E63B58
+A378BBED7CB6E46DA5D925A2DAE53876BA43045EAF35E317740E876E5B62CD35
+A5CA39882C6B0E221189A0700D8C5DD5A5F8DA3FB4477F133CEE733D2D8B60F2
+12402AB65F33C60FDB1228C5AD909FEC71E4C55AA8BC099745935F062BC327E3
+1DE39622A2029AFAB81DB3E7537C3F8E25BC29EBA7778C1D27AC5EC62364DA6E
+0C5EC40A6450A33EA49B2859775D4D411FE04B82E49D2206783587C01C312732
+D86FD0CA9AB0073385ECB1C467CDE5B7D1E2FFB85160322A183FAB4D42E29B14
+68389BBF90BB149C68A54E8A86F6B312CF1062FE054FCCBAFCB1FB0EC2DE7A32
+DDC37F6523FD75BA74A5E081E6A953D42DF419FD475F9AD75D13D3F43680759C
+54C91A0063A07FF5507A34F401D80161A57CC1CFD18A091D701E90C47E1A084C
+CC8904BD693E1A090323A44ABF57AF10A716E899EAB7FB62C529885778458815
+0491DF470C278AC43E97DCC8E42E31FDF82448E35AFC5F90AA018BFD44E89BD8
+64CF63A653AE5F0301A06C16AE2DA06F85ECF5FCE8F7277436BC5777E2588F7C
+4889627A5EBA53AF2DD411BE8E42D4B107335EF0887E795766249EA1ECCDC25C
+60E8A3DF38F27B1A7A1DE94536A24AA61A47B1A58A5C8D82A4719B2A623EC9FC
+FE5B319DE2507610DDDB610E0F68F85FA61A4A98EAEB075F254983510D1427FC
+2BF3DEFED5B3F3E0842FDBF0B4BD869BA3570062C5AE28C23D313121A755CBCA
+72C9373CC8A7F947B5895E3B48C808487ABA6CD967182D07C139A2F87C2614D3
+548AB2DEE5B8AC751E38519F5EF4AAD6612EB7C37A8506ECDB2AF78D7C582160
+35DD2D098D3372D464D2F80D67D92527F7A73A9BCF43682C3D5608ACAB6A0013
+74FE99A300E041D441ACC3DBAB6D518EEC5D8C382B31943816E86708A5D9EA50
+B80AD13C068C03F974AFFC81025F3634E5A4D27431B1DB18CCA974673C286186
+8DBEA1BE4201511C2196483CFDC0453807E41D058FE72F1C35C614E8EF883AF9
+7D367CDCFFB56C08BB3BA4E1DF255585CEEF4463EED877B19D9BFACBE40AF9D6
+A3ACA61B7267BB58C245637BDE582428E743699DD44EB86040D5140B74ABBBAB
+05E14F6AD82E4E4E4FCA5A7920FD3AAFC7C279DA4B6D3BD167A542ED2E43D8F3
+0485FABFA601A1AC1544BE674E4BC9E312110746001D5988A53C0483DEF88E7D
+5E04D3871C20F384777D027C71522BD15FB90240EA61D3372C8EC2A2714C544F
+CABCE014D24F21CCC067636A69B1AF18796B7FCACC9105B202FFAB666A8C88D3
+FDD179F26B3D26D7F5B1FF2D9C5E8743F566EDAB756423433A1807BF02487078
+D0278A68E0FE15687AEB89B30376B33ECCA2F24B71243CECD91DC5AE4E7E7520
+FE5F6D7C8E3850373B811A70C4E6AD8D4A8251CFC397A4B4DE093E154C1CDA2C
+40EF94409219099B7B5FFB13D6B3AC539802981F415B3B6C5F3F28CFCCFF76EE
+84451C8758731207DBB578FD4B00DA83A4CC00B5599C78917D3094538081675B
+0B825ED15589CE492D884C0ACF2BC4494DC0DF29342C28FA232E4AE96F51B5CA
+0C0BBDB7D33C07FFF4A2ED31221E15D1673E1E8A73785BB35EB5FD10C2485C08
+BEDC0D02955A1DEE8764F4E855156D95730D32E9C705979394E136C12C193A6C
+17512383CB27BA3B0A3E30210D2664BF91C73AD1A8116CF81E253CC1B2444C04
+CA2BBA3B85BB230DFA63D61677D2112421CC41EC1BFDA7241890659F18E99987
+62B6C788B98F89B305B1BCA2F63E8D2D7ED3404015B7A2A7EEA73ED0D6C2F4CA
+215CB8B49D8A8C7A69B8FD123FABEF33D123FEB521824D87D8B4CDE4650B1163
+1704A068FEAFA32C01F50DD76557378CD7F561861F9DF1034DE2470D2D3CB01A
+A1861DBF4B44AF32169DDC5089643986EB635B3386E362EC7CBA56DEADA4C60A
+0A51B1A0A6C24980220873FF7F3C796FC5664490597DA5F2CAC7C0013B1B4F7F
+7E929E57450B9765F71037620E73A80390902B271721AA252D0151D7DE2478A2
+B21D9E2966FA78AAA7B20AFAC4C8572A5A86D808F1DAF906C7334F8CCD3A80BA
+07E9AE56AEEA8F908C92A64133024A5D562ED72A737596B2563B6865FC8ADBC9
+3BADDFEC1086D96CAE44574A91266178B2ADC607D752495F20DFBDB54D5D70DF
+178A67A0BEA8293F44EFDFEA96C89165EBAE7082C8380BC3822DDC41E023D259
+F8606453E9EFCE8D0203D05AF8E86B2E02DFD3FD273E7BBFCF97DC03E4ED8094
+BE2CD5E3F1210A8ADB7F5E116DD1FB0641EEAD89438F3341909E4A774DC4D4E7
+764D973E2404098BBC33ED3C398CEA6B311E0F445D51E55F29045C839EE74BF7
+BD4F25A109C34DD931F1B59DBFBFD8AE904DA4FB0E42C960A28F18196605C38B
+F30515A1C8919DA7FED3A6081AB5054879C509DFA61A3E4DC49C7C8CFE9373FB
+F5F87E91C556B2CEC807E009E610CBF667B8F01104D4ED66484DC2458A29AA0C
+CCFA596ECF3FA247231C3CDA0EE906C5A341D76525EF692D42A6EB876FB0559E
+4BFD6EEB311F9C71D3840D3453236B8F2324F5FDDFA4F26EBA2E5A803D1A6917
+E6488BF7469089612BC578D3C0C8F85B49E54FBB28E2127A06C26FD439BDC798
+153083023E060292F9EACAA9DB8D45F1E9C9EB1816CBB6A93A5F188A3CB8AF2A
+2A4F5C6A224E3E7405DA63B05F451A01A993B6641CE7A431F739AAD6452420E3
+6140620979205FA03535AF135263448E11EEAA9C42FCF442B147F012B77EDE09
+B538737124AB34397B5323ABDBE6267DE71E19FF4F6F07333E5E409CF9B0589D
+C8378DF3BD4BD4BC1E8864C9C22485E46A2A1E295EA5F92691F48CB1CB2A2340
+094758795F33F5A80361682F6D838CEB488F17D7FAD781C77B1090B02F88666E
+A23E30B3AB6456279DECFDBBAF8A34BBCBA6C09E2E8FBD40A040FEA55B70602F
+800098F033DCA8C0AF1B92810779E16E88A263629C6C375ABA39B22002D97686
+805748E73146B462B0C69172AE17D6D6923243E9D94AB560158E090398D30A99
+5C2958D703B1359443E2C528A02E13A44A7F157A504E908773850F02E89503FC
+4D5C87B43F60B3C465857507A4E38F0AC2431DEEC9C07444803E1D7D2B8C90FD
+AC2EE8ECB4D53DCD3480134D1EAB291645748307DE1610FF94FEADD64D8BC6F4
+0326C7F478DDA036BA52BACD1B37C45E2B75F62B451FE15B3FE94019A96D8634
+369276C0308838BE235E25DA3D226C596FB81D4657B1720DB4702BF0B74B352E
+A43F483463B01D37D363139490B630EE4DA9912E461EEBBBD33AB0C871AB4417
+7E4F68BA74334D45C4D65021E8B58D8287D6241D2D9C19F54D415227752D7D79
+AA1B89FA400DB65783286EC71D79EB1292E6BD02BB5C388195E801FD9036FCEE
+385C1811F984E4B591F2B8775F3B6640F89349BEA0C53D690900696B7E925227
+205B20BC26151D66893E312892B18CC5189BF04B9F008088CF31AF7FF1EC792C
+2392B10E3381F2284E4B4AC7C631DFBCE50B4075604E5AB320C2681ED768ED5D
+FBBCC9D012809A2993780F5054D8BB60DCCACBE4ECF29B9F2A238886C06656B8
+12C6267CB9AB614FE75D2F96E1F6211BFCBC959D5B4B1FB77894E87D2F4D2657
+C64BBCF7A0477903CF2F3D58BD5426CC64C9A6BC49F41D3C2A0E058452170319
+28B5B8C1AB0D167E0872C810064F456FE97CB84139EAE7D0D2463DD455B6CDCE
+9FD3142D5124E10E9DBABC8035E584840B3443B1DBE0E24173B967C2402ED0EF
+37E1F832B804BC2F59133A3681403332451ABDCDB1C48D70BA565A6D4EDA8144
+E784A305885914FB1988E1E2734FCB76124092E8E4A28F16F8E9805BA1E816EE
+9C9C3CE461C07435AAB8B16C688465240808C524116832D9597BAFA71D1982A8
+ECD3854244CD04C0D7EA50521D4867931F753EBE44B088014CABC94A95A9E281
+23273D528804530BE9B1FD33A0D3C3D21F72293ED3A231A099D34302E504EF27
+ACB5FA3BE4C9F3BC5AC4D3C354E86E8F460277672409B75AC1A596F4B54DFD41
+61260DC50D9A823679C5C6A54C0CFCC6AE6C08B6B69DAE76FD256E105FAA95DC
+608117E4B8F212F5EBDBCD1D059EB9B938EDED6090827805580CFFA67D8BACF1
+15415321B15C46C571371DD8B809FB3664851171F1484EE1DB31EC8FF38DA7C1
+450AC79E75E81B8A2305925D54C8A5048F2C2750C7C26C6B3D476DD6D79A986C
+F3F1131706DF7747C0CA6D9049DC6C3A7DF1549051AAB0C38E846F34CE7F4CEF
+4E6B6918B78F4F1ECAE6A220130D68511235B3DA8EC4BEDA71B62BE15618351B
+2E204656A182EF76C11033BA3F903CA4B7976EF7F29B0529D0094ED2067E5929
+9F22E19F8B0CEBDF0156E4AA918DE4B5AA7C0546EEFE2141A7A833332B08822D
+8B28D23AF2A46B9879204B773DC4AA566AF9FA33CC1668386084C4B5FA223C90
+1B96EB26ED2C41751B7B27558341DAE930887DA88B44EC85586374C30DE69F41
+B8CDFD1E93A79579374E8ED14AF1EE15BEBD59347C3DD89DF2468D2595DC8A61
+FC3BD1720A252A0BDAF42BE2AF52203A72745A23C1B123DBE2FB5DB44953610B
+2F858899EA9E3B76C1AC284908F08D684BBAF6366243BDCF27E2CAC4FFC4091C
+4A83012FC8EC38BB341BC0FBDAF1DE7754ABC6EAE808D2DB7954F4E6E82BBFBC
+B54A538A53914FAEE072847C5C723F3F9F222F06FBA3ED09A42D6082F8C37EEE
+AF0241F07D3153372EF47802FAC2EE63F9C9744F5F9865C092592B075E4001DF
+7627996B37FC44CF1DAF42501F6ADA9AFB94A521229267BD53CF08C274B617A1
+90B28997777000658F086521013E2B15E695B78D118369633B39DE354AF0CC2F
+4608E1355492D289690A00EE5A04E8C7AF674B3DBE88C899514AFAAB6321C56A
+E925A468F5C1596FB1C695EE448B9723C6CDBFB8AE2E0CAB7A4F734D58DA578C
+1773437395B14824F0CF299322F7ED33CFA6496BD3B27137D36F9E3690AEE9D9
+24A38AF7B071E60BC0FB06BD84168662CE09F4A38DB14ED04B5133AFD91A323C
+F4AE8A2054F2FFD1C4368FDA7A8D584AE68B5E48BA4496D75F380A4044522206
+9D03AB81695584DC74F612B98BBA19FA6BF1EC5DBD06D04F1B0D36D485991C09
+720325287B2A2C259F7A4E7D7BA2658331C8F987ED0D3EBAC5933E778D743DBF
+83BACB647E014D8D770BF7878BA9A0164562652B960015CB654F0E69AF44EEF8
+C01495DC6092A55BDAC3C59EF50046ABBC79C963CC00F7C9D38252BD9ACF0FF3
+1A876CCB7EBA5E43A3F0A9FA5C65189E7BB448DFED141B06FB1669DC1055631E
+88DF65DAE08A6ACF17ED8583065705A7550E81AFEEE7D0F18931878BE457C233
+53D510D5FC075CC13AF477F1FA021D670AFCE1784AC101C8819F550ADCADAB11
+4ACF42BE8CC829767363466DA50BEAB3D9ACE76368E2EDD239EFA59C713442C2
+594B4F18B6637C530FB9A64218B34C7D0AB4C60FFFA5FA6B6BE561C23B4BD263
+D0C86DAD4D6972FDA3F5C465AA59402AFFD1B15C57D9F6D0F37943059DDE6C62
+F678972AD507FAAB162ADABDA9A4FE19395C3DDEE1CC4892519E79C571E63B90
+9C6D068EEAA373F29A4B09A9949186086B9ABC743AE3E7D09B7313995933C117
+87C4EDD5BE67392EB08E48365893E8CCF4F8F2589C3E790FA8EB136BF5A4AEDC
+B2E1009DE94CDAF8847BD9602957B17614F64A56E865CB1000F842F01C66D69C
+06A1235756985ED1242F038821CD376A7814E05FF2B18D5B5DC353D4E45F5843
+52A68183C43629A34D30FED56BF5F514295D127E199CAB5DDCDABA9DF6B25EDA
+5719D04ABBD212D7B6F66FE20EEBE1D7AAE0A9FCBA76E21432C9D509C7B6B045
+44A28AD70DEF21BD5D5D3B508F95A6E4896292AAABDC4E6BE5600F17726CFC28
+3BEB5BC500BD48BE92BCEE565843EDCE09FE678FABF061F21A2A15549F9C6969
+03C8EBD991DA56A7D88B7EEEDFD4AACE36D919399ABCDDB2141B81F19323F243
+20983527554313BB39029DA04422FC5C1E234F1A798179DE5486AA60231620CF
+DE5D060268EA0CC2D1228A1EFE742504CF42F011767D814F587E1A4687EAA216
+C40A8D70172343198E91F9BDB69CCF84EFDE1727B9929A968AFFF1DE01D89461
+11EF6CB1382EA4AA5570B3C60C7C48F741E43F74F7168DE56F9791DCE5BE50DF
+5FCC8E9EF7E4437397C8D0DB156020B2361BE557AB2AC3CCC1EA754DBD2AB2F9
+936F40BF0650299E3311D525EBDC48AB545F887B06CA0A075AC1069DBD6025C5
+9B801CD2CD0EB5B0EB2EDDDD24F5CD1C71D1EF56C1AD44F462526E9E2912EA73
+3320A3121FC6C37004639DFCC6067BAB7BD0DA3A2B3732B2A754C96495FBCB7D
+CF1FC14D6B993126911642EA32C499AF92C436DF97DA55FCCA98E50CB0B4D38F
+4C24DD07469C13A8DA1ABC054224FE9AA6DB6CEF0022CE55E083DB40611B22EF
+8A40F84AC135951269C208F0DE9BDCD2E3785B1A99FFEB2996A8DFD71609DD12
+BD3B6FEA4DC242CFFAEFECC02EEDD6DAF26D6BC385CA2364B10678C12DA8B745
+DCD2833298C50E02CCEBFF5DEB9CE3DA2D5E84288D7F63DD283BD2180F7E58EB
+B8CBA3CE2F39BF65B388956DD060150C42CCAF3B99888EEFD9DCD29C79E7637F
+240743230CCBCB4A392206649C991CFA7645944316ED1760D926B0AD5F892A74
+9EEDE457282918A20279C5597E7A24164840547ED1C03D17A08B7B26F7EED905
+59DD0EC8C6995AC968860D26A728703F8C0262BC74D49A0F8DFC39A137B44FD1
+36B7068CB2A19F03B85C418BA3973AD00969E4DC1718F94E0A4D682BBF7123EC
+0B8D695BD1DE6C9651A4EAB6B7DDF05FD53ABB642E4EFE3A6D4E81484C178CE7
+AF9E655E2B95D1EF90843DB9E454EAE423F714FC9DFE93D8EEC738A815A43C61
+9EB5A96A479EEB31534BDEAC74876F944322269C662A63AFD312A8BE2C36B011
+D0E68795A8280660C85266355BD0DF42993375DCB40440E6A1AE3EE46B1B000C
+188AD7DA050CDB91F98F05E784DA742DC3119CFB702A2AA53C9580112F603C89
+E54C44F0523B91279DA3049E973009A42BB42D125C4E492A8D5E0F57D028E702
+D6D579DCBFB937F8B04D3321B7D8E92A17E171FCC33A720A01887958116BCD4C
+0404668EE50A4C808524266EFAD3BBF8CB6D57FBCF9990666EE10E4155905C1D
+B6300A7FB442E6EF4771C7CD7F26AF6901E8F5E1323DFA7E6B7C174FF61EC768
+242DA6B9B424D818197A9BFA73877CC3031ABEEB51F7A2B2371FF0FB3F661538
+7B679E5B1B00F00AE4D22ED641624B5E5644D13F8D0E14299D7FE9507F4B3D73
+CC6F243BDE8DC202701BC635FD0CBD4078D3E75148379C9D12FBE533FDA82928
+07879C39043D94CEE9E3980DFEA127C455631F6B0003421507F5DA1DC324E8B7
+1DD031605FC74F0630396FAE502DCD45D2913015A2E190F174E8236D94885897
+5727C25CA77DFD3403187DE17D622DD5DEE82298D78565A53E31B93750867BAB
+ECB331596B5725B1DF9405CC4D3C090B0759B635EA78FAEF35876EFA867DD625
+F6C7326C7BAA4EC6CE5A2861F8B5D1434E24C639B6E398E7B190EC50299E2421
+358FDC085DC19CD5BCA32D32E8239280A581B384F2C8DB8A3020AE6CF5B05172
+043EEF80625ED5239EE5832F14677FF67B9488F1854D1DF35CEE7B02B9A66115
+5F851620DB80E3626F7CD2C097D330874FC3388F193F14729A7486744E6167E1
+7CF63919B80719F7255547EF214B703AD5ABA97F45085E34B7B57A7C2465C2BE
+9B5807D20FE9B911DEA468718F80109507258C74077CCED9ED9D59194DBFCC1E
+59941052F6CB81BD3E7D8BFAF1BFE23F3E3317103D210AE077ABAB51296F8636
+5CAE88E8ECAE9380E6E8B43168EECA559204EDC07B00BE4056FF54788B2471CF
+C6FF72C5E47C50479CC2285BA2BE43D2F8F1E3CC07C06F08AE5D37F1F3C62908
+BE8DAC50F150B48503410F2EBE52C5830A34647669AD688D6F8D0E119BEFD431
+3BF06100271DA8239306D371C292083CEA44278C04D9951DE7ED8418AC1C4930
+4FCE12D1D47197A1E8B2EF5C3FF1F238C62EB1F420368534666729B09636AAA6
+EA37F4BA8A7257AB4163FA275B5400D64C77CECEAC9F4E9EC6EF748D7EB6FE02
+3577B34E9B182D30B13402B5E896775E29749033D84718E23AF2905046AC3585
+F98740FE96D894589AA3705E0CADBB7CF4FAD8F81437EF7A3C1C655B742844C8
+19E8F58EA5AE3F537DC7268640A9D51935A13EA788366A7DC48FFD746383BA34
+DB77DDDC99B11D3A0995F47B71A30DE32F3343E586890448C295B8119E2966C7
+133EDE8036795D0372CF72683E7E11B192023A05F3A9DFC0D38470D6A2EF2884
+43D4185FFAFBA55D5B51A73E32EAD43672D6F5EEA5530B41FFE5A9C7752110D0
+99254F9AE2EF587D73DB054474F3051B6475778AF9AC50DCFC4F1178EFF87067
+807096EFDF37598833C0ADFC0F51DEDD13CFB2934050B2D97FBC1807EB920627
+8319561BA81F29E528CB8452F013A5E63BD14BF07779F2EF4C9521144EC2C31E
+ECFF8BC892406D370547B2F5809B5DB70B332C051410B2C31AD85B08C2B9A6E9
+BA08F7A237E17B7B2BE6F9499D1C59CBF66F1E97AFD5DDF2191F7927C7C2CF35
+AF1F47FB1D057A092926353C2B18353BAC388D0EAA43ED842FDFBC3656985B9B
+C058C5017E42FFB4187E1D788D7319AE087E665F3336A1B74C809012C91DF448
+79F2B65DC51C16AF6106F8076AC760B12C2AA6750A3E32DE66DD05DD95F849E5
+4A54E3DB8FD43D152ACB6A365A4929732138DC3D840D1ECDD23B87F2AFA45CAE
+52E23F1CA28109A895A39044D5DA9C36E57115D3C7BE2BF1ADB87A16D4884D0C
+B668672B1668414165D4DDE0F0ACA82565F8289979B77D912726E6FDBBADB523
+05B4D7A6EBAF0B3B124DC3092AE4043F08AEDC5F6F5D339ED115BD4BB1602E72
+E5645422CB1810121E893CA5B3182BF0E720505F2A8A360BCA6ECB03E0BEC9CB
+37A26717F10101597BACAC9191698F615E9A9EF8FD1FD0A762C52E5493BF8AB2
+5A74A3B0011D159FB0F8F17231BB1973913FAB2F5711A802F040503C897493B6
+3688EB894032A7B69956C3D5A43884F59EA0ED5937551FC62A42263F3CC5F7DF
+0D4CD131370B84B6652FF35CF6B70B228238CC1E3F78F3DDD564C01553871225
+01754AB463E672829EB894824055C2B5F4E5E698ED89A0443C92226D0A9034EF
+E217C6992C1DE2E8890DEC32EF16DE266BC5E549792AF65D4621CC50867276BE
+B8E5C2C8EAF6A324CB5A87516AB3EBE991633E72D157CEA8A32AF8E53ED13F61
+F3F2047B1367538D70CBE32AD7B98B953E58C8E79B7207C1FED860D7C7D8F1F1
+8CD88242705CC52C92EF60A35AE1C61BEB1B77A0C487AB4E0A5C30948B1A0610
+84D6F2F7B37B28FF68AB3F8E91B548BA9BDE008DE9DC97654F1C2ABEE411FD64
+6CF09DDDADC6F93BDBFA53B31EACDA96EA4AD8E922A332756C0006BF6C350D49
+7A5966E8BA66AE7DCFB88EDE0611AF2434D8BABC47016D64496502CF2DEC222B
+D033C59EB3272DD5E67767764A562705F430AEDCA24CAB0C1642E0DBB48E254A
+CD5762CA1EE26BA6D3DCDCB3AFEC1C124CE85829A0E77A942A270889C611A304
+8880CA94FB8A2282F3E7F61AD66D7EDCEC35914C07B3C0895D71624757DD1F01
+B7552C8508CCE29352A9AB9C5388C395C8F8EB57DFD931C3A41859EDC85EFD7B
+C57613CB8BFE25D53611B17B9D401715B887A052B7FDC6F834CFF5323229A332
+AC6570ACD495062C2959080CDA2EB1F3089E371A400932E83C061E2F5AA1CF81
+2D5074EFCA6D62C63BBC33A7BCEA326A645BB8D65908B194F49E7A194662757C
+84149FDF3B5AA99C7FE890F770F24BF0EDD5B6D4A207BA9D7C30863A9FD4FE9B
+00125EF4043596384C7ECA3F5FF605EE38FC54D5588F254793B05D6787051E17
+11D7FB845CDF9A696CC7166D08686C54A202073C576E43EC98F5C293F2C310D9
+EECFA6296E8EE0A258F3E45AF80E6FC65E79455D0243B21C6203E779B35DDA40
+430FB12885F84939528F277AB246CAA870F2BDA764594B4B5D018ED197522D81
+81892FC14D5D5704327672FFC0853CD3A78CA9E16607961AF80E54169185BFDE
+C0471010F66F61AA7D33264E13AF5428E8B4D43BF350AD2D0D736849CF74F08C
+2E595B5CB46473453F08E31005F5A8C56634AAC2322B3DC6CDC2ED0D384BFD63
+B0B0FBF27333756B134F5DC44CC7C4204FA2CCE365DE53D05A048EAD143B02DE
+C5669CBFAF7BF803F4649745CF3D16576281AA8303719A3EEB388ACF8E781A6E
+2F0819B2F8C633018F40C7B670BD8548138D965CD5BFF295296C07D8181C98DE
+D1600C5FE9BD673959E43F5A816C55F844853A43A1390905B9A1247B481F4894
+4E36B9AF0F05ADE224F9ADD39B63F25C7C26581396009192965D7D3E73A86FB6
+61F8DAC86B4B5F992B20F69D69100F848A9C50C6F14427E0C840D8981AD4943D
+6726680F4DBAD325DAC1F9C82B1AC95E322B183535F88800D6CB97FBEC126991
+0A53F325F457388B3212E2B5E1DEAD71D8D051EE0995E1658ED294AD0C6C19F2
+B45AD05846CE0148629B2622979167033973BAF86726AF20C1F20CE696E27313
+E0E7906D0CF0B9E799D413ECA041BBC4DDCE755BD5DAC2B76E1CCBC67F0732CA
+74C2A42C6AA8CA2D2FBAD6F3DBF0A8254A24305F046B238D2CE008BD7A0F7673
+125B6D7DBD8CD9246F133714159FC9EAC5B1C43081E5382CB8D3E447DB71386D
+805F013F539AFBF51B8A2235AF34DDE24868B51AF494C8E42A6958C7943DD81C
+4DFE6FEDBFE8B163376419F75DB2F539196F2EF384D56F65B38BAE191B81C8E3
+E1E7726F8FB8BE6874BF7213B32725EEE143F5ED8275FBA233697EEFCFDC5A92
+CF27705B2209729B15E3FCA7CD96EBBE0DB9122207C65BD7633246F522FB2D46
+B6FE50C19EA2D0BC5133A1BBDCF1DE22F402EC2C37C485FFE5C0358C4FA18B8F
+CEC354103878B1F6BAD6AA0A485E9888A434D3CF691C8329D2B7AB0D9DB2FC7C
+61552C0856078B0D73F09B7E99254FEEFA8C2A8671D4E200AAF52229414E20E8
+AF5925EE7B0C61D6AE22147AC6E5CED1265812E10CFAD2F366C7FAC2958E8AB9
+14827AF3147F4D3DED4DC6A8AF569682F9B17BD67A54841914ED59B33D7E40E3
+DBF5A8BBBE86C3B7E5CCC067053FB9218B9F0876247F3A0C3CE06444409C391A
+43BBBF008A587B8A09924ED83279DBAB133F41AE117648EC9FF59C170DB53BAE
+8D49D7FFD80E874C0D0B9AD7B694FA085F2933272227CB20C3F2CDA00A96C665
+CD059F9D2E438861E1DC923821C411B8CA8DA5A21612FAC30EA3D869B01EEC8F
+8D45AACFD0D0298D739C52FBD2B0BC8C96C8386A392ABCDA29051F9D8F5EA844
+8D83F9EECA7B6DB7CF3EB1F81F85FEB96A471CE0A5B899851097AB3D63131BE1
+6086D914B3986307EEAF0D0BD650C2F0F7C50175868E4864557DC8790794393E
+9D57D1B9D0726CC14B48982B45CA14769BA0E0FBC25830B1A8341324F31460BE
+88E6AA3592A3E5630F9A5A7DF736365C978747E396D4B7A59ED56E897B9CD8CA
+94ED805D4B979F672EDF9D01A156EBD6F759BFB0BD9E5014CF59B6164406EB86
+108FDA4C92ED3369056F515952EBC711B48A11AA75DD9EAA736B48B2C8E05F59
+8FAD1DCAFD29FCCEDC072A4497E0BCEC768DD7F7326A83A8762C5F07050190D0
+3F765F9A23E49B75DC5CE283BF407B61C41FC8FAE5B6063502BBB511A88B53E6
+50E53F218FE3B8EB0CE7A3DE17DEF300A74F6E5CD29B1A9783A7EFE52715290F
+60E78618AE931B23B8AF61945CD3EF4BF7A363128D2D2CC0E0BE3E927E785844
+73B0EDEA9CB3BB8778A34676F9DC31DC48229F7B61428ECC8436DFF41A63D274
+6DD5A0E19F82BE2ED721E25AAD9AD7D55D9AB1D817D7D3BC7FD5C64D3A16402F
+E5F1494D4DCDCEA0F7265B72EE4FBF8B6B783F2051585205EA4D2723A1AAC86D
+E8945BA2670B0DF1CFD4CF47966424A2B570900F5ED0ECFEE4EB534BFA54E2A7
+654F8122BAF46191F03F02E29351E2E7D6216CD5A633DCD52D9D63FBF8DF6779
+276781BB7C5A850F5F5530E41CEA047D0D2C807CD433780E85BB852F4544ACCF
+E4C6FBB366F7A62C5F2F7C85D405C70A393F19ED723D596FE895DBA8555BFF42
+AF22453A88DE11127877EED1E653CBCBB37CFE724C74C13C1FBD430C0985BCC1
+AF8CEBE773F16264A8EA498C2CEA83FAB54AEEE9237EB6994DD36D172ABD4630
+7FE3917C571B55225EECD22A4BF03D4F47E483CC610E517C5FCD8986E6EF5472
+8671720DF6D159DC239CE689E60BA4F963A061099C65CE43E10796555B004357
+923373FA1666448B261FA14697B7287DD24AEB4F2E6D004204D31C2DEC90F7E3
+7C5B329F2AC730EF375262773306D20014DC28EB842EB2216C71D2BDF8600B71
+4E5D9506D215816FDA6AB7A0B8E98C5022D70F27770D1EF50B49601586E35ACA
+3E7C3E54F289F4F8449DECE1CED8DF3945B80DF9732AB827AB6CBB0868E054E6
+099A81A50646FD437A021DD43D19F307CCC435457E0522CBC740A4B832D4894F
+A6E93662ED89F434EEC68384EC374E5666E0089F246AA367D8CF416BA95B9207
+574CCD04AFA4009F6AEC51A24C3F3C4CB3C8B2E0A1868C8DC50E32BC88EE206B
+F5A9AF7ABED45C44642D6E12E2BCD765D4BB68E5B02749884DC6695D76E9AC93
+D5B6C0B6F294CA9CE5A51CEBFBE78F072EF2E1374EAA8B74A89F8DFDA665E984
+266C686B3CBCD0CA5CFF0BD82F8AAF903A033CA7EAA8988817B526D38C76F0EB
+1D7A62B5FD190723C24BC9E051F379CF7A681F938E504032AB465EF32FDCB4BA
+8A1ADA22D5C86F704FB070771CDB8F1E061450ACEB3442A12EFEFC021D086CA1
+CDB8336CA04FFF6204B44B89EABB5EC6F251FA6BDDC4C550EB0C92FADDAE7374
+791F256E229BC0EB7F13FD2D007538B53D86CF7CFA0F7EEFE463E8ED1EC24CE7
+FD39DA67C23143CE793178162D7BCDB1A1A98B81C6DC7AFC814777A5821149E5
+0391037A6EA0FDACA0BF93EC305655AFD2A018AF0787921CC75B1810E86D7378
+DA8DB8A352EC697CD9815A4781CC2E0E7A961E5F961294FDF18D8C1C4F74CFBD
+68DEE0CBF24326C67CBE64092201B0BBF54BBA02F57C80452654C0D8B4DF013D
+771CC70762314D160850EB1165FB6603EBDD8303C398D3F545CC3C326B32A288
+FC73B1D805F020BB9CD98993C0362AA367F1EBC369AAAA6ACA878034CFA6120F
+3437E24DACFD95C89953954D025BC501DBD78BD77526650B80380E7F39F724DB
+957616303A0F8D9668DB0E55C07E4B7AC99E5FC7E639543B6AB14B3A44994CF6
+A038E33DF3007700DCC225679D861DCA1D43A289624D771EC6DE5AA0A6514F2F
+298E27DB25DC8D45D2F192136441C66E4793DE91C917AF060774E76C767F7106
+2A709223A78EFA80093852F303477EF202502FD3B5021750669C4AA4A63D84BE
+B56B1A178F537FDDBF77742E3269A086D5E8C244A7C1EE575EBD6D652770488C
+BAE29DC2FBBEAC5D77CD6EC7AA078105D60BCF0F8035B4DCBF75DAF21766211F
+3A9DAE4BDC772163D801E831E45BE3B57764BFB7AF0B905FA1DB9BDBE39ED7A7
+E85ADB3F07668ADCA70F406C9C0E2CB0BC33B93824C58C038F2256ECD2ECC6FE
+8D1A422AFBF33412A2716B74E1FE44F1D5F782AF6D72D69360E760703DAD5E2A
+F0B4BFE753AABAD641B8FC4B5CAA3CFC155685B608BE3891C762F36090812A85
+3453492C1D2E2C2755CBF0F4E2400B4A9AA8403A6CD8A72C274A30657DB76782
+A5610A85C44892C7ACCF2B30A3EFCB4FE58D01DFC828B9F160027EE9BAFE2514
+92690FC5F1E2930A0FAB61F15F4208CF9AB05B5AF4A1EDAF9BEEF7698C1CABAD
+86E92A6C312DECF312C75EC0DEA63A66201395DE2B607FF56E476335A942CF53
+C5414165F5CA4B20D61F21E5960547378FA8AE0351394615B7025D334E31F153
+84A7A642AD5626F4E130C99C50CFA2FE032E096EA1ECC01DDE98232806CEDBE7
+FEB6A7FACDC53653952B3342C9C0FAC7F46CF70E0C2F6DA8D3146394A477E9BF
+5F1F0D559702F812FF59C546E60B92B410CACC1D780C565D322936B25E422205
+D1B77761708D28CDCDCE30683A9AF46046DA59F7EEC548B78BB55A2EF07A9BD4
+AC9807320B94E8BB7F2EB39DCB5D89C48FBDBE17003C511D858DADEB923A180B
+B67E7E1346B9B5236C2CE21BD33644447B1E0BE7920ECD96FCD032EAA5E628D9
+2F0EB758B3D942FE1DA935C0E09C4AFE72D5707EE97763C7F7CF7DF022248B00
+93140D8061FBBC867002E1E40E195D553494446639B9957F568C9CD266FFFCF5
+401622EF74732D2AB1E86DDCDD93B5D9AEF7B2EF6812162823A1A1B8AF1CECD5
+0B34D6E99CE3AC269095E4DE4D4BFCB7A12726601F8DDCC5A88C122E9373C38E
+EEDF1477B87175CE1354BF2CEA55B879248AC756C06AFB27711B3F61379B4041
+ABCB1AF86404F1C92AF8FBB995C0745390F34A22C7D574CE5C2771D9AB025A1E
+B5AB1FB004A6FCBB3DF83C8DF8C863815B2397D4059F891203C9C0C3EB8DFD92
+B6F8C706C80A3C7C6704E656B19CB89C40BD83B7E823F6E286AC1CAAF5526F6A
+74A23D4376B6D9751BB6BA608A24AA26154E254660A3734A82095A68BC7E2084
+595BFE7FFB7285EF65114248F76545727830FE9E3A0B471FA4372AAC1C9840A0
+854624D0C02FBB5C20279AF5DC062A2573EFD6481E8DA57A7739EE3E7F7837B9
+E2CAAF0AC1AAC13B812205E7C1A65A98F0313294B740673300073214BE66FEB3
+B555649EB823D7B528261CC968997B56CB8C90E5FA4F04E7933FB396C4E5871F
+C316DD9522EA73C1202E300DC5E4E743B24BB915302B467DC4059D1837F95E55
+D08D783616A2C868F222ACE2881E31EA5B3B57FC62ABBCE9288450CC64BA50BE
+9F4BEA29CFC75695F77BFADEC65EF4561CD570E966834CAB6D731D196B24E14F
+ADF86E74643E09135188AD6F9508D9D6DD31E5BA9FA92DB0AC1E1875A7222A53
+458103F5CAB00B70666EDD2EB08E83E7CD7A700237CFEC61CED095981D7A82E9
+929CBD909852365A49030A593BD266017EDD740010A50A9F001CA3EDBCD79646
+AD489A55FC9B48A7C765FCF9B212584CE1619D9037948A8D22702F2F36A5788E
+974C88CBAA776EB4844506C7A9DE71F0D0325970B57916BD006B4C939ECEA725
+3BA14AA99BAE0C91D0DAEDCEBF1D915349CB9D3AEFC36A99B69857A73077FAAD
+B6FF4F3B47C4F1C0AF1364CCC46DD4840819ECD0955CDF610F8A574A8BC0A3A5
+9B704870001860A888FB046784788324B83B2710D38B18186F59BAD37BC77794
+FD7B73ECB5A060B8992C419F9337453C130677A14DD23E9C1A092EA099E28A06
+D2EA0CE381936E033F2E48F33D9A18ECCE3AFACAE0CE118891B767FA3DBD9D49
+3ED3182A68E4E056D420ACEE2C7B20F6C2AE042D3DF60D70B2DA4527EBC0B3FF
+927CA3BDA84FCC1ED450F8847FA4E59E0030969C215477B5D7BC0CBD674B6B79
+7C28FB5A2CB25405DD82892FAF806F2D0025232973DB70F7E345510BD782D5BB
+8C722232ECBC8C0740175347D50B214DCBCBEC16B7E5725017234460C9B81BF9
+2D8441CABAEB6B853CB003F35FD3D05E40B5AD32EDC899C59F8F78529C62B312
+06E076F73C4F7D1E3F862418D9E4F7803BCA1052E06678CCC594A960320FA393
+B82D738D1BEDAFFBE013BDF91C6D524A44081FEBB7CE82124EF5B2731A382F21
+A5C6249D1BA59E2728D647FB7BF75217CF621643E0B912D4989BE54870E38FE2
+EE63C4EECA31FD1BD041D85FACBF80B65C37727F3C72D40A453365CB1A92439F
+63D54E599FA5A9BA4F71D3F5D5AAE42DBADBA4AACFD13CC0841788FA7D186F64
+859914B0BD0C95DE30D5830B29C1DA1403A61A289B2699B527D3EA8A585DB2C1
+CC4FF7AB42AD22B0E09463F035F0FE3636E7DF92964D57DD0952A1504AC5B470
+556095A0D35DC150ECB425F2B14ED3769705D986F4E6EF548D7FF38F88EBF58E
+EBC22E73B03BDDC535173ED753ADC75A9A203BA4A542B9B76D27A64531377915
+10C9A36DFE9F07010768E5B60CCF4F8737CDE22C42D8DE22A3AB17CF3E2832E5
+781D795EE5C86435BBEF93E1E41918F05C3F34316229DF91B1602005DA7C3AF8
+E3F60FC7D693DAEEBFBF9A322E0BD7A9995520780A9A476C1FCDFE428FAA9C7D
+11808AEC9032A5F43FEE05692F80362554761D9950F2EC0FCC435A05B4EE4B02
+446DC2E3ADC7C77B3E937BF5138301563B4368CC8A26A95652F8E936EB6264EB
+D68F59788449C59D6E1749E130501FBA420A986C887B9A31E80958CDCFDF2B1B
+A0E8F6A327D5EC034F68ED4DE7AE84AEFBAC9A049B6E1A1681826F810FB76121
+0ABD0C23B1075F9658273D50C63426666A9D3481C8F54E2610C0887A472B2F8F
+8ECF37A7C16D199C537502EC19D83C5B0C1477F2563BC63039494DA44534FCB3
+7856234BD559DA460F6BF425C7626833D8E3428BA27C255548F9D9B908E55C16
+92605D8A029C885A66C726B7C14A5AB5575E147E2F1E4DEA56E0162E13852AD3
+C1ADC5EB43FAF32DC34B5F832224C507DE8D0B1A54C3E7A0535EBB8CAD5B5E1A
+0A35DD0FB5B640E8AAE2FA839E3942C917957B71F1E15BA194551DBB2C48F0A0
+B215560D0BAFCF472AB90C8FED6048116D4E4B9B1479D989F0610B52DC35AA61
+B33EA7F891617456085BE32C1A355A660E7B81CEA13DAE58911A8E3873B5AC87
+4D1331B59ADF9E7E7DD4BDDF990FE579C739D369B34B4E055C4EEB0FED255789
+62884C298FD09816AF32AC86844031C3196B94DDE55A65053457B48592D58F5C
+DC9D02CD76A8CAF9F5B1D0B8A15A57587968C95E06C46FA5DA93BFA967B61A85
+2D98E3533C7E4F3A3A0D9D99AC57208DDEB2F7F308ECC94E0C38EF22520526DB
+106C28133E996049672A9A459A0255D8B1A39AE4F8CD80195D32243F228213A8
+3A248402801919AB7BEA2D8172EC6CDC51F859E582D3C582B777DB87E611BEB2
+04612A51C1D8C49B60E3C2CA075BAC4939905AC87073A9AABAF7DAD58F48129F
+C20F48B98B7C3B7C61AA456CBFF697549AC5B5A92E9098871525C351ECC5DF1F
+805917FD1E6752A813275443401BFB15C3DD6BADB72DBCEA8098E6E684DC5A61
+78B8957BCD40A6D78D948700B9175F461A228F1ABCE8692FE132FFADAAF785CE
+735647BDA0E0D4D76A351DECF6DEC5A75F744DCEFBCB719D18F41AE53A69DA67
+C1C273563496E7EB5C2001556FE2C13EDB5D4989B0C70B6EE4C6761C691A2733
+A856C41F48485604D55E91FD3311F7A977648556578335B8CE526BE651E3C4D2
+19F136CFE68D9F482C210011E7C0E8D8D6D713E7D9842FC6ED651035C1F557F3
+F4AD3F4ABBE2CDDB93811C851A52AF4D1A5FFCAF88C8BBF3FCE9D392F84B420F
+FD686BE038D120621B39B6C36FF9F41AC870D41417A62F524DE5F01E4C7463F3
+CED218E47C45A05C0603FD0DB14DCB7C5596B773E35AB131172AE4C4C36A8D73
+BB0F0E5154C66EA3394915015FAB552EB5684D815E992626D4C11DC0917E0278
+1AEBAA02983EF1BEFC51E14FAF087E591637D3B958E183655BD18EA0553E44F4
+248CE59A8F41AF272C3BF63C77B27AE7EE4B1B681C62D320DF9988207BEC27CF
+2FD1AB93BB73D36BE1D4E56542D35F163ED5569C37C781963D750C0741F574A9
+890414D07491A43AB08F0C34FA335DBDF5F065BD59D81464CC473F036B8B71E4
+2D5FFD9FB9D4B5381D0FC5A98FA307952457E70078A7FEB334BA92168D7BCFAD
+FC72B67AAC7256D42C83C1F48AB790B8B2EAF786890F3A173BB3320F64E08382
+AA87596C71CC8D5B5B3220C228492F9D04FB56FC30E6828B480EA062276032C9
+6EECF8B5E1BE45F33595918DB888F0210F6E01E1E0214B420B03A34E772E8DC1
+5F416D10B82D4ECEFA523444EAC25B498111301DC293CDF1D528655874BD5731
+B9292437438FFEBF2E1D0FF2348C2C2EE98C512194D280A0F72A706A92838B22
+4E5DA2731965C70204EFAC38C124FE457D75ECC9DE58BA373B06C7C93775AECF
+B09C9087D73035A3670ECB8FA0FC27DAEF125BA9E5B9FFEC9789E416B3236533
+8025389B8788202BE24BBCAE79E653DDC8BFB610FB30BBE572FA93D1FB41CF26
+6F60BFE555F51310B54009B2C506DB45B36B2C14B01A96B2FF29D2245CDD26CA
+6C9023AF71A0182FE468177B38038878C1F803943F101B0F419AA3704859E23E
+BC719FA3E86B211743C5479A1D9078208E9A0A7CEB80AE36C78F3CF3A73D6CD0
+EB8D4220A64069675AB13D6086244E91A13A7C92C909DC1BA14441DE4F542677
+33DF8B5ACA7A45C9FB84FED7A5522897C9CA1FFF1E9FC97A039118BE269F65CB
+F130E31BE70112D7DEE5790A3F7EB0973BCCC5934E0DDCA04E5DDFD4926D4283
+7053B8DED0E2666753EC895672838461DC8E177B97B3BC64E6F076D0392FBEA3
+02A9B77F200594A136A7EFAD8A069E7F2B4CBF512C026EBED81BA4645FDF946E
+EBABE659E725F26A0F8FCEE44DBBEDF2A8033AF58047FC2710C9A8E06AA4C008
+F7D4D49D9DD8E945DB7BE0BF2571BDF09094B591743CEBFEBFEABD525B497378
+E46753CD17122B72197CE7420672E118C80A06F7D263EDCF0D7997D42A2ED30F
+4B909D456CFC2F90936FDA2D375665A2ACEE28D28DB6EAB9E1D9ED722D051A00
+99E7433BF2149829FE59DDBDBB60266AC6D57B81DE28BB1D747DB435ADD9A09B
+97028959DC620CE7C90A01DCC8D264DE2AF4B2DD5DE46A17D0D841B5E022080B
+717E959E18E862F254C3305330DF9B0AC282355A10871545332D7A3F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMSLTT10
+%!PS-AdobeFont-1.0: CMSLTT10 003.002
+%%Title: CMSLTT10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSLTT10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup
+/UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMSLTT10 def
+/FontBBox {-20 -233 617 696 }readonly def
+/UniqueID 5000800 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSLTT10.) readonly def
+/FullName (CMSLTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -9.46 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 36 /dollar put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3
+2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777
+6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18
+979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E
+ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF
+B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59
+A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA
+3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F
+D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC
+6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F
+3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C
+4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90
+DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2
+753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131
+54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D
+107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3
+7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231
+328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9
+85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C
+2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7
+308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450
+CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195
+739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93
+FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6
+F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312
+3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A
+A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F
+55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC
+A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB
+69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50
+82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0
+8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8
+0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6
+0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8
+1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1
+D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F
+B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737
+170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863
+767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D
+EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F
+AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3
+826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235
+8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048
+345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE
+67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD
+802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E
+20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127
+5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07
+0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36
+22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC
+4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF
+CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B
+4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880
+0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5
+220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403
+7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005
+27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE
+B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300
+7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07
+A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D
+45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10
+F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7
+C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65
+AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012
+DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781
+FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA
+997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4
+3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A
+2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605
+31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22
+A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891
+43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D
+4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5
+94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E
+425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616
+FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5
+51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9
+859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852
+E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F
+2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910
+82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA
+22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D
+200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5
+892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32
+0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140
+437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3
+BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9
+E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402
+DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1
+CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551
+80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F
+FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA
+9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41
+031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90
+9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3
+9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891
+4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB
+57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B
+2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39
+0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9
+03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067
+22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79
+06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC
+39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD
+E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163
+A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6
+9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6
+B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F
+79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553
+2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5
+8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA
+1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA
+0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2
+BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3
+312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3
+B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F
+9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16
+A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6
+91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F
+7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D
+78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC
+7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09
+766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11
+016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D
+C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3
+8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278
+E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC
+6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8
+B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959
+44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB
+C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE
+5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB
+42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A
+F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57
+CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009
+9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2
+82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72
+0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5
+F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9
+EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA
+E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD
+D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD
+F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F
+14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8
+BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2
+9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5
+6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A
+6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116
+4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE
+C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B
+A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C
+9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780
+42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE
+7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024
+1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D
+4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540
+CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4
+D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81
+CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1
+0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9
+92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0
+57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4
+5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4
+57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158
+8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0
+C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3
+7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7
+B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674
+EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521
+D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9
+DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074
+F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D
+D16A478C901D3A34D870BA39F770885B7DE62298F50E61F93CAF0D7545BB7EBD
+09108386B1C00698760DAAFC48C3BD1142A8282CB16C25820B538AF606A1E5B4
+F1998A4D4D40C21D76436C4D515C85B28BD56725C28744061815182C7E3FE4F4
+251B986069EA94FE262D75AA093A73EB508502215C8BA4DFA1E72BBFFA5E1F3A
+A78084E517EFA309EBF60E7BCFDC5B180497282008F2F7D11B61DEAD80B3E65F
+64A3281BF61C46FF25270AA6CE3BD1F4C5348EFB09382FD79729C24A70D52CD5
+0B8D87A62D5B64C557FE91108FD95B83052A3947A20E022728605E972B912CB9
+A8BE14A4F6D361469F207F540A44ED6C8A2E97F509CD3381942CA2EA9567E62A
+92A067A760B44B28E99EABA1B9B9A58AFFACCF9767D04DC6FACF090D37AAE7DD
+57B2E2FF7B7C99FAF127E3AE31281CFD9843390C916F2CFC957E85BDF2A2AF2A
+87AC977228174603669CFC14BF64A093635CC13AC11D53FD312BCEC8B01D9AB4
+16CFE17DC23417D083871E1BCC9400ECDFB5ABC0D39BFAFE5460D3CC5B4B4E1A
+1C32E4067CD47EDB8A5EE9B3886A8FA564F286F5B1149497260C8B1878518BBC
+C095CF37D1FBA0D727789A877AACA3CCBA168289A7D76EA207D8761AE17F8CF9
+5BBA7DD8D3FA215C24D4874B93D802B373C4DB21CEF62DACB1815AD2EAD72D24
+172A27DA07A7B183B5F43B69EEAE06A50090EBBD94DE0F1FDDC3238C4D5EE4CB
+F020B209D9C4516603C6D6F2D9CBE5448C1EBD6A597350DC37994E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMSS8
+%!PS-AdobeFont-1.0: CMSS8 003.002
+%%Title: CMSS8
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSS8.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMSS8 known{/CMSS8 findfont dup/UniqueID known{dup
+/UniqueID get 5000801 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMSS8 def
+/FontBBox {-65 -250 1062 761 }readonly def
+/UniqueID 5000801 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSS8.) readonly def
+/FullName (CMSS8) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 100 /d put
+dup 101 /e put
+dup 103 /g put
+dup 105 /i put
+dup 112 /p put
+dup 114 /r put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0
+7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81
+DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91
+511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6
+1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD
+028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86
+1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C6258F0D99DCD775
+734480114DD0CD2931DC18782C4CCB90B6906CE08BF4CAEC2D4283CD44730A2C
+28919598227F98FC5524B0CC92540E349C5B190DF5F2317AE46FFB97221BDFA5
+114C21D5E8FB0D1C298EDFF8836AD72A9B2AA132F52DD5D3F30427563C97CC46
+D241B7024B4CD9F1E0037FFABCC88D8CCFDF3BC6EED778074F9590733CD147B2
+5B68387E0F19E6A81961077BB7640A3C0E27ADD72556CF84ECD981ECCB64184C
+EAB8BD9B96A873D80E3E0D5B4F5925983C80EBC3A8A12FBC452582A0B37D3C42
+4DFD22E9BADDCD2E69644AA271EECF366D63FCC29522FD72D6C1EFDB3597E866
+61443179872395E99024F152F6D6A4FD71BF1C7383BC1CC27AFD2DE3DAEFC06B
+6BA837BBEBD0BE09F6AEA31A83B1B45255DFD6FF33362AF8BCABEBB0D944B3FA
+B85FFBA0B370B9035460905432EE87395E518B4B670246FAFD535774467C059F
+DC30EA01C95EFBA4ABB41711818E23D7E69D32BD63243A6D98666BD46E234155
+BD6ABC76F551C31B6CE2E52323A9DAD5C003FB116AC8A82B46ACFC45EECCCAA9
+E12C2C8E3CEEFD98D49ECFB824E8677BC9CE9B682BB5A7117174E4B2A0B925EE
+553713780CDF3A3A4AF1560343A8A448C0B5DCC4E11EDF5ACBBA0BA8E5B899A3
+7321AA7D4B283AC9234978C2DD81813653A96F2BD129FA5F355D56C4E50310D2
+0FAA8F304D8BF333F97A6CD20CA4BA7BE6DC1446759683933BB1F1617AEAD131
+1C9EF2212EE7EA9B64E5ABFF45E1727EE82C00FD371BE1387987236F9BDBA4ED
+A966658ADF028B5DAD1F0878064221D0469BF17CB4E738258FB5D92E9D380C64
+16E95BBA6A2BD9EEB1A187A7231C53BD8ABC9BAC46CA4AFA94A4920FA805F67A
+A0C61940F6826CC4539A6CD1F9900EDC3F720AE4FA097F1D7510746BCE2E67B6
+EA2F2046613785AAB89915655408AC9D03201838BBA44F421D5F25CFD88E56E8
+1CA23CBEE9C2E323DF1866D31F309C92281E514A87A9631F33B238AC6520A20A
+346DD6A206C3CAF2830FE244F2AC5D894686CAD5F4BD1CC51EC0B547603BFFC4
+F008FDAEBC93542A43B7C907CC85046313348CC8A017C585CC370604E40AC820
+8B9D8F57A01868FDC93551DE10FA83DDA3E49E44C32118ED90FA67AB1C66B3F9
+F80CF71131977ACCF4DB44CF1EC26AB363C5F95FC2523B5DFBF4D60647EB23AC
+89CB971DCDAB3BA26846BA9317C051011C37468B21B159412E69DCB84A9F5876
+F418908678F38880B95A4BFD3566A6EDE93AE05BBDCB3C4E240A5C0A06301896
+69FCCC0B65BB269F2E10609B6446A68E2DECA905FC26D4F502CAF0EE9AB15E60
+CF42CEB376D92D80A6AEE55BCAB006999BF4415815D0F5BA3B1FF9D2E60201B5
+833FABE8B883847ADACF9B032721DEEE7FEBB583B89066ED9608F1EFBCDD09D4
+3F3C2B7B03154676151753DFF53815F2EC1517C094B0D2CC5EC483AA93772D24
+AD3B0084537B91BE1913A31C70750C6DD707761DD733F9ECA552D3F26825B2B8
+3EA263488892C929DEC07E2F988B7F7657D53CFA5542CE336D35B462E5E8649E
+05973AA54C0A4E63552004E3C77E5FA77F821D820B1620CC8CB3EC5B1D7BA751
+16CC155DEDD4DB0FFD3009729F365670DF9472435557201D8E82341B4056D2FC
+5D2F7C57599249DA2A99A522868716B076320350FA7415C3B10D77A6E1DC77EE
+2D929A038DE3EB4735A4D4F5C8C340D6D293D57E83C2F379ED0EEB16AA3A2A2C
+ECD664E526D918A3D0A934170B6E1493843E6AAE87E850D70DE65D34AA2A36DE
+8687D57A6B6B1447F9A4380CC3D4D11D54CBE762258426C46B8DE6059E6A2F31
+E748549310FF4362129080CD98E70817A06422743780B86E11101BED14BB6569
+D36903BA8BEBC24A478CD430801082CCF49382D6F04DE270D51CA5BAFEBD0F8D
+901CDBCF10DB97E2B059C8CF7CDB45BF931203D5F8CA4622DF19682DE2BA7924
+47F78908BDA23C4E21C0ACD2DA259B23648B6F233EEE830E7B82DF4371F55C30
+71993EC2BCC7BD6411690B9B1621903F358450976D6B6EC6B505A593A9FB7D92
+7223E2424DD5AABEFF254FBCEF934A4D51949BA0E8CD614AAA3AE6C3ED7B37BF
+5324BD4998D8D5DA95E4741B753AEE580FB3913770C00277C9F609B4DF3D618F
+148E0EC7A75218AD788F98D35989F3DB94413E70955EF586C0995A450BC75820
+F5490EB55E5D0D21343565E1FA94FA64A74377F87E55EE0EDDC8F4286951A4EC
+ED6FB3B444206D89BA71A9723E41E93A9F6C80240437019F3C23DFC2491A19D5
+29762876AC60A14404493D04B5537C1E6FCA67B69DC1CD859F9C956FECF4461E
+EC8B6CD5B5A89A8A838660A6C3F47B79ACE3B05C0AA2F17CF2DA947B893B42FF
+749E2CD5E7B56823A119629931B1ECF65C51000A10412668877178F589B4DBCD
+24D39F9219C46BDDD6F101C6AECFD3876056CBB858FE0C4BA2BD0B5FC26AD5BC
+7FA9E295E72BEEEC721300567B6894FC48FFE5E3067C538CBB3B77E386F50D22
+F8DCFDD0E335060CDFA49231D157981925F1CB36110809C12BA28D2D116116DE
+01898E311FAACEE0E5402CA30B64D3D5A0CA33E417FC322F2F0BB7AD3FEE2039
+56A15DD6D1E86971AD3A5A9A27F33AB62A5A3BF5660B59235398926D6BDA33BA
+BC43B062EEF199E4ED991518A62AC374EE21E8F1E1C954BA6D1493388F708D0C
+961612444BAE019E1DC18BDE900BD7A781835580A74DC696BC512F7BBDBA2D0C
+ECE5D83A049F7A3286B94FC446DB5C3F33CA2CD3DDE2D0E774A579831CFDAC37
+9612858EA613AE6939CED001EE662DB17642D0357B80BA0F82ED306218DA8505
+A613CD622FA998EBCDFB7BC70F4E4C8F1F43241FC22FC5BB208F4B20311A98B2
+73F30E4DFCEC93875CBD1ABD29ACF80585F59947F23A96D218C0CB8BDC1C49F5
+70DF3D49704CBA9A23294A88A2AD61811450921B1E5C3C86435C55AF87AAF6A3
+A13709082DA9C47D372A4226116342DECB14E4A4ADB7598321516DD637B64148
+12AB17AC5B2EB25718856D50BFC8D64C78DA6E5C145187DB0325C30A42013A81
+590E58E74094610207FC70BBF1A497395939B42A6EFCFABFD9D43221DE484753
+DFE5311F1845592B4484B1CDFCC32B4E068B11A82BA189D2268D88FE63B9C6E9
+20C9E40B543B5C401265D92A932476DAEADD4D3E2BD6E4DBEC0B30FA90A1924B
+41D2EE9D8AF2D8CA79D15518141665B542C696C2507DD2F4D987EE5E22397FA8
+FD80743186872DD67BE58103321467CF3F4B8898E66584DBB9688B9C78873CA2
+9B72AD7406CDFE8B58FACA2904869FB0EF126DE299CAC08CB89F60561939D75C
+2722CA57853372C14F5BCCA5C4FEBCEB0728BF9E30140E6B0D6C034195FCCC89
+291CD818CF66757EAEB0AB5A9D5710988EBB052850DDE97BA0DC0B054BDF5172
+2002AD6FFA44AA5D9D4EBDB6B2C04E8EF38660D9BC4C995BF37DE078C279328F
+4C360B8EB337D798962CACBBDEA517A5EDFAADF0D445FBD1099837F9D689CD2C
+E330CF587246387EDDED64A2F4C397C1B2BFC325B39114609EF57DDCD7B93C53
+811ADEFA323C59441ABC447F683B5EC43870C057463DD502E9B9DA7084C3BBFB
+2FB864D26DF1BA41ACC815F2A71E96D2C6F572E1F7E4A224FE57CD605682F98B
+AC7BDE4B85A4C11D58981E981E9FC43B87A368BAEF78AD87B7DA0FE403AABFD1
+CF414CBE75C0E9E257DADCBA035E1BF05C4E17FE92309F18633D93DF885956A9
+6C27E77540F888B8336B61598CAB04F3B5A1767C1ACFE15D32A25E5B1BF51FFB
+CF3CFB25CEE7DC95203CC44805A935D5A9154A89FBD4E465F0E599EED4033365
+0A31612F37BDAE8CC85BBC67F7E375EA68C2982FFD89284B027501184C4D2232
+CE0FE4E905C4B504EAD009F047FE627C79AF9EEDD65D00A3858F88E699E5EB45
+4957086CB22776AD06C317DEA41880D88F0EDCF71B4ED76BEE665B7937D5D0F0
+E568C7615025172086BDBD69670EA154CC52C85CBFFE88C1A4D1AFB6624EE667
+1B5BE2A31FCE8B2A4B03BC5DC57280199CC0970EBB636DDF8DF54C4A8CC8805C
+AD63CE866FB20C64725AE4BC9F0EB275BD83EC89F2F9CE23A084B45694D8C3E9
+3F3D3C1A678690877E8B1B77ED85D4F6E03DBF1F3B1D177E330475F172E0E729
+63EAD8034E6100B2A5773E2605180629972DE6BAC0A8C2F9580E9F1D2E77791F
+E1D33C2DBED3FAC47DDF1B74FD02583C3CFDBB2D1CC2B735C02B14B7AD3733CA
+1682944ECFAD673A9AD5E80B6248FBB6E5036EA7FE5CA8C34FBCA6DBD0E76EB6
+C2CB89D9815DB3C45742170DA926E03493AD86BB19A1D3FC623BDF1C920684FB
+7414EF69CF39713A9495D8CB678BD4592B53C36BC6CF93505B8E32311D42532B
+5661051B855F01A9B3D77AE38879853AF0FFE2448368DDFA3EF1DEB88AA055B7
+91459586DD2DFEDA192306DF7143F998CC5D67C1CED313430E5CC3F9CE265747
+8582102111E7AF9FB94D95B82D8E1DF01F04F2A2C22A20207B59C8976D56833F
+E3B79DCB727EE7537476A052E92F7C3D6A625AAED8F026F22AB59EC0F86E541F
+BC082D8E35234A18192862EFD232C9950B1FE0BCB91209FB540DC5729B9E36B9
+94D0913A8F01FB6CB16DE85E6B89F144111B1D911DC527C24917D909F1CF501C
+1AF2923EF71530F21F9BF049A56C7AB3249A420C28954E981EC464F61FA167A5
+C6084661808089EE7DBD80A2D92FF4040B37B2D81A2F5A568D461BE1C62B0FD1
+BF6D1063D2B5DB9CD48BB2B2AC9CEFA543E0AC5C86C462399C1E82F25A157282
+D32D538029ED22CC5935E63FA076BE22D3F53B7D7CCDD344D68B4E73F87A5F2C
+691FE68C981FF7CCFB124506FEF93F36F7181075D7BC6FEEC0E35AF57855BAB2
+44AF021C7AD8912D884424E8BAEC68A5562B881793A1B47FD338B1EE4C0B8583
+2867C78DBC2EFC8BA1431DB1C8622C99BB2C2D4D5475BFCE87B11762427867B5
+7253463C6F2E1CF5F1DC1F7851F2EF6A957CAB0C0A55076C59A6FF9237917C08
+5F97C2CB4B5CC903B76BE8C057018CD962EF90E1C0CCEECD52F2AE35A94C6EF2
+D99DF4DA88247C920623978A1DBB81D8F171B588D617AFA8285F6147E889523F
+CF11EF4BE498842D3BF8E811B4B33131416658E03293AD911516D8AED556F7E8
+0181391AF36D862F5F8B4588BC99585BFF0F1ADE4BF73320158DBACB2784768D
+D9794E2B0F2C0696E5ECE5C7A7DE78EB5CAE85EEA244D43D0280D4C87B6B93F4
+803718596FBCDB61A0BFC2DC666128E56F3133B9D4F16305940B50ECF66D80BA
+06C0A73C02F689314F1B4FAC22D16BB1E414C6F0A1A548AAB1364D2CD9DDFE5E
+C8887964D26BE84986A6B1246BC306E6343CA376F990B77BE8D68A4E54304C3F
+250B2311586A1D1EAD2C0221FE1828CE8396DEDEF13E70E0AA75FFB6089DBA9E
+9FC3FAB43B3633C8EE7598619A0C6FAE2F25274787348E3660D0EB7212F5CB38
+032A41A54FDF14B32E721819AEEC54E8FDE3AB8F0ACEA267B01081F284B008C0
+5861CEB5C236729AA17DC78E92FE1EF9F047B53A59F2D1D6A6734D0413D1A51F
+75B03234F4775523A55978C73D5BF9031EE8BC6BF9E2637DAC07F5AAF2A6C41F
+77620B272300A78E86F71F16EBCE2DBFEF4920BD3F16C282E0BA4C872E5F7E52
+7ED2B663FE45D4A36A588D228D32E2861F26AA6FA8DDBC8110F4417D0DF29285
+F06B57B1720D0D13828A4DD68D57BD530FEB9C3CF305594B70E4394BD60C82DE
+A64EC17661977B18199BA661C48860919CBEB56AB6C32848D51733F1E959EA35
+DFFD823D92F11065C643AA69776F71163A60D4941B753BBB4A4C0C47BB1D965D
+06C9BA1FDAE47926F37C0C5B591058F68FC1DF3933B2BE014F99A53A617A19CD
+8BE011234D48CB7E14D31B02B1FC47C8BFBF04C4409D32CB454E8FA0EF9AF16B
+8AFE9FDDC41F6A23D700D4AA922A0316A895D240C5595F21FEBA98FE0E74B762
+77FCC80F4950A8C55B4A008FD381E9C0EDF4427CB324BE4ABFC790CEB53E8BBE
+AA90163A7BB19E2840FDA404E830F5478DD69B85C5E69573D8CDBBDFF41A8126
+24A6AB66333C749C35BE314777CC222D54FF2C4C75717FB938724EEDDFC2EC1A
+8DA77B5482E760B68F0A2D240332BD48803004BC157C6E8E192D512CE83D5572
+D388BAE80AAF5E7240A73CDA7CFF7F8CDAA4ABE1D3BF6ECC3641B6BD1C2CC703
+275D48D62A15E5A85F003E76D1EA7DB65E3476CCCF6B504514AEB1FF1263FDB9
+81FBF1A1873FC287FC6B6DB11F0FB463637D4F3280EBD19976588F900B956FB4
+36AAA8C1F040300CAB9C4F624B22C1D3D6414B7CAD36B5AEEC90105B5A5C2129
+4CD540B9D0129813BE7E20870365F8C46FEC92DDB64D0A6C7C5B9867A4592B7C
+124B1B47899CE2D1C03811AD1B8BA253B0D29DAF2B53E312827478DBA274010F
+C919D122DF24C1E372F7F3CA77A2C0EDCDB2635F4136EA0C202D4011346902E5
+1524609DC031656660302CA36D376245A64135890C13A11C0085861792384787
+D0831FA01C11F1E7B4429DDAA0B3A7EC1DC3CFEA24C34DA4BC993300F12A953E
+80C8BDA360789FCB0F1AEEA7AAC310D0C3C56F43F7914C3B037DA02C31EB740F
+2B1A696E0E5553656942BA567DC9C4D3CA06E45EA615B7B5674016DCFA07C0B4
+285BFD9D551117A357F4BEFD58BCE60661187A5FF20D27D685B24BEEF563F0C2
+B2CFA2565112F7F49023CDD405AF3E54FF994630BE678B0D6E1CED514FC93F7F
+63710D289026CEE4B074253E7E0AB1DCCAB57DA7A1E2050D2B8D3D75F2AD7423
+0B0A7081DB1FA44055620B0A2CAA54666C5EEE3C01540D96ACAAE98644E1D210
+E0E020214550D723431813C031DC7DF0D177E82AE49798F8E0E5AE0BB8FF664E
+4793F857BA380297AFB977065B7500E4C0AA1735AF4E15703C860A016F19E593
+319D14C497F24ED8E42F3FFEBE976DF33D697656DC11A8A7C6A60219BF63F186
+E0FFE55594B31E5C312DBCCA08E84E94E8BF57CD5F5B70EBE59F0D41DD3F6B05
+F7635EA92FA9E082C80075A5A5F684160AADAD501BBFA7746327E3E606D1FAC8
+EF7AE7C612371BB52FFF41A97A349D111E861A83C9C48B0145ABC3582FCE43C5
+D121F0EB6F5D219E52E2BB660AA1DA5551D6B66A732628D640BF9D8BDE2BB3BA
+046FBFE2E28DB31AEA2ED8F9405A39C16C3800E9B5611B460BE0F6716F2BF79C
+902AD4FA3B6656E13E9DD7A785C17F28BD4D646D66058721610CD756E0D18D32
+F09C740B6023DFAD45A718BBFB2E65544D4754A5DB23CC7988A3EF45CD3786F9
+E100D9684549A16BC2DB736D43C293097E082A968C27F0C120C41A53E3464381
+F7DCFA8B36344EDA85F53FF65BCDACCDE7EAA41A6D38C1F420F8F2E287AB0F98
+A0DF7D8A6CF2E4C78D606569BFB7C51495493FACED57CF2D507DDD366247D807
+28D73CBBDE2F4F666099411B1FD2CF7B93D0E9AA161024C58892285BCAA65E55
+9FB37468777706D2C57A0DF6D520844B56D62CD10F2D7B02D17F97E4F87C16F3
+9BA09013FBD7ED8C2DBBB432288E598241369B9DA6E3EE324290D73BDBFB5448
+E9D7142036C0FE538F18E866A50DD23152E2C096E1045E7777888AF5CEFB83B1
+C6FCA18A26E83D75AB66291A5A5A285DBB1B9525919564600D71A767BB03A8BC
+7BF24CC3B318BBC0F40C79835DE62366A937B938AD46D69C26DD0B38A2B21A60
+104698E9BC23BDC80D270FAF3C4DFF677E60CFD7F9AFB62B4BC36E171C079402
+E2BD9735E69C47AB8322FB722E8DBA6CDEA87DF40A827AB2618F74F1C441DFC5
+171FA17A96860BDD648B85699CC06CC8F3C38638084F8F4F7DA8B4AEEED92199
+14290A07373ACE6F9ED34CF5FD1C81292D7ECE91DB3F7B7E87BD9D405F2E29BF
+660674457A70FD024FB9194EB0FD85A1955EF983606F5D58FB6BFB03A0FD7DCC
+0F4E58304AAC2D9AD27F8A67E78A4A413A276F5D3160BB73DB27646EA4213C00
+A70E288F036EA3BD1FB35B49B9AA26C0FA6F8742178B15884E33D4CE17497C21
+3ADF16D6CA98017C7C118D8C67F71A4BC3C8794BDB049DD5A6892643F78B7CD6
+D91DE5FD6796E198D7C6AFC58D3403A416F243F1B58CF54E94F3DBC93516338F
+CCFE3E5EBA9218379428AAAE8017F3F246E5094B6F93A337BD182780389CA09F
+38B773F2A3EC4464CBC4C2E8772A73892309E2F12284A4CAC143C758C697B723
+0F54DCD8AA3CCE6DC74199B5AC793F7177BD0C29C80062C6EFADB667852739CD
+23068352E3437128DACB7A9C1D2890EA23B029909722C465EE332C62F779FC6D
+59D29B1E3C2319B57042C306ABE1171AD84F093F5664EEF387BFDF093DF2A295
+910569FE6DD519F7E7258236ECD89FA8C8DD43BFC4C135EEE52000479AA0AC52
+2A7777B9DE9EF13472F24B9410617088E264AB294BAD93820364B32BDB1B1627
+E7A086E354A118D9912324A8CBDA7F65AD20C836FCB3799CA31128C125601282
+80421422F0542D3AD57E3D1C70D93B159578BCE7D8DADA6395C634B6ED993FDC
+F1EE90835DABD16A1F78C77D6FE4AF0D3BA0F9D0306FF7DC0132894BD4D1396B
+1086FBB683925846AFAC5AD11C78A13CD9516826C19838B484C9E1DE1C793104
+4A3F6EC93C85AC329F1B59CA370EB0681089D4F3AE0A093011ACC94EC85807E2
+E2DA16DD14531CAA23573ADB8768BDA2313C2F6A4E53BF077361DE9B5051A00C
+D4D7A1CA6443D300761CB8440B6A25DA6A2FE422FEF37C0EBC8773088E8441A2
+E5B28AC4777E2523E108942B0A76A49F673B0EEFDDD37E9A339EC21B37B7CE59
+B56B57CFA4FC20B24DD06941DC5B82642FAFBC699A41F624FECE54780B6D892B
+CD80777ED127D7D9E7BA4758361288AA7DD59EA03F4EA29C6A70B82E1768AA34
+5ED9374131C8B17F1148D14D1B06E5B5384E2A4B132BBC49BEAB37F17A955D65
+777C90E18AA96BB5B34F38EEE2CCC5F1829B4140177CE1F01FF376F316E8842D
+24F809A54F6259792190778C2199904F693E8FD2A3E670A4249E88B67A1903B2
+92BFD626072910FD793A97DB2CBAC5A8228FAC4299810E04B46A3C414C61B8CC
+A6C009249E82856ED045E949E25F10F21F31FB630AC45D0DB3E81E337E0F7B77
+A23112F4F74F19A47831D05AC6A1E326B94D8BE832CEA49100E3BA8168AF92BD
+C50314402AC261E30ADDC7D87D9476278D3DA524CC03D2AAA14A906F762EEAC4
+5CE83F1B97500428171417C5338A0BF1A200713CE6328DC449AAC552BFC0B40F
+BFCA7694DFC4B4854F1D30C54D32DA1D4F0F1778FA5A98C9ACCF847122E2698B
+93F934E1D5416B340F186B36DA515B92B100C95F5C448491BC70945D55F763DB
+2E0EE939654A57C456249109D71348D48E475B6F14EAD34B961EDFC6C567EEE6
+4D1FB17DD8587BD01A95EA1AB2C506906E4DA2D3552DFE4518829FFEF2DDC513
+82077503D150DF80EBBD2354FD10
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMITT10
+%!PS-AdobeFont-1.0: CMITT10 003.002
+%%Title: CMITT10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMITT10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMITT10 known{/CMITT10 findfont dup/UniqueID known{dup
+/UniqueID get 5000779 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMITT10 def
+/FontBBox {11 -233 669 696 }readonly def
+/UniqueID 5000779 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMITT10.) readonly def
+/FullName (CMITT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 34 /quotedbl put
+dup 35 /numbersign 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 48 /zero put
+dup 56 /eight put
+dup 59 /semicolon put
+dup 61 /equal put
+dup 63 /question put
+dup 65 /A put
+dup 68 /D put
+dup 70 /F put
+dup 73 /I put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 83 /S put
+dup 84 /T put
+dup 87 /W put
+dup 88 /X 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
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3
+2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777
+6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18
+979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E
+ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF
+B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59
+A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDD513EB6237AC8EFFB213
+218B5D59505B920425C46EA55A185ED268DBAE2AD127742473FD1018459B7E12
+C21514D99DABAD554C53B868D24B881AE68B52684362D1AC0E86836194E335DF
+BB6D37A7215F8F4F5C816783BCBD4DB6838DB92C13E514A1CC344B43D8B8121F
+7C69BF2259D61B264AB5259DF53B7CADF565BABC47F75C56305448CDFF06E869
+91043B33C8FF9455A99BF35290E48EA7FEE38D35BC1A968A6B9489068F78E17D
+B4634A84F0ED0F884BA33B46FCE57168E787167E0A1E8EF21F7698BBBE25E23E
+F3D6F8957E9C3E858BA10AB9CCC45271F2B23D423AC0AF934ACE0FF6FDC79523
+20408F919B960A276FA88933B9920825E602C570CCE4C18BC4035BC59BF4F87E
+6D05BE7CB7D0A77A6C8E666D73D216F04AB820F477809B8410941E00F743FB6A
+55F98519E4B6DB552CCC264132BA31893928998BD1B95EA83246E90359D02566
+715AC489733A797E2532AEEA34F3702B8FD10B35803063296A3FAD8DC11C0D62
+13B2882C4C9B090AEA4097302239EC457537EE7B3BE94AFD5A8672E6069433AD
+EA5F9A60B8DF0DE474067A65F1A845949CD12CC4E0919CB7C50C0C23AF8D6365
+083C3D64103949AAD9A71FEA2C70100FCEE6E7DCF19A7AEF7584F329DD12DCF2
+E02635F8710D976F815E76D3F3CF476655494394B44FADD9A9524EF08FC31EFD
+A32B97875B55234F019F32EE4AD722B6669E27C2A629C3F170012C9AC62F612F
+2A54F7B1EAB87B8ECE7B64A3BDA7B6BFD5B6F3F964656AE949F91F216FB70770
+DB9F68C91878C624762DE0E5F88FDDEE03953A97BCF473464EE216293D360ED0
+33AD04799EB9F1BF212DA7B9CF1F5E648ECFC0AFB4D935B09F36A752451930A1
+D4B662BC214513D17885D824D250AC3F036BF6377691E603F12241E2EBD2713B
+E665433EE1E6728C071FC10EF177EC0C2D3AAD49BD2A0BF511A722FDCCD196FD
+BE73113298371228B82129BE4B0CA0D614270821AC770E51AE71C71E6B7796B6
+B54F27FEB1D9FF8F6C4F3FB28AF32DFCD79B8B834EF8E02A818F8917A3DEA452
+AD22FF83BD86F4D5D05CF44F93CC4055A7F3D323621F49470260A559E346CB46
+37E3ACF70887051D7B58356067AA200838AB1CE93B7CFAA89CE01362B0D57A16
+FCFB51D3FBC0B1E1925EE1764C0FDDB0439971FBE93C7C6381716EA9FD252391
+84BAF2C3F2C230523E09D068507E1808C86B789333535065B889436A12A7DA91
+EE838E04D98F00B23379C9535692FF3D4F8A2CBC448342B37D781CFF7771D83B
+A1D1B19CBD3CD6EFF51B850E502194EC0E275B1AD49FB345F4F5103FC5FBC605
+1F5BCE0423D467836A3D70DCEAC117EA056D12D37D4009D7EE630434645AD290
+F47482AB1E4868B8F195B876A8847F88919FCAF40768F2D927A5D2971B0BD728
+68369BD17075201EBA992B0C155B0BAF00D0B109B4BA239646CC5716E1BDA9EE
+EBB5A34B7FF0AEA47595024C13A8EF233C8CBEDC7EFABA8CF1D4B73E42E667B9
+D86D0D3B042A018B01203B3C7434F18AC4B93D02759E42B7691D56D778153D83
+BC3D10964C98F4371C933E0BD5E18C56DA806976AA4D80E4FB8CBD6858DB904D
+E862E5951CCE95656600AE399C5BFE7FD3ED380701745BEDC642CC77539DB46C
+17F1DB0C16ADFB6D50FFC3964B0FDF9D207C7377F69D7B741A15E04136BD7124
+1433FEA5650A3BE38EDAB4CADA541EA9D47C16D1EB3140FEE88AC4F896F98D9E
+0F97731290739BA9D456D7792C5A6B15321A1CE74E8E170368C832649C98597D
+DCDE2338D52D430C98369B134B12FD3F58EC66073444696753911B058178FD52
+698FD8C279E72DC10D3E619D64CA5A8B2A08519B37FB9DA7FAD1CDCD5298D261
+BB988DB9257C3EEFA39A52F70D5D33342E841BBF95A075284816114283199CDD
+CD7C85CA388002E4267F22AFEC408D0DB62647CA3741741C12EB8DD8F1042988
+EEB4ED6B9E8C1CD526559EB4529872E9CE833E8E3949AE5CDECB34B15661C4F4
+6CB3912678D23E0BB8E9B5A6C4A479150433961C0871947AC4E7F8AB76C7C339
+670A8943754870BB59B5359D0982277C777C5470A18E9BB14E9740C3A92C6855
+B78FC3F38C258C810449A3F69251CDDE108067F925474B768FD781881DDE45C0
+A9D198362CA8A8046E9C8F8A6AC3E40301D7B54244076020C677035317AE1F88
+6F337E2DB69E60D5699A8B6E5EF7CCB2E504C66D3786A00E4F4EA4D46F3AA868
+F66FCEDF67B7FFA9EC39E8E12B867019CDA6605563B120689CCC71A787B93093
+639146C052D9A294D4A2F17C135C760937EA22BBDA1F900318DDB515B4B7AE2E
+AD4BB9310DC5394B9EE5F40AA5E201CEF58FA477EECF0B90C2CFEFF17DB458A4
+0558525C20BBCC84647D7F4FD233F1CC8760AE8ECD99A60A0D3138C8AEBF18B5
+9B59D86468814143CADDD50EE8D03928D541F8BF6340B1C6214C18D1590D09B8
+51355A8BECC452CAD2A1D8712BC2B1CF0032853B240492E1D6C7B13C39106279
+61F948E5D69EB4350AF3901B264510F415048C3931465A26E998B1A498B8EDD2
+08200ACF62EF22F5CD31753E7D6478FE111E8FF405E11F9FB8484A7B52703F13
+E672BED8D131D79389F63F2A6FCA03FB36EF736114BF629074E722C91A3F3641
+98012261143E1CB15BD8DF3D67DDAA46C3C718169126667A219433163017D553
+63CBFC93F6D1F338A1D0439734ACB2EBADFC1F4D5C11D4AA5EA25E52F853E5FA
+087DD7A45F307A399702949DBC2267409500EEF8AFA9354308DE44869CB51198
+CFD8AA07005125202E564E6F548E296E698D2CA5B8793D86E28166682ADCA61E
+334D861042393BA0857D77C5BCCEB9A4A16D44C95801E4D2512D7ECAD02C4776
+5139247AF495DEABD00BD787B028AD7DE9FE827DFAF22763D59799FCFB003278
+6D512F913A924460D9FB6C2AC27062219817E3A79DD96841DED1FB4397D38A66
+56B7A083F5C4AC70ABABB3D98324381F6109BC553D29553B36827886D80013A5
+E0407423A6745D0760BEB65A5FCDD6C00D68268DEEC4882B2F6D0D52C0D2EDC3
+86DE1767436A743C1772B963F081BA723ECE4B5E740D473BDA10658E0E2CC014
+93D6F59E3695BA3F5F7AB913653E3CE63C5F1C172B6E1AD1EDD719F163F2F3EC
+E73A5C91FF854A1A309C72BFD7F8E56BD46BE7943B06A5700A7FA1CB86D3B09F
+98F29BB2585868D5C8F9247A610D75FB3BEBD6068A735DEEA92A2F8D46E5399A
+4CCCC1F0270A34FF5C489DA83F90237211BB3A4840EFBB296911F2A373C220B4
+EA4B811F943D2DCD7C395A84619F10C2B622676033B6B743CEE9D147EC25F602
+D216DC6A00064D707727AC08B732A6E313F16F8ED7A76103822F8FE73F1A9804
+AE575AFFCCEC79CE105D7BC648495256A25D68F812C1E3AF93A50CF06CF669E4
+13C5104578193CF37360A69E249B9E8B4CF71E8BFE41C510CE8019A0611C8382
+281B8A193856CBECBD5CE2DCEFC29E093ACDF69E5652B2751F52E70B175022D1
+BBDCCB0E16E467836D2A68580376144B0C6ECA9D5879450D5AACA9A8FFF0DAB0
+482692E8C4487E1F0902D0898DD4905A0C2C9173DF0C1CE8D10E17653F2B0017
+E57BF148D72721A58ECE5D5A3757E1DBBC36BEA533C945A1136396ECB94EA14D
+8847136B3397625949620845A15F5E15C110CF69345EB01130E68607D0F01E6A
+DE3D2997685BF59ABBF4DDBEBC433257D6A153B98848C484E1035D24D0C586C5
+E8970357946667E6E14FFF34110380A23E1DE7A26F7C56C6CA2BC3437DC0BCFA
+9EB6784FAD114A2D1B0F967BCCC3C4F5704390EE3A34EAA95B05424EAA00838E
+95877D86D1765BAE85E5CE593D4FFC2BB6FE3167A8EC85FCDA0C11F49A63DC4D
+2CA32766196C626385461E059D1A750C7BB45ED32ED87668FBC8C82664FA1FB4
+4C8FFE345E9D80DCE8C7AFCB7654729E36FD5244E388AE3718F3E70E1BBF68E1
+D66EB6A79A9877412A789B433D0DA428F9AE2452688715298E99DAB167B481F0
+BDCE3A0489E87F400B95F63CC3D406C4781F159E58A51CC9FB92BE53B9A88687
+34B44308D25271A599E911091F0DD6C57D33B9240D81B20D1FA452A70D88F4AC
+6698DE4C12CFF027D351EE01B0C942C9A2C856D485C765798647A48832FA8437
+A56A59CB5739CC359FDB3423246D62D276E51CDFB0D715D9CAA7BFEB877266ED
+1A657D7508CA17EEB1F43243681BBB839B16F2028FF098A7998BEFE83F8174E8
+E16B6F9299DFE74FAEFF7725F09BEC6EF729D79723380458DFF9187124B7C95A
+560BD01CBB70548DE318F722541BBF9B21AF2978708223A49DA2068463A6AFB0
+9DDC0EB5AFDFAA600F3D01EA01784D0D4FFE844E66D720E4B4FE52A85756A47E
+AD5258D6AD5C4AFB3FFFC2130FE8E7CA62C025954CD07209444130C46CBDEB2C
+306825F673A8B2EA21E19CE893C0130C8058FB540E74C6C1EE60BDAFC2458431
+C1043B152D45C754CCF7A9CA3DDB7510B381D65A54B692CF4AA2F97794E5C34D
+FE40B6AEF0802A4C0899B96F88E3947FBC6B085F652C5060DC6C4E1300B55130
+ABE326D755DB1AB573892E3B95378B61961DBA504A06C3C94E5A8442EA736A9E
+FD8B0EFD03765C03E452DF5E7B5479E36C3C2A6069D339D136994A4269A53ADC
+B94E399A2E485CD1B93B78328998D397B2AB3AEE029D2024DF1BD5B1B4737AD5
+2783C573965210BB4C5CE107A3289C3E62005773989F7C0A567653914575525D
+EA963D199A5BC15B51C476883D21A88BBE47AF7260BF79460784CF3BB43D91EC
+88BFA515416602EB8EE0251CBD7A260750960EB6858C4DA72E7DBE9FB154F55A
+192D587A289F4DA7142AC9CCB5EF2E8BAA32306EBD3A5C4B223BCDF76D2CD755
+AE8D3849D5CAB17F2BC3ED236D337677644D84637A7A8893F875D4F1FFEA107D
+390133EB3C284A1A9387909F020A0A71CF5D2592EF725B1D56A7DB6F0012E15C
+D6783FD87ACD23CB822BE885CF88D2C0306BA6E9934C391131CACB5342CF94D4
+D3E11C31A4211389DECB2E7E01152C6CDDE845A1005D4464F20A58B53DBCB387
+D80467A6F9A44DDA77B87C228DE8D64941CB2B5A65FEE919CF1502DE6CB7E74F
+013A53B152384719B18482317A1D11BE5D145C1B47CAC346C4C055DBC7A158C6
+F3A12CB7D4C4933C322ECF307D6D4356976014149A79522C36FA8265BA16729A
+52A854CBC9D0D5B106D1D779387A32B12706CC32A654D61E7F0176A52DEC82BD
+41D70CB9150AA7C4ACDB5C42215C9DA636A234ED410DFAC4C1C060F2ABABB5EA
+4F9031F8C40EF27B1995136AE9A838D09E09F5C8EDF2822456C7A41A9BA87961
+F7EF52BA00B2115C6799124A831F57FEB0A15B4F96A6711298C9116986E02C63
+897D9AB5D159EB0962B3488D8A98FC9445E7CA31D6960BFA096C64ABFC328D42
+55D0AD525F3BA2F14E79A113BCD777F68970429C004A3ABC3677C6FDE06EB833
+790A44D0BB2455C5FC00C580BABD4AF387A417BD2D7204CB6E350D0037656E21
+81E6039D7FB4C355CE6A09A7F78FCDA2776C440526AC54D8914EF719FC211DBF
+057EB1AA66BA8915DBCF98E288367B6F58567D31B5224D81046C233B250C8C7C
+D4D569C41A66EE217B5412BC27F26A5A3389398C32A56DCD1A189D4DE50A9D02
+4BEF161B623C3608A0E11F32B8465269DA1E2C71BD638F8D11F0457CFFC479D3
+1AFFEDE80B57666E1DAE68A50F6CF5C06C969BCDB7CE2FAFAE08FA5F4214EB46
+7F764CC35AB80A29FF6802AE1B4B3107037C0B6D0718EC0D9A6AF76F38D6BDE5
+895CE345CA945FAD6222E40DA0BE2CEF83814BF3A65576A4E2A5B9C7CE4E9D0F
+7F89E869AA44BF1A15BA420D1BEED71B81776AA09CA6C181294138BF934C4997
+61AA57E0E61377ACF8B802EAA64287CB2CA0E116219D8E594A4620A310B61DE6
+C9999AD5C8B34880357D08A06B7E64E68CD0F58CE1D6F2D513A144C8806EB397
+BEA5B4597A261732DD02C59A13895917653129D50056EC73EAAD8F1B3E304995
+D692B02721C570066B060B118512F9B9D09F9E902F8A690CE75045C373569FE1
+9F5A85282D9A30A010DA980044E64F3AAE61EEE5754C50C409C703955460708D
+7F57D60146F7A53744A83D50A31D366154C31754B3D3882517F972BE3A5927CE
+E1E7B75A2C33D1287F160B19D992959946ABDE9F5A6A434FEE6B46DC281992E6
+9652A6858DFEFE69191D456BCA62ADF1C43366B746E1A82CED283245A19FB291
+9E2793F17452AE2956F925F5D3887A0F0C08B4C50A99811D08ED0552CA11194B
+DF3E5D552BA139CB93B244293FFE22B833536BB129269610277EBF4623BE23C8
+38EE659F613195F7C62CB914FA11718E85527EBFB0CB852ABCDDBC54EDE764A0
+3F41012035100097EC0CC4BEBD54BD06F9A3BB5C9132CABE02E255CB22524739
+416659984EDBF9E7CAD30EB1D13229EB122482F87852C2F3490D8BDF228D7E6F
+93A0BE686AAE8E0A8B577F18D3565747C52F1880A6731198461EA1E471B41BC9
+4189432510882EECB417092DE18AA3441D8EE6601C6DF2F2550BA217D2B7F313
+FE5901211116053FA76C0E8831EF0BC518290011A8FDC6AFF1A7AAD8D5F8D099
+E2738D337B1036FDCFF0940A2D6A177BC16F58C376DF77E3A18DF704151BA955
+8D371AB77B00A1DDD514DA96F8A5667D461632AD04A6AFCE6DB1ECF002C14067
+3FF64B7DEF336C983EA344A775E0A5DC7FEA870FCA06E23FBBAEA8D1139F21FA
+4E625E12BD6B01174E8EA73F1898D3EBE14D897222B07A2BF0E133024FFBA7EC
+A21C802447C59D1A71B401BA628DA184184F50E1CD27B107DC705DC1811315CB
+58B423CBB5A34FD14743DE9C0276D0DE8AEB9715DA111AB6116645A2B5769F47
+F1F6618C375D1EC39DF7401B7CED996443E9E7E9CBBEDD2E75140BD1B3C08C38
+2C66E8874646580C332C4F98CD1245686EB5C2E79D5BC215B3795A6FA8D3CAAD
+EA8719843D0081AF71A50F6C2572FBED7EF26D4C052D46C8296CF0F0612AA8BE
+102E0E620B6192CF434F338D99527CCCE7C8EFFF29041423632D64DE939FAA68
+4992B22D98F16A5D9239C8D7C490F47C413A86067FC7CE66015F58C938284CD3
+00736728CC912135ACD20F9603F4D408F2924AD1B26054A9A63C758E769BDBE9
+7FF65425BF8FDDD95F5A02C8DA912FD44FD20EFFD3028B2C07BC5D3124DED2A4
+46ED8F3FBAB326FA3DF0CF872CB5F14E14BAD50434D0E530C651E5FF723660C7
+3F1235439764C95C9A2884E34F26ECAB833B1D1E159AC119769AB9B4E5EA5C24
+7DF1CBB85592C24E9E6FE50620DC4C9467DDAB08CAC6F066AEDBF3BF04EDCFAC
+BE0CF1EA585539E6459239B804469C909F45C381338DEBBF8EB842690574EF2C
+1CEBCD9AE367A1C18462124A6C3F1C03E37B00F91822CCF7AE24DDBC7F4B5217
+05762DEB3C714038988BA01BA1F73061EBB1D34BADA2F4BF09B41B59C45E4BCB
+62705505F87BDCC02101531A222B51EFF297389F57C2479BEDF28C5B7B5D7FCE
+6A9554840C7EF2F6B250EF594EFA56D7183BCF8E9A33B2604564F4A376EF8329
+1B4CCE80649BCF3110944DF9A1C72FD0B65CD37A29A466A1D31C752FD08E122F
+7B074184549DA6D9D876F0569D0C2B86A5A5C848D0F552BB5AF9A293B82B32A7
+3879B225C78680BA17D91E80E5A76ACABC6A7DC3D9110067F9BC696CE5EEA593
+5DFD15F5C18165343534EC7410EE8729AA31455924F61734C54D3EBF7D332539
+C3531920117BA15A287D3CB108201A59C487148A6C01C5F6A9F2D18B3C73289C
+A33BD156C4E4CDEE8624360372A8748F872EA85474D152AE12CA034E3B262C7B
+4F5D0E7BA3B7FA0EA12C3F4B0C7C9DEA6DAD3DD844A1ADDF2B45A8B5CD33FA90
+B342D0EA6D0A182353DA3A33E6DAB7D1D4F655904A21171503AE6AA82DB4C4F8
+46868797B1D19FD7BB8290608AADA6CDE17853E4A40005EFD6D2075A3EF22C10
+4BAF20BE7A99EEB407C02FE60158DFE05AD51A5CF212F1C37E2EC49F9560FFBE
+E85507801BF6AABFC9F5AD40CD7CD3DA5243DAA91F14C5A3F32333FBE9CFD0B7
+A7BD3CDBB66EC4FC6507421A6F3A37D988ED10174CD5175CCFE22D7ED00C7527
+2EF9EAB7242C20A0BED0E64E38E7A70D55B9A57C0723016DD8A837CCF12FECB1
+AB0CD1AE3A11548436BA9E6E874E502E4A0F36A96B1B1F31AFE2879BD8A9817C
+CA4E2B049A42A9F1E6A351C415BAB1678012E6FCB1D4E733D245E113AD1FA768
+DC4B56CDBA5F3D9115C8BBA3E90F515FC15F83464808A21950CCEA6ED2E2A165
+DBC41BF969DAF43DF004160ECC4CE3F67A69B38567B94A6C09E13987E1464319
+AAC24C977D72CF57C4F87BC9C3EDD83314751D7C2EEC3AF2C40C4DE11E8FE15C
+F6B650F7337C7E33D8B740309BE4BB0E27A8C1BCA482692935F79CE6FB10DCFF
+ED074B6F2967683845C39A0D6784985AD5D78D98C5020F6BE49032ABA5F6565B
+966BF6507FCB7E7DE6BCDA1D2CE323E493AE9A9997BD46CF70C1E5DC301B7182
+73E63696DA75B2A2483DE3F53538635846473D8F5F7C0D86FE126B9F815C83E0
+0B269FA3C953C13CEA2D3A428DC41460B34D5A3EC9ABE2C8AF0B8A11BE4ABAC2
+4223C328D29771239E08526B50ED7FFB72DEA8F9A434E1E456CB2B34C3A1F531
+51EEF42A0D0FDC6D2A5FA9765F80CD73399E25D71E7D553F4E7A765B92FA611D
+574CA4DCF5B9895E11F026F946B01C0B8D24DB1488986E9DCFFC590BD4D1D3E1
+FC0EACB7465363EED630B3B7817EF0B7B25AA32CD704F14E59F04B1C0E4D4451
+A2117A9A23C944697D0ABEF7C0683231162DDC48BEB97CFEB075E6ADE14269D4
+6B6723B5DF43E00168296298B0ADB3BC8A57547263ED05307A569C9542FB8732
+0B6616B43DF924DA975FD5956CF3F85833598EB7239C93ACB88F717666A6D229
+455263E9226F2B53D21FDF11DAE4AFF77C927359B8CE1F8D308F968C6035655B
+E7A819FCBAD24BD6CE41278F4B6C75E472F3220F73F0A46082EF70EF7FB1F54B
+02A88EA84B9CF6D684B0FE38758D3EB85A957F226BA676FBFD17CD24689D08FA
+4B5028811DEAEF67F0A6EA17C7ACE31E36837DF32DD95281B6FC38C02F07F11E
+0EC27FB641B7E1A9A2FA5FDAF24A54DA3F6EB573FD2A591EAB0A4A5F5E56AD93
+68FF099BC6D9C4E90B8E3BE34B052622B6C2D2B146B90303D20FE8708C596C04
+4BC6BED65D9F8A00E31A2876891BA9D9625D253E070874FFCCC8D6784D8BCD51
+AA9D57004C7836E0812714E29ADB2842CE605B8E99089E9FCF6F393DF515B9AB
+2B0330936F02AB2B41250BE345405FEF07DEBB4CF0C08A00BFDD223115B0D84F
+4E57F0554F87B79AC4DD27D560A52F39E5E9BE1DFFF97342E2EDE580239B5D97
+0E5C68E458B223EBCFCC5F3AAC6E501258FC4B84474BF0AD8B6406A28FE60E32
+20BB0CD632603D68F59756870FB41C93885FF7999A41569A851DDFBE1149BE98
+A9A2E79CA963E62AB1C7906956E12F5FCFB38B12F46237C44931431CAD13A4C5
+E4B564D2F1CEE05D3FE24A94997919F27B189ACCFA1CBC8E05E15D0079CBF1BE
+BA2C314B8B12CCCED98176FA5C562835B1774ADE0B5E26E82F802E20B9BDCD53
+25BBC7D9300233EB5BE091BF42C3233875E06FA28E404E3F1AFBCAB621552C28
+43C7713D9B90D05840A9846411FE3687973E55E5A265572977F6F1BE69857E7B
+1BB9467A1CBFDA0DCE935B9248784BCDB0E740830D7CBD32E22486A6886FC5CF
+98DC3D80484F60E59AED44ED28AE3BD61B761E53B62D59E98D09E9E73D951F8E
+80C656677F12660D8AEC57205AF1495B070C45A0694C47495171264985937838
+78C05525FA1115737059AFD385342DD30BD3C753ABE029B71A74E5FD0A2B45A7
+02E0E4218BC9AF4462F926588E28905E30847EAA04CECD11BFC21DC9862BEC1C
+75B2891303A6F290A5C43D06A72DD5D71314E6943C55951A7407E4FFC56A4EBC
+8E80769A51F6D020FC1BA944580986430AFC68FD0E5D8E63C2F90E57A050B2FF
+387E08EFC3430A7D9FF419A9C144D8E626E4661608525ABD1BC971E98353768B
+7A91889E852D1B808BFC9FCE07F7E505A43DD02B21B42C07D896C99A1BFE2B22
+DC5C3B6F80D82EE4A66D421DFD912D222C4FFF7CE3A5A0C6A725F25DB75F88A4
+E00E271AB9E8FE69C7012495BD1DFEB452842ABE7FC161B6ADC546882BE28189
+5EC6A8FD669D67E0514F2D6F2F2D0AD50DDA16982A7A83EF2BF785835CCEEECD
+6FF5A5BBE859F4AF8DBD170EC4017A039FB4BE8EFE6D09CFCBBF37BF3E7ADE7F
+416DD40EED0CFCC96A9453269D92A530970ECF8A11D69F31123FA1F71C8BD41C
+3A3B61A5A16C8646764585D2A6D922A02AEEA72576FA71819FD8F12FD4D59A65
+FC50F7331EFA99CBA19BE1EE65F0F0BEAAED8C3BF9C45D9002E066EDFD837CB1
+5EA78E6110CADA7D19AA441094D37A082504ED39C40E46B06F427CFCCACBD9ED
+FB375A70C331EBF778B2176D7911353670B34F12E7BD805B4297FA47FF73057E
+B2491D481341C045E902807444523460C25E89C4B2B9F2337112B21E3A70DDAF
+7F7D7067777880FCAF0FF0CC042CE500AFB94BE2F5E83EC1E5F85B387455BD55
+9ABC735189DE24D26909E48F60A7F89380ACD3A16EA0811D5DCB6DD109F488CD
+380A9E7322AA979E32E48A6D9EC49B83FF3E1C152FD1DD1A11958C7530E237A6
+FD33C428620D206AC91AF7470D433161ADEA3B038CBD26BCA69F748A7C2DC8E1
+DA0D4BA2AF6FFFB2102796A1A0E2828B71D43217F33BC1D06CE5D7954853922F
+8DEE6C532D88BCAD38540093246DA783BDEBD0648513DA6CF9816CE3DC1E9861
+C87F692023A748943BAA5220E04479A56B7C5111CFC322A0AF133387EC50B9B7
+4D74BF8F6C497935F4F39FD93259B9492706AC524AAC11B257EC36C06D37FA9B
+FB6FD8FB82298ACC54AA345B454E667614F4CD6B43FF664F93CA507782A7AE51
+607124F7004F233A534E5677867B29A94A78EE2897A6D64338D7960415106FC1
+97F3B94564393F96C9E82920198913CAFDD83DAF4AB7036BAA645BB8DC2B4898
+A2B4393403C3CE3C925D246DD8971937F35009D36D04A13802EA81B268660CB8
+6F5468A1DC1FA08298CA499B750707E121B1B40FA9281E46C6C12CDCFA23F93A
+0CC67C81E2EABF5EE58FAB3CC807E449AAE706D13FB17E582406588033EEFFAD
+5B19299C6BA7954414B60557821CA100528CF893EA8ADA83E5462924CDDAE047
+39D0A947C3AA1040AF4C11FA13CED02BD6319F647EDB882E6E52A55E6D38A2A1
+49913970C75570006662AF9F2D8A92C56E138196DBD3F04A5A224DD0368DBB04
+E0307C5524E4D517D56A49863161DF8E8D60C599E002C6B4C26C9E1EBFDFDAB5
+8BFFEA70C221049E862656873684C0D212DD113CA2356308F0BF24878D534908
+1122491EA6638FA3912D0D396E7FD7AF53170ADFDAC3C9C5898D4F9243BE0751
+06B1631927C4E8EA2F092977FB5FD2BC6AB9EE791793A41E4AB142FF487D25D7
+257BF329D6422696B3AA5130788DA1EBF4A96FC04644CC0F08EC4BF8B277DB8A
+6A83E30D0CA5844EA6D39192F2401C26791E1438012248B51729485EE2398737
+BED715EA8052EDD273613EFE8DCD8CE6DED097666EDF893299BCC03E16248700
+6015D0042D0DE34D14644730B4C4B24FDFF6C300E8F37D5DEF781B41C82DEE9B
+1B0181B64817203AEA242BCBC543D42F3B1EED234C2B96E99334ECA28AB4B5FA
+3008DDC93FE1EFB9A3C780AC89294E6D07320376128DA2E59BB5779A10562F6C
+16B1FE6B0DD05B48F0FA0B933687DF1DE992B9E65581F4E20C2C4B04B4658A00
+4B6532CA4846E088DA32EEC1BC4AB81C130DBF0CB47813BC40B5FEDDEE2730FB
+6861E3F1F1DA9EFF60052F7E7B35CBA8EDBBAE0334DA0E2A0D4EA928A2D96354
+6394F31559E29DB0B7ACCFF23C9C4A130F8B93BB45318DA94160379FA92920FA
+AB70CE10C36D3732AFD97DC65B08274C42564AEF5CA53301A44FE8525EB16359
+C93BAAAA5754288399F3EDE223C0C1B5F1325AA4F0202BB97F65F59957D396A0
+BE2B83D14B99F5382B8294E2C2217B8332983D910CE669E2645D753E403970DB
+F4FAB8D7B23F095F5CC0E7BFBB9AC3789AB3D9F9D28D8563CC15CA3110D0ACE1
+54D7F94F39B32BDBF1E5F7463416E287C950FB7F4722224A6792C841D4198869
+076325A5C1178FDA69B967423D8EF30B6193CB00C30F5D96B7C4FE8D6771CB06
+7DCB824B2022EAA5E4C181AF1EC5DB82263571F0FD2B5BC55C8C5B850EE7FA1D
+1FD9440D61F8CDC85D5E657C877B5423680668018A57998152CF0A17146BB18E
+F9B355252AA69389BD731BBF272FA451CE014B507C3B3FD3E04EA3AD67CC6CD8
+DB254A575AE74B98B7EC2797BBD3CA3537501E709D00DD7488AAA9A4CC2CAD6B
+B6B6874294E77913EABBC7CAE4DB767B21B850D121
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTT8
+%!PS-AdobeFont-1.0: CMTT8 003.002
+%%Title: CMTT8
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT8.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTT8 known{/CMTT8 findfont dup/UniqueID known{dup
+/UniqueID get 5000830 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTT8 def
+/FontBBox {-5 -232 545 699 }readonly def
+/UniqueID 5000830 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT8.) readonly def
+/FullName (CMTT8) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 36 /dollar put
+dup 45 /hyphen put
+dup 47 /slash put
+dup 69 /E put
+dup 72 /H put
+dup 77 /M put
+dup 79 /O put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 116 /t put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7
+5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99
+8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716
+EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C
+02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D
+46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A
+4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D06E82116C79486D8
+C5C32DADDFCB2CBD26FE85FFCB176AA09FBE325434B8B9D358B7C180AEC54F8D
+24A1AB4D5EE5375B963A221F060453E01768F0A398352CB2C76E6E70BA017570
+BE1C3D3A86E803B10B506FD9DB49DF5CC7BE17133234D7BE9230BE8B7481B357
+08595FAE04D04B14C633C52E303B06EDEEF7CDDF20F34D7F08D991DFE2C4261F
+298E0A818EBFF29D3B29D1D0CE2F071B49B0622F65F936F6C1D4C6AA2860E56C
+9140A4FA23BA31888345142DBFA79825662511437347767D4A13A976FCF67EA6
+7882D7B391B37FC1E22787E484D19BB252C4D73AA3D73EFA5C6341CF6F127033
+2B91079B5FF8A164666CCC65D0002EF7E374098745C84E3037324B4248C5385C
+FCF0539F8C04CBC52404BDC6ABD1474617D06377A69F4851838F462E82A86BC6
+F8DB2E740B5270AECB0B922D4493A75422349138B539B6067C040F3007F04191
+CB545ACC01B4F28AF811266260FEEC04057287BB5C26C077946DDF23322FD99F
+2B3DFFB62AB8BF12000AA81ADAA6A064F9C34D5F36CB7F66A5EEB7B494FA1AAE
+32B380163AEE08F5BD270FAAD8DAF0CC5B6979B8D4FB6AD723E011DCFE119092
+D1025BB62280B745BB0FB140E82325F1FDFC029100F922BF206E5527B7D8F60C
+3F3E3AE2184CB954391D10A1618FA0940F12159167494E29A46125CB911B19C4
+97B4DC76FF53B7F79E380D7375FAB6C30A467E02E48BA73403D3900FBB440C9E
+951C081C8D5E04DC0C8E1BC7D552075CC360B7D1007367C655069324713715BF
+F8182AEB6F401A1F029FB3962BB3A0B2775979FDFFD834D5559EE20CF54D789B
+E46484073B059ED1980C4CB2AB70DC74D6673DA37D8D9214E6FDC7C29FA55AE0
+A01A0D23A71396BA0A0F332D36B7AA70C37462134C3A8CFBDFC91360CDDCEDD1
+9C2E12C44D52953E509CD6DF4FAA624CAF95D585BC4A036D73CCD5220B9D12A4
+FB00F763274628831334E1E727FEE9079E42B7F676EBD85E5F21FA095C1BDD30
+5F557EE701707CAD347208550DF890CF5924BC50D349A546ADD81969BB7B6E75
+FE0CCA1D5EF9F69BBD6D58247C321C91DA2EF7558D272A4646327AFCA6D3D93B
+F6990BA00B058A1C5C34638E09A21350BF64E29AF803F2A1A4E4D5FE16E7B05D
+FF63FCF02B6F39C7484424A71D27F93D308C1C112A64C85A041DA3CA11A19FBC
+6D656A4ED57030284B10206538F39266CAFFDF5AAF91F50D9A6BA8FF51608A56
+13A89CCDCFB03D10E3F4F8A4BCBE617A937B5AF882F2B7E1EF7F8ADB5F1C3FAF
+46BBEBEDB26000567125BACF48771094CC9AAD358E053C433223EC39ECB0BC90
+95B885CDFDAC14CF4FF78A8EF358BE6DE152A62D3F2897CEF469E030F4477687
+2B1355D84DC33C713ADD2C62E9C6E04786F6FA9343C144A726004BB7BA12AC18
+7BF664B09CB859A443C2CC51E96B0AD3F60B1A9F649B315955E6308171F95321
+94833FA1195B6363F5CB80CE85C7D8D5851D473C428D00451B66FAE160D207C7
+6BA5E1A19CAB4CB283DE71082DB5E9DA38DF26061B7B8753BC3A26666F053DAC
+761A9FE0AED478D9B5EFCE77458A9AD93741F8080159429CCB04EC0B52232A36
+1127C9B9BE80084428DA88EFF6F702A40E825B5D91D1F64842E88A08932F9B1F
+AA347F45EE7E093729A48FD29EEB58E419C6D0FFC13E3AD8101B820F3380A4F3
+4B44854426302753008E54FB23D8136CBE2BC7474753A387E4FFA47E3DB9F94D
+B0287E8253DF368AFD908E5C4D73B0F1ED5729E1364DBB38CAF033517EE593A1
+04F3E0B2B554D8CE8A89DF73B96CF93DC899C5687B8AD59BD40B534D0906D720
+E39A6B0B6E1E2041751C6199AF63AEF60C5C175F1F84A78466557177B583398C
+1A7B838DD8E67B4784374D2051B800629BE02B9C840EC6CAC22E5235A2CFE4D8
+DE0085985741DEA306E98D627163768433D79C03E31729367DCFEBCF37DF2CD2
+847215C1A654B4EF9C7FF50E4BE8838CB944BF4BE0D36FD32ACB1575811DA29E
+571993E8E45FAEEDADCB497FFBB84678B2E3C4AD3BC7B758AC7F6156B92EA3AA
+790CEB4603FA4C151EAD20813FFB71E3CAFBF339EA948AFAFB3637FEAD381799
+F73DF2A45E49215E870E047CA409DA46AA38682656AA8B3E9A6DD928EFEA7F99
+83B60E3065BCC04CDB941C0A317FAF418152EEF5C06663F89C6BDA2A3D97609D
+7F07E0974A46413A136BB51AC8E935279D88DC5935C3DEAB4E2E324086D2CD07
+E96BB4CC990364BF6FC72F4F9001B7B31139F7D1F29A545CA18E352ACFCDD797
+D81A4ABF220AF57349B5D78FDB338D5BFDFEDCE28832C31C8B2D46860FF169A9
+6A1318ED69AD19C1A38FA4FE7C1FCDDD561EAD27B834F1F9A4296669B1AC6FBC
+D6B319F7E67C8DB0617307300BE080225400C9BB1D968F0D39666ACB246F4D71
+CE127F962298628C5E987EA9CB44B09617FDB542F1A2678A797C51A18BAF9973
+610C610767F17D7265C7CD2065363E77D9ABF5C2CA88907CBE9B86E9468C45B8
+1A9ED80F02C434763BA33665BE8B12682B9AE96FA4BE35CFB14E6BB329180900
+848FB45E6C7B39EE7593DE7813DFF9747869D839579421585EAD074FF431B742
+3170DCD0D5DAB6684D96AAFB98D0DD9D5272C475FA1F593A0CB6910A4072C474
+65F4815A03E86F6E6FB41D9E106DF431BA84951698495F0AE5721D95F3A7A1B4
+97124903A3E97BC27CC6178959CBD214C686DA29BC4307F6E1E7E1BBBC0FB5BC
+552D5F0792250A035B367300BF9346BD15EBC1811AE4D0D17CBA989EF7EA17B6
+E211853CA1BF1C54B28FEDCC327A30B7D2EBBC99897BD46A3F3C526D2DCE5A30
+46A3E68D37344569781839F1A5CFB96A8D90A35F5471280C9F3B3B55C23026AD
+681FB8AF96E850F64C82BA46F3CCE17A3E747D0C39786BD50208F80AEA26F6B9
+618A40A213A1B2FE497CD9C9A55B4D96C203B84244618D891515AC7E92D73E36
+D8081D6450836D2129DA7C19CB9CFC75A56AC492DC18BC171A3EA4736733E416
+6E66993CFD194EB75D4AA2E4517EABDDFAD35E934C655845611681D451E9D788
+9D5BD13602BE1668A1E39B7CC4551D5A5E6014EB21B4082AE1B0D79DDC07A3D3
+C4746E30FB61C3968DED6852BEA3AE38D08E8F10976BB174C508E3E6F2CB5DBB
+34B6A51D212EDE7364374292B61AC064BF43F0AF63D3211245CBF25FC6272A1D
+707BAD29412AEA36217D4BD0458CA1D2D8C722F9BBED96C6210AA3C2C6203DD1
+509F5EB7107CACA76036CF52AC1EC6F6CC45BCB928E991A076645B7959BD32BF
+FC8361EDEC8CEDFA461C70D8E9D31EC5418A82219679BDDF8D0F59D6E5F5667E
+4CF7EE7E8FABCD622F9B0C79E463F523A970B2C4D2DAE7F7696A042FE46A0E8E
+32847DA015D276E169F999CA3E0AB75C5F5978DA8D2E318AB3EE431404C88D22
+AB8AD890044AB19D3E984787C4C8AAFFEBFF9C8730760DA54C793FC0E17BB65C
+D869E829CD0DA97E34E7AB9099B17445556C79CD9E40D7F723E6AF69636C06EB
+195DCD1C2E67C1898852EB82FDB1FFB1BD5F88CD65754BFDAE478A95F1653D58
+035DB41ABA4FFBFDBC210B68AA720DBAF87716B84A41EA716AFD4FFEA6D89501
+991913C95BD95DEE04A29D8E9C9B4CC75244D3C699DD20FFAAABB9
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMR8
+%!PS-AdobeFont-1.0: CMR8 003.002
+%%Title: CMR8
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR8.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR8 known{/CMR8 findfont dup/UniqueID known{dup
+/UniqueID get 5000791 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR8 def
+/FontBBox {-36 -250 1070 750 }readonly def
+/UniqueID 5000791 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR8.) readonly def
+/FullName (CMR8) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 49 /one put
+dup 50 /two put
+dup 52 /four put
+dup 59 /semicolon put
+dup 69 /E put
+dup 79 /O put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 88 /X put
+dup 91 /bracketleft put
+dup 93 /bracketright 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 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
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9928A7C95D3A6E9B
+8E92F84CA0AA44461D2F4FA0F8B81C6F5B7BE98C9712BE166610465CF689DFAF
+27C875C029C0116DE61C21DA0092D029E7DBEDFDDEE3D67E6936623AB53FA2AF
+18BEDDD7AC19A19CADB6ED6CA7A26E6044BE414FFF59C0B98D5819A6B881F9AB
+7AD0D03BDD5CD309C67811D5CF0B93F6FDC9AE64F74ED4E81F2E18D880BD842A
+DAFD0BDF06300201C6946087FC0B999447BC370200BFB8CA420B668B32EBC242
+6DB1546A7164CF55B332FE9D239B65F532B69EF9F4F93828A44C8F5C526126F8
+B7A369114CA68D4F98638121F4E17F351723D9F1A902FCF087F94AFD23876517
+2D15B482AF2D68C3F31FFA864E031596E597882578AC7FB0DAE2A713B065B374
+3E2E72519ED6D50CBCA40A7275A7109A4F3ED8A4566AD8832890D3D1F4899850
+9B757442B7EA355175CD5D6D8B4152ED2D7EEB4CE30F174FF672140354046A45
+7098EC45B9DF3DF5CF7B417E201DA88308CEF4CED8E8903AF24FB8DD0187352D
+25738519ECBC70304F8F620CC45D2586619205DA3955696FAFFE2082402B3502
+CB682F410DE5FFE80A4DA3D3BCF02E35BD577D0DE55E7B8A33B7A2FD5136B5DD
+A0BCB61F8E7F4363C21F890CF287304DDB8FCE7FE207C0D160B81E7EA662BED2
+DFF8C444E19C91E72254257CD87240A70F1A964FA54ED9ECF27E27A57DACC3DE
+EABB92C085030870C6CF5C40B6E47F5C0AEB30E84A73ECDABB2D754EF6EA28BB
+16EBD6636BC288E62F4A38BFB55F5F4DD20FDD77D767F6CB52F9513E8EB75413
+07F1877B2C01278675177499E4E8EB09F2657821613F5C7643FC064293EC6E9E
+B519FFAEEA36B19C9D1302CF91FCBF87FCB57C5F995CB6712BB3D8681EB6F05B
+B2A4195A3C73CB4ABCCFB958EAC533BD89560D2790CDE1444C0F2E4EF27A529C
+F01052964E56F6D76A190E5FF45934BB711A3406284AF130D4DC0D8112BB3752
+762CA0200CA262359D4F54C0CCFA9A50DE18C7DB14419E2990ADDC4A54B94978
+D9174CA39434022FA77FB30179EF805E2189C35919F5EBE215EE2A00B4407826
+CE56329C5586D8B414770BA5D45513C3AF1931D632FCE69B4CA504944E03362C
+74A1177C6398A61A12DAA0F156543E2A8E9969C4308B7ACC21A5ECAC8F172541
+1B1316A88C0C163E574FFD3CD22FF08488662FCF2F9344BC25D02146F36CA6F9
+E2D0130C654B7485EEA9A110A33AA0C769121F81821E9A2BD062FAC158359D44
+3F9D9947200EF1EDDD5860F10438B162A69683957300C75AF7546C70C97AB2EE
+37EAAF0089E2623F787F252569B06C665FDB45EC9681C0774ACFBA76B98C4E89
+7EB12AA5F8798FFC110B49C25E3A483ABE83B0BCC6DF0578403ADC369E013762
+C9D08FC94D949BAE636ACA9F36F4E3F02296775A062077B011A705B6F1784D36
+A926622CB3847533D7ACB24A4EBABB14593B5D8E1DAE2BFEF8A51835C8D4E76D
+7543C126A4271C59A5881A5AF89331694F84489CA66725995DC3070F306EA447
+CF30F63CD476A46D528EC1FFBFB8EACFA2BEEDCF54C92CE2BD26DEA5827186BD
+3A4D1709415CEE7D51D671357B4A5D11E835F63521B9824EE5282E58F05A8ACC
+FD249461181A38C2F47BAC4E79BE368D64F886AA493C61CBCB2ED401C8AFBA61
+59CA6F6216D941A92AC52ACB3D7ECC28D6A58EF4CC70BA6DE23E80937AB38E89
+6F05FDD15B954C0826636267EDAF9F2BB466BF79D2E10EED9B04297E6BC93069
+79581ADD1A9D9FAE9306F46AC95B98C60A2E53D60CF1AA4069BE301E17E25070
+F98DD67BD8642B1D07571A32766072E48BF27E1576FFEED300D7313A358A823B
+49C8F135961B7E259095C9BB67F996CE0B90E95344F203922F47E11753F70D38
+2ECB615403490310CEE6C03AFA97DA2F47ED47125D110FA69725BA0018F6A40B
+29A307FDB3E52322A77A0102E6F57654CF1E96A134D13860D83AFA0A41112D3F
+2247A09ACF7D06713BE443FA27C7E7220E875965D53030FE7D2D62EFD2F1DB87
+5FB091FEAF599BA8C5167525899E578AB341BFE2BC4E53A047093168AE189237
+EA55F055514EFA939DAE9E859CB5FBCF37D99484F44FE5AA5FA386B28BB642F5
+5DBAF059A50FE96C7C6D834531D64F1F2E99AB2E96EE74D149178B1C0618495E
+293973D9A03E1790654B67C0882376ABEC17D74785B3737D81644F28B3BC6FFF
+F92FE29126995A07E0BC5EF3A4B93789A103C428943E045B8D1A5063AE71E806
+568D48072E53DEA85253B01DF0BB7367A6BE4DD7BE514AD74E3F77C825ABA405
+64DAFA25EAFF8F63344B5F6B523629776CEB090B546469F6A6008DE43072DD3C
+DEF51F62731037D1FBD0C038A1E9B669849EB3BEBA281624F13D20B61917A109
+A0A7871A73F7BAA18077360B38A4625C5DB9AB9E43BDEEB856FD0E2D3AA2E075
+267B978B9EB47F2369302E87DBD5D5B422830BEC32411FE75D584C58650EFB1D
+136FEB92B94BF8939FD63AFB7349C7511E5E46AA7324F8B1FFCA9C2A9E9720C0
+A720918E8E860F137567D386AC29870FD990BD69465B3A3D2A0ECF2753578AD7
+80DC87EBB319EB5AFE0B6F6FF8616EA30C51425FE3ECBC5F8D0B0BEFDEF32FA7
+D168B4E85C804B7326A0942CFDE732B1171C643452B7099B31649CA2C38B62FB
+46EBDF7180004C549B53F88021D029452C2B37D8C565BCDB0B11541039A13C0A
+E45D4B68C7907B8BF08C6F41F564B62BB554235D50330E78DD02795516D969C9
+66119D718798120442CB7EB9877FF84EC69DAE25F8559DCE3BD8042959F695F8
+2F99845B1B5680DDCF181D806CC4903E077D1FF5E60918EB34C0B1E028422B71
+CA63EFBF3F4F3CD813CE831EB54265A555BDD35AD7D723F9CFBDAB29C54F8AFF
+2D35C6A3299E0A2DB470C7B141B1E3E10DABB7873AE302926BA8743278FAA8C0
+DC6174501D6A289CF980A3F55F2DD5C3A514E7E7F13133C35D2697D64C25130C
+DB78FC997968D6B3BC929E8A31B6D212C5128E4412632BC52B3A1049F7F2F61B
+C74AE9A6AD19B9E2E240617E2882F7D29ED3A4279439107AF9AEBEE47CE85DE5
+CE9595A96A118ACF1EB1F5929930321AF7732E351E18C6AD378508E37B4C327B
+0E06AAE21278AFA9255AFE5C022034DA2968D260879B4B38E7EE2E11A593DC3F
+CE71ABA050C004473324CAB6F3C50E85DEDA3E9A27388D8FD3A8F6E42A79670E
+F7549CFAD4CCB337A6E0BAA4846ABCA059F1E1933CF11DC0FFBFF550CC4A1B47
+CF7BCE0875FA747AA854534960F757884505A5AEE0330179A9547A4AE3E68479
+7A457DE83326DC30B67F27CFD4AB697601CEE352F72F0966B3CEE3EA24683BEF
+6D23AD51B8432C3F0DD0D0F80791E1091F38988B7A54E466A9AC7810DE8B7893
+6B0AA6356597891D56190A7660BC7F657BC559E0525D41EC228078F2FBF89C6C
+72D666DAD838CBF0861FBF0A1D4ECC069AA49DFBAE5C56B781A1D5D79DAAC256
+13E3F9B928A2394FC71691E4355642764459714412D6F8EF803FC5F7353822DE
+6CCBB8FBE5AA1F2C7F4D384039D85E7728527DF9FE0239E2CF8BCB7411C000B7
+1FE660AE6A2A19229E5E8776CC83EFF3C27403935756463EB4721C51FE0B1197
+86C2F17842A0FB639F28083DFD4F1E86D7D3BEFA922514ABF489C5CCE93D6F72
+D2EAAE14F6CBA2BE4BBE7D7EA8EA19DB3A87350D4A52064137C3D15A5B05B03B
+70B1DA7328D10713B83974C390C3270AF5A9A47C0BFBFABB9F31063B0CCFBB10
+0F236C74446688198EFF039110F6FF42FA9F82D463AD3958B5FD205BDF85DE20
+FE3F0C7AEEF350AEE6DBC1DE2E2DA4F4599956F59D6F121F7086DC120416E180
+52DBBC4E56C09746938698860F30007091E1CC0351B43990E47208ED495310F5
+7BA9C6AB3CA10A3F1B318FD47C1CE3B9FF1304321F9623E32D315AA9CE64B35B
+F841E6C62B5B2488A311C94937879E5E0E170FA77AF0AC75C5E6E9F3E8F825AA
+09C1702682E14FDFA72D27901C5BDE009B1E52E8C4511C6F6336251BD45261F7
+401CA3DAE7C4B0CAEB91B9954BF4A97C48ECE7FAD401351D59DDAE9DA94E2335
+74A2B880E4749D3D7026CB5299F16C204B6E00A20A6619C34922C7D3FB50F127
+3157CFC08DCC5164C8023CD1B6C3556C73CB8E4ADA845339CA9BABA1457ECEE6
+ECB9849DF1F0FEBC89E5F97C92978A500196520839CEBA6C0FD2E3D27BB4B4F0
+93CB2BB565F4627C6DB62DD0E084E627D69B5DEF42EF094381B62C0D67EFD197
+301B132420F51A41561E6106870147E0D597078435BE3819ACF0DE28AD779847
+F3D2CF667DA06955D53E0204CEA2935E9E984E76963D3079EC092031E2A10E61
+1227E5EE6770DD4D745A52655369EBA06A19BD7D95BBA271E488241199D1008E
+36EA99F8DFD2A9F87B06B070158B466AA4C6EA3BA77DB0F853F0BF9A304EA291
+34069714368E0B94DFCBA3BE5EDB6C8204DFA7EAF5C3406F60A7056407D1BF6C
+CB85C1F432F97D821F5518BBA79AF8453A568FB2C2D025A70CEC75F46C545011
+ACE3A99B2582793BA1DC655230AE2EFD24DE20A01D4A441AFFAB7771F223FA6B
+9169849E727E494247F67D6E1EA9DCA06A082FE2094BD548AD7F08B565145634
+E7ED832FEC1378306DDC796303392ADB0CBA130B63B38ED57B7828B47732853A
+893E8836FE19CCF27002AE92C2B2CACFDF8A42F1B8066E033B965D2E9157FDF8
+E1264B40813C1A4CE424274AA3528A4F09B3B53DD4D23789A68B3D17BC1398AE
+0ADA2C2168427A49846DE0216908C2FFFEF4F13C1ECA12AD341E238EE46E6DC2
+B71B54C52659632911F901660261E493AE2483D64E119D9924489779B62BC9FB
+A052E822FD8D83178E09ADC825DF0DA07FCE7AD68EEB29FAA275A13691B4A5A5
+B0BC0499CD6307610CD6209583C1152C559A2760823F8DC0B9B990BFFE7B7E9F
+3969B968AFEAADB9FC0F1410EBBAA0DB979CF153F0B8C978405F8E6F2B6406D7
+AAFBF4A655A15DD6D1E9A7EAE10EF89264659B09283F50B734236885FC09FBE5
+98D780012FA77FCB19F15BDC522CC7312546C0730EF5225DEA8C22A3BC6554EF
+4FE73B9AEB5C2F7DBD474221760E5F539A064AC450591BCF3499E3968F2CBD6B
+F15BA2B37080A4129B66D4C2188524F025414F14DB3F96049A8B0E5EB2BBE7A1
+AD64A988FE875FE4FE5186BB4F5DDA16983CB052D474B7D72F3E8965663EB50E
+015C72407C3437142D3D7DBC055FA627139488DBC5A0F98D805C2143D99F491A
+167E07AF60EC9F17C36289368D740B632CB919A0E74C412B76CE7A5906D5200F
+9E79CEB9C65ADA3A0F23E8947E834AE7A329A9F0AA7A6BF545B1D7B4666C6522
+CFF268634EA06DB3A82D91A4C0A9B227E79961212881A54A6762C335DE7E0831
+130C45D94394D21C049B9D189ED955438C2151514F17BFC67E431DD9A8349202
+2F616AEC1C7B19F63D5000EB4771370924BD4B9053FE78B5E4A244B9A149D66D
+A8BF3B398396D2233E92E4A5FDC70FAADEADAFD255193D688842DBA865CF6154
+C9348D590F3FEB135D4B7BD4D76A52CB140888247CAFAB25ED51F4D187041CA0
+ABD956F83A5661CEC171B52AF92F9ADE27973B560C802E1E0FF51C4003D1289A
+CDD09F8EDA8AFDFF666D35418CEADF3B0BE298F0D1E5C8E024D6A2017A7E71F3
+3A9FEC9930F1118101E040339F9D41379170928DDF5B5875212B271DC843F612
+E0C21C67263186E3D6929160464D4D5C8928E14D0845762C36FFBDE548188E20
+3B6BAFE5EECA0385142F01216FB8A90C43A472C1D4447FE5C7C78CC088FC72E7
+3FAFA062C338BDE8A430FDF1951B107D8D73FF9376FACDE5900BA362C66F8C1D
+947F9545C5C13A53E4479B1C1A50472C05E8F8C266C6D4F4EB08E97B3B1BA972
+26973B844545089C5732322BCC9A5A8FC972FA0D7DB8BD85D2F515ADE65DA479
+0224F7EA2276CFED0B75B2C23AE7377F86F1F6F205D6FE19377D87E782143697
+984E731F83CA888199CEB425643C259D4FB8B58DD69A96085198306494BB497E
+FE7C9954EF35B679BBE3847A9C73507874F71FC97665E2A58BA41407A1745247
+44A79B588D969D11CE4B863CDA655DAA53CEA5C3C263B345E782006CE9831D49
+603D2D95DE9E370D617F5928BA416C362BB2B4DEF16A5D44BD24B34257765F3B
+6223B3F9B54DAED69A90C7050AB97B06693D253C6894CBD7B497DA449F1D9B7C
+D91B421891EC0724F59C82B9CB288DC42F2D2D7A7F22EE3D910E15953D7766AE
+276DABED3820390BAF2700C4653E1C77FE63DB71A66D93ED293E25B8412A1EFF
+809554BF04ED0DE83F7F190883ED793803CAD2C34A66524D3A580ACDF3C13B22
+08F18905E7A4A16DA9ED2A112462FB9FFE481EC2069E484E8BBFC19D594153B7
+3DED4C11762223B7586483B06BC164D824D1A6FCAE80A35DE0DB8B33396771DF
+76DC5C05578EF1BE00A70BAF3D951A01C87328DB2B0DAD6E1B4C21F37D1BC0C5
+A929BDE5EADF20DA60C4DE2E3C151005814F24824D33B95F700E09A0207EB602
+3EF60DEB1622B91DB99A855A8F1DA96358F05CFCEDBDDDFC8446AE3391BEEC41
+966E594E28D052DD5ADA49DFF65E79540EBE5329DFD86C23CC800F95221B9C18
+CBBF941D2FA47EF1EF59A89DB5DD188E75EE94AD2A79E2221107E5992C00D531
+2E00B544895A9204656867E3DE9D4CDB64B920B5CCA9A73E6514B36CABAE01BF
+94C15603B86780190595560F792E5EF01650074EA4A9BBC6ED284B9AC2020641
+DCBCEE0ED27FE58171DFE104EEE4202759E594159DF45113C00236127A46FB35
+9EC705F21C0E456C1F0F924594C09AC64D4377C5FEEF764BA4A09ABA8D09DEB1
+FC13B0CD202B2F04CF5D73DEAB65C36C2FA7C0DC236BEEF6D23BFFC9C493DC8E
+1831F19EEF81EEDD976E43BAC6B5CED13F901DE59835FC75490EA528A72CEB77
+24C38B258EC38B9E6B97F85CA8C10D8809BBE55A6FAA12456FCAC786942E123C
+06D1E55F7ED04400088BEC968BC5081DC7A1B1B65166E7821679F76694F235FC
+6854C8776AF855B83445D9FF919B1D80E98DE0741D06D6C5EEDB3E3EA6392530
+F1BA817737D8162F7B3A36AC2A03190CDEC654383E31934C3E0A012B639532C6
+26FEBE9B412F1C92D1943B7C18CEF510729D501349644C97F087F2F840074AE6
+D8CD0FB2E620FFC908BFCD938B675A0A4A687F7FBE8F3DD06A62D7B6DE7DF3E2
+49D367D60B10061EA86CD512F5A1BE8950D83C62695E130128E0037B62552D17
+064319BBB9B1FAB9D79705E5D68AAE9B36EA14BF1A59A863BDB8DAD9AB5D7B8A
+E30E2B499F952D65877C8E38EDD7DB29F9579D09E629AC188DB6A6403AB4BA3A
+D358B3770D727A2B77D84B6C9EC17E29D88E3421F9B7D2D822EB78BB8BB50692
+8C46DD6F9BBEF2E848A2B5669B200019802AD19661537A84D3514AEC5AA47445
+2C791E01DCEDF18D9506367241255FFADEEA6183F51A9F42448A7DE413C08359
+52DAD2A60FD606AFE14702BD3B0EC448720FE63438D020DEDFCDE3582FC31DF1
+17B25FC152789D2F17FD60B8209D292D2152DCF8D28B5ADC04F6659BBB746CDF
+145163361823CA343763AA951C640B5D4A99B7787105A1609EDD6A596EFC3F6F
+2AED1652A132D66117071CADB8603969B3A2F97270CF2AA8EC2AB890662FDBD5
+00EDD53F16FD0CE199660202373E2EA28D29245A4AFD3A63695F6178406A7234
+AB0C0FB1B19CB408E047BF014BBEAF4C9C19445C7819748F082C19E6E355EFDA
+BF1C2DC348AC0AE6777F679E2F62A0A3EB19B7F08114AE0E56A3D310D6958AA2
+348E1D304BA8C4389E525553A8791632EAE32B6E8D2193932B44D230FA17EDC5
+7D407CB83D2501B0D2C9E86FD23E21F26DBAE2550DD4ACA051EA0A0030107676
+3643176BAFB7DF0A157151F7625E63296E325E2C3E74BCC92CA51ED191C856B6
+18914ECA6E39CA863FE26BADDDC128FC2D93DEA074991B1CA4C58F5C2F130A11
+8C2635ACD45A97284B8A8C849D61C34C2493201FDE2D2E1EA7349E324829A88C
+D39230C99A36EB3FD38729F6E87567247A57B89115DB90A7C793A65BC09DF9CF
+7AC51625202CDE53409BCECAE9060CC7F94604002D6AEBC8E4F8995AA5159E80
+FF68EDD097E9C7A0A15DCD491B2BA4CE696D64CA9316BA11FF882E061CA00527
+A9AE9EFF421C06A05C51319B0BB9EDC297782117CD123EF850D070796E1CD971
+3DB1C79252DA025440137D76B38F03908F665998048275AFFE792AEB358FA7C9
+97F8D566BB268A6DC6D2A3AE7C5DD973C82A1D6893821C185FF334810834D557
+46262BC7B8AAFA5E443719FCD40C4F8487A9920B0EF0C116A96A4D3051E7F2C2
+FB867C01A727976FE08894B78165783FA6ACF68FD72D1FA23CEB77EBBD42035E
+A75885AC26DF4C016D5F477B5AF9A7368D6D413FD83DCAE72B47A5F3E38B7332
+5C287361732F62B402670992B46BDE004EBAB61CA6C1F710437959CA327264E0
+19B694A8FDF7CF308B1BD99F65F1ABFE0DB563C998D14A8B3BFB8FDB36D5C669
+0884CAA7AF68201FAA62C59338824F44A4F776532D93E0C1D8C3EFCC9103C3D2
+96E77521FE15B6A355A170BD284704B886CA257577753F351CD22D33E5124A32
+4A7C2EDCAA556B945A937DACBD7CB5E1D0006DB7CF4666394DC1FDAB26F00786
+A431AA06923F883C6AADBA44249EBD151FC495D00BA12A092840A740F32BCA7F
+9DA1532F7D78D20B6E2F54EE758EE592EA85B46FD7B76BC912F403357EE201FF
+3DE88CF23A60C87DEDBF7A4613799561268B474551FDD5B701E67D7664012557
+4E0DB36E3D8F3AC87135FD81D34A87986C3004ACDCB337FFADE5FE7BB711B098
+D7FE261BC332BE993658AA66880B72FE98A07F023586A96CA090BB954BA3546B
+5AB4B13C36AE5B311FC5322289585B57BE42166149B7A63CA2801DBF0E90B524
+07B03DB1D677857BCB6DF4F71B9F903AC4CFFB76B248E1D79BBAA2902587FC54
+22C0140358A7522766F56A7F6324488BBEE069623004025EDDB15D6ED6762966
+040F6D31337118AA3C43DD8FCA3BD1A58B8D5B3D36B5C61B12F3B05B62168721
+6CC42B6A590C227C30570E092BD553734BD4E10E27B7A3E0CB02D5C23CA7659B
+E3330CEC14AFAE4C5E3ECD9515AB7CD1E06B7AA6A6531C6FE583C7E671CB3E68
+CB6057D3BAE3D9B68F0BE3251BC9894A0150195A355BA323EBD14794C3EC6653
+CB51FB13213902D7F1B84FAB1EE3D42CD3B30F4355099B5A1F92D5E47E5C4C2E
+38D0F8C8404CCC6D13705021F04159C65225F3323EEDC10D2DCE9F0EE37464F5
+C29F395B046906B9B5A1B902018DC35C49F459A7FE70E1D4EE122ADDA5B9ABA7
+F5EB2E0E0AD4DB14A1B7113927CA09F2F1D2958F0DCDA388AD35330F29662744
+9059B660399BDAB3BDAF7E4B00B539C470751FB9268267827F56A40096E524CD
+9E1018E453784CA82AB4B08E4F64DF90D5EA5F3F84CF5EA209767F2CEFE99622
+E88B0B550BE54BE5FEE68ECFF71EED21EEFCEEB08C3E062942C5DF0372E4E796
+FA3DE37246CCA18DA4B9ECAB36B30CFD8BC9E8CD4737ED1EF988F9221374D8BC
+AB28B28334D50B4C59D5D4A4CACDA92EC66A5B381A511E87F36CCFB0657442F1
+E7FA2F8BC0455D36C3DAE3426A243F15E0376BACE2980DF6AB3AF25DFC03E36D
+A82C0DE500F21173DF399AB2F9AAD5A9E587B37E0BAD35873775010E5542A389
+EA9340F54881DCE356A9A6772E839972D46420182D98EF366A94184E9A168F0C
+26B01E21F27230E151DEE4710EC35FBA674A435A27B6DFB21E4821A02F3BA11E
+2BFCD46312BAB85188FF4F4A6CEC5D8F106EF59575506325CDB199E6EB7FEECF
+C957B5771F193BA46422C49A14E505C143B811BA45CC1B90DB7B3EB53D3FA717
+700CE3E1FC2DFCD925675379569A1D7CE17AD63A8E2C9633A377D1E273FB6C5C
+E4841EBF35E9897083E328C7F0DB96D54D6F3651897735A0FA1110802B169E2F
+A5744C6C1B45C82C6851F667D11FB189B0F0528A739F2A71133EC8B444B7E711
+CDE5821E0C8656564ECB12DE756BE5B2B3EC054DA54DD12F92CE8ECEAA4ED7C2
+75F114932AC85B4A82FDFDCF6713413F461353DC798B271CB1805A81342DD63F
+DA131C9D1E3315C625267E6F4CC7900DFD1289294FCC0CDAEE952CFE6DBA5E5B
+F6B6DD431905C1369F49DF54435E0D803253462A670B1767F0EFCB1D4B15AF44
+FF0701A40A5A26727F94FA20ED2095D8757BC72492B381E4D3186AD502C188E5
+5094F1A18BA52B0C0A5D7F1949E9D7F5F8E63C93FBEB2BA054D7647A4FA834E5
+4149A36E71FC815A42A6DF5A998A4A2DB247F7DE247F5E398B777F11832782E8
+02387FA1AC4A904668AEBA0CB42AC9AD89A8AC777066A33A8A9858FF9AC5EC35
+CF119695D031A5C3C727CC8D70A06394EA9FFFBE07C0992903F303CEB2224D8F
+C1B52F19F43D69DD0D7BB448B56699B532298A8C1C1D307DF2C7DFAFC7CF0845
+341EA8364F3D0FB352D5F5952F8FA6EA73D1EA278AA25FB6D0AB4A1DA260B03E
+A0D9986CDDD715B08911CE1F2D90C64FC0793B173CD80241F9CF9DAC6B484334
+827E9234A0FD8AEAAC3C76F9ECD4B8C0472E7C7E22BF2D0C1C9134E9F0736B7C
+66BAE6B32512E1D23B3B8FBCA3722679C78AF0FD890B85C04C9A8462BC1729E3
+4671C1A80F54B3ADD68DADAEE17C849C102B70458E0D4D61DE1FC178CA3DBA97
+4DFF6C65518FAE1CCDFBC35E9A76E9BC90A44324359CF9CDED052E5F6DA1E1C2
+A067F1CE3CCFD36E1C7C52C492B3B8EFBD1C7CE8AB315D7CF0A4B9305F737A91
+6BFCD0DF41B492BF2885441AAB735B8C7ED39E4118F1AE1806BE73E7DAD86051
+8D9606DAB119360D4BA5C307CEF9A3AEC0ADC03B85A4FA10F723106F5BF3E3F3
+95A90A9FE33BB17855A07156EA6EB8F44EE2E9B84327102BE39687C5911F01B3
+7894D4D4771543497A49022A4351A9D6B98B7B3FD5F270A68C8DF53FFA9759C0
+D090252E0567CF4ECB2A447D8A57298B0D0B06D4345EE6A50826CB3F1A51F0AE
+ABD4642B448C358E2DDDB3EF95EABDC622C9913F0BC128F791824226596CC73E
+37780011AAF2527D251A824FAD26B18DB548D5EB84B271E2EB96D2142D5A2CC5
+7BAF36342A20EA18BF5A5D75A545630F995F1F32718A2194EAB3EFF7E77D70E6
+80452467AEA36D370ED69C6C3B8299E085BDF38639734328493A1E8FFE424223
+3ADDD99E17CB94BB788153B10921FC7477D3AC140F68851988B91AA6889DAEB0
+BEB2EA5548873F12C10AA44306CA85D373D51CDF8B5AB244AE1E512FACD3DAB2
+39FCBDCE3CC8BA1F43BFBF5715190F14F76E54E6C6CA999E4B2012C4334FF565
+6D24E0DA26323CF96D36F0261CC2B39E627D31866E0E8A51C4B8B084C58A96A0
+5844A9F28A452D9CE40FE5C3DC4FB19ACE79A2F7490E33A59B5F7E38D392BDE1
+77FB621AD89DE7AA67F1DE5B3D2A75EF3E55E1539E2C71729C8C277C78BF4992
+95A3DEB8B0FD941D4F1EE8EDC3CACB2E74ADEE26454CCFD866D44FCD6D373246
+804B195427B6B4E8C1963315829CC4B7B75AD58022BDC55FBEC89595614093AE
+1E044DFDECAA906F83CF87C567E77007061B4021E4372B1595D7D2AA9C0305D7
+17B43110D987B1B77F6ED66085D89C978799926D64CF184FB3FB66E3A9AE66B4
+1B55B65DA1046627030E7FCBD2F106991D866CAD497073A2B4394E55B9445B33
+16F91AA745231413E764A3388231D9A418B4549EB573821FB2C66B4051CC3A96
+D8CC6F0DE20C0A732B877EA2DED6A76F28088FE22315F6996B792A4362D353F1
+4E26BE1A59927C44F40B6FAB0920F833644D1C90E4C0E227A7E125ED247B90DA
+F0A439EB3CD53F49E458CE0A4DE720ABAB15E8DE0743FD08A08AB67A94D90639
+765EF07C2E6A645DAA9AAD3FCB2CF51D281E4AF6337297B2AD2E47D3EF4E1501
+BCFD65703C546C949A93E63813B8FDABA9F21C42B588CF95DCCE8DA62EA5BD6D
+8875D901C9EFEBFE00DDACC8D2BCF0065418EB619A0BD823A04D762F4A5CC004
+CD4A85855EA187158896DAEE40A3EEFE1F2A496A97C63EC52BDB7671809578CC
+A6F162F2AFF1B980A746DEAD80B3E89F25DCEB0E3C20236EC2FFBC6E6D49FE33
+E7DCCEBE819FD7CA16EC75A1376D815948C1CC021BAE328F54D62003FE97F060
+47FC1EADA686DF87BCB53ACD1C6CD9C22771B6906A871192BC12DD6AC23913F9
+C7E0C10808736F1500BEC48191553BEC81A77F8A035BCC7FD1C8829702FE720D
+F0DC7ECE0EF11D2263AB769E75074E58F1D241C95CF887F120C0987E6AA703DF
+1DB8126CF132C1A76EDE5A35CBFFD483A753521BB874D6F08F9BEBD70542B5AD
+C456DC1683BF1752483241CFD533F8339F2C9C402D64E614E48F7D27CCAC04A3
+1826653E500FD39B28FA22B8D97714FC6DF15C5715F358515E609F28F9276F93
+C4C9EF722780CB57F17B428675AA9CF55557A95B55AA7F9C783CD7997236B15D
+4EE7E2FE6104E6DBE07D09902108D7DEE7A738B848A0CF270CE900B7658D68C9
+DC91E6F9BA956D44756D3168365F3247C289C99CAF82F19523FC65BD589F04B6
+93CBADFADFC8BCE85D2A7EE8CFAFCB3E107575D0D1C9081D1D79469B538998F0
+800C4FD416132EE7F6CD62F7141FC36C6593F0A3D526C31F7BAB3E8230B80304
+FB74387CB74327E9A38D3D7BA0B7EF3675E81BD5965A10428E06FE35671A91CA
+D00C4973C46333E6AAC55832B3D5E2897CEA72738E5D4E38994E17E870A736A8
+8FEA7B2966A4FE3299179213DD3099F6D277FECB10F2AA3C5B275E527E6BF455
+293EC2D19B652FC13AD92ADB1A144B6457B085F21B63D215F6C72AA1B6D6F960
+15CE3667790FE2601CE0B31FF54B453AF82955C77D305FBE913FD08F0E973906
+D82D6FB2C4FC362092ACEF2399014DF2579A375C01ECBB41A14CBD617C334372
+A057A50A42DB951DA03A578534B40D0D0F67CA6362798A713959A1F5DAAFF645
+561848E557FE312123027694F5AD4D5716869B913F4411A5CE2D7107D0072279
+51DC4E0B2BA4194BE440C4F7FD07D8A80DBDB46BDD38CA1663197AEE6171EAB9
+52FB11AFBC2DA620A35845BE3ADCA18E06D623B6EE7CF770FAD579903191E951
+9EBEB78A47EEEBDAC0D01AE68401F89A92A33198D9AC91984E51D1945E0D7256
+619A0E5FD9359D36443CA14E326EC51D99516B2F835349A8CA5EE5F9D9634284
+9A2B226CE2AD57B945B86ED81813084AFA818F4DC547647EA60146F7A3F548A0
+3B0A22019AC46853C240E374DB0F79DE4A3039BD9E822B0746C76D9DAA37BB6E
+B2659C6E82132E097A867FE109EA2306A67A49F359873DFDFBE84C1D4ECDC066
+584B60B442D25DBE1272908480DD5D056405E1285FD0B638077F93C14DE31F24
+F82173AAD507FBA6CAC274CD3732DE20BFD71179DE7888E64529336EAD0742D6
+D39EBB4231CB3EC41529F5CB51EB5508F533DF6B6B2A5969D4F380C98932319E
+34FA15687F78572CE53AF7C87E370EEC5FB4367F0B4DC6FD96FAA69C1C5C354D
+E56088E4D60E523F9F677600B52B78C3F4CBF6E7C10BB8E23D1AFF57AF249068
+6FA744DFEE25538233A0241C79BAC11A2D2A7AF0D30A4EF76759B608A1EAB0BF
+F3498D14D0A03302CDCB1A5E901CB1A4B25FE8512D982E9BA815140863F898AC
+51908BCBA2BB6FF49F1DA48E28E046C615B231FD5BD2442F6A7BFB97B7BAF060
+0AC2A0D7B59EA9A067B0FE96005513BF1BCF6ACA51832435DC6167391923C0FF
+730BF17878663DD75BEECA6C197CA506B3B5D1ED535788D1BA6AEDE713B8442A
+126F06CC772762D411E251E7CDC2E0E6FED4D817504C85C7EFE7274DAA663C76
+A6F9CB7276EE2EA9B7D8F01DC2299D45837AAB25EB3BEBD1138D0BF1E05C7722
+CB4E5F45B2C43B7ABD619E19416E0A91600B7FB078F27F8F4B8867300CDA64E9
+6F61C99C32FD6703B20DF82E6CC478A0271871106A8C03BD976187277770D418
+275C382B340F82BDEB75882D81AC197327A5B24D29D2AF644DF9DA89D95CA28C
+0A4D09EA1C6704E12F033E0DB3AFD5E2CBFCC472FEBC6BFFC7E87656093349FF
+AE1B24D89C50C3C5F55D54CD1DB23B5EAAA8FA87AB50BE495C07072685604BD1
+292BBA51C1524722EC59E7AC4EECF63B2ECE0A6837B1720B38125C8BA424DBC1
+39BC12125E46B3625B529DEA989027E71BF3890BA3AAD751CADF9229E5551425
+03541E9250E011C1270F5D53F4FEAF1937FA1C7D5A6E46F8AA36864B8777A633
+D190C41EDADD6B1C7F365E7B1106B4E6FEF13C940927D5E3D77781D6D7CA1853
+C80794F3044184841D601137494F6C609E3D51BFC28B4AE5F5914B51336C6026
+637676A01C6468F756D65FE9D1542C53F356CF0955D31EC1C871694196613223
+28BB4F6D62982D813E4595CB8E0940582BA9372F0D60A66143E9ACE9B9221C84
+3CB75E843E2898355DE33B028D1D3E83037A4E1E44988AE40948415190395EEF
+87B6ACB433618A02ED350C2032FB6EFCF8A7FDA373062DC18EFFA35AB897620A
+EB90A37A43EE06DE4F9F48D5B6BFCCC2C0975ACC623AA591E6031F9B9FD2F7AD
+14F20089DE5050393917ED13BD0B6CD53DB9C6586F64A6EEC11FFA6B569193B5
+613317FA55E5E2FF4B7D5366357B6D6768C0DEA68268B2B37D17D0D9A6112BF0
+6E7C680065D23F593529A23398AED64D8FE63B0033FD89AC15125A63EA3471CF
+3BFDCABDA06BC70B98EF141B8B05B9402191919AC97E3A474233C6E8152A94C3
+9173BA15DB0F3494CF3ED90FB7AF8D469802786D5254654C9A9E7ED152E076CB
+C9897861AC7689184D04D4ECBEE43705FA98FC9D3F8D68E4FF18C12B9731E243
+C1700FDC6286D375B6F069E6D936EA1AB1639F803C79952CF5B39B97CC6ECD52
+4BFFCFCBB205E17E838FA8467E332D3C40CD605252F34DCFF956887472B293E0
+C665A022AB5F9A3D74162C8529437C995D57531747DCB18AE3480B6C8B4F9A5E
+73CF815567E990D679DEED7F565C0ECB2D3DE8EEF0BC19778918F29D497136F2
+AB9444523A550D6488CAFE85154EEC0895FAEA91F32E195FAB5AB3CE3C0C630E
+37A660756C0E287B9E4E636832BC3430F3D5998AEF862B54B2C6C6C00E3C0197
+D863F4E5987035F164F5ACB4A7D6C45C305D4E5E971901EB7CE36B49F3C701DC
+43C0BE135848DB557CA513A06B5BA43E29770270330F75DC28AE7571BBB548CA
+B2185CCC9F90FC945DE255975B36B1AAC142A138415F511FBC897403C6159ADE
+4D669517678D19FD225AB3823FB020736F29FD30C7EAB33EF65BAD50CBECEE39
+FE70862534E87E0CDC8B95BE9F75EF724B32ECC869ACAF90B75699B60D90E320
+D9643E070921C41D061929300BCD6F13F2D648D81ADE3F0F73EC56F6A2C2EB26
+2A6A1A90FFD5E3DBC3E198CA65841533DE02E769964F3168FCD1850CF5205542
+55E88C39A168C0FC88D640CF8C44A09F54FB3FF695A39200A88FD646C7D14377
+9B957EEC68989CB9E4ACD9CA63AFBB943849870F2F601601F37ABC7782E8320A
+5784E9E3161E38DA3B1EF3947688304C5C661ABA92B352F9C90C2F6AC39287C5
+57B3B8B06911CB800F40F3440331BD1E5A47DDA7ED8AC34CBB175311B92EA3A6
+A30B38A94351C236230DF2369ACF7EE9C1C1791274FBC35B3CA40EA249F92FD8
+4E1FB94F2B2731F0C73B2600CEC1403462289B3FE25639D9F986484C73A233CD
+592BFC72C52801168528EC619CC550575FA25A549BF5932B729273633C50D677
+97986668F3AD4A7F332C241E77EE9D7109B0434629BA0EA77F303EEFF632FCF7
+F6DB0CE0AB85D6CAE07E0744349A960231CD27F3B166EC48199D3976A3F77262
+0672ABE2976B110167DD78737D5B2958ACFB1BA0D64FE649FC2A05036B7A471B
+A96E661CD26D4A86C46B263EEB636B50FB21D6712DFB039846CC5716E1BDA9EE
+E3D823361A477253E781603BA74284530B2DC454FDA90024AD6A1DBB492D4752
+4A42E96073E5F8CAADCF9E03C2B7F221757FA43669F251635BB9896B30BF5129
+05313E1F98305E6A1DD4E08F7ED3E5DFD83A159206CFD2297D9F8F527F97671C
+9D7CE412D5859E1225EF896B845DBC70C6DE79F4502D863BA5AE9E05F6CA6992
+5CB1B5BE3229E2C4F90B1C1BE069692E8D13A68DB31E09B7C753465F2420358A
+897F5D4B519EB8E0B1986A39A59F8A04FADE16CFFCFB37FC590640A4F674750D
+B7209C9F3DDD62067EB9EB72BD8F6DAD70F11493BD7DFA5E49D1214E32FC49AB
+906C68E76440CCC9FB4D20707CC7897BCE007EF0CA959B944B684F5538C04174
+60A031194ABDD91154D5446D0DDA83B31A86B50D9EE806BCC8CF8A362C2BD926
+BC3397BD029F6B56DC9969E389C18988518D2F40D19170037D086FE6DFCB5C3A
+2A455B099E4204B45BDA862131B2D767DC0738A1068EA3CD727D33AF056A7C8C
+AAFCBC89DA9AC006FB1E35CA103979DEC54F587405440A5D3002E2448CBEACE6
+C464F246A53D14D74A3871A89D0166736AEE894685B758500AC9FBEECC6415A4
+882B9C63DDF04B2631CFA1EC0649E559E711EA07BF1BE1ADD82A07F6655AD808
+F32966482F595A64ABABB8BC6F2F8BE766C954642274E65AAF4DC49400DC7113
+A5DFDFEDC7FE5ABE78FDBE6730A7339111C954199A4A60B51AE16B414B0883D2
+DC43BDB6843747352E2D8026B411FF736F8921EFCBEFB37230C68C25DF7B225C
+7EFD3E4124859898D445D3B62A87F36B96345336655BCFD2EC4DC81AAF07DE10
+A653695C63A9EC0E3D166E633FBBF2E299C8F939D867AB5D4CECB172948B1456
+6F5FA58A6F4E15FF7711465DE7761F909F34A9A2069F7A5685A2B9965AF8D85D
+B419B02B56B50E4CC5B15D3D08EB3411C45F620F06BEDF097BCD9B4E61E7505E
+1EC8565750C0280663B7ABEE61D2CAF0BE6E20CA603B983A9B573FECCD0AF58C
+15FBDDCA5211541C0D5C3B7E94698DE3B12F5D1999BB2565ABBA03F0B7D44A77
+894974F3914DE580A66E612A5B1E69035757F3ACFE358510A3AFD0A066646CC0
+317B88892B5F0B776C9BA5F864269115C5EB6C25B9CDD811753743CEE30E8AC9
+288C4B5190F1618B1DFE5835447F799BD7076B4D39935FA3E10A2029865F5724
+E26C9019FDEABCD97F2A911D59BA21618883B517781EA8DF63457A7FBE0F9321
+F2BB8646D359A5DAD798D5CFB5061EFF4B9740FCBE7F1485F135EC49ED0FBCB7
+A72B5B661784A868E7F1B6D533B11193EDB0A00F1DB2B2241F31B8105340C683
+2A3D8B624CD4D37732303AAAC4739172DE4782DAFD71DDA834EED62B1DB3A159
+F55D00AAF0D4B7FEE79D10AFF1BE3969A0541CF5DACFF99DF963E33650EA6304
+1D189643F8D8CDAB853953969AFBC16639ABB00FCD40ACC6426858DEE194AD32
+0BA160C1296C25A5683C40BCF2CCC733780A7FAFA632B02AA6D7654D741EB9DA
+D075A7A7FE90FC38CF08BA6BF138E297A34A2E02310A793271AE99EAC6A8F2A5
+31EE3F6ACFCD2297BB2D19370840BD8D576AB96C30EB41FB84F0C4E87A209966
+988E5B825CC5FD02CFD6B1C747D7A632E6A04096EFFC89690A08CA569FF80027
+EA0D595518631E3D18EF6735AE8DE94714A27BDB66748EDEA879946084304479
+F1683EA776AE954A62183CF6AA8376A36C64583E297681D3F986B0B64EB6BE50
+037C854053C8F54204F907A403BF9207BAB85351640CA0D6E1862570A3A8DA19
+8414DEFF22E70C9CB28FD6F568DEA39BB1F9A8C264A4013385BAC2EDB5400B4C
+53D2A5072ADCFD20920702BCAA9203631A30FB8EED635F81EB4E6BB924CFC46B
+5E5171F68D6F04DB5FA3C8894AA9C3B730924D501A4AE9AE4BE0790E7362DD49
+2BDB07C72A052BBB
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMR6
+%!PS-AdobeFont-1.0: CMR6 003.002
+%%Title: CMR6
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR6.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR6 known{/CMR6 findfont dup/UniqueID known{dup
+/UniqueID get 5000789 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR6 def
+/FontBBox {-20 -250 1193 750 }readonly def
+/UniqueID 5000789 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR6.) readonly def
+/FullName (CMR6) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DAE339BA29C1C6F656
+1DEF13780383DAE38A868377CC7D396B2A05F341AEE0F8BD0A0191F51AD11A4D
+2E927B848A1EF2BA15CFBE57A51E3AF07598275195C9613041F71C1AF39E61F9
+EFD5F6512FBDA76E29DE6B508F62F5CF9F73F5288DF1C7B0B82C92D3B6358BAD
+EC3CA20BDE55DAA7CC58004AA86B6CBF8C410D8287E88BF20588A39309C2B703
+CED322F030AA6069869064486CA651DA054FF3F5E56534CA358B0829A6B954D8
+9103436E6B06DAD1658BD4A95AB41343B01F5866FC87C4EDFC71F1477C98F8E1
+1DCF27EF743FF90BF918AB8C4E5AC35841E2F745480E5EDE1C1DEAFAD8D0018D
+2C1F1CFCAD9F6609859DEDFD1648A6CD23D8ABB80747F94899F17C8F3E6CA55A
+E176F19CDFDAA0D7C920B3A72051A4745560AC81978C92459EEE5AFE85AB247A
+32981139CBE352B248F4BE5F73503A084A3E91F05328EE521D9669E44E202584
+5407E7846F9FEE3D54EA18FFB144BF2D6803BF65AE402034B3CDBB40DD24217A
+3CE0E95E2717CACD603A958187C42B3558AA38D6B6390EEEDD396F96E6041FCF
+6F8888221AFA87EAD79F46E0E32CAED91E6C8500879AB6E580C581E8C8CE9B68
+2BB5EFE2604E8DCB2432D39D75EE556969F1B2FBDF6A4BC72D106AA7CF22C268
+464027898B311613E06E1584707F262F71D9F49D2149306A88E02BC60BBD6BDB
+EF41D90F19197BA9AEF32B5E63D5B9FF41B5602F9F786E76621DA54D574981AB
+87A72081EA05D6C6BA940EFEBD0904EA4E77BBCE17E20B42E1722617E0F6EF32
+F1ACDE9D758594E9C81049CCC10605A27C2A06872FBA9F159CB155609B496ADA
+4886F478E44029B5E620DE8319E257697E93E1CDFD27D560E2E4D34507020E2C
+D9FF06BFA14E056D81DF701FAC3ACE4BE6C098AE116E079F0044391EC1661F6E
+7A93B9320BD7F91E8FD2E8EB3F5CAE997D5CDD35107A1D35302260D1499B8B65
+39625B7925F97D917B66BAFEEA992873F07220714F192839948CEA080BDB9A03
+77B9DD032273DDB5629CB28B5D8797EDEFDBC601823E038384C90C79012A7D96
+8F27784DA15BACE21501C26E3AFA5DCCE81B52B0ABAF71A35D33103EA86F2415
+A39A830D559C5C6CA7423945BD3DFA942B20A06D7A8D8671F9831DBB52907AB4
+4E54776D29C6085CD9970B6DD21DD3EA8EB09C49CBEC6CDCEEB0BBB1B8827109
+3BDE64DDA024D67F098D6C1998506DDFF7907ABAADA1C39C759C850E0C6F8E89
+A392D1C9329ACFFA92D361218D75E115F70A47C53B73B356D703E9C499AAD098
+AA9C8119EE9E9708A9EA3049E976FA19AD04210D5F6092C7903FD155113F3A3F
+269B746560F70970AC9F8D09956E0E84DACE4112C4E7C7F6B3F0B63D26EFF95E
+2B2E9699D16BC8AFC4AD9113AA3A974C9E82E877288CF71E9169D2DCC61AAAA6
+C536E5604EF0716F6487292BBB677518504B52C63822BED3BD5FD14EB41EE6A8
+AD4B6CF90D39F98E12A765B645CBA3E8552FB9A986390212CE119E7C3DD675AC
+17BD006144BEC534DA2A860188619F17589008409C5A309CB83FBA70F6446B6E
+2B56991B6A03B1DE10C621591CEE45BECA27C54BC8B4F1754A9E8F660812710E
+117850E1BB6FD89BB13F8CE391C43DA89EA67E9C3E7A4697790EA26B0E4E2E80
+DCA508873A7AFFC11B8C02EF86C2316E8D8B6BCEA37F81A3A87546705F070C3B
+9D4D28C366CEBC1EE485B8E2357DBE46E86C87B9939DADA60888AA9F1B92FECC
+CC1C198DDB594BB70A8FE690ECAC21A414BAC89BF019F34D2A130F485EAE35B7
+2A10C67EA3A48A4D9734759CC93AD85C6A570500AE5AC9973FC76EFA06BF5DDC
+26E20E28D16B50957EE01AF2653F8D860817967AA5A9BF9BF7ABCDA710E9F34F
+4F0EBCC32B3C9C2971F6225D2DAA6A451366B83F32B2ACB83E746D365B2DE38D
+C1AB7447FE7B37F9630E410E5D8F0ECE74DF46C538947B3A167AD9F3E4A7EB3D
+60F5425AE75AC3A27D39311DA35696C3DC7282AF1532E7AECE63D13DDA0296A2
+01487185FDF1875AEF55A36C17D6A8DD329279D229259463A2F05CB7A874374B
+E2320E1F6CFECB9C1CE62FF468C29751ACD9754AF1EABE8E7696C2888914416E
+235B6766F20FFBEFF285277B639A51EA2F2E30D207BC891B00F0436008F980E0
+9EEE7FB375BB069B9E0BA11DA951A99D8E60B4F920A0495C247FA7DE904765AB
+DB5C3B2D634757E43EDD6FAA4DB3C67F82D6853E1170F0B2D8CE496DD4E72B0D
+28277BEF172F1402959F64527F9B640619F04416DDB9D05FB2ACD019CB9C119E
+E544D24EA6DAC5C69785394EA50E6EC9AAA9E14B904EAF29A733C6D7942B63F4
+85729686742F26DEF78DF0DA1CA7CEFBB684F4CAD99021A3B3D1FE03B9C5A4B1
+BD04CAC89BB91B11952A2B17A61789BEE0C54B46C03FE9A1AE73D17CF94BA30A
+237C29D414C3BCE8E3E2DDF83C0BD59DCB66C4D2C3DE73DA8378F3C6C8035D28
+7464399857E57651A53E9C4AA68DFCA91B2376CF98AC5290FDB9BDAD9EF1604E
+9B0A70EDDA1E564B6D2456E7BC722454ACA8C4950FDD44B6EB9AD01169A9F845
+B06A0DDB7897C847A5B1F42258AECF3807AE936C8F52C3A7A0A85D68160AE442
+FE81543DA6702D76AB6E8701F80DFC1D87C961E350D0E52AB2A298B9E5908600
+7E14D2A87309043CBF13F69AEAAB1BC239DEA88EB5176624F6046664B1D2691F
+FBB2071D3706F97DCCA355A6DCC4D09FD35DC078FBAAF672FFDECEC61050A120
+10B5A96629041303FD01ACCC7686165DED6AA712FF8E5E85DE33C4E7D877C49C
+6C469A90410BAF60BE65ECD91CDC2EE7AC0CA8BA7B53865F26092BFCAA0BCA77
+B80DC51DAD09C93C8DD8E43502B4B68F3D5918C3492196292447732BA90F5AB4
+9F5E1D634ADE1CCAAD028DE5EBA9535F6FC5908DBD2D643E0A7E059C8C386FDC
+E72659C0033F535C0D7F6B98D0335552D0BF3C6E302B672A5EAADFCEF81912E3
+8F54E6FB7EC2B325125159713D0AC50DEE3673B9B148643727E94C80971A2E73
+5E1E13237BE69C84FC039DCE02ECE2668AFD047F21A61BB94A9F498C9FE5CDEA
+B274B40728B6F6CA9B6C15BAAF92F465B0D7311B46545CBA90D874839443CCB9
+3110F052EB247B24B45A3D2FA6FBC7EB2A4BEC2A5892914B3C5EA3F4F9B9DCBF
+6F932D95700E045B49E4B1F2C9D2A42CF39CA2F5A2654E6E8E6E92473D28AACD
+5E35C6705EA728F704F5996D286BED433F976AB7E018621A577AED7C0AC0A84E
+A032FE1869F603E6F20386E3A190A30A21EA886249ECF8CDDE2C33D73BA8647A
+3DCA7A8DD9E8EC8D9A415D126BA38B6771C489DFC419303EE9C1B83FBFB3A0B8
+97D64F30E4BCBEC24DF603FF3BF541E00D5804B6B6543D3D2B661CC551D497A9
+9DFFF535AF424B2F3150BB39AAE8CDB306AAD37767BA10BADB031DC2FAB16955
+EE78342CCC0E8B5976BF98F215461A8C6F63EBE6E2F1A1104662DDE53388CB51
+8B44F3534853B8095F3B746A2459C2EF800FB1EF7F235EBAA9731E3AB3BE4369
+1D3636E3ADD5BDF0C34FA80E90D8A1DDE770943FD196E0A7C5F1FAF6970B34C6
+4673AACA6B2B5C12B9608521AE736C1F4B97209B063D991300ED5AF3D7F27E76
+68E0B858FD8BFF86581E2B9548C691E3E5D9EC4D39C9715CDE86C7D22223CCEB
+8A38C776A30AF14912390A7546DBECECD7A687D4F08646E57A12C80DCA022B7A
+33399761A50B8E0ABEFA1163EDEC3DFB5DA3248792EEEDD894872D4E6814B4C3
+548BAFCDE0CABBCDB97EC6D1BA47F2E77CC1389BF19D73661749AC33F46A618E
+A665A85776545BF9662F2179D7BFD604FA8EF4700591AF3AEC647E27B24B76F3
+133F9198DC15C1AED830E737909E43EB91C334C44BA35810007A3888E33F5DA5
+B3B2C35481C648AFE630CC3E08F77744E401B2934E407D1EC17ECE737606B076
+F8DE8EF3344F57495EF49D11580D6FB28AE0B1422521B320843B13467501CAE2
+3DB93D7BB779F73B6AA30050DA74BDBC3F8DBB30F32EAFD07734A151BB2BAED5
+C9B1F790059339B64BB4146470F30928C9A49AE88906BD6FDB7431A4B50809CE
+0F67ABA01CDCC2320B0B097187B9299E3D80CDD7BB5DD5BFA7B28D924C5633C5
+45A23CCEE097C41C3759C1FA8DBA0DD95034BCA89BD23FAC18C70093F40FF2F8
+0FAC5DD4835F2DFD40540E9A9E9FD951A8AF2CB766597DE00147B163BACFB7E6
+EFDA4DED594F1C746D8B46A1145E0E4058F5917B3F21E9BEBDE745EE72CDCA64
+FB31EF7A2E55265F32559480E2B6726D3DE26FFC97EB4E3160F117E890C4B2E5
+8DF310E6A728ABA85540F571C024F8DD58E1D7827FE97CED5EB31547EBC36415
+02B8C0E10B7E37D816F01D56A364B8552CBFAAA95BC4BDDCFDE91CE0EF005B4B
+7AB56FFB47A093AEDF0DE1EA48FC8103CA3CA1470864D2693E360006D05668A8
+AA422CCCED20DCEEBEA5CE0DA1EFB00FB93E922B18124FA11A88D0F6E0F719DA
+57603DD5DA42E1C56C2FD9E5415AA199D4F334C151C1157E75C107FBBFCEB706
+5F4EA47A29B54ED8CAEB8DDA2F53D2A703B95487619780A52DA1270011648A28
+AA64338E04AA5B92C1EDF3D8DA34FA6D227A0325EA6F22E9B38B6338C657BB21
+CD4C582DC04010330F62923F817E4EDC6E5C0E6500F2A975A8A95BAA30C4A134
+BB31B5AC45A2E7F6E9CDFC810D41344C4F606049445F8E93D74271C1E29DF7CB
+5459593BA28AECF64D903D3E4D77CF5C04B06DE44A41EE4D9FC769854503AC85
+69E4A5106E84016DE3D59865D4AB30BD6C9E45C45DCB5408421CC50CD6179C85
+34E55CC70FBD8FEFE9F1D5160664981716E3BC7F24B6F54E0323D9BC4B692971
+24419EE62D8B0BA726E2B4294A9A76F328B8101DA29E78BD5C4AC383350FE196
+4D42DB1653637D19530124858950C22F1E9CF5BC07D46B7A58CDE19CC88DCD2E
+7FE4EEFD8AA6047E919823C8CAB2EF5274F45E861E6508CC11A8AA90AED2403A
+B2BF1315C2157B3B50A3685205D93E40906EEE9DE5985405974BCE0B84BB37DB
+080A45C5237B269B93C0A7CF294A18B45464A41F604C494CBEF829A381155CFD
+71CEEA54CC39EEDB6DF58A9896246B09F95DC6BC40BA6916AAB5ED3D24F66154
+3662F8978FC63DA9280FF7ADB09EA5BA79D3B66E0C88BEC1EDD78DA93839073A
+A4D7B0E627000C4ABA76C47CCFEE92E319315333A5584A951E34C55412049C4A
+A5569FE65A006F77B416E0530AB6A8E7AD6C72340AD4CE25937158FABB2153EA
+281E1D840206F5DA38E00815E9081F81DAB9FAA8F4DAB305867AC84735DB4F52
+A36129929BD2084A8EA37BB6889695204BF7290B68D5E722540BF8A276F8BB6D
+451D582EE59D2FF03F6B97DDE05FA00C3D375D2D0AAC8FE298F85CC067B15481
+48D70B6A0354C705715B891915FE8EA45244677B9FCE81E72D66177E309F3F83
+F744B9EA9E55C3B30DEC6E5E03B3988FD526A82A5E8E1DC79127FC62B2FA7949
+B3AD3148868DE22BD4B5708E32CEAAE6ADEED1F463EAB9692411E18F8D6BF391
+126B2700B4CF3B59D02E3F8795130C96285A63FCD1E0F647ACB1D35E9C58BD01
+1DD06BABA00CA4343BEBEDBE677E053E9732B33A7495DF51782A07DA07F5646C
+770C957AD915CC70BA8E08BE7A1F4E6BA5BB9C603E38F6FB0A2578471C4D02F4
+283069856D926B9076EC73AA39CEB0A061AFF1575C7093FDAC9F89C3DC06EA45
+06F3C2A3BC9FF21128B10CB758DF0F099B459A5264A8C24C098110D2BA1A8532
+8FAE146A91BA7D033F591AB1A94B8A6FE0FFB610F698D216D58B4EF6C87B1524
+8037CBB7E23D8550A620341C6625A1A2ECE7CEE2598D66277F857231A36155E3
+984F147783E9B93975AC38A29F2FBCF704C8A04AD84C3E04A12D2321FA56811A
+5B6744813CCC187968C5C26BB8D3E6615A912FA5369C01CCF8C0DB790593B190
+1A90CFB5339B8771F325C5FC448D36C7312B11A15A8635BAB59CF3CAD176131E
+026F6E141B2619EF7F3048750CC9291397F141591EEC8B612D6656DD34DB54D6
+DBDD303CED74BE76664E7DC86FCFEEF2001C9DBA56418FB61F589566A47AF36E
+C94671C5E8939AF9F4D53C0DE7142B7B63C86AAFA65877EBBB48C64589AFB2CB
+1280AC099FC48058855CBDEB6C2D2A0D092267996591DC3B5EC8252984E9B27D
+2E9EDE8CD8303F0905DBFCAE497DE1B755B924452CDE11CF4F20893DD6FF7251
+427F520FE00580DAF1703FD968E0F8ECCDE618E1EA5820EE6CFED97C78864EF6
+26FAFEEE194A268F24249D44829AA360D731C34DC285501E966A959180718F72
+6330E4CC060588A2F65AE64A720DCAA818D49D4440F5D0B6C1F6C3A107E12445
+F1BED2D3FCBB87A9597F01C7332AA79143564056219BF87D4B907A04F77621AD
+054935E883B2B137D3D1C4BC792E8335CA08B6D83227F35736C41312A0BB077A
+60FC6488C5E02FD51A10AC113D4EF70038C649C1677B2204A77F2ECBE9B3C341
+F4126BECBCA61E3F3801F9188A3775924A62D30FB096B440286FA655EBA00A74
+9A4162904BEA07CE68EE76018346DEEE20839C9A2FF71179B58E1D4AB30856B5
+F5D97295A097174467010B15D733AAC5813CAA633746B430B1AAF9F997FDAAFD
+436844D1A56B8E25A89D2CC4BA6EE7ABD167818FD4F6C747E07B262C99EE2C35
+323F0B471586CA50F54C6381B052B15B0C58C19DEA82C0CA29F00400B727419B
+2379979CDCBFA966AD513FA903160C571C3BF1BA239540B11EF2371A3880837C
+6D6CA2F374280CFA1586427AE975A2AEC34244874E4D441DBAC6CD1828841C91
+069AA87FAE849C5DC7C9EC1B9876E59F3CCDF8BB23D939F5348D7486934BFB02
+CC5A22541ED352616830A510DE7732E5D8F7E785BBD31C2BC9D348CE5632654D
+2C1740F89D57FB2AA1FD8FA3304EA03F757BB8F498ED98E48485722E78D97B12
+A05F3A28438084D1CF90AC4C3FFCD7B3365941C45E1E02CB13CA1E99F7FA1D00
+1C9D489D5C95F019AB4CE89FA3B6604473DBD2CE8E278969E0A0FCBCE68C23F6
+9381882443D3FC16966555FC222F3FC4B1207522201AB7A15A7A6F22CDC9D392
+360BF4C95DAD35770E0AC7E5EFF015F2C74ED7391F40EC94B8D1C163B5DEE5B3
+911A20C2625AD3B24BD94D2A42405E655DA47D3F94F882CA2F479437B4E0BE71
+8AFA4482C6FB270F8D05B4599A01403DAAA90C01DF3AA7C2BC7E66AB6AA833AD
+FB6E5EE13E45CC7CE7E200FBFE639F9CFFF5D08512C02764997FD28368969BFB
+0876F236EF6189BE73AD827332DF1B2EADEAC0ED3B939CE5BC3CEC78975FC636
+44FCBC2CCF4396AC7343EC62E0E4F3DFFA2B880BF31D93ADFE201BE9CCEC8BA5
+0B9B919E05B851E0909968DA259EECC6AA0743F25247978CC09C28C4F878E29A
+5070E4023BCE95FE0ACCCC01D0EE219FA8344E8F6D7D4347563BF8AC030B9097
+41F24D4BC9494915A82EE9FD37FBB6A46BF077B728FB569B1258CEA5F51F36BE
+4F4D0F890D782E44748CA3FE8C8A515998371D9C7D2311F192B4B7E7C68FC6EE
+3F7136714C282A2570FE591F247A08319CE9EF1E43274E4E57166E31A2ECA506
+85350DA31AA4C33C9687F5210BA225EA1007C444FBFA2126769767E47A967884
+9F68589E4BAA9ED32A7A466DE35554C132810C68ABDAE536D9D884352F28EA02
+8A555D2CE11F30598F44A65E2D86B43ECCBDEED9E4E5B5B7DCDA20EAA09D9FF7
+422FC91F2201431A9E8FC624FF44D26C0100183D77BC7E6B1A6CFBD3FA8BABC1
+AE4CB0FD382E26BE0A83169B46D91429DCB746A0326243E212F802AF6A56C709
+6E70C6C7CE7014AE937686E11622D5EDA1906A9BBFA359FFD53199E2E99D6A32
+FF6D53076BCA828F8F0F312F9E68D51F64C2D9355174AC7B29EDDFD33475FBC1
+4140531F5272D645DD03CE9A7BA88674E0C531579494BC12F1E952ADBCFD8450
+318099A104353C8F2C45186B8B4FE789C953D788099A872B16D6D8F774BE3F43
+FA6BA70F4ED9AD065C03A51CD354FD0261200EFB1AC5FC2FF76E6C081BC24E38
+C36CAE9349D58311F7EABD5BF9BDD6F709533C9706D9ECFAE28C5A3BAE16A82F
+64A29C7CE76BED0B3DC8F374BF49EC60822D054B83A068D7CAEDD3B800BA9158
+394678023119A22726BA1024180F40C68BDA8A1DEF6290E36B489BE25B6A5E58
+8BDA343FEDC153CA0A7EE03B1466E05A138AA671A035A21517C00A0CA33EFF02
+CF147958C3C5ADEF34843F640817AB8145B175532F06C0BE488BE836608F32FF
+24CFA9DE22E984FCBE141347D1B6768B5E358855EE7025836FAA01D50CBB9BD3
+0BB97B930EA9140FD4697BD9FA55C5109637D7DB9B862CA0A17D488922479EFA
+F39A2C002F7D6D9702EBFC7E53E1784FEB625180D1C33A9B08C37F32CEF1916D
+6DDCF6804641A21D12593E9A645F2923B4C6560B5CB7CDF32335E8164AEC6BFB
+674DC6747B6E8AC222D3124D0F30C79537399D9DCC8C962BACC2A78072A4EDF3
+A5B1215C080739E84022D99CBE102580EA04E567C51772A9CEF2F78B9B4D7D7F
+5965D4BF63EE484598B1553421BC2B49D9735EDA41DBE14E0C10896B5FFFD5E9
+A3CE0DCD36CED44CF03E18326635501375791F59865D71FED61A19CF83C78A1C
+284CBD767EB5551B26B6B056991EE56105B86286CDC7DFFFCB0BC5C9826DD85A
+6B380481BA3AEAF84F5DA006172D96782AB12046C7B2D3C055011B0EDF6EE9D0
+0BAB36318585C0A0F22C4B5B60C423D632AAAC93FB16CAD2731FE048E28C2E75
+BAAAFEC6D53DF682BD7DF37C040266C95E789382461E841C0BC31C51D4C9F5DD
+FC0170B4E46646974AB7E37E82D3827D7EE4C8B6E63A5A21D10D089F8A5E33EB
+56957346200BE141650A17A79613B65505D9E8D18CD42104525A43F38E7EEDBC
+8CB8E9CF21DA5A2F723FC56B90803319AE0BBEC082E65F4E8DEBBC5EB251443F
+48E74DE626B8FC474E80A4B971D94040416BB8E3B437172F6C4A1BC84483E679
+7CB5127CB12B79662D1D196D9FFB84AC484B16BE9C560F334A31F07C50F223EF
+D1816886CE184C93FBBE3749614F022E7E8C5C44299E2E4B78CCCD78D9628BA0
+01D58BC0D7438E8ED22A50482324C67557BB15B86AFF6C58D6FA1DB517D15E6E
+C27DA3ED29FFCFAE0F1B8EFF85A83B63645851D187CC96B428501C83901284B4
+B03D82A2AE0B7F46CDDB6493E908
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTI10
+%!PS-AdobeFont-1.0: CMTI10 003.002
+%%Title: CMTI10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTI10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTI10 known{/CMTI10 findfont dup/UniqueID known{dup
+/UniqueID get 5000828 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTI10 def
+/FontBBox {-35 -250 1124 750 }readonly def
+/UniqueID 5000828 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTI10.) readonly def
+/FullName (CMTI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 58 /colon put
+dup 65 /A put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 71 /G put
+dup 72 /H put
+dup 74 /J put
+dup 76 /L put
+dup 77 /M put
+dup 80 /P put
+dup 83 /S put
+dup 84 /T put
+dup 86 /V put
+dup 88 /X 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 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 122 /z put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7
+5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99
+8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716
+EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C
+02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D
+46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A
+4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5FD29DA32D34C95E
+2AB2ADB3F60EEB0600C8ADE15A2380DE10AC5AAD585FBD13097B1A7E8E210D4A
+EE96785449E07F0C8EBC2EC5EFBFD0897DFDC15E5BFAC9584D8DE95C5AB288CD
+8AD8B9BEF0B8E5F887B3B0B331542FC8184DCCB753DB6ACEEF98B85756B988DF
+CAF1AE0DBE7D37D5F44A2E760AAE3A5197C27B15E32275A64946C3E4D0476FD2
+7FDE148C788DD2106F7C825E270588AC05B57E625AB17BDD02306F9E5FC851DC
+32A5A6EDC43C770A71419B2C0C8074EF3F222C8A2097CD81A91F333A521B3A09
+482A4FE1CB231CE344AD126AA284C3280AAC3AD162CF0EE241BFB4C8F20502FF
+118507F5D1B5FD898571015E73E5CF2281085072E00D401F6F59761EEC3E8381
+1F26F75DB66C504AB6BABA87D121B1E7040A07AA2FE01F80DBC246CC03C4B2DC
+C2A715980C52B7F96BC1A78FCC7F4F52EEED5F705E08FC1E5BBFCAD121FA88AA
+8EBE58172C162AF409DBB0728F14923ED02A65EA24E5D52B6AD07777455A70A4
+61833D3789C719BA92E901232599767E423D5AD9C807670BE0E7B5CFF8256A20
+C7BF7214FFE0342809570F5966A2C43E784F35015D9040BA34FEAB6A6F089504
+3A40A9E9D711A2721D3F4998371430FB3C94BFC619559B97D49627BB630F4B70
+9D0A8FE4E916235335C3962F3CFDB04C4A3CF714DB5E260F4E66FFF2F27CEF2A
+D4AA26BBCAED23B8BDC98F8F453BA27AD7758537561E766B82DC3032E92A9EB0
+125D98A22C5466AF069BF72A9BFA052A8628FEC6A6AD0B711DFFEDE3AA2D7CE8
+34EA487038EF50F953B8B4471CBA6FC3C53877EC1BC94582B1123EDF44B4056A
+30F49394BDE22CDAD7F01951C7013D26979277D18EFA594E8F4F2B5E615187D9
+39E842EC28461B9ABA52020A127D2CB9002A673A435B13C10602EEFDBBA6BD49
+9DDEAB9E68D655443A5C2492BA061C1391A51592BA8C353A6F6A0708E8860184
+2B5D031D2CAB87D618E9F6F7A0BF3F66B3FD5A25BB91F7F1F5F99CFF56EFF4FF
+0A35C55658001ED2E97B26C869292F6274D433A5443179DBB8EE987196306348
+3F9E87C6422AFFDD30080C9AC4EE7FE5E2DCBFEE4974331F4AAE479FD8806D4D
+9C2B85FC69EB0453AD827A1E767E5C484BDFBF5C8D6E2B3C96298B390F22D757
+802643A79D5E29CF3AEDF0E12CFBECA4663444FC87F2027571DBA9ECF688BF28
+FF0DDB3AEDBA0FB28447CB4B5D5205F40C1E7A525FD7373392EEFFD910AC82D0
+98E71660A1B3227C4A2592F3E853CA4CDF64DF19A52582E167234F4036FAAAB9
+5446BE102DE2BF43E82F0112C2A20F15A3F92C6571AC761665A905362C4F8BDF
+AC8705519C99862CD9C0D75113C4AB5FBB83C880E46B82715B5628890D9103AD
+A2329638B95D93C4DECDC5E6C588C9D5183EE6FC28FAF9825F02DCA567306D93
+5440987A81B51EE7291107A08F201C609FEF91A8F0587E8B13D4BAF74A5A6815
+DE9E4441F46AF8E1DDDFA2D611C889614040B144A5EC064DEE4638C04EAB2E37
+4CA8F50FB8C4D65BB296DCCCD39F1F554CFBED96670A91F515CA10EF896874BC
+8EF48C6447752C70FF5A06F928DB55586354076773BFF7E94C4C3A7A1C1F421B
+A9B4E3936EC26E0C19BBBFC90F021E877F54B62108F6DD1C7F6D5B8E64FC9362
+E173F01BF2904B7E5A08B3543611562C2714099DE7D4FA330DB148B560A9601F
+42A84452811CE213DCE782A0D7809CFD954D6BC1EBF2BA4D1B18F50FA8174C96
+3E0120E266AD5DDB40B3F6798AC28CDC5C3C4BC34583528F5B5DC8A222B80B59
+A3A93DC715D061EC6915E6E6E21A25425C25E8747C60F170D61047108826F96F
+7830E220C108B441B6EA3198E33C49BAD8D43086E49F5A2BC7958A1A8CD011C4
+49045193394696EC3DDD0BE084E8F2E9F0B9496F035C0DEC1CE11409DF566428
+D50043CFF5CDD1092F6E0807E660B68163BCA738E8D98FC6EE3F713164CD204C
+0BA84FFF4F33F47BC31750B448603D7ADB9AE92FA91AEBBBEC0DCD66980E6955
+CEB425ED07115B24E40F53B29B9D840842EAC691B4F591F866DF27556474B485
+1C6F53DD72499847109B16C7093984A6B8487D4F3870DD517945CD90E648C1BB
+8A6861E540FCF9D75B984B5009B5CC760CBE297042C240DD624111670B703388
+6FE6FC0E89C6B4C88F51DFF3913D0CC1FB4770C8CBEADD4B86393605C0B6C468
+83CA5594754411B6FC331EF56D7CD6D247FAE42E966583C29239A8F862348D29
+60B177984B6B957E733DB4D275015691D91443BBB13C2DA96097A29733CDB284
+42F89C85A7A743338C9DD3BBC4EE53F695E5163E6E1ABE5791ABF100B198B9B2
+1C21E2FA2FB4AFE7F9BB2D381260CDD3A2CC05BF513AA1E80ED69FA27BC5ED5A
+21445BF00BC2F997B356D94AF13736C6D3B0613EB6F4CD96A685FEB672661DCA
+206105EDC3CA07900676EB2FAB37F48D2E8207BDE1463894DA3C5B1488AC1EE9
+D39DAF691648048F5D7A384B8927F8DA2BE3602669F71D80686E427F395134E7
+7ADCC611BA91AD4B7A0237213C60CF2C905359C90795230344FC3C50A22BD44B
+55B2044792509F50F5C21F53D9F9E9F063ADBED3AB99E2613B23334FE8DF70B4
+6120F2EDF69F50BE793EE145B9FF9C73179DE640FC2ACEB5C6617F918CEEB762
+4CD81E665B2E544864D13230B058717B207D3CC5D6647D5343DB4D0356082392
+871EFFA896631A7E0D6477942B632074A9A4EF7B09D4701B1639BAAB4E03A40E
+9B54A7A4F845CD63F88831EBFA4FB847847CB98F3455CB5957F2E0A0F5623645
+DBB5C5564C7F8B117D6E27E65C0F3EA81AE67B4AE4B201E7C4FB0A8364FE53F5
+41A7CE8F834C2C4B322809B353A5E63BBA7BF3B7DC1A85EA700BD287C2BD3FC8
+2832B0BB4695FC937FF5EF06FCD87DCE6DE793C2B1EE10E6450352C17726155F
+220D550B1759E15AB2C1D5968E52C8080CD280E99D3CCC0E80C2EF8BBFD96001
+A226FEED7311EFB4B67F424B557A877379A15BCA54780F0CD2CCA00400B9B39D
+981C6B552AFD2506D1B23618FA9AE6D8143CD7198A8482CB416CCE62B992347F
+337D505A4078713BBD91E5535BD58EF0351EBDCD749CC24D4AD39F8CECD7D6C8
+139756680A4C03A58B3374CEC658D30160AE4863A3938A891BB59CBE02BB451B
+1BA4B2B6E68AB61DEB85F95E3C909B8B66E220B9F18280161C279F10F7093CDC
+100A53D542F071CC0A5AF834DC1D18738F5DD62A5573E884E1FFD22BD810828A
+1EA47F8218C15A2E97CBC609927DA3CC2B802EA4A0D7EB57627C135E3B065905
+F97597D818A2C5CC6F328AD25AD11FA50F1E4FE637980B7474D6F85A521892FB
+72989AABEBE02A2D0EFE88A6F67AC29F5D8DDFEDAAF465C439983C6B84389FF7
+A6434462BEB7B07DBE4BBA61ACD4A60C55B5C0AAE527DE381DFECA2E6BAFDC8D
+310364ECB42CAFF72BA93C067B2F02D1CA7C34AE7CDC46787A0E234C8BE8A928
+7A6F3DDE0338FAD532A9886E8E3525B85DD39364AB03EC4C0DD25DC179CC1989
+1BE232E387E857C78332D834679195E10F1E7B87B7966DA3B2238F53D1E13FE2
+8F55ED6A92A750C7250C9B91E29796621E7E9520373214D7DA81B2875A986D33
+80382AFF6DE1F829F048E57664D9C4ACE91E4684A51023943A4964AB5657D610
+3A5405EFD4CFD1EBA684243E15093C9667797BB47617B66054EE02C41FFEC45C
+C1BAE8AD56B00D323FCB1D2744F061FA16E161988741A319B1564E04BA210996
+4F9F02A3268CABE450D166A763F5284954564A1C86B76544C5F5ACDFE0D758DB
+865A1CFCF9FE8CD5F9C3B2998C56468FD52DF8EE60C6935A3D221EAEC7714E3B
+301371C7DDA0B03A2416238F2B47BAD3A2C5021C886DF51C695AF9C87A864B48
+3BB3FE0B355EED5454B59B25A0D8A1B8CBD356C24F64D9B55E16C30C011365C9
+1E0380753BA3EDC0868788D5F50B9353D0227BCEE1BE36998B2622C0759BD66B
+E4444250589F9CEDE766D8B940770CB6B89503E925B35C00CBEC2873D2DC4A29
+0823FB7A3717B69A7DEDBAAECC067949932728E89BEECAA91DE3AF9BF070B9C0
+30EEFA8C0A55C8388CAA2F0515915C98E67FA095BB98967D14B0DCAFA9622E4E
+2E0EBFC768D80585ACDF28D8A5C2B6EE2FE7AAF62FFB90F569F84A0903996DF0
+C1D5723366C436E4088F3E2BB9B47F9789052A71CF5C49908CDC1DDA194BFB89
+14D7E3D7D4D72A150FD6FFD8303E9DE5A97A71B808B8BDF2AE466F31BF5D7A4A
+44F81230BBE2B456A221E2F72A8B59F8FEA8D31F8A005A5BD93B9F49CFDC3DCC
+CE2B67090460F632271C7157BDC2F05BC2749FD562FC28682A616A52D1B67654
+DF78B7843A9EC26A7DE2EB168F874904C2915B97534B2D4D9F74A9573A771D34
+9F7BC855E8F794621BF6AD471BCC347E2DF5F620F5C209E33A4CBF1EA85AEA87
+4492A77342DD33EF615FF34037D660B713C908786D9022051B825226545827A3
+2AD1B05D654DB6E6D261B4E8AF0933AD1F0FCFC7201E1A7C1B4199F160C38676
+21ABA2DDF1CEB655B3EC3226E0B122976EEA998F7A5241F062E54AD1DFD6ED26
+47C99A439E0AE95415059179867CDD3F0FF751F3141309F40E00A6C7C28433E4
+F649BCD5DAA64177580E05C495EE7BCBCC5FBF104DAF360CC2711386655B26F9
+D349D887EEB32ADE595241560FD5924A1745A22E6A01DB9C285EF14596EBFF0F
+03F36EB2E0A7C3864F819EF7B0855121292D49482F046A55CD7271FE03F02EA5
+886864D9D8EC22A68C23089EAEFFF03DED6484D8C341861EF8B6FD3C5BDF5AC8
+352DA4E13A1E30D0CB71E090E9CFB9AB2CAFD0CA7C34AE7D8E3B2EB4666834BD
+9CCD1AC2108348AFEF6071796F4BB2FFA4A67ED917E76A109FA2DC2A30D744A0
+9AE653A748C1D18FB52595D84E87F1C1FB6B2F32667FE203262C66627AEFFED3
+92B23861E5EB238BB4EDCE09DAE1C65BAFC198CDD1B45D42CDF93E16BB82D35F
+821E9E49067E966AFAB2AB52928F8DD6359984071FC37AA652FB834A09E5BD93
+3AFAE161140E74C6531E413E8FBBFC42BFE8A464B71EB1D8CAA93B33D7BCC3B0
+47C7EEFCD3E9FCF26FF9441DD9BDE68D77AD7251C06BBB9A2103049E8827CAF0
+F26BEF33F656A690235DEEC623CC519AFA82DE2AE16FB99F780FD7D8290DA40B
+9B604AEF36B529FD184239E7D50561A07428D28E51B55546590A1AEAD4B7F2B1
+AB8C5B9022C1FA03E33F8F409B24911AB8BFCF6EF4A8E415263C789F89063E71
+C0910DC20347469380B7FC1EEB87D4CED7F4A361E58B61C91AFCABA35C03F978
+B9FB5257C31657EE48504C355CE893FE3C553274C641DBC4004F5D5B879CC5ED
+D3F21F867F6DF054127067DE86189F0B59A1B90FDABCDFEE61423609D888EEFD
+F4A1367129962110C651D9481CEDDB8C5C2576A59AED64E95F7ED042AEAE2F7E
+81AC0C408E593DC30DCAC334EDE9EE27D932B98F040DDCD195D6155607DD2038
+970EB78221A94C52BD4F0EAC65F1FC10E5DAA93C17266F351669CAE56F42B68C
+6D01E1EA03AE554D63CE76D800FDD9CFD89F80A241EAEFF7EDFA41794EA25CE7
+97BD5028464D2CD45B53834B4AEF8BF0B9E7C6ECDEACEC887E8790A47A93F668
+A9095E5FA1116A122C0E5B74E2226C654D3187C6CFD8807917820423DA3EC1DE
+AA020EEEF2280C44A15209EE2F3FC1776875308CEAD38571E7BF889F287E4594
+971A83605E0B4169D4A23EE790515223DF8724054EDAD905F57918FC0BC64F96
+514B4BF7DC9BA79E763C22C977FB6146B10D26FEA1BAA7BAF21312F78D1625A7
+8E242D743471DB5821408AB786E4A7EA9D35E30E85533C617689F95758FB2C7C
+392E759C299DCCE36689686DE0C4DCE32649493650BA194A6208C5EAB670B170
+3F2C70BF0EF0E3BE2FB0A79224FF4ECECD6BB3388C6D06867A0E5E3DB93C1B2F
+464C23E44D3132E7D4086E3B59B1D13F49EB4772DEDF8EDC4F603217233FB7BE
+C13C28648E9AA51D53F11FB896839F97AEDD8834BCA53CB0021AE91FD8E95E2E
+F8A094093AF556B9639F508A401542B06821FF9DE1A745FE9AC5CACD5E8E1053
+911442FC15CA5333751ABFE2C617D38FA1DC332BFEF44AE569DC631C93EC54D6
+261583A695F5A392867A57F59B741EFCD2DCFECBC55D1EA5F2317601C9DFE9ED
+D1EA466210FFA905A8F85BD58B98991BEA58DFD1CDED5C9B086D42CCE632DADA
+147941917B879139E016B0DDEB8446BA017FC8EE5A354533D667B0835F5D027D
+C2D580C16B80B3D05CC92C0465CAE077729F0A15B2DAFC89DCD349B3F81D0516
+C65526EB5C10E45A8A85D716EE35FB9AB201FD7C89ADE5AD925A174169DA20FB
+61E96C73A143DF964C20589EF24A0FCFE6195317F2FA0D2249C0D8E649C3D9AD
+FF13332EA2E4C9CD36D8443EC8F027B61CEF92C6A6B72DD4ACBACC16E429A9A3
+F5F29C1631360E32F8C1C93ACB22F810B86D2969A7480F486F62F8488BEEC74C
+2C1AF13BB92BC578E8CD30BEA6BC8CB68ED730F54CED0167605FA76AD7B7E88C
+7AE7688E598F91C471BD65A542E96D64B1EAF19FB4F1234308C48C2DC86E2193
+11ABDB4C6189C6F201627C693691A86DD07FF55C30FDB3F72381E09C6080FD7C
+9182762E5001E30F52A216E0B71E4D2D4E2F3B20F95DF3A11FDB2D2B5B5FAA66
+C46226D5E0C77066349770514E5675550FAC9394FB27CD2C2F974F1FD58C04A3
+1EF53A8AB3B2202CCA1CEFA66228E1480A0709436C44BD3319C40CF888AE4692
+5DBBB52B15CF3A518F627F672135A24D5DB9B2EBEF04C860AECF231EBB5A3BF5
+6DCCD5E72FE4B6DD29E896691868A7DE4120AD06AC573F5608B8449B38E71CA0
+EB5CDA3F942482EA7973661170F81DC88D54DD5B92323F46F833DFA757107E9E
+F62A47CC50FAA1B68ED535C3E0E1073532A05ED339C8D70B3B9864808ABACD23
+AA95E9FDA43D54C66A675FA074E0A5B8777D3C07850A09087F36852B5351F35D
+8BC4DDFCA35CF29CD5E3DE118A741FAC4DED36847F2E2C6CFE08669301722D94
+376F540982958074E7F1383C409652F6C99DA39FE90B38221E75BC1ECB93ABF6
+B00F410A0C5651DB418566AB350FDA1789AFD88286AF3BCB42B98386F7BC144B
+02DEB8940D20A6B3062F0C4244EABC50923390064F1D027A8BACC3DE45156E56
+4A942D1B87F1C4A76B0D4D6801AE792CCAE3009BF25368B31B6AD5476FBD3BFF
+9759EF463EF5E78E10B7BF64005B2ABE0E8813950A08A1808587A98E0021D0DD
+751AD515E8278F1A0759E85D8A084490BBB0F8206484AA36388B1013643D3198
+3509078847BDAE08E76FA5BF3E3A73C323CE093DCC148E3C02C2DE1E26C94D5A
+40EC8308ECB02FF7DD04EC1005A2A0DC74D4E587F10A3EF349E828F69FD38962
+2F0C74D5DAB3ED6CC9F97008ACCE74C086A503948DEF1AAF58FC8BEC703CD360
+D32098A56AC776B1BD08442052A2A4EF6C8798F7CDC102AF1A2009657254762A
+0793F79A39DCD6ADBAA5EC84A7ED6018BBE727E5D477893D84F157074B24C13E
+8D4881C7DF8ADC13EBA0D89745EF93B7616EC5355600BB0D2B630AABA3CF2946
+AFFD0B2B724EF0F28393F2034B2E69DA5061426805353EB4D80E20739BC4C510
+6C45275B8261DCBA10DE1D104B12F46ACD230977EE7D7D1D35D2814139E38C4B
+CA6937CCFA653349B1EF64A98457F7B4B5D8F2978F16ECCEF7054905863AA46E
+DD524CB33459220C71E9EFA7845A3A760A507B3D3ABC525B35930B613710A13D
+098832C58EBBC8B0CA6AD516E6385792C59220331D0922A1F6F838A8DE13C337
+900462F952EABBDC2EB1FBF94A66186C177501453CD3FE3582073DD86F04406B
+41B6AEB440DA475E13240445D46726A6D45185D56BAB8807CEC8A8F7CE1AD149
+7CE2E1BB5DE4E5B9592241DD136479A65905FD0062C91DFF7349874BFEA5D9EA
+2F610ADB9AE7757B2307A1BB9D6797D9F9C4844A59841C7C7682105E23A374BC
+A91885E7410F56F60C29AB8B417E2D6092F8BB70A2DD5DEDD4BA1077D7CC62FD
+EA43428C6F79C332342E15F75B08A1ED360CD1885730E570A3252A5ECC419A7F
+D124C3FB3A7D58C0EF6AC117F50D7D4B6CD852200A1F3193BE101CBEF414F60F
+85935BDBDD23254648DEA12B95871AC8F859AD8C9315B258E525FA7BB0DD294D
+497646805C3CFC1CFC72C17EED56FC5E7A5FA54691474DEA0C85DD18ECD59923
+619117DC6AF37242576C4E9A56BFF2D3E717DFA750607BA2BE87050F8AE8EA72
+8056655F9D9DA1ADBCB07A6697F6664AC6B6C1F5650255776305892A6E3D986E
+10A3F76B65763C33A249C23C8616B866CC56D8440C501D46E821750FAFBA1CF3
+06101C7D563C43EFE7A7AD8D402F232034B7BCEDA9C49AB562DC60CEFA521711
+DB3D81E0400F776034AA7370C867BDF8F8CBE2F2E59D2099F8627118EFD202D3
+51B7AC1FC6D959ED360AB4E5ECB4966369BA85B6E7733A5C7123CD2519845706
+4B684F1C65D278FBCD01A64C1B5BDD5798313CA7CC3A03996EF52A5BAEC94596
+23B4C55EFBEBAABF72DB85657F4A3558D4585AD1918E86DAACB863EB75D64BD6
+3E250047E910F5587847B9B4F6BC4385D22750F78FA3820035607BDBC19C7399
+F90508F5CCF259DA67858F9393AF9AA5E6146E1D4AB77FAC6E459BE47B063969
+2D917CDB0ADD125F3A0304E0F0C548E655D710716E4EC8CB12CE2480A578CF4D
+587A5A99FBD5CB140E02C5A8CE9D45B1684E027CF555018F19EF54D4F396354A
+0C5947E6EF09484E90BBB69AC4EA851AF4CB1A21CA5F8E2827D8264E60CC2552
+CFD63851BAE8AE22D898791E61F4413C9E8BF423A7FF763A522C2B09390C49F6
+2F8B36645A69B98423568E1552BFD1EBDB58DBFF344861E2698B1C135A260DE5
+DC01B8DEAF7032621F182F4ECDED721EE3D52D788FB2660AC0BA836E8B1EA4F1
+BFB084AE9319C95757E75F3409FF6CC8F3C38638084F8F4F7DA8B4AEEED926F9
+AD4A5C73718F38A4E67E61CD7A1713DE7AD5B63F4EACCC6AEF54FEF08241C7BD
+89A71C7BF2452D08237C9FE7CED57497ABE74CC2EFA73D24651664E84B70E8B9
+448623CC127B35E5059CAF489C0CBAAAF805CD6674F203D970007F1A62D3E0B2
+7A0888C8EA6B4AF189795949E34D4359CD47A000608F799114BE5D36359D0F97
+8C665E166A285BB1029C6853A6DC3A6C6AAD5F0697927274A732813A49A473ED
+B7E9886B6C4560568436BEC798D8B94F20FFB2A908AA804476C08F8FE0254E68
+1F0CCE78EEB58EA771DEC96F0153A4B585F0E465A2C55ECF22164E79EFC2A040
+E0647B89B4A6A5B3FE75B39D7C066CF11011B2BC6AE827ECEBB6A6E99C87A951
+D3658A9707D2028B65F301BC2041A3F790F0741FAFAFC16B5784DBEA3DFBFFAD
+49320408E4FFD670D95593EF9FD51E984ECE98C8CAE1F50A8D81F244A01498B5
+9AAD06E09E5A280A5F53D196FB76D93C37CDD6BD8ABA9FE7F42F5F8E26AD159C
+4CBFC016A8E8935759B3E70DDC7EF0A7E7CFA5D2269D26E0CEE3DB6BE787B23D
+6F840128258051B5EB1CC83ACB31F9A293F7EAF250529649B5CC4CBD69AAE236
+13FAA8BA742F31CFC6E0089A7EFB20623EE18E7C0A33D2656BAE651C7D651DD3
+6643371D0BA88CD831C86F56A0476B5B0CF69FBC720E340D425C754A3109BD37
+3F96A118648B554FA9BD0A2A3286810DC3C39010D2DC807B6AA2AA2BBE061107
+45FF3797354A328198BD448FDFA6E376B9FE4D21FE10DE7B57D14723DFE76155
+E2595D792A2E708B3D604BEEE8EEB4559FB8C601D6EA3EA349E4FFB2B85AF6CF
+8B4790CFB7FDF9B65CDA0FA82E2267E5CD7ACFD4E19E7C128296EF19173A9A35
+B38BED1C800321AFB52A8F671170296B6E0B54BCA3D4C8460D1FA83F9E61A9D4
+3ECA9E71EFA883E06051FC0C11F538B97D63BE124399D38B9738FCCF2F0499A3
+4F8D4D762DCD89884CE1062912E8AD848E4108FB2433277F016CCBFB28E29D4A
+C9C3874EC99BE36A898B6F1146E94E12FD1AFFBA0E53EF0F9E86F40F5EDBE7A7
+F4B97FAD6071EFA7C3A4BB8F77F1FE9735016866A633FDDA87CB58465340BA1A
+4565448235FB9FC5F0899F35347A869977B8783036075B9C4B3E85406C39C498
+805EB559A892FF79B2159B7DBB1FB84553E4D1682DDEAE1940C3C7D0DE4FC779
+BEDB3C7BCA6250AC38C32119C7F38043C375AA302C8694BD07D529408F2E3CE4
+900CA5A77250574956271C55A3449B3CB69F254A482758FAECE0039E8B34158B
+BDA6AFA4091B756E644A1369BDAA7110714055E1297EFA2B91017EC27FEE9184
+A6712CD61F0DD2529A46F9DD8BF00377ED28EA5C3341B24D230E2BB4A8AA530A
+DF81B05CCA14A06458995D08774E73841AC0220C19FA1F34BEBDCFC359D02EC5
+FA8010FB91C552F7D8EBC630DB0A764D17F53BEB261020CF7E486339C35DC48D
+F0021E370C7685CA1EE41C6CF6F6618C375D1EC39DE1331B33F2A2FCE889E3DA
+0297736F5F76109AEEA94679DBE6A521F12843995FDB7358AA398E37BF984F6F
+C62DF2BA81CE1120746DEC8261339097B484186009E57257B5A5775BD73C2D9E
+AADD0D24164AC3041214A074215C9A7D4AA6104F4356EB853D1E1F9B3BB78857
+FABC652777EBA5643E81099DA63D302CBC70FD61E73E1D05EB3BABD5D246C2F9
+B58B468EE0216F888FD466C3A99AFA4BC71A9212AFCA8781A6C75F756D44FDE3
+A7B94EF1AF05B367C859A75E274AF29F31F13113A7FF040D0EAB1B05A394388F
+0DF7BBC708F4D6DB1321B137B91E7946533B9234C140AACE067555E6C41BA641
+FC23579A876728E65D3D343532E103F6BF81C204BBA4CA6ED94DD3C77E8DBEA4
+999E9C98ABE6F78D24C408013C34A41C6594A485467AB62779968B109712C158
+6BFB40E80A4527A835270E4813AD3061C13A9DB687EBCBB6455D9F3F4D029778
+26D531CAEB3C87232F124942C190FA045F96E55F56D253A6CE66A9A7E2F45FB1
+4F61C786EB15A5F0DEC6CA2938145590D43AB8319C17D88FB3606F254CB99629
+125A47F209E4A813563093FC9FAC98C06800DE19DAE4468D8E32B255BF81A2C9
+3319635FBC5DDC406A2A26374EC9FAB1A85CA1B71B32C796715384A2ED84FDBB
+7D6CABC8DE74E22886E0D760FDA261625C375518BB6E8F344C16A937199B4336
+054BD8261786B4C0BAB6DC42BA522F395A6535C24BC07A79DB87D96967BE0679
+F14442713C8CE3D97502B9AE6B089595B20A676DF38791AD840E082593B64961
+7DE2B093BDF6C5A0B18B5B77432FFC9570EA8A226D20411F8CC620932F80E73F
+6735BA3036121B413C877DDB2490EC029C1CDF90304DD6765B53537BB1D6E1EA
+489A9C9A721C6DE7930D399AD9B4BE725AC6EA084CA26D9B1A07F2AD6DAE550D
+A8A10A9BEA10C658B2ED3BEA1F1F8B5F17E0E16BE076FDD5BBC9D27F6D4795A9
+99FE84619AF8755DF619F1CE8262A3B55B5A6EE130D17B9316301952B83A77C1
+1BC76F50A4B57F1C6775DF18BEA12589D74B5242EA71B63C15A5A706C3046857
+732CAB3BF6D724805F983F9744E56D314CFDF621C677E3B344FCF586BD3E4058
+9A8A2C2926D80F2B8A108E24A23A3B0E5025C0D14F016B912C5E14432E28F42B
+634971E9F55B6F278DC824FFBB724EE407D4F91EC0E2B5966FABA144EFDFC50B
+662F6A87B85B593908A49BCF9839B942391C696038A9EB94F6624508E326C879
+FA95B21243E8FC9171965AA3F8EA2D1AEA9131A82F84CD0FE101C64A4C15D8C3
+BC7233C05E6F17C18027BCF63E221F93670E86D4D19C864DCB11795CE56004DE
+F553165BC6EE3758754FD6340B438F09BF83210309E4BA5FE39DD4C9D838F7FB
+51513A9A20A39284AEF3FBA27F69C34A816CF49512B9E3784450CC8828DA0448
+734EB51757D6EF29B283256B6C5040132617A04F8D3EB6E5D28AD5D7030410DC
+F580FAD6BF8342B451171CE11EE957E80FDB15F99E20771800A9723BC08DC68A
+33D3460FF0CBE11D922E2990D4A12918A9FF772F12A661D4E625DFDE967F2C27
+71881BF2DB5C39F9D295EAD909271CD42298DC8449E9CD22E0512C5D47E228A3
+6C61434F35B3D4E5795E45D682E9997C445432F1170F99E984E959C378502902
+509E5571CEB74F713CA254213FA07B57B172A5BAA187C49A23BA37B5785E0A3D
+18549E42ACD3FB78E52D81E2B7C912335707709A91A70BB69288D3B4D8275F7A
+68E01CDF69F254D38282C6573142D3705A9B4BDACF1708E651B86EA13EFDD4FB
+0AEA244D1E0BE67536B955FB1589D7C42FA139DC501A366A4EE19F55F1BA25FE
+55ED75C5A1644D965090CEFE49B6AFBD4F0A27C16B86A8BA4D5F74C0CC3CDB14
+AAEF18B57E86D1E3DD3D1023CF4DE3127DC03791A7DD346B8431D9E46922444F
+D4AAB73BA9560422BA4E3FF2269C678014F9DD9E817CB2558296C54D4E43BAB0
+02C2BDE7DA7AAD96E1BDE77915BCD6A0619456BE1F3ADCEDDC5A2EBC8E86FD0E
+65B83A7B6CB9C276599EAC5E4D7A854C37E294D71A2772FE6597F92C1DAF61A9
+B04B7231E9647C2C0D1DFE42BFE518BB12F7E58B34845AE1A408550E02E93F96
+57AACD8253D1BC3056E958EF733EA8A1500582C489515498D79A10ABB26AE7BC
+6E420F37014FF8A215391470CD375785389531F89C8924815E83FCD595E93DA4
+026711BE961EC5E9C491695305036EB817A5C71AB54A09FC66C19ACE81A7A8A2
+4C4269BA4162CFFD3FDE77E180891CB83AFD0A37E706F204F5A64EBBDAD5ADB4
+762225F03D13289DB062EFE9044D4ADE085572A05F3515478F9CB79E57543FCA
+03B5DAE1968A51FEF29DB43E587C8A97BD20B1C179EA8088DCC6DB4CE9177C5E
+21CDD854651CF7066C9A93B24326C4289ADD3632580212675BBDC45B02A90780
+DBA1A0FAE053342DF1D7C22D1B7A687190AA01ED100BF02AD5F8D2C42460CB79
+6A2651CDCFCB23EF42487F5EF14D2864BCA9515CB12E9AEE4F63234D54849E4F
+F6FACA107793051DF8C462DDE532F6D1A99B3A645650819E8DDFFA80EA42040E
+B1413564585246569B0C00B3BBAC783C03F7ABED1E74B02128CEA181B012CDEA
+8CFE2F345378C621D5A1F8A63BD33BA8293CE6485CD527B6C0A4B780C5D099D3
+CC39602044C9796CF5902462448744E5D54EA7B6E909632BF705686CB7E5FE0A
+A1DCC442884641B3509F3E56F64EBFF76D36DD306183663CFD49EB28A8F1F069
+BA72DC0FD16916069459CE227356A27645CB3EAEC4B588575EA119CB218D283A
+FE0105D225F068F1C66F80ACCA5094DE78749F207EBFDC1463A65E204263C2FE
+050322D7F9AE094F71A67DB8F5BF07644BE345E198593EAE1BBB5A4D7FE11F58
+B06A044BB41A9E8BFCD3543522B9B1D0E03AE79A8D33AC8E28AFA9136A2B61B5
+5619E3E73CDB4B13B6D388E8BA2877A56B9FF02ED34F264EB1A9D4CE7A97F6B1
+A0996A2435F5B92AE607F2ABA1C68F3EE2A6C98F34DA3FAACA80007D44AC79FE
+E60EF6487982472FCD3D8A0DF86CCA1ADDE74421938CAEE9F9474B467E7E76B3
+F2B9FF26FAB4609C0A614BBA0679227235F7A621B8427EEA68BCFA80E75BF9F8
+9EA044D4C19B5E00CEA05A4ED4807E3D1107721F0B76E22CCBFBB8E09A5A3A1C
+0B3B33EED6ABEF799A54877DAEEAB96E52D783412C9DFCAD06ADD8A48C83C4D4
+6DC564DA74C6F87EC23AED10EAFDFBDBEFD26ECC5E4D92A82A129454145ED232
+87CB424066C5C55B471F08F5A5E57396396CB5232DFD5BD454FFDB308983D067
+3BECDC906F7973138FB17751AB5F9D5F7E689DF1AFB743FEBA024A67237E77C6
+18F3BEFBDAF161D30C347052E630A4656BBC360B579CD2B4F5501D470CFAC9DC
+3B12F53641A19D4B530807BB269B23221B3DE8D2E18FBBBAB2119AFD6296C2F5
+3B3394207BFE868F91C06CA8F4088EEF73ABDD84D021BEABF522E248E7FC5B35
+E3C22622CEED43DAF8FE442ED25767972139BFB083D2E7873EB131F6A88076A6
+C4F17C1443B49232E7965C1420746CCA0FD0602E6658D1B4FF757B0AA23F10F7
+5AFE028C9A0C9BE5226868B94E1476768903FBE2D43CD2D4E19EE4344F944BEB
+BE20D5795B9F5D7584D901D417841630D6557653DDDFB8FBF78520E0376ABA39
+E58CB88203895757F780CFFC7EBF6BFDDCFD4DAA5CD6EBF6DCB58CDF40083CD7
+20907634AFC147DF647B45F44B795B0B0E06C860A0C31127CE10697A0AC86A5F
+7077D912CC18A3A2A665DED95CA6B9FD745B196C74B7A4830C01339B94ED4573
+73A6D0CAD03F0358CEABB488EAD794C2E357988FFD462BAA16BFA8529162FD79
+F0588055D0724457510444B4DAA783E239437D64B1B1DC92D69D72CB5CDFE50A
+787F24C27F9BDEFF5FD8424249D73BD2566CF943D47BA546113E0F5AE92B6780
+196C7348AE4EEB3F8D64EF2EFE8788BD3B5AB46EAC96E91FD44AD157E769A7EB
+0E1B9BF5317E2673C65ECF5A9DE1B55E604408BA9B036065C1A4055052D0BA83
+D1766ECCC63DAACC748DEF44D8E47FFBBA88B2CB6A98B054CB0086F4B9D07C83
+8B0D83ADCA9163BE3A629F465BCA28C346DD62F1E9A952D68E1737C4B1286ABB
+C4BD7D689C9114ABC77721C283FD4B7713091CE8A702C1E4715DBC415701EC58
+9905A3CDACE7D48AFD3F70A7C978D38B416E09B52FDA31536148DD5BB453DE74
+5AAA658FB7B3B63E9BCB2022F3B534D2948BD7D2E3A4E81CA53DEF75ABA7E72D
+3E46DB7101E6A5B064AFDFC4E3383A00743660CD8274731EB69DB706CF210A25
+24ACA3A3566F1E1A364A01880429CAC9DFF163BA53C8A7E53BB4EBEFA92DCAB4
+025E045F99F3A11945DDE2E13197AFD2ADE14368C31B04ECD90E1B9D67C986B7
+B3C84FA62A2E0530DE62C11C430F5CCDA53017DCA126708E96B56EA7B5D4B756
+7B6A9399B1A1E6FD6E80E34116100C9F28DAE7DDC60F895FCEDD77A13A2EB039
+430C821A7A323C4D31B4CBB98AEE6AD360DF3262DCA18CF160A02C3F66B2C780
+0FA590150C32B06A6C2BC7FD74C4EC59B847A2458EE657899E8DC25B5EAAF2E3
+C4AC110CAC0F86F415A2724CC1732F953C5EC34748FFA71818E04FEAEDCEEB7F
+5BBFC8AF78872A3B88D67AF648B7FAE65D2E8C1F48530D4F45FFB8EEE05616DB
+D8C9277E5949A44D523F9DFFBCCA2BA2ED127FEDDC4387DD07C095D8D7C56A4C
+F54F47686577C9BC940C03F9CA40BF7FBEC3A07C4DD7D59FDE710F842558E956
+53A126F804600B02F791494E9841BC66165C248298CD8CEE158BBD041FDA7DB3
+5257AC3DC36AB75EA41204E7BD8420C6FEAA25FC7A02F7453978D54ECBF075B2
+B02121F5498550F38A136738F52D4A3003C016DC473C9535109EA2D0DE2F2E73
+8FC026423A19799DD8268EFF6A8264C2D94DD6916B535A20A0312A791E0F5ABD
+639AC6ACC68549BE25FE23D60A8604A1C27E4E1863FB181A7762FB4CFA551243
+A25F3AA7AE9BA25C52F429A8243CE9EC7D7D947EE021C9E6D603DA1010737D4A
+E2F522E930C959C677CD54E40ECE0D20D2983B093388E03DCD3EC64E34BDFDCB
+713E3105B0EEF3BE68235BF5DF5C661822370BD7614B44D4DAC1C79170002F7A
+F590235E0887F14814A823F9C62FBEE9C8F309978EB7D7D55573B4FB7EE065AF
+F7A01601DF410D561476074663B4EA05CE82C48A930F28883221678112DAFCE7
+D2A460E83470C5B52B7CB1C43D42524A71835A1B896298D6D9A804F2F23DB32F
+2C7D11F33185A48CFDCB7B33EDC4DE4D756CBFA836A82766A45E84CE57F6DC5A
+EB1BC7925907B6095990430EC859CAFB7AF58044CF477C7974DDE6B1291B035C
+FF266F85BF4E5F1A49933577AAC49325288B76AC0A217FF9550B2203E6FE58E6
+22425ED2972E85F471EB2F5BCA2C9DD2BEE48F4E87573E975D0481806F0C7EDC
+9918E853936EF95C7B75B2AA3C15C973E8963620454690CEEA1EC9E594117E18
+B02D8BD96D84769E5376AF79B42C7150B7688EDFD23441C608C41DED89E3047B
+F2E01057EA248B4128D68E6FD249DB020ACEFD1E0FEAD6773115B434FA558BBE
+F71C2FE0FF0ACB9852424A4EBD0C43745A682A280E37E7A07BBFD3A941036C55
+5D97488F4D5E63BF6A4A470AC6FCF0DDBDCB00972D846A5CAE0AAB5EA2B783D6
+14F2F300A5620CB83DF801D8356B562446DB8BB6699056B185743E9E768A8D09
+6B2B821E5F32C830026EFE9419F03FA4A2B31B77DBB3E74FAD7C77E4FB1FD68B
+4712443FA811A9CEA5D1AC300100EEACEF7750876636221936F413639502A88C
+A52E9EA9E0F33D83156612B013DB6E3C71D9E1AB0582F4BD8A6D8A94EF11277E
+524B3CC801EC26DB420811C731D49A66156CF39BB5E5CF30CF0373E51A3B69B7
+9F1FB412F6EC1280FC57A52E87DE96281AB1EABD636AC75EFE55FC64A8B91849
+4A48C1088E3360CC56A61DEF22A66477C0F44E1851EE82175C9FB721897358D3
+A1AD64ADC31A76A5634E196341F9314FB2FCF7A4DEA54BB36C62A21BF29FE0A0
+23A323E26E9174B66E8614FA1153C0AA2065E668385C286F57FBB4202D80436C
+03FD0B5470932993E1667246411452906E493DDB7916DB951A394AC1515164B0
+98C66CA4C0539693F105E9DCFA967B25EF37E1F48FA279C2FD35FDB114F6AD14
+3C9C6AFD105AA057B014706BD9319F651007D3DD5E3D581FD11E5AC21439F463
+357D19ABE0319FC38C3971132AB73165A372109C15E1316149C2D755D90F3F38
+78E7EA7BD86A0E18BD02294B5F4536676F93C58A259860E294AD8978F767C3FB
+0A8C58F0335F987D2797045263F97E578DB42F9BB097C161845D347AE7D3D409
+3341BEA7EDD164EB05BEE9CCEC1E48060A3BE275C80EB84555171CE4D0B21207
+35462F56926D0F713DD1B70C6DA78B14E4D11F94E5BA9BC78D4C6B4701CD5A4D
+F7A2C28E150749F0C7BD2D57664AB5C53157604ACA4772C09D6C7554FF07C966
+B61B01187A2AE412D610BC2F701E3723A5D12B11CD0E51B099E3E28EE8743427
+EB69A02A28E3F6C40166736C881E2CD9A04B001ABCBC4DAB7A5E97D3F0D2B2F0
+491A275181FF36C9A594E3494658CFB73C0375B8A3ECBF74587B87C00949C82A
+AF6055DAAA1EB9B07B0E3F71B40986427EB8A909BFF873901997E5C12A96E9B5
+215F8986F9B03445E9030977B4B9487E6361316052EC1D57E37E526F499DD71E
+20426A962873A6DA473E2D8337C2813C1F87F27E9AA111F3DCB04D2153D66D76
+32947C4AB3AFEA2EB65A92BBAC6712AA9D7ED46A24C3E055CCA25E60EFC48448
+D538878214E4A4648B6EFFFAE1D5D7810BA33446DE287FF9A53FCEC88DEEE5C3
+BD0990235C00751A34972F975CDA90BDF2AC52A0B3CDD2C37938867BDF8A5350
+6DBE540292703C94BB9CC1993F42B36519C1BF1C1563316F5BB2AF262864ED0A
+D960F09063B9624470BE8B5AD941C8136A40C45C7FC3647D0D0F249AFB388FB2
+5BE4C1B059B2F2D1486132F54961B35CE68D573660954D2CE0CE474B3A8511BC
+88FDF2A7A5B6D42660AA24162D2FA941710B28DB5FE3A1376D1C17DB755BA9DD
+9E8D7E413A6D91DDF79D561E6E24E177C839AE7AF67F7232E62C3375AABC386E
+F252BD09ABE7BA2C8864A57BEE210D918C837A22956CE01E2A1C6D8D36ED0B89
+7D4F5BB00875BF86F08C567090B97274D1717E6430EAAE04D112A68E690168BA
+7FC64082D54953AF035B8EFDB9CE79DB23FE8EA4642CD007E5139BC8A33A80DE
+A343FD7D30C4E414404FE4B6C67F439CF59D16C7AFA784F05EF8854B1FA799D2
+3B6D60555E8C545ED1A87FB0EDA768B1BA8419B714C4D98A29E097018749375D
+927F89639DB3A683A5667E055DB80952EC1CECF2379F7D4E474781CA6A777004
+63D59E1203C15F36176C31FB37E26D7E3EA807960DF37739382EB296E6C86F47
+2FE36705EE49206FC73CE0B50413477C40EA6A32BAEAFAF6B48BB787687296E3
+3B76915020E7011AA5EC9998DF03DDC10442962B74D79E835DF035B845262F1C
+BCFB70A0EF1ACD339C730061DF2F71428CCEC7FDDB79288A01612E8C312D6420
+92A6A46FB050B3027F3FF9FC13AF63577BBF35DED932AAAE1868797CD0DD40B8
+5C16142A7844E48B19E712255346809F59B5FFAFB4EAB7CCEED49AE0B8044533
+F1F142817766F2911130D256185975FF7A4D858B88216B8C6095DA7B64423004
+216F59E7E79890085589A5FBC37B152446B39AF9719EF5F0A612C9B6EC79B3C5
+E4CF1B40508F110BD8344E9AFF2626E116BF091DFB3A353CC902DC90431E6580
+0A05B75D0D1FE391966857000AECFE3CD96695EA9A59F1F98F5DE734C394F4F4
+7BCE2F6E68BB3E7BDDC11FF45B2002903F90C4F3D9A64D8075D382619E92330B
+F2FE55CD9E2BCDAD1BD0E4421C4E14D230BC46843CFCF29D97D909E54D62637B
+C102EE4781B5EB9D6E694ECA3E42A74401BFECA5C2F9EFCE6420450988D42581
+BED9703DCDCDD050BBB8E3394EFC87E649C7F4CDFFCD94876173B0C3EB2BC5CD
+3AB10147EB82D3164893FDB8A35E27BE272BF6E426EC25C3371FF4149E399028
+978DA21E99ADC25E40B9CD12D68828D03E21D8F63B32F36A0AFD0DC21EC682C6
+FFD4C6B3738D6ADBF6893A961E83A530E7761AF49EBC1B2A358CCB577C0DBF75
+96DA1916EEDFAC8EA137929981D4B81099BA2395F1373651FC5E2BEEC4CF08BA
+EA34C68529F8386D97CDD918D5178A45BB841BF4D57D879D4BBA7EEF70EB14BB
+EAFE293B945C61768C5C7EB17E3D594276CEA68B8B932CA4A5B72D55E9F18337
+B5F80C8AC59882263F4422EEC92967B04693531730E2451DF1163AF1C42706B1
+DD2DFEA4661C172EF86C4F7C236C17D95BCFD45FB25A9C7E7932438CCC503D16
+CAB681713977520E91314D0BB8904FEDA54E01AAD18A5F1D702A43C5161C4E30
+70B22FD17A53B6A297ED907BC5FAFBAA36215CE008C5027A36E8EF6AD667ECC2
+6A1683ED002E4FB3530CB75005CFCB46701938F284F089219C943488BBF00A2B
+F05FDB494FE62B148819E66B75C1EABB74AA6705E1945418FE8CDAFE3F59B645
+D0E98C428AE93F4E45795E626F81748116C72DF6DB8EDD1B7DA92033B039E26A
+97FB8568F275F6737D816BFC63FB6CE5DF8039DCC6360A11DD06E62653D4FBDD
+032BCEDFA5825D6E1A56A7C2BECC61F58E20F52F494326DAD8B2B179D8978C43
+7F4BF0BB357BBB26E8F0A953FAB4436939D14C35EBBB8F9ABBF4820BF4324C63
+8538C96895275CF2ED860038E557364668FB8C80D9034F5AB899EF3F4EBDE4DC
+423AA848FDB8A0AEB45F341332D498CF55B8211B0C5A619D404170359DE5F86B
+58474D3C6B39D386998BBC79CEC93F03CB7891E0084300ADF09ECEEABABC7CDC
+22FF542616DE3838846581C6C80C2D97077818FFBE9DBE8C8449CD13C8D2D5BC
+6FD512842E7B222149430262375A6CD4B64BD1A6C9DD16D975B4A5F1B3503B8F
+45A39DF05BCFC8154C598243CF2B0E90592C282ADB302F05363E1C7C51ED7EA1
+450F8668971783E264669E8B065A61C0465EFFD3242EBA21510955BE5F568F02
+5D1428EC09E2F968BEF94653286A57FB5F58A554966C9C836D2AF9213B58D8CC
+55DF670095A0251AF7775474444AA1D91931A93FB982344DAC682E224C2C07E5
+A5F227FEE5CCD29E0F9543A015F59DF9B073A02ED3A74A1FD778B69646725921
+58D869666A6FB56291DCF7F06883719AF533D24527A2D09BA97085B5B0CDA0B1
+3CEE738065F0E631322077CBDF71C9E0579BD83D24A39DFE11502AF427398B9E
+B1660885032D54A948380D7D386CD865BE5C516810EE38B6B5120C1AF67DAC17
+10D46A7AB3C40916F4AEE937DBEB0E763C90A83B7A6053E329E29AF4B98EB2BA
+9E16F834880F246F3BCD4F2BB0BA987B48C5C63F59C47F25AD5D02F4C3131BF3
+1F04A860DC3C542BEA6CD7290997E039EF2CE021FDB0729A93D4F431557B076B
+C0D85AECDE9DD072698A81E731814DC25110260010C3DD863C87131E461AD28A
+9416FDF10EDD1659B982654214F4A579C74CD722D063C9876B970BDDC8E6F63E
+1EE938DB99FE260B92E5D2E22429F1D721780E96F4D2EA983B0D9558250B07B7
+47883F7DB2EA31BF6237524DB411127B956AAEB6A714EF245AA31E169E5D0E65
+DD3220A2149594A31ADF9B9CE240795B40B0AF33EB4E48127E6D339D77490233
+4F32351A501880975411A5A4B66B051C6A9441D177D42E07F226482E12989D6F
+E152B2AE18A4482CB719E9ADBF39BA4E4ABAA5F4AEE67A8F96446C2743D55541
+48584A86C9A29CA5132D1E6592A1A6B224A753F5353BDDDD771A646A85B455DA
+F6D988E5D2C1F9D6F7EF33F85A214B3983160CBC9E94071BB32511AF254E8BCE
+901DCAA53A09FF5376CFA072A89E934C7979DEF4A4FF9B7814C51093765BDC81
+18D08EC11C3FB87655EC865C3B3FF76EF215FD68FB542F1C0895851CC8A9B2C6
+CD5383E8A7D4A0CC6BDAE7A814B551ED4E9389F72A436BC0DB5916837EDDC220
+0D59315375CE8EEDB620CE486F642723F25E48797FD11D60FE586F77BE1C84A8
+EDC862CB369236766E85479C518A2F404FFD359EB0DE1ECDA9A7005CC89D6FE1
+6B94513413A5580E1855EECE0EC809D4F3CD521FCA0C87B53A63F853F77EB506
+9BB7C6857ABDF7D41B8BA5C76049BEC762A92785D61C4B4B9B52BC6AE01261B0
+7F490E8908C422C358FB7DFDCA3C90BC90D7382E1FFA4AF066191E780063ED30
+CC310911E601F4439CF9411D510B4D1DD0CD00AF4F037E43460D5318080253A7
+087882B147696917B46DAD2049820AF6544C17CF7B8F959249112EB815A770EE
+5A87775CBAF668C014951DC035C88A9ABB6E218250CDA07D4E8634C24C5FF2DA
+240CD8F66D2F40FAB0B9343F29F9754B3C05612D93A7FC271D5525C0DF908C27
+CB5283B2F67C56CAA486608F95FC9F003CDB6589B3490485280F62DD2CC4363C
+9922A00068458076E0275A79D6BF68936AC01D8686948B5EB9EC085FB4881280
+CB88526981644AB139A28AB5D6F697BE574EC6736A0448F7D2A01DCAFE7EA13E
+4445FF1A2916E1D150D8B5647669FDAD2B964AEDD165EDBD80AB1A90B7E68A06
+6E879A384D859D9F39679D2622CB9B3333B23953E6C480420915A7D306FFE547
+EE946D441055117C758A268C3BC5D9426F096479DC10A2A40E0DCA2A26CAC4AB
+D25DE153FFBBEDF0192B421F425C5AFECB3E945D1FD89A871BA6BB2B6D6EF927
+14F03EF6F58F08C942FFDA0D5C21C9B4AE8D0BD94F37CDCA045B9D9523C78D34
+CD2200A20FFCF439F46349D1B5758927CDB632BC9FA901EA2DE5753545E29BE5
+255506E9AB64604B45151C4D1C3F9153122386128BF321B9850B8092E5A0C95C
+5B76B25978976ABD43276347D3D19BC9D3DDB0942DE5F92FEAD103E8780CB7C2
+14BAAA7046FB844EE91FEA29DDFF649BDBD6A23C27B465D56F3F610EAFA3B6C3
+F7BD500F9B3B469AD136A7D4FC508A96A274162FA66D1226CCD145A32C7ABE53
+360B31FD69EBCA0C1072082D8D81A3E25EDAD691A7EC2A37FD38F0E306BB070E
+ED46D391BFE7AA0702D28E7F9A1293844E1F709B1FD2242AC3414165D900601E
+0872365C6BEDCF61F914DFBBDED7C20AF382F55F1778E9388A1C59665694F334
+D27DEA2A169BBA820551F5FF4BA34ACE364CEA6D934EC516DB8DAFD57EED2ED0
+3CD8018EF77EF79077CEB7DD82AD806A583DA2E0EFAEF6C1CB48B53A22BAE11B
+68FF422F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMSS10
+%!PS-AdobeFont-1.0: CMSS10 003.002
+%%Title: CMSS10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSS10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMSS10 known{/CMSS10 findfont dup/UniqueID known{dup
+/UniqueID get 5000803 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMSS10 def
+/FontBBox {-61 -250 999 759 }readonly def
+/UniqueID 5000803 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSS10.) readonly def
+/FullName (CMSS10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 45 /hyphen put
+dup 53 /five put
+dup 80 /P put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 103 /g put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 112 /p put
+dup 114 /r put
+dup 116 /t put
+dup 117 /u put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0
+7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81
+DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91
+511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6
+1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD
+028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86
+1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C4488BB4EB864B48
+63941B9739638D2E6F3CC778582B46AEB4E466D89D1C211225274356A4BC90F3
+274C6AA56E200249B7D0949A3FD4185DCB3E5286910EFD7CA72D5D8E8052C96F
+388D12094B87D3705CE64459558CF024667C0FE96CBB32B0BC9E51037D7BD62B
+E4B05FF99384E71D78441A79B0B1DBA1CAE02434A9FAE46596FB86B873B1670D
+AE0BAF516445A0DDC127F8FF3ADA0B10EC30A9CC1F7E9248828B5E8AB46C3FE4
+154B80A54128A08777F5F9B8C519C7E3B632B3476F007FA156E9F39FBE57638B
+4214CD2BA79BA9DDA0F4C073AED814ABCCC2F7906C57A872C00E67FF03AC1200
+29DAB92376422FA21C67CA98BCEB8C431CA2D3EDDC16972F84BF6DB2F705BAB5
+CAB39C82D139FB1304B9E7BF1F6FF447596081D5690B1519E468D6BE49C329C5
+C9C809023EDEB9DCE4A6D52A8049E0CC134E8B41BFC6558CFCAD3D9D2773EA16
+131567AE6231B3235869767A1E7C1FA6C8D6FC1B276CBB1CAD14D376188C9682
+302836A9290E587D4225EB8BB1DBA2C4580A81FACFDA197174FE948CE757C575
+F23070FD84DE121955D7D9307BF986C5E739FFFB6CB76822C341FBD9FC2E3378
+AC9332B40C07D5B8745D74E30F1D719EAFAEDBF5FBC40D0546F69A66072D8A49
+28D2CC2E76B9B1EFD191E0BC7510C2C8761BD92EFCFDAC263342A01398A56D18
+121A591FF5CD4AD8B25699A7897E60BA940336BC17B9EC9F97C2464D031F958A
+A3548D0C97C50C580B6EEFD0FE8330EE2BB0D2E7FD1DAE33448953544A4B1C5D
+8EB57798D0ED4B22909FEA78ECDBC4D8A124DA05B9999242D68681017285A0C7
+69041C1F79442279FBE328733EA0A6694D68BA89739FDB9297BE0CF1808C07F7
+BBF6F1538DFE084EC8C0EC24D883F6CC08A51DFEA23EE920F44BA55FFF58E960
+C7BEE551FCD2D5814DE7E3F835608073C2CB80EC57100CFD484C837881674E92
+B217F4D11165427DACCC29C129005874C05CDE5FBB2D912368EA2B98C45AEDD8
+8A0D2493F60EF36809C8C6EBBC7856F6656E8D398BCB29DAACD4F7D4300A0B01
+161CEF51195D2C58DDFBCAFC1C03F49304ADF02789889826F1E20BCC14827565
+F2A45CA57DCC61B52E33638A0C6C5A59B145E82B82571DF1806EC40FC0E8634E
+A34A791B1325571E19F3AC2EF6FE68A14B0ABEF7EBE0EDA3942E85E5AE967A14
+0C5AEBFF2A36DCA8866700CB7082D2ABE470864C44AEE1F6D180D511304C8674
+D02FAB12A7079ABF96E1CA3CDF9D75532123E87663B1D524265AEF63EB5C2169
+B67A651A101E1C7EDB008D3DB06DB1FC1A81B41B291D6C4A58FB57989FFCA434
+DA84B3914D1D80B17AA3A55A70BBC06C49DD5F7DDD03FEB0055088558FA192A5
+261477899857CF598DB740E82D035E84CF17B33048CFED2DCBEBC2B75CCAEBEA
+B6C5AA1C6978FBB36ED98D9047028360ED430A0AA69AC85A8F83825EA649E1B2
+64B260197B06A24A1DD969CEEEE136FB046D713D0630B246BD41CA285F076038
+F7F8431913BB9A3E70311844D4C22AA446E3CA217A9DFD75A898997130269B29
+AD4AB7D9662856E677FB2DAED7078639CF31C6E6637C74DE2B5D0ACB88BD61F3
+CE3C5D56D3D4B3EC1ACB33EACBE05E53A133EBFE93CE6A0CBC8F24BDC5B31BBF
+5B3E55D6B40B1CED389076014667E28BBBD60145A06BDECEE8011A2C6F06D091
+73767A8045CEF2A110B614149FEE783A2351FB2938A9F73CA406538EAD82ACC5
+A3DFD3DE00221E1B4EA977AF8C89661357FF7D2F1FCEAD6CFC9D6AD81F95100D
+EA1F328249AD84AE849220E6593D45015B4D7C9527F3063E9F6DB6E572092A1F
+1F460696227D5F0FA5A5484B1F0D8B4A35066451663BE448D924DBBFD388B6D6
+D7CFC87C9E75B7CF79A4C9207E29E0BAAAD7FDF529B860F7731EA978E335334C
+13CB2F0A4250F5957B44CAA0674AE8356F586A24FD137103973B9A1FC31090C7
+C84DC5D380404BCDF3FE20C6F74FFDD8BD1DE845E99DC6FE09931F003834ECC8
+08C5D962070B6C44F901A787CCEF048A2C584A2285506B4D4E82B1BF130E2220
+B6C8B3240A4CBBCE16AD3676B23A50B75F82CD88D1B8F21D30A12716426112B3
+23DFDE5A348DC9DCCCE5BB5DB5433A5AC125DE1229FFAAE0D8319B2929986EEA
+56A93BA1FBDBE617F30852A3DC8C712DF674169C6D656F75E252187A085B2788
+2467CC4DB08D48EE6A98C61BC55E6EFB1938FAA718802B7587B94C8F1477E9BB
+DCF6E02B5E67FE3AD9D87C321CD9BC0CCD36B9C4BC601E6BD552EAB8E1C940CE
+3A22F3C2501C3C939CB4F17CE97566F0A04602D2A22A05CECDF4A49CAFD6332D
+5870E1F31AAA5F86867F71610CDB83E473B9D20BA00D8986D7148E0EED03865D
+9622864B52B09D12E0C5FCDD023D29D5AB1CACFA92B6FC14FC84E95F407861D5
+2BEE3301AF399FD7ED04DFDE6679A345A282E7FC08D47E3FC8969D3B00ACD7B7
+F8769647D6D4F4106340EF739583374D023C2702C48FAC1B643B5897D2D7DBCB
+73257712A0FDEEEB98A021D218CDDEBBA34687E23C4828D7F96D1ADDFAED7EA5
+B279322E6D55FB486AD8F3A8E7B2C67915564FE56F0C9277A06B29C47FB7D007
+11AFDDB3FC1B173B4E449CC6B198041CCA0624D81B4840FE5B63BE72157AC6E7
+03E5E95D2E2CE2E40BCE8044A8F2AA45F855484A891B9F0F8F70188AC66A8DEE
+F4D656CBE216E6D9AC33BA8DD0685D480833E1226784469A221D9FA3CA600AC7
+5574B5226649A9C48CCB43339942FC9010F86BAA2D181AEB487A92A96BF2EDF1
+60F3B93FDFF4137A25A8AEC5ADF8613019CDB103DC4367EF3D8AEB4FED0E6BF7
+622AE0CD3CAA0321D26CA4280CFB60D08D9560AB8AA5698231171B881BE9A27F
+BDCF3162134126212C523738D221AA05E31CEE73D9D40F73C450B6AE2C1E70D5
+C37162BDF55943069923A290A6C720042566E55A21CD81C460818883AB016C16
+8FCCD1255A66977DC1C110261D7642199D466DD3D2493A2D47694F842241C474
+1752B00DA03E69CD16A8A14BEB8A431A315D19A39BA978E46EB1189089FEF647
+F9DBB58AAE6B3FBD475E4DCAD241A051DD100ABE81D40ADF18A4C50F53BF749F
+D6F7C8E02A5665B4AD18DDAE79096DD447F8BD32C68F9F97F05E0071D9E9AFEE
+257B96D48ABD9920418E17C8F027E9E975E4A08DFB1988E7104CBBC1CAF356EA
+7750AA7110BE116AF1BA69A94776E4356573B38472A8A1292C63701543B0F315
+611A0E0595B30424A1137478BA6F990AC7C3AB4DB69E75C222B617F373C521D4
+246E954E9857AF59D1E6C36412B643733CF5E1C90389EF0E5E0DA55D3AD12E97
+E7630C315F72A03CAF22E0ACE3AAAFC1D496CF4E5ABC49C2DD5E264BE7EB2698
+AFF36089B5DD2C53DB1C1FCFBE1E89D41A95DDD278CEB29DC85FD1DB8B83CAB1
+EB37C531E9BB8466ED6B8B60258D3C355626CDA43A32834DC89DFB11E5FC6D68
+0F78CFA871113DB81A1690250A6F842ADA15734CB6DF7C6ACED6D8D586BC4E1A
+94EF3052FB0F8B9454390B882CBB6E135AF1F9C777AC362C2A758C3A98117120
+73C6E2FAFB580716D4B2889A4331CC658AAE996245685B973D9C184541385680
+AEC2956107DAB00230FB39BE98D3CA898D917E5F2088F26CBA4F8B5B115B6443
+8753331233B10852702FC26D9DD4C990C13CE4D0DCEA23D62A826A4B4FD16070
+5F3638C0A50A3373A33FCAA6F3644975AFD0560EE5F2D1CDF08820373468E4FE
+6679A229D6955CFDF7ACAA92A87E6D8571AD18CF59F84F88A674B2946FF20A28
+B9798EAA22442415EB46B9498DDC0F4BA6ADD347AB43E9293CAABEAE80127378
+129D5DC69F6DFFBDAFA5D65580239E8EDF6833D0DE6DF75F0FD090A83CE0974B
+AC947BABBD1B1C7194DDAEA37B0CAB477ABF9433FCE0243C8D308409427D1DCB
+8EE4FC36C7E5CEE104904B520B3F6E677A5B92F694BDBC2C799991667E0EC14C
+B95EAE7DE1854BF4542F05B4AF401CF67FC3E46EA5A0DC362F3CF177B1796DA6
+753AA803E724D1721DDD1BCB0C12CE0859E172D2A370C3697286F80D9E138AFD
+A0EE016805F847BD30D11D8B891E54C77AB51A7CABF76BB14B06153C7F811FE4
+93FC4B7CF161051A458EDF767DF94F487DB939A2740B4242BFEE234F75084DDE
+207E84533004B933D43C712F0C71DA4A00FFD6D721EBC93AFDC4200E3B8DE433
+3ED3E1DB799BAA27548ADC853AFF5D9D6BD92D644E3CF394789C99D9DC054A26
+7770AF5DC5BD6563929AE11BE341F036584DD573D3F43D9D975201EF77BEEF80
+D1EEDD1D4AD5D4D4DAF6D5B9D4C1736CB111D6FC74C236779C0ADA430323A825
+09EA8D0CB1772220AF28B93098BDB36913159208D1B2D7ED45808BF7B686419C
+5C0E3DAB5BC9830FDF3B494D624EE8068BF6F5212BD69EF466B9A213047BD105
+B848F056DC544A8CE66C546B1A4DCB4BA29CF0EB4DCD9C2452F22172AFF33B29
+E97E12D8F0D312B03BD9E5377BF0C81D884F1E79DB66E8144F106DFD2579AD26
+C693C5B68F3AC46BF0D6281032D4D4BAEB2243151AB1AC0BDA2ACDDD4D590C90
+F29B335DF8F57DC593DCC081FB56924028E3161AC4865B49D1B0F63F5EE866D9
+7A71171C09B09A44B0E32F03494D9EA63F3C89F5E772BE25A6557F119299E989
+99BA041694ED805AA4F3BBDF00D88171C9D43A9085A287A36A1F0F9386F2A98A
+96815CA51F06E1CDF20B757983C5FDF4003F5438232159F325C6335B734FD982
+1423BA77D0EFD044381AFBD0704E3DE95D23A70E2428E9AA355A9A8A25C6C74B
+48488C14DEC93A766E112D74C83576ED355F17A809E8D3F9C65C4E3E14EF484F
+4658DFB57597E2A4461D8044E95844391C1275D63F282B37888C842A5151937A
+45007547263D70195ACC018A373D498B88C5A028BC66ED96A343EEE74D61EEB3
+D9472B6A549CEB8699F4B35154A0E2ED22867E4F9E4A76311EB2C9F9078FBA81
+838EA49C2966BA64C165434DA3093206B70186BE80600B891D9979F730FDC794
+5DD6D8B2090CC67A634B719F441092A10C447A86ADB78DAE45823ECED5FCEADA
+ECA52E363D913D9EFC0ED98A5A1F823DDA3350EE27F09C14E4C7298CC0FB6200
+DEBC640C68C82D70AFB7A7BA668F1D7948686206884736CD03D9F6E6CF9702BF
+E3C932CEF3CE07FBBFCEC0476EA6E8D5D4C5C6450C8FB236B89BB82D51886240
+5BA7462F50A88F69228DCBDF26B7250E90B3DF8E94ACA1CADD9EFB5C73EF9DD5
+46052314D445CC92512BA231F79A09A2F0D91976B160B8C9BA055DA4AAC1300D
+491193EC66A6DE12BE01EEEDBC3A2291DA1F27AB76596A236B75E19FC5F1FB6A
+DA1AD835CA08B6CD03B97B4CA1BFCBDD2500BB09F1A1B0438E4A759370EFA318
+F062BA9F3D352572CE232E6FBADDAA5363807D0DC5320B807FE5485C8CB09B6B
+0BED9F5B1300FF370252DEBAC9DB25CE2EC494E8EEA45FC6604B3C104E81B287
+EDD49F3D7430EC9176A16B4FCEC5DF68DCC11ADF90BD5337E2E4B59BEFAC8298
+E5ED2C7FC5928635420FB1955251932713236DCE28012C86F63D12AF1DB634D0
+0B8CB8992B8723548177BD6822A808FF221A9E38B0DCCBC1F3430A9BAEDA89CD
+ACEBBDD8CCA5E17F1CC37E35A01E058BAAAB6BE7124314DA19962BADB74EE73D
+8FB13FF6AFB6FFF97926CA045B62B98BAA753AB0FC78B881D3FAFF9EE2FE918C
+8EDBEF87637F1530E3E13AC090FF81F4136E08D5F3734327E643CDF621278741
+A17AEBC56E21217888A6C8B5ED4269731910E7E25693CFBDD4EB4A32698F2447
+4C45D73E810B627D8719E4E34D8FF378F9B68BFB149AC67B3B1E55F20D097FC1
+AF74D46F5A3923C63DFEBFCA210F6B257F5FF3F2AC34CE41C15C9977634E473C
+2235295C05C3DF6B3009C7854BF11CC87471CBE085793AF9C5D05C5479B9E780
+14A5A6F3F6DDE5A18243DA15732CCF26ADE40C566DBC3C62B71D46DE87A12C6A
+647CAC923254E2E74AF882DBD5C9E108A9160393C5CD12566AF7C824EFEAC56E
+6F05B92C73A76824C5ED1735BCBAC61B98D509250C854CF1500C212F574D18D6
+4426B8510FE9785B814A70E75C9234D42483E736D0689D3561E8EE5650F33A36
+D50127589401D267BA6442E8616E2CDB1F6691D3FC4A2A377E5E154972E890DD
+60CB463E9EA9A6EA61087DF452FA5646F69BE879337EAA0F5DA4438FF0365627
+4E3B16851C2F08E976FDA27AF451CCEFED00376FC3D6E0C160F0BC19544DE289
+BECEEF9A067FD71D54DA3A4F73F06E2F522BA07551296214DDA47B1BBB1212E0
+1100ACB5F65FD30C655A3402C83058F8ECFE48FA60B6A3DC86C4996414130194
+6676EC7F37454023AB53E9D9EE60249ABF6953E76DCE3123DD268BBD492412BE
+65D7C3E5A5E483C381182A8F19B506F0AF6DCD55532B89852D1D96021B22E9DF
+D9D072BD7DD4450577E658B433A84F92752B260AFA2EC4A118747CBFE36AB7D7
+6D5DD96A119AA1BDD0FDCBC3AFDAE5FF72713EB46759A06CD09B5CFABCDAB0E9
+85599506AC07AA525978AB157496163AAB387F079EC9FA1F9E91B9C2FBCDC9EC
+7027D77016760539AC03F1C1DB242D28D6EE946C42DD2262D82ED48C3A839853
+BA977046F0EF373AFF884AC3112D2FB319421C3165DFA5710BFB9AB9595A10F4
+9D05704B9E22137CF27F4B2DA9CEF6D8801D5F792969B2E58FB539B8038DF440
+6DE20C0313A7BCD16F279290AD6859B0E657CC3041C7928CAE35B9D3A681F2A3
+2D40F8EDAF1127E754276556C95E1282514B6EB6E43FF4F0FAFF28C715E3F39A
+374415B62C1F5F8E31E006D6ABC736057910A3729AC60360CEE1B2C8D9F77336
+39CAC45329A372205FD551B9E9EA5082411207473D9D90E76136AA70180172E6
+AF6EF3EF6B38B1906B904BE9BD5251EF067738840C28877659B649C6C4CA328F
+1BEF8A9CEC2CB062702F58CC0B8D2D097FBC278F9FD894E10ACE1DEC4530CBF8
+E4E467B6DB9C596DF0C3D43E6AD70F30B733EEE692C2EBD68756D0C16E1F00B6
+AD011B5DA073A769B53C2DA2E7C9B7ADC6F551BF4DF4C39C66443692C3DC62CD
+B1E094013F364D04BE2FBFCD1C7B2836180E9022E0434421FFA4317A50096684
+CF0B8740EF680F27F4A84AAF2AA92C64883BAF57BDC60C6467A8D4E09E6316FF
+9BE73053045E5F3586DA3BD1298DC15D751913FB1E72EF80047F6B33591B97D3
+DFAD34EB224D64EF60F5B4ACC6EB42E1BE0CB2812FF2F3C264AD2E44F5EBA441
+670CA0A60E73176ACDC4E42E74F8F489C73481EB5D46A61FDA1C0FF9F8844DBD
+99CECAFE2A72833E4522981FA13713AAFAF8F121E60FAA6F379B2C8874CFF23B
+8FECE70654E5855E525A403700A96CF7F8111BF2B58386E29640D82F1DD86900
+E0E203F3ED554209CBDA2A61A5641D4B39D98C5C43D4575648D06BB82B6C4D4A
+F043EC61B17C208CE8B4F43A7BCBBE588A3D13A183D79A47404223037FCFA4F1
+DD237344E589F161BB9BBF3FAD2E28749350DB9A74C09E894BBCA85B82E704E2
+99788B24642A7D0F0FD96601CF1AE4819EBECAB89824A0DC1C03BA4B546ED36E
+DABC8D49CFAA53D2A9A5DD6B3431E364C99ED0323513476CDCEE49BC413E50BF
+51EB93563DC03B62F84C5F96ED713F288D109C79179AEC41424822772032035A
+40E84014F5BF40948F05E8562C99266B9E54AECEF94765BC79375C69A0385023
+A014B8705931C9A419C8F2B72C3F7054CD6487E75ED2E852BC19302D02C671FE
+3892C7AF2A90D6F29771AF31FA95258B6F3434228B377F5FB494E28B5F0393C8
+9DEA5E5726B81B7983D241BF7F78928EF8D8528C8F6DB7B307D720243DF00E84
+A37A7B2C720348F83ACEFFA78929F4CFB5CCCCB2A074C78B92C8573750B91386
+CECD4A1243D1B002B45B933534C0B4C51DDC50BE37BB6E42B8FFD25C8D5208E1
+E3019BFD5218EBE79578A072462F4B739AC8595498140CB8C6350C36E0E9313F
+4B6ADE13C28AB4BF001752E07976551121ABDF734B64061944C363CA1385BD23
+CD9BD8F1ED9F0A5C602752A62D0453AC97D649FEE6D0ED3BE5D5861FFD52EEAC
+673FD6B94354DAAA29F26C04F9CA7779F5021CE8A2CDD3F5477B7C100C82E82F
+AEC0BBEA7AEF0E819F0A3EDA5BBEBF135FBDDE4099314E3452D1C30067032966
+7BDB2B79A6C97B54B8BFE82A1E6D7F3FEEB6FAB05FF02E5AF8CEBFBE4C386C36
+3FEC86F64F3FFBE7DDD4DBC0EAF8376428CA16B43BF85D8CDF4190293C6BB60E
+204B16923A39DF1882292CA07F3948B71F52CB6AB3C22C7B7D95A916DF3D9E85
+1F36EC96FBB3ADF0E3DAC41C4B8D3728D1A1833CB9BD2A237F8AA6C16FDCB0B5
+C8DA4238991CD04707F21D787047BC103B79CC12A1298963E4930D8BB8856495
+4125E8230FB213F5B74ED46CFE8FC26805B45557788BDB4BC8256130FE4AAC20
+DAC0D2AD11C34A0355622780048DF0E1328F1F368D8D8B1A8028B073FC12A516
+A3EDD5C6519E7C6212D5A5444DE829060606063B1D44B2CF3E26D13AD8389202
+0C18FAA0106D974605D6CEC0DA3677C83D8DA7CE506E669C8EB9288CD0B2A22D
+A409DBBBAEF4E4FD5223321D9E9358AD5FCA552E4EFE452A683F6788D99F98DD
+87D84D5BC08350DA235BE00C67D41E00EBF1B8CBD3CE3D3F498D59065ED1D91F
+AABC730BD8824836E7080353F13F0A9C1519317CE42419C6C5E05FBFA39B6963
+A91BFD5359CF26AA5C9F044DAD9513D1FAE141973E9D31CD30AEC63650114C71
+A10587AB9FB4FE5DF62093536D23CC813044827A4D3FD3E622A72FF8D1AF2046
+68A0324D8094D0E1080731408352151D2B85360B4135FEA36C5B167A9ADA52DD
+F684FFE0DAC6EF327700164FFAF9DF83C76F4892F601762154422387AF4FBD1B
+838D869A68395A41CE1DFCBD4E83F7208D5B590548C0F01F2EA4D95030841955
+1A62F22DB0CD561FFD1F53362016840676DE91200408ED31098EBE8D7B853FCF
+64319D6ACDF11FEFC4B1E6636E6611AD9D0D7F29D28302C632763C6167154B68
+18F9C8C8AF2D0213FAA7544536AADE63B8BEBCB67A4E5B3FA05102C64E688117
+09088897DD1A39FB0D8E294BB18B8C93C727A79D03642C3568842756381E2964
+F3E37BE585902071595E398C5819870777BC27D9894876AB7C579BD498738948
+FF2ADB78FCA6A17178BD43CEE8BE835219782F6BB9CB286E5F1A4C92EE4E7C9F
+BBC0D019D8A364F19B22CEA8B9DA94CD93242224D197115597C1EDFCAABE8E6B
+E1F21871EB6F9B27604CB2A9EE8B432F4A42B1F76D4E96050F69D55BDB0DBBD3
+6BC189EC7B4B42381C09C7DDF8A19E7D6C42788F1ABD37169DED9C19505DE376
+44B31396EF2842AB0A79558394F52A53EBC331733CF35047ED8A878914605274
+014DB6A1BCAACB0AA972FC0619CA9BB7EDDFF3A4760004D1BBBF3815C4EB73CF
+8CE556DF5FACF5313DD81E087F955615CCB979B81F65DC50CFCE123F680075F8
+2A85AA9187ED4BBC7B155110B044DF47C7D3E62E9B2F98C1F401F4C84A87E428
+FE8F3B2B0EA1B923DF162086C8A9B4413B65B6E1992C2DB8480C6ED3A1B45094
+8EA4FDE77BB7C3C898D707553AA905CC7110B751BEC1B472C0C4D43507FB5167
+7F5CC6816A30CA19EB93CE38AB0ACA267435BA42CC36C9332276C553D76FE98C
+FB7DFA73060A4D8DF6A52FD06DC7334D0709D952D1603C4B2DA1867EF3923BD1
+7EBF32A34C882CBE3008199D8691414D936150E9E029795B256C4175F531E695
+8D2CD5C902763A8D183C771F05D6F050DC19ABEF4DEE8F8BF5083F2C57ECD099
+D01B1358982930108BE133D189D048CE7FDF493A31D1664D196F80914786030F
+A1E931F0E03C7AA2B65DAA70E12D44AB2FB8827BF2115FA2B13B6BB4039C062F
+0A20B909F8D80A714FA9764D1F4A3305C03A5244321EC5F6710D24E110AA3DC2
+2BC3719D49D51D72C763583825465DF2474B6EA83306A752F86D5A8B2F2ABC24
+87336CC47C75E9C935FF9262FE07D6C8FDEC44BE335A8A721214067F7A9B9EC8
+9ADF3D3FBCA5DEB75A88034C08A744358E23BB2B13AC5E08162502612A7FF65A
+63CF2A927E5FFAE1BB4FD850B4B1AD6E3DD0897086F334397FC9590D5F00A96D
+4DA676491CE72D93AFD1C8E2638DD22FCF1D2FE941D4B90E422643B6B25AC077
+95D535CDCD52E347BA420C61817F7594E23991D86051183DBFE3638AFBD985CC
+95A4402729EE6EDA014A03483C1FDF79F203FD45F48E48386EFA6D2C148F2B58
+2B09EC3B66AE50B446CF56C044DA4E14FCE5046BD8616268644A19E77C87BFE6
+FE5009FD926E6B30F8489E31FB6877A5998721B60D6AD01C5F1330EBCD68B779
+ABB9FDA5ECA39DB2A4EFC056AC41DEC22D49A845F9112AC3E72D287DBEE52E70
+E1A253C32CA257EE66CA8ABEB47E0C4A117BBD21E6BFF58A5C5AEC9DA23FC8E3
+3992E737EAC7E0E8C13A330C140E5EE155D9CFC27FD14EE5C39EB7AB3B0C11BD
+0DB6CC537290C23F0D7933E7A59BBEFBA6291AEBAEF2796065C31104B321A310
+5E93F34947E720C637D32E246C0E7B0F97DA0729AED50E0500DF227C65CA8E43
+3BA09A3ABA404F17DAD1B21905AF40C68881E5FD9EB1D6A61BF2C27D01D765E3
+6A9DF9048BA2F16B922457BE7B3FEBE16AC2B096D16C87F6962AB93DD730C70F
+F6EF6CA2A8536BE570BE9F222E2E9CD6DC581ABBAC1A4BBAF6997FC8D739A78E
+948C553D3E7F013517DD9D0C56363DCE3F63CF4E24615F3BA51D7D1180D06223
+E74FEDB6811C9F104D00361A29D46EC3BF5DF43239DD5ED1D013E494FAB76E6E
+ED4FDFB7230F456239AB247712881699F072D3EFEC0519C635F35F4198A348B9
+5423BB1C2680AD161DAC4FE1ECD24EA12AAB4CBBEC60C483423F877F54AF89E0
+E9F2A5BC33E90B94866D31F2CE3C62206DD43D0BF93D7B239087C366B67741D2
+D4A3E47A5C1302D15C30AAFB706B355B20ACF2CB4ECDFA53D580D28245284337
+AFD2B25C17D631453D72222D5A68A4EFE0AB2F21ED784B96A739528245BDA944
+63
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMR7
+%!PS-AdobeFont-1.0: CMR7 003.002
+%%Title: CMR7
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR7.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR7 known{/CMR7 findfont dup/UniqueID known{dup
+/UniqueID get 5000790 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR7 def
+/FontBBox {-27 -250 1122 750 }readonly def
+/UniqueID 5000790 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR7.) readonly def
+/FullName (CMR7) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 65 /A put
+dup 66 /B put
+dup 68 /D put
+dup 71 /G put
+dup 74 /J put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S 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 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 119 /w put
+dup 120 /x put
+dup 121 /y put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB981ABA2ACC9A23A5
+3E152596AF52983541F86D859FC064A0E3D5FC6647C3CAB83AD4F31DDA35019C
+CDB9E3DD3FEBD4C2B36BA3CF6E6C7DA85E25D8A31A9BAD39BDF31FD0D1790707
+9DE6A078E8A409D8295F642DF492AC4F86AC84383B0F4C6BAA7C22AD5A898A71
+D6CB34D2CD12266C486B75E75A69C14819DD9BB8159088E04D4717E576B8482D
+BDA52110AC8B8A80E4E9D58F470EEBD3CF44A1E1EE8DA318FFF3611B02534FC9
+F4018C7C57E80570D2F634D98BE5D5EC6D95051157F0EA94A3D12BE0B4B79939
+F82F8D73136D3337C44E314B0B16CB030D9A12E01FB667105F334C3EE965E5A3
+D410D2F1531547A4497C355AEEB295CD3C5334BEE5232992960B757594B89F3E
+52095042DBE6B4DA3C3AD50CA95EA9EBADA10630B500CF1FCCA7D60306743681
+7E428D33B7F7C40B425CD58E4CD8AB474BCE6A307BC6C6EBC15A8A96E0E2977E
+A33389154536F5C5D8CF036D07F24094E779E5ACBE5502C92892F10F4C6DB627
+C7EC4C7BF20B39418A8A85D7FD9B0EAAFD871DDD41F93BDE5FE619AFB8711824
+DE890E62C1969A6FE28DD3578AF43D58A728FAFF0B9FAA640962C8F35A26F76C
+67F3548D6DB54A25CEB368B47F97EA2B0C4D7C0E7894A4F0C823C6C1922CF9DC
+10E05600556F1C7C9AFB33A2DB6F8730F70D6BF94B1FB0887451F2FFEEF3584F
+DFADCFA9A2D4846B8F0E51620E1327D994CDF973B837D10C90FF76DE22B47CD5
+EE3183898D156861AB4DFAD34A1E3FA260B8164E6680BF58413A553E88F6100B
+C4F4E8E972C81A5F88A7DBCDC308B4C3581BCDE13877B976B1F84330839FE5CF
+C78551620EB803DF94A5C921F8EE24F7EF8FC4C3E1653514212631F54F90E3DC
+E9EAF96E998F340C4F729ECF7AB430FDB7C0BE3DF2C0D23015820E28B743CAD7
+7F0AE95413C3EEABBC69E852F53EE1DC260D7F1E712BECEF2F18437DB23D8E74
+2902AAFBC733AC5BAA452DD6F3671859AD836C8564E99CDC4183D8495AFD99D6
+1F0D65B6588CE7546717911E25BDCA6C2649E3A7466A3E2DA7C7994A30AB4449
+672EFD00632EFA8629C1AFB7D53D801028F77C864869FE636213A69173003EA6
+BE1ABA95EB07B13D1594BEFCC95ECB0A9CFA9892EE0677D6B6C250855762B7A7
+8E4E022640F93169DFA0303A0D5E73BF3E0F4D4AAD10FD7E4EB20532BA30371F
+E9F480F9513432946F9828AFB5D4AEAFA5829B2CB544E5EB634C4537EF7DF08A
+A1CFD94A52DCF0E7CE4C5EFFB01E6D50558B75DB4C8D5512B06080F27BE62E01
+2EEA6A0357441401458C842D3DD4C35B8F561D816B336216CE0C14BF77648AF5
+E33912CF95872A1E1AB9A18980A0B29A881D13397C15E1CBA5D3E0B27943EBE2
+F3003D15EB446BCFC1C231832475D5B7AA19E4CFDE119D6CD62D053C6D29C333
+5F729791D17B3F7108074EEF4D1BD101CB33E01004532CB0D716D2E54D169C6E
+80163E70C0E9081F31A1ECBAE079D2A518B790B0CB2CD03DFD034A0F4788E800
+B0CD2DC1FAFDD487C2F381EBAB2A2F3F3AF82021B211DC9CD2FBA6A1BB3D4AEA
+4C7F3D9A5C21DFF284CCB827D205A69638E98D5DD8E36AFC1A4481B5CB2A2E8F
+D6C838DA6F81990F5ED928DC7457501B5C979FF4CD20A830896A460C5DB13D56
+A3B2B5D9B292374A9BF392894DD99FCD6A1E655AB395E839F074D1596488700C
+4E2891C8AEEF66568E82A8B826F9A28FF84D4D9BDA21F638EAF96880B4EBE0D8
+081982F34831A03BEE81FC177700C2360D2A48915EC40D5FE85B400E175D5AF1
+067FA0097904FB647757BB44B4042D30D1557BD0F7922D731142FD682139CEB7
+58CA4C8C240A0B86B1888CACC507E24E04020BF1882BD9B4CAECFA97DB24D7F5
+AD64C69454027F198BA35881B94EE9159A2D73E450C3BDAED66B886D6DEBC84B
+653E165176228F88993F12A170775A8D7038BDF2FE8DC1F7B98BDC02D1E6686E
+9B834F6C0AD90780B17DFE25F0A4E470CBA84E73F2D22BEE09A040F14CFA2C14
+0FDA5A5149B5FAFFE49F55EEFC43831BC43A8326FEE9C7F469C0FC3B000884FA
+41DA7318EB57262CB96FC4EC7F16CA07FE1C3BE8C2DBC8A8135953D6DDF20BDF
+75A2B6D26074FCE752BD32FB9F5CA797775E8DB9BB9786B469A3CD65A0D9DDDA
+C2A166E454A94860EEF5B5C12172DDFC576A03F6E6F8A735FF21A3E9CCB4CAA1
+3064893487697986A42CB5888B2B0A79FA3C74E8187BDDF7BEAB884B70B8D4AA
+AC6615745AEB906E08BF831CFDE222F58D02B428D55E9D5A3CDE74E42D8A2CB7
+E1A3A9439B678AD438793ABBEB72B21C58981DAF3EDCE4BB93D95F4A1E943BBC
+B3A012DE92FED4F232A3A7D60CE60B605151F9C7C18A5C653E5D6D15E5B49A63
+73E7A339504D0ACC74B8B116EA88C3EBA2CC631AAB29F761E5F062966AD2FD28
+7FFE52FA8A115DBE23E471094FFB3CBAFBDF11B7E9058313F2D069B2CE98A962
+64645738F02A31E2F2AC11628724034ADBCEE012721EBF0A567893411F950410
+B20754A7510D041FFA6144AC9CC46D846B82581F20BBD001D34D9764010824BE
+61C30D05E5C5D100A24F1917F01799CF5BC4E50FCECFEA732CB50196825F0E08
+8A1EC868C6D4357857EE2957E081A0E4372E31A8ABEF23C3F2EA0FEE57DE4D08
+61C570175C41AA0C7A3A579ADF593F18B4AE3782D2552E4E0759C32E059EE741
+2D8191E381731769F6648B3581CAF11DAE46471896666F18F02918B0860BDA3C
+BD5DE777672447C23C62ACFC2611ED5239D6A266FDA6031EBC5A530C1A2FF7A6
+B4380B9A4C877267854AD1F1677CB5433F28894ADF93D39EAB94541A8D232E08
+22D082D0951A60F62B87DC028714EC74133A4D65F7D0D1296C0E189C4A42AA98
+28E8AE7ECBB9FC8DFABCC6EEB1E9FB06227F90808EF31331CCC5D4C9A6182181
+047902DC9FD0444FB94B60FC74F3B677758088CE6A159D940C5CF682335E756A
+8BACF06AD7225D49B0002392C889B0FE2C71311D2596F4903D12FA20BA2FFE25
+A0804B4BC282929BE31E0F46B34532CB5795A65218CFAE21F390792DA67775C7
+B91A2BF4C16DE4F6551DAE3A5827F616BE9040EE6B1008DA2F99A01EF66D697A
+6CD1A44E0A15D1F39EA8025E886A68A1E9C334327C7703EE721E497CA924AC90
+7723106D913C5ED4BA4FC743CEA8D0F5172526107DA65775C0B1B77179D336C2
+9B09B608D80B1A1E87CA1A84A833A00D980D919BFF56F6390E9D5B45E9935CF5
+E69D003564462F750F7DCE02DC23CC215A0696B74D8BD3156A392A94F557655E
+00BFAA035647568ED66157FACC585E411F7F428569C147DC43F6E4FDE693D0F3
+9917BEFEDF61FB980B85515FF6424824E2D995B05CA1E5D3E8BD8D3281DB7CE4
+E54923E84058FFC0A8A2C491327D0F87CE4C352B724167CEE224DABA3B95757E
+4A419594BE4F92E78BA6D35D4C93D31ECC3134B24A45DC32445725BB044F09A3
+AA8C31EFC0A2944ACE2F2CE054CF24DB350FB3C71115518C24BDC0F7E54250AF
+9D3378D38480E1CB9029F31570C619A28F065CA4FED5665EDB96712ABEB33B9B
+4232C00C1B0215F08D53F7E430887035AC25BEAF06942FD1B6C442253C887AB7
+D694C1A6115C8990B4CAF1E81DD1FDDD6B03C00055BE956BE7FD8A4E1049AE69
+EDA8593CBA8C4A41E046C689FBBF9F1B64E5856A7FB1C61EC815A56DE2A8ED33
+41F370B8203D4E5B19C63AE9E6E0D26F4F3814B5AF48AD30EC9B8402C941FDD9
+722FCAFC638FBB835F83DC77F93D367266FA7DFFFCB567EF82B1695AB4D94D09
+B18AC041811027229DF431F5CB2BBF6ACCE9D500C8F075A74590641C1A607C56
+D2B8624797BCD9C91C3177818691FBB4744EDB6056464A0B95B8D63F7C22309B
+82D6126E2057BCC9FE5566D96B7A9B201A09B0D3252A5494C8CA2C8BA8A13C29
+37EF2A882D61DA708C279F663D88A8E2999A0F3B6F98C49901A7631BF7708B67
+54D0B4C52BF4BE0DA0439E6763A7C9D639AD4092E77B13D3510DAE1475C978AC
+796F9B2AAD3BFF35C5A3E19B5E2BF704B3BBDF68CE48BA4FA2496D60E58888EA
+28AE12D00E9F0816FAC190590A865BB58569A91BF0345D01230ABA361442006D
+BA2C90EC2036BBAB79EBAFC3F217DBD5854C519235F9627A1C3C71D21ED38AEF
+0BB40F3B86BB9F09A3F309473D8757AB7E638DC1C59A7F9BCD49DE4107A2E54F
+422767FB94048987847205584309397F554744690ACFFDF5902FE5DB355930B8
+71863217830DD7A563B0B3A4025ACE75B0E777B4414B62A13B50C54E0E6D47E9
+D43BF769B9411B74E1069BF71BA873B4B8973EC9BA492A5DEA58D267872BB246
+10AA67B143D0E2223FFB4991E583E629413CC894C3FA4869B72D19CE1A0CEC8C
+0FF5E5A3EC1FCB7D3C4289813F0D249A11B55104BD60B2A89BEF44CC77CCDA9A
+065B8B83B4F4253AA1D535290DCFAA4773452D110D2B3370F9E2FE5432B54A9E
+644EB3BA9BFF62347F376839024CD5EF3C5DFD30F412DD5474B7933E6A1AB63B
+4B12F2417C72D0543C26A263AEA53E5BAEBD67E23553A72E949DEC556BEB5D09
+C4D7A89B14FE4EC68D0E3E9D65A64B285E53590F418EDA8175113CA375A29930
+DDCF4C71ABB26CEB800C2C2B253AC1F53651C88A56ABE5A74F3B54CB4FFDDB92
+60AD7272BA25EC2F6FB759AA6E1E7964FB55AD09F4EB25DE45FD01833947BD05
+6266AA8ABB7DD792941C7A070FCF3A4636FBF8921C70298D42FE92F079DBA2AD
+6149D9CF9EF7264DE6DFCD4429949B15EA90B596340713BD61926DDB2BB23BE8
+F9DE38A31620A817420A245946E551463960A8C5C7295E3B3D6A59BCDF5E472A
+40B7A2CDDAA43CD8AAFC411D037142579D11054A903E102DF0D0C7B5BB854DBA
+F3F086AF991F7F5D5C730F8F9AF213F25786F3EC0E54530FF912F4876FDE16B6
+A07D0DC4FC46EC6363BCB68B83ACC448B801EC43FDD2F8BE0E93D809FF81E38E
+176AE17C67C85FEA58EC95435434C49A950AA955D8B20989C550AB1F1C31B7FF
+99422E1F48FB7D6F327C6DBC4695A03903DB275B94CB39386E46579271870A25
+21823E75C377E9D5B46655E8CD8F986372CF8BA846423E26582315A9D19E0BF5
+305C32B2A0EAC3ECB275B1D8BE11A37ADF524944219D94EA2C5DBDA768828B6D
+775DA8CDB09E0570E4ADDF462EFD8D3FA3F86B1DEECDFFB699AF6507257C1879
+16FC615868C2D51F03CD57BA38D42995D9164B257441210084DC409B6EE4C119
+0B2E17B0A8D5326DD0010E4A325D5F77BF935693BC90A00A28C7B5F74817DA39
+F47A41E32F4F92AA04D30D810F7B1484EB53AD8CFC8CE8928B570314E0F713F8
+AF127227190F9C16BB73D2A217FF801C391A29095DA5E4974D137A0CAA7DE702
+E20DD4755B1D78739756A5E7EC3542B96AD6844199FFA2F5F2E9C64E2DA4FB2A
+ED79869F745C59D235438251BC2E6D26112AAED20E06021D1AB896EE1F1DD2EB
+437FBD4A25E42245C5A647493FCC9922E6DD7AF57D5D482921D1CBD6F0F02949
+C27777144751C1E72F4EE2BC343D4AE7A8A8758123B54FB1A026144C643651EF
+0907A376945E19A8FC7F98A034832A5820A481B0823F980F59623E0511593FEA
+BDE6EFBCC0383242CBD4954027B075B21F10472059A480D6E5ED01C3B07461CE
+9810251A5C5643EC7403130C2246E8616CEA25EAC7A0076731FEA8CC43BCE3BE
+933FCE61067F5FD402E67E2B9DAD954AA77C5BC86BC5E4BCE2ED676D8D8EC7D0
+ABC5C86D82180B9D5D7451C71B5149B6B67883578DE9909317928C0A92E3205E
+F23015400A1763A6FBF67FDE3318AD2696685A1832FC31CF38589EBC7CA1C818
+60D2B2211E04EFCCEA88D9A9082E82951EEB123924A267CB03C48889032F2892
+4227E217FA28F87E01CBF27BF1EA60641A4238258CB7AA355908FE36D90F5CAD
+FE992D03A33E47CA9AEBEFDA57793F39DC6A9E85D5B289F6B862B35DBCF82E43
+5CD6A862F6FFAC36478C384C3BDB0148CB1FEDF55969C776E77917635B5A65EB
+F2AD351D21CD3822D43289FE8EB0FED58182997097C7E9F4373553AE1CA92083
+EDE3BBE6C3BC7009D15AB5FEC6A59E9FD1BCC7B2099CA15FEF083B9CBF7B890E
+CDDDE6BA0AFF306C76500C945DC91BD533FF9A585CEEDEF79238C54E6168001E
+26FEB29E523EE501BFA4F60B782B1499B07084C35A2434B4D29D3D8E2C8F945F
+A9922443B68D07DF7EAA1F4CDEFFC438B597D8943E231B5216808A85F30EDC81
+9DF5DD22F54A45335B4C2203887475F39D247F0E7347BACFEAF220ED82F9263A
+6488E73C1910023E505FDEB143006C1A351D441AC57F9D52D2C6D63D78C75605
+999885676BBBAD56074298E0BFDACBA1830BA58E87F436CC670EE8EB1870154D
+72DDBBF3794F8CAAA3F1E11DE29752DD99EAC695838A19BB67A1FA3829B6E0BC
+5301610A0351AAA749F456AE31ADD87D6ABADCDD1FB3CE81C3713F48780DF407
+530CB284B2AC709F52EE7AD647DEF9FA4D2A867CCEF728F3D40CF34C28D21527
+10160B3DAFB5FE16AFC9D36C6EC4021FC189005862082BEA60AC72B63AD27D72
+FAF3C2D89DA2648FC4C65104A069212D87144E8533CD86A6D73DC7CD9DBA25CE
+7DA53B000266F3871B24663C77723703315C5E4A89DFCDBAB384AE7EB2F455AE
+AB191FED406F7F6EC9E5B8276EF5C4CBA041AC7E8BCEC7CAE840154BDCA3232F
+15711ABD1E867A434E9787CA0A6D1F197597DA27ED2402CB2D84ED082E8D3A39
+81E6EB270DCA4E7A90E2BEBD3CBB3A2BE3CAB926192D7292CC16845B6399A543
+BCFD224BB52F21352732DB5154FA3442733066CDC3E186D8AA97CD801DFBE43A
+116C86889BE198DA88CA978B8C40ACB67E8F7BA499DE68A6FF0DC72C3D00BA1A
+B378B39610F15CA026F95ED8155CE3FFFFA2E2FEB352DBE14CEE1669F2387B70
+55B91185FBBED764266215D518716EDA3DFC9E5DB6B148A553E75AE5E38E1CFC
+6EF47B314D54CF24BC13856F4F7C976BB91D143DE32FF49BFFC87E17885A1893
+BA1B8E441B08EFC04F7D103C1FFBB665194B3D0920473740C55FB1C50EBCF717
+A2359B687FCEAD65616EE89A68F8D91AFACAA0B238EE4AF0279AF5BE5294C3DE
+A7E1F5E6248C0210E7D40683F04B12A933C746ECB517CF94BBCC6E4CF49AC715
+D8005AFECBDFB7A6B417DB8A28F8E9EAF39CEC1CA64DF37A5E66A76C26F721F8
+A63B003A040A62F87DCF61B298F960D510BEFA453F118E59E7DE8CA3DD002EF0
+127EAF733D5C61B5132348D280F84D159809CC71A3C6F7373BBFD8D6EF715D34
+0016DEFF14AA5F960BF1BB9AC304A1823722843547BB4CA5EA4C41C6C2701C8F
+7BDC810443F9DF34BA469A3260009B799871BAF8523C8763544DCD0B382D44C5
+F75046AFF85F0B5A3188C2EE786CEEE5496A5AF4BCB0B429CAFC403FB983EFE3
+61FD9F52ADFC38E07A0FD7BACBA530D2E4DAB2592AA9564843E7E2305047F060
+C5FE4243FA8FDF1B5D4F61ACA7850A604FBC6D6970959752695C90F78961B4E2
+C8CFA41082B1A37405AABCEE5BA3DC2B9EA76F486117B84728EC6D8AE6379CCB
+402C2AA89078EC992C00D53151E9D82C65643F549A572A20F05107A41BE5AC57
+833F7BBF8C4C5850C1FBDB908D03DD674C4D0ADCFE9C9883304785B4B8792B9F
+7325ED107734B276D7DF57991AE7B94FF5664A8B29A0FABAC6434AE218DACCEA
+D910D8BE7A6B05F0751F9A6B49626C86CB82D9461E82A63A9A4DBB20FE472415
+598E1470196F65230F7B80B54EBAE48FC308F9C0A6D60143CC3D5576671AC712
+D8F88D6471E5408C44554E768203021BD7214C2234AD81C620ED2A12432CB1F9
+F7CC85EE25AF847626399CAA221DC09190CF963D89E1665C5E2B6F92BB55E3CC
+795F201D9279A9D6B2C5E58B87A9C9E3FD107CE0C06AE18F8C86EE27886F4E50
+6E74E0EF1A8B1E75186521796C67111D5B173BB16A5E7330400D99CF9C28211E
+FDC800BC1C72B3992892B69995418C5FADEC75B678EB54946857D2B73C430F8B
+4453028981B19EA757B0C31F987BFC0BC58D600D8479F876CE7329159338E264
+CD967AB1A90D6B291582A50DCA2EBEE2FB93E5745E9447436C02352AD9526D65
+4D4DE384986A9F8ED388616804CD55212CFF36FA417047B50DA5004F0F96FB66
+4CD3B629D3E432A512A5FA3E277A623CAF1BD955AE49759181C384F15755D7A7
+B9FFA0E6E56017BC9BADF56D96803FEB8AB8FF736ABB902D24DC33942CF1CFD7
+5C86E2459EEA01E09753820DEE67143E5DA718A96E78E95F2D641E97C2046FBB
+A597958F2592E03125EB87DE90AEB91788C69AE68FB74F619058604A03CAD4D2
+05B7DF0CF26B197DF8B7F920C2C522094F066B8BD6E376E34253616C6D646C75
+992E1D9BF781A8896093D10A0F4332E8682C25C7746A7BDF9B391587B750F8C8
+1C40EAA9F01DAB6389150F7E163FCCC43E893FD6943D0EAFE9516AF77EA4BF02
+589B476E19FE361FE6870EF221111E04688B3738359B2328C677B547BF90AAEF
+EC9C6992055CB8E1E85514220D44CB3AA27CE82A26118AAF91B2537A63C08B50
+85EA399F24FC229392BCC488A6564E3D33A0B38F6AA3AC0ACF343393213DA905
+D7EB3AF4B12FAC6A5BDF523A4C5278F3B8EC20DD03E06E1C88D21181918D3BBF
+31C5021F8662BCC3A79F551D8A2D968B3B293D6829EECA6331F745DDC3EBCCEB
+D481C0EE29F26F5DD38A154170DF9F88EFE69CB416CB877ACE6E24A18BF3060F
+DAF88F1A44102DB04EB64950F21BD4925E20E1F9A590854D1281775B7496766F
+51EE65ADD415463F9DF56DC7FA41F0B4A41C86FE75F861AB2B180B7DF7BEFB32
+65C5ABCB6A26B3564EC99FF35D0F14906A341022FF2636AE7D1EAB6C0DFE596C
+02B4E69CECD61D93762967F71B4B22F252678E0EFE6C26F5142BF009DA811483
+90947E86BA77005B554A969C3A9E57704CCC461A9E9FAB672993214F5EA3F0DD
+6EF77D7A2CFD101B1CE615DC1480BC756D110A8ACA2369797B9A6CD1B65F1DF5
+FC989897A0858007E9E8E4915C05A97C9ABC5A52C0B5FF6E067225D7766B6DCE
+4561C80D104AA1629D6BC7F0B9ECCBB1EAE17AF059F51BB4C0340C7B7CF387C5
+20B90941C81C0A119AFDB2ADAD221FC1503C1AAF59C9419831D92330768FD49A
+665A0BCA040158B21C8FBFA6BA0287BC1B4E81FDF97AB0317CB3663600909DD7
+38F8DE02BB8A47E4DA2E95D808DF9E00BD81196FE2557E84759702C983A64CC7
+8AA5C4BA1DC8DE80762D297CCA604ED82280BAFF196AAEEF94E904A9EA7A7E29
+BB8624583C10ECAEA329676BCED76000EA04CA1DE10985F18B2E4788D77CA957
+AEB8C58E6246A137C6BC4653C4973DAE63EAA24489388515D06D1D51E741D895
+F9C6A54329B1866F75A462FCC1065C15BC715BCCA1C84098AB452F2E83CA3872
+E151AE6FF78D1BD4FBC62E51BDB6DC5A433229A0686B99E8F3846A0579F85689
+CEFDE559B16D8EBB79C8D20FAC90C6FD4DC53A7B7FA9E2CF7C92DB769AEE76B2
+BD4CC20CD42575104EE1FA6A3F95FFF43A5C4F23F7E86B690901CD13DFDB157B
+6AACC0E9DA12D854BF28B4CE42B7995C4400462244A8F5C53C4E5C868F32726C
+CD03D90A9C618ABA248CECA7F2D34171747E2A01FF43D7B95BFE7364596F7A35
+22CC94179DE8B5352F3476BA0E2D488DB58019E165B381F6981446E5C18FEB50
+6825C1D42A08DA8440D9F20044717083F84960ED6C48371DF56E33355E2E60AB
+D3A9FBDD1656769B9AF88D13D4783C5D54F85DD21D68EC87E2B922DDB386AE9C
+4F392FA86BED66B85C90BA25FF27CE37687A55850CC4E9F29A24330D3A7685B4
+36D4AF185BD7A62B82DAE0BC4E33E20A6FC5D24AD14FC6E7B59EFD3DB16B0B64
+E4AB3B1DAEA4F3F52F9B7415791CFC39522A6AA1F702F826CC438C188680824B
+9D3F443B69AC739DE6DB1416E48F023DB3F75BB3C330297BC82903B078A76F7F
+FBB8CE1348D537A4E62C3C13FD66FE6AB9CD528B994AC67A32076FA9AFAF6ED7
+E02CE7FBE39B43C8F967FA62EB480B6A248FFB0904CDA3E4A715D22B9A191426
+2D92504213AB7F3CA8957FDEA3C0B333C33F660BF9A0E600DA95B8B7EF42216D
+EDF8C46232E6078F69FD05D2F05ECCE0C41648BB873157FF9365167B92C5B02D
+5BCBAE8A072ED198B75001C40F6A3FFF3474D634D338835B3B74777F34166F6C
+24E0D0104449BE54EEBE6640CC5ABE956F6495BC5CC18EA155470E8F99A1DE86
+E30189CA527138E454CAD4B222028F27768EFC0B699A8A7E3D9DEA10957B3F76
+6EE106C676DE7CB1ADC74C3B455B3C3E0F7DCBFA38F65FF000BACC1DD062E110
+2A5411BBAD94AAB3643547DB709A5A3181F85BEFC0F0F81B9BCAD0DC1E14A7C9
+CAFB49EE08D72EE6DA29D24CAEC74F8D26979149583EB32BB5C045E0E6D983B0
+D15DA90578918DA11F587B8102EC1725641FA323DB7B042AA7772F51C9CD8BB5
+3E7452BB6E73C440D0B7907CFB075584AD11CCCE6D24741C71165918A5B82FA4
+1ED46D3C8B4F2988692936D04905E7686DF03F80B2F61D96B51988841F50DF6B
+C519A07703D1A1C3C70A20269686FF5111CE9913B6BD2D65629A07BCC562A4E8
+3A4656AB5463417A5F2A3B07B212E29F77781469AF4537CA5D690A655D5DA181
+6445F97B1F16A08250185C6D5103BBB132E90ABBAE2CB37B82DFDA683854D5F2
+D3292783E83936B36B332A4393000533D924CBA16D3EE3B62C70759EC05FD987
+0C97076ECCD62C61CD2F5F2081A71ADA302C1D3F46A7DAB70834E98A1442B179
+415794662802DA0AFF54916C2D4870F39D0E703E880D1AFD4E2610E2501BBA80
+58109A9E707A282434D1AD221C52B1BFFC8F3DCF0B32936075EFAC864CC08DB8
+A90C9C68361DB7FD59B97050D6EE96FB83DB39297A5857AD41B1B7B32E3B440D
+EBD668BD8A412295D325215271A544FFF91736D25392C2000B379B3093252DC4
+48239915EB77272C3F95B43665CB97DD293171F50ABE506E8488FA7105D8A47B
+83435473CD6EBAF2292A5725169D48DF08E96F5FC3EBAD5848F9E6AEF5EF20D7
+8DE44C6C01CC1B4CB16A94024BBE96DF9FFC3E1E4DF8435E64AE6FD246F83EE2
+0298F1D7C1390FE13B974ADDE27CD95818DB908B8F049C7CA096069A751D1ADC
+43C74BEAFB51B7823BEB325E10AC74CD5A907045CFF330356DA96A2C5642145C
+0DC902847A1C9D581A404E7602EBE4D92A4E7C0CC8FD0504729E78C37BC2102D
+16B2E4990BBC7B163729B18F533E24D420F8F29598C1B48BD362E49209D5FEE1
+6159864E0DE73B45B61386751408764D6716FD78E1696BC3458AC12275D4D065
+1E075EC213ADE4FC53761B52E0B53BB8D62848FDB790021CCF04CB8A57964D5D
+58CCEE948B805403A784DE5F63E4F7A2909A9E5B26F25B00F335F20CEE97857F
+5860D68E602B8AECBA14EEC24BB26DEF1183203685A0371E468D10ECDE079AB8
+464EE27DA225D3EE008BD55C8D042B4815945F34E7C5597D536D80B7958E7B97
+BB575430065E1BD8825AFEF88369EE338DA180866C8F100B4806FC9794855879
+D28AE203223A92A941A83028F0873D9B6C28A58241841596B590C547455ED5D1
+63603A6E637A4FE5DE7FC3876B869794839B9EB98E20D4212ABAA68E43179A94
+6A35CF5AD147B5148F20045F5BF11946C38E76B4DF741BAE8663E57C030D7D21
+3DB928111BE66557F19C3BE66F6F65A1AAB66D085EC5767F057D28D540BD6FEA
+6CF387D5A22DF4977ACBB68B31FC401C6EF60E1AA46926AD3CD20C4C0602F15A
+4367D6CF5DC457C43218C54A82071C8901ECF549B74125A9A11CB5A8D3D5C980
+24FA0D91E3CB11913D36165F25878A8E1894DFA510EE186664FF08B5BADA9E7F
+8153850AAFA5D945ABD6415DE29194C72AE4B71D40734B206C447AF549A6404A
+47A9B79CFC8637CFA69E5CB0F52766EB039D867D2CD3B7CD1F723E50FB21D671
+0A82BCAC35481AD72268CE45458EEED3454F9C1A1C82A664CC14417285FAB805
+8B9E83AA241C62F98E1CEB505189F9E8AA35F3DAB3B019BC35455DFCE8EF5A94
+FD6C54946DE4BE0D747FB6124009145BB5D2C8336745F39C66E2ABFCD7A83724
+1C1B1D501CBAC3D460E9C75052F660AE44E9DD1061AD361535F4EEAD65741B12
+9FCEC9B52A03CD06AD16E49B27DB27F7C3C1DB323926DCE761EBD7F4DCAA3DFA
+5DE34AF388FF76100053EB35B9764EC8B7CF68176A7181B5FE6F80910D33877A
+78F9D258F97FB5A604FD7101EAEE89A2865731C189D8AAB00862744A8052FB1B
+55C957EA1FAFF8AC09376CDA3622D1E67F65D05F11A0F3912FE2572AD3F8B612
+EA2849D8699B206E1716B1073220F90D434E9F5551D00D8126C2A8481081D84E
+D14080F6DADB7F4D0FA17A518859BCA1908746DA83E5D14636A6148206428DDB
+BA89F9D2D1C718004D98010A5C56DBDA82A289CFE6BE8B3E37D704EB42D6E43B
+FD8CAE6C85302DC1C98C6B14B36A7CA4D2FF608618AFB2B4AAA8DE89A80A372D
+F1FE7A99F7F4AF835B305DFD802E3BD0A63C169FE9877E43C06A892C3B6B468A
+C9C92B4E3241197D11B60F5EC49FF4C4C72E091C5A5966289FDD4ABBADD5D3D7
+E475B4934BB5322956A35C50EA88FFA3DABB7376E54E9D8899A22228C523F4C8
+CC16ABF36CFE30978D0396E85EC3056152A492CDF3C3A19F1633F32B6B2523FE
+3229F9942CAFBBDD9B0B4F4083FDDF64701E859D45F35E20C555F99B7D533012
+E7D050658CDCB8498BCBB199A4D96C5333BDB77E4D0BB5D17B2D211C0217BEBA
+0A423B678C64F1D7CC6E85400FACB0B29E197DA781AA197E95850C66C38D1CF9
+0A0235B74BDE5FDA26125ABFB3E930C57FE381D28BCB91269277336C53186E8F
+19E89349BC4E1D7DB4A236FCCE813F2A01D850B6DE6054E882EE083A7DEDB9D5
+1C33025CC5B30B0933923A6DD546F1685FF54EAD3D32B612A7C8A8E979355400
+0A8756BF2F57887B238020D2B0A417852ABF09D9A0D892EE58B97868E91174F4
+07B40FA12845EF4BF69A8DFB730D75550B6BEE3238AECD48A5BE8BFB14547D6E
+481CA7908F373EDE86F1877F35C597D2110C84A6A4B3E64B110E6CD163A3B96A
+9FCD6243509CFEE665465BE95DD660FB171362B3551FF735D58DF86D94F961D4
+83D7ACA8575F69DB6AE6EEDD7EF8BDF160CEB55497C9ABF3DB42ACBABBC45100
+E10405D396CB9DAB8DF65E8601A46980DF746D48DD7FCBAF9E2415D414DCC51A
+A08E4CE5D843EF553AD33118A6D0A64B3A911D1306324F885634D8A65E6F357F
+B61E962289442E3DFD5DA068AE74F3AB692178A9D80130F44803D138396F36AA
+DC1F95E77E82CA2393114ABDA11F18AA26820C7EFB2DF984E0662352F8063E9F
+C5C9C81F7B224142E84C6946335518EA6550F0DF9C7C63FA555F28D4700623C7
+DC1662EB3410AB95E31F7B0A0AF8CDF8EDA9E3D382BB5EF6050E1B96D1D4C3AD
+1C93A482D96185D413572CB03765C37D50F5195D3ED8FC61D143A7D72D872ECC
+CE1D8D9CA0A9FF3BDB64B7773B9B49714136DEC95BCBD3C1CCB8FF86770D9C9C
+86B7D7B3EEDA7B21ABDFB925FF159C7A4C2986DF7AFDF0445EA3E09876238680
+A5C83B57B27397190670F954F5336647E13CDF51686E3C03D9111182DBFCB335
+D97E43367A867CE0F105C88488379E88D4314DB435F050420C025ED915C881C4
+F16011A0AAE1D32475488D66B2762AB40656426576524BE5E7720D9D1984D95E
+5B64D9E66FB960BDB84316AE17175A31BE184F823D1CEC6146F9E666284F8772
+F8E6B1AAA77BAB8DC708FB53BD0965C03771365AE8A8B4A610416683CDC421B9
+F950D5C760CB11D80F0B83410B6FC36957D35DE9A6D9176B95A91C9E4C3EED62
+D961C39D26A253AA5A2A74B9C528FFAE71450146F0CD2065E2D7C06742806620
+3AAD0B1C486CC62FA28D131392392DDBA187B24F60BF38C89F98A15B28C2B872
+F3AA742645DFA0B39588AA9EA323F73C5760BC6F3A9EE18E9E640C4322040406
+AC90F9089FD2A2F41E85D2FA3117458532A9A9182B9D33471598F1771E3D94CF
+D00DE95A7370F76FEF4F15DDA8EC789BDF875D042957357B8550EF41EB96EF75
+F2736D4738D6B9A209D26868ED31DFB81A0F0B482C1120DA5D02B10C52AFB638
+8E8584EC145EB8CB160336FB56C0E6CDD54608D28A3DC196C96D2C14157F4513
+FFA37E4AEE25CD0CBA91B1A79FB0AD70E229FDD532942C01774CF4E8821186DF
+83C68BC3FCA64AAB08DB3630477E028CE027B1E7718D78C010C4BC8CF6057506
+8FD212FAB5D0C9E343A0934F46F0FF6B59B7FF2F93F5A991D3B9457150114715
+802C7AC907B16A21C11212DBC362C10D01A1A10CC0B9756974EF0FA7222A1C52
+4DE1DD724AA70EB1B9C02BC69E066C0CC821F2D67FFBDEC0322B7454FEE52CC6
+5DF564F57DBB788FBC2470C36E379518FAF36BF07045D69C641300FEC69BBFFC
+DFA900413DC325DCC7A5991BAF8004032F692DEB5CAE7E414BEDFC23E82924B6
+684D4C13856793AB5757EF70AF2E6B240DEFCC65E50238D77745FBD27B53FFA5
+F0277144EF0FA335DDF914BF90F63F16B8BBF1669E512019CBB85DD9520940BA
+7D22EE89A9CA2D30BEC0090B431B40D7FB2005A0ABA8278EB74EE9C194473FF4
+9372753873F5584AA6CE0F353225A17D46FFE939A01E3C552A5A8A5C3328F315
+9E666A7351E84D0B48294F98928554FC391EE42B18BD16683AAE955C5F76DE18
+B429CA14DF7939BBC6889DDFE254FB7762C2C83875AD984AA3CB358989C64E56
+427FEEB273273DF16D1A267FBDA8EBFD56E08DBF41557518086037107F01113E
+ADA7E152839EB08300C96779A2AFAE943E30B4B31AEE34B4CA851920B387910B
+2F26B2B4BB5B5A3B72512F65CAF4095E01A87E502BCF8100B00CD533C7577E44
+E52248DAF2B66DEA839EBCD37E14575626BE17DA59FD9FF97FD0DF4686BF448D
+63D9937E404C53ED366D2CE36D64EE6A6E1930A0AF95B0B192FC33F04757D9C8
+7103DBBF0B1DEB49F38C7FC7CCAF9AE4109BD4BDB97754D10E860DD7DF420B8E
+2389FC919B6C381E6E0E03020158985EC49ABDBFD726809EF7F4A1835BC08AC9
+94CCCC2BF0E215EB64F095A3CB407B6766AF0919B9BDB13F833BD3F9FE3CBA2F
+F8C495389E2E09BBF2DB9FDD57BC9DAF285379A79C77A05770715A7643D8A207
+F0BFE40E995980A3F9933C0A9E1A3BF5AA5EC74752D36F1D5BF04ABB67790307
+FE3245C738CD2CE3E0BC7D1016A597D385201BF0B903E1524670053286799C2D
+15733637A45BF71E77B883832C2B2B2E85EF775763D329618C1E2623A9F0642D
+DDE7F0B3F1DDB2FF1381B73CB7D605B6655285A6B0BD8C73BE872CDF6388F43D
+3455C9D6F70B7D1BF9C329D344C3D32423F43E23EC950F683A6BFB9FDA1A25B9
+BAD1F6758F3207B69E17A870ABD0D353425A964ED374706E1D2CE029EA4DBDB1
+70D1052B79767C00CE74A16818E757B2471F4B7C66C37C075DB29BBDC0CC6977
+CD0B02E72B8D91C7186E75AA38DA53BB1B089F05A189B080705050ADA97D3945
+C480621ACE301614EC21D3FB065EF7D724E910D651DACEEC1DCF51850EE74AD5
+759E3AF3A81C418BA7347B633F1C285A47217F6B2B9B9295AFD32DEF6E9BAB70
+51A8363EE9ECEF904536F9B8899C122C62BEB13C616CCDFAF5170E2E987C3446
+267D2CEFD8BC432268AC9459529676FC5F93305AF1461524485AF2960A04B6AC
+AA00BAEF0907F36DACB79DB3003EA756178E2E011B2E1DF680BD329C737CC800
+5E3E63C17D6571F3B22B69418CFED6468E9E8D0C7D52670D319E2D86BDF834A4
+FFDE583B1F7B209DD4A85E6F7A258C663B7386D882453BF13F1085700A9CDADA
+628B1CC2E69A792BB40CD9C98D7AF768B0F428187524F864AD3E89E434C558FF
+8BBC5044249EB21E71E40986F6BD7BE3F611F11339CBFDB08B5CB04DD94B4C39
+4D87C898209D827750DA7A51C99AAC44543ACFE9270CF62FEFA52B5B29C9D73B
+2DD0E3C2196344ECE080D24B044F0E63B1F969D77FB458F0D6397510C7759310
+8B0645BDAAC6E10005DF53F59C0F1988B5D128EE05FA3D1B72B097D96681A771
+13A9D16FA21AC74357964B5D6E55497193865042D02092A10210C880DC2B0281
+143DB5921DE8EAC56ADBEFE14F4DB0A8CA6E817B99187C0A8ABA1C54136F4D80
+C217E0E6AB100CC1A7F33B33ED31BB6007A90DAD22155E9BA0B33628DB429D39
+C0B0B9E6331B93C0751E2C7B079D576BF55D69F83936795E9F3652B7A139D5D6
+D85E73CC6A76FA15B217748B3A7A58C961E40D0243F26D173B8F474869437DD8
+EAA03B88809FAC7DC3706638E79BD627C61716B4862BD5DA5D6BE4E09D835B47
+71249BC09203F5992A068FA4F242ACF5D4033789A80D71091C550025D9A66D5E
+ED45FB3D9626BF0D35DA8870A18D3A51AE519627A55E220E113B38605614028E
+351B70C4BA6DD84A6524341471D0857061A33A0425189A398923A095301E159B
+CD45188C646CEF5FC8A3387B96D736F49A14A9CAD089954EFC96FBC1D5AAF56A
+61C9CE117262033B2A9FE5BC0176C6430584F8756A80BFFC2F1ADB3D89FC39E9
+8752FA3079BAA57B5D45B71C95F07805D1EE7642D31C755A902AAF198CAC2780
+BDA66B52594D58830459793B16BFBD2FA49037C1BB70FECDEC91D072D7BCA535
+3F6978C20801F0895135E5F2262C694D6A9CF77110A90486973ADA5DCE514A45
+28185DA7DC9E11A5F142E631B1E0D517D7362C12D1A9C69A0347A7F3F6F899F1
+7826E7514CA68BB67B6D0D677D5837546DEF9641C57ACFFAD580638684866B40
+F6F305F8ABE2D10A5148473A1D647DDED3F2C87BEEC81F6F3EEC3AF8DA46201C
+BD48701E38BC5E6CF588DFD010CBA45FF523A658FF23EAD45DEDB7BB3E971F57
+AA1507E5E5795384CF5326C49492702B44C3AC7ADB2BA6B75F4FA1118F6B71F4
+406F3250F2E2BE1F2669BB1AB8255415F4AC4ED7EA1B02F3A2747480412BB15B
+8FCEF40A84FEBAE4CE559D17F2D2D254BE78AA1A08BF4CCB81A988D18AB629F7
+9FFE1086AA6CEDC80064DE7EB52EA9BB731B0ABF3A10815D649BBA5659F4A8F4
+991FAB4B924B15096882B87105DF33F3684E75018CAB88528ECA243E4B1F0627
+6BFDE587AE6D126732E70B9BE26B707B155402339368CDB505F28E1C1E3ABAE9
+3F3B6995AE7D3BB2D0411126A1CB7938C6FD8A3844CA670D00F44475E579EF34
+77068AA4C4500BE72386A8FC6F40FCEE796450CB3612F2A32E2DF65980FB7239
+7649D97AB49D3F6830A667A8F41B989CDC9E1BCCDFCB37162A1EEDA4113941C0
+376D8451E0EFBD87D79DE53B51E0DC25E216432464EED9CCA8051803B5F08EEB
+16E2477037165809512B0F3AFE270D22EFA230C26174F1D6177AA594F16B434F
+C3AE8803B189F91EF2724BDE31AD379638D201A9AFDE3CCD536617534C18CD90
+7C7BDFCF04393AE51DE125735AEAAF881194AA7D9781B0A49948B8D5ACA4549C
+D1F9491570D763923658CA9A9493B2B71A638164DBA3ABEE88D8B8C8A309C6A4
+F597ED90D78F8B30537DF7265229B9D4A3CBB741496F12C952453B539CDD7898
+D2B4C0A282950F055E49C6CBD9F219A3A03587172B4409DA40B3273032FCFFD4
+4CA28F3954D3D75BE98CFF32DE14CD05E38A3D2E4942216167B05A2579E0E360
+ACC29884E9B442630EEF3938F3102CA18C31042807FE3131464C7112624B49DF
+94F70E771CE5EF9B8021070C9E13B64AEC8500A4E55A1980BBEEFEB68D18472A
+C641458F8A9F99BE6FEFF592A18309C30B782B72299445DCE6291D07ED95A80D
+5D2A6A3737C6BC2AB3B749036F557489CB325FAB32C25FC1689B6D5C420B4AF8
+8264E88EF1254ACDABCD0CB2A9E22A42E1C757C98A2B887E86CC908D86BA0D7D
+702C2811FE705E10406A110968C51923F21F487E310290B4CA4FDFE4D91B6343
+C05031669E0699AB8BDD5C52523B63A4CE33C01896931A6F9D7B10D25F203CE5
+2CEE5370BB39CF517818001A3888E1D4F811BE5F5C532BE0EC7571C399F493E4
+107D33B485F45D7F30258AFE57A340A98C1550BEB342052AC114814B92592F73
+41F54EB09AEF20388BAA1CECBEC4A11437D1289554B533E9E1F736D363816989
+208599041717B35BA674BA94DF52CF4BF9300766AD621C9E9F41609AE6200240
+C0C0B3D063D97A054E7C99B1F66B5CE6612084B2AF185A721815AEC22789F7CA
+26984B6F7ECBEF53CA6ED1668E88613A8D7C4C42B434E59633783A4D34E724CE
+BE311BEF3A88651B1B5E824A8964AE35DD946C3A189F4FD8C4C68BB62F835BBD
+268113C5D3F968B63CE1C50F5F2D4E61FFB311
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTT10
+%!PS-AdobeFont-1.0: CMTT10 003.002
+%%Title: CMTT10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup
+/UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTT10 def
+/FontBBox {-4 -233 537 696 }readonly def
+/UniqueID 5000832 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT10.) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 34 /quotedbl put
+dup 35 /numbersign put
+dup 36 /dollar put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright 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 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 60 /less put
+dup 61 /equal put
+dup 64 /at 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 72 /H put
+dup 73 /I put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 83 /S put
+dup 84 /T put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 91 /bracketleft put
+dup 92 /backslash put
+dup 93 /bracketright put
+dup 95 /underscore 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 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
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3
+7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260
+6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89
+14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0
+0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397
+3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4
+BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F
+D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0
+FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB
+556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F
+8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E
+F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB
+B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673
+125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787
+A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77
+4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC
+56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178
+E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F
+15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385
+2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9
+05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390
+6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD
+04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728
+C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4
+70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA
+4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A
+A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473
+62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364
+240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D
+69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2
+ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84
+121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4
+0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB
+D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A
+0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157
+D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C
+550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844
+CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A
+9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4
+FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F
+7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06
+E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6
+50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A
+2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05
+9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2
+44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE
+49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9
+385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091
+8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011
+6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C
+EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0
+E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB
+C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE
+484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29
+4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0
+0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C
+6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F
+5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C
+1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3
+909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8
+BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506
+CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0
+2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0
+CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08
+EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811
+0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6
+9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A
+D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4
+21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0
+7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F
+52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A
+FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD
+AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7
+F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429
+067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E
+E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431
+C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937
+5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B
+0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD
+CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC
+2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD
+E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714
+56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957
+F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F
+E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F
+0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D
+67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046
+EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7
+CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8
+9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5
+9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0
+C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861
+327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203
+F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC
+60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD
+A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4
+B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5
+0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F
+1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1
+DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D
+55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C
+7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E
+75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5
+E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149
+8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E
+F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB
+8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F
+D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914
+54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0
+49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9
+CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0
+34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276
+1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA
+6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A
+DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4
+E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD
+4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD
+2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC
+ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934
+3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE
+97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C
+FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570
+A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF
+639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4
+D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615
+E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2
+1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E
+A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3
+F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780
+5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5
+4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50
+664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844
+4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8
+35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04
+1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6
+01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A
+5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82
+2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0
+DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C
+BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507
+39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1
+C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665
+99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481
+7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE
+D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8
+6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184
+5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38
+6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B
+F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81
+E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9
+39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81
+7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5
+ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77
+6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882
+2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230
+1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41
+06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE
+5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A
+288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E
+7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F
+759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF
+E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E
+03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A
+6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859
+314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266
+74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D
+906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36
+673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E
+A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901
+931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B
+CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390
+E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1
+4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136
+2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE
+F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B
+E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE
+E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE
+251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71
+7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6
+46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C
+E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33
+DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813
+F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46
+507A8526DB26CE1C7BB734D124EB0386F7AA332FBEDA5E099B626A67B0061808
+B1AA8A9F4E87C682601AB378DCE08184B238AE514B57CBEE38C5A6038B4A69AB
+A69749BFC89A1D7FEAAE52BC1DED5C1A601BD2FED84DC323FB5E8CA70DD44E6C
+1F7AC9E39460ABB8201AC2684E63AE4120BD0C59EF31F0B218DCA1EC3AC2D43E
+99D9499F6338448DFF4DB502DBCCDB5DE90D7BE62D2E2D8385B1E909605717D7
+749578237A043BF8DC51096B86BFC97621B1E7E9D9AE9AA465942C8C19D915CF
+C9411456EAE9EF8D735BFB4715B7E2454D0F598F0BF61BA0C8F12AF87B7ACA21
+7066183BDB1DEDDE823DB3427A54739F3663F1D699F57FA6DF197F87C989B83B
+302C91EFD4AB856B9CBC75EE64DB790EB35ECBC176CF0EDB8224AF9A58620B41
+A5C8997C5A7CF67EBC5F433EB0B8EB1F74EF96BF18327FFDFADD4377601B1A1B
+1A671B75E2999BD99183436FB27AA0787654AB365D4132793CDF8DB09CEDBD42
+C0AA8C4DC3200920305C1597D3B454CD6504E6961B63F20CF6823E66CE60F1B9
+188CB4EE3C3101286C6D10890FF2EF0C37F97DBF5DF20D3D5AE4B2B5C0EAC000
+8E6F3E3F8D082AC5C1C0428A2626AFEC37BC4104C3AF60FA55FB84177F785F03
+3D885B728B7750481FF3126BAE5309893814BA28263EB863D5E7A39082FAC33D
+B46457E63CB27220DC0FC981DCCB6732544DA11766C9B0D3440CE0C902F16063
+6D147F2E356462B2FE8F882191AF86A6CB3FECD914946C0E4535B4F7C0EFA1E5
+377DEF99D8763A928EA44DA3AD803AF38ACCEC624A78BA4B3B0F935D7B9F8761
+783E0C22513C88957309865BAB15B501109065D0D3723517580C00E0C196BF2C
+B82F0B8E53A378F4DDAAB54B47989CBCAEDB8A304BDAF75DF3DFC5DCDA563C6F
+1C8C9BC8514F4912E4DD84F19CD43A74BE4EB0759ADDDA74ED134379E63D9D00
+667CC3658B3E33987BE2F5358E6B18697134143D76C8B2184A53DC34FB969909
+7484E480154375A2809CC5ED83292ED9C25718AF0D3E1B622C37AE15D967E429
+545A65BB9BC5A0C28C9B6620C88AC1B10BF071AD542DB071B4027F31000E15F1
+636D6AD25B03A443509DF22B950DDB38150538219C18735C6FE1823BC639301A
+619FFFEE5B7FB9F34A31B87D9D1A4A2541AE5339128CF7BEB9CC345D8D4E9063
+1978245ADC0EC3BD1D81444532769CDE9A960BB4B60F6F707824256C8F03DE6D
+EEA8FBE3B23A4C7B16C5FFC37C0E523D2F89A1CC5E64E32A94C5E222348BAEDC
+AE775455F358077326CCA58F4C8A2D1481910C9571003E25A16AEC3A003AD97E
+76993E56B6B8EA458178B80CE273341C9856C2F93CA51A4ECDB83B64C9DA2734
+F58D596E67963AF1AE570B450372489B329DCD00EF9CE36101C6B886D2B11C2E
+D407DBF4E83A21B3DA030163A73F6EA328E4CFDEDE30E97CDED64AE00827C895
+D8487149A8FFA1EB7F044A395C55E19C6107B45B60BB1B6D62DA83FD6744FFB0
+98997399E0CFF8E0DE311B7908624609106B760DB36843B8FAA2BA68EBD5D3A5
+8EBEF23A04F1959054046450359672AE227F270A4860755EF919663F035500B0
+ABB9D42EE87D178137BDE927F8A98CDC5E1CBE0B99F0EACAA52E40E56F473DD5
+B27BF1C51F1E42E813E85F163BC67A18CC1887DAC73A84259C4C1043A3869212
+7791949C93A0845B9602AFE0C7EE6618173CEDE77EEDCF52364C60F518EE6B93
+9CBCCA90FD837EA47FA3CBBF9F3B5EEE0616289C27C1517212BFF2CF9A0430CB
+4BE69786504DA5CFACE59EDA94D33B37FAB0111AE31430B62343EC05D7AE5E91
+BD98E454F752CE741401DA52C81F984E972E628C1804455FA15857B7E3F1A352
+1FD2016251C8FAB46A61FDD17B076A6DE70F49BC5BE6C356CB33BD7BA6E4FF82
+2417BF7E5233C15CEF8BA5F7EB16708D2BE2CA040354BCB8E92AF0B9183F250A
+E04683E3F060AAD181FE982D8CC50A950167935869EC0E7884E06617A9B7270A
+C4A6F7CDC1CB54B13E7458D28CDCDB300EC47453E06401669A116264C1F74483
+C7210268D605A56DD7F4307D9B046A90BA8210E1C7CF6E302D9FED4F6898ADBA
+B8C4891D68A761DE92636FBE41433632A244D2CE90CBC0716697396A9B0EFFC4
+03A17D2BBCC56F8A2A99AF870CA7F9414E42D689B020B11D382D4CAF5E16F85C
+873B60A4E04F17DC736CD41A80EC051E8759A76CA4434847986A6834DC9EDB7B
+E2947A586254C118401FC08F1496D9BD9060797845C1563D10C922B8682FB988
+983C9CA5D46AB6C62B54D4F601588C7F8D2E37B68DCA401224A9337BA92AD14B
+2F917DDF1923D864001ECE575505E9D13F7C9E42DAB32399943E3FD64FB21591
+62CDA15DC14530341A1C7111468EF3397D4EBD9A25916DCBD85845ACC5D35A9A
+2F0B2DBF2EFCBBD30636E1F31B355F9617AFD58A54622DA400D0E0B115E4BFB2
+15F781C8CF4E09FD1E019C59171665DE0C44D2F8534791B2E1F3001D76257656
+DD5BD20B737640F3A29B3C7EB47AA2BF9BA6CB5818D780E587FB38F2E494137B
+4DF8E98D3AF8973B241DF7BAA52A90545B8A2B4827BC33E14988DB8444646806
+99F978DF8BC284C0947C01A919CFC988635868765BE662F25E9D935B223986E3
+771F39D9D2A58AF2827C867605BEC744376AA9C064CFBB7EE734890C67B2C910
+7B660E8B4909C37CEBACEE7270EA076115E876426F4466AEE7261993A02BC2A0
+6CB7CE5CDD1D4F19AC495807DC79EBC956D317FF9EF2367A702042C991592D8B
+52487348C00DAB9B0BAFFAC2F05D947E767FF2268BED8317662788BD91EFDB7A
+00290CE3F1673531E591D8A5AB24C231F36745BB9811E2B3FB3D68B1FD278AB8
+F2BA32A214DCEDD4414534FC16F6C2F3A2A2C764F2BC7C756435BB965684F9BC
+EDD017BF09725925CC9F79863E850A0820CB3F9319122C135E363D9861525270
+E0F672BE94EF236EA6A734213C4837DE148223916BD6808FBBF4CA6E6665A046
+4504349740C2FA659E3CB5E7D6221A5F231C8D1651E7DB727828D8AFC23BC8F6
+4155CDB00E251AC2E595121F35358C9CACD078095014FA3C816B86B97FA02B55
+CA4373802EDE5D6B187F2A9A5B4D2CD7828CE08712E1ECAEFBF5AB2C8A5AF1CB
+C8367EA30F9DC9F8236AD79D590912815142717B4380DD6C3F99A95F97A88C9D
+6118B8D200359951534D77590B40E1612CAE03FB9639BD7F109654FC7A7A24E0
+832525837664B0D76720356ACD55D51115B799FFBABCC390E4656AB2D6F3193B
+FDA32956C0F7F2A06C4E2C3A2C6E1F9DDF0A63E635458A7A6CB63361B1A0C4F7
+192C9FCC75309341595BE4646020FFCCB7B24E6B486D6DCC7C624477D290ADF7
+4F2366F76D837019E67F743B6B4FF2E90B5B926976ED8A507F2D19E39B5D6DC3
+5FB511CB042E117D6E3B4E35CDB787C320326D41747A138D1718EC76B4126BD3
+908B6E38D16793B9D0B4EC8A024B2F1193BCF234BC8390F16F6EEAACD55A3666
+4B23106A9145774A706A0E156BAA981F175DD9D590B08B2BCA021F553C6C81A5
+35AEA1A62BC7A0E1832338094C3FADB064B24F72017D4F0E02A8D8DFE49A1FFD
+92E29AA0F2B2F6685E2C89FD994412A00D971A3FD1026BB5E0F00232AB362760
+990D2A64EDC4B6969E5A304CC968C3C421172E0838FFA96428C24C85C1B11729
+45E9171D8DD4AC40A9065668ADA5581DFF7BA0DFE6DE29521C3E492C7F0F9C61
+C02416E6ED291A2345307E76C13ED376557DFA57CC6B5C54E7F9EF939ED2E07D
+B36D044C788A6B3DA78E1D86850D66DDBF90C3FA14C817F58699F70C10B5F6F3
+030A8C853B6AFF745029C4EF6B9B04D93C44E349D191627A8BCFF68E478FEE02
+D303BBE884B2FEA256EF66888C3F9CA10315B1AF06130C12E9420123B590CD18
+008CCBCDF5829539D50F627CC89AD547C8FF26372384C912D819C7A68AB0458A
+F8B691B7BE82AD13D35308DA36FDFB0C9554F4E556D62E6DCC015E1C51BD749E
+BA0CA2610C6D763E7F89AB32322AEF229BEE84115FAD8FA5A38A2A7BED7C018B
+D29BBBBB517BAE5C1FD016305D6105444CB342570D9C46016F8915D4FCD9021B
+29A772B0A22E95430D32D8E310C972A48CCCB6FADB25F0FEFB00818F6A1F470A
+1A52F1F99638E20BF06313CBFC925552B86D8D789A6FF3A4EF4E46DFC45AA191
+F75483E41975C073583925591501E1E1CD8619F06DF990C0BB28F70E0990B971
+F323C6A00A6FFBAD9D3E145ABDAD886880B7CF42BFB08B98E5B90CD7E6E711D3
+55E66952D5DE574B5356005A82BC73D9050DDA2D4914B65F4ECA8379F7F7BF17
+7E628C6C7C7A466B5136BB04EB826D28D27FEA294379E25A11482398532C8C36
+32B5127786DC1EA568837BBCC0A1EE04914F589AFDD23BB6C24735E5F504C1F7
+F577AB86FDECCEE79E3E8755325437EF1F238C8CA5816AE9F03688A6E8AAD84A
+19649CBC7BA469CC9C12F81B3BA68238737A771A332E58AA3B053008C33FF2F8
+1AAF03311BEEC8FA641539FD32138566247EECDDF8AC4429058B3DE134ECE83E
+E15252186DD0E8EE240AF3AE52206F96B3D54030D337CA33CF666139E66CF7D2
+88CD8177A029CE181FED2F07D76BBA344C83F56F75E372A4CC726BA97D8D8606
+55BDFD76AF3AA09B71946F0919A9E6615FA7ABB7D31EA54C681D3544CD0425F1
+2BEE3B214193F8A2EEC7E8DF8E57CDFC9B5FDB66F32101DBCFFBE3839D1A45E3
+1FFE9EC86D0E556A9C3CFF7DC2A43FAAC36B9F0074988BD65A53D88BC2BF5A2A
+2EBF480D31E7265C3341D3072CCD5DD93FE459119E619726DB7C9AFC1DDC403D
+9C1EF23413C1FD9C077D62B7F82F750CC66F10E25AADBB4716A0351B70407870
+EA56558182E6B3FA63C4F141A3BF484E55DA46D1CF9A722555DA1AD642FDF1CD
+9734688FD250C64832385CDF47C1BD247C2AE21BD71905A51EDC9F39CDEE603C
+3B14F5C70D301656BFC6332E9A32E4461D9693851421C13BFA0B22F0D3D921AD
+E3D6D65D1AC90C0668D7BAF7AE5EA0FCC8D7D37A93BF6C1D33A9736A7F342DE6
+882B32B0C9D1124961045D45663DB95D7A20FA222DA714AAC3D8858717B02277
+8C3B945EF5E69EEC9241CBFAE4CD39ABF1B77317CD4C6F1B0C7309CEFE0908D2
+D0B6F1E5E5C6BF068020C6424C7669C9B96D0089566105BEE9414DF45DE10173
+C30F45B9CC9B456B216BFBC9AA687A2242DC310CB2B6312F7BBC13E493C2C899
+3DAAB6C015F69EC85C903362C1989AD96895069003F7BB4A8FF51E7F8EBBCF7F
+F85E17A941F96EC49949C75A3C8BC90E34B1646AD0ECE4528661C2F190C49184
+FE348AE644B4A54C059560AD15596D6282F5A1826A3B82449BCAFD90BCABA424
+03018F1C907E739A1FCB024889525AE427E6367E2CC166D4F940CEEC885BDCC4
+268650BF2AB39F338D6551D38EE67A8DEE2640177CBCDBDDADF1FA9DB1CE137A
+743CE30546B3892991A86E0938AF43B76ABCA111A6222F1BB9D172EDD7BE9406
+EAB1E7A440F3BAC61396C901384FDA90AB4D413B3DC5F66F2E4345AF21BF2FC1
+2C3EC7E2E7C703930ACC675F2618F95AEF5366AF455A72A700C451DD41D84042
+7BD4457DD925418255AC1BFE3CC10A6DDB93EB62A03E770E6CD1CA168A05FA26
+194D1D533CF74C7AA3CBD09974AD2ED08A127D35A3444D643B1ACDED0B52E404
+59E99BF1ED70CB07798DC0BE24A5CE3138927E077D3429F4CCD3BFA4D2406F10
+76F820CC932DED8DA91D9E9480B84A234183D1CB950EF7EA8902C269A3C92286
+4CEC9DCEDA0CBFC50CD21979C66ADC8D01DE758ABA6ED72DA12372341F664B06
+8EA5668170D3814A7DA811DF4CD1834A1D997BD58EE8D51A3E6D35C0FFE86B17
+29AAE8E5B45DFC7D39D743B72B736104465B67063D0FCA5BACD7C05B21E473D3
+CB9FC55FC31B29F4090209FE7A36776DF2DA5D7D6082DF89CFD601A78DE26B93
+01735FED4EC83379D9A9EF09CC11582DAB1263EF1D94DD2C2A3561A1BA5B9CD3
+D9F45EA50E210DC927FCD7515BDE13E5075CE892CC6B6D797BC4861F50B8ED87
+697F09C4780B3963D714A5F44DE85466E8C3D01D6CF5DC1E2B1CEDE1961C1203
+F65FE1C61FF1CC5E0506C4DE5BACDBD5894AB5BB48A8399E0747298E908B5FCB
+3FA8AF62850B0D38709FEF368971A9BE8852BABA795EAC463B5CD6298F532495
+96C2177636FAEC7A38D89E902380FE2C6EEC19C31E4E9FEECC877C959920D4B0
+13D9798859805CD7630D9A3C3D24829960C52BCA69D3ACB9E1F167C1434E5B0B
+6878721036738944C6F912B012109161F4C350ECD183FCE075A774AB9BBABBD0
+91E523EC0B48FB12A920DFA1306D1139CC204AEE973657B036F5F541E0976016
+798472D73F2789456C1A8268A6C523EF8B5D3D4623372A3A84A356063164B37A
+55E6220A6837ED36E1BDDEF99F1EFBF0A4200C1F77004D5641BB6BBCFEBCB286
+80E59CC23A95348FF9F2D8E1B6F6B916DB8FF32D68BE9F39EEA1FD096C6AFB6E
+D9CB3EC1F724893D4EF23E0F44618D8915339D7E8329E90BB62A03F77E451712
+F888B8A371371EE01EEF3853A2EC7A7C8DF8314000B38026D8D0CFB241DF4684
+82A773D5CF3FB56CBA7B9FD2FC379AA99A332852841B3E94C2D02903B525BBBD
+616F5E832B8788FC2832669FF0ACF08A0A9B34D891B1BAF78AA583598051943B
+972AA191F7528F4DD407F27327258FC5F58BDD86EC1F3CA88FAA9F3B34A9CA38
+9B1F747F1354E70EA66D85D9C3C60A9BB79394B5E55AC9E0405E26F5352143E8
+ECD877505D96A16F8A828C4C89D05B5497FE14ED468B1F144C4D8E0B92731D34
+F0FB9B73B830961F26B3FBE450B50DBE3A959BB7AF1DDEDD891ACE264858C4E5
+58B65AFA44F43F47CF532E71573EB9EEE3A1A498B87C17549A40344874ED53E0
+F77CB0F19E5C5EB5DE7E10DF0C0F7F2AD411091E49BEE1FF101CC15FBE471B08
+CDD75E2634228A2A5D677F1479149F64CB3BBD980E975C074CC5B70D8FF535B2
+768474E2E7D47B85D15978F5E0EA83A6474F0A0D5726723D9A4FED424E6695EC
+2B1F5EEC0ECA31DF06040F57BCC480F89B9E608DEE1C20676D0A34E01507E405
+EB308DC3238D11C2E2B279767BF2AED2A2B9079221992A282C677A0F98AF0451
+3D48976C569026F6FB3170B22AA6E556BC5F9BF546A0E60724AA1EE7E68B8FEC
+B5F9A96FB5B30D36EC9C10075652ABDBF5730B526E32B1ED14C9176F25CA5AFF
+85A11C041B0A89B815738E770560E529FA27EE353281381E3CC13C3B8CAC24D9
+04964964A320A1354B76F4A28E1FE443E16D028E46BDA9168569D8A4E91D2BA1
+D0E08EA4D34A63DD64FF8D687BFA2B020D5EFB4685F9B83A1FCC959563804D2F
+10A59AA2D4479E2DBB7E8E43FA4145030B9798203C55CF62DDE6C99017E0395A
+5D666B0825DF1312261769672D97F79DA24A3CDF62611858D41BCA89B53A6128
+210398A6A1D8BC2B9B8CFD6F03871A037973F9B8F7E4E069D4C3482207A42601
+AE22F4756A44F596F7FDB2D2F53DA5FE47F94EEF21D1C49FBE58D8C79B98D5A6
+818A313D952A72E1918A110C6E4DAD9D1F512F5D67ACB751404887D100319E5A
+F3F88878B1DCAF8A34DC8CAC908A57C95E9E8BF270F7DC1325685E8ACC58ECCB
+1BB270346CAFB828A694A75DB22FA68549A51EFF70750F544BC371D8D119F0B4
+E92A5BAFEACEC027A4E50458A4BA2491242308BFF75914F63CE7FE0D4F16884C
+4FB0ABC7CA630F7AF59A3FD4185DCDC7DF8718074632F6BB063933769700A40C
+457DF0F0E8CA71037B737074F10D7D21B2246D38F11C11EE42FB87959313FF24
+E47B087BD3692034A4493AC6D82D30313F5BF48DFECEFD5C83AF7158513BF0FD
+7B961E43DCA6E60D24A48483B139BDCB51A2CEF47B4D6DFA4B45B6E42E31C2F2
+3D4124475E34BA7D17AC50FF84E3282B8810F8E3C95037772EF23E14D0084716
+4238C621313E5B1C895409FC9F281776346A94E3039CB04BD8942E61D5346AB8
+9BA46E8AD2891C98FE1B14262B0770C5F3045097FF949E39FFF96346907F9A90
+206B8D6E753851CB3588E229A18A855C727BF9EE7D08CB6A471CFBD12B679A39
+C2E2CE65721D2070E06D68C10C7B1EFE2062185CA60E8AFAB0C1E8C799C4834A
+3C20A0DEC62F85AD4031C7620D6B8443FDA66AB4C5CD4B62DC25179897387CCE
+6E49D4DD217440F9B8513B8250DD1C5D5268F9490CC38215BDAF9415C91AE7CD
+1B453DECA5CD765E083CC515D3B61BAED6347FC35511CF91DBBAE0A24CBD2093
+F8323440E40907C53D68F61792FC5D9DAFDE5842C88404DF1D4ECCDC8221DB2D
+4B01A56F6C31F0315106E08504F525DF166B4FF4F4B213D3821F0EA97E030372
+D76A7752E7B34F566A0718B1914D29F71846CF8647E7841054ADA442837DF927
+97F1940D546037EAF72E20CCD3AFC5BE4AFF17D11B4C9C92EE6A5239EEDB2CE2
+2253068A59509B7458E0112A845F65BF49FEF08398762174DC1C4F4094364EB7
+9DF018DC4B5429DE5BB4D1CBC9134503674F4201619BC5A52B93D40AD6771DCA
+426DB4BC12DEABD891116E604BEE4C54A6AD6E700CD2847BB8B16501153729FF
+27DD09239E0898BA571612A5BDC875DED7741E873AEE657915B063EA2A826527
+5B9DF021127F27C3BC1626C909AE6771FF2022C8C64AB4F116B06EDCC7BE9D64
+31A92E6B14F388CE96289600AC2CFCDD7835E273829378990005C9EB8BAE9F5A
+45A92C86F6A3082C9415E5E921C53DED20A7EEFE36F5469A859929B555920E64
+64278316B1B1570F5BAF45EB09632D7FA3AAA546BACDED45446E51C3DF9F37A5
+075005829BC11D190D2D0D31EFA6CE32C76CDCBE49B6212B2BCE187543D5346A
+E0CEA04CBF0142E9E51549007981E8AE0E6D65B50F977B6F7ADC275738E01944
+728CF17A3BC4CA89563174AC2C1495AADCBFA645EC0FFE0C567A7F43539EFCD9
+517011E3B8D75EF2EBE4138490541FBC8103DCFC951A299F78DD02287739EFE3
+13773E29919569E091EC9F5E34445C04733E3EE1655B2B34DFFCB4B7356EB67B
+713509B732D4B60FD6C44E1902F25E6E1703216D861490F5CC9E39A618AFD328
+3C8F818B53E2826E9EB56A2812DBE46950DBF1A4F5A8E7640F9F10A8A8BB66A6
+90785918C2CDB3000119183AFE51105AFE0ED3E396B6634A2FD802C63DDB2834
+A088D41F1F5C7945EC4018D1AEE724B4A5B498FCDA1DEC7DE69A3C888664E5F0
+31E11F32E0AF985878EB0A55BF8841593424E191821BE7ED1A0108E28AF48646
+E2029C7F6ACEF238F08877013FC23F75816FED446D3F2B1B58F40C5C63961BB0
+67B51B0D2B158F31ADAC46B6AA4B61490B3E28164F9B63F115C8DCF64C08D8EA
+ED2F20E7A1D36FA511E39FFBBE90FCA1F1950521A478FD575C98DA158F29D029
+80E3AB7A960350313DEA0CA5B3A0A0BD9FEB87522F0266E9AA9098ED8D740D9C
+0D33D210828A41E2C21BFACC448A8D9F7D7239C10149176783C2F76EE6A057BD
+BE248816283B2BA3D713B06A99FAA2FE50636C0775365B59329E3F6F75C0611F
+E5B0547AF61859E0C03EA24873E7DD0C8685434BA263197DD58F63E136572FE1
+D04CFCF1305EE86B55D97AD5880C265417D16A6220CF13AC857228E5D805E338
+D6C92D8E0DF910C7E8CA8E01332E5561936CEC98333D98420DCD4156B16F7572
+564CD961B206166023852DD217A266325A698EC373E51B2ABB790F6A2F2E78D9
+E77CE19F96676CE81F40CC72BFB19862C404C6D0F9F2B2FB765E9F6833CA4704
+2B0B928FFE528187BA39C62E9F97305FC7E43A9CAA5EDFB7C4A8D6DA4EE27D88
+B2EC15412154C581AB32A8E896E06E91E4A3849CB766618A05EB4624D9A2CEB8
+D2636DB216102CF75C5617C1109285B9A0C9E3DB4BB0A22F591B53F7C29F2C1B
+3A244AE48D2178AF8E0A88FFD7F0CAD3B2C5525D31C32588995FED6DD2EFB9BC
+AB990B727E8174EFBA948DAA68791ED4EAF26CF8D518271A76BF896DF0024C1F
+EBA1B3F7BAD42D735A7DAD1B2AA2E2A547E73DCCBECA12B839ECB91D6EC32C29
+FA33BD8C9B2918A8A6B94DC09A6420BEF0DEE1F4E2A976A303F07EE93F7A6AFF
+FEE920618DA159604492F7669F6B0946A0D7AAA2774853510A541CD6CCB1123D
+9B1B0C88833EFCE0C326B4850348E65D0294755BB1BA2191FBD8C2ED1BBD5A0E
+3F481B9E13976355A5758380A6EC171AEFDEE3400573243D6BD90F65369F09F5
+656F465BA1D64B5FAA44144D1A93C2D715BD71D717D37D7F691D0C19818DD847
+A60BE6F97291A18DEDBDB67EB4294E6147C223D85D646010F70EE10E1B661F8E
+10098913757D2068C32FED569F85201718C84C1F57AAD3078C989E8363708AAE
+0841F2E746E3F5A7F06634710A2A4EE31081E367B8F1831BDD838B7FBD1498F3
+D3C005EEBC270544B6F2A016D3D917A319CF53E2E593B8C1CD65BBF3A67CDC1A
+3A7A2592C39A623DB3DCDF869CE2CC9E36DB1C10B6360F4E65EFD0E6A1355BB9
+C6E760AED82DA1A9C2C71A8FE20E5A127A80BC76F29B959405FE70A178BEBF48
+43208C1A159256FC02B8ED54604D570265E5497793D6E31B66608BAD220596E3
+D2DF814166AFFD62426E9DC365633C46B3EFB97441E5715EE59D20A80B44E7B8
+6A5F4E9D47DB6AAE0875229F2915B98A62204B70C0C2CFFE3F7C0729408F1415
+6A2604D97605E2D13962DB6EE32EB38FF4D9BF32B813792F59ABCD9292C8D308
+DB3E6239064D723CDF3E3BA8C1FD84DCD45998CA8EAF3E07E632E9D22753A836
+C0BFDA891AC7DA4FEE50E991618E1458B228F269AF82E5BD47E0DC0A75C3B6C4
+917377F1677842AA4866F9EF618B5A73AC8093495DCF0FC7C51CA481F46CB80F
+9A6723D1053A38155D1D062C50C5D6A26D4DB2A8E0D8074B48362180CF118844
+975B7A945882151B6FDFF0A81A7C636930A201727966DA2D170404B93E3E8579
+CF91CEB78A6A204C853C1497D5B87502B8DA828026803E5810D1D40FD5C871D2
+870292CCCF76801F23BF7A7582B0C9FEDD24904611DD4FE7251B71036EA87E2B
+EF25EA2409082749CF330AF7B7856127E10D7CF149319866E892BD408300BCE4
+FCAF84CD0CEE8C2059BF79C50B4CF60A491DE56E0B2A1C8875C5E1423CE0A880
+4A9C780F7E13B7491818C95FBED38F76374F6593B5E4C717C2251CD7EC05C4C0
+65A2E4E49793842484EA9AC7FEEA28530AF0F24BF60EFF827260A5C417F1EDBD
+B40C84498CF51F91A0C801504A8A92BA17ED925C55E4B0DF0EFF6864D95A28A8
+AD639601AB3A0C44787ABF6766B04036FF1664A744A6099950463407FC82D1C0
+D8649B266EC39DCCE7278034023E9FE803079B78A38F939F9E4BAB9C1BF6CCA7
+01CD9A388090D701B9D2C53B09F7F5F271F18BAD5E96F0A88DC4078B3CA9E123
+50BB1290FA43058D737D99B6DB17F088EF86D00AABB69FA4B40C506C136E5A96
+7B7F401E8F8CDF0D12B230FC7E498A773FA29F6A7A5059E0C7F51C33607771D5
+8B09D0BE1F5D7670B0B02AA49C1A343565F2731E12B33236B7F237AD8001452D
+EB1CDDD2A730D6BF33FA2F45A2754DD7D0DD55D78AD52EAA7D8F51D3AA2AE015
+E8F2326835CE2B192B3689EF8750C80BB2D30DCE139744B3A47D8457F0B5C12E
+1BA24DEC3A8E98953C199B6B2D3C223B3F322EDD8F05946D6EC7B7CC012CD2A5
+FD3D669F2725005544C6F1286B4EA9005E38DDFA460D5CDC5FCC2A0B82BAAB5D
+8B62E83482FA3A601CB9B80FF96621885DCFBEFABEA445FB857F8D54BF1B06A0
+2B153234454F424ADA9A5782F93EC2E55C2B47751B30A133A0A8DC9078DA819E
+0EB14EB158EF38FC9789F0F7A6466159F307CD7CF0D827CED9431C6D92CA3BE5
+54FD1EEFB1448B933ABB09744A5CEB84F154F9CDF52AF86931F888E5A263F45A
+87CE74557CE8BEEBDFFF6BFF1609560D7242C0484642D82C06F04C662D317187
+93F3E9CB56BE479CB935173789951298DCE36548D1D17523263FD56AC7C09D2E
+8D72A861C81F7210E39E06860B95B58770ACD8A0BAF536BBEEE1EFA65C2D9D03
+F3B865F2C72530093D40E98C8A8F8B505517C858FCCC701C409F5C0E33A2E520
+6F8D6B73528A331CF784F4071FB1A428C9B8A82777435BB14137607FAC13F4CB
+BF7581FB6C0FA3570579242D54DAA7B54F9E1814B88DA7B5A15B6A5B0BF11FFB
+D8C1778B9BCA433E64B745CC027C2BB894E0E0A8617F66A63AE21B43C3235572
+649CDAF9B1A6224AD11532887C5648BAD947E54D616CA9A242647A63EDA92B51
+9F8853E7FED6A39A9FD2FE608C76EB10FD3C7B22AE9BDEB7432A86F99E559898
+CCCA486E1AE88CC9AF748C8B1831CB5CB637320126941FEB7A5434C6866D701F
+5C3C96EE1DDDBC2AD2B526C61F94D973B62685A749A876578D4FA9A50A602711
+B108C3F31909956395B6B036BFF558375F74034621B712DD3BC636B30E344656
+E6FF0541382FCB7EBA898DCC5AAED63E79ABBF52D6005B22B86927B856D6D793
+257CFEBCBE9DEF1C69A9112B73AAE10473A2AC3CAA28AC029409EEB4296348BA
+B1EBE27C8FA32E808BFD96531DC497769CC8BE428B58A3A6F414B28F9B95B66F
+9881E257BFDA020BD96BB1645BFF2A5D11F8CE9C3C8F94C6A056C1B6496E08B6
+CC60D9D06C7DE5F60E46C5AE33B8F72DD9C7382D42D52C38319373887B72FE9D
+2971DB1DF330C846E988B564CBF1A4629F044A963F7EEA5D5264B4EFC32DD5D0
+3249A851D03224A5310A6A3C44380D5A8EB38EC4DA4A97B348CC71624B600025
+FA66BD818E62AEF526A6CF382F686FFD168AC57D5611ADE4A8ABB8A638DDF9AF
+0666C2A3206E49B9242C4C14690712E2E8F1F8C471DC5F127CD0862E62726D6F
+7F813C084CC8983FF7D16EE9F851F10FC8A706B65CE4751B3EBAB21262E3DA4D
+66BBA37CEDF5217B4644926FF95860ECEE6E0FA538FFCEF5EE086D5C22D9C012
+5455DA62D9170902B622F054F6EF8B2B27F72B0AD597DF8BF51C3BB48B5983FB
+844624B660464091C3B00E4CD17DD07AE659863B7979BC45FAE4836CD41B8B22
+A8E1B00BB24CE37434426495E896938B584450D97C71018B8FCD1E59CFA20045
+12D74518E17177978298DEE06A2AEE8811BB619DC5025AD056096A888150486C
+FC523772DD0C63E7920FA9A9E4CB409D1BA833C15C3A2F95D7116333F9171E46
+77F08EE893B274B295EC5DE28FA11B223B03F6FA13A21CCDF695E376D2C9A3D0
+5FBDA9A2EC68D89895CD368EA0D90A4B9B516D5F9CF12359B9CCEBB1FAD0C346
+FCB6CB4450542937E4008E9E259E2E31F85827D6FE9F1CE3793C0C7474685394
+2477D84EBBFD1E36D4955A07B15B9DFA8CBE4BD732B3483F5823A3CB99181066
+CE01E76F4768F66AE85B6DA24ED8BB3F17C9D09800898833090B768BD62E22E2
+A155F9249D903C805602D3ADE0D5E5D042141A11C1DFBC1F47C33847643C4B4D
+FB7F84A23527B14657BF6A368BD2FF6BB4A2FAEA1BE6A4CEF60E52E20F9E0D4F
+655149A63BD643949B82E6082E4EDDAE82349AE86E9CB92BBD724148242CF221
+7C40520A585B34EE02B408EC8C4EC8506A3CF5F4EB81FC7BD4F63FA16C7C72CD
+7E2EC14EF116E24E0B2C3DAC4AD457551497B537912B322F5FF60B9399F643C5
+BCF1A960E0CBF7D2E6F1D7330FDDB6E72815CFF8C4E9ECEFB0BD5B6765A17CD5
+4146DC0BA657D34466E939329D3520CD26ADE665AE1A53E531751B6E49DE06AF
+24F67E21D31DAEC4D273699907AE35106EBA1EABFBA939E414029E79C7787E2F
+5AE7E19175B90368F5F930B28C6BDF059975EEB7C73978C1359E4882B9C403F9
+53A82485AA4535770E40A8ABFDD71416E441ADF27B55326B6879F819967A26FA
+38E2E95EDD50A95D830DA95576D1476B011ACAD87416255673DDA4195926A388
+D60FBBA6898493FAD872BF7528D6D899B86D6A776E7FD2AD80D3C918A1CECAC9
+C4CA602409F425882A033464895EF7133DFD55F994CCABDF07C31FCD17347A64
+E848C886AD6BA99B31D0C275BE271869FD2F81E7BC65471ECE04E57796CB39BC
+567D506DA8379D3F0E9A441EFF8B7BB9888B53004BDA86807EF370D4AC3AA69F
+5C7C395F4C30AD486A52AF38C6E5E1BFBA7858FFD054BDBE26F55AE561D37A53
+2D5464DB77C2D573E3D75CABF1BCB9EF39348BAA04C02C3C132DB72D01B641AA
+B28C50D9805FFB15DA9016B2F596FAB2AA1700149B9843530B402B786902DA69
+DD1D23B8CB69C7E3020B8F89B658EE051B5191D4AFA9A2A3EE9B9C601E15A878
+5158BA2249CFAA403EFB8455DDA976456F36BBCF7E2B1482F11033C37826B5A6
+864B0B6C4F5F1685F98249C9E6FD3A48BEE4B7AB435B7D021F52770F7BDC27B8
+E9BD53B97D6BA321CECE7EFC0AE10F4838B3C6FBF5029E87026F3BB8514D70D9
+B920A236493923AC4AE2993F3D39EA4207007BE0F1E6758C6845910A537197BA
+6C8637E3AC195097F6046F593AB0F5EF06B23D29A8697374AF8BC19B6A0E7B37
+04942FDC08DA523223A1AFF0C3E960DDB5313ABF09172A1F1B1F7E3A00BCE7AC
+18111C1D9C02A1C4682AB45CD6DEF456D8B9FD984EFAF3CF9AB319C9F3BCA0E1
+D5DF413B4E971D85EFEF039167C23922A69F10DC861555D2FD93A7A2F5AA7ACC
+EB03E21C5FF0708F5DBC735F01C969F3FF2C6722FF87C260783055CAB2DF83EA
+8352E1EDBC4E09E8E38F2393D5949DBD7A05C61E3621CEE7045B0736E569AC99
+D16E49F8A7D0FB89D891650629BC80E21E15060F6439E9CCA6124C8CFDA56AB5
+BD7DBFD383412869B2845FA5B0D4A1B95DF0073DFA877F093844659E5D2DC587
+EA71B3D96E6A6B1C208876A2CC80C0A2E14D0B7971CDFF6134649D702E0785C3
+8F3ED8EC0C6515A0BA2862238BD9956E4470B233B747C5CA8BCC97934B19958C
+41A7ADBFDD2673AEB701F198509042D7A168661A18EAAF981EC5D8D089ABB87D
+9F287F6FBE32C44E591C25D2A77E46DEB9E39B4BDB1FD1CADDEB08351CC119FE
+B6F2B6203C8DE6653188C0C56BC9B7259086A544D588484CF7EF616B231086F9
+E779AA0F1CDD206A68A58E1A47A8462B2808CBD002A638564E4C23972BF9F635
+F01E54BB0E029828E2C232641D917E572662B63786114AC078E118E94BBE657A
+E5F8FA846D3327EE8AA4CEFB9E0F7DF6ED9F879FA07BF6C928B340E358641626
+50ACCF829ABA41BFF51B9D65FDBA687212FD3FA9BD7CAC88BFBA176738255525
+417B94803CD3BAD1B563457FB4471AA7FF37E627E881F994B1C0C41D8E8059D3
+53F7A2A9A20920A74D379C055DB9BEAABC42D892C881E23990406532BA96140B
+C55BB738A9891534F3021C382099A814E69A9D122EB46A1CC258F80AE1373066
+7A74E73BEB9C73FB58B852FC5FEC78A4AD2559B7CD9EFC5943F245DFAED23F69
+9F1669F4C2B011AB9A5549B33DCD09FF8D5BFA416F45EABD4E3DBB0F297EEC2F
+63492FEC28382935848A71069630DD698DE4CEDAEE365120D308956207017923
+067920F8422F3E911F8D4E41BEC6EC8DB4A4E0FBBE955F177485E598F0F228B8
+E49E512B96751CC529CA64C5EB95DEB9ABEACB1C0D6B0FA017FC4DBF8B0F1097
+6141E2CE4372B064C4D23150DD83989E5671003665BA0F0BEC06F814D463F4EB
+9FAF59EDCD2D38675C12C0A6E8615184B5F90C2B4C8BE51A48B26A8F01A30E9A
+1AD1EBDC0173D2F18F5E535CF13FE64668F9467EC4519F733330FF30DEE23E62
+574BB06B2947B2DF41850071AA4A902B7ECAC73060CF934901B6AD2925067583
+9347BA6810A632F5C0CBC4B237FFC0857E1049AF1840EBBF6E65F03574F725BB
+D62FDAFF0F8DDA08561E04E4BDB7930661380D9F308EF466DA04F056C25A8C32
+60D9AC36CD03694CD8D59DCF94D0EA6D25A1D5593DBF7C1B0C1D0FDF363279F7
+33C164DB0E256D67C8C85DD9A2897B7220B071C88194F1D93A406B3881E4B2FD
+528EE46EE86FC9C1D96C10B964C5A26E2109D1389C7BDC72A0A932D3C9033D70
+C2B77F7732B40A1A81FE552613FD2E09F45D0DDD4465D68CFF6687283DE4D1B9
+D2C347041B9C1CB3DB7B092A96D772D1836277D60F12BF9C9A4B7F8D807AE1AA
+695CC7BD9A6A264B23C6B9162AB0B3D671932245E2842CE22BDCB255B4DF69A9
+A71703B270C9687A4648F6DEFBE3B70202C2F0217DC3659BED38D066C3CB74A0
+9AE76049B5307448647002C538E3604B8A46FE98F1C8238538A2E68CD4A72194
+8CE23F390CFE6F697871E8FDA2004895F6AA52AA3E5046C1DC4776EA1CB0DC6F
+F151FA205EE5AAAFC249D2BABDD3A6138CB22DF41B87AD72E58071008D14FEF4
+3AE5F367E5884EB298B3A559FAD7B359A39A813032E7A373AF9550CF1E8CC32F
+4136CCA26A5D85AAEC
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMBX12
+%!PS-AdobeFont-1.0: CMBX12 003.002
+%%Title: CMBX12
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX12.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup
+/UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMBX12 def
+/FontBBox {-53 -251 1139 750 }readonly def
+/UniqueID 5000769 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX12.) readonly def
+/FullName (CMBX12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi 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 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 73 /I put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M 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 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 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
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE
+0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D
+2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608
+1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C
+42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557
+FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE
+78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18
+22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE
+A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811
+4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065
+4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7
+95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D
+9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC
+5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF
+9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3
+CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511
+BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65
+9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68
+EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A
+D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE
+2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE
+947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B
+0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6
+4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C
+BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2
+F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4
+6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514
+D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415
+F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8
+481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24
+FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D
+419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6
+7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B
+70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988
+2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE
+0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC
+9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A
+C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D
+1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2
+A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969
+21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530
+7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198
+17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60
+30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F
+3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257
+96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3
+B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950
+1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B
+57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE
+B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC
+8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91
+8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59
+B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E
+BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC
+21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91
+D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4
+FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F
+A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4
+A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082
+A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA
+DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38
+7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F
+07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9
+BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E
+8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89
+E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C
+B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5
+45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67
+2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5
+5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF
+A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28
+5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975
+E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01
+5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94
+6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30
+8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB
+BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6
+9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB
+B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B
+B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E
+8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD
+595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E
+FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15
+13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A
+FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3
+DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB
+313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248
+C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89
+F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD
+DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844
+8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753
+E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197
+A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3
+C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20
+417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43
+19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4
+9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85
+12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83
+3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1
+A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68
+90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94
+3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5
+B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B
+82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550
+1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94
+AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D
+9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985
+2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5
+99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A
+31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414
+3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86
+F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5
+70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E
+5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891
+84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978
+BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047
+8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7
+5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7
+9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B
+F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E
+94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE
+0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC
+E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4
+7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581
+596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442
+F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E
+7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1
+1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785
+AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE
+4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F
+744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D
+67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA
+054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA
+6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B
+8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE
+CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39
+EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4
+C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76
+57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5
+5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F
+C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1
+CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2
+848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C
+B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB
+77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28
+87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58
+3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8
+409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7
+A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B
+72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D
+99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD
+8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB
+E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C
+82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3
+C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0
+EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634
+23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A
+59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F
+C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0
+1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C
+403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90
+1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893
+75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E
+0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35
+82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25
+C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8
+A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC
+9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06
+0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C
+5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060
+62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D
+6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E
+1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5
+648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1
+FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6
+754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A
+E124929876488AFA97FAD1A68A0C3496BCA768F4AF8016D7A65BBA3AAFD7F5FE
+E75FE714FFF3D54D09C9747ACA01CEFD260985C6E87477C9C7843343C7E9E3F4
+0537D461EF019E046DB8B5BA258462B2FAEA1826B3410BA3333480CFE0DECE61
+CE2731FDDF7FCF2AEF7CC2B1EE7095F480B3B27D78FA90FBE923D372C680C87B
+7F0E702B8FECBE0CBCB087ADD6D28549FE707FCB616448B0D94CBDC404915943
+66539B177D5940370C2035D0FEBB3A3C666ADCEB45F5B15DEA729BF86BBCC309
+0294FF267657EEA805DD28DF5DABB6A7B71D004E91381247F415B3723C651F59
+E431909315A3116090A5ADB8F0EE8F6AE295C7E35C0D7DBFBFC166F037592B16
+7D5FE08342FB4FA5F8917890AD3B65472B2F7942C58D22D4D1C4E68993DAC227
+E1FFDF6DAD0609A83A3F859773FCB1D303EA09D6AFAF573599096E2F5B2C2230
+2F3693CFE8F5696E867B18CEA2D326BDBEDDBA7FFBA2B898A0C0D750C87D46DB
+2EBF18A3B4A755CA55C4E18D6213F91DE30CBCF10E761EFE51A7A2757ECD1546
+9A5885C20029D8B356139A9FAD7C139BCF3BF3866BA4E4F3C07DDC4D83B4CDA4
+A7CC1B3D354FE93D8C364927835EFE48AE8A45BF56946998530269C80A84B04A
+0F1D0B9410A17F168847CDB932B3DC45942A869D629470067AA18B9217686360
+E26D83C17240217E220C51EFC11E7AD229CB15CCED719FD38A376942D5EEDD46
+B2452DCFC5D3189CEFE38CCB5C90CB5B9D10CDA0385E885116F2642CD37869BC
+08F1D693EAB827003ECC87ECD984B89358A571A37D86407FB645DDA209CC18A0
+2AB65E06463312D48584280C888322666AFCFF3C09E6E9CAEB86D1264A09BFDC
+85A45ECF1D6ABACBCF01650014E555FB6C43829D16B8AFCFA730C0D910A61020
+8140A2D918AC80813DA9C67C2C6B3CA1BB53115EBDAA0B3CB2EBAF5DB938AECA
+119815951F54CE148D64844516AA4B19D17048FF516C10C5F3B33C6A08153E1D
+7DF66783CE0499806294DF6928FAB72532A7A1BB3C0C516130664B2D6D5E0285
+C21978BB8AC16E106ED26DAB5B039E1DC3B92A4FEDE498065E574E58403BC25B
+4CF360BBC5CF56E4987C4C16C9FC939E824376789F96229B011EF2677D6DE8AD
+59D96B9996AF4B0A1E4A219CCF84F1CD572773762A5E69725F13FFEB701394B4
+ABCB9512C24334811951B8757A9534859D5705750CB30A1F61F0366CFC75FB52
+CA2A5662890DA557C9E1FD52A5763E2A1A58C4B3C35CA0C6201169995B98DCAA
+E7789539F4335566644E5E1EFF07DF3D0BB5ED9F54E7E46272D80BA7EF73B5FC
+50D05C8E3F2963FF15F22DE6C9243DE4317CFCA8515F5CC8D0E3342DB81142D4
+FD822AE9F1054C80525A4B918DB6120387263BFCECD948BE6161B7DE9F8CDD2E
+4716059B7EDE5C91F1A80236419BCB3073D2238C47A773D0FAC685E4BD0B504C
+F190FA4ABBC001C639DDB5075ECCB53EB53A41D99BAC97C4794F551E4A34E87D
+ABA419227FA74659FDF5F5B934694FE5BD327086D7CA15E88ACF7D5E041708C9
+8C2C12B050DAE9D1E112AB3FA5D91BDD00C42E0C03C03FB74174D9E02D6FB3E5
+80044FA5E9D9EE05BE46D6D1FAC58D9B720F5584C67969613511C5ABD9B5B86A
+C65732922AE2366550E1FF002C2B93C286EC8BB0E1503A1F14A011A0CF82978C
+3390FC3AC1AC2DF0DF14AAA60460B80D82306DB1A420C9F03650AEFCD8FFE836
+48A619D12CE2473670FF6310304CE2D317E6C7C4AE5A0B1635F66855F6C89676
+2E7FABD22FBE155D1A2C5A11C76A10695FBDF4C347CD9B8CD07A20AC88FCD513
+877987741CE4BE714804073767DFE5B276E325F1C62221F4730BA23644717206
+131642D598848D3ED015E30DA58A7920035A61A9434FFADD6EF7C4119F7A3967
+E71737A64698C4A0D1A20C509BF22B1E00A353E4BA2C309D6FC8EC57EB89B7A1
+3FDFFFD729B690A6D24A0BC71C6B72D6E305A19BCF038B9058F20BFE39E4D45B
+1D53C68F4A9C3B31CACFEC2982342DA7491857136FEAA880A1827E80CC4C1D1A
+0777414C68B551DB90F7E3176456B615920B6F56AC7F805E2EA7071BDD50115F
+9900152ABF51FCE0F5FE546C75C5C75DA556C0BE01B1BAC49FEB4994B8D61CCE
+303C2A58553AD31EB9C02AF6A6CD50D4CF9E34B1152B61DD0250BB40D7ACAA03
+64074FD026AA04A3C49B67A70D915A1C05CF21D91B1AF87EDDAEB1BC373AECC8
+A6A14A8F465D4766D3C7FB27216207C6D93AEF8E5353C6FDD6E0356D4C87A530
+7910660F1EBDC5B1DC85EBEAA9EEF36CC8D2AED67E42EE0C9CAB64105E799680
+0B2CB3350F8194910480F0435971FCA6154C2501CB9251E4CF2B37D00F1D80F9
+303B79FB5A503CB366B833CC84EE21E0A6641746813FC96281AC600E00544049
+A1E208E333E1DC640A34DAAA186B312EB6D5F8284B7F94B980ABE7972B988FBB
+D562C51AEE661A699DE631CA76F40E85FF848FB9885161F11CC6ABEB5B3D6FAB
+D27E57EAEE1803DF0B9AE156F877732FFF4A86F5689187641D296B6658F52993
+181A7610DEBF37320B355D45BF44217F1FC1A124D3C962465B32A94624E5729D
+E168C57E98744C114CF8DAFAA5D3CD3705D10CCFEDF9CE2640183CA4204C758B
+ADF722AD70C1B9D1F9E68540E8D63BC3C918AA0859935B78CCD0D7D7A45D25AB
+7DCC66887B305BD6908AF3F5418CA41C43F0F5A9580D17A6001774B8E1DB4A5E
+96992867E048E8B3C5F7533E35305106E7EC6465504CF2EF1D57E7253D400ED3
+4EE06A8B8F462974204E5FB1DAAD6AD3BDFD2CD64AE8741701D6AC1FE78183F8
+78622799D4F3FE60732D97AA5993A832C8CD2DFB2224022F45F340BEC5E9E832
+B4CD470C1EE990962EF61A2D41EEF284C62EE027E647941522BB5F9F9C608827
+2569970192B32D8CCAD5E090A5EB55853BB2A7FE3A982326AC7BE414425DB460
+E54409225889675B65F666A1A8DCA63A787D308799D28BA394F2B38451E89882
+84B59FD092C0DDC1AC4A2265D1BE33FE548871CEB8AEEBD84B53A4231A72DA05
+8C0E71C54053FCCE1AE51479853991112B672DBA938A97749154FB0B3557CE6B
+A8FB54F4D3685DF1A82A7E51158929215FA322808FEE9B17E02D02947C47DCF6
+FF36F6ED59E66FA1BD04AC0AF2CCA4F525AEF758677F5ECF2CA1C892C7235151
+E21722C2B7AE48EC3D72292C3902039F5EF205030B2F4B333186F6A34EF42FDE
+AF32BFFB7082D67DDF250E3AABB0B3567DE1F4BEF5729D280CA1258CDAB72E6A
+28963014D3DA3B68C2324B6DF2B13DC89FD6726C993A22CD74EF13A4BAB6849B
+E7CB4FA37549AED5386AB76771C2C8E95FBD3F6E244525C048BC50D5A3A1D22E
+E144EE66054AEC0FFB6C8F7D732559E032E217943641B4B736EF02514C6FDCDC
+0B82D54898E44DD745228ECA6D2ABAF7CAB5035BF672B7F2021C3A612869180A
+1DFB2DD6F7E8119B5253F61A49473F9C7D35521F10CB64077152D0D23E77912E
+7ED0B2EA1D685086FB16922E1FB7A91EEE57CAA764978E496BC56A69812092E9
+2DA4D04DCAEFF97B267BA8F7EE5154023B7A3BD80EE3CB0CD404049E0C3D16C7
+6265461EBB8407737D2AFC07162D23FEA093C63019BA6B85E967DD2EF2C97E22
+D61B5B845678AAAB99202C6CFB095B6B8A1CFE72F07ED3DD17A14A68980BB8C3
+A1E04633FEAB19789433F08ED91577E5E2491FE93EBB4937FB4034C8EA9D2297
+AF8E11F48CDD0866E05843E502BF63E044ABBD801D8ADA842562FF23432F7274
+0E668DF5ABB0728C7D64E626D42D416216BF6229C4A5D0B4F784486E777710F8
+90EDAD8F2444B45166313D1BEC1B9AB520486B987D7C4F476D445B9DEFA5ADDD
+584C6E301B2215098A05AAF9CCCF3BE7EAAE9B8B33C3C4C917DE6441A14A5A44
+248893527BC01375F774C0FA90C709684A3651C87D5AF2515C0D4B2AF2D97924
+D22FBE194A13DD9B6158905E370BE7F1D212D2CA186B673FDCC5356015989411
+A9609F8473F78AB75C27EDC644F8A460912EBD78DE25C3F7E814112F20AC1995
+B8D720AF2BCEAFD2F30F6910410D168E80A2E8D0E6754B0BB7539BCC15E225A5
+BCE15745DD67E2221A3CDDAE730917FB0563C909B7040538B5E7641C17BE6FFA
+913607BBC5F85B0D12ADFABE7A9F8965D10651C94BD3D1905AFA653B850C9553
+73C1DC314DD89162B9B109757176652CB42673EFD926676E9B9195CB515FC34B
+2812BD7D069B627ECFD242AA9498606A2155D175117BE9926A854DED16CF4F25
+31D7FCC8A0ECEAB9AA6D0C880182E8C3218CA53A7628EA0EDEEA367BD1F47DA4
+77031FCE672A66479BC6D5A12B5EB6D2DC10C1B4E10BA2972B9F3E1806CD9564
+D88955610D1E80A6E5278E8BF1F083EDE7933D0C5525F6114C5BE139372EC6FA
+68D29B1CE6B485CE5FB423D80E809C9AEA33F1B43E394B463CC33DA07AC3498C
+D6532C3ED58F7835EA832174189FC324A7867104B1E8754A06B8BD9B6581C0FF
+49906BAC92023F1671A772F0D21EA57DAE88FF2B7727987E3D3EC475ECA20D31
+BA96015904A963E248E07AD608D1B34145F3EFA1F69E6ACEAFD78908529016F4
+C72C03C78EB7D2C67A73A5BC2D85810994CE916B53C4C5CD60E58ED05F9C93AB
+F06BAD33A15C332384936DD59A9CC3D409107899E096B2E7AE02EDB5ADECBA2B
+EC5A4F170204BB9696D4806F0B3099DA4CAFE2D2E529B1EF17DEF2C4EA306AE7
+30A357E94B8028EA6850C70483213C60B3D257150035E4C5E32060AEE2533891
+09C35861411A23BFBDF36000F9DB23B365503F49BCD2A134EAD32C2C20DDF725
+DDBB02D89A616BC2032B2C0666B33715948A160E80FAB4ABB396D662716FC1D3
+9944DA5F7AC4AEAAB838CA3AF620151BF840F22C5075661BC683410C726B6C9C
+18EC021306F335622395C6227BCAECC714FBC9436F67ED4051A4F51D4D5F0843
+968F59A7C871C198B54F92058B67E73F72ACA89CBF2CA6A2F7ECD4DEEB154FAD
+706008B1174DCCA69F5FFCDBDC1C8E9FD454996D3BC830CB0F13EA777C349978
+0B18E4C33AA64795C6B151DC2546A9D82AF3D8E6360066F8BE15A8431D222E97
+7926CD92541669A89B976F9781C543BE5932E9FCDFB7F114FF576D3315BD3B4A
+F7C9BFA8118B263FD5007F7DAB616B6EE04683E03E456469890FB878F10ED1ED
+9C034FD690364078F3E03DA910ED833F50BC57834916A7CB65BCBB4BD980B59F
+6FE0CE4D988F936B13ED085DA2729D1133F9C417DD2F663DEC20F992964519DD
+3555825693AA815D60DCC7B4051525C246E9AE5887BB2D6C9EA20C8485C037D7
+1E4672A4392112A927473810D13B861DCAC2D9B9CE04519E1451DDF8DE23AAD6
+C2FF6F8E7AB06832298BFEC1D28CC39F204C49A8C3EA2EA3D1EEAE27AAADBE25
+BD0002C336FC4C4F91B89AF330C2230274C25BE75503458F945C2FF8ECAE6AE3
+ABB01D7A56C9D7B052F1B9386EE9F656ADFDDD68F10A56891BBAF42CF3A81BE2
+CC98B4B9453D8ACF30E703580BA2788C932D6C9C9DCCF8868E98B6EBFB6DAB2D
+33236A77CF940210FE27E796371B129540723C2F216BEB1A3E240A64797A0B5B
+28B2EE3A781069FC4C7AAEE3A57BC008BFEE473CAE86AC4BA1996119246D6706
+C114C75D6C0318A5835E339AB8E68E586C15FE50BE15B55679486D3309468289
+1AE95CB9AB4587DD7443AB38CA7C19E2087123EFC4FA2E48F4FE6B1BD18215AF
+416609AA9D21E3039C419FAAC1EBDCAB2D5298F58CD87DCF781203BA4E44438D
+4FDE8BB651800AB50B5407AE224515928FBCF7337082C2EBE189C0A614ED9005
+ADF8E44D77774D737F880196EE269DADE0802FD27132A03AEC7B2E3450830B8C
+3A5C6AAA02B76A42B3C01BD3C0E36F58860E67CF3DB1B75CE191920ACE608FB4
+CB4C2C63D42F78490DEEF35EF1AE6A425ABF199239E6AACB28D629648ED118B7
+6AD6529A182D3ACC8A27802054FB55E5063B3423536EF4347DA38C7644CB5449
+DA861CC41056BF3F684E30F7D4C8C270420038650732B777A13FF01BE5FAF6C8
+8A8C8F9A9463BF9204CB961593C1604E8A8893CC655AAFC06AAD5B5ED25F32B8
+BFA326C2DB9FBF2E63F15241777D4CF02F52232DB36C8004462DB106AA2AF3D9
+29997EF8567794B7DA7D6160A6373E2AF3B9D00EC0100B4D024CD66FA9214E5E
+2BF5FB4C7BCA4315670FA0103BE85FA49BFABBE99CA42314AF2801D028ECE6D6
+B52FA6A21AB3CB83C79084A9C71516582B0C5C53F7346691175CB7F437533A3B
+8A66A2BA1EFB4A3140079829F7668BB4489076785AE019C21FAD154FAB6C30F7
+D190C6B2FE6A52457089688A60B5B168A138332BDE0EC9573228A76E94EF538F
+D4AB4BD467787BF7B0192DCD536F8F88CCAB88891097120E2D77ADC5C144E202
+EBC4CDA18F43A475BFA9455E7E44230CED292F75D36AD92CD47D7008E3288ABD
+18FCD0F77239D048AC59D64B97EDC5A96F518ABFD6FA203A55EC4976489EF969
+ACAF6A34E3495CA4D335530791757EBEF5DEF56929884734F7B7C2DEF6269715
+6C1FB90DADC1A41DDABF8F8EDEE0B6E78A42B23D5985A5BCA0841B964CA15746
+EE1796E9E65DF0BDFFC97DB2CCA9B11BFBD78F517AADC23D2A94792FA1482D90
+CA8E0111886C9CB6214EF6A55E75D61A8A8ADB81500B03843CB7D440284DA069
+D7E39A8A5F4CB43BCF71194B85AE7FDF7873092C1AE2715A487958D08BE84EEC
+46E015BEB68E5FB8B58CFC404DD4012E0A72B3B3D3B3BE14349DEBF2D684C4E6
+94E276891FCDB2E072BED7277B7A03B424FD231EF02A472B141E89E504428BA1
+8EB5F5D3917664113643CBF1D9DDAAF803B1FFE91D29C4B00FF725B1A1382454
+51D47A9537EF8043AB429DF4A4DF0ADAA648834FC1CB68EBEE8BA3A78C55E316
+9D4531B98C489768E228D11CDE5228D267D8B518DFBAB4E65597E1E6CF6618DA
+3A6748B23E4887FD7723EF2EAE06263FDC8F588DB0538C43210ADB19D1FC00CF
+C3532743621A5B7EE0F0C947E208AD177EEDA005587B321C91DA2EF7558D8FF0
+71976BFD6C20E65321F9876675BF4E85C985992E29C0E81DFC148A5669BD7AB1
+D2B8C5D7567045665A0BE5AB78ACC62DBC606C8BC8BE72668422F7C34453F79D
+1D139BD531AE59496BAD8391A28B8F90A796CE140BB827D5B0F400239513C462
+545D26FC79E1887065AEAAAAC827D64093B631C21C9EA4785463E7F0CB4EC970
+E77A97EFD96FA07BA7948F8E0EC73F0791D7B43D9D3132230683D9085A663965
+71E1F854A9A63DABDF52FDD089C9F4FCF15BD7B46BFBE6CF0AB7C5B88A8592CA
+C085CE41FD15F5CDB0A754B4E74E72C0C42D1B8E31CAF1435CCC9CC7A5057E98
+EBBA851DA97723F22079BF4B0258C85C2E1D5967F5FF29BCC9270BE86E59585C
+2E929A51A9486AE925E4DC135F4D8F20CCF716EA5364A85F9CEF91389E9943D3
+EFEEE6B35309899900D3844EEFDF773D4EF5D7D12FF737F0BDA0438FEC8B240C
+2EB9F4B8D7B2E245882CB8CD1E6DAF06C28A67994D159D4C88D2F0B0C0D23B9A
+4C1ED644E00CF218DFEA43DDBFAE046EEBAD0D332226058AEA329BC85F69E9B3
+1F0CC47264196FDED22427A1F88D82B4BFCB46B50F6DBA87DA83AACA9E62E69C
+D71479AE3BBB599ACC52D3983BBEEA42D1B97224E620A22BD378695C9BA9CDE1
+0509FF5F962082B688B786A3D5D0C5AC21CFD09B85934C34CD2448F96A6B1807
+A98AAB7D2AD5298A389256FABC0FC62A0D85456EDA49118BFA5264DD037CE55A
+FA985E515E591DEC2623F204C4E7057A6901898F9D8964AFD57F4B0D4AC79F15
+FFBB35EF968DCBAF5B042FC8C57BC91FE91B4BE2D773082B118C38A57A7FDDBE
+03779C4EF91266AECF14EB23AAE9075548F9A9D6BAA7D7BD3B771BDB6F37BC48
+3985CAC11BA5E826741A3E8DD6B0320E68FFD39B9E4A287A4AF340D3738D96D9
+8AD44BBDBE68EC122CF3A5E1A17A1A5C5478BF91D9F9F55055DA8AF421845771
+CB36B067C263BE913F3C33880724DBD0242281D8735593F13A8C4EAD2ECF7EB9
+0C8C93DB06CCE8A05447405A7C43CC6F92FD49A4CE7E943FDB747B9859B9F8C4
+90588C8E489646E46866E82ADEC333014E6E8A45F0B496FE54AEF91A15A2E0BA
+836AD72E6445F91E0E06DD4164A97731F59B60B1A46FBEF80395858B1EA75F7A
+36B246DC095555976C546D7697AF32D31C83C4C0C5D978B0C62B93E1AB2C2F48
+0803157631A16B5E8FF34A9E756C6DA2908815C9CD14143273D15472013791E2
+1FF12FB88B34B0785102B169807EBF77189EF85107151B366716D016791E2A97
+C2E9560778A1C54616E7AB057E131D63D2465A6E0B0C55B50CB63929534DDA5C
+125E57D805B925A4443F3BBF3D16D31BF812A67D8ED5A6A72946632537E4DEDC
+D0BAECE36F04028EE2E5C9695383358D855FAF0749D6AF131368C3ADBBDA756E
+95A5A9964103BEA1A561186239AFC87694206E6EDFF49966DAC73CC3C13DE343
+7A5164EBF38F0248E1AFBDBFA0CE1331F97C687EC8EF077FF25C58D11A0E7520
+4A111D5A90D921669A55C92E905408855A0C99103E42571D128FD0EAFF03E970
+6F3A79F55D018C03A5369F3EB50AFC61305237D340E0DC24B920EEB8C5F6942C
+56D3CAE8F99B9253A4B1B9BD61CE98B2E95361F9D97FAC2F4532F1718D374D0F
+092F4666453679B742938CAAA9FC894B4C59EC0940D75D38257B2CDE928EBCBB
+7DE583835CA1D6A033AE0341674FBB203BC91F46931C660642FDF9F59D46C135
+4E5FC1A68734F63083B9E82EFDD074ABBE9B5AB9070C77FB9277606BB5F656D5
+42A4FCE98ACAF597D51A1EE37B081A9831B2B50A47CEDE7F2FFF6F4C640A05A3
+64E0DB2BAED6EBE8A256E6A8AD22A9BE340F3C0C8EAB1BA9ECFF1B882B73C6A8
+422209057773FB6D6C087AFEBA0922338CD73AB2E809D91DBDDE557D4C512E86
+A9C78A8DD4D22C5A9D0E6BE107AFC9A3651557279334B60099F574B146D07552
+F7D49EF1476222E376284CB2E8E73C2D4418F76D6849E3048A5B2E3CA30F9436
+DF0269D126118A00826639E44B8631D092EEABD03A33DD031F274C16B1A615AC
+ABD91CF310E2D98B37D2143241295CB6B43EF594CA5CC879634A6927B00153F5
+1A94E210F3B7FBB99D8A1CD56B4174FBD35FDA6FF6B1C93B20D730B43691583C
+55DB97F1A06396E8B3AAAE294D5E0D513EC332A286EF321D22535A5A7C107FAE
+081B30F5CBEB7AF8BA1D69A7A7E4E7DA3F851DD3AAA0F70C3C24EEA69D6977FD
+795BAC0B51D23D7876CB7D34D476F9AE4AA88D2AAEDBBF9A9D5D4D298EA951F5
+69819F2AF82A3630D55E7DE78DC8335E54A07492A19A13DAE03BCFB7353E27B8
+AF54163020D3546D92B935685843B61043DFEB6CA5134A735CE3A205C3F29825
+A6C758B203F7EAE65A7E4474EBA34ED704AA223A2F809626299B9242400E42C1
+34D679E57E1C954BB5300CF19E8BAF32801EEF461F357287D4277FEB2DBBA19B
+E783CC34EE84710E6C8362D326B17483599767846AAF663E6A7B89A03FB089EB
+7FD4B6ECA63440B74CC49DB2C53C0BF574D83233689402170A1375C3B23E0786
+4A52EF9F53F15F871D5860F4B439E60CE6E821FA5225F57E5B28922E88185167
+9989A4589D992921FE039B7B8118BA4615FFFE61693A75943A77BE0724FBE556
+ADDDB26D68D9014A365ED3D237731A11E2DD7D9AA51E3DFE4E1C40E0D1533E7D
+21E4C4625108019255F71968EF2F89BEFEE4E9BE9A4B975DAC52DB0E3FC24FE0
+BF0C6AEA94DB4DF19A7964676D72C7706DA7FDC9ACCB80E59E0C69B60A71C18C
+D15DB7EF042C58DBB38B63C81B961787D428DDCEF02B136A7EC4DAE53AC4F1B9
+BA74E3490C0C4D99742C777FEB8E2558CB627D78E5FC42B87E17AB389967964F
+6AB51694215582BCB587CCDA2D1AFBC8E30F56763271E55849FAC7DD65EECF04
+243204403EDFD1D4A4FCF30554D254A7BFF1693623248E04788897E45A72964C
+6FA63E1A9E5CD923104D934BAB99ADF847E2656B739D4A5CFD3DC7ECBC5E6148
+4084013ACC36D4BE9E7100D663551B64E36BBE99FED5A3353F976C373205B7E7
+7F33363C29A5BD36932B50E9BFE2441363AEA85B32F3F0A1889B795068187B85
+FAA0E5B34981AC5687785DDE5D8FFEF98F82C1C4A6D8D5B1172F121B13DD6C67
+6517E553E70270BE7D9ACADD018AEA11239ED14A5501854385E6A40B03E973DC
+1FEE444C8050CD4CFB10245322CECC1F0F237CF7A1B3BEE10842B238D4693EAD
+B57592FBA63A955D6763EFF0A007003A602FCA61BE2434922A811742DCD6E65D
+5C5E054794124C14A81DDA7A452B787C6F2862C3857BE32B71E43957D8992D91
+2DD8888D7B66DC2750615B8644E6CD2559BC1178028EC68D66CCEA96FB62DEAD
+AB30C790C5736B44745C89E3384FC18444A3135F57216E1DE5705CE4992C7129
+0BA6042F3A1C2D68D42FE579D48E5D71C79EE28232D79C1490A69C3827D1586A
+F3F54704F98AB482599627BD8EF83362D4CCA5D5ACEA99CD0863933852E6F0E4
+9263657CE5F3128FA8B4970BB7BE185B0DC3351CB99E05ED3E03C8BEA7F66BFA
+2FD54BECF1E017AAE03B1341F384D8EAA51D3E3D878EEB587491B60E28349123
+C06667C604018CE1821FFADB76CB0BFA9DEDE0539E9AF61AC16408D6732FB860
+93B3BCA78EBD0BF04F390D4F88C297DF5B973B2A76344EEC3AE27730999F7E20
+90950066C9AFB641E8A399C9EBFE4C42F57F965FE926192E24085D4487614EBF
+163A248F9A2052CB37A4C3DC5C87396100CB079CD1F29D720B3DD43E832D229D
+CD1856FC52C5B4A1B41B66AFD8A194BC7296641F3FA7023C5CC9559EC0D2389A
+2BD806D255A7129BFD584FF4246B092B579CF09AF23AF59313C9353715B3F9AF
+920F8AF936DFCD834AC0E3D6FE2AFE9EE678892DFD49889AB8B3A98318DC9C41
+19F9F06427D3C0842C7B1297F998A4A418C35CC6E1698839653F30CF265342B9
+5D489655750893D1FBB2FCCB3416E0A649322B8E07E0AA99A549356F20624E4C
+C1A488BE36A1FEE7D46AA360CD8EA3434E24F70C8B65231C45563AE589DB0EFD
+AB15D028A6B11DC7F05689005D36BF7448228327D6EB5EBE192742301C9FA0D5
+F6B660AFC5B1419A3F4759DDDC5D189573658911078AE51A1634D472AC03D419
+801615D6C3C5D194F80CC92CA2769061E9E130049F22032EA34BA39A31FBC065
+9013292C481DFA698E2417DF30BA6035E8B5686488B1515E99780D2EADE876D7
+31041C0C986F31495B7143C249079DDACDCF4A2E7E83537645AE60D68291254E
+8AA4076B44068AC5E6980C3FD91636A2725188E623C5637AE59D839DA12CF247
+09FEEA50307900AB27DB9CC9CDC88A25E1D78EAD90A7DE78EF3045F0CCECA7D7
+2975998866837777B5D9B9895C8CD1C494FBB129C4D02FCA23CD9EC08532CCE9
+1F262A97C588A09FDB1464DE7E532A3129C65D609C02BA7FE221552601F459ED
+FB88F5CFB4A3EBED73460AEAE2669488B528176747E4067A7BD8F85AFB3BF237
+CB00F1C0AD0AA5E25D8BEDFF7C8A4533B56B51D82C204BE683A235B8FF0CCB8E
+46FBF025A784E6923081199AE2F5458E53667B45074606335F34EE27D134C109
+0F8CBFBEA45DFDF4199A27301BBC190562CCDDCD54515CBCB9439245AF95C620
+1764B0FE0E4C46CAC634292BDF57DBA10E2043A8BA45D8FE670D01C588C48AA5
+EDB7489839B6BAB1B6F2AAACC921B8E26135DF45942C3E20E8052549CA6B186D
+F4D5BDA93AAC2DC7F23E50A81E700EEA9872C8574202F1C183D7587940E38608
+51D165AA7E8474A2FA78A9EFDE259C74DC837E82A8C1BDA65614F3C1605CC050
+7A9977C5D078D45F422BC7E327C62A43B80A127E623F8400CC55FB45900CFAB0
+88C6246A4F05BCA3A0AFE7352F0F2CF77FF5F001715910F8280B356A17CAFB78
+DB43081520259E452D79CAAEB5603A2B6C9AB027C2799CC51D081453C901F424
+6838294A51489B38C8EDDF7C6C903F232EDD9951F4151254B953E00115121F92
+5F5FD9F91BDB704F7717183C9C55C21807FCCCB268B93751DD737EC905C8A9B0
+98910693233B856ECADFD55DDFDFEAEF53F1FC27D7C7089DA7582A583F425C6C
+DE8CF462400F9FF1B462787D0005A05F16F5904D1D10B0C60BC364A307B054C2
+E9E8D931B3A092535AD45D70265AB56D3E4403C7D410BB83227484D16E10C9A7
+52EA004678CEDFE2C2835C021F46E347ABADF4354E04C35431864305AAB8D7C0
+8776CF6239EF485E44F14C1E616F04D98627897D310FAF339B00F3019223310A
+60641A172E0831EDB572F4E7D85BBC15DF0448A6DBD3435B5FF0A952DD86C0E7
+157A3B667BB97BD85FF37BD0E12D65D2D7E5A33DC12764720734815B65302351
+5B03174E29B57E3216BCD3F2B81001D8D625FFAA375B4487478079FFE5F0E21B
+1A90AE727938630961DBF133B943E8A45EB061DF80FC718D35ECC246A24183F2
+43861B1258406ED408DED145F18D4CCB95069048C52AB14552BDFF1CB1F1F963
+6531054246EF3F3BC9D65B36345DFF7819B8949515F2313AC76B0F241DA78099
+E82A60D2BEBBF180E744C06F5F8E8C38226525FE21EA8A6CD551D94B15F0B8A5
+9EF3FB5A7F2EBCE1C29414821CDF3BBBFF808D4125E38D05F77E732EEE0E0CB3
+509229A60A80F475D61844189DDDE1F980D153F9F374B710AB3B96FD576B9AE8
+178CC951143C0E8EFF96B72AB4FF837BD334D2A516EDEB59C1E6CDCFCB3FD915
+C446C459C028EFFA658A6F1E833682ECC949E8D2353A24ED34643D348D16B4DD
+020D8E8DC9E989BEC200429804E1B8161A9F7FF2DB2BC00F25BFDFFD02A5A82F
+71F4678E5E5A8F6CAEDE2A3187285FF305C5AAB49B85C3A40087A3459E4DABF4
+145B0C79EC8AFB73E22391AD1D0DECB592354837433E6DD2057B6CC9B330AC18
+4D8C09E732E5E08EB842CE59BC1CAB5064E019B265E75F5457C41B811370030D
+4E81B1D9C66D9D60DAE4027945F24F144B5003841881B8882D8E333E7F7A3A7F
+F857D2F1EE8DDE2A6D441763AED454D51BC3428EB8CEDBC31FEAE877202D7EE8
+4C2E39CD808863A2E56930DFDDA7796750F6C133A419228BAF7ED0A19A3132B0
+39E641CAAFD425F43B1AEEDE1FC34517B97E41CA66B85EB35934ECC22B75F595
+CD0162C13EE55BBFDC923AA3BDC67CAEB280985C5DF695B81FBEA93E39E8E18A
+09377C3D7A71BAEC59E0491BD32EE5E9B0678FD769796B4130F0DBF715E18137
+D02B5E851DAC95769FB5C038BAD5F4AFF7A77A0116B4E934BD06FF3C39F7A971
+5908D9993176C289C45F09C5D85DEB820CBBC935BC15E22A8CC0633904BDE106
+01EF4D1BF93D558582670B2059463B5E1D9B123B59E983DABE5F9E4A2C863D9D
+B3254E1AB66A7F40394866559F0CF497A068A443851A02640762FD4010E6BAF8
+CAC3C146CBFC3ACF13F52A82B5867F1521251AC8D7206C93552E68BE284F0CF8
+6117F8B806C05C2EC35A1253F8DEF2A35637DFA8B65C316BBDD16BDF3179864F
+8A89E92B76B761BA884AB48BBEB92C1075CDF454823F9264F9B028CE06320F1E
+996245BF51EB4803E2D6CDA5EFB2153D26341F0FCD5DFA11D492DD002CFA5926
+1F1522A7645E6075D38D9D50F3FC54A24B2AACB2D4A0FF8BF1B43C97D7513141
+B828405C4D6FC4CEE5A4B8BEE106BFA1574B356C2BA95EA5B6EBCC5308F87AAC
+E3E789CAC8FE3D7CAFBAA3A265682CE80E227A5C8B32ED67359D35C88BA03FA5
+DDC4D534D835A4C4085CDFAF7F2CB4E83AE70CE0C2C30B96179A0B8B73E0B1AD
+16B7B134FAEFDA10FA5CF744050D7EF1336C335E4C3FA6D4A5B4C860F7AE1723
+D22660832E3B3D4F40E6EA7E85268D654F82DCD6B4DB7C5D27F4EED055938AFE
+A7035ADC3A8B1774C85E1C49360C3335B33E46BF6636B93CDEAC43913625F72B
+56D4A938A9CECE709D59EBD4F09C2AE6652D81D825ED1AA3A8D21F20EAC32A32
+85862B555A52DA2EB5BA78154E3DE2D7BE7A1311BA3AD091F7DA08BADC926238
+080920CE8E320C7F77AE8AAA3B6EED7A0C401BFFCBA8680BD4F5510B2B19C94A
+E39A1118FB5848F30A401229BF01732FA0B0813CB092BC4CCE395357C3D361D6
+BD39C35DA23E57558D02D71384092EE97CC093F167275773DB33F7EAB779E614
+BC0C4CF4A98FBDADB230FBC21A134F0BB7011F03B55364EF6029A77997EC0A8A
+7F109D48EB7F8308F2B2379B959DD5A84C2B19A7B5C887F16AB0E5FC30EEB9A2
+70E77EF36E155B426EE71FA1F4932BBE62F77215B235958FB97E4A572653D49A
+D5DE24024D06E5EFB629FBB27039F9C52B63B7F8041665A09D760B0725A59DE2
+DC33D08C10F4D32D33982DF3FE18FC75B0EA2074367FBA4B21F51826FAB40E3C
+F1E299C7757D2E6BFDA7C6BA8617590EB6E8AA4EB56762A6F9B0FA9A6A7EEFC3
+607BFC
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMBX10
+%!PS-AdobeFont-1.0: CMBX10 003.002
+%%Title: CMBX10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMBX10 known{/CMBX10 findfont dup/UniqueID known{dup
+/UniqueID get 5000768 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMBX10 def
+/FontBBox {-56 -250 1164 750 }readonly def
+/UniqueID 5000768 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX10.) readonly def
+/FullName (CMBX10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi 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 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 70 /F put
+dup 73 /I 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 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 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 119 /w put
+dup 120 /x put
+dup 121 /y put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43B233BABF23DF8DB
+B6C2BD2F04672F9A3B7FE430263E962F16A948319C51B8ADE6E8A80D3D88023A
+6DEA4D271676C2C8615C4A0EA7DC8F6601610F398673A4D4B905F49EA868FEF6
+39BE073001A36DEA6C08ED51452F062B971740019692E221F4455EDE46AF24B8
+407A98B791F6AD525C72C09776247E194043281D04FE1CD1D8AD8DCEEC3045B4
+F95B3B41CD3300768D8A049815348BD7AC1004F5500817E3A267D694AE108BAF
+285B288FC5F28A03E9D34FE5D9B2F9A9BB26ADE66B1CF8EB5BE606E83D213C33
+DE083C20D636EF780E761944FCE3B8A950B1E6E7568F33B557C6D59E0CEAF185
+53E609A4F58AC4D5269116F958C4D115C44B5A6DABAB79D3BB6E60BDFCECE108
+74CFBE258779F32C80CD7D9A7CEBA50A0966BD9961F71560119668C4A0C30A5D
+ED91ACB30940502B24F33906D6E0F16F81DA87EB6D7FC8B7853BE388C40D75C2
+2CA8F94713AAA1561F5321CE97997CB4AF0E37F44E25B0F73CF4986422B1CD89
+8F861CA623004ADB1C28268D7F8C484AA10C9519B6AEADC95AFAA3304D60E85D
+718B2F67D2B734095E5A92C90785252C98067DC05137BE735220BBCB7C341D61
+C4B98BFB1EAF883D38D7A93195A059EF82B42027F23B6CD633231D704B891A9B
+03D11A646F13898F20321D7BC150C63FD6DC6BF9CAFD8DA759E95384B729A0B2
+767B9F3E55C682F7A248BC1184F7D294CFFAE0B246DFCC8F215625DDD4F49F09
+FA8D41CBF4A06152FEB152C61539ADF7E70A4D23AF8267D25CE3B12D39D62377
+547E2528D18DC4134FA3BE0437EE0B3509223D71F06D44C6227D62BD01AC0A2A
+3EDA975E894371C07CA1027B102549A7D552FFD25ED2DCC68E29E71BBAB43C62
+57B0BFC6A953ABC2EF703F35D112F6B5460018CDCEAD17F149DBE5B52C2B9E10
+9818EA6D97C8AC884F6841C9B600A7D868F59C1D80E98DE0741D06D69858EC84
+1B33C6C9938B7E8A6FF6C12AD456EECBD3EBAF0D7331536B9F6422019FAFFFA4
+822E79D6D89D6366DA636CB708894FEF904F366E295F1CB808E78E883913C4FB
+1631248ED6A7CF1095C0C61C4F05E4B9DFC47533A5FD24540AD71A0E2907B98B
+28085EB88ABFC3478C9644594C7DC4244ED5A7C1CA8D960B65497D56D174645A
+B88F12C2CF0A807DA314017984CF3C4FB7F47392A651EB9CFA961B28E2989893
+9FC4D97171BD5338673F5D1CE2C3C08D48A1B77769F01D5058236C655FFD864B
+80E28F900191D4EB349AA5E400A7B0A0FCA0F3E79D7A7C69775BF754329397B7
+D18B20B2683CBC4A19729BA878B3C17EBA0A7E9EE297A5B67E915CAD92C8F356
+582B8299DE6A58E73408F525F7EA895C48A8F0D626A06A96A50348DFBE479D89
+4272576FBB0CD332193D28A8F11503BAE98F8E1D73CF5BCADF23DCD4E6586ABB
+323568F5A34E359661074D50CD8D9DF27191FCE24F10225A5D721EFDE2547E1D
+CA998077D2340B1A4ADFFF570AA677CDF3305D5E3A394BB1626EB35074D4EEAC
+2F037CA2EA389F7683FD17A8E07C12B4CB3BA8C249C9B12D297C618009F76717
+0EBF5F2DD39A6BDA10A2E5A811D4E190660F5FDDBA29201B6F8042620397AB2C
+E59267A7247B0463891831A6F40582BC3F614E5167B646A8F53D8A31717DD9A1
+9034034E705BA7884F0E0738307AF69D3517147C282747F2788462FDC4336A4F
+9CD222908401A25F0A1F7B13B8DAE622DC965AD0BE62497420B70C04AF432237
+E0FDD043456187658ED93B0F9822A3998511DF05E59CC85B7B9992CA0CE3B814
+9723BAE70D2631F32B4BF93511F67179FFAD2075E1591CA5907A4C67701B56CF
+A5E5B02EB4A842BA1F18D6864E5677359C2FB4AF5BCBABAFB053F230CC129B45
+8D15413F736EB07C571521C7DE2A13F2AC1C133D491B0A607197BE9AA1231D96
+BED7968788246B2E4D2BD330F802810F5BDA3760FEA5210CFC6F54748FB1D921
+5CC3624BBA5B8962AA7D94159651589540B17CF7A785F297264F9C1006D36928
+6E2756D3B623A6087E4B106FBA76255903C624C07E18A1AF4E185A533C640711
+86BB477A906ADD36EB6C8F4A12BC2F01B2B98412E4E105977640930CD998D990
+0254A1E5E9843B7A8ADE0AF6D5871E6D3D666465AE69813A2E26333213FF6713
+6F08D55A90C079A56E1B9AC655F720FC22B5AD8550FFF26DA7B0C5A0B60DDB05
+64E8FAF684F3A455BA9BC9278043D79537D201D520E38750335A4C8FEA887377
+879331B68DAD6B253F4FF9981D0F9B9550ED5179B15EEEB00E560A3DB6E5973B
+63403E4E2F40A3D0B937246E9652000B917B1369741E0F913C14C2D2D6D1FCBE
+2CEC4422177C58523715BD070002EC2E13D383A1DC8C84228862B6C5D3B65667
+9FA97E175239BB7FE7E37E14B96DD7960A8AD49DF428CFC13B5D3CC22E245317
+47B5244DA97F1DF954CED2D552477237CB23D037C0DE728E26C82738954EEA1F
+F34FE497DA005AF03746DD2ACF77F6E6F2C224862A1D18AF6F7A5DAF34564387
+9E01DBFF49F8621C058C04C2B3F4F3033FF3E8A977B2CD6B2A3CA4A6C569B19F
+C5AC457AE9AF334DA66A730960C7565E93A2D373C0E3DE14646FFDA05DF4C6EB
+6D4CA8ACCA3C3115764F77B842581760BFB9E5C0EBE55308B0577A8F4D968CE2
+BA3361D79378D451DD150C34D7E901397AC63B33BD7DB13C50D678F5DE999238
+4B4EA15BD449C46F262D931478F5685CDEEC4C4201FC3EFA607AFB8F27AF6751
+125DE42D2FE2D31DE769B7E7FD8CC8C5D91343B537139A822A5BC4160BB5314E
+37501F65B4FC35475FE9E03E34CBF6795AE86CE409500BD0799DE39FA69978B6
+EC74D2197C03632D3F59B85F404DB31240968FA75059B2581B101E028CDECC2E
+7E5E25DFA106E9B8ADB81E82BE9ED3BAA9D03EEB22B7B67AB1262DF6AF5F5EFD
+A5627EFEB84F3A5F92EF2557EDA2843D7D18C592635623CEAB14CC3620F33986
+410D6DBAEF9F86E4E6682054540E2B01D8FF2161F10E66851A188BC15BD6666E
+8D3F21709F196A31EE676D28A2D12639CC2E7020A52910F052E61A0710DF09B0
+064171D05611451BD24FAD64716F141E1C41D3218A8115A3D73CA041D02B46D9
+28C3D07DF0FB668E8E91409C8D0A26A65CD737C075E026AC0A974C9BE658199B
+3B9D82ED95E4646977D8F60717DA4C68767DBD7E8320D5AA1D5DEB2E6B009759
+8282F27D64F1F904830AAB501CDA4D9233FC2F12F77F0FBCC46E6B729C71F6D5
+E6F3EA02EC35D1048394F4EF2177FC5EB726DE5EF2DE7997166B8BE5B5105D08
+EAAC3481FC612665CA112D3F889A0E5B7843EFFCEFACA24A01B6AC2B7DDE02F4
+A9295AA2409A3756BAAB44608DACBB56840060037869455BEBA46F10AFC68DD0
+0563843DF111C6D34911CF13AA6023E5E899060B5EC60D0F78FDEF3E981151A9
+24903EB13ED1A67EA1977449716D1A5A7EDE1A2E9465C9C2B20A58AF02D9F373
+73E627CBF296B3A6A4670C39F3B5EA30D76F0362C81020A1777F0ADDBC6B52F7
+213FEE1718214087837049CF2AF00407639657428B9E8B532F68B631611A3501
+3D9DCA38090E227BD0D6D0FB4130EE866DB6B195C873AFD18DDB3B1E40F740C6
+B3B375ADCBBF628A07A5FACED539FEDA3379D3B60216C2EA6629BE2F65199D82
+FE3AE627D7C67270F3497AE75F7A9514968B5950E2D63C38DA240AF4E6CAE88E
+E25167D179108679876E7C80C85FE1D2BCC2EC9B88BE76A8F5736E8E6B3A9CF9
+42E58A4ECB7914865E67C1468CF66D658206830B9380FE346DC2DC4BB56A92CE
+4B5E4EA9036C177869315A2D9E6CFE97E3BFD7CBE0747D40CE5E8A3A0988576B
+8AD2B1E4314C0D8A0CBCA08844A49F7E054D31BA7543730C0A7390BC4A288D10
+CE29E389A4791305D3AC1BB6F77C805F1032787306F78FF76A20A9E629899F6D
+13356768D33D7B9E294E8CD50CBFB9CA02A193922BD9B4372C912D1689B6644D
+52CAA30F7421E8114D077288119AD9514EF21E5B9989CCE2ABA0C12549FDF493
+FFB39736AC9EB72DAF45E4EA6057527FA9F5AA0A1A3F03C12F7482E465C766D3
+760DA7714D56C91BDAED507A5572BEB51A895F8DD3BD5AAB042650154FC7E4E5
+5EEA6194DF73AC5EE2CBD4EE26E29B1D2D0C458B4850BFE842DDF2EBB4E2A25D
+C6A11CA2D8F346E2B736DF88A3D57BC0380B52396A6C039212699F5D3342EB58
+0C3DD5D01D5078479BD9FD10C07925556C0AB0F03606F33796BA72074549EDA6
+E33644F62CA35207D7421D2727AD8419AD1772789D33405FCDDC9286BC34C974
+A52297F5BBD2E541E8BB473F733AE5097BBC9D5FACF18DE4173B4711E28B23ED
+16E0A6746A60F6FF903026A3900169EDA87D98396E762C2EC963D89197B8CD0C
+25244806BE7CBF46BE60A8F9171731EADFC969C28679B025371E5572E52A0EF8
+B3FD9B4638D03E20BFDEC9345E70B8166D38846DCA68E0D0B4B53629C7E7620B
+45E0A610BCD07FEF8814CF915CFB11119F42407D1C6DC1E6353451D40A382C2E
+C74DF2A4889ED5A3495C3E973565F7178CA190D22C9693C10EB12C1E7A8679CE
+4AFECFC964CC98111BA4ED2BA9B10292A71D5B11870EB08EB483922CE8628A06
+05E7CF6DF93E112B60EF888AA8DB52994EC33DC7277D7B7A4F913AD30257261A
+D6EE80476A9A8D316D190BE6CE0046CBBCED365AB305495284FA921BE0638E00
+63DB2AA4C5F163340BCCD1061B469504DEE350B82FBE1689C1B65D095405614B
+35997D6F0DACA7190D64ABA351705B17B23FE2EE5996FCD607F49F54392463EC
+DD5B944A4B82FA2BE3E75E2946D483060DF99277340B0AB65A2042AD088E2B75
+BBDAB869D1940F64B50D25078519D18748AD64AC5615EFAAF4F3105B0111AD40
+70EE173ABE6A4ACE486B4E5999158A4377FDA6922FAA6E9305F48570D14BC81F
+BFF4C663E1EA9D1E050534F9315A663C4C5DA52CB02EA6408AA473C32CB0CD71
+169BB43C0508A842F400240F0063243B4C459A1FCB3312C41C32ED0EE87F591A
+BCB6D5D3830AE4645CB4D40336DB4AB6540B52E70E1EA415CC6D886827EBC5B3
+EC35CC5C136243B0C20B3C603B648B132B99D05F9B48263ACFA59A856BE74441
+FECF5C6D1FE9D1F4F9942F460961901E16017144C37E83C6822177B2A6C47ECC
+6C47A1104460665E5BCFCF08874008302750EB991CD98D0D8D22B921F90B99B9
+05EE7C39F2BC2A7798157503743C9F2F267BDBE2E8A4CDA7317F81DBF8962E1C
+EC02822CC7F770FD4D08D335904375BF0C6DAA0510771627ECB9EE69C0F47D30
+69A87052989DF80D9F4F19F75B070C3689AB3BE0966453F9D56CED6C1745B50D
+813AE6D7E44B73423AB3778ABE4CD2C4DF40E14C5A426043F7057E2DFA2DAA70
+EA6723F1C7967FECB1E7C1C0CA283334163FBE31C32254490170C3513580A552
+19A5DD75E6C4ADCB12D33517A03318A6BBC7E4214266E125140D8C40F78A0340
+1F95D9FBEC4DCC55B71E89375AA94B0D55646F6C069561480407D0A3AC127024
+D7D1E9ED6B599A2A8766B8792F46D35508B66F302D289405B101A3C6BADA680D
+8C56E2A00B766A4CB155446F862FCF17537A2BE85418E20CD77C4F1F69F70BC6
+17BB5DA8FAA876D0E8BABE273A19C04A8697B3E3CF4725E2C77C8761A9243F24
+96F8AE96399996001A57FD75106745AB4646FB9C6421F1D4EBF3BE533BD11AE8
+14BFBD6D308376B26E08E4ADA490DDCCA94BE8240403D5EB0FE3549061DFB668
+4105B4FE77189546619B6BCF3F9723E278E98D50A17DB8A4C46744FA21760635
+5B332689316BD17C966D466AE737FE3ED7ABC443ADD88D4823A10BC9747ABDEE
+027515AC353A420523F85298029475D8BFD83A2CD00C02CA07974BAA581D2215
+A850E6E4C0A5E17E0EDF91C63FAC18C70093F40FEEAF0350B403E2806F4EAE96
+BF616A805616EE55C4657418C26CAF54187A6684821B86A76F15088AC4D5B551
+66C3CA8DC61E9810858D1204F899C7E3A1754F483134609F6EEE6364B1CC04FD
+92C86EF194FA3249601AD722D75D1D395CD15A93C768EC60A486AE885683364F
+93DA00A865C1035F913FDA69E7D9A0422880FB81EC23C00427F07A5EA3CCB613
+83C859958AC53FAEA26A6BB39ABA068863CCE3D447720BC31A5136E08EE58963
+093AF587A72112D55853A1048A2B1695DB2D7F13CC924F2F0902071260C33ED6
+30893A04577C0ACF0681C0FEC23E5404F844A83BB5A2F8DE1F0792196139993C
+1152094BC36A6AE5BAB4B8281E506F485F0BAEEBBE71E174B7CED1E52A8242F9
+DBDF3E0FBA296538D964EB5B7A4E23B1BB0F59872C9D4FE8498203E3AC08B71E
+D2B965AA6CD5D20DA6C83FDC86F4A5D68A58A72C5BB9BFE9BC755C56B24025CE
+6F24443D3CF32CD711D3D94C7C1DC275DDAE3341D840090F97CB6CAEF274C94F
+9F3BD3AAB3F98BA8A7B5CE5E48D1462DAAB37BEB1C10B410E8D33FA42D898183
+BD4F807112D78AA94509E33C179BF7C9E82E55AA7D09E128A0DA06A330CF4AF8
+5DC861498CE029CE8C1BD15C923A708F2E7AF98E4F7B34212A0CB417553C86EB
+6DD46B0466F1A21D29FC5111226794ECFCA5DD4240C0B8D106CCD7EA6F03E133
+BB7733F055D6FFA04EF5C6F872B4FDA3E42F0F036C4825543D75682ACF71B548
+DED160ACD05625274799D0AE201305DA526E01A3D2A719B1B15C05CC09467F3A
+5627860C0F36C503EE392E1786620F3F2287AFE56634E03566B9B1F537FD92A2
+913166228791871A8F8CBA1A1DA634E8224058052A10FE1E67CBD3FD21A6C07E
+243CBF58BDC78577847664EEA5225EB8D6679AB17C563848A9D4D58995EA3609
+51C1443B752A070D9872FE1643F0677019235AC25DC2B29169D38308F2170A1A
+A0FDCC59E6602197D2815B914041FFC7106DAAAF30CD97400C6D0826A40385A4
+C8520119A065CF32CF2FC5FBD8DFD29222528A7F96FDA533145846B3428F8239
+E50277C366418D713F84B12A5FD4F904DC13DB1844A391FDAEB97643A6FD2945
+942FD4FC5A4A35E184F23304B8B4D93D0C37EFCC4E106D4FCD0DA3E5D2117589
+3FFC2BD1D121026562C55C455C3585050B9460891B006F62D9D9B66695C3D348
+A467C14C0256FA9621CB056E7CD389505194FF463BCC4010897F9A690EA87D9D
+BB3ED4C174FBADB8A4744C6E4A44D773967FD703EC37672F9993DC48BCC8A060
+6CEFE8E6B8F10886E15BA0466AF410B90DF0020FAB88BE493606B6A734EA85BB
+926950EB10D2F2CFDBD182B0F133809612CCF6ACCAD049C8005A42FAF78368B9
+E7684F98DE421BE0A3BC0FAEE024A7BE67E15C8394F17FE84DFD8156C2A3E94D
+08259E15CC657E8CE3088395BF6B5F825764E141AE15EBD186DC049261623D26
+8636705E06C6E4A1F8ACAEA59F91B042DF5DB9C2AB986A784384706A43E5F18E
+42C29CC1CA86D4F247B3BBBC89F3633EE074DCA4AC15B1E33EE4822812A62E88
+C32B0AA57249980EE17AFC1346074800FA529445D18649A0475246A25CF325A0
+BDA06AAF392FD455218B13D9ED577D51A9500B9FB7860716A8E2FB3A8C4BE3B3
+6656C6A5653AEF00184020ACA0BCCBF48BE3BF91E11C8658686C89848E714E6D
+DC158DCD1C1BC03B83FF94C60B1DC71CE8A86B46DBE661C9F8F4677F8A2C7CF1
+E41A91EBDA2304735147BE66CDFF2673F09D408297302124C127F0B35690CAE9
+CE1679120CC4D582FB69550AD34A047DDFCD9D411724554CCED753DB52D6AA7B
+22B0C55EB698ADDBB0F8ED15C971AEF113C74B9E25DA29199237B98DA4023665
+C2A63A837E4CAB38F8DF37DBAB5DC80C0AB25B56BCA5D899F1575E61ADF75676
+F48EE26C054AD9A75FD88A3E17498AC26FD4DC8000A125D6DD423540B8A98779
+B28CE97C9CAFAC45693FF43249E4B559E7F19FB349F94B60AAAAF05B5FBF244E
+982B4B51D997DA5811CD43E1917DA885DD96133A5CE1A290DBBFD88AF285A879
+D3136C41C839FD2276760A7B4F21F4026AADCDAB3F113FCCCA9588C7FB72643E
+AB8F6D8AEAD1DC3DCA6E436B3DF24E7DC6AD37137B49327871EA80F3B8AEE932
+D20D9A5B4779DFFAD7B3E5D447023D6433575F8F5AF589D7E094DA3786555D0C
+046A427ADF128E00AC7B458D5A131A130D6F49A7ABF47833791F172D69FE6393
+EAE0E90E7FF7BC2333D4E0215D5201E4B209591782F8A664335F67B9DDE36DBA
+793EC77E5EB405862D14EAB6A99218B3F66F11EA2F345629C402BD8FD9CA0AC8
+FB5A2E119DAA9F80083C9BC54F4586C44320993CB5D9CBDC8F8522001F82A16C
+E307F175B794F4426E5D273581A6D2844444D82093FB03482B270D693391DEA7
+CB26D4A418E48A2989167B7DCE251F0D53D5C9B29D359A568FEDB965DF31CBF3
+900392FE739A2B43BFA2363CA74FA72668FC761D1A17B9C0B56D6172499CDDCC
+90EA538A5526FD5AFF81D04BFEA703E5DA963B11042723106704021C1B90557C
+B7AA96E076842E2C5F929FDA6D05E0B91B5548006EB4A6EB262077411083C2EE
+D51D0D237A85D6480DA41A9D8DC24EAEC0C849E0D53D9FE1E54ECD82C957B8B9
+ED68D7B29A43F369C28272083B7B4E700546D293DEDAC7E74EEC946B4412B0B2
+0639AB78E79402C787F50C4F78991DBC12D73F5B371BBA2CD9535EEF0550084F
+40A4B2C4D178C0C001E63E08DAF15D064426F6F24C49E02AF5417D18BB7997D1
+46CD6476615EE2F496EF2D2E5A6DE68ACABAEC2033F9F3689D9F8CA23483C81F
+8E9CC42B7AF2BC3FA80B68FD37E3B87FC27AEB7AF6D2DFF9B4B7A60D26292AB2
+36461A349D3BEFAAB8918729204873D7793A647387156252B5A1B975639E02C8
+9715F8B4853B592ED9E467BA41B32363ED0D7557EA0AFB8EB093B4CB1FB3CCD9
+3369A67A60448575C7CE305DE7C1B59DC21DB0132F2B67B7B31EA068C5942DBD
+7D1BE9CBA33107AA60AD033EA5B3618B83BEBA01BC0DB592BCB0796AF520E8EF
+BAE6CBAA5DAB5897040D6CB1E3EEE78A98B59897138A084E64E116446EDAB213
+46AF2FED3E303F05D7EE630434645AD21B410AF8C1808A79F96CFC56741F62B4
+431AD2FD90CCF0A876EDDE18506E73B4E390C752DB45A2E8BB824F2E0310C59E
+864A74877AB522D1B477F5A3D7ABF80CC031C2F2BE5D633E49E6D10EB6EB8434
+F17B15274840BEB842587F3B9AED05B97DD603AAF94D5FA688675B55D40FA43C
+6D97741D9FE5F54C7D441AA62D48801769531ED7EFB3C438EFB1B513E93686D7
+1738FE955FD7C67F11323E059BCD0C4BEB275C26835080FD2AC78DE88BF65298
+A8EB4181F48C420D219CED950E4C0FC0330B49547E593F961B2BA33F375B75AD
+3EC510349E6F496EBDCD1206243547DEC26F9A61DA31D6CD94A54CC54EC81B0B
+176D21AC6779041F73E5DBC0A2107B612B9B89E20C373A057CD51327757A7928
+709B4C8BF80A78F5E2ED84A4941811EB4615720B646962D8037B07FE87D0E97C
+F4FA509B30F40B5268F2FAA0615532EAE51CE1F857F270CB5304C5D21C76E501
+E0FFF703BC5D6E89877C911182DA4A939000AB0025E8A2B45590E4E80363ED65
+A7DC71D49784A7FEDC08AB6A58051F7A1CB16BCE7EFCD3969E2B49DAED8F29F5
+82ED86CAF81946032CA6EE62D04B068FB960219EFD6F33B33C27B6B49AE12BA2
+E6E677B95C8A90014C261C50958C69140F1F2C914618188154E7455D050B48CB
+DC2B7CEF8518BFCBA0E1FE18CBB79A5BCE21BFA46CCFD6B4158BE06C768C73F4
+7089A6CFE99CAD9971037145AED0AE8FDDB40713F58F4803A0A78C455C560DD5
+2D9CB7B33928A0A248D16C6625A52C621744F41DEEEE6A9467DB7E5464F6CF6C
+76B1CA4074893F360FD2D627F1D3FAE885D922A305F3CAFDAE6C20BA6346F0EE
+E6593B6AB680AE19B67C76E8ABD370D5384B34D68C341B1DA6E735C370E8B5CC
+3FD853D69EF243D1E3FBD3B1E5D72540938F542D983040DB65AD2F2D3AACC061
+BBAB7E37B95B6FE56D0CC3E90F2872FCCC2258B343F753A7BC8B7A60E9C93E58
+16581287CA52C91C95FFC4606C3187E7F38A87993F4D9B3EABC6E30D57CCF0FA
+4E3D392CB0EE88E45E599BB5CC61C9EB26AAF4CB4E7AD44889B5E7E8B0ADB020
+2E2A034C09BF4A3D889594991EE6081B03663C98D3B0DB40C47E34709944DBC0
+5AA388D4A770C9085F5068F9964DE441F538254C4583D04EA2DF6DD8E4FBB600
+3E41629615843693874D67FB56FED2352DCE40FA1BAC8386E1F2924D310CD0C6
+3115E709D26257B5C19979E675BADE74EBDCC4993871E9718A75DF7F3B5D3FAF
+F141BA38D65529F8C28C28D20FE50000C38BDC6A50BE2FF853710E22F1F98824
+AF736EB973F5BB591EFBA74DF88040460BE1B41F1DCEB1349D281A1FA5BDFB1F
+A225CEDE409A83E8E129216035F189C9764F5744027B50DF95864E0159B477B9
+4FACFD9D63347D2E8B820DD0211E2DD31FF5A7AC48D7F471F1DBE0D0535789B8
+1AD29000BC87CD89A67BCA5F06C891C34A4660A3E4769323AADE88F539BDD546
+18B6F184F78735DDC5B14BA036E451D2B942C3780BD59AF901EA738ED4A85D77
+64EBB3116622F640366726C4A4B42BE89AE7040E10AE6F7E3E0D97E46E70E0CF
+312F217028C2BD74CBD41D7FCFD4BC7267E2739FFEA096527A5B6CD8AFE97A87
+CF71BFAF222A2688683647271CEAFB80232EFD4948079302D79FD349D84446BE
+5929269B0B4D05B3980E64E135A4F2A47C030203360F1941FAC5C1A1A83104B5
+68A3601806C60B33034A103DC16FD18B309C660D5004585BA6602B782939220D
+351CE8179EE650B0D9C5050670AE394987D800FF2403F3A9C6A02B03E13DB99D
+69CFA7C0AC1AB29B7607279862E41997BA05852B825D2575676BA141BF5BEB16
+7F3B35D43FA75D54066C370280B51CE82D5A1DF1205655D7358809552E38F80B
+4DED0107CB4EFB3792223A2AA23AE7025F99D532574ED7CE8FBAAAEFD096F439
+B2D128A440DDC4886679BF01A7B127F68F2914E13BFEF37D799DADD1A6BE6D49
+17E8A084B9C290783AC358B95492AC7E1450E00BB9D0279A3809C6F6A80550E3
+A89AA8A100BAECC283B284661CE584A0F2CA51AC50C41D300E540D53723DE0B0
+184FE92989C382E8FAC2DADEDB73FBE42FE8E5BFFA61ACB36FCAD4F88BBEC2E2
+464A453049ABA5139548EA09718566B9DE86D04C3628DA170A885E82EAF0F9AF
+A9C087F43AD07BFE56FD1D6ECD3F813C4B799B37D21481BB42DF6FC2EE0E526A
+D721BCF39FCDD82C29413B52E8382F4E226B6D0A34EF6C23E528EF92F4C1B3BC
+3128DCE9B8D68B81467A88252A70737B5140DFE152598D33FA161541F3F685BE
+AA9AB71AABE3C2B949BEF8F9E96DA8472455910D6D61F24053B2D535147195B7
+2AE08A0D398286B2FB9050CA34766751BE84E730E799E404C7DB577CFEE6EBDB
+10C814AB76183540CC368C0576501E138E4B2B3E55277F279CC71C87586C0736
+E62CD1CEB660425F040200EDAE2413F87FB6319106D6558A8DDBB3DBFC5E3532
+E70E13657B792C145FF2515C0D4B2AF2D9C3047E5DDC31CB8BEE42930CF633C6
+9D64978FD33DEB0B660C6C18E482FA39E54AF024B5924F5370E9C13FF635889F
+4585DE3FB8127107D4220765D6C17A4A6536C586D6C9F763892AFB4F4404CBCD
+515710D6B05C1D56C412718F41E74F1A3F132BB07771BEA13BD36C2714F75B49
+7F4632B1E182ECDC3B6F35E15E1EF3DF68FC2169556E2C39534F12614E0D50CF
+902F521371898EE2F22B6965A3BD5CA5663314D11182E93939192490B0A5D703
+393ABA71EEC2416639F5AF6443AC340E3C4D43C6BE69357242509F738DEF1A52
+744FF295793FB839921F63516F5B2668420D17F2A20DE6C4C8CCD1BBB12881EE
+74E1B7E08BDC853376FDC5BE44503C1B1FD00D758952A1E8403E16679A7124EF
+C120F517CD16470C6945C1BF0C5E9F217FA5052D5143848C1ABCA495C4AD7980
+D8EE59A9F3F4A5E3E3898E7A9F829E3F52990B719FF6A47FD59038B5F4E552AB
+9627B35725DED3B01496731471E3864466F59B909A039B8A02835E748597CD52
+470ED016CC613ECB5389C3E95E4F4E5780F00005CA8113C577AC7D43A10EEA63
+187FC9BF6907DAF69425D53BE1EE19D427AF6EA42D868A458ECEDF0532BC4268
+2F93CB185890DAFAF858FDEF5E5DC3D71EE13FCD512AC3A7E46A9FE960636E7A
+563CEA2B5907088AD0C7E5AC7F2CA4F5960E199CE277D9387A34CEA35ADCA39C
+F884C21560E71E1FC3F8248FB899107B2711337DB9E4DEEE132EAB7E0C3F6D87
+213567D866F34F405F07EB49952ADE4CADB5DD00B52E6BD1DD9A4FFBAC99213B
+4105603374C9297D5D024F0F19E2E70AFBFECC928925668EACB52A75AE71F012
+39B1AFE2F7C0689AFD18C695292A08A4DDBDB3F1B33B1124D83F6CBCE2C621B3
+261D18AD7027CC619E9AB8A36141E409543918493ADFD1851C5CA878F461DE33
+706D4DF25FD9182144F2C7AEF5C003B1879D14A50D5069F0B6D52C049054A401
+E038942915E40B5D9806EDF9501D77774F7ED693CAECF88C9594782E03C3C114
+D36902199BCC84FF858DBE4C95DC4479CC051020A9F43A6FBA9649749030F2FB
+3C48150B93D9E06A2FADE997CBEEBAFD0D1749D6DA209390F000D7EC4EBB9704
+32DA27E9AC1E6CF58F4100ABC8C6127AECE3FB8EA4BB97E4F60A7CD2D8A05BDA
+8033CC5E39862C78FF5929791D839E6D342A47FBB29799E9EF3CD6A8D9EA09E2
+F97223CB4493A5C3BC1CD3EB4BDCEEA60FC78A82F6FCAC670252AC6FAC74261B
+06B92BAFF8EB6DBDDC6E8AF7655C8F4729BB39435104D6479A816C56363E9DDA
+01D132AED79F244A9050F81FAD6D73368ED5AFDD320D9E6D066849719CEA7C1C
+99B901F2D7D63043D36309F06063557760BB0EA7805A438AAB42E6C360D2F050
+D5CF8F2BD82076DD38D7F4090080220D23CF25C7ACF3E3CBD66EC58EFA89A4A5
+A519D8D2F4D510C659F57DF4DCCC76A21806A24FFEC1A930125874B2B979C033
+B576965EFFC8F193D843DEBF3350376263F67B732F60166495F50105F43E4F29
+47EFDFC20A4DF5CB29838ECB95F682C382B55AAA87B02588A6A2FD64E95670F5
+AB185C2AE26BCFDB3DA40F4C615A21E18FE8A4981D4E9D4D7F5E235509044B12
+BA093E7ABFC169BF21DC7A2038290A70A5CF293ED04F9F892B58EE52FBBB2328
+EC9737EA4EC06131E5E4A438657969EF06AA1B4D4CBCFD4541D2777C97A3A170
+04776173B38C1B77F82669484FD07061BC5978F9ADA0197AAE090E9014EEB1A7
+72156C2BC994E748283D15444774B7D43F481522B7514AF900C7B772D52D8835
+2C1B6B496DBE45EAC8D1F54697500D71542E9E7405435CEA41D9F2F597D94539
+A163328FC05077111438BCB042C962E337E4493491C9C1F0196A6905A9965F49
+872B07EBA22F515AA56B5122711B3CAB4EF9FE8AB5FAA1814653F5684D15DDF3
+89B4B65AFC530B543E2F5287BE210270B93D0DCB125512D6775E8B8C6790F291
+736B3D9261F333AED2A69199A0ADE3C12533C8BE653447F9954D3B56E1995BB9
+5252295542A72FE2EE4589DDAAD72CC0E6C30470E4AE5399D054D42DCCFEC5ED
+63F51E58627D5E262212579899A972B7835E41E4499B682B22645E49E4843545
+924546BD825A388A284708A4A9D358DEBB89BF70EF17F3C93390D29ECBF02C74
+B9F283AAF7ED938EDFB91AA665061354F84D0654EB67993D18073EEFF9508D30
+EFD997B30F1D783F9D6D4E2DA75E11BA36F8C26E810F718B13646CFABFF54643
+555A00BD56387C9C551889D698B46FB83704EC7FF41F573C79356CBC2EBA2061
+9D4A5E685EEB6A66FB690E03292AE7524609359715B0D5053E349C5CAEEECEB2
+7DC3C3354AEF685620751C70E0713C47141F87581B82BECC81A6045E89958EC4
+0E7D81594558E39A89292FEC67F306AE635FDBA5755FD01237748CAC14472552
+36B0A2CE2264A34F35741831CF21AEF590BD407FB80D726DE4C3FB5A1FA63959
+8C5298BD02EABCCCC2B4CDCBB6A5CE017A18A7513BAB33AAD8C1147C7611A9BA
+FFF33ADCDDAC7A049B3AE0A94D2F35C4872320500E68C579F9961B7C40F06561
+0F5BFFF12A52686A4B8A180E5D088647A90248820E0C204E081CF17DE6301417
+6FE85B823A7C5C24D52120D7EEE87F1CE1638A6C39B554563FDFCFE7F57B3F6F
+04CA206D2BF1373654D8AFF1F31557F7F274EAD3A0CE54CC7B45A70FCBAB27FD
+C5D4A36653D4663E33173E5C99CBA2196FF85C9E48C224CF93084A27559309A1
+D39DC29FAE619426DFDFB6ABE33C5B9E6D85B95235613B6CB8ABA8D9B7167F71
+4F3529F3B691D452EE991BF9D159F51AA5066CD85A1E11AD16B293960775B199
+8EA3327F8B6701CF2692A12510BA4308C594DCCA4F6AFCD015C8FA8C921FDBDB
+2773016895922821F87E18A18ECB0F44E37DFB1DE5A1202EBD0B745207FBBE14
+2E56E41B8F41A025F308E5E0A7AA69A90166661002FA6784A81925B56582A26D
+1BF437F4187D598513D13DFC19C9FA4A525273CDCFF6769014093DCA26556BEF
+0BC97DA1B23FAC0E48708F60DADC477FF34DC5880774A1F87F2C0C70A9942567
+5695A0ABC7361FB116EED1AE2A0123C1ECA4416BA0EC454DB2FA62E127795D30
+B240472543D83C85284C2CC51C4B08263313213BEB45BF043D34721866BC48A6
+E54490A93E958B9F47C3E881C8F476F2D963395E27844991D49E3F0BDC2DB17F
+5A99BF8C8438D2C98C6E1CEAA8F48B19D4D7EBE6B1C9F153901C2F563E3E6B46
+E2B8B72027365AFA49351308EADD1A03E5D0F70632336D1C7F5A726D874A6C30
+91834B39EE6ECAD3EE7CE8536E2E313E43A348D6B42E0255E583B79B955AAA78
+2E456E0E0FADBFF233E2C7F14FFCBBA768AC70D424FE9E33F07710FF6362704D
+9A602F812BA693365B1FA730A5E411B4DEB12F138373A9CDEF11E8568659AB35
+2442BD5DC23DFD1D3534864F1B1F08E1C90E2D393BC1574E70877958B7F3795C
+00DCDA29EEBEF10B21468F32610DA773CA1EB721F84E299F921D810E01B501B2
+BA04AE51EFDEFDAFD90A93E8B1F4DFB226BBA3F11593E52C9B729BFADB533608
+720B0C72FA5548BB957A8AD061B696D051AEF50771CD338BDB2ABC4188F01ECF
+299A8820B472E2E992F582EB8F2E8D16D211CFABBACF65AEB73A5BC81C817093
+6978C77D9E18731D34A0817EFBD6AE1C55B507A6B130EEEB31C8E769AE5E3346
+8844EA1958AB9048B992AD7432E14AE883B71E32BA80AF59605D99D6BF5DAFC7
+8C97CC9665851EA7115F8023B5D0A87D334E74C46E5E463C7579A2AFC0FC4EA2
+0E08FCAEC43F1FE423F1D855B297A6F2A709F364742C53B66D367D6D3D16C202
+A0B83A6041C9538548590A94E399A0C25692DE48FDB3D32D64869A9BB7E6B90B
+3025D56C235D53A7E31F7A408529A86B0FAF7F415B3CCDE70DF025580677A455
+F028010F5E3FCF7D16A50C9500A6CF3D3C4CC7C0007CE52E4A17E3A940F3C1ED
+6E15D8E189B5DC36224884FDAF0ADF4A12BC4B53114CA1E3D7AAAF8CBB7DDEC5
+2C108337BBA511F1394AA5FD0DCA9E14A07B167513EABF33029447D962D9825F
+90B0AA9C76D4EA2C6D6F971A10B18945B5EF6CA014602BCDAA68E05F00872F84
+F208006F6A62C102911BD442CC584FD6EA91F7041C4557C98128FEAD19962F35
+23A9BD5A28F496B3DA188BBB6C646C225FC2F0D289F77ACF7F1721AA7F4A55DF
+343F16DCA7F33A6A094EF095285D295595AC942C1EE9A39F868ACFB1AE7DACE2
+C6CE1BEDEA0587474F2BCE1B5EDB01395A54E656E7D0224BD6EC3EA8AA0E5C9A
+AD672BC1B020D479318ACAD7810EB67C7517728831E193678AAFB249525DC218
+02676F4275E656CCA7F30470E4D6A9BE604128F1834FDACEF510EFF999F0CEED
+1AF10B5B441796683305771A612944D3415824637F3167B455200B397E79A7D2
+A462FB0ABE96485B857F306725AB27E349B3711EEEB7033C52EBC1F2251FFD34
+F37184161E9E3017F646FB7704DFDF783BEC88651E1BE53B06D0297687367E1A
+10842CA16C864D91A891A32B39F0C7A172BA374AB9C1D440243FC8404772A347
+6F6970579327343366E4A6EC2FB370A2B55654B4342F02C1D8E3C5AB45A7B6A9
+1CD7F03D0ABD1EF0D60D8CDE18A69981088E4A6324E3AA3545972D0DF2298EF9
+D676EC8CE48DDA8A62F03222ECC6B0B5EFEF0CEF9218B15730304662A7584EE8
+3C415696AC089BAD01BD6FFAD858F63A9B0E12DBB17F630E7E062D49E5191F12
+D65270203B25EB0F29FCC609749E9C2E874D5F11DFC0B452DEBC1C6BC2C15AD3
+9798E7D993822FF3C8744BEB56E989112C16437BE92E1BDB1521AB47AFCEFC39
+0BD391C6F3D21FBBAAD0CFA3B3C6F771E7EC6D48D9024B1745DB3042E986D1FA
+8228ABAE9ABB2005E1491751F3A0176016F90E4C013BBD320A9F4D8CE7AEAE0B
+82C5F6803D2DA18A1649E30DDF8FBA7DE0171F36AC856BF413F64EB03EC9915C
+CB6E4F3060912B3A5A28742D137AFCE62859BE8AF6492BD0787C4C9329D931EB
+7A9700F3B92995B26B09857241042BCECD556E37AFFE1CFD46CB8731B83689AF
+60D9CCDA940D54B47716CBEF543EAA8FA757FFC84E6CFFCFED7C57FD85AD9B97
+22836AE06B69B330AEBF53CD0D06D5979CD877A9E5B845A6954AC46505D146DE
+BF8C1E5CB4417D38716A8A9D88422781FFAD344A5394C8EDDD5880C7EBEE79B7
+4389F9DFE9DB33B362EF519C6C87999EF91FD793EB27CC09687B47201C3F78A0
+33828638489A89A3916709356208D8A278243D08A28F4F965C80B0B80245F95A
+AD8CD2A62D16BEFDAB35E540AF4D5BF38F05BD173BA880E83ED1341B874AD164
+16C77E269A1FC2202FDAA375818BC28021EE1DF39681B545484771622DCCC4CF
+F977242E74F056F5DF5E01A29684E3775D89F0B6B5C532D78B5DC546B1DD49EA
+E360B18F4B4B20B77467F4E0405A64F57EFD5FB2F3C81424F7674DC5A3CAB914
+0D0EE78D6FA6F20C8E14D71ED117265A8FA0E4DF98DFA53AAADB40A528CE4B12
+8D33BE361DC980B0892A493E5939693EE966DED5DD1FFB31C0B16349ABC6923E
+BAA8E352A0B7EDEB0CFE35448C1605A709DB9A947CE13495B37221ECB51F7CD4
+125B9223C197FD75E1C5EEB1F0BB6849E53CBC7C86C641DF87D34C48B0F03A1C
+B4963BD66541CBE63127BA45D6E662D76EDBB844E71CE1A7B659F6EC35B09B9C
+7A6443CF78887C04DA8E5E7185F3F149601449EB8C91DD0742297AB932745FFC
+1E928F7DECDD5B004A02F98FC482CE090D39436450431324A635898E4E4B501A
+A6BF1F39FA9BA52D7914E4C30652852E60C4EDA2749AED12FE7712F278449FEE
+8A74CF28C245A352E719FC44447FE6E411C8D396974F2D0A93D2E6521E20CAEE
+8EC36FB3778DE8A1836B0E7C0FAF06AAC5130955196FA7B2A224CE12FACC9BD5
+FDABD478DF2964A8169DF400690A8BD1FCB12D7B09DD46AEBEFEE91C64D64AE6
+93C33A92C936F28B7F7F369C62FEBE3CE6A75DDBEF8D80C150DBF417545668A4
+B2640525F0474CC4DD1739511491CFDAA41BC75DB2718E7ED6E0852015D266A6
+42CD2685A239D55F0B521B7E1EBCF85BDA0A09E6B6BB75766C4670BC03E88EB1
+2CD2EA69751B123A8DE9B17B33A96136C1529C8106FF4E3CAA73AB2B9AC5978D
+CD3B9F70E40EF15D859E69646C73257F9327BCA00198C8967BBCA4A3A9D72140
+30CD111C4DCA5420A7BBE5D52CBF684FE007486D18898806CD1903C4E43FF4C3
+80C4B970C0AC65DAC87BBE1F6CEA015A0226A19D78014D6DD9EDA07FE4D6597F
+2FF99B9E6969F1C84AA7567365E641CE9715AAD10325465F2C011FC88B020CD7
+C0C8EEB65F2DE85EFC9A6ADFD1502C881F121DF3FCA2417A0301FC6C8D9FA300
+07FA909571CD4F5B06362BDF7F833BD0584D8514E6DC71EE505E9280FB2FE188
+7B9F4B251B031C79653B9AF27272CCCF9FFC516E782B1D79EBBFE8D77BC0572C
+58A8F6B355ED227F2138E5F3A385740581146E3767189946F9FE7710003A15C7
+CA5E0138778501630A870F03F0473479CEB85E44C263BE451E50E8E051644D7A
+42D2EAC4917F2302EB45B1AB7F3303BCA046AB044DFC90C6351DDCB5C9C64416
+9747926238B69881787B9407B395C1776AAADA4F3CB734458218658C7FDECB51
+FB8179CEFDB7905887250286826CCD018AAE1F25022032A09E7B1D5ABB43677E
+6E58542B3A4F801175EBB069B17CEC3D49A0086E5F3410B6645865AEA0768A3E
+9F27F08DC87E8C436A75D1CBBAD46D05DA8D4CAF70790909149D6D8EA22C750F
+4BDA941B6F31936C342F2847B3350E4D3A8202BA86D103F1AE2D416DD3E2EDD0
+69E5B111F4FF3C3DD3A75AA86721BD95ED2B14F17BEEF95E2CC0FDC3364FAA94
+F2C41CF57CFBE8DEF4BE7C4EC6ACAB89BEBECCB8C7735EA45033BB9B8038C35F
+027FAC621F9C82A62B3FBB91AD33EF893C906C2756A98566679AEB20099C1B3F
+E6D6E1E2BBEAEAB3485197DD03F743F51D26C672CF0DB1AC905EFA6038FB9B0B
+CD3FA26B0865937A759C6B5F1A694BA9CF778FB7AED5628BF949411C4159F3FC
+A41E1070870F50E2DF82C8DA5EAE42E2D6611397C65781470DF7EEB7C09F6A55
+A6C8AC34342F45D78F676510768D8F9154784C087C6C2507821A371676E514A7
+7C1D358E8110E7B40CF5C3FACD3A74C4BF1455BBA4DBEF2DC051AB36317A7B30
+DC063D31D6FCD5BCC1A139D1F0D8365D54E32DACF2A49909CDE3A6EAF40F071E
+354AAA97C01188ABA1F01669132F696279483C431BCBDCF6E6386BA85FF7F0E3
+B6D859AC79348711D1BEE093334FEF60D856AC0A5F0969DB94CEE10BE69F79AD
+3E5F79AF68ADD91ACEF7D32E8E8185741F2A9FF91BE15E837FE2751121E86CC0
+2105D77B86DD542EBB74CDAE2883DA9F3AF2A2A530066A50689FDD29F766CDE3
+806D775F877F08C6F2426E19FE361FE6870EF24BAFE518A82541A721AF5F6FEA
+26CA4FAA9974B2598ECC7A9A31937B8C3A01874357C6A820B465D582B092AC6D
+976DAE72B808E32BD4D19230B3E07108E15E482F0F77722B28C673D6162DA69D
+BC1493255B456AEEE531CF8FEB2C232741A05EB98152F1C4E506316CBBB57088
+5D273535D36C1D96EBAC6F157007961767F715CF317702F1D8B438DEBAD37CAA
+8FC81CC1A33C553707931A28A05FBDCFCCBE061607B2E2EBB273690D3A79B5F8
+17BD66A7703997B9D4F6BB3F4D127E9D6E5C57D7011CB79DBC33311FE1CB5372
+D5FA910243FB85840880F8C446B9D62D7AC256A3C4723CF81F74279323B5BD51
+494E2E719813FB3C04CD77B298F36322024599C0EF0FB8E59EB4F569F4385057
+3CAA85539DEA522AE7C528A5AD7953342406164B8D04A7FCA4DDEE4D3417DD8B
+A2493490ECEFC88EB32AD3D2F884CD7AAC0E97D8F60841467D224AB9FE423073
+33F58B50C4CE5C924C9501CBD8EC763F2AAA91DAF246477E7AA1D04B9ABFD784
+EED48EEE9A5BF7F6408DDF9E767EB5EFE760AEF49493B284D261FA290D7D6571
+6CB501C36ADD79150207885B6E09D8ED8C379EA29C64F4F45683A61A71B618D9
+926AE986EC3740C4E2D8540F67844942201DEEE5BB871D3C21A466F9095DA182
+D796C081DFE67CA73C9BE74D000D60B2C8E89A63CEA1BB4EA824E82877519591
+C309F1DFB74F6FE3DA0050E995012263195F25B5E04F38CD85378EF971A1876D
+A1DD02AA52562508CD79DF49E62B07E25CC9B4AE82979E01823DD9112042D99D
+BFA6F0177784B13A1C6C17DCE6A5B11D37C55EAF5A079842035B2BEB80B6E80D
+75A18AE1AE91D17778423D83EF86CB7F96D820033C76914C981641E63797A376
+0E4856250356F84255D64425F72978AA4099DC1B312F6BB567EE65770B9B936D
+40DBAF3566C91A1A0AA8A63A3594552D3FAFF8B20D60851634773700B6C5975A
+E294B0209CD31DE60BA4C89807039EE27ECC63ED0B30103D9264839A79B64C97
+0526A1FAE7648AD90DED9E0F297D698CCA33D83E7071306AFCCD15B6D9BB8BB7
+63E8F768DD41469743E4603B06C0BAF81E3F9382AAC9E08944710D7C5A10455C
+35701F0105E4EA0A91866201E087290A5BAA7FC4BF325F9B1D860B3A85AE14A5
+C2FA8B12AF03131CCD2E728494E49027550F0EB469D8CE32ACABD2B1615BA044
+9B6C6417855530BA109E863A9A49740AC52330CDC0C56E82725BBA17EABDBF71
+F73E71B68C6C28003FB41F9AF7E5B643234DFBAFF08C97BC2E738410BCA10D9E
+A85E74EEFF37F7C23D6419207D09A842E1D772937FEAD47D97BD6DE8AA2BAD34
+F0EA516227BFD2C38DCBD6AF0DE795DAEDA5742B2952C4A4BEEA84383BEF3F24
+E9666344B63AA4AA7BF8A81562E3863D0ACCA7FF120D8B348F02DE8B1844796A
+3EFC082E4EA1B9CE68FA4093F0782A3E84B88EB3EE80752908DAB7F44F2EA078
+30FB84231E442648ADF1DBDB9EFCBC7FF86FEB25C1ACB394A951CDA3E6B0BA96
+0A46701F3E098009A9B798EAE63E0EBE0AD92E6F622FE571A142B319DED37251
+727D16650E96385715A3E30C782D11FF71CCB96EF8622A2F155FE38158D27879
+6C83A35F43D9ACFBB7879088AC5D42FC089EB04DC6FFF1782358555A41FA4A0C
+8ABE13D29AF8C8704D32AEEDBC1CA1C26FB424E58A188D4FC6EA93928E0EF165
+CF4F623777C470FC014A5E0F4692FC48F1FC5E7EB5BFC27080CDD804692D9C03
+38FFA892F6646CEF24389001D864F948C4E2FFEA85EB3D38860347CF27C14B11
+C8ADAFD3470E4F36301728DE3ABC113B5524CCEEBA4B131B0C28AA7F5704607F
+068F25D944724A720089DE0D31EA9F28E102CC2C5E7171045EBDF6F2B247D375
+1AB8275270FFBD8C7296BA324F41A50531FC5CE4A744F597B9721B517D0920CD
+EC9BD2591A68C26E7FD8C85FF53296870B217F3E7CEDBEA624AE86B053519D43
+351A9ABD9200A210C37B63E3709AA987D5BD0E38E42FBBEF95D6AC8AFF39AFA9
+D617C95439431C548318902386CA491C8323DB9091E5D99A34876114073842B0
+4080A4C566AF2BE80C18728B4006906ED393B03F1483CFC1BE8AD34015DAEDA0
+52157860A182CF1273773E3935205A5A5471E4189D6CEF1C14D883EAF33A6A1A
+97561202E48FEBFB694F64518121343FB6AD6A82FC3D8FFF30C12A4ECB069BEF
+20051BEC2DC96D847B5D55DA3FDBD4E1141349B680BF87E0732C674FB43398A5
+9ABBA32B9E1CB05F252132AE267909E50545DD9AA346B82EF9A6ED32D003E154
+F56FF97CCFAA615AED2D602D4999F0897AC771B20D108A37AA837073D4B736A0
+24C71913D7FDC760069CA22DA19A894BC2BC0AB15B5D79B6342F27564C85BFCE
+295F38B751FB4B001A1AA33C59B67382EB7E39A94C5667583B95E1966CC6C48F
+D2486E9038DA341233176F50F02F8EAE53CE08912408D5051FAB8C5735442886
+C2DF65C0E354EEF4942C165BC9606DB23AC5501EFD2874771EBAAD3C163B7618
+11C6C10614BA0D80FB4CA69F9D086B02F0CB41C05902F714E8D2063A5080AFD8
+21373E9B5315889D838CCE0ED5D0E008407E2A84C978A33DC26A93070422DB9D
+69B546FE7A35D50AF6D79AFB76BBAA096DF5AC92F1EA49223F1FF8780134AE63
+256048C0DD9E01DA1922B71A639B7C44BD7EE445905921052D7D8F388FCD9C44
+B6D5D314FB66472621113A6C7C659202F7723A40CC66E5069BC87327A5BC741C
+AEA58DA6EF9C066ADC27FA41F58E33413451375E849DCB729431644F71E567B2
+3FDBB581F154C1E3CE505D015D5674AD6FFFAA8C34692DC90998C287130741A2
+ACC309F2EC1C1BA2687607B2A926F37E214EA8E3F786A8C0F720ED6225EEEEE7
+80ABCC7A1BAC33BF773DD5BE85947018612B376C47146667E32C964AA28168CE
+5422582536FC6A15D6267A2C947E3E7E30746BEC06CD58F1BD87662C914A851D
+AC113F4366560D6C5FBC874991CB3140ED7EA7B9DE23E0C5CD1D359476208DC3
+2297446F1F10E33F87EAD9379BDF1F327F1960A95D73FB1F1AF2E2546042DF29
+4EAA9243532A32E4B477F2FEC68C0A62D80FEF79177EDEC5B68B323E0098C842
+B812EB2A6AC35270AD5DBD54FD480E14701FB6EE024FB368CABB3C101A27A8B4
+139F707F03D27F954E965B26EDED11AD94E12ADAF4CEC098942A57CE1E3431CB
+71ADDEB0722A5D3358E6C198E77C622CE1B8AC0926146A066640CE4B93E629F3
+44047767A4AE4BA22C62440985D81148CBFF2AF2C9CF4BF5FF470CF180DCF7CA
+421C39825DEBDC32732C89880A1F01B6F0B5D4DF3D027FE085205665F38808EB
+11C4E7EF100FCF42E6E2F6D9C0B8ED4C1FEDBFF2C0018E5791C4E7C476538EBF
+2C9A1E3A637317FA9205F3E573EC10F4B64A2365089AF788DC7BC287D1F6A118
+A089C88DA558B5971DA04059DB4E50478574BBC5A168BF2AB2E20C6670342803
+843A1530112D5351BF57AAB18BE59B259BC31ADD0E09F5D74CEB65EE7F36D680
+F2EFF02FD7E28A41F252EB104B634427AF94C4D217F97561224122779530BCD8
+801CE8B85EC861118F8BFF03E6F0CD1DC849C1E926EFFA8D97AB46E37F542BD5
+EDAA0F0BBD6FB4DE0B9262BB62C16FC1C2AE6B293FDE5871FFC7281201DD1554
+6C854B7EDD2B6B0CDD8EE4FF8ABB384439E10466D26D429BBF4BB08141D25DE6
+14D21B427CEC42EB7D3F87503C815C98389EFD885A294026C2833DE371D57C6B
+9A954EECBC8779C97D91DD7700C2E72BB555368F023DB92F052F3061C55A3507
+8FE9159D4C9729D1C7C68F0AABCFAD94E26BDFF858A6E72620C64D2E22BA6973
+8A4F897AA78F7D687C76474A9B23E526709142A6F7F3AF0086599A3E058A00B7
+57D6F9DCA2042B5EB6090750210C199931178AB3871F6D29F2970790BA0CBA58
+68E4FE92BC0663B9DA027F0038A151F117917525A8A0344490FE2DA3F6E86E30
+BBAAFFB548663A219F279321D099A29456E8B7F0C8A64D38A7F442FDD62F671B
+01770FE0346EE1B13B504813FA52CCEC02D7CB1B8493A48761746AC966AC5314
+46FFF54315967666226901BF678CE112D69E2AB4B0EFA1657960CB1206EE696F
+AEBBE067327BB8BD9806B66E7B7BD3E2F79B3A816D4A33165D4F742111D16798
+7A08CE4817294D85265BC9811BB1290A4963206A559BABA4E0BA8CEF5DB00B1E
+3D96B4CFBE5C0C314EA62C469E1127D34A69E6CC3BA9BEC71EE25E45807D2C42
+5800706DF39D6DA998C8FD58E55F43A98CC91156B3F7EFE86EA0F98DF4ADE76A
+FCA59D60D0F0A72878BC777565E94EBCB231DD2269E52F330B4B902BF8B41A4A
+DED27BDC29C8E5532AC8D90110624A056840A71D54A333922DA9BC06DDCC065E
+684B4E2378B593EA97953F08FD4CD1100CE5E8C1E231E72EF37871676AB50991
+37F07B58A725414088C6038BDA82084ED6D051B8CBE8D3575E5D0ECA800970CC
+F4AFD3F945F5AEF79A8BB93491BC10CCCBCA635DC6C6C22392501F97C38DCED8
+6EB6C3D31108DD0AF903EDE33D36DA630DFAD75AF23D61E9ADA3AF8EC6A4B9E8
+5ACF5E0A02D63B06D45D0F98A93CD2671F213C0A4F27AD93CEE03A809445E381
+0B3EC3858D51448616623F36B6674E538572B99AA41F6298FC502B4C4C61CB06
+6D66D5D5C8C58C1B9AC62A4594D39BCAD5D3A82CEBEE4846D81F795B90784896
+2F3C4CF282FC10FA9FCC21E70B313AB2CCFD81A6F6F6CDB09FC559B2E19377F8
+28D8C5
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMR10
+%!PS-AdobeFont-1.0: CMR10 003.002
+%%Title: CMR10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup
+/UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR10 def
+/FontBBox {-40 -250 1009 750 }readonly def
+/UniqueID 5000793 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR10.) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 11 /ff put
+dup 12 /fi put
+dup 14 /ffi put
+dup 15 /ffl put
+dup 25 /germandbls put
+dup 34 /quotedblright put
+dup 35 /numbersign put
+dup 36 /dollar put
+dup 37 /percent 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 58 /colon put
+dup 59 /semicolon 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 94 /circumflex 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
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8
+569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079
+24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A
+2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944
+8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E
+3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26
+D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24
+D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B
+03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685
+767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A
+8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B
+DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E
+94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004
+22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7
+72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C
+8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491
+344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A
+64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B
+07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC
+1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8
+78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51
+CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120
+7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782
+BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462
+4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A
+5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D
+EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE
+EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622
+4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE
+0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5
+C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904
+314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E
+DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029
+EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13
+DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E
+DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084
+7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91
+1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155
+69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE
+EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5
+7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67
+CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D
+38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3
+22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C
+0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1
+BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D
+4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F
+3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD
+B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE
+15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9
+849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3
+FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84
+4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76
+1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798
+84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF
+7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122
+CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA
+4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B
+3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394
+F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D
+F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140
+DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7
+D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886
+56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4
+8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53
+59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED
+49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86
+87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B
+8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60
+C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342
+D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64
+D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1
+F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178
+0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B
+5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448
+229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC
+17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4
+01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616
+F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662
+3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0
+689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20
+4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F
+A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03
+DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D
+364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F
+7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F
+26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1
+43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD
+8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7
+C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08
+94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5
+C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1
+B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56
+4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5
+7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01
+204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE
+B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56
+7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6
+279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB
+E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346
+CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A
+65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78
+BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285
+6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7
+B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3
+63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89
+4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A
+A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6
+67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C
+DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A
+5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9
+C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C
+9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D
+B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51
+963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0
+D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB
+B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B
+72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE
+B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358
+8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB
+3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0
+668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152
+ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5
+69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118
+C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754
+3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13
+407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01
+11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF
+2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87
+4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40
+2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF
+9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889
+CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8
+DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973
+0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362
+5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7
+9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A
+EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2
+09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A
+2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2
+AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420
+324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786
+486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A
+EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660
+52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5
+9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3
+4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D
+B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7
+BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14
+6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0
+B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359
+16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED
+E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6
+546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED
+6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507
+559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B
+C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A
+ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354
+04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B
+7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A
+8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B
+A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02
+94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB
+C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC
+41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654
+7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5
+18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76
+9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD
+E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947
+5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F
+4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F
+E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF
+9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9
+89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87
+7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3
+AAAEC15ED0F43F9A1290E91C463895BD12E8A831DAD661EF23CB9AD2C26CFB26
+71B72D15270CD8CB1D59CA2D9DEE4B63A8FD2929735CBAADF336DB2088C0BAD9
+B79DA00F002B98E0B4790F729DB337A63C1BF138947E9552402C37257019A2AE
+6961E7DE6E5472914BBA36D0E9F53FA5771D2801267609C8B8B12A11E0AB6031
+E251D1F7D5055B426B1CEEB8B381E7D0C3953C9493D87FC6BF93A12EA642FE24
+2DF17AA5366C023E4C8CF8FBBFC9E17F1834BFA8B62DC91E5252BB2A1044B616
+C6A52E741050DD47796F65BA79F3465F7305DC0EDBB76D3873FD32A1EF0C6595
+55F853978F6483C58F2F27B70623BB0193E1DBFF2AB5B1368EFBF754882FF3DC
+718EE9DF75250DE6FB69CD1F3FA88F74C28AB75D63C8632FECAD68D32B21307D
+28832F55FD651BC6D56B03073DCF6DEB5873E715677479DB92989DF9FB1300BE
+EB57CFF22C7CBA28D69C7E54DAB585AC1706688C94717B2F1204BBE9A32B02C5
+69FE47B757805513524F45903E166D92493145C52FB2AF2E61D48B83F794BED5
+E77E07C36E69E259E3E3D4156C9152A59752B0F2EE315A2ED05A5189E0C5A31E
+35448577FD635ABA25D2D1E8ED86030B6FFC8FE5B6ED9A726CED9E29D9E11C12
+1BC6DBBF00CDAC1B83B6413C89AE9C0B75E2F3010CC15E842B0D6941E1062912
+E8AD848E60F4D09A441DD1B3CDFA4A39501C1657A4131B1C2F5F9081052FD7FE
+48537BB9F93F480589012D7881C8E345FAE43DFDFF5F9C602EB47F4DF8FE8A5E
+DC6EE00429F29DF6424012BC1FD7F41D8396162C3E37439A9BCFFDCEA7E9686C
+074CDB097FE2E5FA7A4DE7C79850BDDDEE9E0845A4158485503684E0C5808916
+5DEF8158FF61B3601D83CFA2183777A4463C553A9D3FA7C7612CE52815250A47
+2B8DC7C58DFE9DF10BBC7C44086BC9088D744562422545FF61762A272F01A2A9
+1BA32B481655BB1D5A1D7873601C1318E24225317A8D8DDE34504C3252DE1BA1
+4616BCBEB112B3ACEB1C95129F14D50E1375DC1FA05957A0F054AE750CFD0800
+ED2E2AEE7903141C655655C007B65C755A23B3EE225AEEEE4199F65D8CE85A71
+6FAF25258A6FB58A9FB12A7CE8D1889F3A5672E14A759C03AD3089DA55B3DCC9
+318748F6ABB3AB456D19D9769EAE8761D3F2FAA263C6B723AE4E25543FC00F14
+0F43244E094BFA939E13EC7291BFF41F9C6C165AFC320B35CCDB5D8E13419C35
+989845797DF580DA0E0A4F6DB3FF53E47D79C93DBCA24D114668BF0933E4375B
+0F19706FCAD31A30036E5778DCC3F224EDA854D4E210DAFD6601CFA788ADCDF6
+43C209226ECCB4FFA430CD0CA7B04681AFB83A9E85CE3D05FA59E3A4AA6C03AB
+564001FEECD82EA90C526B7C069F7DFBD72517B16623441FB9F22209EEDDC398
+6FFE2E028E6F38694C8F8DC44FBA56798D8BC3FDC37AA148E17A0BA6D3F31894
+552717DFC8A538A12ABE23EAABF4378EA1AC7FB3A56AD0148429BC13BA6744A2
+78B6D8ADF0E5274BE625F3F1D1C471A889E06E4F7ADDACF6AF87A1D7613AA7C5
+19BCE1662DC2FF7B075BAFE9B5DE88D4C7E9BA4DAA2E68F6B00B0D233256F3BA
+4120E57F166EE0323CA9B4716B63E1EFEFDCB3A71D1B4EF5408AE432A0EBBEFC
+C4E1B70FADDC7800CF67337AF9A3F236C7462C608A5F680718EF99483F49460E
+8535A62CF2E44BCFAAC6CBDEC0E56A55E18E0B8D3EC7E806B4728BE7045DF339
+751CEE9BCFAD1DBDF31DE8B449A841994FEA0B2C6B2E0B3D1A3CA8F705AFB312
+986143729B8A0B5B1591B6493D53C4E7ACAAF84D2E4898BBD96830A112FA2769
+8E2316852222C1C8FFB4B6B3CB02A3A4A604FF1E78EBBC6C56A8E448153895A3
+0B4A82AF5946FDA0A1D8287E95DCD5BF08A1FFCA11B8BD493853D06CBDB6303C
+06F30AF37522828F5502EB7437BF4286C8546ED5D6C0E3081D83DBAAEE918F38
+F1B9E3F1296EBB8EF26D1B429057CE65E413EDA36A71E7B691A72FECC2A86FEF
+6979FE7215557FA66E61C99533F4636BBAB037B0A3F808E890D1582E1E08A29B
+B161EF7DB88DA4B045E17B4F7D5232E23470E0CE83C8E610D0FC97526C614C58
+D6AD7669F2185285C3D81BA82AB066516E81CD12261B97DE4D37A45283F5BB13
+CBBE74570767979CEC35A117AAD1DD78EC0DED1BE9967C8AB2B71F08C6C3D437
+D1791D6570725E8477C26075C8A819E11C98500653702E62937C1883F40C5506
+E6654A1C779B3E97C1235263B3D05F76F471A46DE232B3A44F7AA2BF1B70E7B5
+B5862C1AEF64BD04D1317E0394443FEE2BF46CBF877A487B252B5C8ECB4BBF0C
+8AAF20088C9CA414DA5CF96A6F3FD39BD1204C93FD562F766BF6ACE4CF454DC4
+F17115FF5AB424DE55B277110EC8772128EFE9D83799A10BBB734D570F417BF4
+183D36FCFE919CD4ECE02EDAB6E65E2D49B5ABB051053D4FD805E250E92112CC
+BD815A603AA52B9A33D5AACC0EBCDFEBF0CBADAFC5640344126F091C95C427FE
+5C0B265BFF2B6BF271B4E439800F4175F04BF1B180B36040A6E556B4C3972DC9
+C186980FC25FBD19E33B4B791F11B1859B9E19B54C00F586804E192C0B1960B2
+86C97ECA03C5AC8933B3219B95CC3529EA8B10F6A09F40F8E4171E7245B0BDBF
+3850A455A4BF878CA4C3DE60753B640307594753878D6C83B0BB79222513E257
+3DB609F9AAD8241B5A21B97A11E8A79A428F23B0F9B99692ADB0A09EE2E8BD55
+ACE7DED1225E5D860AB55E7F75E7FE5CC3426B22380B10AB2CAAA53B3B00A484
+48ECDC5E0226FCB10AFD47A1E2CB0F1F34F746455CC8B4AB162A8717F653103D
+CAFD245C7B1F1047F47883359E4FFBE3857AF495A7F2B78BCD0823AC7E1E2025
+0E3AAB8758531D63D87181A3EEC1AD962E9417335D5E048521B2659656F9F7CB
+E6C7FA3C27329D0C0D23799846911C6779A481CE7409E4E4DA600E5845B0A7B0
+2DE636111815ECD8DC921109991E7182DEA45A8D2C0298F54A56B2AF180671B6
+EFF4B42E03C760F6DDE2E6D311F3C54CFC0B2EA17B3A81901277A14D6C77058D
+B59914E9576E25EB201C382190E112D64A81554DE99891B2F0D7EBF8D4C5DBE2
+73EBD4D52570D5DD5FBFAB9F6A941E5C5540002F29D19089D33D5A87D9E7AA45
+99020AEAC725B77764E530DE619BC3EF4D3C708824045B88C5088B8AA8C06EB7
+7B86EAB90B7FAADC4B50E3E892A5024FFA986DDF098E40E56AFF983715324807
+97E5C6BB1C54F665D63DF1AE22836A7E4948BF4DCE3B3B12C214D99E68F11657
+225A2C22AF9E5DEDF038F276EBEF811FDC5FB6CF767D24D5A22BA1060BFFDE0F
+7D05AEC38EE038F811CF34BAB81F8FCB42A086E4C3D9080B58EC971402C4D6A3
+5BEBBF3EA120DE4F130A0B512508C566F265A4E0A25B9C7C4F5C41E2C0FF4395
+BEA88B830DCEE2F4E5177F4561B5DAAED2DEE10380BD028519280570B3D870EE
+B5E23536A32BE129DD55913AB136B69E0300B60AB1780B3BF87021A251235B8E
+485E42682E9F4C6A317239E4774F66DF77395FB3EEDBC971DA6C2698612A4EF0
+60B4B73403CD7DB537BD73E5546629028DCA3773494073CB6196341BF42F6A61
+A4FD298BF1AE9E404EF4F3F92B0DDD4C7520B11492D5F484A3E9DC21714D304D
+ABE2D4C7135CD91BC11969A0F03E83161FAA1FA5B369D5E10CD71EEAAD098515
+40047B466EDDA89161EF8AEBBD38727F99076C63EC11C0CAA44C420C63229547
+841D36838D978E748A17A489B48CEFB85094854B5399ABCE0578AE20395635FB
+33F399DBE972BA6F587102E1322FD08D6A1AD27024064FE8A785A3F66FFA385B
+06A5C6F8495002E2A1DE3A1A676B565D7221F8D06EAAD43B626B8FBE73737903
+DE67E77566BB46EB6E8EB21382738DBA2830BADA6559929D616EF85F9DFBC289
+71C38FF6EDAF5D6C7BB6E40EE3EE505963717F4BBF420844446784B44F764CBA
+D8D78B010A57B0C60732C984C398DB68FDBD24AABA00FB4631080066D1AA344F
+E6F307228D7AB162EEADBB0B55F9C88123B62748D59922C5A5ADE7DD2AA96F4E
+2E4650172463E7515E16F653C7F38A21429A9C1ED493DC71793E84BB038A07AD
+BF0C24B9B322C361606FA6D8C8D83BB142B59477C368E35090C584D80F2DECF5
+0026C2CEFEB188AED87FA8D62A27D876A9A7D177222708945F9CC15C9669D209
+C3F43C5280E47C868308F3909B349CBDF897BF27736264F3A322DD55FEA99BE0
+FA9319F93F61B943815C000CBAAF4D8B1B920CEFFD34CC7850D4C09DA4EA2619
+C5122CCD1D5D807ECC4DAD91294893A7DA2C3ABF2B3E92559213BDFFFCD5CBAC
+69A729C257BBE45A134F852F6EC3B1AAB0A8AEDC639B9C178D588AAD639CA04C
+4E11FACE82C7EE87E64BDCA204945533BCBDBA14BD6E2EA1C3D785EF35C137E1
+7EBEB144224AA134D37E372342F292C15B2479B064A7C3CA87B7E5BBBCCB72D6
+E2DD788CCE37A721DB3DB7F08BD0F05444D9179149217DF6B36367AFA9386AB3
+2299F3DF4D06CED7009D348534EFAC6F7A5B6B9AC28D9C53D79DB19F848987CC
+417517CF6F42243C234413756CA68A0F125A0E7C142D5999892446E4AF11C73D
+526DE031FDE880348E1D6047F69779962573177E41250B70584E1BE4060333E4
+277DC522EC949F494669BCBCDE44BE80FAF49A42D33D8E79B4C628C9DA340E6B
+7E864FC494626389BB2A07981E8090C3CA746B492B3F2090039563C2318069C6
+3018054CB8AE70D910AC6987E546C6E433A5C5494B9C31A180ED7D64C8D5C906
+28079C0CD805D9951D78789E7A3C9CAE15C186F6622FE721565CA4EABB14F6B9
+68D6C041D372AA81E33F34D77DF1D4123C266FE7300ADA662A732717DDA2B9A4
+41DA122921A6D987AD5D190BFAB12DE3FFEFBE2D7E324AF689E509A5F4CC08C6
+5F7CC1E0DE8AF88A448703D6101D1068D9DDC87DD608BD8679AAD51A259259CD
+CF34FD0A33C82EB8A22A0537B9FCB7B78BD405287F5B1708FD0685C575449D29
+B51B30154E1501956276EDB93F1C143489363393F082E5ACC9FFDD1D90CA8189
+128BFE91A8696182161D557DA31A46FD5F24C877187796B3FF181058A1508EA0
+1E831214F7475EC7402791E1521B7642C7CCE6BEF9450CC68CEFF4DCABD7D922
+FC9BD10B688716058586012D42F0136F685428278E94C7DB872C6148A6B01931
+0EFC5E3BA1B04275033C4AAC3E18B02E65529D5FCD89FA9DB129352C06305664
+4F0319F22926BEE62ED455433442616A4C59248CFC9D7494E26582C63DA4A44C
+DF95FA809B0F5FF2C8B862EE357855A01F21A61ACA426DB4BC12DEABBEECCFFB
+079579F14686ED8E524E2244F64426BF8DEDA7755779416A08D0020E107BDDAA
+A28D752A1C6EC87B4779FE03959A8EDCF072D248782F562F11448B756464160C
+C70BB16FB6C0BB9E9393DA2CAFE45B3DFB070FCD1ED7743C35C73D6BA23E2941
+B85D00DDDD4DAA7454FC002446758262B90DFDAC3FCBF09A1C95825CFF2374E3
+3FD629441B82B0E148721AC3B443E7F7DADDC996E9EDE494DED89C746C69F9BA
+E7662D04E3FD1874FA26179EA32176F2EBD45DAB751B8610B4CD9C16DD78761F
+C9EAF01C45907119C3B07D5DE4617D17CEA3C9FFDED8B859263727957760826E
+3F77F63EB00FCA5DBFB6FF6DD3994E72C79E397358F3C25EF8069BD8E5221E17
+B30C30F30C10522C2443C66BD7EC2719790CDD8D8236AD87B62E7A206B0EF403
+C93A9F3320F5F7990CB440AD4AEF0F9EAA7FAC600E65DD15C9C7E2C3B7D91AEF
+EF71982648B53B26EA2310D400BE0744EA2DB6491AA220E0F307A86F9605DFDC
+FF3D8F82203863B7E6A243700C31EEFC7139DF2CBE9507CFCCBE098B20AD88DD
+B3492FCC625A73A2F9D133E81CB0AFAFA85A68556B1B65DC56D9AB12152BEF13
+D11D0A59408474B15008ACA21DDF965DEC28BE269B03A32073F5FF199DA83D32
+9085038A7B13CB2000AC3AC0433BFA7CA2EE48AC2063C256D51A52BF0D97B34C
+313B579445747E7B5DAB31C81A3EB9B26931BDDCCF1F78DF4B7A41E21451394B
+FD42560B379433F92EF6ED0654C1439DCE967B5DF595F89D7FCF6E24AD4F89A3
+8EB88F2C66ACC618420BA08810946E9E6DC7FDF2429C0ABBF816D98380F9C21E
+89B09F6DF0E55634A5D9D3832CDB4671A67DDA477F87C2D12E01882C4958711D
+8C93EDB509E79E3B0884832236EBF71B1CBB32E309CF1F99DD0BD3EE92DD1E93
+BA43C1126C126DAD53AD421863CEC59548823CF508C9590F11A1C9C7A9F7EFB7
+4D2F4154EA1F85A3C967D7F0D9EA815B18449974C3C6534ED6CCF0DF1B8002E8
+BF296A65E6D2566990B091DB2F6B458208BEFDD736242F7E1F9A9E1B3333EAEB
+9D9B42EC68EC61B8F04EFD71481C8771D5F79E8E0B91049FA201449195B9D032
+21CC3EBFDADBB9195F850EC164E2C94AB650C80DA43A11D969C91E5D2C239909
+EB94D77A077FC4384EFCE586302B6C509E99154D8E36CE22E60AAC296211D46E
+15E20F8EC1F8813DBB3ACA52C89746693C6A49ABE5DF040383BEFD466C4DF102
+8034543FA5E46F11F081A0B0E9698E283440AFC1AE93F6F311E0D15FF8BBA9DB
+EC4E1302BC04A7337DB384762BE9C70D52E795A58D33CDE4455CEEB406118F1C
+3C9B97141F096FEC8E3CEDB81047B6FAA3E0BFC95D171ACB70DA688E108C3141
+9165B94E25D083C53CACBF001E16EF046B87B19B7459F5181B5A70583700BDFC
+2B3E109173C5604104AE2D290461836B0210A52D1EFD7DE714503137B4724AF1
+2A745F62993A47C1D46D4CEC47095D65750D822750669963E62DDE363A16129D
+F268BE71FA84E64C9D8EC78180B5EF2E6CFD96C52722EFEC6BBCDB14764672C6
+228DEDB8A2F96DB1A69A9AD2FBDB2B531485EB80B267F70C05125BF1AABFB7CF
+4D35CFFAEE03972735EA9D2D49D43098274CAC9C8938210116025ED282524B4F
+CE2EB4155CF7BBB5127853DA344070A439C51C532197E87F2FAAA68A8A345497
+18565D75CA93E9A31ABA74507BF0ECBA8576D53A3F36CA02D548A8E36647BF3E
+F4A2D999D579117B67BA1B8A14D09C312B0DA67F5E28683619E6A28B39C59836
+A091BC6B4BD0CDC749725100BEED6652D75E3CF7527DB0B383F674093587963C
+665E70D245826DD32EA04946605D12F4EB2718802177E659100A2196C3E24B51
+A74DFA76C8DFCC9D06B13F6DA2EC3E91B5A67910ECF0766844DF389E461D4B9F
+AFCCE6B97776EFB3EE6A979E162863346B6A2DB3574D442CB339F78C1846D0C4
+304309A1D68B0EE29304B20F84BE8EBFB5E52B26820218ADE1EAD41F03D6C6E1
+21E407DC64895AA38BBD38221F00FC586D67142EE082ABD57AAE5F689AF38468
+8B9F81EFD34AE428A7A02AD8E6BC8505FB45291079E1AE7A0C2EBDACAEE3708E
+3C32681C0382B638915CB17045C2F0E81DDF09EB23D0D682A4DF62935087F7DA
+5D0936C3507E2D5459041D547B8D255D306D3BD5C9C86E06EE84B5DEA86E978D
+D9F0EF653B677BFDB4466801D835B819E95CEDEFB492E525F2D978E9CB28B3BD
+C181F7BBB3794F0605C34CD4893500950C68C5A382E3A513EAF0A7B1C44E6697
+6F59C1C1D7C6E3A21F923268E13C6429D1E5B8EC78719E289412095B7E1AD936
+6686C8552127572A7AA700D4AE749407406CBC353F8CC9AF9CACE4CB0ECA8DB9
+777382C58A7B16FE1E7BF54BA03614BF1B1041C5C68C45B7D277F24C77F472E7
+7484BFD070D9236AFE5C943060D3E22699B746E96289994E943EB53A575F74F3
+8F18A75B46AD3F9B077264B4E72A5C82EE6D5E85EC30E7AA77762BF70AB5CCB2
+328B2B453ED7332623F7FA1018D9129505305766E28A13CD621AB3AE39B5FD8E
+499E3F859C9846518C50C6272BED0A4FCBC9B8E9DF7383BA206A71D6084D3706
+E0227F7737289EF02CB9A063F9EA7081583A46C7AE3DE7242C987ED6703FDC6B
+9B274E3C0F18928CA3303B92002B7507BDDA3E482861C92EDEFEF82798A1B1EA
+DD97B1E6263AFE58BA1D72DC9231C4E40AB90F19BF54E807EF08D71838A33FDC
+1EDBE07F50D986A29E42609E770E8BAB3C99BCA591AA32FC0551082F4DFF7A46
+6C0B45EFDA26DA8F8E158B1CC554BC0DF11075C1B0DA6152C53B563C0EF832A9
+E41846A57D0DE1552EAFD8FE44E0AB25983620310A3BB2CD4B6E1CFBC8300557
+E3E93504C3263CAA0962A0F9FE4EBBB4CC7DB9404E3301112D1CCDD005E55A4A
+40ABD5E9942B4072C8627D4F38E1C6DBBB3B0539B4800ACFDFD1EC7D38BFEAA3
+AB140913D95B0A5F4CB5029AEB0B80DC6E0C45221B298E7A8A7A2755D5463970
+E9943BE672F551ABEAA747DF7C01F81BB2A240CDF82BDDF076E583628EF280A3
+A5826EA2CB3801592D910C932FE389A802797F33ACF8B933CA97078CE60AC97B
+78C85CA773AAF818DFABDB4FD60AF12218C12C4B89D3579B4DCF1B697D213878
+BCCFB9D0DDE10FEAF270D473A7121184AB0DAEE1BECEEE46552F5825B9E497A9
+B17E02A4B1D7A60E8296E219170853F34DD6FD5514009F01BAAD9BA60B5C31FC
+9E9F1493F9D828EE4D32456EE0249F375601EA4E1CA329BAA095C5DCC3750E59
+A2C5DADF6D5AD6DEEA9526478F8B3C8A6B8209818E1C5E9AFD9CD8363DF71C55
+65AF5B84510A5A31B2611029A72868EE9D01A4E308908BDFCE0D47F5F59A5875
+4A34A9A04FE68AA99DA440E927F4482AAE615EC3D649782279FB8864CD4E0078
+975BF61927DB520E5C540614DD882127481CAA42E9E0F9E06D8225D1DAC8B72C
+1120DEA694861980A749F631F0219291A2129AD24DD053A7D70F06E894D26AB6
+80F3CC17D7D10930BDFE1754DBC8B137F99FF7CDBF725A6980E603FBA5B1F246
+F983C8BCD2E5F7DCD880E592378BFBF360F2C5535C16084FE2BFEB789F4F2239
+E51E3B7D7D4878C982D414E23FD2ABC318BDDB9C2B8DCEF39155DB40113AEC78
+68B1ECAABC5A22FAC5D839CE1E94048B6DE6F1E407520E80F9A459A74249068D
+F1E50811FD6B2C06A074E45E20E5BECC9C78CABCE1AF1DDEDAD62F779B479707
+3FF6C110DE23F9154789B43241C269F4857374CB0FD313DB8FD3F358564B3415
+5830EAAABB95B187A4643879246F7C3178E493C801EB969DA2B34E270E5D4AAF
+33E023668A92E5980712193A746DA33999189772E9F9266621FEBFC113BDADD7
+535F35CADD91136D3526457294A57DDBCF90E4E7344F3F67E00B2E7E7728F1D0
+4A4333374B4420DB9BE21B0008A982A9BDCE7E8A2F964AB6097247DD8DCB48AE
+154810F8DC3633D9648BDE5AF9F5E90BB94C231B6DA6A182BB18A4E9EFFDDF8C
+8A35D50D172136A8276156D9BEBC833F6895C5DA560CA412DCF311285228AA65
+AF102A1CC345B5B06CEB6EA5CA84932C89D76070F21A3D702C2B10231DDAED36
+1E6956F2D434067919EDA0C522F394D92D7AB18FB497164B0EA6F86912571B1F
+C4B517F6535C0E67D552DDC65B3B3A2D11EACC8B5CE1BD3E87367929BF4897D4
+B84699731A6B3F86AFDBABB80BF2E62BA4E5B3DC4BC10D42A759A29135E26A7D
+227809FEBF6AB48ADD106600FD9D7619EAA99F980665B74F33E0B73EBADBB379
+6610DD542AC6774BFAD42D0701FA1FE3D2526A63A23A657D2F48C2FA327385C2
+33984DF1095623271530155D25873791184E971F612CAA247E1E4D0F71EEAA82
+8E5601C70060A1789536D912DC1538B14CDA30A55CC9FEE9FEBF645824A37CA1
+A90E3B0DB87EB63A0D819B406807EE24653C218061FC6DAA12D74B121692F411
+33FED8C09966E4DC8759B3C0DCEDD402907D65370B274D29D60458D13DCCC21E
+4B9FAF103267B8EC438FE7510FD3D1D1318C89BE7C2C5D549FA58902A5AF468F
+539A10DC92E4B4942C757E3340713EC3DDD0DC456AA78A8C395DB7BCE107A386
+A0E4FE02136806AD1BCFF2EECD965CEB7CDB0E11BDDFD1402B8A5AE155E4E6B5
+4324D6EA65D3911E42568D2F8ACE0B4D12FA4862B6D4BAB15E433D36E04AE4E1
+5B9B76A20105EBCE0963CE2588912BE12D9F5762516588FB0B4549BE4CD45E90
+19BBB3FFD45F59A5701143DF58A8C89C9D1E6EF5729AE66BA3E83FC000434CA2
+4DF0517717C07D7D570A5E230237A2E53623484FF465ACF79D3F6860CD07F5FF
+4A432DEBDEA9C5A621C0C69D6699D4464A30B9EA35C856F4B8914C08243CAAC8
+704939D1F838593E7979361CFF14F9D27CEBC56DB5289DA6034AA36A45C4622B
+32939B064407071A63CEABB44FF97E7A513E34633831FEB057D5350E0ED9AA2B
+6F46113A0A5CF7400E7B20B5B2344E2E6057B4A56428A4466BA9BA2845E5E165
+75CEB41E2D93E4E93FC183B980BF23A4CEFBD379CC8F9A1EA6461F2DD43299EA
+3739A056169E7D53B3CC623B82EB1740F8A9002BCF312C6B142B1AFB2A34C188
+CE4767EF06ED56E91C20EAD1A9144D573B73EAA8B3334199C10A16E7A8C8DDA5
+48079A1AE853735E6BEB9CEE8F94EC7D2F89733ED3196B516103AF28934A55F4
+7D4C1692F423A5A4CADE2ACC8074FEC7F6AFB87147B4ACF45E002AECCCB15714
+39E5AF3F9C52B81CC0C4739B10B9E138F52D8E7D72088A84452C6110B0889D5B
+37D64DE992D41574897B1DE7B5A7328397AA90B29A912993183D706C291F1D11
+5984844021655F433BB06D09479CD28DF71D186F2BC77688A0C2188FC8539B0A
+4ED602D896F504D48136F192EC125F26D0D2B859EA843BC508F8F017510DA017
+31AA63614F0FC2EC91410B5609CC1D1BDF7925040A3222B08C2C2375DD644CD5
+CBBED0DEE20F78E13DB387FF8110827975A04E58654FB9B179FF36CD63132B59
+0D928A09BA4C0DD215C4961B4BF565C207EEA5F43C51988F188862A09C6EAA4F
+56B73623EC1C6F279D405F6A4B5F0BC9EDA774DD15454858563868A0D16DEB16
+C8B72ED9F06F64348F130B0AC9B75E69BE56C017DDA4560DC8E69A51324602EF
+D6091069F7B27F0FD384BD9D5861B5694159623805A4D537411A9B66DAB1D955
+4E45DBE9817A4255EB492EE4BC783B37084A7DC9B4B68A1DFC1B46705FC9763E
+94679EDCCB0A4DE850C4480948133C2DD1CD525F498B01F5046FAF642EB6C5A4
+6861840CF18A04F1C84FD2A66D97A61AF17C2E66E7350BD46F94BE9B41DD776C
+6EAFCC1759479016C3A27F0E12C5DC2E8A40E45571D5BB130E68EA57B97070E9
+33A07A9AD9130D3FA73207D372381836FC968813A578138A07F2F3826A2E41EA
+03F607A5F8E637576965A41970039DCFEDA28E7D327F0F4C117F8AC445FA52E7
+CBD97BDB0EDF0D88B9DBB90D76E037C2489AE870AE0D83C143627D17C09A1A1D
+CB0803B3A6CE9118E9AFA8FE44720B40ED6658D521F2C91735188EB59D12B833
+AFFAD67B5890E609F2CC73ECB235D27A14613AD6F9CAB6E7CDDF9A697A0BCDFD
+3140825F77A4827D91D28192CE11D69D02705CF641C64F39BD531C74F49711CA
+533AD45C5447EB029FA55E8A1E1DC69661D8C225B90255441E91557DFC761140
+22EA9B3681DB1A1460B3270D4FC7CEE62664234DF963BEEE1CE7776CF28E35B3
+2AA2DD131635AA1D3F394C8E39942DBB0DB456A7BBD5A21F6A7915830576D066
+600E72555CCC7E9F3C9D65F274A7A78317FFD2A359EF28E279B94439CB5FAFAC
+5182486D5C820304993B2F59394E573CD409CF5657AE0AC097F2FBB4C6C6E1BE
+A8CFC67244702D1C4832BCBC3924896389F9834D8960E0290B681C653A39EDE3
+F9E6D6626CC108BD5B26BFB4CA0117E1B29B138CFF8F5D77D5E5B49570A921A5
+8649D00FFC8E0D6ED7642E3352D1A6B3199C444976F34F301F2950F503BF335C
+5EF25B82EFD2C40ECA5074264B9C6EDAF019A450B3C215E4AD72FEA7E1E4C59A
+E3ACB379F4714216C4093711E17C5BB71F5D5B395AB8D02D1E5308D6BA838CCF
+EF37988BB0E6C2F010C63B73D731119800BF923A9E0A9ECC93AE903B04DC7006
+95B18FB928D00DA2809AAEC38D83841083019E6DE38084773754AD52DCF168F5
+8FFD5DBBBA626D61716ECB0BA75240C14D16301D8C171A21E44D72F10BFA8A6D
+6347CF46F17E8EBD4EB2304FCD5D2B3D97720F2409BDE416A21640655FC313BE
+399C834B1E5C0691005BEB9C217C4725FFA537CC1DD8B3213202582D9E135F73
+E7B4CD4342DCC837DDB367C72849B0245588D1849D7B2402F69C01BEE77445AE
+F8401907E6C77FF4DE2526545B3FB7946F693C04C544723FDAA03A532E4F180F
+2DC2CE1694AFB703FE30B216086FCC4DC76B04DE1AB9AF8A8A1A068FE1DE76DC
+4331566865F6B13C21507936C590C305192A9E3004190FD117C7BC922AF29E9C
+D686E46B969C4F9A1A993ED2ED52A862737C6D46673CE064E1B7AE0CBC9BE116
+046CB1041E32E320D8AC967B12C6160AE8F3D8DE94C4CD19AE46A2879070923F
+CB31881E14AEB002465B721587F600C5704ADCB4B3957E1B8ADD7A58CE1A9225
+B0FEC571F009611A48CB34B8E9173488B9F4C64CC52F438F544FCB12BCD994BE
+CD1B7910BBFF76A0D063D8174376C3B9CE8AA11489D41D4AD5BE489852BD4F53
+9D1FDFA6A62951FDCA68ADDD1EA7DFA3012B2C859D98E20A4C116510D8EA67C1
+3D3A378FD21E99E132332A6388C0CB71380AA3272B437BE0F3341FB9B559CA00
+93B5F3896887F0DB0C5CDBCBE8D4A66562B841EEEF30F99ACD5BC89EC84A4925
+DCE688FDB27FE493ACE1A5E4B11C9102BA94F8725DD829A9D6679DCE2D08D70C
+7AAAAF05EAD756142DE83A927103ECF8FC8F60F48A144DB116B3F8A6996E959B
+A82DF5C6260FAAF934E052C95BB77377757E0CA686753E8E52123A64266661E8
+F5B9553B91933186C853BD5C428320396555DA1A22700A87676FA321798F8AD0
+59A2232670FA28E18B15C0C2D67A03489A730551FEA2007139330DA11EB80919
+CB8B1DFDFEFFC98335F6363A668D350F53A053B1E7AFF7832C08EA445DF32F79
+2EA754EB444BB61992CE75E20F2DC0BDDF917B50EC9CCFE6D83A9D150DD61997
+DE0954114663B21AC5B4FFFD52A8ED8577F72A527CF162F64ED65962C58B67FA
+7E492D98AF68FA08A397736FD4D243C90BB7949ACD00099C3598330013E46BB6
+4AEF51F0FC8063050D27DB0577A5C28C480B80E20068E20AC6E67D013F479AB4
+D9DF8B27D9C16BEB06D96AE5C3934DF2C9E1B29CE389D3C92C5570559EFDBD7E
+BD7F97F7B956F1471D96C9C6AA23E5761CF7BF3F0810DD432939EC465E50CADE
+E581FB32ED1FF03A77D6EA7A35359AEC1D986BE6750BD647DD8CEE4FCFF3DF69
+3959B8D13ABE6949C4DD4685FED5A787A55E33444E9424D98BC288116499ED6E
+76E10B1C56AED7FC99F0F1E053E7BA2066091C9F04F787785F95A620B155FE71
+706A20326226AB916E4816514FE598D46FFBF77A9113C7ABFF365A12446FF0B9
+0744C3C5C1B278968D2071C0322DDA802BFEA3D83B0ACE5E4CCD580233350196
+45D9C4601E86E3F77E0B06E2A313927795E8858FD27F0CC7147985D1A6EAA623
+CA96A0345C745A0F47581A977A220C598F4CF4CD539DDDBA83267F5D9E4F3AD2
+BC287248F885489206B590D9A34E948E6791F0F9948DDDA6AA1312D8559AC611
+33E35C7420B3394EBB1EA5E9D411FCF690A5B1357D06D41EE5062852CD122347
+FAD22F141F84284AC0B95F7A000AA1299A1EA2EC7D6F6EF8335B4989F8CC6B48
+0232CC4C044D7A7298C88A3720C693E2115A26711EF0FE171DDB45747BE2C9C0
+40562C2E7C6AFCA159AE341573055C3618D2532C4C69E72D9CB0A4D6267BF7D7
+AA4C30CEF7A19CD667865B963C6CB6C21DD4F887FB1B02C3E12B4483F07D98AA
+C1C512014503F3B3A4BC6462B1BB6FEC75F95C3A3712E1530451C43C47EDB056
+FCC15D72C688C0E4A7B4FAED9C603A9C8F615EE2F862907331A30628A9E4BBF6
+05DAB43F30899103173521F6E36BCE6F4DFA484CC759F66C8CE335E056801B93
+AEE1FD94D95FE5DDCB783A6E9DC1A82A18BA67D8EB45F51C4251DEA708D79474
+8C7F97570B87AC6BD21590F305A531F6D32FB31B013ED8C7798A51291FD2A2C0
+0CB565F6BA2340F4599CF16480040D27941F25991F142901034AD95CF1EBFE7C
+A57A2C97086B488481C04E9BE785DB89A299CAEAF736465FBFEC80A8197F09D3
+82EDDBF1CDD7E07A772455B51F37ABC5FF3F0220390419B797FB46A209FA528F
+1DC77F67A25A3E2E032C263757BB040E174DE9AF9DA3829D31EE9DE79552C823
+418DC7853175138015FA33D5F39264ED66A4109F0F732104650CE5C56E0F23FA
+C5F79C62759E8DA0DFB08C3D750433F1D6A14A095D2D8ACA849D7A6147EAC453
+318D58121426653A89F67D6C78DC5FD6964F85AA80757B90EF6A57E9F21A009E
+C570D14808B3B2CED8CF671A34EDCA0518393DF0F2E6E1D4ACEEE71E5A5372E9
+26815A9068CE55EC3952AA1C75DBE28457A883B8846358F9820AE57A7393CC81
+DEEADB643938F84313DB8FD3F371417AB63ADEEA5E6B5F589744E408151F7A4C
+3CA7131D6DDC40EC5AC9E386CD515DFAD56FB5D18D5E3A145976FC2449BBD14C
+45E5CB314F707672F95115919EF34B41CB0F5EC7E68572E7188F5A936B13F967
+81CEB3BEB43602AD8BD4E464C0D5B09323F35A55327E83DBD06D75BD158B06D5
+7CF3F5DAA8556C812540377B20272FAF9B2B8959A12A0FEC9A445DC927627E74
+47456A4F02103A0586245FC6B44CF66C320913DE0F6F50384B3E0585BC7F299E
+2B640C274802E3859821955666C75B6C06825E84C3DAFF2A5A535EFA52C1B252
+27077164C89F1541A1F060FE9D1A61F6B7443EB28DB9CA21C75D0DE9D9BD363A
+DB927BEA8849C5765AA796AE54C512A3D51BF4A8E3C967F63EB1DCE13B0BA3EA
+0F4CFB2630E103575B0EFB1FF207F96A23ED5F31134780FABEF0D630CC6AF64E
+90A35089DA2354FFDAB7F4ADAC1426303AF547FA916342527380D5E0F7A5047F
+541DC158B9CBD3853848D1066A80ACFF7BCA9CC5F2007F1DBBE53E825B85F8B8
+BDCA072350DAA9A1C825414E5FAB5BF2E5A5344481902958B59CC87C6A4547F4
+F399E74A9112431B2A066DA65D1F4B814E230E0E161DE600F61C554F696BBF18
+1A2FA6A3535D4983CB045A268B0F54D00774954590A4CE34FFB00B579485C402
+7C54A6717B111F55E30F58A2C928120900C189DC0A1CC44C1CDFA9E83693A8A2
+CBCAF1D2DD3BB067BAF86C8AC9AF020866991D1294D678088FDA6E14C70939AB
+0F13A91CEB035EF5EFC9E837838497F2DE257BA0AEFB4617B3CB925D06250AD5
+AABF841DC47FFEB39EF6CF7AD55263AA3DBC3B9D50EEA595E203B78C5D30B83D
+CCF8E79B86CBC3CBEBF1187065D31E10FFAF2798980099ABDF42D05948B22164
+286D1C77C56774DE2E5A03DC27C3FF53ACCB292A862B05B6AE210256B36A4410
+B9D1600D177098F06BD5DD7E5105DD1000FFCD84BEE0A9E5EE98424D6328C405
+EF84CDB2B4DF01F6105E40332D5E067208D78C9EB222FF0D49773D853F3995ED
+DAB7BD856B8D7BE920FDFD64994613CE3153A0F82E9761888381D2BF49D14DC5
+BE70BB3017AAB6191DA90B440BE052CB3738110A94D7D9517FA7975A7D6E9574
+92495B202B3D7FB7F213ED050FE5E1CF7810A2FC62749C37D9E6A5B7C18C293B
+29EC2169F31B6E2D7E20E3E10C6D941C2A8EACF5FD126EE9E9F8A0BE33B737C3
+18A4877BE24A66A364D37FA41B0BDFDCB041DA654F55A569C5DCAE8A1403E3BD
+FAD659C4DC5EC98D6E36538A3680A7F8DF7D047B570031E7F9943714451AD5C6
+CAD5F766B2165AEF3ECB73BB8A60E53167E5F2E6636EF8B72B3E300DB4DD6CE3
+F0ED19F78FAB386989701CA816501BE8AF9C73DDE4C684FB380C05AAE1FA4957
+FCBFA59F4CC31C6CB6D4FD4214EFA50D25D005EC3211780EFB7CA85852179FCA
+4EE10E811D2BBD3D6CAEE6577B25D04021D300DC4C347FBD839E1E9568958A2A
+1E8509C66BF1A3A9CB82CED86FD20343936E341C1B59FBD0E2B9E95113E84B3E
+7D42E0086A8069966E65DCB5E63B7DE1B8B97F1EADC31AD1541A466C74C2D588
+DA8978790722A0D712FDE78263835978A3A9373E13575DDB5DF4FD9E585C5F2C
+7D0E7C2BDA36A6D949127B1169A4BDDFA48DA3B73A976218785CFCD8E3454B21
+F0E118D30463ED3184B218E697F4D78D36DBC927B1ADC31A9F6DE2862E16C779
+065D2470D23659D3DE2E7927C9D557DEA0DF036294563138A5A4C766A8900ABE
+AA45892C3C0D6B6E55DD8CDA1F3CA86F60BCCD92E5E04ECAC7818BFB227C5A2F
+4F55ABB82643DE9077B945DA2F3DDF3A87B581A623DBF213B904F829B1F83E25
+60CD32A8821B09445FF1D0569643B9BDC07141B607FBBB29A3552092E1F22BE8
+A9D852BD274A13DDE60C299FE21F354459D3334FAD429DA6EED4A948F8C10EDB
+EE657858C0957C9229906FFDD270EAEA8E7A17010BB3868A1937BB08DADC4C1C
+B19335DCA1CABBBD955D7C65BA978BA755045E5FE1537853650B191AB856360C
+33DD87871939D2F36D49E95D19EE9B99EF15A017E7CEBF28741BB7CF66A57CFD
+1AE132601DB33BB1935175F1C230270B2EA7C74F2EA94B762B40863EA03D3ACC
+2F7BE81B66F94D4014D4765682ECF16B2982F3A6FDAC73577CD118EE21C95C28
+81BC2CDA0E59AB941EA9E95493AC01C62292BDE4B446AA19B4FE2F7FCF083FCA
+4E6F7EA8624C034C343C610F6170FF97D3261970AA4E3CF4D27269DE79D84F08
+1E9A76252ED1C08B938BF7AF0748CD480C343DF351816B73CDF917CD7A09A86A
+07B79985BDDF6475979EA36B4CF462D28988C7522DC7393D79E9706646C35CC9
+2759C1D2419991223E3198A3DADEA2A860EB5BA1EB6ECE1E1C7CEDE9D5D53F43
+3C3AA3AC8D8B342C1CEC6AC20621D66851EE10E3EA4660782400BC82839260D3
+EE4D5A45FA4FD477679ED3D039C916BEF2DFAD2A3E996374B1F6FFE299F63738
+69B82DD5395D8BCAD6C67D808B275075AF38BBC127A2E1608D4571F4FDB62CCF
+F5D766D2D3B4E5C49E703E4C32FDFF5F9C602EB47FDD9F5DF5165CEF1AB8EBA0
+3CA149909A692C828D506C9674A036B1C9C962F856276B5B0296FE2195D68C29
+2AE3B2015599F0121B4986C36CA624D5EAD0531D4F136A17C054D4B0640DBFD2
+C913F9F066AC4940FF3C7D6D74C6B880986E42535618F558791F7577DEBF3E73
+09015F4139C40A428C47876F2A8648389ABA2EF638A621DDA85BA30DE99EC759
+722F41A8C569B116EB2DDBBB63A312418B4C5D9CABAB07A17C31BC8581C19053
+E563981EBB870F892218C5E9A93C205FF48D09CEB613D7323FB502F7C4855E96
+425AA5F10C0561F9443F1704E17D7D5927B4C3415D309DF5C2CF7F92025AFFD3
+A2A15552623D6797A8CF551A1F055EFC77CDFC618B3FF7B94B8DA3D855FF0C0A
+43D017F1BDE8B5CDC530A196DF2DC759A3ED95AE44D1D2180EEF8F5A438F1986
+FF641B560C96A4663FDAF999D203D6B34D061F1169ED41AE812F7057B077780A
+F2799D26094329AE8CAD0FE61B5A76A83A9BF74B0455E23B604692B82CB390B5
+41F4C9EDEF16091E6E9C177B7A5A7C08F3776B20C537FAAC7B9CE4A587170DC1
+7FD8EB494F4EC3257617A877AAE91976CC8596D661E609764FA64574D2D8DD9D
+4C41A361E62AEEB1084DEF60BB6E7C2D22F821F9C797B8A74B626D68AB62B3C3
+CA139EEFC14221184FF1DE118AB8EDD95DB5DE62CD9B51840F60FAD19F167271
+A71740C4E61CA8B3D0582B63EF858B1B27FE2C5AC5836D7EA0A3B31382BB4683
+57C3C25A96CD5A10EBEBDAE276BB34900A5863CE6F4D64D50609B82FF4F02FAA
+8CB2E8C3D2059FA0E352F0046F202A5EBC94CA18C569D20AA42BEDAE7BFE4BCC
+80AAD6751AA3C570FE9B6C990DE994E770BF600FA7E88E37D4577C74DE09ECE6
+4654722B4429DC62340F3E8FCE6E6E074F013DCC43FE5C51CAE1957CB420ADA0
+AB58B9819B587EB18022DCCDACB469417DA285BE2CA97372E2EA60873D758F11
+8A353CECE1F1F900C55D79C58B353D3997A02B1CBC5339A3069595CB98CF55F6
+EAADBE17AE93F4863F32398863861F1865FE99737B9855F556DDEB479B9350DE
+424B87904C3786F95320955C6055C90EE90AB678BF55B000003B668B990F38AD
+70B3C4DDA1B89DB93A2FF4D1B3E0977C4C730F2A37981B0B647208E67C1753B8
+31D97A76FDE618CD7112C7039F077697D95094359037551C85FC5C150E0DBE63
+26A8CA688FBDCA0B5F06B64DC5B9CF62223B466251F09A2E19005180266819F3
+785A963E2EF7F598A2D6C2D7DA7749AC7AAF046F2D7948C5C55AF7316D0EE823
+F64FD165A6F72829FD0485529FC7B7C076C75A1C6360AB5B878E7656936D41F6
+8AF9A01E5695F674EFC4F7B06699EE8884C6E0FEE39544F1EF61C2EB6FEEA0D9
+BCF9FC3670A3D6A2CE61BA04637C81F97A0735A002C17D26F8A58650DC407D1B
+4EFD4FA0F3AB2912C897C8D40876AF65F5AD3A625338CEDC4580CAE5E3471004
+C89565D9F53D67A41C175E301BD7D02C52C7C839EBEA60C396C5B0D73BE6A8AF
+ACEAC7EEE25395D1B0CFD0C4406C15E446D66E171C7C5893CF2FA1BACA35440B
+4494B8883AA6D9E4B7582ACDDC7ED6ECFCC6DBE83C1E4AC7B993763BD7B56AB3
+BB7DDB1966485732EA112CBA3237E5D7139190C59D25F37487FB66F95F57FE76
+384A38E97FEC1639C38B9697A4A7D3DF81CB9DBA1B8C2829EC74592DFE5378DB
+FBC363E765E6719E83DFE522BB169BFCB63A315C737B99E8EEF8932AC764AA8B
+CD024CB45BD0A39E96F40CCFE356FA905B9E450B74F2BB9D55DD92FE25210E94
+E3462D29C37AB32268F21B724A2404E504E95DAD1CB71605F38ACB8DAAB7822F
+060309A73ABEF70CEDEAC12113F5571DE14F73804DCE23D71BC38B9A9FED9D9D
+2D8EC6ED9C775BBDDC171E5C63CE9F39ACEFBD07A19C57FCBC5286C38C0171E5
+7341916F9404D576CA5E71B9993C0F301BE0D59FE2BC3765C6D21E4534A75E45
+18A86F2FF0A73D6576DBC5E0DCC287F109B1E96B2D954812FE5C7A5BCF2AFBB7
+5A608D6DAD6E9306BF6E80A062AFB67560A762F57C78B4330F5820F2F97ECD57
+F9FA88327D181429325F05FE5E81A7EB84195CB769C481FCE3111860A6DDDEEF
+BA1E693E2E395900BD2A16D68A92085DF0508D4796934DA1BEB63D59F41B5AE3
+3A93220047C96B6420D1061DBE4F7DD168ADF7ADB7CD31391F62FE3C907FAB5B
+FDF8D311E10DB23A6DAD5CDADDC50A4EBBD4C9DCA58CB8D2C6C6C9405DD7FA8C
+16E21852FCF7807B56E5FB347B0BFAA4991FEAE0EC220B503EC0F220230AA521
+6B1039ACAC72EB3283AC6BC8539B884AEED40AFDD8DDBF17CB4CD825C68A9EB4
+137D77E6A5C4476A66A961FA52E102C3F49BD4B80ECF0BF7F853BF102C2D00EC
+D545F12F0D8D5E04BC7C2BDDEA49199E7B6FB5817C576D58452D2E75162D011A
+ACD7D0CCDEF71502FE88496C5E19CC81ADF1AA24A405206E61DDAAF130889DC3
+C15E4AD6F289F5024760A1A89CF9695BCCBF5DB7CC5B8EA83FC32B087DAA825D
+D083612745861026D9C1D88D1C46BA5526A71F9AB4786C8110D8044D06D26B69
+CE1AEADB3A7342AFEE02C685C52E53E40662437ECC83685C70E15FEA06577A99
+565E0B85FFB0296F1C501FCB552194CDACD39130414418A68511CB9E4654A66D
+4744F96A5D356CDE099EF984B6FFAA5A9CD967E37EB4D5D8433380567108200A
+42B7084D9FDC5037B468AA275AFA62F116941558BD0F99E94A604AB19CE04E20
+1D782A1ED9246ECBFFE735D218AD7256D7CF6BDF707F7D65B9CC6BDF3857DC05
+D335E2D21DDD094A0AFB81F682609A44FCBDB3D6A2D696AE56EFE853338F8975
+998CE3577AC255E0F712F80ECE2C85B2C153CC3AB668A3915CE4724B2E3653B2
+2F38BDE00115A217FAF38675E9F16D91CF0AC34D687813746D269164CD505C9D
+8B88D2119A8DACF3B9BBCDB6804248AB09BD0CCA2A9B0A617E3A27A65A2A6EE0
+1B5A0A6F29133FB63F527E00126DDB0B9A5C1CF4FA1C8D6E1C0323FB488A12F5
+A962654F0EB4A54F130B9A483BE9857F90764AE8B9AA0101BED1627EF1B95BAE
+948A911DC5FD11009AC18D14217B504DE30D6433CE1F1358270AA5685A55D23E
+D7DB15D2C32A9FEF30A89AD2A43966DAA115C75047474DD08C775DAB0328A2DD
+CF16A236989F55B7A58D912F730B259E1872BE0C92C87EF7B4C9AD44789ADFF7
+38BECDACF9D5B8FDB828986367E268703B40A8B48ACEC6BB3359E61BBFE5B0F7
+23A6A24E1E3F63073E3665EDB2D32E9E047F6D1E47AAFDBD0033822928BD9C6E
+0E545C3FE6421C74A24C484E7D51A71E8ACBD199D19CFB0804781EF93C074239
+EF2F6FA27F62F365EA2A12DCA5D088D258A6A726A7754EFDB1237A79A7138E85
+662B655E329E57666EF8A264F2DE28BE64AB7BDEBEA9C4A78B1250794B611375
+8033481E0B0BF46B098071269D74CA4CA7C0C13ED52B8B91D052574B7B3B83A6
+CC340258F8D30FEF7ADE448FEBA2810D6DB302D5119C7D1C5F42145A731921F5
+FCE9F9BAFA5CACB875F8650BDE37862E43066BC15FF5B106912A34DE22309B39
+693D45B868FC6F0D68B7E5C03E7FC334EAA3E911B85B49A9D3CAFAA9F401092E
+18B29D792A18E94731DCBA1E208F1F4453C9B50884FC4FB147CF6824E13EAFD4
+80D2FD01EC9CE8C92A26189DD9582AAC06BB232EB59FF1FCDC52FD362B8897A3
+2D1417DB4E5746AFC353388AC3DCB8A39CB153E0E74C58211B8B7D871013E111
+8160FAB21A2FA2B768CE2CCB3F6D3458D555B3CFC5C70D8136F04AB0BDD84ED0
+86E21CF9CB9DD034E8AF0287E45DAF8773008F10AD5D0DD44F61E2E7C76E180C
+4F8ECA6E1E0BD8335CD51AD318A7692AE3FE01D06884E13490575778D12D5B26
+519A85DEA89F3F59C36555BAC37A48E2FE44EA51E6BD750B1A01EF8E95742C94
+75C19AD531062F4AEAF23C6DC7421EFA7E7D8D6D7CDEEB9A3FBB385C53DC0BA6
+FD755E7F263CFF5F69D6B1AE706E31507BEBECB25E8CDC09956A2DC75EAADA2E
+101336BA6815FFAC9EFBF32C57DE857E5BF524B1D82BCF7A485A8ECF04404B68
+04335E4A858D88D24E10264F5944A0695C5A07B3176FF22DAD9FF5B46DEB2DA7
+47B0A066C5816A277E85C1668BC0531719B190E40AAE955F758650901B6844FB
+E1199CE9CDA9B63A5DFE7F076007EA9B735189D09420BAFDFC7195D8106EA86C
+9B5F137F93F209F8355B96EF42FE38C74E791C99C1C9BCB283130D3134FE3468
+186ECD90E25DF9C4291EDE8D139298677E90175C1EC0DD4E46E497FC11DCC162
+5550553E6EC4D4647351530DADE101D6C6D4472C9BD8051E56601C34A6101E44
+820FFA209E6A9A6E9BA46B59CBD16C4FA650909359D48B54C30ACEB48E00138D
+7CE7D83D957EDE6676614F8032E51973D692AE87027848BF2C4D4C3973A36091
+B68528CEDE4C0AB90C3170883C09659974723E8600AA0B93A2CEA4B5C74154B0
+1BE885C178E452B37F709DE61DFD09C473432087CF7E589CD7C544DACFB79D36
+AA7D8CF8A04096B5E41024C1B4910ECF14F5D132D5C9D3689FFA4FD58B1200AC
+CCD41B8D76D9E4B80E0535458213890141A72FB1464B08617E3C668D0D1F1889
+DBFB2B7C07EDDF6C46D2CCB40CB1985D93F71420B3232925DEF1C219545B4024
+DDAAE581934F1A8CE228DF623A69D9CADD701BEA4DC16074475983D8DBB9FDD0
+E70A8542B3ED533B84E58AA0597396C584D3968E4DD65381D7A92CDFFFF378FC
+F323C23ABAB68C4B514BC82931BA25C067356DF11994A9B6C8FEA1E7979EA892
+3FDDC99BBFEA09012097C49C257F1BD7B54B553698F9DF78C95D2624143792FF
+1C2FDA58A0BE517D9002685087A375D2A8C58BDA973F22E0D484A3AB988D02CB
+6E3525B9FB4DEDBBDAF2A1D93D4A0896C0806A8B693F24B688E5CDF0E2192586
+63D28C51A94E0A663E301A5FADFB39F8585D31D74CFA20F019AA7AD9DD0B322C
+F97BC8380734140497F53A2B1EB430D810EE9E8FF15B8532C33BEB2924A2169E
+FA282933C1562470BDF20114639049D28A9638661459BF75D6AE4B8B31327218
+3BFDF4187FF8F505AE635E1055676DCC784EB6BD7FFAC6D719270A1453F1F9C2
+3E347652AA2481513FED8C4894D3F53C7FD9D34B90099413F89D5C0CAD442D62
+F1CCAA21A28F364CEDF35957170B2E90F1FF8FD9CAD046DFA75E36CA36121145
+4ED800A81D865AF65195A5550F7798A9415218FCBC393904F932396292C6DEA5
+10957AE6ED2E6427CDFE962536DB7AC414C399799796F98C83C0007883AEA3B7
+08F67444842A99E0CD4A80429B4A8F832A07C085E9626E00DD327EC559A210B4
+CDADA11D28B6E95F7E119BC7CED1CCE4D8E9E1B2077DCE58876858BACC26C651
+9DE3C4D3F72DB66BCDDABC34E4A1981D79A502095863F441C1235722B25B2436
+91591E6F31041071EE87CD730BFC1C63C9C14D8D087E4AB1D8383B37BB2FA102
+F4EDD67F49D47BD89D4FCB481EF30CA6B8456020818885E7F88EE493C8380789
+011018C824EB9AA16BF47B53C0E98C1FBC321ED36BF17D4139F3E45DE798BE80
+5EC1130CE6F5705A3C45921CECD9578B8AAE1D420B16D48495D1A67E704A3E85
+F7F2590251A522259753C60C14845F699F062B626A1EDE4DBCE3CF08F1886688
+045C21BF0DBF5679683E184D6E7874CD634D930ABB02BA3317F55A0B81741ADA
+315179F099CFBBFD351FA2976120F4DF07BDCD4EDB7FCCA27C4221C2557AE3AB
+F378E1F7DF12B3BC213D5B9E31A8C2C9398F15E8D5297436161FC553B44DDB8B
+ED03FA7772D605A843E64FF72818D0D51E3381DF8F13CB07AD0CE3755660C149
+3B8C5FBCCABC9D8C98C1D0BCDE05815426F390327E2C994C7C611EDBBC2BCE9E
+5028419E6F78F301795A93122BE7F57A8B069EFD4FA61EF35C737267504EE1C1
+32CA2A025A99D9BA7328C2065C752AF365E942FA8F6BF88DD7EB7203B6A79B20
+E69C1AE38B3D1327FA639EEE719CD9C255A8E683A575904361ACA30BDB2FD061
+D70AA670A999AAAD749454CDC4AC3B2202C5EE338A4CDA93C9B05E6B58EB3FEA
+47C65265E2D32210218239E3ACED483FEB1BAEBA73B544E03ED18567E7290F69
+0398071D16489E876A1136CB66E1DA46E7189367B18EF83D06E693127203DD1F
+83B4A621F18ECCFC5292C529568D54F7B20C831037130750001E078B2881C017
+A308D79302E65E5F9E0DC18AEF3183AA8BEAED89A0798DE70DBE5EA3EC4C4F73
+EAD7E8FBFB19ED627192FDF050308B3E5F9B704591268C43F99B971DEB414068
+4AA4EF5113AC74D1C80C17A4AD810E258630B0DC109B02A80626059F893D08EE
+7E112CBF87FCE766533BB99EE97CF2A7599C513EE55D4774001D76C6A24CBB41
+0E217FEAA6B6A4DCADF3520F0903F2B11648E5D7180A75F0391ABC4D75585E3C
+668DDE41109B78FE828746631574AA36526A4079745BB36E0FAF1DD8C0873E91
+94E35BC415C4AE10AA8262AC3118CE310075014F478C9C59B2A77880F18FED70
+D021CF974CA7481B4F66AF8CF601F4DD56C1190F6D39349174DFE2EE684C780E
+A6FE2DE96F67B27CF1C9942645E2D1621F2E55E6C197A3891C847290EA09F59C
+B0C8D6688D1F3EDAA114485BDEEA0C419ADD8117670B274D12FA8D2DB25E2372
+B1F9E51313F80CBDA54AE2E1869F3972CC8188A94638F655C4CCEA5235A8F915
+AB2FD526AC22DB8C7FCE28B7D4D167BDA14FC19892E41AF539F131AC9FFFC4B2
+B0C6A689E6AFEA5EEE0A0CE86A2666D725CEEE2A278AA17E0E79CE79DE495E19
+61A2189F012D8E846C8D45D769D11D0997543781E6EA97BCF0DCEE589BFEBB51
+8A88A48FA27219DC97A08DCBE8BD239406EF626227AA7522CF6FDD2D38C0DD7B
+D0A314D6B35CF17DCA54F04E786EC09C8D854CB8FCED2B1137856D697533A042
+16C3B3092ED3FA69E1E1429C87D7989E29EEC7F739A068CA8CC67B970C398C84
+2E76850FB2174CD17B06BDB9A4AA9BD656B367A443B538E03753A5C8EF1B6345
+8C17EE6E339E5C32D51644D5E840E27755D8540C57E4E876737DF31CCC03E8EA
+2C4096647309F63DC679501C2E8CE4F6DC6DDDC9B211408B92A306C9ACAF7E2A
+6DCDD2DBE4189FA285FE5B418765FA4E9A80005DEC72D3E0E2223430A467EC2C
+AE486037BFE650C82AE865F42D913C630B921CD4E15652B9A3CD3D4EC407437D
+1343DD19B80A96FFC3B15AF7E5DF2CEE19572E214E94A51A84B2404EAE132B58
+1199E65B1D8E5FFEAD1BB0C18EE1D6C62CA028A238F221BC0A55EE74B8731C36
+5A4A7BC82D523A26FFEF92557BEDDC0124EA1D4B76352FC8771D981D1C841019
+D1D6FE1D3161D60B59388A7EBBBD5827783141DAABA33231947EC9A98D106279
+B6A9D41CD7F2B9527E2791D4D6BCF70D5C32AC6FAD42D66D91B2BA2AF633B201
+88E46208334D018FF77F42467F919FC7B6355AC3511185399BA00B8D45BE2B35
+00CF8E20CE6F672B29BF2ACDC6DEA51C8C1B2EA1B83D3878FC0138139708049C
+B5B62AC091103B6C2D4C1439AE3CF37B5E3CC4A28D6BD771655689E8C015447F
+92B7A253708285F4C03A75641F84001FAFD36C8DF4150929EC7995B653B53305
+B2E3EFFE7C3BECA0B23CE0864AF88988A853716E7E7AF69D1A431FDA887790FD
+6E1A9C6C35DBDBC5E39F009740ADD2348CA838B3017FD6A83E4341397CA7BC06
+2C6468F9F7E08309CFF4F72468BD5C7EC622F71C7DB512960993B80D150CEDE9
+0A051E7C28218604978AB4A64DC0FD1F4ABE7637CEFB7E4D549FCF16BD5BA9B3
+488B824758A5CAC3D392B30A4E74BC74E1C6A4D7DC85E08B1EFDF083A5E8E427
+E87A542CFEEA77F69BE0509119FF75F2EC64990265290AB3DBB90FD399CE126E
+FC2B3EF77E064B19DB5CDF2A9E9DF9DA3CE07C6591A3AE7A06CCA8E1E18ED955
+1E3D4ED9AB413E1AB64581A3F2214AED77172CD93B90CFAB761597187CE7EB06
+9D4D6672E9B69D83897057B136436D260D5AB369FB4C9B13C8DB87ADA7BF2564
+967C6CFBB1B364222C89F0D67BE21A5CF4E3EE02D17256AE307BB987B2BAACD0
+4778574F3178EA919EF5CD14225FE3BBB886B2F6C7998A621B3560DC15A8F76D
+6A2FF2C8EDA1464E4B6822265A492AF701C78077AD97B550680ADE63752A9CE8
+9B607F55B946A622D5FFA3D5A5FABD04CDD93388348817AD6734F9366CCF5F18
+CAEDF873F3D618FE24948208E795CB86016458F5B2062D839483C07AB449E107
+76873DCD8EBE90B79A54CA0D83978AF80DDFF7B213EF6626E759BB9E254F73FC
+E54CB3DC00B23B848F83FBB9FC73A9529F5DCC469189E4067D5A8E4AC8A8B199
+EA673169A8E27E78A76D7A4295F36E03F3B3D1B98BE48CFDA821CB0A646516BB
+83F203FD86AA860EC0A1DAF03FDAC8BBA4E0163F109E3D5F3D9C1596F8C8DFF4
+4A96C26A8603C9743800D28F8C13FE3948BB99DA9A81B0BDD06BC1246E31FCA3
+14A4BCE5845A79BF4DE8C28E556EBC3B4E01E2641361062E0D24DBA60EBFACEB
+DABDFE057FFFF4727ED61CB0125FB0B933F2421C1589E848AD295B7FDFC5D1A1
+78CFA5CB9F8180F561EC5A9866781D82CCE5FAE0296FD548F7608297085274F6
+E33183D8C6CFDD9587723263B6F8D3FA343E38F8A738ED4E078436B3AFBBF4E2
+56ABF9F50D82A999FDD97E8C802029644702B8374DD158ACD14C1C3BC3659013
+C8CF9A26A4D38FE0820C48ED471593F81BB7213556531D027138DDBFE750D6DA
+5AB6BED543E49ADFFE36C8421BCF9C3AEE247C1B17F1FA25FACA6B0635373049
+9B42EF812AC4501B101273E1CF8C7973210363A8C77EBB726CEBD7BEAAFC58F2
+F85CD373F341FE527A9658F19C7236A73C203AE3B8C358F22E0A75ABA2423748
+DEF72D3CD02821B6955A38637C6AB902FC79A9751798CD20D678BA95B04F544F
+C6593651A8400477A3B51E140CB037C2B8BFE825BAA875C1DCCF5D87D32EFC94
+784DC47AF52924E28C1F80E7AA31F50B071E13DB7A8545365F09E98E50C68AE4
+8F0859BD1062B67A7EC810C8F15E1EC3EF0709D7165AB2B29D5321E8E43E84FD
+8B2B469EE204F1482F4B2F519B554EEBEA1636D205620D539D7A573387AA2E29
+A61E715BA0AEB904163182B1CAB88B38822434C616C0004CCA8D6D4AC7352174
+6DE58FFCFAE5A35F57BE71D4D8AD77B95419BDA3C52E93B8D08559130F751213
+3D086B7600254208ECDE9481EB25ABB11783954FB1A35B216318C07028B4205C
+179C8821FBD420B3A2532D991A1272003908E19C1B0963C5824E0271A6D2C31B
+7DE8BE1F1CFF072B819194CB3DE154A1CC13244449FCB9E487F3F1E0DA3D90DE
+640DFBAAAACB9C2E62ADC7D56B692CD0244FBF4D39FBB8DD8BD18839014DC7DC
+EB4DDDFF18A68FCE660AA5C537184E94C3E955C479A7F493EB85392EA3E8F7B5
+BF919F8A4A4C21C227189F9B65717FEBEBE152F365DE7D84AA53129F1978F82E
+75DCE1CC87D59E8E81FFA3A7A24B926575BBDF4FD65B3E54DE1F739DDD8A8243
+E7B2BE704B16DC90E87A0559DAEC85713C67BBF036C87602A121D8B25E040A46
+2BB02C9C79971A1C2BC40935BEFF7876ED50A0F26BFE8DFF0907A377C176FFC1
+EAC1E46C76BBCB6D188A7F9F75EC9BC2E162FEBB65B454C7CCFD6F5EE26677FE
+432FC2E815F90E3EEE92DCD04237FD3BDA193A43B5BBC36D42642C6C0BB8F3CC
+8019A3CF0B44CD80B6430597026844DC
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTT9
+%!PS-AdobeFont-1.0: CMTT9 003.002
+%%Title: CMTT9
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT9.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup
+/UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTT9 def
+/FontBBox {-6 -233 542 698 }readonly def
+/UniqueID 5000831 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT9.) readonly def
+/FullName (CMTT9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 35 /numbersign 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 88 /X 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 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 /bar put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0
+42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259
+4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457
+689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521
+0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA
+610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8
+3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735
+C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933
+995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE
+EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723
+2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0
+4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC
+B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014
+D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE
+510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5
+BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF
+93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC
+F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385
+45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757
+4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47
+088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8
+9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A
+09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988
+E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C
+0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A
+FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C
+94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741
+03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF
+409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71
+45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95
+39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971
+58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85
+84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A
+0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F
+F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD
+B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD
+D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B
+3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B
+7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D
+8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737
+712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E
+C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3
+E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA
+A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC
+2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467
+757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C
+54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981
+DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9
+08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD
+6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2
+A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5
+336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D
+E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB
+3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A
+E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627
+1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903
+FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72
+A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6
+465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0
+3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32
+CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF
+573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA
+9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D
+15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D
+D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5
+15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1
+64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789
+D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C
+D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8
+576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540
+ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135
+EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC
+9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099
+3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A
+1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD
+FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598
+C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA
+4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0
+CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7
+3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D
+D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9
+BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6
+1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D
+4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442
+C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D
+80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C
+AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6
+59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647
+3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6
+14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59
+B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34
+F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8
+54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588
+34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191
+825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439
+BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54
+4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F
+66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E
+2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF
+F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A
+1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416
+37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6
+741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1
+39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC
+887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49
+B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD
+15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526
+5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1
+80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839
+A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404
+BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048
+2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B
+B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598
+F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B
+9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483
+CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91
+DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62
+6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B
+7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7
+D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B
+9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9
+EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12
+0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2
+1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10
+85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0
+EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F
+D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518
+E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0
+88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842
+E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8
+01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68
+54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A
+97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78
+B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2
+D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9
+18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE
+A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13
+1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62
+31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5
+408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF
+1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E
+29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33
+BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B
+AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8
+0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D
+99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE
+480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC
+D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481
+FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB
+587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51
+A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C
+C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C
+AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D
+AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4
+48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367
+385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56
+8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38
+4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C
+839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C
+320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63
+7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E
+DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D
+DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F
+461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A
+BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449
+1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A
+3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500
+0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77
+EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA
+AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8
+F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4
+097C4995B2C3BAB2DD04B1A7097DE16DFDD76465E79ADEEBA90489ADD0914EBA
+53E11A43ECB11D072C68D2131BE1C7C43CB9DD5FBA0A67BA43D6851AD4CD3BC7
+39AE2E22CCC183A56CEB71D4F9F578518E376426E42B6390426A8434B5A83E78
+77A5B9963BAECD5FA5521C2A29418764E4EC1A72462B04957F823E2817A7F8D0
+1512919889500024B1C42EC107E8B8533C0B314EE4E23313A4C1BDB009A2073F
+9BAB479A3F9DA76CCD65629CCEF78015ADBC2D0D124B3BB2D322FC4D209E417D
+84BC3C758B6AB64A01E25C9C7B71D741AF90A19A339F99A0BE9FC39622F04C6F
+737474CFEC19C890A657BCE192B9DCD8F273CDC5294875DD4507DC5723EBB357
+73DB0933927DC21081E67E5DCF4E41FAA6E00E8DF04128F86348FB0718068FA9
+918319C4EE9D090CDF348153B6CC48648C55E889B4FFD3D75466F1B50C437546
+7DD9CF20980B148F60BB146402DC0732A27F255DCB859CFB6F9D329C12FB14A6
+7824D6DE27B03FF85BC59703A5D6C5B7D1CEBCF3C3FCD71D6D6F0311E41BF8BF
+0609D23C84720FA9EAC961C9D49C2E962D9618C32BAFBAA8CAB0B2F616E57DA6
+8CB44C5595A22D6793FE9323257F0881FEFF677F98573A8E3A4947086C83F739
+937FA170572C5DFCC89CAAD175D626CC2FF675A1DA4620152AFECA7497DD53AF
+F1D82F68A75FF2AA16F255C247DDE3B5E307B96EB92BF7CA4C031B706053D16C
+D78D2C620C5D1E95BDA3D8ED452CAAA579BB4AF1C5797F2B7225BBDA3E7AC5D9
+0F0C3AC5116C57334D40E1E44C4742D7AEE78BCBC3AD4871694AB4F3BA7F317D
+443D7E9B9AD53380D62EDA208CB2CBD637037DD19A4787AC77D46D559C93213A
+E272147F977F3BC1A4FD44643DDD46CF1E50E0DCACDBB2122817F290EBF666F1
+56F5CD26E995B1E3EB46308631D1FE378B37DC3D202113546B036DDF1DA32931
+9B67D9522DBD801FC6C8BE43C0FB3B37CE01E6BF14260530E493DC3A5EE2ED04
+2ED6B8C4BB6EFA642D66903EBCF687A161B94D63A670E90AC6514E1CDE477B4B
+7E066CD84F61233A258B13DA77365C5E302627EBD033C63D47A86E6B2CEB4D4D
+92E507F1953DAAEDF8CA558563E6CCBE51CA753082CA5EEE131C30CB7640B13B
+0C5753268074BFF7779584A3808F8F14154500BF13ECA81FE6879875DE12FC3B
+E58D65DAADD4205891AF008F869D867FA7DA4DCF23E2F46A1A1FC043E21F1915
+E9F79547291060D6BDD4671BB80234E474A98F1EC24FFE844079DD0D7BACC9AA
+BF6B27DE5438995830877A20A04B06060B1B5584B8B54986F85FEC0938F63633
+75D11190084C2AE3AFCA77BB0A497E2D1D6F7CF6EF387B193A652C61E47BCB5F
+C495AC3926FF8FC14D0B094A5C3CA9546388B135028E968B52C788F78ED28141
+176B1D2190D3552E654549EB21C6D76114FCFA365079A0968386320E37B32F94
+A550368ED5E8ED073D0CAF5DDF53FC5398DF274722D98462C15846C69EB7A4CD
+47CD8F17B1D9D91C43CD5DF110056F18F56FF5DD3AD6FC34272C958B49ACA3AB
+C713C8A459484D01C3D0610A03DBA37189003AAFA42F9301AD149E47611F44DC
+E25C486BCD845B13A4E44A93D2991DDCB159A509CC19C7F2BC953885F508F90A
+3FD4303179780FA973DB01432CEBAE35C71037449E6D5D44D4FE90E631890E56
+9E5FDD427175A7827DF70A58670BCFCB3C9F0F408C317481737A59C95C14F25C
+5605D80C732821A948509CC07B21301CA80A9FCA91ADF6F0855677A3E0C6AA71
+944531E739D7677AA50824A3560D25C218161225DC6428F16D255666E97CA479
+DB6EAD9172E7A5CF9CC97B4884BFC57246E337094B476E89E0893D5B83377F9E
+0AC80A72ACFF9110436A0BD07B43FEFDC429143548875D9CFCAB7143F391D974
+8A905F2EC166056B1EF2345EBCF2F27D60E3355C996515764C2332AD6641F610
+2ACBF70B22BE6871B3D1A9EAFC8EBCE9351E8436D4DBB45AF54E3E47B8B71A0F
+09CB91AC8C56A96116B5FADECF1359D941800512B0AEF302A22A91A25AFBB1A1
+F47A9660E30FB00B88A14522B3B024A797DC65105CE08D3ED0C4CBE8A894E00B
+98F77E873EB6FEA680DD131706336295628330E1FC6B1FF9D9503F5153A47A09
+83511D327E9D236CF4958FA037FBD3BB8002215C8BA4DFA1E788553178D1AB2C
+8D7BBECEACAF478A17BA48D3A1493ADA8E82AE8E9EEC3E4F9B0D699A95ADD6A2
+E3AA945A6ED96D608AD857F98ECC8D9B1408B68E72B06EC582E31F94349E5522
+ECF56451C22643192954FC9674D0B00C42FC843C70243E5291CC8CC661A57786
+E8C418A22A492053C75CC1254DA918881F94667E894D3FD619C183D4C056CE60
+A641E8D0F4C4CFDD673E3BAF4F64CE3D6E8A9DF8016DCE40AE7C10BF0A08C3FC
+11AB82036D171B62FF407E3157C50484617EF16AA9585C9F45ABC5EFBBCCF731
+BAE398448D796D0F12213F45A008451D84880940225B9B56DB581526E9538EAA
+489844D639EDB7E21E7F3533998142B464A608D8C2BEE89E4ABC413C53E30BFB
+D14A429DE14E03487C35453BFD76AB091E635DA15E9554EBE49CBF29B0C96706
+BB7AE920776672F3D9243E93F8985B7FDBCDF91805EE13CA01877D8476C88E2F
+F36628FC3B72900F414BD6C22BD33E3C5C0642C093080D4C897BB90A76405916
+9C00C1B0744955AF8E136682937AAD1AB0112CD668F0EB174002049F4B659220
+5625F58CE12D3D47B355910BB66FA89C495263612B4F6ABFC5689178032C0B34
+A0821A28B1125F21350EFF330DC7BB7C98165AFC5543B21BB8C1F083274F2033
+FC409532068857C34B91FE26B56EF74A8A6C7EE4D4C4B834258A96F340DB9EC8
+940F158AE9F1F88A404D687F3F35C87A6B696D96DB62853DE8B521350BFF2151
+66595617F835DA8774BF046C4CB1B6DFC695234D9FAD62061439C605D4723ECC
+665D49678D73D7538B292009527541DD30770E668DF5ABB0728C7D62A41FB6B4
+8B03448E69AFAEAFDA23B373B89A1798242C2DEB42910A641EEC277F33BF91FA
+833DF65A73335E4F46C47EA655B21A58542B37F27E570104165417AE5CB3E512
+48C67ACD9CA710D776B0E4E8AB939C8709A2092E0AA4DA5C7C219921AE2D1978
+193155297E74307CD88057C8AA8A8C76E3E5B6DE395ACA37E5E56C7559426E0A
+49BFF1F52ED7295BE8B69F1EAF891E3B7268E3074CEF9714934502100F940203
+AFCD1FB8EE701829079B7941C075CCF0CFB7F09BEDBBF3CD182D78E8523CC43F
+C2B9CE51CB1D0FF9289B317711783EB1C74F45B2AFFEEA23A8E29B86E00730E0
+2554AA9F97871AFCE2E8175FB73D1F5C63330B973522E56528613EDB96BE2A0D
+39B9171F18AA02C70815B8F039DC7F7C973C82B31E38B7022FC380FA56E84F02
+F611F79D7F82AD14C8A7FE68945F0E58FBDB9DE8885F8F279B4F52298223383E
+72D0C56C3AABA7FAFCCA43B1D54EBE13967CB7227886AD1E360675567594570C
+B144D383998186C83AC3C089CA1063D352B4926B75CA278961C14ACE4A0704EC
+A9193D4D588EDDD2C0637C721290F8E5D45DAB3124306EC438C3874192C7528F
+B42E815CDFB631D21412B39E5FC7C1AD908ADAD537B612FEC6CA686E32BCD9E1
+FC8857D659CC40EE9B739B7020E7ED14992D095CE8ACBA53C49062234B674F73
+DFA156AFF54B69A3B160C3CD1B3DC5D133AC282085CAB47A2DCCD17B276A9AAB
+4E938175C455DE42C61CA17C7E932A265A2F4BD5B345F219675605D2C67DBA7D
+E5603A0A2CA4FCDB480F6C5824F516FE89ADEA834678332793FED070554A2F11
+147483E2E07CA0C6482B1D8A86DD55E37132AD6C0A6809E884AAB7CDA8206071
+04160B8790D0443D15B78F6032A65125CF05D3D8C16833CF6F43AE0C2830C292
+0535277050AE35FD618168B69859A7324E69671BDFFD20D39945D5033759B689
+DBC5ABF16BABD01F223ABBE7E535CA0442DC2C0A39F7833FBEA24C0DB300D634
+163BCCC5419B2CF457AF7DF6F2FE3D7C1E93608D1B52B7F9C8DE2552CC35BEED
+F38EECE0874AED4507157389043FB93BCC7D7E71D42A2284615677E9D1F9ABC2
+EE38578ED962596BD06DF0729A5A1D1EB41A2B9BDE97DB3B619252F024BAFDD1
+951DCF127753CD953486D634BF578C4E0BCCE5BCACC214210FB1CDBD22BA1A5E
+BF0AF67E38E06554203587920EB27A91921FED3160832C6928AF86DDA5DAB1A1
+CBF3685B2D0FDE168B8F66E544900F889DF5E773CA536CC2FDE35287DBF7EC1A
+CECFF6C2E32D002A653CAC20624A8AEB07D7DE1032F85DA68B483B83F8D123CE
+833F0ADEC8B1537D0A68C3EFD8876C2094678AA68FB9ED4F57D71ECA40D03A19
+15DEFE183470DB6A31923C44F8AF1BCDCFF4379500C04057B981EDBBA752B735
+B7C2BF718D8D26C9EAB63E8901709325307AE7F6531B8B8D763F80436481BA89
+92A2D51E54976D43493B6D1B59E92ADFB58F037A5CF997F545666DE9466B313B
+625592F04768EE45BB7545B559A084C613ED93173425A1522650944C76905E3F
+481C4B96CC0B0DBA4DEEE7BC59AEA4E6408CF39CD800332E45040B32A17184F2
+325E01EA36ACB452010C9B3B8CD7DF2397B37EB3BE0BB4B55C2D10FA77409722
+EAA6057155F5647D973A321329B5718774F9F3F35CA7375EC6C7F1DAF1431861
+F18CC7B0DCDC88725D6B41118C18F736B7DE1C16685B03433EFC7EC4E26F9612
+03A3D3DC290527FB035F424C30473B870A4F87750424DF2ED547ABB12A3805F1
+BCF7ECC4AC554CDF539E151F001805C67174FD1FC9F9D1CE4CE1BAD0A65C4B4A
+D563A0DDB1A04CCD0802AA24C81C4B25F5974A45E027369BD67A610F5756B1AA
+8ED91CE191C24447D5AB4D12897D29DEC5E86FD992E80BC77951B5967FDA29DB
+D049E77EA6AD8F916F8F8FF75E410B7816C66EEABEC14C5256B9940F9ECC8743
+00CD8EF5BCCC197064C50C721C382A0BEA95BB386BCEF0685E8CB3D7D8DD0DE1
+DF41CC00541D0C037C521D079925A3C8D218552ADEB32FA2D321F47E3D08CF5E
+A82847545117C36DA06ADD506FAB524941783E6A87C302F2D2D82759311463C9
+A42D97ACAEB73F49028BBFDE395CC3E2B563AA0F36C3059A2A6333E4E77C5921
+FB8795471454AABA359A50B3216094ACBB0962899A36FDF04382B691F7C97D30
+7FE89BEDC4FE24714CBA54E1427C88F64EFC5181688EF2393AD72E3FB9A4467B
+7B36AB5730EAC0C812682B2E47C939DBEBBEC96EE526473A5674228BB3A05113
+FD8B294E841866EFAE18608AF00A9CF163893CCBD7FCEF39BE311B7AE268FE85
+A6EECB162C5E8051479277DBD86FFF24C46891DF148B0F9797130AE285C8D908
+ABF924C74DA8D35629B5397CC4DD5FBCCAC5B51C842CBF6092575FEAB1730E6B
+F57384D307A7D8F67B682F10191265E2DA24F793ADE78900FD1CBC50522D8662
+0F0DF6C00B435A8F66E88AF86323F599344974F570358E6FCE49A38C299F9413
+9E50CCCD28B4A1C79A25C1AA693B662A3694ED34A94967B7A153126797816A78
+337CA812AA2C63DC7BC0F721499ED576BB203055D2FC83EEEFA1EF1FACBC0B3B
+754240A6A5193FBFEA971AC058876A77090EAF2AB953650BB9F0CDC2FF6197BB
+8E712D60677E76E100001F3AD483CBC24CE8AE4154B42CFF1E8480EEF4A98B32
+2927FFD788EB04793C1E43CEB78FBC27E15E1EF3DF42D1538C9724D8A2A5A63E
+C53FFB4507924371428CA6ABB3A3B347F233D3743826038929294F56FEBA1EC4
+047273DAD9F1CA8EE591F1FDAFAFA1FAB4BF194CDA6A5572039500514EB20C09
+6A60E3629CD2787CD08F9FA231B18E4EDAFE213853473647C877BB5801803D90
+4EE2D7AF340BFC3E5BEF8D7B94244405DFD9D2DD49F46ABFF331031BA9F65BCC
+36A69F599FB82E28E1834A9B3BB9B2A28DD9DBD7820B0ACE05726A43A3C3B3BA
+4DAB7FE6ED9E6BCAF5D96EEC1DF629752A70D1CFAB741C9292637B6B2C0EBFC4
+F7E9531CAA8688AB009605A918F3AF87490C913EC6AED16BB75B10D8C9BA8F48
+F6CE9F5120C674439113ABA876BB4CE0B40D34BC3F20153A89A843C1C1859C61
+4A085480779D170E26357EB5398057297666672861A025BD8724A747CF3B83E8
+754081C9B027B04189B2A1B024F1D39D11670BA834F37A20FADD07DD28094B00
+400D062383E2F9DBD12C5AA8BE4BC7D7DC145EE4B1A289EC539F58B5713950D1
+4070FA9EFE10838846E45C2AD47320A690CD51F6924FF283DE926F2A48A52EEC
+9C648DBB8017A61C8B62A92F35BDAEFA6F8AC1E7970C4E1BDF827101F804D57C
+B3C00B4A334DB98293236438B8CA4588123C3CC73BDDD5A09B0DC68C0F23028F
+B51B6779066E74DF3665311F34EB389519910900DEF856C4F5BF7431754A18BF
+535C2B3E5C19474282D056D4AE7380CBAB4FBD8A59FED62B60D3FACD9D410B77
+E56CE3F7125D6506A3D2C802853691736029DDD1508497176AF904A9FD483591
+956F10B517CC74C1A5911396E5A99B0F447A850208DE4F4AC40CC0EC5F43DC92
+B39B6E4E5FF46E20614CA2049240B2F7C9CDD38C5BD79602EA0AB461D4834C0C
+4B3B7A7005E3D57694E177681034DA1C6CD9C59BF3CAC137804522E143EF99A5
+97F7203846CFD84F3D51C586FDD70F54D5251BF301C25F006F31211EBE68CED0
+42D4F978D1B92DC8E9E58B7901D5CF62F5B5668E3C5561593BA22BC17E73DE56
+796F09219554DECB4845CBC713DEED83F818F155424788C4259E558A4289DFF8
+8599CFAB3573E44663D553ED8B602D2DF5D335ADB1ABF2BE5B1CA57D8C7D1CBF
+63339E66BEBCEDC145872DF8B754A5C084D1059CE5CA912A7F1B503D7D4A1A63
+89E090F319149CC5C1AFF5800A6070DEBECA4242A15096E32BCB4592EEC00C32
+011EDE9F0A28CFAAE8E0ED5868FF4B68D81EE71475742B8A16EBC31460713DC2
+2788C92C46762E1567DE47D45AB8CB0D6339782AE34310B7020A2D36E903F8E5
+916A2D87B1BAEB147AA0857E3B8C6B42EF85A0CAE8BD5EDE5B95BDB8E4197EE3
+D65AA606FA8F86B11B13FEAB59A093204BE0C77C59420BCAE0EEC7065E81F200
+2D9BD81B3BB5BF2BFC36F73119A8AC2ABAAE4F3BC4A4C4BE69083C86D7FA0235
+65C111C4FE98C0F0060CFD036EBCCCAF20E7C4887C542C65395993252DD3CC3E
+27F937EA81E0471A987E8DC1E6E1DF6C5C24FE0D5919151855CC92A2F8643A1D
+B1A476EC2D7987575465205CC3EEA45C582984311E70D017E5432F646A722E2C
+7393CB76DE55B15840EF7B3457F381982E7D4E5EC036FB434CEF78189B0DBFFD
+7A518A804578034D018F48838702C353C8A3412FBD465F6B26BDB6CC82F38273
+AF19BD450B45E226B0566EF87FC46BEF50D9019EFC0AC8EE69DB43BC4CE30401
+7F65D90F8167E0F8E0494374E1353AA5F76F988EA1F441AC2F9BD8F883831E9B
+8788B2AEB6C47183385993A7092F24F178FA827C1B604C5C9B7D30998377F78F
+DA11AB98CC4905278850D3088904DD8FDB80FD7800BFF48BB302D694D6802534
+28FD8EDE7640607DDBFACDBDACF74EF16233240F46FDD97470528FCDE11C87D9
+FE49262FE715673DA821164E565547283A97F5D6542AA91F232DC7CD55FA125D
+7D4D6DE5C683EE4CAEEF3C5C0CA9095F49A6E5C50EF9648A48AB945A1159BD14
+9F6C559AFE9021DFFBB66ACDDA2656F75CF5668617DCE9E61190D69891E00DD1
+1D843815A8777773AC0700B8C288D4BFFDF47BDDC5E755CB45A2EF780806D00A
+5199FDE0795FBA924B8DD3C62070829F736A9FA990426D05E3A17244140F2CEB
+FEFD8AD5E9A2D06FEB8D2302930C10FA5FD32A80470D0C78155AEB79E65025E3
+D7742E53FA07ED4B5E28568B3EF58D84A1B030677B2049B47A9619D647459614
+B6C788A2D7B2A1A28473F7E03077F2B76800387EEBFE881ED2DF57D9E0731DF7
+F85B5893978E4987CB5F038D52DC04A77563F4C343A72A7467924DDDC46F9E71
+DC8F3C8B6DD1B257B0B2EEE2DBC375F6F10054508B3A9F5C96741C6C2EA4F362
+38499DAD4C3C60F872A4E60D46D4206CE505C79C9D23A90F6816A7D474F4A6CD
+59F0E51F3F974A583E9B42359CB05A49944FD0C4A98E9F2EC4616A353C8602C9
+9FE9C23C5831B7795C8166D738C3B1AE8DA84D4BCBA8CC3B42CFACA6D3FF9911
+F6DD0E3F51D8A34FD4CF86947321F4F0D8A235958F97D420DC9B84EE4E181072
+8CF7775571B9A7546EC8AA888C0973844C950B9B7C1CB6BED4D22A645E0D6B02
+226CBB7C90C85C8C281A26A724FE55504AD3534CA1045059521D490A127827B4
+A8ED830409FA14EB7C72B07E7BDDF6A4DE72FAA2EAD35B2924AB20245EC34758
+BCDA458B46EE08FE9A4676FF2C62294A75900C1BD18576D5DC14C5BE3FB28C77
+91F4C70953982ECBF48EBBE5776B13C82DBB9BC342BA91472136FEFA77D26C34
+ED729A7461C599285073E8EA4EEF30482EEBE964287F2243AD8C0841EA7CF2F3
+254B4621467E0F6736897638F6D272BA843A59F1ADD0BE7A8CA10620DC3C2FC4
+09264EB8C91081B2D7A922ED3BF3A0FE977B105FC977ECE8D410B93DF0F10D92
+72AB21DC908B95030947295E31359EB24995E7F876030FFF8A6E6797638DFD7D
+3D1A7CCD74A2508107B9E834F1EB6EF8ED145CBA279C34EA120B998251676FBB
+5A948DED6DB868862BD883EF862871D7B6D0297943FDE54252AE65559D65E3F2
+16C955B774E4747C05D2292633C900A37DE2B36EA44F5EA63042A0CC8E67157E
+25BEE390DE76BC6141F54432871301658FC5AC86572145CCAF0A7C28025D403D
+9518B4228D451A50F7CC18EB253AB9C7E89964CA289C12520C7BE1E19325DBAA
+731915673EE8E286116676248BE2F618B2E8D88EDD8D3AFBF84FC88A7BCFFE64
+C56BC9F94E2914FF82DA100C9A23E8C6E3931D225D917091A6695EAF38770815
+E35BC96122956581A14D30BB9F8AFEC5B6E831E8A8C230FCA87A4969BE1BDFAA
+C51C5FC7791EB8013D67DED7F961AFE4BAFD3087FE23343678E218F269B9F0BC
+E8B945EC8B9301E687FDFC672B7610F3D2ABDF92B441E25121AD2A0B46B1F84C
+EA523E1E3AAFD1AE2A854F07F04F26DD3066A9D07FD6EE16897D00D9D2775F63
+1AAA5C4AC0B9B10517E8989D47E5A783448C7FF5400BFAEC1113651DC37F6726
+4D7D19E21155575154DE7A27F334EE41D977A13D0B5C8DD3CEB37BB2028B0B3C
+B3E536882248A48FB1733F073EA75932139211D26F1E7270B02AAD59A1206AF2
+A5B6A2C8EFA38588D8204F9792988330E4025E3C9BFDE386810769C61FBB4949
+A207B499FE096D7A44BDCB2BCA400F579E91843CF70CECA76AE349662EF0A63E
+620C8667348BE8FDB25AF98EF04FD9A4F892A3C8F8413421277E2B6FB2486EF6
+F05A03D14E730C1836F1277CB4F5AC25775C60DB75161D44D15185EBF7E0E6F8
+D8F2F6DBF4759AF9D5BD9055DED8AEC3FBA8ADEB5D9E361AEF2B91383F5F9169
+FAB27B66F49655E2B61608D11FF26979745A41552F95F7D2619B71EB64027247
+BAA809EC06768696FAE16C12C5E2AC3A878A5B4E351D83C7B8825580FFD67CF1
+3EACB86A53B9A4ABE5EEA872ADF50077056ACEAE91806E00E66C1AD9F5B1A52C
+FAFDC465BB1F668A67F506EED2FDE3D54EF6764E4C5011117798500B3E6C28EF
+C0FED72F487F121A962C503344813E38CB5A3D72357379187371EC173DD21ADA
+12CABAE6EB771841322AA36B8C282B1A9027262DAB07C1CBCB5F7BD74B58D3F6
+B552C474C940D76B6B3F00373963C3E2F45140849316D44E18D30391EE2B1C3C
+B8F58A2C9F8D04E6E0B03617B1556031A978CA4818ED5FF6CC44158F58CEDF6A
+061EFB5DAD7186F2AF36E0A0F5B319E0E41DA7338F380927E5F281596A847F17
+042B12E23ECF0769CADAE5F045C270946CC62337819E6E939407CE14466C7308
+2E078A1B1EF7005F280DDE592D404AD4763A4CE3A6B15FEA9D73383A06523E45
+A7F6DE54DC41522BE72E5D8B82A54DC9F0903648FF3A0877AD61B1803F23C6D2
+BE9CD4E8E24E551E43363761FE61E05DC73F32F210E64A37C8B13F3EDE519589
+4E6FF502F07C4BF44C97EB9197DBC35147929EB0FA95A7202D9A3B335FDFBA0D
+C14EE8D9C3542E820E0D21060E04498D76EDFFAF30ECEF0D86125DE871416240
+8F92B6DFB3F80E784C583C5985264BFC23D0BB50D1A3A1C3D561586FA4CD7B10
+CE39CDD98D501DB4F7127D1B51B58A4AAB5B5130FB3B273377F7AE494F6578BB
+45370868FF64263542D8379B8744DD1D788F0858B599CBABE1DB48F1933C786C
+DD0568B85C5789CA9068A9EA9C801AB346F94CBA2EC05B3A9242541AF7ADC502
+95B8F51B7CC659ACB1B0C3D46B45A030D94D181C7119184B5449FD71C7ADB953
+737565A83DE8B0F468E08ECD5AF1A9C11F2C62403751020268F79EEB0427AA02
+E64EC681B2D0F53462A329A802EDCDD9EF65F3954CB6A92B9FDAEEDBEFCDFAFE
+FD174C46B841CC31AD035DF36428EAD6F11C4635F035B66E69238DBFD297EE3C
+87625049D57F84F5646A50C313DCC2ECE03CACC4D4DFE22736F9F0758C78C33C
+1F5130B1D80A22822557563FD1A6A4CF37A6B8C4A729043E77B423F362BBC608
+D22BB8A1AE5ADEC3DE3A3B8709BAA5174A8088BE74A23E8B71D78B9AA40CBA64
+8F62B35D7EE5711520B7A166A0435C6B8C55AF95BDAADF9A3C73D052FDA858FA
+BAE6CA00EBA099BE3D34534B5C25377D1BEFE8BE0A70A0A6AE4AE339F8FC8DAE
+BEA0581DA27DA791C0FF927BC4DB0BE7D2CFC0212A063DC4849B69BB764D6A04
+57984AF47C12989BA200C101EC9809248CB5F1A0ED85F07F76CB29A2D6602CC6
+D0E1D555B2A7851ED52FFD6FFB26F7763A24D492C14BDD4F35233B8E5A9DCF9B
+D15A89629413C8AB70437EE8EC7A70B2EB64D6A055B6D27C46C7C7425578D6EB
+891755F0C8B8F05E1D730E7D238557F7CE46CC283152ECF3BFE721D81A49A621
+94FB7C2607803BE877B1EA478C486CAD77AC0A9D386860DCC4D162838A2971A6
+65312084585325D103732865A54E3FDAC0F87BC43B7676E74A5DA5DE8F84C491
+95CCCCF0705E7B729F8920C5B64C2DD543E53E258799729881ACFD5A8F6F3E75
+63229380F433B95B5821B6633D76360B8D7F021C70547CC041ABF71316E51189
+7BBC5498527AC87593F8E5AF9FFBA61922EE096DC9C58FCAE9C100084918E2D6
+1DADD04C5A1DE76CD08173DD1206BD5487C152573E0A49464B9F9DE059F191BA
+E67A322EDC77426CAAB128CD92E2E73D90931B5D11C5AE636FF6A15609E314B4
+CD44E7670B667BCD109C4EB9D23AB504031713BF3CFED13F53C5A80EE104FEDF
+7A921F680926CC6E242452EC778F11E0C68829F53F22BCFB7D0B56CB37B370E1
+EA27A3CE6946CC8ACD2ECAB8E849E2D72C134BAF6A2CE17537C2C34F5B323751
+CF7E237C9B3D70DC661538E30AE2E6379725CB58CDA03BD38AF3A5A82FE3D8D8
+07FBBA36FE779DE11AEC8620C282FE1094CC96028CA626462C8B0F669AFDA0ED
+2ACD9341F1449E97B6C733A25599146AB0A602B97915EE42B62517205EB1699D
+F79CC40B4CF7CF1D71AF07D3CB68FB6D0E295EE783BAEB94BF5122D301897FFC
+7F64520CE547CEB5362182166213923B92302564793CA30347D4BA68BD651E4C
+AE6F66DA99A61B7DAA1FED9B1C32779AB9690AD6C3A67F170F58CE27E764DA10
+77062135BBD47BABB90D5F740A48F1F2369E3D7FFAAB23A5B554A6B6B83460DA
+7C6C609364123991D419B49FEDD344A264BD8F09D8D6FAB43137869AE97D63FC
+CEA9B1569B1706CD6AD6B7E7D1DB82900A325716F7A5C457A04F4B919C1798D9
+A81AC8FFC7D4DC1AE48E3671A73269C5EDAE5A645C430E273F4256412ABC761A
+A67E87E0EEC49EF4380F8478AC2E100A4183DD84D1112C472FD6B7E4A910BBFF
+880DA1EA898AF6E8CEC184D9B914C28B8305EFC8A101E55C1953C89983045C36
+D077C5776C3C365E26A920000A74813E3F4743A636133CFD94EB2F96566A7577
+750F9689DB2A77F6474EDB811394BFD4E0C2459A41B7B68131A2F6EB18372697
+339B8418BECD567E7CF7F6B6C2EBFCD23670C2EA9AD381061D1BEC0452DB0321
+89B0AB66CD300E29B33DFC62BAD4CDFBA974B28F21EA167755E6FBE16360612C
+5640C74BCD2DE4833AE216053B73E6914C77377F6B2A9BEE25D2E41930970940
+4A94A8DEAFC7D7C6BA66FB10F475DD3D2A91F3B09A560FDE6E04161AA587D1A3
+CE17F73FEBD2D49AD752C136A06B3CBDDAA144981AA7E8203C3AB76995B34582
+361FC34D3C707E9D8917E0C3B5E2D9B7DD16FEA32F42A23D02909502017A157E
+6D94CC34A4E8E367C1270AEA425CE44CEEFE419463BEA73047F6DE8C47422EF4
+0067D9667B6B457C7B16248F4D9AF8231B9E1B342322380FFCD0D3A7DE1BC0BD
+0D3E8C06202EA5D5079469A1451C7F3AB46DEB1C3C65329A5E1F9BF8A6523288
+BA5D655B35F6CF412D866F182BA2802A14BF1E917FFE1141029B019E1F4420E4
+70A4A1147FCACC028AB14A619D3F3CB7A34C2383FC20D111889DA77F60AC58AC
+F6B8CA68BFE8C81641CB473652735398ABF7DB6A58B5781AC2B95835E230BDC1
+64EEF942AAE9A54487A84A1FE082CACED06444B81008BBA78F3B6FFADF7E0A96
+DB4B09893823A691E353F23C48DBD76C5FD3BC53287DB89675646D14B1199B52
+62844A62C9257FBE5A611A2B7DDBCF91776CC36F4326584613D087364922BE5B
+BBE4A52B49E42188373EFC9207FCBE11254735D5800C0FE514217BF774F7CC3F
+98BA99A20C3F1F5ED1FB9FE91CFCA4C46E119A9029496B0007976A822C230694
+7F3C88511CE739512C2C62D3D5FCECED024F5DC86C3CEC0E81C16BF3DAAA2EA9
+F954541B305F70A7C313ADFE9B158EE4BE7E8982198B823FB11116D08D7F6B28
+EB7617650A5FC206E4BDDF4A150B666F1B53F623B5F0641EA50A82EE0D607326
+C2268E14F70723CB5536690FBA6E9D6DA27D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMR9
+%!PS-AdobeFont-1.0: CMR9 003.002
+%%Title: CMR9
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR9.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup
+/UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR9 def
+/FontBBox {-39 -250 1036 750 }readonly def
+/UniqueID 5000792 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR9.) readonly def
+/FullName (CMR9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 58 /colon put
+dup 69 /E put
+dup 72 /H put
+dup 73 /I put
+dup 84 /T put
+dup 86 /V put
+dup 88 /X 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 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
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340
+15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E
+ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4
+B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029
+85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C
+DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955
+F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D
+2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5
+B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7
+78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7
+E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3
+41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277
+B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072
+55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA
+700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9
+8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A
+F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4
+FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4
+3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15
+B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2
+AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013
+461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC
+CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85
+CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C
+4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F
+291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223
+D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181
+C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115
+D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9
+9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405
+2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380
+A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB
+2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E
+2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6
+AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577
+9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB
+B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67
+0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D
+9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B
+42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0
+C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35
+623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6
+B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4
+E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97
+CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D
+07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7
+53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350
+EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9
+52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88
+F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC
+D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3
+81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D
+B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6
+B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A
+31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF
+E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293
+846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733
+46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E
+44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08
+A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A
+BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5
+1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4
+D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344
+6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A
+E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E
+24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E
+75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D
+EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51
+C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0
+5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034
+099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281
+7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE
+53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84
+7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F
+7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C
+D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933
+CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD
+866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B
+B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826
+ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B
+B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64
+FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B
+40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643
+D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8
+2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787
+39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2
+1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4
+F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9
+253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B
+14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085
+6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E
+E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B
+9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E
+EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339
+FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F
+289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3
+A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5
+5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46
+5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652
+152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE
+67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3
+BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59
+3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88
+713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF
+2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5
+D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143
+6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB
+A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9
+F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95
+26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A
+C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970
+350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700
+70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5
+F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95
+F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8
+9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2
+DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473
+F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D
+064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF
+1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325
+A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E
+E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF
+01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C
+40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C
+72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645
+24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1
+EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775
+D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311
+83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483
+5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448
+1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69
+AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC
+4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3
+7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9
+65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063
+B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6
+FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6
+4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490
+8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6
+1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3
+10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B
+C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4
+8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A
+C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0
+7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F
+852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C
+3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997
+648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD
+855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE
+1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C
+1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0
+B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7
+D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99
+24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C
+552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733
+6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0
+800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8
+6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659
+E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4
+5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2
+00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F
+E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4
+82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7
+6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3
+128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D
+744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507
+84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF
+AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86
+5D239CDECAAD9AE5D95377E0D3F61C2AB7EC99ED28D2B4A7B6004A566B43CECF
+7E35419EBC2A47CC76393F4778DA801EA75B4C1FC38062AA77CC4EF0E6CB0C81
+9A797C01F89BB58A957D3DAE33E4256B1F5A7D66C8989C512DA066D6DC771548
+F2DA3B490834E7B4CECD9293A5DD581A3171DB1C41F348377A602A2DDB80C0CD
+7B960942967BF3983FCE91203F8C465362CA8E91B3C759943797C24CC83176CE
+2D044CC07FCD6CF9DD7FCE413A0B2CF777529685866C7855509CD57489F07108
+D995887AEA9D20B3CDA77BCA95B6F655020E2964AD82AD77382DFF4903C680FB
+2C666FA0A35C4C85E87189C909F4B6A0C788077270ED2C2B0D838488F9DAC159
+7864727A4F21FDF43764C2E9B8BA9A8416FCC45247C82FE6FAEBCE13C1E3A49E
+269A4690D0AE927362CA09840E5D802CFE2BD403D853D4FF9DB92D17AF722C95
+271E384878E4B6991DB3A90422F7D0D4A260E131BAD83120E618BBA0C7F201C3
+E6822BF981212D1462A8E8C28005291E4D768BAC7378E124713CA18F365A18DF
+7FC981026EA47CEE8FFB0EFA469E23050DFF752ED042F0A9F8DD7CBEBE018E1F
+056476FC098BE6A639F16CF415B773153D9615BED1251E4EE61363C0F51AD30F
+D0099419E94B1EAAB833E4E31084024D0E7C946E83F574F370790FF713D5F12B
+0141EE5B103939B88DDEA6D3A49A83886DB260065E423B426EFCAB1270E1C0F3
+A18E54817F7BDD3895DF79E9BE619F51924D7A42202DCE9AB3649C01936660D3
+CB62D4FB61BA328951941B644D69538C3D023168CD87F7D7697CCD5020446B3C
+96FF9C99042164C633B9FF63BCB643226DE34650381E96D9477ED1CB332A3DB4
+2F3178303056364CE4F7AC5252F4EF69354E4B5A295D537FA83152FAC3669043
+970D18A18FA4ED1DFCBFD24365A1D19F3C5BBA92F55C6ADAA3B2B49B9C3EE3E0
+6D9F9888A90D060D77FBD0CA42F8B32E1766E71797F3EFD461A0076446786FC2
+92FB5760024DBE28098AAB2192AFF759FF2CC06304B71259AFD701D91D6CF5DC
+1E2B1CEDDD6218A5CE4C089430B736FD3AA515B52633F76FC5EEB74856E83283
+84B4089802A732F224E57628117A428111B305CF8B23942378CC6217567E4235
+0C815DD3E183EEF39AED664EF1FB9E9BAD01368259709F26CC0B07673F44DA2E
+1E7D41D889A9253E4930B2DFDB4E6C7FF05760B5DDC47CBF651A51CFCF2A2142
+AFCE68CF821605ABD7A734AFAC26C19DB24FCFDC97294C2C4256EA9FFD60532D
+8BD22D850B8EB9E34C0EA2AE82D3DB12EC9C4A0C28E33ED8B155CED74370BB57
+70529AD5C6536228FCE80FD44B49B8059ACFE6DABCC6E1669788509B442DD84B
+8E4AEC46F111F36491B206ED15DDBBAEEBE2A22F70C2FF03BC70A3463989ED53
+83D95E1F84E26AF5F6F841665A4FD1B019D2905524EDD4D0BC7169E507127649
+1B79153F8DF73FD49590C50730CFB259E34814DC29676637FFFEAA1E8BA1CF11
+32B3D87F43426B64371276F5CB3B235FBD689E5FDC0BDAFBB97E2699B7B1F51B
+F6EEF56F77A6A2CCDB482604F556EE59B975BB4890B2029F4CDAF832B0662D9E
+DBF8D21C482A04429DCD7338CCDFCC0B6C5359DBA150FC69E166E6A53CFAB7AF
+619DF3FFB8CF5ED5C2907252FDC0F4955610BCB009883036F060449A1B19DDD3
+634F5805FED544B69EE9B0AE2BB4EB5C1F2818C30350872D90478F13CAA3A175
+F90BDE98CB15B4BAA4E3B7075CA47ECFE9EC94D5D5D84D40A1B1D6E2F900365B
+83A6FBC06EBEF110CAB8928AD9CD5D7B8B80B8DE0773C917B3CAFF1F3287EE5C
+4D96208EB19A39BC8F6F080FB260EBAC835F55317E4131800E99BD0B32DA1FC1
+70284FA71225B2BDB0FAB479D9B166D442B6640CE02C62C4CE72A35BFF14900D
+564658F0A4ACFB0CFC3F7D2668AC317CC099EEBD1FA0531017D74B47E173553F
+7727CAB5EA16F2831470D5B7A0906CD92658FEFE5A0ADC08552CA630C66C560F
+F935F7987487ECF74CFA1CC3A21E456DB8A5216E4DB5EC85E5830B36D5468803
+6EE18D07609C02ED2E423C33B97B28C87C6040F4E6BEE05796BAC74FA8C066B5
+436D54BDB3E493F59FC8885EAD2CAB26E7035783057669FA05E97732D5F6BE7F
+CCC5B7F4B697EC12999BBAB002791AEE65600A3C01C8FEFB74E98FCA5E9E36B2
+E49E4ABDB8B129EF6C93EE410E968D5EE1E5EC84A3F32305BAD602DDF9437D60
+03214A0D3351ECD6F4ACF057AFECCA827F424DE94980CC5FD17DBCAE3222218C
+F679FCB30460FA4E858958555F5218EBA0BE32451BE4CBA35F7C9D751B6BF707
+E972BD5CF46386D697F7CBDAC0B2071A44CAF624CFAB5C7531FF7D73198BC5AE
+D82A701376DCB4274936BDBC3BD19ED73BA77501C8242B0046C5312A303E2198
+96D29620BF292E814B9ED83A87FAD8959F0417939AFE2F8845FE0BA0A9989562
+B5B615D6F36D91BACA10C9F45D7C3910A3CECD86D600B6DF886DC3CF5B39AF59
+E36FE4E410392C9CDAA87F03FCD11FB6223C0FEE6D662B04536E8AD65C1254E3
+5A19BAD8513454F32331E759CBC124FE9E1008266412FEE1648B1160A6314F9B
+47F7B91FFFF8CD31456565F6AFB681375D5FA0AC5790FCF3A5755BB958B651C3
+11A83CBCB8E2FC5BC9D8A59BDD06541BDAB1BE76B3FD97B4A7197E0FFB1B640E
+D721F2FC9337AC26BBB0E45C46AFAA314B0E25DFF9AAA29F60CB6FCC2E67D0E1
+4C1CF35FCFCE344FB20D440FAC441FF8B26151B2917D2BEE72D46EE5482B256B
+D5328509147B8FBF25EE397B651B556BCA4DA6F2E8560222A97B2EEB8DC3AB2D
+1241467D6F903485AE77B72EA9F5532BA0033A14003DF2D73C6A10CED11F7E57
+DE14C95389CC9E461E1FA37CED4B65C99393D91D828D316BB3DD8F1B6C8C56EA
+ECF797BD0D6F44120F3575AD8CF7D678D9916169DA9F1202F43282CFA34E0120
+A62C24A4965CF785CB7B6BB7958771662ACB1803A6969FF2287177623FDC4A64
+6DBBDB9D53C7E7BC530A6352C2359C1012CE330874226D75263A29D34EF7C6E9
+E56C720B4A9F3035A3498F403F122D2AF80B3537637C612EA41BCDD5C9DB5959
+77208870D8643672744EA706A62E0F53322EEE450FD834A7B5BB9EE2028F2B58
+4449AD9D3BB7D518DD0E16CC127046046DAC7C90915FFE332D68EC795A00E892
+9A4D829EEF2783476533D0ABE9FC00E92273701360D92E2D8DCF73407923ED50
+F09C1ECFCB5167E4FDB351F21C992EEDBB3F759D7893E67EE3F0B0AD27C22503
+8D154E4656F94CC6AFC011DB6A3DDD35F70132701BF491690BCFC0744A38275F
+9071284BB8B2ACC2214FCC5F1F47B0E23D8A3A14BF9D769174192002FED503CE
+76D41BD8DD4F4848538809124ACB478D62FC835E7B0F9F013CD7AA3726FFD602
+A277E2E3F14A3965A17A5D4D33244CE8CD73DEF41CEC508A5C2D495F4D59AFFE
+3DD3B8F03E08648EFBB86C2FFF1CA81E59FBB95C742A6186D36BD2542942AA0B
+F0AA77D6961D2FBE49EB4D96FDF73B2AD20E47067524ACF68ACD0FB98E735866
+6B6D95BEDCF14C80D2EAEEA5EAC08F610CDAF5792893B4528161E2C9BA02A14A
+45BA7318088C962D8F83A096E3EDCE9DE8291CD606E8F0ACF4E735A7063E9D19
+5B968471FDA0C2F9665EAA77FDD0DB0972C27EB79C70648B9ABEB17C78F5BEA2
+B340DE91393D94C53BE1F14CE900F048915D4680B890963A23BB5C800E337F57
+377759DE9377556429120243752064DE70F565A3B8D8D74CEB8923BFEE5525BE
+102F05442F7C2F4D45A46784BE9BDFD1AA3EDA2B7E46572872BA4CC4501D0F46
+A182F9775F1EE2991CBFE290CD5E39A79895D7ED557E0E23A70117DC23D47D04
+23CA9D1601B759952FF910C8E140F349F4D2807339BA0658E77DC1C67AD9C156
+316940293F225C9B5B62314E1C83F92BFF8AEB45A9C04441BEB0849B6CBB6066
+65C0F6E70494C86B2213B82AF766EFD17E62C5361EB6588177E291D0F8C62A16
+8377836C8A64B5ED8007EDA143A81830134AE19DE0493B53305FB68D254CEA16
+E4AC98C13FE473C58C8081F9E507675A7194EF82C2B7961FC49DBA6673C7EF54
+F9507FC208A3A0B9FF4E1E0A3B7106463659F1EA6D536CE2454CD97A16696280
+0DDAAED71FF66B64A7EF9D4A06D0606D153F00BAC17DF7453972AF36A9A548C2
+DCCD06DF7B30520C997EDE83AEF0B3E33AAB5F5A1D8CFC196A5233B33B4AA8F5
+69EB4D9D93E350EACA5E2BF58DB75E1CAD5D234ACDADBF12DB0FEA6B9F4F074B
+D464EE9E4610F716DB761639569C1B114D89326A96A5EAE5C035240FF56FBE98
+C50ABC3B51D0B6F2A68A12A16C9EE9BBA04A2B4B7DFCAAD955DAEF48CA5210E7
+C415A7C3C8E07554E26120622D85B96084B1BD28EE71B1ADFA50385DA2BBF511
+469764A3C801675F38981960A27798757B286C745123ED30E5FE80B69F34BFAB
+C75A3D92A552821A2DE47F53C5A0863CB8F60CE12D3F85136D4F0396548B225D
+78C3112D8EC2F884DDECAD5C8E9DEBB7E01E55078B3B2F4D046A5CBEF678C10E
+7D430D1F164A19992A554540AFD5C8917D5F853A531B89D00506EEBC5385733B
+C3311FB5309B8C1FF683A4C639E2E599FD1BB1335FB99E71911D1E25B342CC56
+946BE1A45FC5D4A0545327F52527A53AF90C853DEEE4FDBABF7AA8A5E39615CF
+ABD1CE72F60173AA6E1BF7B3BA5165616442AEF6F839B0511A3C6C50920574AE
+0D92E1E3D702F4256F73CC1E4BCEAFA5914B4A8DCEE327CE9C6D45B1DFBC252D
+C54040FDEEA9364D6822A6798EEEAD1A5F469B9877082D321C9F6BE9B8D20042
+E267A129D30ADC64A9BC0673BE4A23570A3EA396F07DC54E4BA7B3E84D555171
+33D499CA5CDA191E9A0A094995160BD2D2B59D6071F00CC7CBA5B2BEEBC284CB
+D29744E360D8F9A41A1E0476BF25C5DDDAA1BF5EB9095062688B73EB66222C0F
+44AA7BAD1F26B3FD30B9981FDCFB6549493E7B494BB0BBD7826C23095FEB87A0
+0A74D49A9688C29DAB21D32C3CEFCF46A38215F6CCB23CEA21AA8CF599C651E2
+7AF4B67C3F17B052BBC06AA6038111E4AA0765B4464051A74EEA4DB70BF14B40
+FCA95228909BB7FE9F90B5A5D4CA465C5C9924A7F06BC5BC43486464DF0B1BA1
+D52A4F390BDA3CF2F7898E9DB58CB98A9B151ED5387CE5848EC497C61D072EC4
+8D5FA825E7480C063A17420F0414A2F666F2A868564439E000DE89DA8501C759
+63183AE8E7577A6C163CF145A0243349E61B96D1A6121361EDE749D9FA2D8270
+72BDA70435FE0BEDB2D5F290842B8E7BD56B4B91AFF3F4853B9DBDAF3F1B5FB8
+75DD8A2464C82B46C3FBDCFF3A54460275BBBAFED4C163CAF70044879A3068D2
+6A272EE3E379ED00D7481AEC7571FA1AAADB1ABE6F46042F5CF2BB8D9E58FA3C
+4E5943B0EE8AAC87913AC1A9531F1BBE3A3DDC8B156D61C3681C014DF910B806
+8921AD41FDCBB90E1B86B8450339B0214C6A0B9457280FF745F2B7DB1BE176BD
+67E4FBA23C53ACF8D95276968CF1F106119C0FFFE7274BB2F20E06BDE3C04B77
+6FAD50A4F9AA371D0993F72BAE8794CADE9606D5F417D2DC807B6AA2AA2B10E7
+E25AB7BA3587EDAAE4069F8450590280024D2B81D239ECAC5456965DB9F3A939
+733C9E978F1456F0FDC64D886FAEE31E9F62964840A96972A1387600AADB271D
+30B93615DCD8B639F81A687C0CA41254439A567CC65CC4B0B774A225FD784704
+7BAA107DA3E7C20DFF37B99B0F5721D793487589526BC08905CFDB85B62CDE82
+2FEA6A0F6E948DF73EEF8FA0F6F29E789F66A1E0566020543278540AF1B4361B
+A961865D1022965B49E438C3F9BC685323A2A871E9B7AFDD8A2EB3AB1DFD5BE6
+9FECCF68FDDB761D7B6689122219105C1D8E1D5BC94024E964FE1176C6ABA0DA
+48E74C7015FC77B449324B9878D319D1F1D21F9F02BC95A88E02EA5667B8E830
+0602469858B496505CD9296F388A71517385EA7B452B2C6E93BEF2BECF10C8E1
+48B3FC7CEE4A9F477C15780EE71AF93FAB17BF5BD6CDCE2E2DA8780A8409DD9A
+D7BAFC72237AC873661A7042EE2B039E92D9B44A38260B071A46A0999BF1041A
+4DCB3C05055F52A57FC7A8BE53DE835B76BB8A6EE7830E549EFC04DE2F3EE026
+38701AD0E574275655153583405C3C1020442D267B083B59AA35DCBAAA3A0E4E
+7E6DE7C103BF73224BDFAE6036A0574151E6431A35DA4ADC35316EAE06E000D3
+91FA7F8F21FE72B6EFBF41BEE012D23C634514A5FF1CD272A0EF4B9B647734E1
+AF50C61348A99C9B94C12A7DA8E711E443025CF4D21ADA5B74696B9766253DEA
+96BC70B99CDAA427566E3CEDDA1AF905E627D5480B08B1B48EDFACE359ECF4E4
+261B86B2B05172F088135E7D13731E9D5455B8FA0FB97DF030951801D6A7218D
+7D7AA38715DD62430FFF595826EA5985360BEDC65F0CDCEB890F0CCA08193607
+166078E612F83F7AC14156E825C62089D3EFAD3B5A4179D998BF8B7C2C70B1F0
+33BF461B1A4207471A8BE6A12580BC8223B359DA5A761FA4C88064E17D22DC59
+547D891DAD7315E16B7AE84CD7CDB1F4D9B3889752C5E68B81AC0EB288A088C6
+B17ABBDF5E19BA911AE09551737AB8D3FF959C1E15EE3A7C0CB48DE2B50F6CE0
+7549957D9E2F3888C29B62E336EFB8F3A5652A1C9F2DC1679C407793C4A863AC
+5F99AC9BD056C7EB3AD743B511D89F8C6558622D67261F5DE0C52CF6C2F36977
+AA2A9A6DFD45A90F001C377EA4E38724869190A4F01DCE1D7A890D058395B528
+1732B4F73F734176F9AC5DB5C520D99D72235125E9E08FCA56B61C2C5984D632
+294DB55B28E48D427288486F2EDE088E767AAC46C12F3C10EC87B488B512B7C5
+4348F00978E626178F568FD1F5436AEE4762FDEFA11402D0906218F50F3DA6AA
+A04844E7CA384F311F23DCF95D310D7F9B9D38EDEF8AEA6363C0D51EA6D0F29A
+2186AA3AE105A891C328861D191DBCC47B4C4DB1A2540E890B4316F7441F738E
+FC091ADEEABB3343E4E4ED63596865D81044094DE5FC00354A41B5980B0C361F
+20D2256ACA15780E1C2EFF4C2491007F4EC6D8325095956A8CFD231D8D1AC6A8
+BB1A614497B78039D2C3956923C97B82864C40988463F8B94B8C649EB7CB5CC3
+93072CABFC642D697B156199CCC534B0B97BDDC44772F16A4385A391A65E5776
+C43BBD7CD659713B990C21F89B76BFF6594F466B21A713B32EB922655AFDF1F3
+A88ED6A0755FE59B23E305DACC3D95855DFD1F4205656366D6BB17E11CA018C8
+547D9BDE88DB0D68CD1698894EE41C3B8311F5CED298CDEF4D83D6E1926FD245
+1341681972317B536B5A0453E73101AA0D7A911CFAE6CE64DFF39BD6E9E30578
+A1FCD948544A44452F91E2199548F830E022AE220CDDF6A67CC6A3969E0D4D25
+1655E1799CD1802F45D3D1FBC5FDBA201F4D91146F8FE690BEA0DF724D52FC99
+994BA6E31A96D8EF6E2628A0F965972C3348E285D90576BA196877343635B41E
+A00F67F3AE300F1FD2958663CF6E5BAD2F8432332BED21E07E5FB76CB67E7885
+157153DA37CC792A807A2EE1C3560D29BA8E48F273DA2872BF3DFC5C13AEFD96
+36BCD22374DA92E31E37830BE982529E468CFA0E6E40A412DC4D3427C0726D26
+2A1CE96C5442CB301B65672FB8DA07CA7A0D03B0EF1D6392CBD797A909CAE239
+B9C9C961B10893DB86C1F882B7FBC0A1788B0A8CEEFFAD0C5D2740BC69B07B1D
+262497AE2F1A8461E337FE59B03B621EADF70E9C09EB9D3F4FE0C19DB056E6F8
+3E776F3ACCDC906058AFEFD022EF62D6C0C9BD626F61184E7C5DAEDFF88BB984
+219128F32AF8EDA2D4C286D1EAEA9947083C5F84FFFDF1698FD0A140C5FD35B2
+C153A7A44135BF077C180328684AA8B0074E6BC727000BA9A6F55D127C5A61B2
+786AC1F6EFCEFD7E544F43B61FC067D162576AA75F7EAFDC11A71237AA5C2749
+FB42DBF094BF1A24EFA8E4D5C324378AA86CDEE4F0867790CC8437A91E4DBAA2
+C67B8E50996E2FA20F2C807918C6D6AC4FB3406F52FB10D3C33466A786C1331F
+E6FD17D02B2161E8AA4F49144D020EA450C1151755507FE5E4A207C6314DE1DA
+73F3E8EE316A9BCD56BC484826A6E3731BA6BCC8C90196EFE9E93D562F0C216D
+6BEE0DFD78492921DF217A7B8170493E06143923D732F75CC42576D2BFEDDA04
+1AB26BC3E37337479E122353FD6C11DDF4CC88CFB52D07FC73071E0016999727
+F77BDAB173E0EEBB69FFBD3F3A5B28FAA49B0D29211B58B338BB439513BA611C
+84AE2700585AEC8E79DD42BBAAA2453DB4E349353950189BA77E9FB98B6FC38F
+D3E73834D346EF768820F034CAB3B791BC5CA82C2D33D17CB0C4E88274FE29EC
+572908CBB2B819E1971128645A9373A0D8CE8747D84D40D60F69DC0E8BA13FBE
+76913402FA2FAE04DB7985A2C99165B2F431DC15DA0D34664471FB1B697D46C9
+ED5D42AF27EBBEEAD58583299608464236FB81A60B99E0431B71FF7646BB3CE8
+D877C62AB73EEC60B77351E8DAEBE0FB978B46E7396103E9729453E8DEE72E68
+85E205D26FDC8E8D6F834C478AFC517F4EA94EE8FCEC998B391277B30ED892FE
+8D79E45727AD340282BFBF4235C5C9FB7BA254BD24EF7EC7238ED953E03C27F8
+1B71F2C6911FDFDB6CD504B2E92F7755CA74722679ECE1212823C09FB19E3531
+333FC8A708D326DD49804CAA48C448D1D4D974A8C050FD05E5CCDA19EBC30CC0
+AFA0B88AC7DF8198E35A0D74993713AB2F5F037B6236622622D86C1079CCF80A
+8FE8CAB525769A921BD1C6600A3DE4BE8576702CF3E2CC7AF51E2A3A7E050236
+9BC648D2F843223DA0D2DB037A2CAE9CB06ADCC85A51C7BBF268D7BE707B6BB0
+B90E831B731278E0594C5C14FF15704FEA9ADCDDCD4A989A0C39D82B8F40806D
+90BC8619E0ADDFCE793292A5356F624308C95E4F557BA45AFC035F42FED5F04E
+EF3AC54B87E360CE0FA0F60BD92CBBFCD468867DD42EBA220203999279564632
+AD5BF1C08DA86C099F5DB5DB9E031DD2E546A1EAC7BC97E5E88533F01544066B
+E088EDAEAE072A5D317116C3E55EFB7612719A6706AA71999D4061945984FC64
+A560E657E5AA5FDE7187EA16953E198591AC15D67B7D3D59EA35DFABE898981B
+64B3BAE0CEE31925CF6B0C303E94D98DF94A8784D472BD8D065D83CC41468CA5
+9AB2276F462F780BAB521DD0014BA3DE5A82C0EC50201858F76B04C8D4371F9A
+EF45B0CD7AAE9E94ECC8E4F3DA892A17562C79ACA97E98859F941082E4E1B976
+F76A494D3690E1C1E9C20AD705FA119348B066B5CE1CF5A249602AB3F380A2D9
+E8323C14BB6375C6F6E26D89B365012AB759ED11483EDF9B5999FD867B3C913C
+6C482818B91694CCEDF61DD190BD9B62CAC3AB7A8D4463D85686C6ECD5BC07AE
+AC13A42D6642876E2586A25D61E4B1C8FC0C8814B15FE19DA06A8809147B5810
+833194A76611355D1CC1172B63CDA43EF2A083699D73EBC356B69238C2453C40
+1A553D752A265A31D2BE724668132716A403C5BAC8C806C8ADCD285D92BDF679
+7EE0136BA3CB0AC50581CDF674D7CDB4261C4237876DB78FD3AFBF70E0294256
+F815EAAF85AECBAC5705170FDA60E36C7E613C9E63EC80E6E210AA7D5416A6E9
+39EDF1E54423C6DFE793C16F9C0CFA563159A2A20783AD48F1482F47637FE25A
+319165D066C62FD852BE13FEAEE0D804FFF36794F4473D9254A75369C07B0CA3
+AF4F13C11E5DDB2C79E30C415A2E5B86BC888EE26AC3D16521F4E41A5B84CEF3
+A248A75EAA7CBB431008F732F212F2C6D77445C4C067678DEC4433B31145C20A
+53FB885026A0CA0AC8CA4751B4A8731E39205F9EA6A7D08241196476739564C0
+9368C4CF443AE2EA48A71B462697920BA6FB380C32ED4F5EFB7864B89534648F
+112DE3DD40B88C5BF816C338002F627A681B286E576F4168439D49D0ED88FE16
+955C6AB7ABB7CF985D5BC5EBB432E5D4CA25A66073C53BF91B03287529B1326F
+FAFDBE548926563F392BEA729F31E65AE2487F8A476095B72A5044175DE35387
+2CA57DA0CBE2CD63F7AC4EFA6F98081336C24F89BE9940908B1F6B1AAF5E162C
+0985EEAF6A2BE772172CDE530E83C2B59EBE5464A6AC1B41ACD17857F53BBE49
+A423293003C16EE19F30B99D116357AF029C1FF748242CAA8A21F5F2DD8CA94E
+E901ED3DF42C4D0651B240638EDCD0AB8189227AA170DD5A7FF685B9C85C6BFA
+1B7F484E204A5B151F3414265D0C5E6B48E96E3A6FF2C43B1F8ED6F7BC82F656
+7AF6B474498DA2D389410B9F4983A1097B1EABD1BB5067899DB67E61D0E7DFFE
+A6F4EC9A7B20FEFBFCD896263C76250805FCC6C078E3BF0AA8638D48575E0300
+590D8132CCA0AF6111FE2B2D57F96D4D36A92DB55ECE23E5F6883D413C6229EB
+A0FB25382549C2B6926D74F7FF9D53AAD8EA9FAF75883EC6DA29287F931FF2B2
+BA12B5C24A882474B5F66E8CA66E4C7474B8072550D60E408A3D2021E5ADEDA7
+E214C34CC5AFFFC02229677981A2E2B2FA9C8BB2B1D0D9BE7E99829F17C6EC96
+D798A9E2FE20608963D369DA60BE1BE0E87F95CBE766DE18EE0A93D19A829BB5
+F1586DCE7AE31A6F7A1F92EBE214DD351A8C443A547B3B67C8733FA5CE337A6D
+1B47A99318E013E1ED7B3F3AEA5D79F9E261F8D4529D93F25F2935DF0FA5D30C
+0B243699E93EEA3174D2B30A5FC364345218621D1897D2548CFCDE59864326A6
+5D94C6D0652C5B72121F69ACCC80D90C0E8ABEA97E37F8EC60E58BF0E6606BC8
+90E547BF3D1E5F02FA70759A2970A5C9EC187293176E41C955A8775E050D49C5
+9DD1D0ED73D23975CAA1898A2C66414B0CD89DE2550FE4FCCDB5A7C6477D9566
+2F9B3CD48FB28C81934421DB2EC0028CCC7C402B6825EB6221CE23173748CB5E
+7A84BD0B580838144EA26B46BE90D73E4B3D8B78D5CA180B25B525957377480E
+9129C05515CF65817532EE7343A78A120C49C45172261F4711C0FC0338ADA281
+15469B936B41014ADEF72EC990E23EE0730EB85A6D85619A7C923FA3350FCD37
+6DACE732D9BC5467DC8330A1A5D2F7060ABB7E73A928FC75113866068FF95FD8
+6D6799FDD774578C6CD828A3ED6DD18A4932284DFB898FB21671F59EBC7D525A
+ABFBBCA0DAC780777B6BA35BDB1C0B6964CEBA2BD7A98EFC832238B7485D0189
+BD2013396646CA52418D671642D576C9E2F228F32CA1E58A2A089557D9EC314C
+C2F78469A52C072BFC65B40901748D35420B6517A73A255A2D098AA025626C66
+3598F533BACC6D27A18A9E824DB5BF6578B44159A32948B97C96F6AF09691ACA
+E3658DA9CDFD89D78DE9B5E09CCCFE41628E39B75235150689CDAC6D32FAC958
+CA455631C8A34E21CF3AEA2CC668F0250DAD25BD3012478CA71F0BCD6468C54A
+F1C896E4C148C513057A2B10D31D396D0E5A62F656C213EA0B58BAC39AD1B63D
+F717162909F4753751875B46004663F07F906246912B923334DE536383C5FAC8
+A10A38094CC6EBEDEA4D175727995B36B3D4C1AAAB07A9532BAF0E0BFB349D6F
+93687D2F7BBAE79737755DFC40F3C87FB3C0060DE09F138D26DE3B7F9C1429AF
+F5626A2D9C2E6F461B58DCB7F3D59C5821B75D6686EF4690472ECCEB3A70D2F2
+DFBF9089912205163607ADA8E107C4C29E2A097B5B5D8438A81051D57F45AEDA
+9A1CA666B7CFC8535A9F132DE2FD99296583ECED832CEA3D351E6FC987B594E6
+546876E63CEAF6928FC11000CDFA34CCC7D8BDFA3D285E3E1F5BB6452EF08055
+5BD95E479ADEECF421D5192BD864AFEA280085681DE3A36C7292F9A6E78210DB
+0A89B12CF873B769ACE73EE3D4CB691580896E1851649F7F4902E0FBDF7C4867
+35384636DA7A3207D00F902C466BF6E89CFFC66C16985E2F831A75663ABA9C8B
+D7F923B03D969D102BBE89EC9F7392CA28D009719D96B3F0B94B9B0D76BED15D
+5E3C8201B7F0E03FAB23ECD685BFC43A50EDD32317B952108DE60B7F61E3AD09
+AA0AF1EA3183D2D872F1E2F353AEFF4883D1AD9D0681531456BA95604147BBE0
+878B38C8930D3D524FDDCD0C7FC40BF3CE0A591C61AACB1529733ACB0B8E0BE6
+380F5CC1D2E1AA682926115CD76E348409587B4F24D081BEB230B6A364ED765D
+D2193E2143B1883BE67FA6BCFC91416FDF79BF230CE19697C28E5661E368C6BB
+A8EFFB5CD3805E5C0DA787089B5EC4DC23DCE672B0B3E939CF3EC6FECB2CE15A
+C496A16591CC96A5AA55EB8035DB4886ECFC0E281D184431B5C3B8B64A985BE3
+3A783BCE9D824630160735A6A13A68FB985E974F19163C5B3F6264E110918970
+A6B02F961AB1453AE10A5FC248F2E356EFCC247A8AC5CAC7EE0DA8C969710E26
+DFA6B7D4BE798017FBAF1D94A49ABBDD04F823C83AB1ADF6446D144A0ADC1CB0
+6B95C3B23E9486492A7FD96FC1E2C63D44BC3B527B0559358FCEF56D0496197D
+135F69F113C41264FDBED2BC94E2DEE33B60C71BC2DA2F94C2F3F8F2357D5706
+02E6E0353219A68ACEEC6D78435F45C403AA3F0E0DC2E635A15EAA944BE84D4B
+83F1B1777BD6684E782670A3F4C65ED63C7CC8F7EBB3CE092AA21D4F1E91AF1D
+4D8037D83316A5FA87E3069FED76C6DC9BF11F5D53E32CE4DDBE458B6956E502
+63CE1BAB78E04107BFEECE499A6982419C
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMBX9
+%!PS-AdobeFont-1.0: CMBX9 003.002
+%%Title: CMBX9
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX9.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMBX9 known{/CMBX9 findfont dup/UniqueID known{dup
+/UniqueID get 5000767 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMBX9 def
+/FontBBox {-58 -250 1195 750 }readonly def
+/UniqueID 5000767 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX9.) readonly def
+/FullName (CMBX9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 65 /A put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2D4347EE3E5AFBE73BA
+31023D79A7299D8F662042A8D8B6A7B4E86F48AE98EF848E83FFDE68E17A0832
+A181C126D15EC79861796F03957F5A51462C817DF752097718413D012D19C9D4
+423A5EAE1EFD4EA7A9651BAE6E45CC194BDCD03FF43F255E58EB5E50CA26BB98
+B8B11E21DBFF2BBB04D039E63C453EEDFCD9378F5E7AAE3A93E8691DED5865B2
+B78F540F8AA3224BE372B18904651D057608DE4DD729FAC398A80CB904410451
+90D66C44E943517A8F4969673B985D9D244FFC743E0AEE309EFD224F7029D37A
+F6EDD96E2F88C9D071FF16EDF055955D31DEF10808B343E948BB4F6393D275D0
+44C4DABB75332DD716E8127283E8D70511F8EAF4D1A5F72E2F8503A2F964E5F9
+39304CC17ACCF531A8C0B6A9D58DBA6F24A4ECA62EECC939E8111E4BF79BDF77
+D656F9998F1EFD2ECE3E61CA526106662273D5AD3E74D08E9D4453569B359C2B
+E2455F2136B4DB54ADDC3C0256EB7A11E1615AB9323ECCBB6EB48ACD469A2020
+A873E88B28AEAACAA01826C1C18120774FD5324DF9AD36FC256706DB24FEDF34
+0FCDF04B12ADB66876EC7AEC183A1EA8BABD38BADDCD0EBDE11A5A1BEADD0F7B
+83585C3BA141A8B296872F712EC42C625DBEE9EBD2C414E57CC1378CAEFD00E8
+DB4B84F51967F2968329B8503C4B37A56F6136DA89167FE3AAA93257140FE94D
+D96C7F85C6F82AE1596511ADFEFDEBC1B41B0395E66D2074B39B5565AD4687FC
+89BB4BAFF0F7568D9EAF069CCBA2DFF61C59E2CB2F4274459792C5D097FDE6DE
+0E40AAD8DD8F64C28D04EE50AB79EA7D3420CE42D39FA9080E9E046A4F22B5AE
+AAA17FE750BFAF7BFF097E4A6E9362412C55E25767C311832C1C0C76005C733F
+E046FCFD4CF49C6181C24BD299E90F20A0A0ADC868C11A8AB7F610186D0483A1
+B3BC4FAFFFE12FD746777209B4DCEF0E4ED15D90F19BF2FB2B56231FFDE5D40B
+146E3FAEDDBAB365D88CED98629B9855AD6E57FB01BB82659BD320D248E5F7D7
+B584DD43E1F5DD2C91945DDB772E5A62AEB7080AF36A83D2BA8533E7E6FD287A
+924F616F8090E9FFAA607A21F38718D668FBD6BA3434500BD01EDCEC00354F68
+E1D0E9A921DACFB83FB61C1A5C27D027CAB348C4B7E2781013B68CC5A2BC8703
+2809A49A0C2E9E004D56844EFAB4A8763B103CF7CFF980C9CF7F6BE28814CBDC
+348E2486D9379DFFCC0E9329854D518B49B98F582972B0D1D18A3319EC00DDF2
+F64C2CD2DCDBA287B279F98D16ABD1D140246E8B66C759571981FE7402F14C94
+18394A4C426AEE4B0688D86D08B408763DA3537E5BA0D6A6796C316FDB0193E6
+77C6F257BEDDE17F2CA5E661F434964BAC9834BFF36F563637872FCDDE94CF22
+F076D1C2DF6357D8A26D305D52C9086CE36F49CD92ADFB4306705A0887407C9D
+59B6BFDB82379111C9E33692BA9E2ED9782CE4334C6125933A2F210684642DF5
+3B129F955BADA1E86D6B80CE299FA0D1C0AED1AD61686AF1052A188881E2125C
+98083BA8255B92B9CA0B48EB57F936790DEFA6E6947C0FF4083FEC296FF3034D
+AD657C64F2675EED2B4EED1E88F0B1338762CB4C64C79F111CDE9777A000F65A
+F9979943ED7C445815BB59052B91F0FEF7219E3DF27E1D5155B9C42B7BBB06EB
+1815997FC3471CF963A15B1C5E4653C84236CC5BF55A31B94E394C635B95D847
+69E8134F4FFEAE836CD6AE71F58F48AA2F95BDB1E2CB89DEE590EFF3AB7097DF
+AC185303E647628F5D87E0D82E6685DB467A0F8B7D3AB2B7F3F11BCC99BD48A6
+FA5D4D75698454CB74451B486CDA6B65547C0CBAA563EC3574364540AE7B11B8
+F9E86BFA655CDE88DE2E7D41851FD208649E9C011E04C78ED9209FD56E2447BC
+E1AAA0A3D36F6406C60F6B19347CCB7D56A84D961E17E361F92C5542109D9BFC
+FEA2FF9775230EABE3333EB25A40E29016E9A8255713AC8336B8F7DEB89FEFEF
+4006DAAEA26C6BA1EF494AB99C2BC960D9E07981BABE909B5C121F2CAD48C938
+A36129D10D38AE8F5C64879F61138FA9F7479341F5C5DE86376B65A642B9622B
+E58DBBFAFE07EEE1D11DE9DC34309572868586CD92D39FADB711883AA85210E5
+C82842EF225E55370FE0AC600A170687C60C8091B0625A1C5589186F3C7C1218
+B15B5CC3A5CDBA7085338D963D929A18A651EC7CC39B8500899DE9220A1BA363
+78698E414607C34E06E29AC5BCBAB98A70DC2BDE0FDDCCE22D4717EDA7D95397
+33420EDEC2F1D6E7072FEA85945378A6BE9C7F68DB4FDA6B5BBC0032B3C02519
+F4168C804B6A101AA60EF4FC40C2428AFEEF5A80F9B76D561C8A21B3633E13C5
+215A14D54B8A1E6143A9CA0B5794D20DF97C35B3C9E9A4673AC2123E7DD8E216
+044269B1D6AEEA46757F8D9AC5C8A92BDC1EF22EE0575C80CA7895722CDD2BA6
+F9A208E6BEE5319E63B3B3CA197D9739A4498AAAC9C7484D61418ED2BEBF63A7
+F5283A075D1DFD4B2702E1551A0D1A90DBBBEFB6A55B5F29C869763A856C4E61
+EEB3C8E14E3376B7D01A4E265C6C8056ED23931DCF669A0EC9427F74A147AD8E
+82E172FA6C13DB1281651BF3D14163D963EFC7384BFC4B3B9274274DCEF647FD
+D6DF0CC146BE8AA660D709526B394CE253369281FDB45AE071319E8FAE4EDF10
+2867A431E22779EE40D885E95AFBF62916D9900016805D004C0375D29130CA14
+F3E466AF350D1A5D181816EE1C4BC75DC09E4195DADA5AB09CE9EF2C4D5F7CEC
+6C16BB6EC791E2870DB46B6B06DF421E7A2781D82A07D92316B553D068A1DF5A
+8B19041F96ED637B932DE184F8B856FE1947F5FC8AE505F0E3953B325E0FD6FA
+825EAD072AF06E258BD35607A1F082DFBC2BA5251DEDCAF68B4D03086CCF84BC
+DF70BB8D2EEEE3E0EAEACC8440AA130273E5C7E78A15EEF66A9A1E0D5E022188
+0AFA50FA55C6C461C743E1845FED77378D639839F548D6827CF371AD3DFCE592
+B7F6E29FFEB6CB92B33E24E34875A5A92C08806F67E18AEAD86447A977890AE2
+30A452F33B609DE5B792D9CABF39A086C0936AECC081CBBC810B3EE1D35F9717
+260E76132661E3A8170759084AFAB04A6E773E9714A6D486E0BF46F336A7CDB5
+C325E28E747295CB0E8FFB289F4907BAEC213D4D0B495A246A3DC359B995E9C0
+C5322D750E13159B7242E4C4DD27932AAA130BC6B0400428B5E6F928CB8F7658
+EF02F7522779CDBB67722E09774C419489192FDAD3DF272C95BD9BD64DDF0BDE
+999FC72607F52805DCCA5EC17150EEE38B866E3D5199E5A6CC262785EEB11D51
+80E79545DA191071487EF70C7FAC0CA345955F797912C1268924DD79D0FCA3BA
+460F43E74975C04296E34423BD366A4EF7EE9463ECEF08F7E7BC8BEC570F812B
+066383C2EF5375FB1504537D902818D63B30385421FF81AD92A1C153852B1427
+A39685A76DD636DC4ADCC53F2A78F795F48EFB23807E5751023FE324CB401281
+60F8A8DA779A245DBC26E73B61A1450F25AC276E1B5240578E85E1CDF5A784F7
+D4F5BAFA76F70300972E4B130C685189C4010B9035A5CBF0562EB3B387FD89F5
+C53A25D3E883B506E0B477389DA5CFA82CB157D8C30F287678B0F9A17F5A8704
+ACB5DC57D7CAD21A4EBA49248F277F929D3E49B17463EA5F31A4FC11B0836E34
+3A5FDDC6B9A45113590F114B99566D18C21464E7FC1D9AAA9B1133E5E8E2D14B
+8E143E1E16595C42376694A83684E3B217A17F158DE89549ECCCB443701B520B
+E20B972CA5EC6405C479C5054663D48A22D105AC98AF094340B5964D0C26D9CE
+241D2706D3444C1405B2C9F7C912CDFC87EE8FBA01C0020D1AED1A6205A8A45F
+8504B42431DB5409BA8AC472F2FCB4CE698F6DA92C4C8BF1293C2C998B771540
+3D933EB5E976B7D2252DAE9584E5C6864B29C3048EE159BCB7638CA956E07F81
+F76391380AAD2F1DC2DC201BAC657A1BC93F5569A5F612A4EB6B01F136F41B87
+E20D4DD6ABD7ACF1275FD80D9BBB87A45572979BDFEF59212F1F6D9423FEC976
+1228499D626A328569B4BA2755B1ACD20796398AEEC5F3C61122D52124996535
+D0813227F549FCF59C6182D6514A70F9E38565C8C98D5F797318FB531B5DA58E
+EC60235B6F1D97CA5D495CF689C3F9B3260998ADA1204AC00135C7C72700DB00
+7C06798A46E897875BE619508DFA2201FDCF689E51C3D85342247B059C0DDA14
+766A31E3E25E792F090DF3EA0C45C3F64AFB918BDFF92FF0ADA2F71866CA190B
+87B2FF90C872284652619F084E2259F044E2980101A62004AE9F4BBF675C5279
+BA3437ADDF2D552A033D2301A669EE8BBC840C0028275D077B8E9977D447B396
+F1D82608E030FA43511BA01C345078986B8C35B6C6990D018C2DD2CBC7774450
+D8482DBB262BB816E6A26A1FEB084FC2027C62D17790C80C65A9183F23BB2458
+34FDC5D566C1B667EE801D0521BBA520A15C0C923EDAD84AD6A83DB23806711B
+0AC2631C15EB1D33C26F8D65852EC37A3479152557366929A63B753226059870
+45CE6403CA23FF95BCFB6F0C8DF8CAFCC0BF27C59414217CC6552F5945D9E6DA
+AF83F4AB1917742F7502B069DE44A6ED3BEC966F59A84FAA2F8DE441C11FB122
+DEF1768D250C0CA5F2DDE6FC4E24FD3AE4386B91ED2A492A959BF7E4C0AABEAA
+5BC2D933147A4A21FC5E5CF3B2AF5C0A768A8B79337FA3934A43E24F9F7DF24D
+22C5BFE4DF1FD57289A6E1C9AA48D32D20F613AE94B4308E0D3BE4D1BC95B33E
+A9911B82EFF461D295C5462EE2B12A3E40B89E0BC778FB76F8B847B6AA99E061
+3444A55D83FF839B926985B0F4E562D726FD99C5DC86DA24BA7AF38B93C90F51
+A937E7C35793010F351594465B39BA5276F223DD3CAE1868B969D8EC93AA50C1
+4C7E51D0D7F5E9F0EDBE1BE24BA5A977163BEC724D575749C56C4F39BD60F3AC
+47B930C9E07A2D59642C9DE85EA6FAD1E7D8817812C049FDAEE148E8AB207B89
+B2324191F1A82A7C499E7BF09CF1299F0ECF55EB0A2A32C5BB89411B4AF2A401
+074718859CDC27C2FA78BC5269D5A38DBCAE55F6CB669DEED2C36E5B0D590504
+B6162391FACA9F20224E6AD24B86CCAC0048EC7A618B3263F82A317B3969F0FA
+9D5EA4676B27F371785FFF6599B61A6D32E82DD9D511B04E03F14C95A4CA6CD9
+5B59A8A7BFB2AE32E9357C7766528E9F74BB8D0B9317F02EDACE2033B7918D6B
+8616F1C1B3E113B0F77B0A1292E41F8353DB55EBD872290491AE1FBE95EC034F
+DAC1394928930EE297693598D97EBD0720A0A7B4A5DF4EF4BE0E2E0968E64CB8
+167CA1B8C40A779023AB6F74E0F1626D8BFFA96EA09CA88524837B18DA6152A4
+3F0DC3C3958EFFF86B07581B416720FADFFC4AD35F1553A18944A6DB8FAB0AE0
+A8118C09DC8E905CA32904B44E0541FCC7EE555335E61108D8346B4EF697DE67
+7F67E1E4CF0EE2F6D89D10FF2D115C6F8163B8180378018F58C148EAD188E969
+C60B83C7B295F30614B93FF925BBB2974B0B9C68C2BBA6E973DBFB5500A574A4
+F7348BD31C735A1E57519990582D8F7D97F8B63D9DCD488DC569D5B392FF26FE
+F06F9762956D64E9C258EB9B90733BAA8F1912F3B9AE88C6D14DB46B7131BCBB
+D47CE60D9C63FE0B9620D03F615EEDAA3C76A7285F9897A0D476F35F5CC158D2
+D148CA1E5A96D16253B360F34336D476FABE9A434AAD5FCF65A27F48C5BC3519
+DCBC35DC1D324A270996B8DEC6D3833E76A434E05074C7E3FC8E5633D6B25B7D
+69D9BF7039DE4E755A7E3BEC8A4E5929A98FE265E742B269666C75644E53E6A4
+C5AC907F7DEB319BC88CD1A7F29A0A4D43D471892A674D50C70BB6EFE5740F97
+50522F2EF056E208C0134EAF15DC9F85C7C06066782B715A5EBC22AD414A169D
+86A2F606150B6F903D3AAAF44E75649DC410C3B8C845909BFC8235E573A2D291
+19440D724C960014917EC802414651E298160EA70FD54BE4EAA1A1007ABDA8B6
+085A89221C3DD5E9C759C19BAD6EFB91360CFDEE6C4876AC19B4BF67A38BBD5E
+0BA20996BEFC1F8C427EBDD666B30DF5A2389F1F3BCA17132FEFFD3231570AD2
+61CB33381A0D2E2FDFF470FAC3A60E61E99C76A3F4A6BF32FD4B2B6DB6B27F2A
+76A5C35E24E78F7DF28AE1B7D04A71097881CB67E060DE537C1A318B95964FAA
+1455264E48DAC7689EF10905E381C569DD65825089EF325595388FA5BA6A1EA2
+E2536872DE92D46AF3BB3F1DD920FBAA4481034DF831FD15C01798AB04A73B50
+1461BA7298B2EAD460D6E645A9ED41EE0E0282C335AA716D7563AD7CFE2841B7
+0C782ED3F6D31871350A12A41AEFE21E9A03DF676671E4C953E51F801CBEE091
+BE0B7B413B7EA2479E2529DE9E49C03CBE8159DB1B28D2E290826B6D01B35DDD
+083F85E9CAE378C1A3B7065280D9FFEB04A02B76F1F0E547328F005CBD39936A
+5063812D1C958FD4EA6BE9FF87E5FAAD483055819D1DC39D31B8417B44F30B50
+EC95E26103A0DC2241B56DC62D424438A5FDBA8AD4D9B417F0DC31CD82DD772E
+FEA23036A719927A4654876985FF4AC2D28A180969A76F3584D001A2EFAA2BB3
+7F0CC228CAD9A485F3FEE3E0F0059D3BD8484FB97593A6EF08F9D352E3860613
+2617ED6138ABE551DBC67F0151D0F9CD83A613C245E23FEE6FCC8858592AB43F
+8E66FDC5A27F9312091478D102BF867B320431F7A6EA42EA763C51FF7E0E0FED
+A6A830AC95600C837033968174A9406D0DFA72FD65ADF153E5CB3420CEC76A3B
+43DA6743F24C6CFE0E9A7E78D540385B657CCB379BF5E238A07B836F907017D9
+C0CBA503FCF625536E27B77A262A0EA1C3DFAB015EC859FFE5BB26197A05F4F9
+87046F3AFD3387CF1B040DA7B7CFB1EE92816C7C172164CBAE3E9204559C2A74
+87E4A41AFB16E7789686047067947F41C82A26E3F343E7359804BFB3B7904F4A
+12FBB7EA0E8C26801ACE0E9093D7E2C3E288F781E3E6A53B8C121625CEE7354F
+B1A059AFE21AB4DD2B43A9DA710F2D811F63DC41699FCC43330DC7AB9CD10F00
+C959F73155E9D63EE7B20970C7AB1B9A8A51D0DA0ECDB917291FBD57CFAFD9F0
+E1636B9DEC48FA7FE5B225283546B01ACF3036F1B5F399688F1657E41A5F4EEC
+2CB1324C136CFE6C6B92958597B952552EB7A8D58BA7773CF685FED451D89392
+C290D38D67FA7519ABD024B85D3002D8592C5D30B50726C7BD17577FDBA79E38
+3D99B3A08797696E593C0BEDC50706C986E6BD05AEF30108F4BA192E956D2942
+72F59E1A025FC31568C2EAA1D5942A479203EC01B37626F1EC334DC3C6527C06
+41162B68D66E7923911921E861FECF78F36E4BA60B4FB8554E83AB554054B2C5
+8C05D3FBA010846BC5B32E9ED62C6A0E8D92B8F3546CE0406A87634E2D96F5E1
+F007DA0161E75DA55FEC10F7564CD7CB9AA0A016438D082D9A9FD107CEFA7B27
+BA3C61B3A13D9A30E4BAD25B2FAE3ECE3FEBC9722B448E3AC5DD9FF784718F6D
+DF58A8A7DA91086BD86AC776CAF3F4F2DBC2F0AA81600D53D2A0EB178568DD96
+1ED459E1CD3D897776901284DE5673813ABA0CA7ED342130B261727DBAE566E5
+F57FA86A7B4EE5F48F039FB95D318DC142E26022D7F85B34558E99078C5E6467
+FB2ECB21BCE1E271E22FFD2E71F203DE5D3BE3EE5DC01A9FA9D3E4D01C0F12D7
+D430BF07CD774516464C6FBD414FF6F0C22B9C02C7B4DC659BA3D7306AB4EA90
+12AD3D9EF3C73E567590ADB3C6D261F650E218E7A87DFD9185BD17E8FB9B8AF8
+5616C4309919470B2E01F294D6CF5A8D89BEE7B3B199C4D935EB8F12308C4610
+01A5E4EA5AC9E47B414B924B518F44461695BDBB493256D530C80A2A88A2177C
+7389DB61382349231040253A36E9C91355A5F712201ECD1C786660F544C3116B
+A0993F9C043DFFAD52BBAE21E69799BCD56EAC612B22742334E801FE3F6789D9
+E8B51FB66F3A3994BE700FAB60C8433504179D9329E6662652F1C6DE49CD8369
+9CAEAAE9C25FF0A986CD5B91A78A7B281FF724201841CA0C0D9D48D68AD9C991
+4A2B7D515CDE867B33DF058A239E5FFCDC44E20149C02C89C5B87B075FDFFEB3
+371700E036FA0A232D1B534C581C33583889251B9F3E32203D8FC328299D6093
+BA244223A74506D13E1CC9716F496D50AED48F058071D6AD036D571F32185338
+F2A6793724E8FB850E9A175C83CF701AD2876DF91DE0D9DA7C3D13B745367D96
+22E1B8C006DDADFFE4804F83FB3BCB48544D0091684C1BE9A4BD325AB959050F
+2535F50F12B73DB7FFB418D7D6B2CAFCFD5BC761EAC675E0EBB8A23BF332794C
+2D67F4974EDEF1EBCBC5FE26D62FD71DD749445960267DD18322626F84416B78
+AABA54E6DC8181CAC0ACBC66952C4E96507800FEED6D7604834A14D9499F5D7F
+D93E31CC2152EFE43CD355D981F91D774689EA589E542F11297A430617BBC177
+2AF03ECEFD7151E6347343F6A12CCFF5F64FFBBAD48D8A806C6E563511C97581
+7D4BA510BA1B84B72FB495434C2C07DFB05F8BA0CB099FCE8AF1275AB983855E
+3E61F8B818BD04B15533479FEDAF2AA4CF1A0F111834BAB2929A9E9B67335F5C
+085B13726B55EB619D2474BB50B473629FD0ED9D4987C17A36CD0B3016F479D8
+EBEDCC7B626FD5F54EB70EEF08006C92D863F9623F50F35158EED0C209FB9D84
+45BDE42A5B3F1FCDDA88353965D55AF0072AA1278B3CCE16218C2B393263FBA8
+2C2210721E5B8A92633F6E19EA3CBBC54CB10EDEB70C4DC00502F8C7B72BCB5C
+12EDA943F183B470D7878B1911583199701BEAD17F5C4A5481BC27597DC35EC9
+FFA8941D718692B0B33DEA798101DAA470BD4444CCE1FA857E6ACFFF8B860F75
+CFB76AC54708C02584E9FC8AF486A9D16D6175B87DDBCE0F270603A94B7612D2
+65181880FC339C100B1A7EA58DFF7C64FFF8FF24790DCBFFEDB4AAF033B93215
+8367CD9A9AF44E12A8EE4B7A2DCFC02C969AF8FAB72C1A1AAFD91C36173D7AED
+B259DA94331F79CC0698CF95D14562D88E6BF6C99743307FDF5269B44DAA11AE
+2C5505BA70F9616A855D5A75026005164BA2ADA6279CB3664A23B3C5A339CE52
+D11627E92365C39D4CC02D34F9340F4A97E6E186FA9C52E9D7086FCFED0C5319
+C97670CDA4461985A2553A7E845737E04268AEA9FD26BB8409D145E3ABDE88FF
+2730DB4697F637CCC4F94F633F4B6F1D352D5E6E192932120AC10E0830B436DA
+B474789F08F51E23D3DF5867A64D688F5A671E0D025FB5217B919B0C8E9154ED
+43BB6B3ABE0AECE3A74A4AD8EEF54C1AD48F8B63525A05227A52E33D81C9D531
+9FF9821CAADCDA4157F8871CC1DFA9450E12B9996997BBD6A3A399C2C8461B38
+8D509B501C34B319E11FC9CC32116E9FBC913C73E80797C995ABA622E8D8BC16
+27AD703EE7676F06CC2BAA648EE5E0C04156DF21D18EF62A577CD2F9056A5A6C
+B7EABD639EA8115274A88C57247A82CF44ECFF98BCF7C128452DFD54FF9590AF
+464D0474E06F30DD2D82390805F4703740FB5BC6D0807F83F866A06302548ACE
+CDCAE86F789563
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTT12
+%!PS-AdobeFont-1.0: CMTT12 003.002
+%%Title: CMTT12
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT12.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTT12 known{/CMTT12 findfont dup/UniqueID known{dup
+/UniqueID get 5000833 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTT12 def
+/FontBBox {-1 -234 524 695 }readonly def
+/UniqueID 5000833 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT12.) readonly def
+/FullName (CMTT12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 45 /hyphen put
+dup 46 /period put
+dup 64 /at put
+dup 98 /b put
+dup 100 /d put
+dup 101 /e put
+dup 103 /g put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l 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 118 /v put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7
+5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99
+8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716
+EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C
+02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D
+46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A
+4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D05DA0555DF933BB0
+7B42D264831116C06C79335D519461E7B0E870A6715E3D74A08D1BCF86E3BCC3
+A43FC6BAD1C68BD9D4AFCC06D845FD1F1E70D7A47F0BBCAECE8396E04591E5E3
+4797F646AFEEB7DB548183F0B74C9BB6BA2AA04E7F5950EC8AE97C741D4B2C5C
+A8E7A8DF5A36A30B5A7592D95E1DBC63EF33C92FE459792CED29E2B8B6919251
+75EF62089BD7D44A6E1F9B62EC802FBE62B821DA1C3B2DDED45D27964AD29ED0
+9FB7868F3A8FEADA87A8E42D52C1EB7229D7C79B60BDA263F2BDB025AE14A507
+098FA274206BACFB4A0A7257D5998EE8F0FDCA79CB61DD1FC59DADD11E16BF02
+ECDFD706CDA1E72054D4EB55AF7BA9F19955886BC0BD6E0E3FE3769C94AF3581
+DFB2BCD67FE2892AF07E858A01280194D8DD7332B3D0A585C87FAB056C2EAA9B
+5AD48D1C9F00CEF8EF0D1408DBE1C03D04B231D7B8D5D998FE0CD7EE19828EF2
+F988EBF6DDBFEE00F04A4A1F4E1A55DED7EF3AACEAB5005F1962C724A017C914
+2936E2E0DF26A55ACD7DD836C6035CBF07981C1BCE3615064F0540A1034C69B4
+E3908E76EF8925D486DF0B4A8E1F02D8AA99585A7C31847AB9382F83880C1C21
+C496AB2DF8E7BD4643B28B704B5F6B53429D3EE940A79135F5BF0396E5B46F23
+42AF406C26D12BEA7A41F332AEB75DF43C15334CF4651A99F602036946B1B91D
+4BB0D2E51C20216D892C8173241AC8FD15A37C3CDD8AB4FB67D8565AFA61C068
+95E3D6E46D7C09BBD09428207D506AD43C693F3C3D787F6A5C39084AE45E81C9
+830900DB50DAD10A17E118FB5E9680B5194716A788FF7514A1167DD1A305FBE3
+FC1F39A39F5613D50934419B95A4A2FE1B6C18912CECB86726926F6B77B5C3AF
+F38F85F974A2D2145BE010EBB4A390B842BC222AD4A0B7FDD882668C04C51F19
+13FF91E7CFA0A0F4E99A1944B272E0291BBF3F9ADFCF3F625B87377AFEBD9F11
+6385726E908BAB7D1357504048C0F5B26251A1FA52F08BAE1D64B9FC32A684AE
+896F3DD0AAE9624050D4DFDA25E581FB2630E8840AC5322D38B92F3E77B55CE2
+91ACB8321BE53A2C7D274D63CF0C68AC833BAF4B22B26EFC197D4A893A5AE492
+660D995DA9294C16BED1113CBCC18AFCB5968175EE2FB374B1AA261F22CD75F6
+6E7295A254FEFC41A66EA6833A6A4EE0E75EF6B6FAF292DC5D2AFB61D5203DB5
+4BAEAABAF39E9F98B45F22F2E37F337A7BA412807A31B4A5A4E1627BAA964B77
+6AA397D368985045244ACE969799A9489CCA8FEFCF2EAF262ECE08BBD9573C79
+2785F1004C34F4D728E9E820B4133FD5F823B067F6686C82BCD35123E4831E38
+CDD5ADB098BC3F1B4162F45B11ED39CFB65DB1A10646D0B9FB5BBE475031B2AC
+9E0769CB063B82D1232E24CAA86D9D5DBB9737B1E69608106D34CFEE3FFB4213
+5DBFB88BF9012F430D55CF8D510FAE1524FB065D71F9781548B302CFE791BD03
+3057F5089784DB541D8D299C5CDF6423AFFEE19BC2C9114E0D85ABE928884624
+5E75A98EE2F7A8F5E99A7E943C255A8388A6E02BE7EA7C091CCAF8A574D4BCBF
+A55C5A52F94E0E553A03AE4434AA09AB5859ECC86C49BFCF99947E1E073A2BCC
+E2787821CB17F37691E51E830A2B3094386555159AE9BDA2590FF0802F1ACD5C
+8F11D85F179C02A33F45A06DF0063B47B2442D8A9A975937862F3A0FE3A5E339
+453CC574D7315AD20D2647A5C7A190C632F782943C22A8778DE08B591A972A46
+CF62A4FCD5A2D803AD8308D2894B8837D26A3E560C98BECB5A1CBD336AC82648
+F146E894011D0CDD1A2766A07FC3EE5F382171805DC30FC1E12956669E713081
+84D255B9280CC54C75AD3DAB76217343E434AD38B7A3121C5FE630BEA26DE2FD
+83DC2539BFE46B5571EA73E3F6643B90F1C8D01905CCF7D311843B5E9E36A8ED
+761C81A06B5A31E86F4460F5FD6EC3754FF3D11BD0975A23B764E4B51D0C7048
+31F482420FE8C1CFA4C158395C5CE454A8ED558DB7A11B5C7AEFCF65BEEAFCD7
+9B0F98719CB8FE611A924C28E32FB3BFF145BD613C74E4438F8AF37B3AB1401A
+1E122B8D9B9AF5CB0ABBCDB921D4A603AF221F01DD69D7C80545264B3C45FCDA
+25759B22BD1E2E22A3BA6A1C30D9D49E11B3BAA8F82DA49D5473914CB806F263
+03E63D18EFF6D0872F3BF6D573CF64D692E69394A207122F8E7FF2D0AE26FA1E
+9B24B6ED94D8FC58B8D3B3C5C6E68B71A48BCBF15A778CC208D4D5EDF68A6E99
+EE8AA6DC84CCB00037BFD8B83F00350EC1F03F8B0EB4B3C0B9074733436D1A34
+E35CD79E927BCD0CFFA629D144F71A12DB5974FFB6B0E0DA7B6FD204F9C3548E
+AB081BFD6941AAFCEF045AA82252C3E903C56B1CA12D46B0959479B4C80D346D
+1110BFE7F58BE59B547EF4F8BDEA3B25043E7B7FE30D31721BA9FC316036074E
+96F1F8358D29438385828F22A6B8294CF98C51E749E01079A5DF6DA3BA79D1F5
+DBE0E751395D6B471606D2DC3FB8FF67E9D7E60A45F2518897186CE1463929AF
+1D97C372A0257B04DD8A63524DE5812951E51DF6D5500DFEC3A0B6EEF591A9B5
+19A071089E55F7EBFD339EF3AEF402DB63EA1208BF1BD9E2029A3B0ED74530FF
+E1029CFBABDE8EB84BB4BB8BC77B7E303DC64348D7D6E6D195EC75A86042B31D
+B7951325CDB85694AA8BB60FB92C60205CE758F2449DB29A73BBFAE2FADE1A36
+2608837AC1D0EA690CC5F0ECCCB745B68D25A1D968424B84B4D7430993E3447C
+926E20EF91A80D48C4113BF7F732AD8DC1155162DF98F6B18AB911E33506D543
+866A06BC3B46B0231E5F8E701794F6C4D22C5553421D391454AF46A2E57E7075
+18D3082BDFD0B1FE8F616A0E5E3B6B7D26AE83D6255A244553984FB963DCE328
+83E0AAD3A215685A822732FCB67EC329BB2D4EAEBEC5AC2C451DD702CDC27FDC
+97A92428EB3FBCB26A4E68EF36B8D6F9E2E1AB6524D806B25D33ACD6BF0BB338
+48115172DBFDB7AE6A62FB87F8790A1788FA96FE9234C92DFE646BE3D4C3D8F9
+6F03834D679B32D8B05551EB1F135BEDEB3297493CFEBF6CDB879D9ADDC8867D
+67024403B04E3388741C059074390E6F0781823F9875696CB64D84F440815036
+DB2BA2A9996E5277AEC7686E7239AEAAA21590FD5D1BB8CFC587F8E71AA2D121
+12ACA259465CE17000427203489F266FB09562B55464D3A6CF9F3356D49ACA5D
+031C0461261FB773A976C514961C773F77B8F703C6AE6C88173758DD73690623
+16CC78F644237CAB3726CD9ED398095465F29097327B8D0F4E50944647A96A1F
+D7F1BFCA9A1596D2F68C042F470B66D73C2C92A174FCF1A9B2DB236AB4A76EEF
+70B42F3B65B38775B589A36B55B0ADDF332662F0BAE5360D13A2212541ACD822
+2318DD57D048363BAA7DAFC3AC3BB5A60105C2A2141F1695D7469A84909F3A8C
+615F3DF7B02FBF1E3A3A5426FE68BBA888FC073F6C2FE7727547825EFBCAEF7B
+9050DCA6FBBCCCA91E538F0093FD5CBDBA8811E79C2BD2185DF8D17CF7CE6F3A
+90B7C680DF106F5ABECEF7811682D79C9578B092BE3820D6045377F003BF5AD8
+5D8BB13A61E75D8B20D201522FC3BA1ACD67106246926594AD9E1914F0EE4557
+4008A3286A2792D5E6D3E67BB6AC948295EB0064D8DC68CDAB0583527632CA05
+D6EA8A92A23B7AB6DB4EF7EB951CA73344AC37CA00CC119F55DB4E2FD0DD9546
+35FA1622015C7E7B1B3BDB035A49F160ED0F7DC915E37BB877598C3A9C84F60B
+5DB3B42B85D24549D34CF85B58C11900B9B8C7CA6188D2697B5AD4FF8B75862F
+937F3485D032A438A36464F5D1B7F74053A435C034C41AC5B58641A7BDF99428
+2F3111A7BFAE57D9A47D3A4E74C216B5AE744B6F8F653687CC6FE421867B5011
+EA710E28E31A0F9C5B6E230772CBCDFC578B62EEA3F44698AC3DA27B48D7E3D2
+C81310DB70F7ABC2F245F15EAEF6830D134CB908649A0AA927A0A59116948B1C
+5DC93D49256079FA692DBD8642933AEB115509D0CB976964CEDE5676AC47D1AC
+4D50B1FF54DFE905871DD272AF22BD3EB27E47E248CE9D9609D0C1EB98B18C18
+1284757D1090682A326CF56E264FDF5053E658D85C6A33B6920478AF331CA90A
+2630CF4BCE9B45F192C23FBA88A620DE298C7F22C46BD3552D7645B97A598605
+555ED30E464A2434C389FE078B70B1E51E938FEBD2AEAB5EB2429CEE119AFD50
+041078B9F352A22E270593D50A7C1599E62D4F6510978622A2FD9619B1681D7C
+DC36C65C7F67A6417DF0467F371C2F8D93017B48A93F2388A355618BC26030F6
+A9892136D3CE5E0773FC6F3E80BF5742A423F6E4CD452F90F3BC3BD57BA0F5AB
+00D833997A68A932C4DD0FAAE6228BF64E1BE565A0AC6AC05F3860AA9D6C08FC
+C9333FCA56B91304E70B01623EAE23103EE845446289735651F4F392BECAF7C1
+B4DB4B9BAE1D9001D51DC2C29CB0C7B9159EF69C5C510EB06A0DA3F4D6963D70
+BBBA90CFECB9EE0B0739617AF3052270465AA9D376C507461322D6536482521E
+4AFF6BDE7F8A52087F903BE7C6B863C4801766FB57493CC63B76AA53F8BC6488
+43E1CBC68CED44FD45BDAF6067C3CCCC6D2F2DD76BB211976E04B58183775936
+B7E4F9105A597E487AEF1C1127512198DFE01E2D8637477FD8B7D6F71E5BF480
+50F00F624B93A053B6E36F0BABB04C50B68BC5EFE96D2E1D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMR12
+%!PS-AdobeFont-1.0: CMR12 003.002
+%%Title: CMR12
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR12.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup
+/UniqueID get 5000794 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR12 def
+/FontBBox {-34 -251 988 750 }readonly def
+/UniqueID 5000794 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR12.) readonly def
+/FullName (CMR12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 44 /comma put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 65 /A put
+dup 66 /B put
+dup 76 /L put
+dup 77 /M put
+dup 86 /V put
+dup 97 /a put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 118 /v put
+dup 121 /y put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9C535A5E57376651
+F6823308463DC4E0339C78699AC82C769542FD3B410E236AF8AF68CF124D9224
+FD6EE92A38075CAAF82447C7AF41EF96F3ADF62F76FB425BEDE4C4124E7B1E0B
+8BF254D91912D3A99557F5427907A56514C5A3EB961B94112077FE9417B70DA0
+B2E1C1FA3E1D6F01D11F640CF848E45BE3E205258E64FE36AFBD4DF4E93F6B1A
+966C8E7FBE2CC8FF43C1F67BF6C361678B5E90F4BA524FE8A4CAD6AB28183E6E
+CA6C9636E884845105595A2E40CDBE8D4807A81AF4DB77B31873FEB221BCADD4
+2C4669459704CB58A7BC230FC59F867EEADE660E49AEEDEEB042BA9A7DD8193E
+56C3A36A1F639F7EA512EE4BC6992F52C2FC82A890EFDA730105B0AF7B819295
+EE00B48F64C2B5BCB275B1DD62F289CDAD4AD9B7EF057684642FA6FA6322C277
+E779CAC36D78F7779CB6DE12638B3C65B70C6B5F8A8C6421A379719B8DD44973
+5F52856A4A29B2ED37F2B1FBE6EF4B79B7C0CD6395C756A00FACD763C235914F
+847D1D99831023CE1FD89EFEC83AA7E313131C0C197248605EF5BA773D0A4000
+72F607551A8EA6F0FF19441ACA179177D1FF7B423FEBDF58B0C19CAE3C10EEF6
+3538D8FC4762B77C5AA023A8186C40D0365A4487DC3564265B3DF908572DEAA2
+57E29EC669DD72974F806EFF5ECAFA9ADF1F9D2A63087FB7BBD100F0F81C6FFB
+B1EA1C9DD46548AEDD147EE64B1B4894972DAE1DC3E8569D6A3CEF9F9E46DEB7
+547E10BB2959D374A33E47C58F1B20419920AB485F166062FCCC08EB5CC9AC88
+F388F0C0155027B727729488E44CCABB7064A1432E179189C4627453C5231535
+47D1F2B8BA43069696830CBB6E5F9A135CF22D3D1FE490A3A63C088EA32FF444
+24A2427BBA63033DFE2E06DF8CE67949B6AB02F26335A376B57376814D2A7DE7
+64A4347577EBE9A6E33DD2FC214A09C6D889C8FFBF1D567032548851B8F97204
+49E215CC7D222F593E1EF1439ED60AD922D41E0E9EFB5CA48F2FEFF75AC5FEE7
+FB6676D8B8D4DB6885FBE8B61B586313E4DAFB09D94CEDC0507E93000104F3DD
+F83865A2C6F6A7DA8562BF86F5DB233CC9B53391273A1462E40876A8AC2B098A
+DBADD5A160DEAC061F86A5FCCAB495EF8A9D121AF07928EAFD56F618E4EAEA97
+CF89A3AFD406FC9DE1E9769C1E1EB83BB883786BC075EB5DA2692CD59C4DD7C1
+7FD2FF9B18AC740A390C1DB38670DEB18C67721A1DCD502FE7368F47DB4281D5
+459B3F020595FA3B10544AAE9EF786A0645FB7C9BB29D091E1432CD878A05918
+1665643005BFD9A4B0FFD347ADC84CE22D6F9AD4EDC05E8C7179DCB360AB57D1
+6ABCD200A4B4AD56825DC345984D9A3DE11CDA5E9EC1E5006EE4181E4EFE0846
+67D8C27BEE8F84A1E01947E945BBE988702DEB2240C4BED952E433E5305484E5
+71965D3DE95C4115FF78CE9EC18E323C599727C8B93CDFBCD1CCA780DB8C81ED
+C4B5E596E1603624308972FFAE9A57B0EDB51FDDB6E23EDE2946F61BEB241345
+2A192D8CAD53E823D687F9C64A70A4B4B703291FA6317C051DC6A44BCCE0288E
+3839D726A8F2E39BFF429865E95C726E808E02CD06F36C1CC9AC77999F8E28BF
+CE9D74B699CA982479E9D0DD98EAB24D29C981EF0349721D6819549A39413801
+F80182D567EE316E2F0AB208068E15693E4C399A381BF9BBA625E597E6E109B8
+16F3A84C8EC92F2ADE288821092A421A8D3B907048FE947230810F0777EE2542
+29A3485223FEA079B359034F70464DAD2F0E420271A4E0CCF57A0ABBC20AB327
+0CA71B292126D395E0D083B19BEC6B48A9DE2BF470C3D01A8C3F52075BD4BE02
+A0C518355814478202FD4762EC542F8E7B9B1F7824F0554660CEB83E35635E1E
+DF0D03C94C903ECB36B4948ED98B6324E0094EB1DF70863142D4ED3A932D7346
+39D69F8F044B6084482D7748C27328AFD24A3A70B99D1F7D32CB984488672254
+28B6A9E9DCA2C9FF6A1B311D72413404B3CE5428BDB7FF3C36357D7975184F56
+FA6B32AD54C37D0AF7576663AB1397B80D4E998F0B4C4F6D90B483029EF2EDA9
+D4C4204C1546EFF3100629453EAE01918D09FE104E626ABA38646F17B6A94CE8
+116BC7A8D9C319434CA5B830859B4164DFADF1D7C3ECA5C78D8DEA930EA4AC3F
+59DBBF3148C91A2E807FB934E3439D4F67C6DBBA9972854E6E3688E1E0A34B74
+482217CFE031CD7B5DFEF727C3EF8DAEEEDA08F4C90289E62FB2AF2357EB2E45
+4BC547980FD479101FFEEE477AAC6268DD659E8DD9E244676FD3C6909713B71A
+323B211E571BE711D103FA23B5B9AF077D84E2D20FEE805E81D20C03501F0F17
+C3B081946CD0FD577F00E50B76CC37CFA97A61B89C25DD43911B28857284BEBB
+5BEC61FFE3A14C64BC5425A7A82326617F6F1FA4FEAE56071C9F559F91568179
+46369B394A5CE96FB7420FF8AB7C61CB83492FA5AE4A4B0799578594C9EA67E1
+E54498AA5CD6ABA34AD3417F04F5D8D664A7EB39D41E2D17643CAEBBCCD9C38C
+C5C9541641A09335EFBCE0D276A54253EFD68141807A66F1DFEB4BEA5889FFA3
+4D20BD52012206A9F8D3E0F6AFC03FDBBDF3E51506EC6336E249CEFB571AB84C
+BDF8E471E3795C04E38A5306BA6D450D72E50910D1AC385BB06CCD4B8E433A32
+5A4B7FACC976BB31FCAA1E62DB2C4FE06DDDE7367930E336B49F47DAD91C8735
+9A35D80CA2E117E86B52E41E9278046ED923454989E48610ACB3B1663F197117
+52659A9D7BFA561C7ACE0771794FC778675F83C5EDCB132AF124C7E6540A140B
+E0A268836C73A3C746DC964E482E63C56C0D396515283970FBFF182F9F684FE2
+655FD8F5D057D22246DDC3FD11B77552DB4D90ADBAB77BBB1FB1592129DE0AEC
+F822D7D36E52BCDABBD560B403A5C56C5E1BE789C3AC049318C7FAC5E5861E42
+FD66C3C0F46361078D7E036281682BCE9BBF77983C93ECBBEBA9B359769CA442
+87FCA1B98F4EEC4935CC93B08AAADDF355C99816453587310F08C50B9BA3D107
+5388A1F3AED2AE32BEFADF0285DA90436D1D7EA85D7B9B6DF2AC4B778CFADFF6
+6EEE54D1A1C5DEE3CCA7EFF57A7C2931933CEED90CA26DAAB45E4388EC4DC366
+B9E88518D6CF094861D2A59282044CC06E63EFB390A6DF4BA5EAC7CE39E1EE03
+3D84099F5BE96612789AF3EDED07266EF10A0FC23EA1EA97040B6BAA63138B1A
+A9CB8F5DED781260962D7618EDB200C3ED976033E8967A8CC676E9C11F74BE34
+343A7ECE7EE97E8F76F7E95517A6D6163527406EF5A669535CB2BF4031F29046
+BB2D0FFFB47A576F5EAB1D00A582965C56F28C00B3BB7BE2CC8D8391F789070D
+775EB775437F0CD53DA840BB3575104B63E4B0BF14E3F14B320EDEF65FD4CAF5
+8596DA491BBCF3153DED3B718F833D106432DF8DB8B8E6B34D5308C9010A5DD0
+7E0E53260BB84BAB3EA748E8D72F75901604F80F4416920D69B4B983DCDB72C5
+E9928F01A4A85954FD74578AE336C782CDF81D1EB7EBCEBFBAE7ED8AB4862584
+397928F502D65139CCD582CF0723C5262EE54B9D2B8C39614652A8A90E1C3B65
+7D26B99DA298FE4B9A7E98848F619C9BB4FF9FD215B72F99506F06355B332689
+37D80AFD9F9ACD8172CDC51FCD3A759ACA0F7D4EBB07840840EE42C2D5B8B257
+2C6DB3A7657B75F2F0B9730A20112745703E2D0FE709436CA6A5F36F59E64D9E
+37C0A23D6D289E1AC1DA273872F5FC5C3DA2B127F078A4D7AB3FD7E124455817
+DDC796D54EF26A1FBFD539D3A21B86DD4477DA49213259ABB3FF241424F2BE5F
+89151E02FF87E0BEE26E85C0E518D8BE7CC9214B8E9A9EA1DBB49C6C212CCF08
+90C0F23E9858947EE344062EBD9C574979087439975EAD4E85CD7BFAD3C91CF1
+EFF577843AF1427D06CB2F3BB519ED1591974218C43F0D2038665F9E2E3960B7
+FE68CD3CB2DB6B36C7997C6B21EC11CF1DE049541001FFF26D14C255E3AE862C
+5A5701292FD2FB3D04523D6E2F3547923BB117718DFB6E6520F0D0B5450C695B
+8C9242CC8671B7284CB2E1E9EB097A3DB1B4D5E8EEB93B4DC7E38C0A10474665
+54DDCBAF079B92EA494F6FA75A84C5AAFE280284D0823D7C22249A21044BB0E6
+4062074ECD17B62E03EDF4945A294BFEFB51F5FD870D9D7230FC91B83C1D85A8
+86CDDF326FC90E04362145D6E8630C50594484FB829DA18F5C078F2EE67D2F2B
+08DFF39AE2E8C9741FA989AE494C7166F122D2C5F71B97C973B7CE8500E9F87E
+D59C30F2E99CC4D34713DAB680598F41955FBDC26A14CF1E73D6BD6B9AAC8D3B
+B998F2D0D647356CD236DEAD6561389ED3A6746221B0CF15D6648412B35A6B54
+6A0EF5BBB34AA376D9BAF025BFC650C1B74333CE85413D0EBB2F4D082A26A5BC
+3C0A25D2B12CB159F140E00E262F1CFECCB2C802FF94CD34DA0CE9B4B3830FB1
+DA85B9B670D5169928990A2E9CC869891CA2FFAD9774E6B92549644DAA5FE00C
+A5BE4F5FF91A0B6D2FD8F96121D766391EC4ED3E73DADD476B7DAE1A50AFCD98
+DB7E27E44D30416088D9BC07D4661D9ECEC0806830ABF14CE55AA3CA2DF66E8E
+748B8ED46466F1EEB072AC0674FE6FED231E0DDA59ED7C42BC05EF00E176050A
+C4834D893DE42474EA20DB1E25059E84BD137EF65A02CC295B0FFDE4CDE95879
+0FE88BDF2519ABAE7F8CC3E6386ED35E04A14F1E3861922645E3A3F43B48A5AA
+1999A5EFE192515FCC625C829FF5A7B337AA422F5E920545F9BB269C869A821D
+6C4C26DD2AE746EF0F0B4C1E7E9871ADB5270E1CA9BE28225F7A0370D4C52422
+E25263EE101C4EC1C7811B05AD42F364844A56BB91EE72FC8ED53CC6954D2BD6
+F945D739BE4C61E36143CE890FC0CBF2F610018D678ECF7CEAB18FF5A0E48F76
+FDE2463D40A99380D679B3B76D39C664F4992D23E5988B0D1AF33DFB04894016
+E852EFD1EFFE586153C0F31ADBDBDE3F73FB49C5EE64D0D02E1504248FAFAC3D
+903FD44679BB09C30288139B41B1E90A10139CA3172677250B16535A1F3E5E4B
+6F4264DE58896E66051FC677030A121C5A285C47B6129CB5A3998830CE070D21
+2F093FC1B44089F603A21F45F60960F134A47226874C737EF6C085634B0A4A66
+139420501351F737A73F39D960EC38420BE46E5B09D298E7C16B8E32F01507D4
+0141FC52DA1DE718D634AD9C8B00E46EEEF84356759324D2B9A3473C5DA38DE9
+E30182B87F91B6A7F7BACF29A93B44C879CCDEDB063F9D2E51E0F1FC9F018FE1
+2433D85AF24B55DE3A61C4D0A2DA4FDE933F5F6FDF17E9FA9932BFC46E2D71F6
+585EEF5B2E4E89E797A24B799D7F064DD1A817A53677FC9EB8CC3E7F93FE50E8
+D50E3191052943FD6C98B573BDD1F6D70349E1F8011599E3F8FDF1D6E80A710E
+51E434E85801617C6FD8ACCF1B77B4BFCCDD35CB4C0367F4EB4D8D9DE8284D5E
+B4F43E2F8320C2C5A9AE90ECBA7E65D377E91DB69FEF27069235366AD3E126C3
+A73CE97F4C90BA00D206FA012C327FD69EE59AF4470A315B1799CDC0539BF90E
+512C8FC3BEFE4D1B01D969EA9E3FEF976CD6E0FA4C9ECEC955B265CFD58AB8E5
+F7371E479279EE14B689269205C5B506940606CF3E24A1E7EFF3CA96ED30AD6D
+E243DE57690C3D69A401AB3315FA49E4BF4ACD4DD1CA39272533E82EFDD508E5
+1C2CD286CCC5DE1202C7C7F654521750632EB637F918667E2233A43DF75239EB
+F28F3129EB5DEE2FC5BFC331FF709B0FE9B327CBBCE98BCA2C861C6547E50407
+1218CEBE6EB5F9BABA4F2E11BCC6FB553A544A567B459E06375102C69F8018DF
+BA6A227CFB13E2D74E6A521E01B74F2963E9A0A1C9FD87A88EE6356E3BFABF55
+BABC751D2BF85E6712E8EF57914920775906662E4BA68FFA21AD422D34E15578
+43CA0568B431101A1194F8AB1EF25E886BFCDFC10F4A5EBD9530816548BC298E
+AE4A0B6B52B8B59C644C409B4191B6F4203F52314F2675F02AEB65A72C66E92A
+2AC703E15D8D381522C0AC30C165B822A9B8D18CAECC094EDE020756018DCF51
+D0701B507519C4270B70D8CE94B436F640C15872F9B5B77892AA3D110E4D6A65
+8F0815C61A5127BA25815378683F46E69E54A391A8675977E7DF9C2D4E6FA991
+9F029E50CC2F266B31EE9F9F24452D5838905F330CB7E416B8AF836C5AC26AB8
+BE2ECC6EA4BDAA08C30995709E225C21D35DB6369167602CBFA8DB2697635925
+969002CD1BEE745DA2E56C17EF3F0C05E3847147F86963C37A221C8827195A8A
+3D38993E4939AC915BFD9A212F5FF3F826F742B952018986F9FBDDB69C3AC65A
+845F7F33C55D4BE60A1817EBBCA7E1538E8087E1BD5C083A320D52953BE65F31
+E8339C612A510B59CE48D2EF7061560C4AD258E7DC59694493E3AC878246F37D
+6DE89253EBC8830C6B209E818213C4AC4CF1F391AD91D57BE76FB0E2924A1407
+E4A949C905E44F54EAED6419F13D59942C8079336A172D4758BEB5D3E786FB93
+3CBE4FD2EB53E4E1DAC34E821EB30FD44BC6CB4298242C38F848FC23AEDC9733
+52BE6F32E31E25F18301370F8936810B0566B664B042C7AE0D78ACF0A87E5BF6
+F9B66E358168B2CEA30DCD940074F3ADB793CDB136161FE2522905E87B8E463F
+95D4DAB7E14A3DF7BCCE8141C5A08FCFA2BCE9F2D1B05A7642E75877EB840149
+AAB007CD239AE47AD115929427717F219B0A8907F0EC79ADE1B901DAEE87A2F8
+39361DAB43DFFF69650F601B24061A9353CFD619FF9626F63275FD09A5B13BB4
+8B3379EC4D147C41197E8387FC04DA7BE409524CEF74EA91DC066808A7FD0EF3
+957A44E2503EDA67B1C61827479486134E922E560A673BF314D601C66003CD07
+55569085AFC8428389A140EB976CCFB8F29E27587E46C413ABE2EFB51AF5913F
+53EEB74063162E0BA1E24CEDCA320377D3E11BD374F0B44E132A5C35835B6E2C
+D32948EF9DC7931D104C1385709DA882DED6458319F21C2329938396BC074106
+CB9CFB9E0A915F8DBC8435F386917AC87A2BA45D857EC30ECA66FB4044F5439E
+CDD556B82A0E43418D179AD883C85AC276E1190CEC242E3E1D86E725ADC39E46
+BB6C47FE9E17E29F8EA81E870302A00D91434F3B7A05F243176E6EF1082541A1
+B9052191EE5C2B8E94A2E02DB65FC769653CA8D1C07A13CB853544AEC7FC35C5
+218DE3128AA31952DCE19C55C23FD69BCEA2C661F57B11B8F9E86BFA718D1521
+3346E78C701A5E51923D6D937E62FDE3669B214D240538F069A100A542720A86
+31DE88116DE775F7ACC2A49EA6C02A24408271A846990669F2AF60AFAB4C16F9
+7F4E88E917F0FFDCE68F22998AC0AF2A60A73258C3A4BBC42A2F918123128195
+196D0E150D79AC3CF4628503D1F3FC528265ED8324E56849A47B3B07C29940B9
+1BC270071E221D355EA51E9942D3BD7F99816304FFFC8F5B036C953B38759341
+ED5D7B9C8E6B70C409DD8362FD291201CC385E4A98D73E8518A4C0E544152563
+82032FBD2FCB6E403D34B85ED4053A8CB619BDD4DE001F4C3007B1F317579651
+E6D6662189CC2D95AB85D7473F65C5D7B4AC63B0FE928F3400035D5A9D443D0D
+F3532B99F3AC26CB25EA3CD64C341159061E02EFBC7C033C05CD919BBD827A6A
+BFCF3BD739E32E7FE909AEE068D50FAC33605FFF98C7D0115FB860178FD03DB9
+7985B78E0AC21F2EA065FA841F5928FB85163B2E2D8F850DC7EE313912C45C28
+2783F6762C67882EFEDDC7E7567F91C16B16FD8D5A1ABF35B5586307701B91AD
+54984598F2AD46FEE3D68A2731BEAA754C8E730FE0E84952EF77930E4118F8D7
+2F3AD7552BBA90D0A74404B5696A3929AF269129EAD44ED1A5D8655F916C8FC8
+33AAA8AC9CA8A2EB60D299F131D8019FEB315F4D41CB2DA11021C368BA40F4B9
+E6ACF209E0F7C86DC471D27A295B9EC17A04E4A958BFFBB621FA6AD0FFB0971C
+929ECA6401D0DF54743E42C64F967176CCBE7D344CA7464B03E183EF3E26A286
+C5C6BD62ED1C25BF646DA36F0314F29457C2FFCB2E9162D7EA8570C54F7822FB
+23E5DFCD5F486A98A79626BD03193E683A5C63F6947CCF09D6C87B7FA840C1D9
+CF84DD04DFCAFE1E6319363F4C54E6076E6AF8D8C3C9128EA5CED6F0E7EBCA9C
+2A32BB23DD7E279A0DCA3EEA89F53C8223E86E6442E9D50A49E64910A6493446
+AEE72A74525C5B39B22256359751142DB818A0D1DD94B941F215FD6583BA33C4
+B5E1D0B7FA670CE12C3727640DCF012E9C9A73D4B20E4199888899F5BAE37376
+58A536DD12080D7BBABCC5867679A77EB6DF0260F4C938DC6ECA9EBA37C61E65
+49CA66A514D4D2BE46CB742FC59269EA00570FD53675AD958A9BCDA1E3BF603D
+CFA3E66B18DB6FC5E3D7036DDDF0E1FFFC5529EA37D9D79D7746FC616E2FD069
+3B24D8DDDE5F0D3641157D476B0D6E3B31E3EC293154E97F3782E00C16E048D3
+3A8C71AA63F0908630F65EA5D6637DE84A4DF324ABA031CC5EE5129123C47C90
+32E99B7B87EA88FC09EF79551A91ED7399215F661895ECC7C6C24ABC4DFE04E5
+34109DFEDA8C106D9F7C4A6E55833951B8165F84E32FF2F661B8F9CEFE44E5AE
+258D5893CFC31908E757B01BAC22A61A2BF34C1C1FBB9B168D3DFF13AA5995F0
+1843FA30C1DC4617CE087090197765D763BA62BA7F58753119450CF9056011CF
+0DBA8297DEA16AACF98EE4890C521E5B5BACFBEDBA29ED7060F74BB73DB5E6C0
+82346567EFC8DFA4EA605AFE8C5FD2ACBD97985B42A37D860C70B64676C232D2
+67DADF1A9D4FA01A35BFDA989781BCFDC3D7061E14C3F4E173636338B61D156C
+B226A6926DE326001B5CE1DB0A2D8038ECB0E753145828F1E8CE02ECC859E211
+86D5C66E3846811EFD43CA6FF55F1288AE18EC6307541AED3D2C913AF9405297
+14FA1BC41ED91FAD38E14FBB20EB0A7712FC808476B13C27077057630FB7258A
+E0E101D58C20D3B45A7788F0D2A21DD10163C0304762A700EE46CCFFB29B1EFD
+648BE00CEDE3C153AEE1E0CC3839A0FF9A7E84AA9FA96891EA67A537F4E25746
+BCF673DD8B15C1F12CA0FD2F7BA30AFABE3B3A498FA634CC9D28711C6FEE958D
+50290D22EE870A89C3233C1C161D7A3C9C6CFCDA19AEE156C6958C83707A483B
+2986F5789B885F154FB6DFE527D8BED4265AFC8522E6200E555F5098CBA013C6
+8BDDBD29639AAADB0BD00AFE529E542684F7516321DE443644031E660F61B643
+3FF9D5E55017F00FB4D315672CAB69DA46F691BEF7F761D87EB2D2263348781C
+6A36BD0ED6165123EDC87F6BDB1D4D4E7C03810A90CC45B1F496015E7420C91D
+454FED981FE7D38AECAB724E2A370C56E4D9A62D7A90183F71B45292B5B55F08
+A6E4EAA41B35F81AB501ACD2F163B877EF62F0C2CB23494F45B1A3787E86801B
+2CDEC66617DDFDBB1A62F0172FA063FAEED41080B82BECC448127986480E2056
+753F72CF2C7694999BA0977153385B0E2E1F0CB73FE208D99D0A2BB77AC02822
+F45EC3C84FCD5454E605143D6786A20EA2CB28A9E107926D5739316F0F774DA4
+30EFCB38504C1A86258D2F750AD441D5961331B0914490B4BCBEFDB8AA72C5F3
+00763F0D299170A34AC5DA3A785F1BDF365DBC7C4B15C8966CBCADD9EC6C048A
+8D94798A6154002777D2DF03C8C6388A600D13BC1EE81EE2B02BEE0C38A20F93
+385C1075EBF31F95C3B4E3F6722F60DB80DD731F2239C1C12A5BD9522D5A1B34
+2DA04464B5565AF29A35E0EFC7FA91D2E9ABFD008A606DA13F3E3B8C07D9869E
+810EBF01EE40383A169F07DEF5CBEDC02CD3B99AA310E316CE4E197733E3778F
+E5931F5E319C6D8C670F25624F5DD6EE97A5F39CDC978C8DAF1C07E6A83EF293
+E8AAF2B9CE57B7AF470A6DDAFCBD210BAEE6497C6ECD486FF0DD9BEC53F9230D
+A1A1344ABDFBABE2F7D8DF7B6EEF9389C05D87DA7F28EDFF405C106E7A0F76E7
+61613BD0C9BAB43597235057EFBBD8D4758AFCD05B4DC548DE95E707BD22C76D
+DBC6BC538843247534BFDB1A8E591C6CEF347D27E7B36D2F55D46314BE428E13
+85526CBC712FAEB72EA4431496B5C925158A4445DC4918D2944D9141AB37AC81
+76A21982291E6CA022887746587DC357232C0DCA9179314030A955D4953870E6
+626D8DF3514B22995C8B7B17CB7316B8E9720F6311B3CEDE860810287DB5E79C
+7F63E23A8DC024A56D8958D00F3EBF0157F59929F4F00D69BB86147268490A4B
+178828DE42B92D6061A0F7913EE72F0A968411C2EEF08E122A5A9D5B65CEBCC3
+B9C8F61A1A34821006ACBDE624FB09D104A3D68141284CC778A3F29E2900E40C
+F1D5730526D90A5A4CC31C65F1EF0424BC729F1336EFA5AF0929176B4B68192E
+1DA8DDA19F82E57474FE5BC09F9CCDE15C74D56D9ABB215C6D6ADD8CAE7F23C1
+28C4B939A9069BBD511D98BE9005F8B8D46541BFF944C1C389A811828B105DE8
+72EFB57C8909097119232B9DF1625B68F6C4CDEF105527DDA9C61433EBD0679F
+A0FB4B013B8A2A23DC7FB55D27D24B5976D7B6B6D22535086D51FE3F764EFDDC
+6BFA7053213441BE858436299F9BA777465F87622B46759CDB97B457213DEA91
+A3B3C4F20B2E04675304CB29EA9B502F5437DC528274F7BCF043D6294D3EDA62
+68B510C5979DA9BD79D729092E78A07A0AD771180E86D5FB31267885AD71D9BD
+1234205A958E3CA44777FB0DFBF647997DA58000E413E2321709A6072470ABC6
+253741EFB6CF19B29CCAFDCC21A8E61F3CBDF3FAF79462A4EBF4B265F5180775
+C6E360C8CCDCED4EF326E31C1B00D77330D8666F56D79EE933DA673486DE30C4
+4F3DD041247B91C1C5E8BCD4D1036240C538736A3317A8E9BD86E3675C5D91AC
+7F8E69FF45C0B7CE94ACDF0A34F42EAB4100E674FFB1862EF7856A8BA0FAD7F8
+6EE4E3610408355258B69A2FFE2BB16A9074D369577AB2D565A1DB21F2200A20
+E467D61E2A7E8BB82EAB91C1E55A008217995358502F8754416C05D0C005D149
+9E7045048FB9E3263ED71EB9D3F4929489FAAFEBA25BA97AF44A511C9279ADA0
+AE83660AF114B05C4F0D8F74637267F297F1C21D222DF83CF001A8BE71DB6E54
+9DBC580BBB2E331EC4AA4469912C2F8F2984B55C11D9DA493DC67AB77859F275
+41E273013B1F6D32D677826070B78217C84D3B635B3F77EE3569911E100A036E
+F53797632441E7436922F5771375767C7A38DEFD5D726C57AAB568CEE8DE4CFE
+C9B9BE1B26CC107EFEAE6367079D5A73D84DF5F28A62630E7AC717D72AB06800
+5217FC6112461AF6A8F289266FC24492A462E97B79A7B81823FAC3D77737428E
+89E0C8F3AF3E03FAE9BD0C1D6BDD24F05169E115D6DFF45AAF743C07879D1958
+D73D076E11D15E1E085DE36610566C6616BFEFFACA1FB2503602642F4AD3E7F8
+52E4528C1DFE7622BBC7166B9C7C3739B305A668563978D242C59D214B6EEFA8
+DC5154F28F40558A9555ABDDC6436C3FAD02A0611ACC8C9A9D392782169A8CAF
+69CBDA2569225BF6E169C0FDBFD957408FDFDDCF700B014738D1076425A90922
+B36098E9F8F781019ABCAAEAF2541492D1ED53F0A0B234D5DCC79D60A2AA3E7A
+954B9AC9EA9FE07C013C9F658E83AB861EF1AEDDE6182A267B043CD8BDC88F4C
+36D36FDD16912276BCF5BBD7F84467139610F593957235589FE0AD8C2EF66CB9
+7035A320B82BB63A128E450A80C201CE5B527C12916C921FC7208931EBF8BAB8
+533D78B35708AC0403C6260F12814EE0A50B0F3F5C69C9AB23A437CD7928C67A
+FB5D36C3007FFC25FB510409FF3C7E9640821700A612979BA5C5E5B58904E23A
+BB2AEAA860D03C3BE93BAB447302236896BC9F689926C4B6F5342776786FEEB1
+CAA9FE678004A797B11B5B46C17C90C978A83011BBE5C5D8ACDF5092DBCA9FE5
+4A2E7E5C93656670B1A215D2D3493149DE26B6A1D123497141E0AA06677F2E57
+B8984DC435B0C978BA57CACBD691128748A95C5D50779F8BA1D4200470102A29
+964ACE700F4F9C67E9DEFF7C8CBE574B75F9CAA105B94AE83DAA400A80454252
+BD50762E60F2D2D0F11EECE3A141C3E32F69A3CF6E6F516FF81DE720B4F6852A
+2E187B0A0DD87F89775E041836623A1F3C7AD871DD32AC80E36061B3520EE4DB
+3ACE3C9AF5E0D754933EDAC4B82ADC09CC5E18D3EBAAFA08B066359DEFEB1552
+B6F526693F3CAAEACF36DAB88A70C0099DC3F39D881A76159FDA11967EE987D9
+07A24B70F9776E347F6D9EF2C6BAAF9CA03150CF228337010DBF2A1BEFD9326C
+F4BCE63D40C73447C28B54393ED283DBAB6DA4223FE20A89DF6A8D5F6D03805F
+57D11E4CA7F35FEE57DDA402FAA196FDC573D7A9252D8489663D75006A44513A
+AB8AA7C9E98F95D9FE9389AA7D79C08BC3C145AE3D02BF6CB0EEBA0F455B4030
+0C0603544C34D54DAF21E9B7272D48A188CBDD25EBB70E9813958442995345D6
+4525A9F1CE0544A05619A898BA05E2FDD7A595B771EB749EDC18E7A50CCF4A05
+09A6CD15095E344F8AC1B22A5BF0BB886B87F80C204AF36E903F4E8DA7347F29
+A37875D802B1980BF6FA7BA931879D29714D1BC4FF8D1E40B879F7EC079F2ADF
+DF57E7541AA861C95FD692043A50C936C4C19DD5766F30E74B6787938A6BD314
+D8969C3E71C1826E22482F5D7D9758EF4BCC9112706B19396BFB04FC5B7606FA
+B27355B6EFABAEDCF7D943E3E325912441268D02DCF977597CE70C9FEE929110
+FCB4CBA2D781AC410BD2DA58BC5E40B2FE6116FF416FF8F7322B8B8980C4166C
+28BBC8F3492108C2BDB7DF73628EC43D3C057A3C12E9FEEEBA3007A1F2942460
+26E6133211389D1BC517710AC724FB0E9D91D065A7B001480E34D300EE501D7A
+4E25272D328727FE03ADB57A4CC8244DE4F57895ADC0248E59E191B511748CA0
+22BF111767E464FB590C5A575325D8A0A5C6E377CFB7C5EAA9766E01EF33F1E7
+9E170632F621DEAEC41E604C3F5BBAF7FB7387E5544ED9F5BB11B24E3F6A1234
+C34E0ECDB020BB47DA078772823CEBB9632632D7F177419397A2CCE7DCB3F358
+D9009FAE512CD5DFF9D547199EE3DB5FE73E9688E3FA530B3C1C220AD14E1EAE
+70CE50B9BCD6590B123F0C27B6AF4D94B5A720D479E05042AB637321EBF1E1DA
+5CAE0BEBDD5571A9C6FFF9BDC6D9A6CFA584F0F9403812646579DB230D60123E
+ADCA8FAB39C26FF0484F3CF11BA5EE677A492BAA41C97BC28D5C61FD119F432A
+A2FBEF2AD52B33AB01C1BB8C1A1C9A0D0723AAAED131BE038A8F6685E1973165
+A2D17DD2FDD95F46E71A755ADA2A87320CB94FE6CE58747478684F44405C7A69
+04A63884216203693D28D3742C349DC96BABA2B782F53B618D9540A10A6A9BD8
+99D43B0F5971A3F3E1390FC739FCA366B71EC177DD5A7C0ACB4980D8DAE72937
+EE61469C672825DC84BF957DD7FC64C8A878FC8EAB3E87027A91641BF9B66EA1
+6DE73B03403C303FD52AA4C4CA7BEC8A11451F1224B637FB690796E166FF71C2
+4E811D6562EFA570B397E500976CCE4ACC8208F22F097F506644C151E536D594
+2B2014CAE9475DE608C27F1B904155F670EF523A62CB92D67574E9CF31295C01
+8D01799BAFCD49C5725ABEE2B6193ED05AFA26B0FDDB68DE968457D877606E67
+3AEEFD8649619BCCDFD8DB82EEEDE0C5A11BFF01AA91A02ACFE52C2BFE52FDC0
+F72C909B2EF965B0E4AF615597EF50B685A624A9DF9D3DD78728D418B576D3E0
+94639CC077C39C277A1FF76194782129CFD0E6DBD39AFB108DE517FE4959C3E9
+BB003C58B54E768FEC5DD7A11685F54643555A1C488F6AD4122013757C6D4454
+0021BBDBC0857EFD9B15878B9AB274ADF30D9AEB6AC791491B4FEF12C1DD54C2
+07B328F171B6582A01503C53A341105CDAA94E871D29CC0AF438F4CA8577D4D4
+93451B018B199ECFF48C0B1AD21865BA350FFD19780C8F9A1708B0C33EB2AFAB
+2C1E1DD6D7ED0DE7E56480F3A20A3179DD9A57115B72741C87E4F717AFD99A72
+C7773C4FA1195F26291562DEE4AB239084B38681CC0015DE27F2016A5F60872F
+06CD65C7CEC8EA2A3F4D17D1680106885742423BF87C42787E2BA7FBE7997B05
+097A9AE8B0F4BDD8EBF8ECFE4488F6B1D56CCF797781C6C8A425A13B65999447
+BC7DDC0AD1BF0021F5EC6A646AE5525A0E739B5EC4D932EA5F6DE35824439AC5
+013BDAD77C49E1EE021749420DECA726945B54B9086D9A226919145F74A039B5
+4E80023BFBB07B71967C420B23004C4CDF51A94DE0A2708C7957
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMR17
+%!PS-AdobeFont-1.0: CMR17 003.002
+%%Title: CMR17
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR17.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR17 known{/CMR17 findfont dup/UniqueID known{dup
+/UniqueID get 5000795 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR17 def
+/FontBBox {-33 -250 945 749 }readonly def
+/UniqueID 5000795 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR17.) readonly def
+/FullName (CMR17) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 65 /A put
+dup 67 /C put
+dup 68 /D put
+dup 70 /F put
+dup 77 /M put
+dup 80 /P put
+dup 85 /U put
+dup 87 /W put
+dup 97 /a put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i 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
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9D6295729076BD8E
+CBC0F4C1BE246922D2482233846A96D867B66D9CF25A1DB661141D36B8506E61
+A022F9EF8BC1F2F674EDF1533E67A78CA29A612AA9268E113C5EB84DA56CEDFC
+D7A111403E6E2A8682DB04368889747E003A124395ECF0C7FC81218552EE7C6F
+60BCFB4120893528670D0E8A4117EA5676915E3591AE5652D003EEF67818A41A
+8882E102AEEEBECBD15DCF632ED246A6A58B6A7780DB6F1F9AE3FDAC8344585D
+E104F2BA2DF06D68945889A2A3B6C262FB53FC670BC5EB7C56887FBFB7AA7026
+84115872CFB0652C6BB330447AFF8F0F665EFD6A41D6DB6877B08052F402448F
+CB21C26BDC900636C99CA347B79AA73AFCDE9762A992CA3DDF7279E5C50F453F
+52098529850AFB1F501A442D6A02E0A2896F81C8AC735AF1E7EE47208B4CC944
+649DF6802EEE813F1456205C6126D7D0B1821AB62DD65468F3A30575E491623E
+0054E2E680E4402E1C8C538DA389B81603BE88D6DC287A076F92B224CD58A0AC
+44B8D490197341808DEF243660971F444A560C747BC6F52707ED42A99736ECCF
+EBCB694A561C3A70A319D204CD40D402FBF937A00BBCBE85DD26C9E3F91B7D10
+D85B9D314BC3AAD5A58B107F5F341BE2C53490924142566417D6BE03BB4977FA
+6635EA58DEB9508E40B9FFAC75FF44C683680CF242FE210519C9BF92483B0A54
+83F48341318BE16D2F8C988FE3DB2E7914581F579D5E323148A31E4ED03BC24B
+C990372DF5F3B0C5FA32EB2CA4FA0EA33316569133C87697BAA2292E685C26CC
+F8CD40A2366E60B47D47CC9D0FA29D2836011376A07F78BA7664DE96E775CF45
+9BC91559A063073A4C2FAAD0893C517C5C46A1425D07EDCC2B57162E3A45103E
+FF26A2D2F98B194256A4B052AAFCC08965A50EECD7B9E8F35AFDF7B6568B3983
+8030655E7C2BEC961A2F20539D617626E8454E3FE9EBD3EFCEF7F63498441DAE
+16CB509BF239FBBE25EFEF07A3E16C9C71EB8D9DCB8403916FB40FD7F4E1A52F
+72F2DFF94FD14D7D49FE775390C17C37C1BA0CAF35CF75D682B7833A83224158
+D54CE962CFBAFB1B2CA50B60CBEB1F8F58DDB2F5470C355ED9632342D9382AE4
+5D33BCA3A0A25EE9E5B39BE5370E7F20684C664EDB48E7973FEDAD9676F9EE8F
+701CD4D8CC9B9EBC06E8C86EB88AD56E15CEBB8E1930E8F711CB6E01D5D14967
+D7E6C1BDDDE2C4D00384EF4CB02877DECC27AD53FC981338977BA0CC0257CF7D
+B42E9BC91AF45D9722461EC3CD9DEAA8011FB855FE14B74BE0A102008EACA2B6
+0E287BB4F466FBFDD6E65A5262B9322F95E20DAB875A10A84572D982E6FC7ACA
+23C0C37E5EB47B8E69C07507B53CDD98CD1B6445E1699CF35B3DA3E0DC56BB76
+F997C40E2ECE47DBDDB707EB527055960113F2DABC87FD9EC7D0AB36B400CE33
+0D54D4F197B2830B43DF0AA802DFB2BF747A4C44B31FB708B2C8BBE1955A6A28
+379C91AA4CC065A50098AEC0B837E180B76801865A43C74859DF18FE1DA1483B
+C17843BF1C7E1B11A8C6D8BB8CDB1D552FE6A1FD0A696A8F7405F2320F8621EA
+17C1A32056C45A9ED35D2BD12D02D8B26489CAAEBF4EF33B66FF4BD9B46E4823
+6395831A8F3366EEA0D0EA88D612DEBF63DA7FAA24DA979ACC1A52544BCAA007
+6C39946BEA6076ACF45722B2B8E4D0823EA2D12B14A98367BB0433A21FBD9F94
+18DF298C56F67ABC9DB1868D431A854DBEDF8E1F49E359A545C75A7AA1FA4D5A
+50F1EE6B45FC68ABF65FFF257964E4E50D8B0C1FAF498DFC554073697C2F219D
+4A68DA9E873B270B9C56F0DDBC9927ADAF9203FD684DE615F68C24ACFFB44690
+89C0D5322049FA69E7FD00EFC9C9B2BD177B5B339907F81C31496662847BEC1E
+56B5DCDF4FE618970F4268F475B2EF7E0F28CC986DDF098E59DDAD818649CC35
+4080C0867A884B8177A6880F06F1E5CC130AB4243EF8DD8032FCF390765BAB1C
+1F0C9728EEE261A09F8C1D7ABC7A6B1550551BE2A7D19D45B656650DB00B3A5E
+B3E1186043E173BB4DD5EFFB379654F88146382AE3F7196F099BDCD6D245FB6B
+AA2FA9B6CFBC9F0CD52798DDF2F13874BDE5B124DFFE0DD93E24C9DAEAE4C3BB
+71A9A13AE2860F620B4EC789F95221015D9C510CB4AC775EF69DB9E32E59C896
+1AF82C9F0DCDB4812A37761859A3D3BA0CA57F244489C78065346FFA78F5F7C8
+0B2E8CBA9EE62FF5C27369D0BCD52857D40F1FB8F8A1441B83565A4150AB1945
+0B54D6E49F66389E43096269EF5CDD39526A288C0CB81E324E75D326EC9A182F
+2CD966368CE300B41873B08E17C3E6BB51804460D2562AF5A12339966F44CD09
+114C6809AF246B5BA6937631842CB9417781A58944B6BA4FCF961465C208957C
+81A662D560D0F81BD3CB53C06B6D979F04F6121CCFD5D52702CBF6C70C01EDBF
+2040AAB9CB144321E68C4010E0E98CCA2603EB55DD62E881DB621C37EA4108D1
+528ECC7A0121B57C6BB1E26F8AE7161ABA7E88256D2D6A8B7CDE2E730D137493
+3FF628EF6030DD2330D747FABBA03B44CF600418C245C388F33EC5559E7313BC
+4B530C4FC12530D38B27D6408548F25FC084DD0523B27D29D6518D3115AE7755
+37162CFD4CF528214466FE525B13782F9C3CD78F3D6C7423E63A134C0A371F15
+10F4ECE1D482C647B563D3D15586F80BD9DF7381BD53927825D5AEAF762E1CDC
+3BD184F345029A95B3AD4D1B66E79AB4F0809418C0CFD4D503457A190D02F134
+3F57FC04FF655AEEB783D6791E4EC300755861837D3D50649F6B7F60766211B3
+8148F8E575E28D6C2DE75B15E722ABFC6DAADAE53D89FD295352781DCC2CFF6D
+982F6DB778D6FCBF1B7BDCB53F3A23AE6EB499BBFA96E8BE04C3C8E5B660EF24
+01EB842DAEBE979F2C2DB72AAB4D21627063B1D3C6CD40944E4CB81655698FBA
+A343766CB22E392E5DAE01DB33A00918D6DAA07F2F38B336A3C5DF3708865E75
+0DE04D3AFBCA27A249E97377D5785B4E28EE0E93F7D353619C200DB967372ED2
+153BF8BE945474266EB2FD30F80042A11B7E3586DE4AB1FBD4A741D36DE583E9
+1CA25DA345520AA60634EC819E7EB493CDB128BBADEC3890F055455F060A1100
+D5A41D7B180027E08AD6EE7E393DB9F83799544404FE397F557773BE6A130541
+157C0EB37E036C94825B5090EF85F8B4E3DB72895D86687758C20EDEBD6D1079
+196E9949DC6ED0113571C70B150B37E446E319EC54D44CC0CF6A14760953DF4A
+D0E1F33A54D240E236AB63B35BA8E071D77776BE5B9312245F2C6E4FDB4312A0
+0D9CF723E7D9A3D8546C4739C00C301A89ABA60A02757AB1A0AC40B24CE6CF12
+5850485B11E16646D7150795EABAEB08364A53161111F46A7BC3423A0D3BEB69
+BF15726C1F8363914945DEEB29CB8766328318AF3B344FD6D77BBB92BD7FD161
+93356493D4D8252AD125708D47C124E44232FB2BF7DD75F87889496DCDB75D03
+F58A57D4122CFC194B75A9E9C4789C9A33C0435FB4ADA16AD4A6191928D1663D
+05FB8152C0AA176FBA4755205F8A66713404787070757D3721ED6E6D55A59DF0
+C92BA8F05EC7BE05D0A2E66DE85E75373483EA3BBEE0F0DFC7E2FA5FBAFAB118
+058D095AA71FDFC8AF37E5A98406B64E58BF476C6926725D7EF3C2346CE3F662
+1E5A4A18D966479A37070859014719456EA2C7F23E68E1AB2F25ED3A0C00A18C
+DD403506923BC983F89CCA125780DC76A411472E38173BC0DD4CDA7B43E13419
+B5AB0B9A35E77C58BBA12AA4F5C7EBF8A29996B059E4FAE6809565570442AEE5
+D56CBF4407E1CD9A4398B1F3ADFF023F64B230E3D29F526B62D964F5C8DF801F
+E94295AD85BD9E1C18E6327977260A871E921C0745CA06A263E335E344686E7D
+D6FE3ADB4EE0A7E462F3C00873C3E95D183CCEC71C0E5DC1D2FB310B28FC3611
+67C23DE336C374F72368F4973052B48E39969305791C986E6EE35D0350571860
+3A8ED849712CF21AEF444BA390644E8646CCA16559BA4642A5800827A0DDC453
+7CA0818BC47DF6348A5209A2F0A10CA39840CE6346E89CA0E842BE8692DEF25C
+4623A5A0E0B98708B9492E9F564324BB3872D6B953CA59E9F393C477E2AB85EC
+C557D333E88C111CF995FB79D9432DC94C2BDB3BFEE13C0D7D1BB920DAFA6158
+8548447AFC65CD5515D5021E0ED7D213B0C08C35BB424AA91885CA023D7AF767
+B83E619B15DFEF5588D2F0564296E14B5A6ACE03751E1016105C51BE76EA5ADB
+4167BAED2A8899031FD7BA05C410ADA25ADD94A787EED1A7AE133B0568B1DBA5
+44B41BE013782CFCA3D81E8E8210DD506ADFCE7DC7E792EFEF438221164A7D1B
+5E7089F476240C5F94988F081943F24DBF7CC3D1E58CB89E1C0C1624682CC3D8
+C95815ECC9183A4B3E353C7F920B7E64086E01672DAA7C8A81319BAA03C1FBB7
+8E5E84CC5BAE0E107754794C755B7AF00953504094E1A9DF357D51B578259613
+8D26F0BA26AAC459BBEEB90BCC98B865EDD26AA4DF533D6624EDAC762C446B6F
+CF9F86DD2D8989D4655775E662B93BF51805EE3CBA0AE2293D95F166E80973CC
+82C53042D0249C598B0821E9E7F218BA6114EEC86C158F277934F2651490B723
+7F0D0288560DA5BEBAFDDF243048E590871AD18B3B220EC56549004DF122AA03
+BAAD6971D790BC644369FDBEE74A324083CFA9496C2A333774F06E35299242BC
+F4B26578907CC5AD1893613F2B8622CFBB7B55810162EEBFAAEAB2A6D69CB72B
+D7859C73843E665125FF450631F32E64F13A6207F368103C7A7318DBAF2560D0
+F1CDD83C3E48CB30C62AF1E0896E1962C655D9ED98E1BB38477C1C60ECDB6B95
+067D3A638AD43EE886338F7AD2D2A574CE6FD2E21F6FCB4220EFEC85ABF8272A
+82081CE70E4390A74EC717F1DDD168F4A4A080A79EE2ECE0F98A96871DA4B52F
+78441601AF47763C2219F5A167604C32F478D498835EF3A6167936994F7C7139
+3019FF43C97E7978D3CDA641C1E391FEA572D308E759F28DDE2B40B5BC207A4B
+C5EB6A93EEE26782016F8B6534420BE4D790A2E1A65B6CDBE9468152230384FD
+14E9AE84418A44F94E6825DD7D77D0BB5486DE26A692B3DA96C81FA4440C5D44
+8E7F3CAA9B8DF38F87E09C4D78841F629F78F4E7CC8580CC44E59E5D9AE8B2DE
+C0682F793AE7AEC12A8AE688636197E8A08FEB70EFDB6203681A60223B9B0D39
+2DA656E5E99B82130D4BE38D7AFE18568DD30B0CC3C73C1E2914ACE11A65334D
+A9F18135E7B86157122CD221C33C62012FFB16D2D2F3473A53BE3E7B9FD4303F
+66ADF0B07155C7B9B002EA68C6AC7247EB3CE7D2670A60138049DAA964F86A05
+22983EDA7242E6BEEB90DF61C937399B2CE1061DF1E551CEED4A80D86C2D4649
+C9FF9A1F93E96773CD392478D5B70D5336A03A274E0A6EF44BE8CB2274324142
+706BC2E340DC944339D647961FD7BF29944503B4AFCDC69A706AA6B0F6AB2CB5
+D220A96ACC1EE5E7826F6F75F044224E5260D581AE761AD0C752A06AA03FD935
+FAD65C9EDD4E5505396E331D45DE88F0D1A4303D766ABE0702C17E2A7F53C0EA
+96A4DEC5A6B6186F5DBAAB05DD78E38AFE630465BEF0EC66ABA9C1C9232214A9
+795D105C33CF069F6BE20B179F4CC9F484AB63ED25C1212C457DF62CA0D56E20
+608572216F2D4C09010B03A8AA6D287C8F514BEEDC1C912552CC2489858BF4D3
+084882CE4F4B6FB9EE27C0168671E6DA154018ABEAD013C88E1D3EC918371251
+63D95BA0FE20212C20AD3F4DB614EE36B488A3F55D94C1EDFCA8E68E54A1EED4
+7DD168DCCF07C3DDB5E2B499DB5635C5C5056A7438120DB4839427D07F96AB8E
+F842E285243E40259F6DF029E27779CCF3D3BD7206B2C341045A5A4AABACC2A5
+91C6830FE05ACDCFDE99046F16F2AC183426ACA4A89FE5F09B7EB2F811BB5FB5
+AF073BDA2886070B2327D582DCBA66B47E8948C3BE05E837BE4B81402A583403
+74FF9E938F0E9DC3B1CB81B93DFD4070F9EBAED40BA570DE8F9A5C2C0A097311
+22A6065139A6580E332473E9410D9F4C734794F79E41D0D437CEC7381919DF6F
+A24B170E2BC97A6396A4E3AC3D844AD6E2B8FCE1C6AE97DFC5319F49130C3D6F
+AF2541EB2384D5D4CCBEB976846EF8C2165DBF706112BDDDEC9A57D157F5996D
+95229FD5C71B885D16B177BAB06B9DF5740A45C2A005778EE879193290419C0A
+A4A339029E37E685B8A05B111DDF94AC19B1D85C8E6026E57E3D3B373C08557A
+F96E6FE3916695ADFC1F0BF5D558565F42A71C61ACFEFC9026424397F0646642
+7EDAA05794BCCD164A645860B57EAD53CB6899B18C6E9496EA4DAB0A0C272639
+DEBC4FCBA94B3BF123F7771F602E7667C8F56E12429669F2219C7D8E294BE07B
+71E88EA62F5616CAAB7C0198E6FF12A348E36B306FE2684A401399431B6A84CF
+B46EE4BAA0F4099E65E9AF3B70274EDD6B6524F4FA38C23F9CD5273EEDC8C6C3
+E7312B6E0497C05AD3F3C246638F01387CC11DBCBD287ACF54D8E24759F51415
+35ED64132EF4158F54AB9F4D567482B3057880490F805822F71E7E2C52F7BC38
+8B1F803AC3731064B90E5E97AA3351D17E73DC2FE526CD6C91158636E395867D
+C1150FD3BD12493FFFB813AF0D08C8ED0B7418A2CF90BD5B783364358605D075
+5DEA95A9299C0654EFB28E2FE8A41358A0DD124D0314A27558E42ED5F2D74BB7
+056DE04D2CF13B9B804A3CBBA29BC155A3F18B8B48283194C33CE8291677E1EF
+0721138F8E0409D49BB99F217607586D2DF00C29A25536E21924B4CF6702CF85
+C02DFBFD2AA4DE3DBED1D2C02E21052A8D10F96629D0D18154923638FE0C48BD
+E2DEAF11663E20717EA77A5453686AAA39D6FF7919AF09B1AD956FDBF734F49E
+262F3076F62E77BD45122B55A5913902D9F91C4246FC235BA9C0FA4A96994291
+830638949BED423387DA2D455A3C9122484EFF27F5367D1D3DD27D207D973815
+965E1CFF36F43C653ED406F65348671D9FFAF55BA3FC266D438AF473181B7801
+164EA3F04FEC870743195B3F467DE36B3719BAD9BF15A18637A314C887D46673
+445BA3C212749B0A33136FEE9FE2C9A13D62E7ACC96378D257FBE0EB06AD4D4E
+D41976AB92AC720DFD33B0677062C32E6F5C992A0324FD26E984B5341A58C190
+D20EC3F1144697D514D9157340A6C9F82E62AD8CFDEE59F6FF86C6250CE33D6B
+BB82DDB4F65BEFC6F6D0E4044F7BF307CC346E2FFD191846E3CA288C6F91CB71
+5FDE855FEC5E38816CC635C470BF15263A10A409F0BC4877F7E6D4C223E3564E
+E7BB5B320AAA5AAF4F32528F7413BFB97C70FF5E6843E1FE501472129BC9758D
+7531BE576C75840CBC4CD3E6D9E5FF52559B68DE6E7827128BB2ED1BAD43F36E
+A0CB68C1A147A7093EB02062AC5492DB7EEE08B1BDB187E15339A66269E459BC
+67495937B4317AF66A498923322B087ECF47B601C26E253D223A784DB2D204FD
+0668BD403A73723848018B7C86B627B9AE0BD9038F567CD5F670CAFC5C4D86FC
+ECA211B713ACF8C1370191161CBB6C2592E8B9DBF3471133F2D9A60F15D72F9C
+5E5539D59A6A7E124D9A38A6FF6EB7C71990716F88E1888295584F17D49144B2
+B57252D7D87CFB7BE009E0E1AF68C57E2041CB837A1F9DA290FC07240D616876
+CBA29ED23952F977F27ED97503F6C6CB48DA6611E0ED9D90FA865D099740C6CE
+8A5DDBB1D6550B208321C365A5104F9ABD66A9238B8A2106AA74CAC58D1163F1
+DC4A62013C0F6DD8A3E8E1A6CC6E553746D570A744863FD8EA705890890AC5BC
+2F0A068C740572F045B32289A2AE66CC44A1C13FB8BBD4E1834995731D19B47E
+7C2FE360AE79DACB95856B01EE39EB3C7C9EAEB3D47348C47D928BC883B8E760
+6724D80DABC4D736411942BBA8CF08157F21D63C18924282193C5C8E44E09048
+FDCB8DB2E01C8A496FEE2CFC19A3A0EACA508237C8BD988ED6D33D01EB548B14
+61A546886AACDAFB7C8CA69056B1F428D72541D54EBDC4B44A07AA72F7FDB023
+6E0899786D3E0B8FEBB376C085CE6A2D26D003FF8EB0E6D19E277B28C75437BB
+1DC93A83A9770813DF2B1B539CF3F3F4549410F7795406151F84A9F6D959AB5D
+EEF87E1D2278AF2466B509F351D8466DFB711EE416D9347C339E89DB6C990C51
+A127C2CA8970E639403EEDA875F33BC3685978FD36DCC3AAB9EFC07BBB7837D8
+1F524EB3A143A1548A221A712FE24BAE8C6ADAFC70EB74ABDBC7E418C9027418
+D1F1E50A250C6ADC6D3E826DB7E56F97D7FBF35AE901A79769805DE45469155C
+510F692CF5E60A47B540A5C99A3CB05088D23B23BF672F1240E14974C4D8A161
+6FE7FDB940F1D15F808DF49E83FEB633B9B873A42A879F9E609A1847E36CCFFD
+B2E6D45D87AF79C7E66D00F37C2932878829DAFFC056CB85B11BAF98B62A6B23
+23102158C9D8695A2809CC38945337139C89BB71AFAECD5549E01B048388158E
+73651DDFFE14816A9B86B97F5E60A1B16CB7FD371F4DECA7D0AB0D71EBF57344
+EBAFEF9353A1F5926493C4A0D57BAFE403CFD54F07A6DEAB01D9359FDD4342FA
+848E716804EA85D0B31455C4A79D64AF1955ACD5A8E7FA28212F916CFC3858FC
+695B9B6FB1B5C9E619F40E86FFAF01E777DD0C8CCD5AB41ED4EFFC98C0286418
+1D2B3953AF74AA92C1AD4B629B234EF90E57BC8C09B521A989FCD7EADC2B346C
+5A2F9FC731C2DFEFF083D3906C5A2F623FCC022C25165F6AFED7C70CC6D18818
+9B6D5EF527A884DC1246012EB1BE0C3C2A75D382C7F7834E239AC05F5A8F34F9
+D6B75DDE85754FEA0AC23E90AFFEE791DF1D6BDFEF41EDCF6CAB2D26EF859114
+6E598478A238CE1410AAB7EDA5F7D9CF5DA9582003F1E11DB4870F8376B2B35F
+3C798A5CEEC74D5F68A6420C77574467E83C98C856D57D305A8AA0448525B3F4
+52702A7E7189EAADD983210ADE6198E4C5EFA4ACACF7357EBEE2FF84E4077C54
+205DB6339B9ED2B58FACEF3E3B54FCF8ED7138179EF37404C1753502F5EA3EF2
+49BA9FD22A23D38544CFC2D4410CC1EC7F8AE74ABBA02C0299B9AB220AE7D49B
+75FAFCD6C1A4C666E03DD43B652BB602E392FD4261634AE7208040771354EA9E
+9DCEA0A74697CD3D36F29B517CC1C0EF71DE94B19467C3225011AD28BD98ADBF
+DBEDBED41FAFAD5A313F67B251E6CEEFDBC20A570B0B0ACE12DC3A7A7503AF11
+DB96A8ABFBB47DC1BF60B592D836D202BDE1FDB360E2BCB6B6BBEE8D68FA7664
+17F3F162D7C8433E6FF5C8A6A42AACB245CF7238E0938B4D6231ED135452277B
+3E88C2F9B52973093BA6C9275CA50D767DA1184DD179CAF990457611ED2F183F
+6B68488718BE003D4E22279CA083B77FFD0D083AD0C0D29AFCE5EFCF434FF5D5
+30F62CA60BD952D3F1B0539E1457BAAC49193B2EDA92E270DEA430BB2710A34B
+F4D91107E98602532D150D4B3AEFB5968469EDE7A8E17C7EA3AAB06BED7E473E
+8FEDB499F7D99E41C4FD11D962307B3A7C6E228A5B57654CA5D4509000104972
+AE35441138372268FD6F77A08EE595182B7BB47090FD9EB7893B2B0B4F210060
+74B9B81878ACADC8ABDACA9A6A158A1822321BEFC575F19E4FF1845F032F4C87
+B252BD481144876D939C2C26C3CE54686E03F9470C2BEF6DC982970B528892E8
+D718EE5A1D3615BB85E7FB0D38AD6E5C1D52DA46C72229704F553DB1D45EE5E0
+113664BCB65B0DB9FFBC2ACCA79FDAA23F0DE91C82EB6978354538EE2FE565AA
+070FD4A2A66A0E0490A7D994BC2018452BF46C131B5956D66775EECE6857C6F1
+BE92CD21C2D97614B1C31200B2364F37676C4AB558980D406BA3B820C163B994
+238F9605E5B2AF189543B0341DA0D7AB8B979BD982345E9F69C83C0464EB46DF
+8D440E65BB26A74EA98D75E4354B5A0AC9CABF2B414EAD2B63AB479F0EB17C57
+A88AB81352C6B27FD0B1D465328E6638972E7CABC15581DD64AE5360D65025DD
+F45E57AB8B9C06534691EE5EE082057C062B934AB9AA7E4189861C86995E0918
+31060CEFABEE66454515E542C69F4B5CE675F22D2FB225C9F56E4A564C0AAA39
+C36DD9F926931EB6F850AE93094E122ADE1C74E18C84E9614AB6BE41C51539BD
+3BD3C9FDCFAE15C464B2C68077E7882F8BE3588397B34C5DCE72D58E59C77DC3
+7D8C5D5E8F816E3C84D0BFFE0EE9EAEF89D11969589CCA6314394B9C218C4565
+9FAAE9D02C589C26768912CDDADF98D525E3090F54BDDACD02F47F49666F3C01
+D33CDBBB3D0F0CC490992CAF4DE2207B6D95298FBCE9C6DE54C1B04356BBC506
+36FD340A0FCB785E146CEF2F08A875DDACA3FFADB706B8ED1A2462BDD3D93C10
+35A5FE7646FE01E1808D9394DA6EF21E998512DF86944076AFC39F9FACE57780
+0290894FF992405E3D713CDE808DE743C3C0F99BE06C37D3F3E20FEB3BEDE452
+8A1F1FE4E652527330852906056FF3659B5A789ADB57601D96958BB850403203
+424074F11B7CCBE33234B3C5CB2BC51CB609BE5123259B6A11EF12571AD37584
+82523115729CE32EB5CAF8087866460C331E27670BD134B5F36D0D648797DC75
+C5BDF9C3DD41A6427E16AF9117F6012B974D2061E74633D9740C39B340121D27
+32FC8BAA96F2F91DC2D936B93B8CFA951C7039AAEEC5C15ED8ACE5EE05AD7BDD
+6B5B915C15ADA0492DF77F582283B68C268CFDC293871A057C3EBFD06752C963
+307ED6781E97B2723229F5988BBBE7FFA02E4E0137D4A2F2E4A856BBD7505880
+8DA0F15C9DBF54C1A2EEF8A12E6263CE2CDDBBB7D39BC6B56639B2FD84CC64F7
+2B02FD3549EBAAF4EA5E640BC04086B6D8EAC9690786FD2DFB45F6C169D907FF
+2E368AED562C4B58E59D2AC1641C746973ECEF1BA237018684C52EA1829E3026
+EDF2B94D194F2EB01C21C7784AEAEBC68A88258933DEC7998ED57BCE7A3CA389
+B755359855FF644FDCE1A8805E420D84586FBA00CFA2E15B2AD5B25FD01AC3E7
+87504B45DA2BDB6037BD9BD19BBBF8A62F525B21E8FCF3DF0A4AED94FC10BB36
+673835BE6E6D503531803072C06D4F5D6F0083BA2AC5E54FC5F42604E8B7B521
+48655715E14A775A55602334A0E2835E47E3AD54649BB1C775C2DDA9B46663A1
+0A1D032568E44F143738B77F1944EDAB6FE2136024AEE7DE4804E022488B78E5
+95F98D3023824362508A9BF922544EE42F679522EB43024DFE9E231EC6A63670
+A05B1B2EFEE6EC7AA354F26FB4CE5886A5B9E9D6416D6C0A0EA5193904F6C967
+1B97D06C354B49DBD53A9DACA30F54A0C9FA8BFDBE5D10244C98D59C43757397
+D5759B31C799B145F87C8175038E9CE1F6455C74CB061F4A21A8B27D8E2C650C
+41AC9DB396C84B9C6B4E514542315ED29BD1148115A8878FF9EC9E428FC03449
+C7D90D83E6FE5E5A224D8A7FC1E42560DE255271AA7BEC2EDC7510068E843F5D
+F6269DAFA11CF63A6478448FA083E210778EFCC4AD19BB74593F38933D21C3DB
+EF341229C4973DCA2462BCDF1CAE657A76474351C51EB8AEEF085FD10F751D18
+A995DF0871FF84F68829BFB9914A4DD657C8249A2D87F23D36275FEBE7FADA31
+89159301DB1869537D0ABCB8E507537BF3332DFE67DE402058BB1EA70DA22281
+2628E22447C60D83740D2E35D3843C4B9720C7958D02898BA11B419B25C0A3AE
+C3B91799F7D28023429C902651E7FEE4A7C78F60450E6FAD5BD1EE7F2401EAF5
+2A61D4AB64B1364844F1C0C4E005B4911FC11FE12DBFDC321D7F9688DA3513BF
+DE6E2185AB008870C2800BF4888217CA2E4BD9DECF859E3748ABE5A1B9B03C8E
+29E6E51AE29F3D26F36CA8852848A3C759D0518872B95440914969A15447C88E
+FCB2429F239350A68AB50712AADE557A4FFB7DF3DD51D5E57EA44893C1FF71A2
+092281289B3A059B5214EE4BF8EE08AE16A5CF4806D9D044861D958B4FE6FA4B
+D52E91FFD3C3485848D751F288FEB97120E02A946C21BA9DD27B75F5CC646A05
+8967EBD266B751F46143C62B2FB301628AAE6F97257030BDBEF911697D445363
+7F674FB0D8B4B05C814B5C344768FE720E8B870CE7BE5413C291254D207E6777
+20E1A9661D4A325DE30CCD9964ABB17E76BA2CB37022185C9B577C5996975BF8
+8477831B3810AF7B335EF33D109D149758B0BA9AF773AD6D524DB6054321A98D
+D7596A881EDF2A73D8C9CC68D7ABCF32690D5450244A4804FB4564570BCDF76A
+D2BAE2F30514615310CC0A7F8281AD3B27189EE97420F41D64C5F71AD5F1C980
+53AB5917380E3771E2A76DDD7050A2F226952A07F6C11D5A90EDFEC8D40A3AD4
+C07765F164110E4C71FA123C0B455113CD51C0841EF4B027DAE1408A1EE33E98
+BAA60FF801E55C8A94755292F8B83D768557753D517A34B3FBDFF95665AA1C1B
+14C073315F58E6C304C40294BF19DA76B18E82EDBF1E70CAFEB6664179A51260
+559E6A8552887FFF822B8BB3ADF6447C0C0C163914C3B0B6DFDE87BBE6AC3D38
+EC68A27F13B9D8A9542123B2D74E96CB003D07F1BB91377C9AAD32CB42CCAF18
+FD95135D4B355572F2C1C64A9C5BF8A4334BE3008D181000501101EFEA328F16
+F38645A68F72285FB202A498833E73FC9D65CABDA92489081123FADE235CF7B7
+7E906E521C29918DFBE02DDE3BEFECB2D38F3448A7884CED34B147CD3582F201
+0883FFBF38C0927D714FF22C22D47A9028760F1BC440DA2530FF24994CF6678F
+FC76DFFBB2FE5412AE3802442DB9A4C99C65E4B89CFB7CAA3060C5BCAB56BD75
+4D5E14E67B5F09E8BA3D47D71DC310073D5B93F5EDB4AC0505C3A48C94A51EE9
+7E1C3F69AE1F734651110B59B2095C1C4F8C6559843E3956DD1846F0AB98A501
+4C865B91A0C801504148CC6ABAD09B560FF43A19CA1ED82FA8454CA9A51A1E44
+7A81602F707C2B7635474EBD3BE7482F5C1B63D65353238722BF92E977593728
+ABA75558C13DDEE16D6C470F49AE09F5453A8AA49852B972876970EAA010D396
+C1ED2379CA5DEE24465E2BED37C3322FE53BF5C2E24247311BF6C38A2B8B8D15
+77857700034915614AB9DAD51ABFCD71BCE13F80BAD4BEEB39C360791EC17AF6
+1A6D7D21716704D42A874EA445CA63D4B1D22ACA0D7EEC405698A0D32602C27A
+ACCAAA348FEB58A6249BF9C544B624AF118CF55F55BB75DAE7D87335B6A1987D
+D0C45F9341BC6337EB36B58761746F479864BBCEE181096F9B42FC8FA5C6144D
+B9D3C06E8A61700E6E2712C90EE2C1EAEFB39D1B765B6494754426EA483F3564
+4B63FCB2FD1080DE0FF9C5EB96BD906184168036956F6F74709A45DF253171FF
+047621FE27EA372FF9EE8396FE040CE25DABF5F9861632EB43F94C969289459A
+85F5D490EC2ECEF64F572DA1A892A223BD7867EFDE65E4DB2BA92099F58328C8
+237E6EB9315F6F35234A5B89951763D3EABA3B69F910C1347D838C1D276E83D8
+B8D060A13466C0F730D95B897A51042E9DD021B76F0232AE4C4EF2B993C832DE
+72747BEC811D9E416AF2D3A08198A473A1E18F69869A819689D26B9D667A3A45
+EAD0031FF9EFAD769AD8AF598DA6A3BA56CFA517C30BB1E58CA57C0AC5721F0D
+9982F330F2A6BF0A9A0064F4AB4A42D6C0157A9A2BAD2A9588F32AFE72BB716D
+33AEE439D8971648433CE1AD7B4F47BC7E4EA2A61C52FF1611FE70F00B34607F
+2DC19011752FB8E63264E95BC5B8AE3C9B42D8E9DFA2D2D182D9D31FD81968AE
+968281FEB160A4691BF0B57B708F288414C067503B63997E958F4D0A6DF057F3
+476F31839CF860061A580DEFD65100F6A04AC569667DF41D40393271085FE76C
+4F264A88FAA2FC341C9A66D2343C207AE56BD44D571663CFAE2165378F8EC266
+B273B925FC56D0111F701DDFDA998E2D67BA7FF4189E6AD1B08A22EE0AC26F25
+D25DA4082E186AA4447AC28ACF7D6635D389BE16A4980E6903FB5D70A291F4DA
+0DEDF3D2FB17496A2E782E28BFB99436F5E890BEA8E6B97A92390A20B06AE165
+8A5516E42B5B05506031B9C3BAA1D40BFD66CD226388A8B57D1F26C8754ED87B
+52C2EAD7629AFBDAD01CF04BD83298755D2B6D0FB7378364DDD5CB7C12559A90
+DB410EBACEE4FC2784BFDEC69C2FBE582CB9A529C0FF4C1EB7C97E7E8BDBC700
+902B137211C45E503CC2F22A6A6A8E4AD7A4577AB8A0BA3EF8248F6893CB40C8
+79ECE86F4DEB01B64FBFBBD4EE77FCA0B084DE7847C92C41CFCF098FDCB1E6FF
+0BD06E2AB02B8BB1E2654770B608FCB56C750BB0DFCBD1D45DAFE873B43DBFEA
+476CD31AB511863042
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+TeXDict begin 40258437 52099151 1000 8000 8000 (pedigree.dvi)
+@start /Fa 190[671 65[{}1 774.872 /CMTI7 rf /Fb 135[492
+120[{}1 1106.96 /CMSY10 rf /Fc 599 830 1[553 799 2[892
+615 615 2[584 553 492 615 615 553 615 738 615 615 615
+615 492 922 492 615 492 553 553 553 11[922 830 799 799
+753 861 861 1[1014 861 861 1[861 3[861 692 1[784 830
+128[523 3[307 1[553 553 553 553 553 553 553 553 553 553
+553 307 1[307 44[{ T2AEncoding ReEncodeFont }57 1106.96
+/SFRM1000 rf /Fd 182[483 14[354 7[636 636 49[{
+ T2AEncoding ReEncodeFont }4 1106.96 /SFBX1000 rf /Fe
+182[370 14[284 7[512 512 49[{ T2AEncoding ReEncodeFont }4
+996.264 /SFRM0900 rf /Ff 477 656 1[441 4[489 4[441 1[489
+1[441 489 1[489 1[489 489 2[393 1[393 441 441 441 14[632
+1[677 3[677 2[677 3[677 3[653 192[{ T2AEncoding ReEncodeFont }22
+774.872 /SFRM0700 rf /Fg 523 523 1[523 4[523 523 2[523
+523 523 523 523 523 523 523 523 1[523 523 523 523 523
+523 523 523 523 523 11[523 523 1[523 523 523 523 1[523
+523 523 1[523 3[523 523 2[523 67[523 40[523 2[523 2[523
+1[523 4[523 12[523 523 1[523 523 523 523 523 523 523
+523 523 46[{ T2AEncoding ReEncodeFont }54 996.264 /SFTT0900
+rf /Fh 219[581 36[{}1 1106.96 /CMSLTT10 rf /Fi 141[321
+1[486 6[224 1[470 1[418 486 100[{}6 885.568 /CMSS8 rf
+/Fj 134[581 581 581 581 581 581 581 581 1[581 581 581
+581 581 581 581 581 581 581 581 581 581 581 581 581 8[581
+581 2[581 581 3[581 581 581 581 2[581 2[581 1[581 2[581
+1[581 1[581 1[581 2[581 7[581 1[581 581 581 2[581 581
+581 3[581 581 34[{}49 1106.96 /CMITT10 rf /Fk 139[470
+14[470 470 470 19[470 1[470 4[470 2[470 21[470 1[470
+8[470 36[{}11 885.568 /CMTT8 rf /Fl 134[497 497 680 497
+523 366 371 367 1[523 470 523 784 261 497 1[261 523 470
+288 418 523 418 523 470 3[261 1[261 2[705 2[705 680 523
+3[732 9[640 9[261 6[470 1[470 470 2[261 314 261 31[523
+12[{}39 885.568 /CMR8 rf /Fm 202[406 406 406 406 406
+49[{}5 664.176 /CMR6 rf /Fn 133[453 2[736 509 594 368
+453 467 1[566 566 622 905 283 509 1[339 566 509 339 509
+566 509 509 566 8[823 1[823 1[792 622 2[751 2[993 694
+1[581 1[823 856 1[751 836 792 1[823 6[339 11[339 396
+339 31[622 12[{}41 1106.96 /CMTI10 rf /Fo 138[572 400
+1[378 1[572 1[572 879 264 541 1[264 1[553 1[492 572 492
+572 532 16[707 26[553 7[369 45[{}18 1106.96 /CMSS10 rf
+/Fp 134[465 465 632 1[489 346 351 346 1[489 441 489 727
+251 465 1[251 489 441 274 394 489 394 489 441 13[489
+643 1[595 1[653 796 547 1[452 2[685 2[666 1[619 653 11[441
+441 441 441 441 49[{}38 774.872 /CMR7 rf /Fq 130[581
+581 581 581 581 581 581 581 581 581 581 581 581 581 581
+581 581 581 581 1[581 581 581 581 581 581 581 581 581
+1[581 1[581 581 581 1[581 581 581 581 1[581 581 2[581
+581 581 581 581 2[581 581 1[581 581 581 581 581 581 581
+2[581 581 581 581 581 581 2[581 2[581 581 581 581 581
+581 3[581 581 581 2[581 581 581 34[{}71 1106.96 /CMTT10
+rf /Fr 138[1435 1004 1019 1055 1[1435 1291 1435 2152
+717 2[717 1435 1291 1[1178 1[1148 1[1256 11[1985 7[2450
+8[1980 2[1950 65[{}19 2295.84 /CMBX12 rf /Fs 134[672
+672 919 1[707 495 502 524 1[707 636 707 1061 354 672
+1[354 707 636 389 583 707 566 707 619 10[962 979 886
+707 955 1[870 956 996 1208 3[483 2[801 1[976 919 906
+962 6[354 636 636 636 636 636 636 636 636 636 636 35[707
+12[{}49 1106.96 /CMBX10 rf /Ft 134[789 789 1079 789 830
+581 589 610 789 830 747 830 1245 415 2[415 830 747 457
+682 830 664 830 726 8[1128 1544 1128 1148 1039 830 1115
+1[1021 1122 1[1418 898 1170 1[557 2[939 981 1145 1079
+1[1128 7[747 747 747 747 747 747 747 747 747 1[747 415
+498 32[830 12[{}54 1328.35 /CMBX12 rf /Fu 136[1295 1[996
+697 707 732 2[897 996 1494 498 946 1[498 996 897 548
+818 996 797 996 872 11[1378 1247 996 1338 1[1225 2[1701
+1077 2[668 2[1127 2[1295 1[1354 7[897 897 897 897 897
+897 897 897 897 897 35[996 12[{}41 1594.02 /CMBX12 rf
+/Fv 132[553 492 584 584 799 584 615 430 437 434 584 615
+553 615 922 307 584 338 307 615 553 338 492 615 492 615
+553 2[553 307 553 307 676 830 830 1138 830 830 799 615
+815 861 753 861 830 1015 692 861 569 400 830 869 723
+753 846 799 784 830 1[523 3[307 307 553 553 553 553 553
+553 553 553 553 553 553 307 369 307 2[430 430 307 1[922
+553 922 553 8[553 9[922 922 1[615 646 11[{}86 1106.96
+/CMR10 rf /Fw 131[523 1[523 523 523 523 523 523 523 523
+523 523 523 523 523 523 523 523 1[523 523 523 523 523
+523 523 523 523 8[523 3[523 523 523 1[523 523 523 523
+523 523 523 523 523 523 523 523 523 523 523 523 7[523
+523 523 523 523 523 523 523 523 523 523 523 523 523 8[523
+35[{}61 996.264 /CMTT9 rf /Fx 134[540 540 740 540 569
+398 404 401 540 569 512 569 853 284 540 1[284 569 512
+313 455 569 455 569 512 8[768 1[768 1[740 10[370 768
+2[697 10[284 4[512 512 512 512 512 2[284 341 284 31[569
+12[{}40 996.264 /CMR9 rf /Fy 139[458 465 486 14[524 655
+573 31[890 65[{}7 996.264 /CMBX9 rf /Fz 137[684 1[684
+684 684 2[684 684 1[684 684 1[684 3[684 2[684 33[684
+17[684 46[{}13 1328.35 /CMTT12 rf /FA 134[686 2[686 1[506
+513 506 2[650 723 1084 361 686 1[361 723 2[578 723 578
+1[650 10[975 8[1192 813 9[921 975 14[650 650 650 3[361
+44[{}25 1328.35 /CMR12 rf /FB 139[984 984 984 1[984 8[984
+2[984 54[984 45[{}7 1912.83 /CMTT12 rf /FC 138[977 677
+687 677 1[977 877 977 1477 478 2[478 977 877 1[777 977
+777 1[877 9[1826 1[1326 4[1202 2[1626 6[1152 1[1352 1277
+1[1326 65[{}24 1912.83 /CMR17 rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 8000dpi
+TeXDict begin
+%%BeginPaperSize: Letter
+/setpagedevice where
+{ pop << /PageSize [612 792] >> setpagedevice }
+{ /letter where { pop letter } if }
+ifelse
+%%EndPaperSize
+ end
+%%EndSetup
+%%Page: 1 1
+TeXDict begin 1 0 bop 0 0 a
+SDict begin [/Producer (dvips + Distiller)/Title ()/Subject ()/Creator
+(LaTeX with hyperref package)/Author ()/Keywords () /DOCINFO pdfmark
+end
+ 0 0 a 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 TeXcolorgray
+6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752 1660 a 6752
+1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end
+ 6752 1660 a Black 0 TeXcolorgray Black 6863 5867
+a
+tx@Dict begin gsave STV CP T /ps@rot 0 def grestore end
+ 6863 5867 a 6863 5867 a
+tx@Dict begin gsave STV CP T /ps@refangle 0. def grestore end
+ 6863 5867 a 6863 5867 a
+tx@Dict begin gsave STV CP T /ps@rot 0 def grestore end
+ 6863
+5867 a 0 TeXcolorgray 6863 5867 a
+SDict begin [/Count -4/Dest (part.1) cvn/Title (\376\377\000I\000\040\000U\000s\000e\000r\000\040\000M\000a\000n\000u\000a\000l)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867
+a
+SDict begin [/Count -0/Dest (section.1) cvn/Title (\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -3/Dest (section.2) cvn/Title (\376\377\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.2.1) cvn/Title (\376\377\000S\000y\000s\000t\000e\000m\000\040\000R\000e\000q\000u\000i\000r\000e\000m\000e\000n\000t\000s)
+/OUT pdfmark end
+ 6863
+5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.2.2) cvn/Title (\376\377\000U\000n\000i\000x\000/\000L\000i\000n\000u\000x\000\040\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.2.3) cvn/Title (\376\377\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n\000\040\000i\000n\000\040\000O\000t\000h\000e\000r\000\040\000S\000y\000s\000t\000e\000m\000s)
+/OUT pdfmark end
+ 6863 5867
+a 6863 5867 a
+SDict begin [/Count -8/Dest (section.3) cvn/Title (\376\377\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.3.1) cvn/Title (\376\377\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\040\000V\000a\000r\000i\000a\000b\000l\000e\000s\000\040\000a\000n\000d\000\040\000L\000o\000c\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\040\000F\000i\000l\000e)
+/OUT pdfmark end
+ 6863 5867 a 6863
+5867 a
+SDict begin [/Count -0/Dest (subsection.3.2) cvn/Title (\376\377\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\040\000F\000i\000l\000e\000\040\000F\000o\000r\000m\000a\000t)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.3.3) cvn/Title (\376\377\000T\000e\000X\000\040\000O\000u\000t\000p\000u\000t\000\040\000S\000e\000t\000u\000p)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867
+a
+SDict begin [/Count -0/Dest (subsection.3.4) cvn/Title (\376\377\000W\000h\000a\000t\000\040\000t\000o\000\040\000P\000r\000i\000n\000t)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.3.5) cvn/Title (\376\377\000L\000a\000n\000g\000u\000a\000g\000e\000\040\000a\000n\000d\000\040\000E\000n\000c\000o\000d\000i\000n\000g)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.3.6) cvn/Title (\376\377\000F\000o\000n\000t\000s)
+/OUT pdfmark end
+ 6863
+5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.3.7) cvn/Title (\376\377\000L\000e\000n\000g\000t\000h\000s)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.3.8) cvn/Title (\376\377\000S\000c\000a\000l\000i\000n\000g\000\040\000a\000n\000d\000\040\000R\000o\000t\000a\000t\000i\000o\000n)
+/OUT pdfmark end
+ 6863 5867
+a 6863 5867 a
+SDict begin [/Count -8/Dest (section.4) cvn/Title (\376\377\000R\000u\000n\000n\000i\000n\000g\000\040\000t\000h\000e\000\040\000P\000r\000o\000g\000r\000a\000m)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.4.1) cvn/Title (\376\377\000P\000r\000o\000g\000r\000a\000m\000\040\000I\000n\000v\000o\000c\000a\000t\000i\000o\000n\000\040\000A\000n\000d\000\040\000O\000p\000t\000i\000o\000n\000s)
+/OUT pdfmark end
+ 6863 5867 a 6863
+5867 a
+SDict begin [/Count -0/Dest (subsection.4.2) cvn/Title (\376\377\000D\000a\000t\000a\000\040\000F\000i\000l\000e)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.4.3) cvn/Title (\376\377\000T\000w\000i\000n\000s)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867
+a
+SDict begin [/Count -0/Dest (subsection.4.4) cvn/Title (\376\377\000A\000b\000o\000r\000t\000i\000o\000n\000s)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.4.5) cvn/Title (\376\377\000C\000h\000i\000l\000d\000l\000e\000s\000s\000n\000e\000s\000s\000\040\000a\000n\000d\000\040\000I\000n\000f\000e\000r\000t\000i\000l\000i\000t\000y)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.4.6) cvn/Title (\376\377\000O\000r\000d\000e\000r\000i\000n\000g\000\040\000S\000i\000b\000l\000i\000n\000g\000s\000\040\000a\000n\000d\000\040\000M\000a\000r\000r\000i\000a\000g\000e\000\040\000P\000a\000r\000t\000n\000e\000r\000s)
+/OUT pdfmark end
+ 6863
+5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.4.7) cvn/Title (\376\377\000C\000o\000n\000s\000a\000n\000g\000u\000i\000n\000i\000c\000\040\000U\000n\000i\000o\000n\000s)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (subsection.4.8) cvn/Title (\376\377\000L\000a\000n\000g\000u\000a\000g\000e\000-\000D\000e\000p\000e\000n\000d\000e\000n\000t\000\040\000K\000e\000y\000w\000o\000r\000d\000s)
+/OUT pdfmark end
+ 6863 5867
+a 6863 5867 a
+SDict begin [/Count -6/Dest (part.2) cvn/Title (\376\377\000I\000I\000\040\000A\000l\000g\000o\000r\000i\000t\000h\000m\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (section.5) cvn/Title (\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n)
+/OUT pdfmark end
+ 6863 5867 a 6863
+5867 a
+SDict begin [/Count -0/Dest (section.6) cvn/Title (\376\377\000M\000a\000i\000n\000\040\000A\000l\000g\000o\000r\000i\000t\000h\000m)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (section.7) cvn/Title (\376\377\000A\000l\000g\000o\000r\000i\000t\000h\000m\000\040\000f\000o\000r\000\040\000S\000o\000r\000t\000i\000n\000g\000\040\000S\000i\000b\000l\000i\000n\000g\000s\000\040\000a\000n\000d\000\040\000M\000a\000r\000r\000i\000a\000g\000e\000\040\000P\000a\000r\000t\000n\000e\000r\000s)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867
+a
+SDict begin [/Count -0/Dest (section.8) cvn/Title (\376\377\000M\000o\000d\000i\000f\000i\000c\000a\000t\000i\000o\000n\000s\000\040\000f\000o\000r\000\040\000C\000o\000n\000s\000a\000n\000g\000u\000n\000i\000c\000\040\000U\000n\000i\000o\000n\000s)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (section.9) cvn/Title (\376\377\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n)
+/OUT pdfmark end
+ 6863 5867 a 6863 5867 a
+SDict begin [/Count -0/Dest (section.10) cvn/Title (\376\377\000A\000c\000k\000n\000o\000w\000l\000e\000d\000g\000e\000m\000e\000n\000t\000s)
+/OUT pdfmark end
+ 6863
+5867 a 6863 5867 a
+SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark
+end
+ 6863 5867 a 6863 5867 a
+SDict begin [ {Catalog}<<>> /PUT pdfmark end
+ 6863 5867
+a 6863 5867 a
+SDict begin H.S end
+ 6863 5867 a 6863 5867 a
+SDict begin 12 H.A end
+ 6863 5867 a 6863
+5867 a
+SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end
+ 6863 5867 a 0 TeXcolorgray 0 TeXcolorgray 6953
+11623 a FC(A)578 b(Program)g(F)-150 b(or)578 b(Automatic)h(P)-50
+b(edigree)579 b(Construction)19726 14058 y(With)e FB(pst-)55
+b(pdgr)10482 16494 y FC(User)579 b(Man)-50 b(ual)578
+b(and)g(Algorithm)g(Description)9878 19704 y FA(Boris)434
+b(V)-108 b(eytsman,)434 b Fz(borisv@lk.net)3023 b FA(Leila)434
+b(Akhmadeev)-72 b(a)22635 22309 y(Marc)-36 b(h)433 b(2012)p
+0 TeXcolorgray 0 TeXcolorgray 23703 26294 a Fy(Abstract)p
+0 TeXcolorgray 0 TeXcolorgray 11166 28029 a Fx(The)256
+b(set)h(of)f(macros)g(in)h Fw(pst-)55 b(pdgr)256 b Fx(pac)-28
+b(k)-57 b(age)257 b(allo)-28 b(ws)256 b(to)g(t)-28 b(yp)28
+b(eset)258 b(complex)g(p)28 b(edi-)9631 29247 y(grees.)447
+b(Ho)-28 b(w)g(ev)g(er,)322 b(a)c(man)-28 b(ual)317 b(placemen)-28
+b(t)319 b(of)f(p)28 b(edigree)319 b(sym)-28 b(b)28 b(ols)318
+b(on)g(a)f(can)-28 b(v)-57 b(as)318 b(is)g(a)9631 30464
+y(time-consuming)289 b(task.)437 b(This)287 b(program)f(pro)28
+b(duces)288 b(T)30702 30679 y(E)31270 30464 y(X)f(\014les)h(from)f
+(spreadsheets)9631 31682 y(with)304 b(the)h(data)f(on)g(inheritance)i
+(for)e(a)g(large)h(class)f(of)g(p)28 b(edigrees.)445
+b(It)304 b(has)g(a)h(simple)9631 32900 y(in)-28 b(terface)341
+b(and)g(can)g(b)28 b(e)342 b(used)g(for)e(quite)j(complex)g(p)28
+b(edigrees.)p 0 TeXcolorgray 0 TeXcolorgray 28320 45650
+a
+tx@Dict begin { -128.03734 51.21501 } PutCoor PutBegin end
+ 28320 45650 a 27533 45650 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@GF1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 27533 45650 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto
+9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial
+28320 45650 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28320 45650 a 28498 46331 a Fx(I:1)28320
+45650 y
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320
+45650 a
+tx@Dict begin { 0.0 51.21501 } PutCoor PutBegin end
+ 28320 45650 a 27533 45650 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@GF2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 27533 45650 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 28320 45650
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28320 45650 a 28498 46331 a Fx(I:3)28320 45650 y
+tx@Dict begin PutEnd end
+ 28320
+45650 a 28320 45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin { 85.35823 51.21501 } PutCoor PutBegin end
+ 28320
+45650 a 27533 45650 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@GM2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 27533 45650 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 28320 45650 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28320 45650 a
+28498 46331 a Fx(I:4)28320 45650 y
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320
+45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin { 42.67911 51.21501 } PutCoor PutBegin end
+ 28320 45650 a 28320
+45650 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@GF2_m_GM2 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320
+45650 a
+tx@Dict begin { -85.35823 51.21501 } PutCoor PutBegin end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@GF1_m_GM1 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 28320 45650 a 28320
+45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin { -42.67911 51.21501 } PutCoor PutBegin end
+ 28320 45650 a 27533
+45650 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@GM1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 27533 45650 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray 0.0 7.11317 moveto
+0.0 -7.11317 L 0 setlinejoin 0 setlinecap stroke end
+
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto
+9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial 28320 45650 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28320 45650 a
+28498 46331 a Fx(I:2)28320 45650 y
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320
+45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 28320 45650 a 28320
+45650 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@F1_m_M1 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320
+45650 a
+tx@Dict begin { -106.69778 0.0 } PutCoor PutBegin end
+ 28320 45650 a 27533 45650 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 27533 45650 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray /DS 2.0 2. CLW mul
+add 2 div def /PSTricksDotFont 0. [1.0 0.0 0.0 1.0 0.0 0.0] FontDot
+/Dot { moveto gsave 1. 1. scale (b) show grestore } bind def 0.0
+0.0 Dot end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 28320 45650 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28320 45650 a
+28498 46331 a Fx(I)g(I:1)28320 45650 y
+tx@Dict begin PutEnd end
+ 28320 45650 a
+28320 45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin { 42.67911 0.0 } PutCoor PutBegin end
+ 28320 45650
+a 27533 45650 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@M1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 27533 45650 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 28320 45650 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28320 45650 a 28498 46331
+a Fx(I)g(I:3)28320 45650 y
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650
+a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin { -64.01866 0.0 } PutCoor PutBegin end
+ 28320 45650 a 27533 45650
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@F1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 27533 45650 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha
+ fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0
+setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+28320 45650 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28320 45650 a 28498 46331 a Fx(I)g(I:2)28320
+45650 y
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320
+45650 a
+tx@Dict begin { 0.0 -51.21501 } PutCoor PutBegin end
+ 28320 45650 a 27533 45650 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@S1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 27533 45650 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill
+ grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore end
+
+@endspecial 28320 45650
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28320 45650 a 28498 46331 a Fx(I)g(I)g(I:3)28320 45650
+y
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650
+a
+tx@Dict begin { 42.67911 -51.21501 } PutCoor PutBegin end
+ 28320 45650 a 27533 45650 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@S2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 27533 45650 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 28320 45650 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28320 45650 a
+28498 46331 a Fx(I)g(I)g(I:4)28320 45650 y
+tx@Dict begin PutEnd end
+ 28320 45650
+a 28320 45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin { -42.67911 -51.21501 } PutCoor PutBegin end
+ 28320 45650
+a 27533 45650 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@P 16 {InitRnode } /NodeScale {} def NewNode end end
+ 27533 45650 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha
+ fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0
+setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow
+1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul
+dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0
+0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub
+moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray
+/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4
+1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0
+h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto
+gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside
+{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load
+def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def
+} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul
+neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha
+y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add
+y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan
+def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 28320
+45650 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28320 45650 a 28498 46331 a Fx(I)g(I)g(I:2)28320
+45650 y
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320
+45650 a
+tx@Dict begin { -106.69778 -51.21501 } PutCoor PutBegin end
+ 28320 45650 a 27533 45650 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 27533 45650 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill
+ grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore end
+
+@endspecial 28320 45650
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28320 45650 a 28498 46331 a Fx(I)g(I)g(I:1)28320 45650
+y
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin PutEnd end
+ 28320 45650 a 28320 45650
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@M1 InitNC { tx@Dict begin
+/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90.
+def /AngleB 90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1
+sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB
+0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@GM2 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 28320 45650 a 28320 45650
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@GF2 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@A1 InitNC { tx@Dict begin
+/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90.
+def /AngleB 90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1
+sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB
+0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 28320 45650 a 28320 45650
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@F1 InitNC { tx@Dict begin
+/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90.
+def /AngleB 90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1
+sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB
+0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@GM1 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 28320 45650 a 28320 45650
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@GF1 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@P InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 28320 45650 a 28320 45650
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 28320 45650 a 28320 45650
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@M1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 28320 45650 a 28320 45650 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@F1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 28320 45650 a 28320 45650
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A1 /N@C1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 28320 45650 a 0 TeXcolorgray 25681 70071 a Fv(1)p 0
+TeXcolorgray eop end
+%%Page: 2 2
+TeXDict begin 2 1 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 TeXcolorgray
+6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752 1660 a 6752
+1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.2) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+6863 6974 a
+SDict begin H.S end
+ 6863 6974 a 6863 6974 a
+SDict begin 18 H.A end
+ 6863 6974 a 6863
+6974 a
+SDict begin [/View [/XYZ H.V]/Dest (section*.1) cvn /DEST pdfmark end
+ 6863 6974 a Fu(Con)-50 b(ten)g(ts)p 0 TeXcolorgray
+6863 10793 a
+SDict begin H.S end
+ 6863 10793 a Ft(I)1494 b(User)499 b(Man)-42
+b(ual)17345 10793 y
+SDict begin 14 H.L end
+ 17345 10793 a 17345 10793 a
+SDict begin [/Subtype /Link/Dest (part.1) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 17345
+10793 a 0 TeXcolorgray 26961 w Ft(4)p 0 TeXcolorgray
+6863 13228 a
+SDict begin H.S end
+ 6863 13228 a Fs(1)1025 b(In)-35 b(tro)35
+b(duction)15541 13228 y
+SDict begin 12 H.L end
+ 15541 13228 a 15541 13228 a
+SDict begin [/Subtype /Link/Dest (section.1) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 15541
+13228 a 0 TeXcolorgray 28876 w Fs(4)p 0 TeXcolorgray
+6863 15663 a
+SDict begin H.S end
+ 6863 15663 a Fs(2)1025 b(Installation)14849
+15663 y
+SDict begin 12 H.L end
+ 14849 15663 a 14849 15663 a
+SDict begin [/Subtype /Link/Dest (section.2) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 14849 15663 a 0 TeXcolorgray
+29568 w Fs(4)p 0 TeXcolorgray 8524 16992 a
+SDict begin H.S end
+ 8524 16992
+a Fv(2.1)1133 b(System)369 b(Requiremen)-31 b(ts)21523
+16992 y
+SDict begin 12 H.L end
+ 21523 16992 a 21523 16992 a
+SDict begin [/Subtype /Link/Dest (subsection.2.1) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 21523 16992 a 0 TeXcolorgray
+1114 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f
+(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray
+1754 w(4)p 0 TeXcolorgray 0 TeXcolorgray 8524 18320 a
+SDict begin H.S end
+
+8524 18320 a Fv(2.2)1133 b(Unix/Lin)-31 b(ux)371 b(Installation)22619
+18320 y
+SDict begin 12 H.L end
+ 22619 18320 a 22619 18320 a
+SDict begin [/Subtype /Link/Dest (subsection.2.2) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 22619 18320 a 0 TeXcolorgray
+879 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1754
+w(4)p 0 TeXcolorgray 0 TeXcolorgray 8524 19649 a
+SDict begin H.S end
+ 8524
+19649 a Fv(2.3)1133 b(Installation)372 b(in)d(Other)g(Systems)25358
+19649 y
+SDict begin 12 H.L end
+ 25358 19649 a 25358 19649 a
+SDict begin [/Subtype /Link/Dest (subsection.2.3) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 25358 19649 a 0 TeXcolorgray
+723 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1754 w(5)p 0 TeXcolorgray
+0 TeXcolorgray 6863 22084 a
+SDict begin H.S end
+ 6863 22084 a Fs(3)1025 b(Con\014guration)
+16171 22084 y
+SDict begin 12 H.L end
+ 16171 22084 a 16171 22084 a
+SDict begin [/Subtype /Link/Dest (section.3) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 16171 22084
+a 0 TeXcolorgray 28246 w Fs(5)p 0 TeXcolorgray 8524 23412
+a
+SDict begin H.S end
+ 8524 23412 a Fv(3.1)1133 b(Con\014guration)371 b(V)-92
+b(ariables)371 b(and)e(Lo)31 b(cation)371 b(of)f(Con\014guration)h
+(File)39742 23412 y
+SDict begin 12 H.L end
+ 39742 23412 a 39742 23412 a
+SDict begin [/Subtype /Link/Dest (subsection.3.1) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 39742
+23412 a 0 TeXcolorgray 975 w Fv(.)554 b(.)g(.)p 0 TeXcolorgray
+1754 w(5)p 0 TeXcolorgray 0 TeXcolorgray 8524 24741 a
+SDict begin H.S end
+
+8524 24741 a Fv(3.2)1133 b(Con\014guration)371 b(File)f(F)-92
+b(ormat)23805 24741 y
+SDict begin 12 H.L end
+ 23805 24741 a 23805 24741 a
+SDict begin [/Subtype /Link/Dest (subsection.3.2) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 23805
+24741 a 0 TeXcolorgray 554 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p
+0 TeXcolorgray 1754 w(6)p 0 TeXcolorgray 0 TeXcolorgray
+8524 26069 a
+SDict begin H.S end
+ 8524 26069 a Fv(3.3)1133 b(T)11684 26307
+y(E)12300 26069 y(X)369 b(Output)h(Setup)20202 26069
+y
+SDict begin 12 H.L end
+ 20202 26069 a 20202 26069 a
+SDict begin [/Subtype /Link/Dest (subsection.3.3) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 20202 26069 a 0 TeXcolorgray
+713 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray
+1754 w(6)p 0 TeXcolorgray 0 TeXcolorgray 8524 27397 a
+SDict begin H.S end
+
+8524 27397 a Fv(3.4)1133 b(What)369 b(to)h(Prin)-31 b(t)18036
+27397 y
+SDict begin 12 H.L end
+ 18036 27397 a 18036 27397 a
+SDict begin [/Subtype /Link/Dest (subsection.3.4) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 18036 27397 a 0 TeXcolorgray
+296 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p
+0 TeXcolorgray 1754 w(7)p 0 TeXcolorgray 0 TeXcolorgray
+8524 28726 a
+SDict begin H.S end
+ 8524 28726 a Fv(3.5)1133 b(Language)370
+b(and)g(Enco)31 b(ding)22753 28726 y
+SDict begin 12 H.L end
+ 22753 28726 a 22753
+28726 a
+SDict begin [/Subtype /Link/Dest (subsection.3.5) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 22753 28726 a 0 TeXcolorgray 745 w Fv(.)554 b(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+p 0 TeXcolorgray 1754 w(8)p 0 TeXcolorgray 0 TeXcolorgray
+8524 30054 a
+SDict begin H.S end
+ 8524 30054 a Fv(3.6)1133 b(F)-92 b(on)-31
+b(ts)13705 30054 y
+SDict begin 12 H.L end
+ 13705 30054 a 13705 30054 a
+SDict begin [/Subtype /Link/Dest (subsection.3.6) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 13705
+30054 a 0 TeXcolorgray 323 w Fv(.)553 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1754 w(8)p
+0 TeXcolorgray 0 TeXcolorgray 8524 31382 a
+SDict begin H.S end
+ 8524 31382
+a Fv(3.7)1133 b(Lengths)14904 31382 y
+SDict begin 12 H.L end
+ 14904 31382 a 14904
+31382 a
+SDict begin [/Subtype /Link/Dest (subsection.3.7) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 14904 31382 a 0 TeXcolorgray 845 w Fv(.)554 b(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)
+h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray
+1754 w(9)p 0 TeXcolorgray 0 TeXcolorgray 8524 32711 a
+SDict begin H.S end
+
+8524 32711 a Fv(3.8)1133 b(Scaling)370 b(and)g(Rotation)21291
+32711 y
+SDict begin 12 H.L end
+ 21291 32711 a 21291 32711 a
+SDict begin [/Subtype /Link/Dest (subsection.3.8) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 21291 32711 a 0 TeXcolorgray
+485 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray
+1754 w(9)p 0 TeXcolorgray 0 TeXcolorgray 6863 35146 a
+SDict begin H.S end
+
+6863 35146 a Fs(4)1025 b(Running)425 b(the)g(Program)20802
+35146 y
+SDict begin 12 H.L end
+ 20802 35146 a 20802 35146 a
+SDict begin [/Subtype /Link/Dest (section.4) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 20802 35146 a 0 TeXcolorgray
+22978 w Fs(10)p 0 TeXcolorgray 8524 36474 a
+SDict begin H.S end
+ 8524 36474
+a Fv(4.1)1133 b(Program)370 b(In)-31 b(v)g(o)31 b(cation)372
+b(And)d(Options)27332 36474 y
+SDict begin 12 H.L end
+ 27332 36474 a 27332 36474
+a
+SDict begin [/Subtype /Link/Dest (subsection.4.1) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 27332 36474 a 0 TeXcolorgray 471 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g
+(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray
+1200 w(10)p 0 TeXcolorgray 0 TeXcolorgray 8524 37803
+a
+SDict begin H.S end
+ 8524 37803 a Fv(4.2)1133 b(Data)370 b(File)15651 37803
+y
+SDict begin 12 H.L end
+ 15651 37803 a 15651 37803 a
+SDict begin [/Subtype /Link/Dest (subsection.4.2) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 15651 37803 a 0 TeXcolorgray
+959 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p
+0 TeXcolorgray 1200 w(11)p 0 TeXcolorgray 0 TeXcolorgray
+8524 39131 a
+SDict begin H.S end
+ 8524 39131 a Fv(4.3)1133 b(Twins)14027 39131
+y
+SDict begin 12 H.L end
+ 14027 39131 a 14027 39131 a
+SDict begin [/Subtype /Link/Dest (subsection.4.3) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 14027 39131 a 0 TeXcolorgray
+861 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)p 0 TeXcolorgray 1200 w(13)p 0 TeXcolorgray 0 TeXcolorgray
+8524 40459 a
+SDict begin H.S end
+ 8524 40459 a Fv(4.4)1133 b(Ab)31 b(ortions)15875
+40459 y
+SDict begin 12 H.L end
+ 15875 40459 a 15875 40459 a
+SDict begin [/Subtype /Link/Dest (subsection.4.4) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 15875 40459 a 0 TeXcolorgray
+735 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p
+0 TeXcolorgray 1200 w(13)p 0 TeXcolorgray 0 TeXcolorgray
+8524 41788 a
+SDict begin H.S end
+ 8524 41788 a Fv(4.5)1133 b(Childlessness)369
+b(and)g(Infertilit)-31 b(y)24501 41788 y
+SDict begin 12 H.L end
+ 24501 41788
+a 24501 41788 a
+SDict begin [/Subtype /Link/Dest (subsection.4.5) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 24501 41788 a 0 TeXcolorgray 719 w Fv(.)554
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)p 0 TeXcolorgray 1200 w(13)p 0 TeXcolorgray
+0 TeXcolorgray 8524 43116 a
+SDict begin H.S end
+ 8524 43116 a Fv(4.6)1133
+b(Ordering)369 b(Siblings)h(and)g(Marriage)f(P)-31 b(artners)30856
+43116 y
+SDict begin 12 H.L end
+ 30856 43116 a 30856 43116 a
+SDict begin [/Subtype /Link/Dest (subsection.4.6) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 30856 43116 a 0 TeXcolorgray
+391 w Fv(.)554 b(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p
+0 TeXcolorgray 1200 w(19)p 0 TeXcolorgray 0 TeXcolorgray
+8524 44444 a
+SDict begin H.S end
+ 8524 44444 a Fv(4.7)1133 b(Consanguinic)371
+b(Unions)21259 44444 y
+SDict begin 12 H.L end
+ 21259 44444 a 21259 44444 a
+SDict begin [/Subtype /Link/Dest (subsection.4.7) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 21259
+44444 a 0 TeXcolorgray 517 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p
+0 TeXcolorgray 1200 w(26)p 0 TeXcolorgray 0 TeXcolorgray
+8524 45773 a
+SDict begin H.S end
+ 8524 45773 a Fv(4.8)1133 b(Language-Dep)31
+b(enden)-31 b(t)370 b(Keyw)-31 b(ords)26391 45773 y
+SDict begin 12 H.L end
+ 26391
+45773 a 26391 45773 a
+SDict begin [/Subtype /Link/Dest (subsection.4.8) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 26391 45773 a 0 TeXcolorgray 551
+w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(26)p 0 TeXcolorgray
+0 TeXcolorgray 6863 49592 a
+SDict begin H.S end
+ 6863 49592 a Ft(I)42 b(I)1493
+b(Algorithm)500 b(Description)24238 49592 y
+SDict begin 14 H.L end
+ 24238 49592
+a 24238 49592 a
+SDict begin [/Subtype /Link/Dest (part.2) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 24238 49592 a 0 TeXcolorgray 19321 w
+Ft(29)p 0 TeXcolorgray 6863 52027 a
+SDict begin H.S end
+ 6863 52027 a Fs(5)1025
+b(In)-35 b(tro)35 b(duction)15541 52027 y
+SDict begin 12 H.L end
+ 15541 52027
+a 15541 52027 a
+SDict begin [/Subtype /Link/Dest (section.5) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 15541 52027 a 0 TeXcolorgray 28239 w
+Fs(29)p 0 TeXcolorgray 6863 54462 a
+SDict begin H.S end
+ 6863 54462 a Fs(6)1025
+b(Main)424 b(Algorithm)17565 54462 y
+SDict begin 12 H.L end
+ 17565 54462 a 17565
+54462 a
+SDict begin [/Subtype /Link/Dest (section.6) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 17565 54462 a 0 TeXcolorgray 26215 w Fs(29)p
+0 TeXcolorgray 6863 56898 a
+SDict begin H.S end
+ 6863 56898 a Fs(7)1025 b(Algorithm)425
+b(for)g(Sorting)h(Siblings)e(and)h(Marriage)g(P)-35 b(artners)38621
+56898 y
+SDict begin 12 H.L end
+ 38621 56898 a 38621 56898 a
+SDict begin [/Subtype /Link/Dest (section.7) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 38621 56898 a 0 TeXcolorgray
+5159 w Fs(30)p 0 TeXcolorgray 6863 59333 a
+SDict begin H.S end
+ 6863 59333
+a Fs(8)1025 b(Mo)35 b(di\014cations)425 b(for)g(Consangunic)h(Unions)
+29820 59333 y
+SDict begin 12 H.L end
+ 29820 59333 a 29820 59333 a
+SDict begin [/Subtype /Link/Dest (section.8) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 29820 59333
+a 0 TeXcolorgray 13960 w Fs(31)p 0 TeXcolorgray 6863
+61768 a
+SDict begin H.S end
+ 6863 61768 a Fs(9)1025 b(Conclusion)14612 61768
+y
+SDict begin 12 H.L end
+ 14612 61768 a 14612 61768 a
+SDict begin [/Subtype /Link/Dest (section.9) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 14612 61768 a 0 TeXcolorgray
+29168 w Fs(31)p 0 TeXcolorgray 6863 64204 a
+SDict begin H.S end
+ 6863 64204
+a Fs(10)389 b(Ac)-35 b(kno)g(wledgemen)g(ts)19092 64204
+y
+SDict begin 12 H.L end
+ 19092 64204 a 19092 64204 a
+SDict begin [/Subtype /Link/Dest (section.10) cvn/H /I/Border [0 0
+0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 19092 64204 a 0 TeXcolorgray
+24688 w Fs(32)p 0 TeXcolorgray 25681 70071 a Fv(2)p 0
+TeXcolorgray eop end
+%%Page: 3 3
+TeXDict begin 3 2 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 TeXcolorgray
+6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752 1660 a 6752
+1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.3) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+6863 6974 a
+SDict begin H.S end
+ 6863 6974 a 6863 6974 a
+SDict begin 18 H.A end
+ 6863 6974 a 6863
+6974 a
+SDict begin [/View [/XYZ H.V]/Dest (section*.2) cvn /DEST pdfmark end
+ 6863 6974 a Fu(List)599 b(of)f(Figures)p 0 TeXcolorgray
+8524 9398 a
+SDict begin H.S end
+ 8524 9398 a Fv(1)1993 b(Example)292 b(of)g(the)f(T)-31
+b(yp)31 b(eset)292 b(P)-31 b(edigree)292 b(in)f(English)i(\(Data)f
+(File)f(from)h(List-)11070 10727 y(ing)p 0 TeXcolorgray
+12915 10727 a
+SDict begin H.S end
+ 12915 10727 a 0 TeXcolorgray Fv(7)p 0 TeXcolorgray
+13468 10013 a
+SDict begin H.R end
+ 13468 10013 a 13468 10727 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.7) cvn H.B /ANN pdfmark end
+ 13468 10727
+a 0 TeXcolorgray Fv(\))13898 10727 y
+SDict begin 12 H.L end
+ 13898 10727 a 13898
+10727 a
+SDict begin [/Subtype /Link/Dest (figure.1) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 13898 10727 a 0 TeXcolorgray 990 w Fv(.)554 b(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray
+1200 w(15)p 0 TeXcolorgray 0 TeXcolorgray 8524 12055
+a
+SDict begin H.S end
+ 8524 12055 a Fv(2)1993 b(Example)552 b(of)f(the)g(T)-31
+b(yp)31 b(eset)551 b(P)-31 b(edigree)552 b(in)e(Russian)h(\(Data)h
+(File)f(from)11070 13383 y(Listing)p 0 TeXcolorgray 14781
+13383 a
+SDict begin H.S end
+ 14781 13383 a 0 TeXcolorgray Fv(7)p 0 TeXcolorgray
+15334 12670 a
+SDict begin H.R end
+ 15334 12670 a 15334 13383 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.7) cvn H.B /ANN pdfmark end
+ 15334 13383
+a 0 TeXcolorgray Fv(\))15764 13383 y
+SDict begin 12 H.L end
+ 15764 13383 a 15764
+13383 a
+SDict begin [/Subtype /Link/Dest (figure.2) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 15764 13383 a 0 TeXcolorgray 846 w Fv(.)j(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(16)p
+0 TeXcolorgray 0 TeXcolorgray 8524 14712 a
+SDict begin H.S end
+ 8524 14712
+a Fv(3)1993 b(Example)371 b(of)e(a)h(P)-31 b(edigree)370
+b(with)g(Twins)g(\(Data)h(File)e(from)h(Listing)p 0 TeXcolorgray
+39884 14712 a
+SDict begin H.S end
+ 39884 14712 a 0 TeXcolorgray Fv(8)p 0 TeXcolorgray
+40437 13998 a
+SDict begin H.R end
+ 40437 13998 a 40437 14712 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.8) cvn H.B /ANN pdfmark end
+ 40437 14712
+a 0 TeXcolorgray Fv(\))40867 14712 y
+SDict begin 12 H.L end
+ 40867 14712 a 40867
+14712 a
+SDict begin [/Subtype /Link/Dest (figure.3) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 40867 14712 a 0 TeXcolorgray 711 w Fv(.)554 b(.)p
+0 TeXcolorgray 1200 w(17)p 0 TeXcolorgray 0 TeXcolorgray
+8524 16040 a
+SDict begin H.S end
+ 8524 16040 a Fv(4)1993 b(Example)371 b(of)e(a)h(P)-31
+b(edigree)370 b(with)g(Ab)31 b(ortions)370 b(\(Data)h(File)e(from)h
+(Listing)p 0 TeXcolorgray 41732 16040 a
+SDict begin H.S end
+ 41732 16040 a
+0 TeXcolorgray Fv(9)p 0 TeXcolorgray 42285 15327 a
+SDict begin H.R end
+ 42285
+15327 a 42285 16040 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.9) cvn H.B /ANN pdfmark end
+ 42285 16040 a 0 TeXcolorgray Fv(\))42715
+16040 y
+SDict begin 12 H.L end
+ 42715 16040 a 42715 16040 a
+SDict begin [/Subtype /Link/Dest (figure.4) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 42715 16040 a 0 TeXcolorgray
+0 TeXcolorgray 1231 w Fv(18)p 0 TeXcolorgray 0 TeXcolorgray
+8524 17369 a
+SDict begin H.S end
+ 8524 17369 a Fv(5)1993 b(Example)424 b(of)g(a)f(P)-31
+b(edigree)423 b(with)h(Childlessness)f(\(Data)i(File)e(from)g(List-)
+11070 18697 y(ing)p 0 TeXcolorgray 12915 18697 a
+SDict begin H.S end
+ 12915
+18697 a 0 TeXcolorgray Fv(10)p 0 TeXcolorgray 14021 17983
+a
+SDict begin H.R end
+ 14021 17983 a 14021 18697 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.10) cvn H.B /ANN pdfmark end
+ 14021 18697 a 0 TeXcolorgray
+Fv(\))14451 18697 y
+SDict begin 12 H.L end
+ 14451 18697 a 14451 18697 a
+SDict begin [/Subtype /Link/Dest (figure.5) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 14451
+18697 a 0 TeXcolorgray 437 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(20)p
+0 TeXcolorgray 0 TeXcolorgray 8524 20025 a
+SDict begin H.S end
+ 8524 20025
+a Fv(6)1993 b(P)-31 b(edigree)370 b(from)f(Listing)p
+0 TeXcolorgray 21875 20025 a
+SDict begin H.S end
+ 21875 20025 a 0 TeXcolorgray
+Fv(12)p 0 TeXcolorgray 22981 19312 a
+SDict begin H.R end
+ 22981 19312 a 22981
+20025 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.12) cvn H.B /ANN pdfmark end
+ 22981 20025 a 0 TeXcolorgray 22981 20025 a
+SDict begin 12 H.L end
+ 22981
+20025 a 22981 20025 a
+SDict begin [/Subtype /Link/Dest (figure.6) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 22981 20025 a 0 TeXcolorgray 517
+w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(22)p
+0 TeXcolorgray 0 TeXcolorgray 8524 21354 a
+SDict begin H.S end
+ 8524 21354
+a Fv(7)1993 b(P)-31 b(edigree)370 b(from)f(Listing)p
+0 TeXcolorgray 21875 21354 a
+SDict begin H.S end
+ 21875 21354 a 0 TeXcolorgray
+Fv(12)p 0 TeXcolorgray 22981 20640 a
+SDict begin H.R end
+ 22981 20640 a 22981
+21354 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.12) cvn H.B /ANN pdfmark end
+ 22981 21354 a 0 TeXcolorgray 22981 21354 a
+SDict begin 12 H.L end
+ 22981
+21354 a 22981 21354 a
+SDict begin [/Subtype /Link/Dest (figure.7) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 22981 21354 a 0 TeXcolorgray 517
+w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(23)p
+0 TeXcolorgray 0 TeXcolorgray 8524 22682 a
+SDict begin H.S end
+ 8524 22682
+a Fv(8)1993 b(P)-31 b(edigree)370 b(from)f(Listing)p
+0 TeXcolorgray 21875 22682 a
+SDict begin H.S end
+ 21875 22682 a 0 TeXcolorgray
+Fv(13)p 0 TeXcolorgray 22981 21969 a
+SDict begin H.R end
+ 22981 21969 a 22981
+22682 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.13) cvn H.B /ANN pdfmark end
+ 22981 22682 a 0 TeXcolorgray 22981 22682 a
+SDict begin 12 H.L end
+ 22981
+22682 a 22981 22682 a
+SDict begin [/Subtype /Link/Dest (figure.8) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 22981 22682 a 0 TeXcolorgray 517
+w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(24)p
+0 TeXcolorgray 0 TeXcolorgray 8524 24010 a
+SDict begin H.S end
+ 8524 24010
+a Fv(9)1993 b(P)-31 b(edigree)370 b(from)f(Listing)p
+0 TeXcolorgray 21875 24010 a
+SDict begin H.S end
+ 21875 24010 a 0 TeXcolorgray
+Fv(14)p 0 TeXcolorgray 22981 23297 a
+SDict begin H.R end
+ 22981 23297 a 22981
+24010 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.14) cvn H.B /ANN pdfmark end
+ 22981 24010 a 0 TeXcolorgray 22981 24010 a
+SDict begin 12 H.L end
+ 22981
+24010 a 22981 24010 a
+SDict begin [/Subtype /Link/Dest (figure.9) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 22981 24010 a 0 TeXcolorgray 517
+w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(25)p
+0 TeXcolorgray 0 TeXcolorgray 8524 25339 a
+SDict begin H.S end
+ 8524 25339
+a Fv(10)1440 b(P)-31 b(edigree)370 b(from)f(Listing)p
+0 TeXcolorgray 21875 25339 a
+SDict begin H.S end
+ 21875 25339 a 0 TeXcolorgray
+Fv(15)p 0 TeXcolorgray 22981 24625 a
+SDict begin H.R end
+ 22981 24625 a 22981
+25339 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.15) cvn H.B /ANN pdfmark end
+ 22981 25339 a 0 TeXcolorgray 22981 25339 a
+SDict begin 12 H.L end
+ 22981
+25339 a 22981 25339 a
+SDict begin [/Subtype /Link/Dest (figure.10) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 22981 25339 a 0 TeXcolorgray 517
+w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(27)p
+0 TeXcolorgray 0 TeXcolorgray 8524 26667 a
+SDict begin H.S end
+ 8524 26667
+a Fv(11)1440 b(Subp)31 b(edigrees)368 b(and)i(Do)-31
+b(wn)g(w)g(ard)371 b(T)-92 b(ree)27521 26667 y
+SDict begin 12 H.L end
+ 27521
+26667 a 27521 26667 a
+SDict begin [/Subtype /Link/Dest (figure.11) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 27521 26667 a 0 TeXcolorgray 282
+w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)p 0 TeXcolorgray 1200 w(30)p 0 TeXcolorgray 6863
+30328 a
+SDict begin H.S end
+ 6863 30328 a 6863 30328 a
+SDict begin 18 H.A end
+ 6863 30328 a 6863 30328
+a
+SDict begin [/View [/XYZ H.V]/Dest (section*.3) cvn /DEST pdfmark end
+ 6863 30328 a Fu(List)599 b(of)f(T)-149 b(ables)p 0
+TeXcolorgray 8524 32752 a
+SDict begin H.S end
+ 8524 32752 a Fv(1)1993 b(Keyw)-31
+b(ords)369 b(in)h(Di\013eren)-31 b(t)369 b(Languages)27138
+32752 y
+SDict begin 12 H.L end
+ 27138 32752 a 27138 32752 a
+SDict begin [/Subtype /Link/Dest (table.1) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 27138 32752 a 0 TeXcolorgray
+665 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(28)p 0 TeXcolorgray
+6863 36413 a
+SDict begin H.S end
+ 6863 36413 a 6863 36413 a
+SDict begin 18 H.A end
+ 6863 36413 a 6863
+36413 a
+SDict begin [/View [/XYZ H.V]/Dest (section*.4) cvn /DEST pdfmark end
+ 6863 36413 a Fu(List)599 b(of)f(Listings)p 0
+TeXcolorgray 8524 38837 a
+SDict begin H.S end
+ 8524 38837 a Fv(1)1993 b(Con\014guration)371
+b(File:)493 b(Setting)387 b(T)25155 39076 y(E)25771 38837
+y(X)369 b(Output)30536 38837 y
+SDict begin 12 H.L end
+ 30536 38837 a 30536 38837
+a
+SDict begin [/Subtype /Link/Dest (lstlisting.1) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 30536 38837 a 0 TeXcolorgray 711 w Fv(.)554 b(.)g(.)g(.)f(.)h(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1754 w(7)p
+0 TeXcolorgray 0 TeXcolorgray 8524 40166 a
+SDict begin H.S end
+ 8524 40166
+a Fv(2)1993 b(Con\014guration)371 b(File:)493 b(Cho)31
+b(osing)371 b(Fields)e(to)h(Prin)-31 b(t)32657 40166
+y
+SDict begin 12 H.L end
+ 32657 40166 a 32657 40166 a
+SDict begin [/Subtype /Link/Dest (lstlisting.2) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 32657 40166 a 0 TeXcolorgray
+312 w Fv(.)554 b(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p
+0 TeXcolorgray 1754 w(8)p 0 TeXcolorgray 0 TeXcolorgray
+8524 41494 a
+SDict begin H.S end
+ 8524 41494 a Fv(3)1993 b(Con\014guration)371
+b(File:)493 b(Cho)31 b(osing)371 b(Language)g(and)e(Enco)31
+b(ding)37229 41494 y
+SDict begin 12 H.L end
+ 37229 41494 a 37229 41494 a
+SDict begin [/Subtype /Link/Dest (lstlisting.3) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 37229
+41494 a 0 TeXcolorgray 905 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)p
+0 TeXcolorgray 1754 w(9)p 0 TeXcolorgray 0 TeXcolorgray
+8524 42822 a
+SDict begin H.S end
+ 8524 42822 a Fv(4)1993 b(Con\014guration)371
+b(File:)493 b(Cho)31 b(osing)371 b(F)-92 b(on)-31 b(ts)28181
+42822 y
+SDict begin 12 H.L end
+ 28181 42822 a 28181 42822 a
+SDict begin [/Subtype /Link/Dest (lstlisting.4) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 28181 42822 a 0 TeXcolorgray
+483 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)p 0 TeXcolorgray 1754 w(9)p 0 TeXcolorgray 0
+TeXcolorgray 8524 44151 a
+SDict begin H.S end
+ 8524 44151 a Fv(5)1993 b(Con\014guration)371
+b(File:)493 b(Cho)31 b(osing)371 b(Lengths)29380 44151
+y
+SDict begin 12 H.L end
+ 29380 44151 a 29380 44151 a
+SDict begin [/Subtype /Link/Dest (lstlisting.5) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 29380 44151 a 0 TeXcolorgray
+1006 w Fv(.)554 b(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)p 0 TeXcolorgray 1200 w(10)p 0 TeXcolorgray 0 TeXcolorgray
+8524 45479 a
+SDict begin H.S end
+ 8524 45479 a Fv(6)1993 b(Con\014guration)371
+b(File:)493 b(Cho)31 b(osing)371 b(Scaling)g(and)f(Rotation)35768
+45479 y
+SDict begin 12 H.L end
+ 35768 45479 a 35768 45479 a
+SDict begin [/Subtype /Link/Dest (lstlisting.6) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 35768 45479 a 0 TeXcolorgray
+644 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray
+1200 w(11)p 0 TeXcolorgray 0 TeXcolorgray 8524 46807
+a
+SDict begin H.S end
+ 8524 46807 a Fv(7)1993 b(Examples)370 b(of)g(Data)g(Files)f
+(\(English)i(and)e(Russian\))33500 46807 y
+SDict begin 12 H.L end
+ 33500 46807
+a 33500 46807 a
+SDict begin [/Subtype /Link/Dest (lstlisting.7) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 33500 46807 a 0 TeXcolorgray 330 w Fv(.)553
+b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray
+1200 w(14)p 0 TeXcolorgray 0 TeXcolorgray 8524 48136
+a
+SDict begin H.S end
+ 8524 48136 a Fv(8)1993 b(Example)371 b(of)e(Data)h(File)g(with)g
+(Twins)27356 48136 y
+SDict begin 12 H.L end
+ 27356 48136 a 27356 48136 a
+SDict begin [/Subtype /Link/Dest (lstlisting.8) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 27356
+48136 a 0 TeXcolorgray 447 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200
+w(17)p 0 TeXcolorgray 0 TeXcolorgray 8524 49464 a
+SDict begin H.S end
+ 8524
+49464 a Fv(9)1993 b(Example)371 b(of)e(Data)h(File)g(with)g(Ab)31
+b(ortions)29204 49464 y
+SDict begin 12 H.L end
+ 29204 49464 a 29204 49464 a
+SDict begin [/Subtype /Link/Dest (lstlisting.9) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 29204
+49464 a 0 TeXcolorgray 321 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(18)p
+0 TeXcolorgray 0 TeXcolorgray 8524 50793 a
+SDict begin H.S end
+ 8524 50793
+a Fv(10)1440 b(Example)371 b(of)e(Data)h(File)g(with)g(Childlessness)
+30696 50793 y
+SDict begin 12 H.L end
+ 30696 50793 a 30696 50793 a
+SDict begin [/Subtype /Link/Dest (lstlisting.10) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 30696 50793
+a 0 TeXcolorgray 551 w Fv(.)554 b(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(19)p 0 TeXcolorgray
+0 TeXcolorgray 8524 52121 a
+SDict begin H.S end
+ 8524 52121 a Fv(11)1440 b(A)369
+b(Data)h(File)f(with)i(a)e(Sorting)i(Problem)28617 52121
+y
+SDict begin 12 H.L end
+ 28617 52121 a 28617 52121 a
+SDict begin [/Subtype /Link/Dest (lstlisting.11) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 28617 52121 a 0 TeXcolorgray
+908 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)p 0 TeXcolorgray 1200 w(21)p 0 TeXcolorgray 0 TeXcolorgray
+8524 53449 a
+SDict begin H.S end
+ 8524 53449 a Fv(12)1440 b(First)368 b(Solution)k(to)e(the)
+f(Problem)h(in)g(Listing)p 0 TeXcolorgray 30844 53449
+a
+SDict begin H.S end
+ 30844 53449 a 0 TeXcolorgray Fv(11)p 0 TeXcolorgray
+31950 52736 a
+SDict begin H.R end
+ 31950 52736 a 31950 53449 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.11) cvn H.B /ANN pdfmark end
+ 31950 53449
+a 0 TeXcolorgray 31950 53449 a
+SDict begin 12 H.L end
+ 31950 53449 a 31950 53449
+a
+SDict begin [/Subtype /Link/Dest (lstlisting.12) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 31950 53449 a 0 TeXcolorgray 1019 w Fv(.)554 b(.)f(.)h(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(21)p 0 TeXcolorgray
+0 TeXcolorgray 8524 54778 a
+SDict begin H.S end
+ 8524 54778 a Fv(13)1440 b(Second)369
+b(Solution)i(to)f(the)g(Problem)g(in)f(Listing)p 0 TeXcolorgray
+31896 54778 a
+SDict begin H.S end
+ 31896 54778 a 0 TeXcolorgray Fv(11)p 0
+TeXcolorgray 33002 54064 a
+SDict begin H.R end
+ 33002 54064 a 33002 54778
+a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.11) cvn H.B /ANN pdfmark end
+ 33002 54778 a 0 TeXcolorgray 33002 54778 a
+SDict begin 12 H.L end
+ 33002 54778
+a 33002 54778 a
+SDict begin [/Subtype /Link/Dest (lstlisting.13) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 33002 54778 a 0 TeXcolorgray 828 w Fv(.)553
+b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray
+1200 w(23)p 0 TeXcolorgray 0 TeXcolorgray 8524 56106
+a
+SDict begin H.S end
+ 8524 56106 a Fv(14)1440 b(A)369 b(P)-31 b(edigree)370
+b(with)g(Una)-31 b(v)g(oidable)373 b(Self-In)-31 b(tersections)33826
+56106 y
+SDict begin 12 H.L end
+ 33826 56106 a 33826 56106 a
+SDict begin [/Subtype /Link/Dest (lstlisting.14) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 33826 56106 a 0 TeXcolorgray
+864 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p
+0 TeXcolorgray 1200 w(24)p 0 TeXcolorgray 0 TeXcolorgray
+8524 57434 a
+SDict begin H.S end
+ 8524 57434 a Fv(15)1440 b(A)369 b(P)-31
+b(edigree)370 b(with)g(Consanguinic)i(Unions)29457 57434
+y
+SDict begin 12 H.L end
+ 29457 57434 a 29457 57434 a
+SDict begin [/Subtype /Link/Dest (lstlisting.15) cvn/H /I/Border [0
+0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 29457 57434 a 0 TeXcolorgray
+929 w Fv(.)554 b(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+p 0 TeXcolorgray 1200 w(26)p 0 TeXcolorgray 0 TeXcolorgray
+25681 70071 a(3)p 0 TeXcolorgray eop end
+%%Page: 4 4
+TeXDict begin 4 3 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 TeXcolorgray
+6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752 1660 a 6752
+1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.4) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+6863 5867 a
+SDict begin H.S end
+ 6863 5867 a 6863 5867 a
+SDict begin 12 H.A end
+ 6863 5867 a 6863
+5867 a
+SDict begin [/View [/XYZ H.V]/Dest (part.1) cvn /DEST pdfmark end
+ 6863 5867 a 1107 x Fu(P)-50 b(art)599 b(I)6863
+9741 y Fr(User)861 b(Man)-72 b(ual)6863 11171 y
+SDict begin H.S end
+ 6863
+11171 a 6863 11171 a
+SDict begin 12 H.A end
+ 6863 11171 a 6863 11171 a
+SDict begin [/View [/XYZ H.V]/Dest (section.1) cvn /DEST pdfmark end
+ 6863 11171
+a 1993 x Fu(1)1793 b(In)-50 b(tro)50 b(duction)6863 15588
+y Fv(Medical)343 b(p)31 b(edigree)342 b(is)g(a)h(v)-31
+b(ery)342 b(imp)31 b(ortan)-31 b(t)344 b(to)31 b(ol)344
+b(for)e(clinicians,)350 b(genetic)343 b(researc)-31 b(hers)341
+b(and)6863 16916 y(educators.)485 b(As)346 b(stated)h(in)f([)p
+0 TeXcolorgray 18768 16916 a
+SDict begin H.S end
+ 18768 16916 a 0 TeXcolorgray
+Fv(1)p 0 TeXcolorgray 19321 16203 a
+SDict begin H.R end
+ 19321 16203 a 19321
+16916 a
+SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (cite.PedigreeNomenclature95) cvn H.B /ANN pdfmark end
+ 19321 16916 a 0 TeXcolorgray 1 w Fv(],)352 b(\\The)346
+b(construction)i(of)e(an)g(accurate)h(family)h(p)31 b(edigree)346
+b(is)6863 18245 y(a)h(fundamen)-31 b(tal)350 b(comp)31
+b(onen)-31 b(t)348 b(of)f(a)h(clinical)h(genetic)f(ev)-61
+b(aluation)349 b(and)e(of)g(h)-31 b(uman)348 b(genetic)6863
+19573 y(researc)-31 b(h.")474 b(The)315 b(pac)-31 b(k)-61
+b(age)315 b Fq(pst-)55 b(pdgr)316 b Fv([)p 0 TeXcolorgray
+23727 19573 a
+SDict begin H.S end
+ 23727 19573 a 0 TeXcolorgray Fv(2)p 0 TeXcolorgray
+24280 18860 a
+SDict begin H.R end
+ 24280 18860 a 24280 19573 a
+SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (cite.pst-pdgr06) cvn H.B /ANN pdfmark end
+ 24280 19573
+a 0 TeXcolorgray 1 w Fv(])f(pro)-31 b(vides)315 b(a)f(set)g(of)h(PST)
+-92 b(ric)-31 b(ks)315 b(macros)g(\(see)f([)p 0 TeXcolorgray
+43761 19573 a
+SDict begin H.S end
+ 43761 19573 a 0 TeXcolorgray Fv(3)p 0 TeXcolorgray
+44314 18860 a
+SDict begin H.R end
+ 44314 18860 a 44314 19573 a
+SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (cite.PSTricks93) cvn H.B /ANN pdfmark end
+ 44314 19573
+a 0 TeXcolorgray 1 w Fv(]\))6863 20902 y(to)372 b(t)-31
+b(yp)31 b(eset)371 b(p)31 b(edigrees.)496 b(In)370 b(the)h(framew)-31
+b(ork)372 b(of)f Fq(pst-)55 b(pdgr)372 b Fv(the)f(user)f(man)-31
+b(ually)373 b(c)-31 b(ho)31 b(oses)6863 22230 y(co)g(ordinates)323
+b(for)g(eac)-31 b(h)323 b(p)31 b(edigree)322 b(no)31
+b(de)322 b(on)g(the)h(diagram.)479 b(While)322 b(this)h(is)f(relativ)
+-31 b(ely)325 b(easy)6863 23558 y(for)476 b(small)h(p)31
+b(edigrees,)502 b(this)476 b(task)g(b)31 b(ecomes)476
+b(increasingly)h(time-consuming)h(for)e(larger)6863 24887
+y(ones.)558 b(There)391 b(ma)-31 b(y)392 b(b)31 b(e)390
+b(sev)-31 b(eral)392 b(approac)-31 b(hes)391 b(to)h(automate)i(it.)558
+b(F)-92 b(or)390 b(example,)399 b(one)391 b(ma)-31 b(y)6863
+26215 y(ha)g(v)g(e)444 b(data)g(ab)31 b(out)443 b(the)g(patien)-31
+b(ts)445 b(and)e(their)g(families)i(in)e(a)g(spreadsheet)f(or)g
+(database.)6863 27543 y(Then)386 b(it)h(w)-31 b(ould)387
+b(b)31 b(e)386 b(useful)g(to)g(generate)h(p)31 b(edigrees)386
+b(from)g(suc)-31 b(h)386 b(data.)544 b(This)386 b(is)g(the)g(aim)6863
+28872 y(of)370 b(the)f(program)h Fq(pedigree)g Fv(describ)31
+b(ed)369 b(in)g(this)h(man)-31 b(ual.)8524 30200 y(Spreadsheets)495
+b(and)g(databases)i(can)f(exp)31 b(ort)496 b(the)f(data)i(as)f
+(separated)g(v)-61 b(alues)495 b(\014les)6863 31528 y(\(\\csv")428
+b(\014les)e(for)g(Comma)j(Separated)e(V)-92 b(alues\).)665
+b(Our)426 b(program)h(reads)f(these)h(\014les)f(and)6863
+32857 y(outputs)382 b(LaT)-92 b(eX)382 b(co)31 b(de)382
+b(with)h Fq(pst-)55 b(pdgr)382 b Fv(macros.)530 b(W)-92
+b(e)381 b(tried)h(to)g(mak)-31 b(e)383 b(this)f(co)31
+b(de)381 b(read-)6863 34185 y(able,)371 b(so)e(a)g(user)f(migh)-31
+b(t)371 b(t)-31 b(w)g(eak)372 b(it)e(if)f(necessary)-92
+b(.)8524 35513 y(Of)422 b(course,)436 b(man)-31 b(ually)426
+b(pro)31 b(duced)422 b(L)23939 35286 y Fp(A)24427 35513
+y Fv(T)25041 35752 y(E)25657 35513 y(X)h(co)31 b(de)422
+b(is)h(more)g(v)-31 b(ersatile)424 b(than)g(the)f(auto-)6863
+36842 y(matically)354 b(generated)e(one.)486 b(There)351
+b(are)g(certain)g(limitations)k(for)350 b(the)h(program:)41782
+36842 y
+SDict begin H.S end
+ 41782 36842 a 41782 36842 a
+SDict begin 12 H.A end
+ 41782 36842 a 41782
+36842 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.1) cvn /DEST pdfmark end
+ 41782 36842 a Fv(1.)g(only)6863 38170 y(p)31
+b(ersons)453 b(ha)-31 b(ving)456 b(common)g(genes)e(with)h(the)g
+(proband)f(or)g(the)g(\\starting)i(p)31 b(erson")454
+b(are)6863 39498 y(included)505 b(in)g(the)g(p)31 b(edigree;)19805
+39498 y
+SDict begin H.S end
+ 19805 39498 a 19805 39498 a
+SDict begin 12 H.A end
+ 19805 39498 a 19805
+39498 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.2) cvn /DEST pdfmark end
+ 19805 39498 a Fv(2.)506 b(no)e(adopted)i(c)-31
+b(hildren,)539 b(sp)31 b(erm)504 b(donors)g(or)h(surrogate)6863
+40827 y(mothers)402 b(are)g(sho)-31 b(wn)402 b(on)h(the)f(p)31
+b(edigree;)24685 40827 y
+SDict begin H.S end
+ 24685 40827 a 24685 40827 a
+SDict begin 12 H.A end
+
+24685 40827 a 24685 40827 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.3) cvn /DEST pdfmark end
+ 24685 40827 a Fv(3.)403 b(only)g(one)f
+(disease)g(is)f(sho)-31 b(wn)403 b(on)f(the)g(c)-31 b(hart;)6863
+42155 y
+SDict begin H.S end
+ 6863 42155 a 6863 42155 a
+SDict begin 12 H.A end
+ 6863 42155 a 6863 42155
+a
+SDict begin [/View [/XYZ H.V]/Dest (Item.4) cvn /DEST pdfmark end
+ 6863 42155 a Fv(4.)470 b(the)g(supp)31 b(ort)469 b(for)h
+(consanguinic)h(unions)f(and)f(in)-31 b(breeding)471
+b(is)e(rather)g(exp)31 b(erimen)-31 b(tal)6863 43484
+y(\(see)409 b(Section)p 0 TeXcolorgray 13038 43484 a
+SDict begin H.S end
+
+13038 43484 a 0 TeXcolorgray Fv(4.7)p 0 TeXcolorgray
+14451 42770 a
+SDict begin H.R end
+ 14451 42770 a 14451 43484 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.7) cvn H.B /ANN pdfmark end
+ 14451 43484
+a 0 TeXcolorgray Fv(\).)615 b(Subsequen)-31 b(t)410 b(v)-31
+b(ersions)409 b(of)h(the)g(program)g(ma)-31 b(y)410 b(ease)g(some)f(of)
+h(these)6863 44812 y(limitations.)6863 46480 y
+SDict begin H.S end
+ 6863 46480
+a 6863 46480 a
+SDict begin 12 H.A end
+ 6863 46480 a 6863 46480 a
+SDict begin [/View [/XYZ H.V]/Dest (section.2) cvn /DEST pdfmark end
+ 6863 46480 a
+1993 x Fu(2)1793 b(Installation)6863 49569 y
+SDict begin H.S end
+ 6863 49569
+a 6863 49569 a
+SDict begin 12 H.A end
+ 6863 49569 a 6863 49569 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.2.1) cvn /DEST pdfmark
+end
+ 6863 49569 a
+1549 x Ft(2.1)1495 b(System)499 b(Requiremen)-42 b(ts)6863
+53162 y Fv(The)304 b(program)h(requires)e Fo(P)-31 b(erl)305
+b Fv(v)-31 b(ersion)304 b(5)g(or)g(new)-31 b(er)304 b(\(it)h(w)-31
+b(as)305 b(tested)f(with)h Fo(P)-31 b(erl)305 b Fv(v5.8.8,)320
+b(but)6863 54490 y(should)382 b(w)-31 b(ork)382 b(with)g(an)-31
+b(y)398 b Fo(P)-31 b(erl-5)p Fv(\).)531 b(The)381 b(L)24340
+54263 y Fp(A)24828 54490 y Fv(T)25442 54728 y(E)26058
+54490 y(X)g(macros)h(require)f Fq(pst-)55 b(pdgr)382
+b Fv(v)-31 b(ersion)382 b(0.3)6863 55818 y(\(July)370
+b(2007\))i(or)d(new)-31 b(er.)6863 57644 y
+SDict begin H.S end
+ 6863 57644
+a 6863 57644 a
+SDict begin 12 H.A end
+ 6863 57644 a 6863 57644 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.2.2) cvn /DEST pdfmark
+end
+ 6863 57644 a
+1273 x Ft(2.2)1495 b(Unix/Lin)-42 b(ux)500 b(Installation)6863
+60960 y Fv(If)400 b(y)-31 b(our)400 b(system)h(has)f(a)g(w)-31
+b(orking)417 b Fo(mak)-31 b(e)401 b Fv(program,)409 b(whic)-31
+b(h)401 b(is)f(the)g(usual)g(case)g(for)g(Unix-)6863
+62289 y(lik)-31 b(e)446 b(en)-31 b(vironmen)g(ts,)466
+b(the)445 b(supplied)f Fq(Makefile)i Fv(installs)g(the)f(executable)h
+Fq(pedigree)g Fv(in)6863 63617 y Fq(/usr/local/bin)p
+Fv(,)374 b(the)d(libraries)g(in)h Fq(/usr/local/lib/site_perl)i
+Fv(and)d(the)g(man)-31 b(ual)6863 64945 y(pages)369 b(in)g
+Fq(/usr/local/man)p Fv(.)494 b(This)369 b(is)g(done)f(b)-31
+b(y)369 b(the)g(usual)g(command)h Fq(make)582 b(install)q
+Fv(.)p 0 TeXcolorgray 25681 70071 a(4)p 0 TeXcolorgray
+eop end
+%%Page: 5 5
+TeXDict begin 5 4 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 TeXcolorgray
+6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752 1660 a 6752
+1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.5) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+6863 6974 a Fv(Optionally)426 b(y)-31 b(ou)424 b(can)g(install)h
+(\014les)e(in)h(the)f Fq(doc)h Fv(and)f Fq(examples)h
+Fv(sub)31 b(directories)423 b(in)h(the)6863 8302 y(prop)31
+b(er)368 b(places)i(in)f(y)-31 b(our)370 b(system.)6863
+10066 y
+SDict begin H.S end
+ 6863 10066 a 6863 10066 a
+SDict begin 12 H.A end
+ 6863 10066 a 6863 10066
+a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.2.3) cvn /DEST pdfmark
+end
+ 6863 10066 a 1335 x Ft(2.3)1495 b(Installation)500
+b(in)f(Other)g(Systems)6863 13444 y Fv(If)310 b(y)-31
+b(our)311 b(system)g(do)31 b(es)310 b(not)i(ha)-31 b(v)g(e)311
+b Fo(mak)-31 b(e)p Fv(,)324 b(y)-31 b(ou)311 b(need)f(to)i(man)-31
+b(ually)313 b(p)31 b(erform)310 b(the)h(follo)-31 b(wing:)6863
+14102 y
+SDict begin H.S end
+ 6863 14102 a 6863 14102 a
+SDict begin 12 H.A end
+ 6863 14102 a 6863 14102
+a
+SDict begin [/View [/XYZ H.V]/Dest (Item.5) cvn /DEST pdfmark end
+ 6863 14102 a 0 TeXcolorgray 8216 15658 a Fv(1.)p 0
+TeXcolorgray 555 w(Install)370 b(the)f(executable)i Fq(pedigree.pl)f
+Fv(to)g(the)g(place)g(y)-31 b(our)369 b(system)h(can)f(\014nd)g(it.)
+6863 16347 y
+SDict begin H.S end
+ 6863 16347 a 6863 16347 a
+SDict begin 12 H.A end
+ 6863 16347 a 6863
+16347 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.6) cvn /DEST pdfmark end
+ 6863 16347 a 0 TeXcolorgray 8216 17872 a Fv(2.)p
+0 TeXcolorgray 555 w(Install)430 b(the)f(libraries:)613
+b Fq(Pedigree.pm)p Fv(,)446 b(directory)429 b Fq(Pedigree)h
+Fv(and)g(all)g(\014les)f(in)g(it)9631 19200 y(to)389
+b(the)h Fo(P)-31 b(erl)390 b Fv(searc)-31 b(h)388 b(path.)553
+b(The)390 b(latter)g(is)f(listed)h(in)f(the)g(arra)-31
+b(y)390 b Fq(@INC)p Fv(,)395 b(whic)-31 b(h)390 b(can)9631
+20529 y(b)31 b(e)368 b(c)-31 b(hec)g(k)g(ed)370 b(b)-31
+b(y)370 b(the)f(command)i Fq(perl)582 b(-V)369 b Fv(or)g(its)g(equiv)
+-61 b(alen)-31 b(t.)6863 22443 y
+SDict begin H.S end
+ 6863 22443 a 6863 22443
+a
+SDict begin 12 H.A end
+ 6863 22443 a 6863 22443 a
+SDict begin [/View [/XYZ H.V]/Dest (section.3) cvn /DEST pdfmark end
+ 6863 22443 a 1746 x Fu(3)1793
+b(Con\014guration)6863 25596 y
+SDict begin H.S end
+ 6863 25596 a 6863 25596
+a
+SDict begin 12 H.A end
+ 6863 25596 a 6863 25596 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.3.1) cvn /DEST pdfmark
+end
+ 6863 25596 a 1239 x Ft(3.1)1495
+b(Con\014guration)737 b(V)-125 b(ariables)737 b(and)f(Lo)42
+b(cation)735 b(of)f(Con\014gura-)10267 28385 y(tion)499
+b(File)6863 30428 y Fv(The)485 b(program)g(defaults)h(are)f(su\016cien)
+-31 b(t)485 b(for)g(most)g(cases.)839 b(Ho)-31 b(w)g(ev)g(er,)515
+b(if)486 b(y)-31 b(ou)485 b(w)-31 b(an)g(t)486 b(to)6863
+31757 y(dra)-31 b(w)378 b(p)31 b(edigrees)377 b(in)g(a)h(language)h
+(other)e(than)h(English,)j(or)c(to)h(t)-31 b(w)g(eak)379
+b(the)f(la)-31 b(y)g(out)379 b(of)f(the)6863 33085 y(p)31
+b(edigrees,)369 b(y)-31 b(ou)370 b(need)f(to)h(c)-31
+b(hange)370 b(the)g(program)g(con\014guration.)8524 34413
+y(The)426 b(b)31 b(eha)-31 b(vior)428 b(of)f(the)g(program)g
+Fo(p)31 b(edigree)427 b Fv(is)g(determined)g(b)-31 b(y)427
+b Fn(c)-57 b(on\014gur)g(ation)450 b(vari-)6863 35742
+y(ables.)806 b Fv(There)474 b(are)f(sev)-31 b(eral)474
+b(sources)f(of)h(con\014guration)i(v)-61 b(ariables.)807
+b(They)475 b(are)e(\(in)i(the)6863 37070 y(order)369
+b(of)g(increasing)h(priorit)-31 b(y\):)6863 37790 y
+SDict begin H.S end
+ 6863
+37790 a 6863 37790 a
+SDict begin 12 H.A end
+ 6863 37790 a 6863 37790 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.7) cvn /DEST pdfmark end
+ 6863 37790
+a 0 TeXcolorgray 8216 39284 a Fv(1.)p 0 TeXcolorgray
+555 w(Program)370 b(defaults.)6863 39942 y
+SDict begin H.S end
+ 6863 39942
+a 6863 39942 a
+SDict begin 12 H.A end
+ 6863 39942 a 6863 39942 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.8) cvn /DEST pdfmark end
+ 6863 39942 a
+0 TeXcolorgray 8216 41498 a Fv(2.)p 0 TeXcolorgray 555
+w(The)336 b(system)h(con\014guration)h(\014le)p 0 TeXcolorgray
+23599 41498 a
+SDict begin H.S end
+ 23599 41498 a -402 x Fp(1)24096 41498 y
+SDict begin 12 H.L end
+
+24096 41498 a 24096 41498 a
+SDict begin [/Subtype /Link/Dest (Hfootnote.1) cvn/H /I/Border [0 0
+0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 24096 41498 a 0 TeXcolorgray
+336 w Fq(/etc/pedigree.cfg)p Fv(.)484 b(On)336 b(T)37526
+41736 y(E)38142 41498 y(XLiv)-31 b(e)337 b(the)g(sys-)9631
+42826 y(tem)246 b(coniguration)j(\014les)d(are)g Fq($TEXMFHOME/texmf-)
+55 b(config/pedigree/pedigree.)9631 44155 y(cfg)369 b
+Fv(and)g Fq($TEXMFLOCAL/pedigree/pedigree.cfg)p Fv(.)6863
+44843 y
+SDict begin H.S end
+ 6863 44843 a 6863 44843 a
+SDict begin 12 H.A end
+ 6863 44843 a 6863 44843
+a
+SDict begin [/View [/XYZ H.V]/Dest (Item.9) cvn /DEST pdfmark end
+ 6863 44843 a 0 TeXcolorgray 8216 46369 a Fv(3.)p 0
+TeXcolorgray 555 w(User)f(con\014guration)j(\014le)p
+0 TeXcolorgray 20312 46369 a
+SDict begin H.S end
+ 20312 46369 a -402 x Fp(2)20809
+46369 y
+SDict begin 12 H.L end
+ 20809 46369 a 20809 46369 a
+SDict begin [/Subtype /Link/Dest (Hfootnote.2) cvn/H /I/Border [0 0
+0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 20809 46369 a 0 TeXcolorgray
+369 w Fq($HOME/.pedigreerc)p Fv(.)6863 47057 y
+SDict begin H.S end
+ 6863 47057
+a 6863 47057 a
+SDict begin 12 H.A end
+ 6863 47057 a 6863 47057 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.10) cvn /DEST pdfmark end
+ 6863 47057 a
+0 TeXcolorgray 8216 48582 a Fv(4.)p 0 TeXcolorgray 555
+w(The)e(\014le)g(sp)31 b(eci\014ed)369 b(b)-31 b(y)370
+b(the)f Fq(-c)g Fv(option)i(\(see)e(Section)p 0 TeXcolorgray
+32668 48582 a
+SDict begin H.S end
+ 32668 48582 a 0 TeXcolorgray Fv(4.1)p 0
+TeXcolorgray 34081 47869 a
+SDict begin H.R end
+ 34081 47869 a 34081 48582
+a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.1) cvn H.B /ANN pdfmark end
+ 34081 48582 a 0 TeXcolorgray Fv(\).)6863 50796 y(If)g(a)h(\014le)f
+(men)-31 b(tioned)371 b(in)f(this)f(list)h(do)31 b(es)369
+b(not)h(exists,)g(the)f(program)h(silen)-31 b(tly)p 0
+TeXcolorgray 38975 50796 a
+SDict begin H.S end
+ 38975 50796 a -401 x Fp(3)39474
+50796 y
+SDict begin 12 H.L end
+ 39474 50796 a 39474 50796 a
+SDict begin [/Subtype /Link/Dest (Hfootnote.3) cvn/H /I/Border [0 0
+0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 39474 50796 a 0 TeXcolorgray
+369 w Fv(con)g(tin)g(ues.)8524 52125 y(Note)307 b(that)h(ev)-31
+b(en)307 b(if)g(a)g(con\014guration)i(\014le)e(with)h(higher)f(priorit)
+-31 b(y)307 b(exists,)320 b(the)307 b(program)6863 53453
+y(reads)472 b(the)i(\014les)e(with)i(lo)-31 b(w)g(er)475
+b(priorit)-31 b(y)474 b(\014rst.)803 b(The)473 b(former)g
+Fn(overrides)563 b Fv(the)473 b(latter,)501 b(but)6863
+54781 y(not)449 b(precludes)f(it)i(from)f(reading.)731
+b(In)448 b(other)h(w)-31 b(ords,)469 b(if)449 b Fq(/etc/pedigree.cfg)i
+Fv(de\014nes)6863 56110 y(v)-61 b(ariables)402 b Fq($foo)p
+0 TeXcolorgray 0 TeXcolorgray 401 w Fv(and)f Fq($bar)p
+0 TeXcolorgray 0 TeXcolorgray Fv(,)410 b(and)401 b Fq
+($HOME/.pedigreerc)i Fv(de\014nes)d Fq($bar)p 0 TeXcolorgray
+0 TeXcolorgray 401 w Fv(and)h Fq($baz)p 0 TeXcolorgray
+0 TeXcolorgray 1 w Fv(,)409 b(the)6863 57438 y(program)339
+b(tak)-31 b(es)339 b Fq($foo)p 0 TeXcolorgray 0 TeXcolorgray
+339 w Fv(from)g(the)f(\014rst)g(\014le,)345 b(and)338
+b Fq($bar)p 0 TeXcolorgray 0 TeXcolorgray 339 w Fv(and)g
+Fq($baz)p 0 TeXcolorgray 0 TeXcolorgray 339 w Fv(from)h(the)f(second)g
+(one.)p 0 TeXcolorgray 6863 58362 15276 45 v 8096 59078
+a Fm(1)p 0 TeXcolorgray 8557 59390 a
+SDict begin H.S end
+ 8557 59390 a 8557
+59390 a
+SDict begin H.R end
+ 8557 59390 a 8557 59390 a
+SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.1) cvn /DEST pdfmark
+end
+ 8557 59390 a 0 TeXcolorgray
+Fl(On)313 b(Unix-lik)-26 b(e)313 b(systems,)h(where)f
+Fk(/etc)j Fl(exists)8096 60134 y Fm(2)p 0 TeXcolorgray
+8557 60446 a
+SDict begin H.S end
+ 8557 60446 a 8557 60446 a
+SDict begin H.R end
+ 8557 60446 a 8557
+60446 a
+SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.2) cvn /DEST pdfmark
+end
+ 8557 60446 a 0 TeXcolorgray Fl(On)d(Unix-lik)-26
+b(e)313 b(systems,)h(where)f Fk($HOME)j Fl(exists)8096
+61190 y Fm(3)p 0 TeXcolorgray 8557 61502 a
+SDict begin H.S end
+ 8557 61502
+a 8557 61502 a
+SDict begin H.R end
+ 8557 61502 a 8557 61502 a
+SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.3) cvn /DEST pdfmark
+end
+ 8557 61502 a
+0 TeXcolorgray Fl(Unless)e Fk(-)55 b(d)315 b Fl(option)f(is)g
+(selected,)h(see)f(Section)p 0 TeXcolorgray 25287 61502
+a
+SDict begin H.S end
+ 25287 61502 a 0 TeXcolorgray Fl(4.1)p 0 TeXcolorgray
+26488 60932 a
+SDict begin H.R end
+ 26488 60932 a 26488 61502 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.1) cvn H.B /ANN pdfmark end
+ 26488 61502
+a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 25681
+70071 a Fv(5)p 0 TeXcolorgray eop end
+%%Page: 6 6
+TeXDict begin 6 5 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 TeXcolorgray
+6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752 1660 a 6752
+1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.6) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+6863 5867 a
+SDict begin H.S end
+ 6863 5867 a 6863 5867 a
+SDict begin 12 H.A end
+ 6863 5867 a 6863
+5867 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.3.2) cvn /DEST pdfmark
+end
+ 6863 5867 a 1107 x Ft(3.2)1495 b(Con\014guration)501
+b(File)e(F)-125 b(ormat)6863 9017 y Fv(All)299 b(con\014guration)i
+(\014les)d(men)-31 b(tioned)300 b(in)e(Section)p 0 TeXcolorgray
+27725 9017 a
+SDict begin H.S end
+ 27725 9017 a 0 TeXcolorgray Fv(3.1)p 0 TeXcolorgray
+29138 8304 a
+SDict begin H.R end
+ 29138 8304 a 29138 9017 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.3.1) cvn H.B /ANN pdfmark end
+ 29138 9017 a 0
+TeXcolorgray Fv(,)314 b(ha)-31 b(v)g(e)299 b(the)f(same)h(format.)471
+b(They)298 b(are)6863 10345 y(actually)393 b(snipp)31
+b(ets)390 b(of)478 b Fo(P)-31 b(erl)391 b Fv(co)31 b(de,)396
+b(executed)391 b(b)-31 b(y)391 b(the)g(program)g Fo(p)31
+b(edigree)p Fv(.)557 b(This)391 b(means,)6863 11674 y(b)-31
+b(y)477 b(the)g(w)-31 b(a)g(y)-92 b(,)505 b(that)478
+b(all)g(precautions)f(usually)h(tak)-31 b(en)478 b(with)g(resp)31
+b(ect)475 b(to)j(programs)f(and)6863 13002 y(scripts,)345
+b(are)339 b(relev)-61 b(an)-31 b(t)340 b(for)f(con\014guration)i
+(\014les)e(as)g(w)-31 b(ell.)484 b(In)338 b(particular,)347
+b(it)340 b(is)f(a)g(bad)g(idea)6863 14331 y(to)370 b(ha)-31
+b(v)g(e)370 b(w)-31 b(orld-writable)372 b(system-wide)f
+(con\014guration)g(\014le)f Fq(/etc/pedigree.cfg)p Fv(.)8524
+15659 y(The)302 b(co)31 b(de)302 b(in)h(con\014guration)i(\014les)d(is)
+g(v)-31 b(ery)302 b(simple,)317 b(and)303 b(one)g(do)31
+b(es)302 b(not)h(need)f(to)h(kno)-31 b(w)6863 16987 y
+Fo(P)g(erl)356 b Fv(to)f(edit)h(con\014guration)h(\014les.)488
+b(There)354 b(are)h(sev)-31 b(eral)355 b(simple)h(rules)e(whic)-31
+b(h)356 b(are)e(enough)6863 18316 y(to)370 b(understand)f(these)g
+(\014les:)6863 18758 y
+SDict begin H.S end
+ 6863 18758 a 6863 18758 a
+SDict begin 12 H.A end
+ 6863
+18758 a 6863 18758 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.11) cvn /DEST pdfmark end
+ 6863 18758 a 0 TeXcolorgray 8216
+20529 a Fv(1.)p 0 TeXcolorgray 555 w(All)435 b(text)g(after)f
+Fj(#)p 0 TeXcolorgray 0 TeXcolorgray 434 w Fv(to)h(the)f(end)g(of)h
+(the)f(line)h(is)f(a)g(commen)-31 b(ts.)689 b(In)434
+b(particular,)452 b(the)9631 21858 y(lines)369 b(starting)i(with)f
+Fj(#)p 0 TeXcolorgray 0 TeXcolorgray Fv(,)g(are)f(commen)-31
+b(t)371 b(lines.)6863 22516 y
+SDict begin H.S end
+ 6863 22516 a 6863 22516
+a
+SDict begin 12 H.A end
+ 6863 22516 a 6863 22516 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.12) cvn /DEST pdfmark end
+ 6863 22516 a 0 TeXcolorgray
+8216 24072 a Fv(2.)p 0 TeXcolorgray 555 w Fo(P)-31 b(erl)370
+b Fv(commands)g(m)-31 b(ust)370 b(end)f(b)-31 b(y)369
+b(semicolon)i Fq(;)p 0 TeXcolorgray 0 TeXcolorgray Fv(.)6863
+24730 y
+SDict begin H.S end
+ 6863 24730 a 6863 24730 a
+SDict begin 12 H.A end
+ 6863 24730 a 6863 24730
+a
+SDict begin [/View [/XYZ H.V]/Dest (Item.13) cvn /DEST pdfmark end
+ 6863 24730 a 0 TeXcolorgray 8216 26286 a Fv(3.)p 0
+TeXcolorgray 555 w(The)e(commands)h(lik)-31 b(e)6863
+26950 y
+SDict begin H.S end
+ 6863 26950 a 6863 26950 a
+SDict begin 12 H.A end
+ 6863 26950 a 6863 26950
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-1) cvn /DEST pdfmark
+end
+ 6863 26950 a 9631 28278 a
+SDict begin H.S end
+ 9631 28278 a 9631 28278 a
+SDict begin 12 H.A end
+
+9631 28278 a 9631 28278 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.1) cvn /DEST pdfmark
+end
+ 9631 28278 a 2889 w Fq($)100
+b(x)g(d)g(i)g(s)g(t)195 b(=)97 b(1)g(.)g(5)g(;)p 0 TeXcolorgray
+0 TeXcolorgray 9631 30714 a Fv(or)6863 31378 y
+SDict begin H.S end
+ 6863 31378
+a 6863 31378 a
+SDict begin 12 H.A end
+ 6863 31378 a 6863 31378 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-2) cvn /DEST pdfmark
+end
+ 6863 31378 a
+9631 32706 a
+SDict begin H.S end
+ 9631 32706 a 9631 32706 a
+SDict begin 12 H.A end
+ 9631 32706 a 9631
+32706 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-2.1) cvn /DEST pdfmark
+end
+ 9631 32706 a 2898 w Fq(@)109 b(f)g(i)g(e)g(l)g(d)g(s)g(f)g(o)g
+(r)g(p)g(r)g(i)g(n)g(t)169 b(=)136 b(q)77 b(w)136 b(\()151
+b(N)93 b(a)g(m)g(e)878 b(D)87 b(o)g(B)166 b(\))77 b(;)p
+0 TeXcolorgray 0 TeXcolorgray 9631 35141 a Fv(assign)369
+b(v)-61 b(alues)370 b(to)f(the)h(v)-61 b(ariables.)6863
+35799 y
+SDict begin H.S end
+ 6863 35799 a 6863 35799 a
+SDict begin 12 H.A end
+ 6863 35799 a 6863 35799
+a
+SDict begin [/View [/XYZ H.V]/Dest (Item.14) cvn /DEST pdfmark end
+ 6863 35799 a 0 TeXcolorgray 8216 37355 a Fv(4.)p 0
+TeXcolorgray 555 w(V)-92 b(ariables)390 b(starting)g(with)h
+Fq($)p 0 TeXcolorgray 0 TeXcolorgray 389 w Fv(are)e(scalars)h(and)f
+(tak)-31 b(e)391 b(n)-31 b(umerical)391 b(or)e(string)g(v)-61
+b(alues.)9631 38684 y(V)-92 b(ariables)370 b(starting)g(with)h
+Fq(@)p 0 TeXcolorgray 0 TeXcolorgray 369 w Fv(are)e(arra)-31
+b(ys)369 b(and)g(tak)-31 b(e)371 b(list)f(of)g(v)-61
+b(alues.)6863 39342 y
+SDict begin H.S end
+ 6863 39342 a 6863 39342 a
+SDict begin 12 H.A end
+ 6863
+39342 a 6863 39342 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.15) cvn /DEST pdfmark end
+ 6863 39342 a 0 TeXcolorgray 8216
+40898 a Fv(5.)p 0 TeXcolorgray 555 w(A)301 b(bac)-31
+b(kslash)302 b(in)f(single)h(quotes)g(stands)f(for)h(itself,)316
+b(A)301 b(bac)-31 b(kslash)302 b(in)g(double)f(quotes)9631
+42226 y(or)391 b(inside)g Fq(<<)q(END)p 0 TeXcolorgray
+0 TeXcolorgray Fv(.)185 b(.)g(.)g Fq(END)p 0 TeXcolorgray
+0 TeXcolorgray 391 w Fv(construction)393 b(m)-31 b(ust)392
+b(b)31 b(e)391 b(doubled.)559 b(Compare)393 b(the)e(com-)9631
+43554 y(mands)6863 44218 y
+SDict begin H.S end
+ 6863 44218 a 6863 44218 a
+SDict begin 12 H.A end
+
+6863 44218 a 6863 44218 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-3) cvn /DEST pdfmark
+end
+ 6863 44218 a 9631 45547 a
+SDict begin H.S end
+ 9631
+45547 a 9631 45547 a
+SDict begin 12 H.A end
+ 9631 45547 a 9631 45547 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-3.1) cvn /DEST pdfmark
+end
+ 9631 45547
+a 2882 w Fq($)93 b(f)g(o)g(o)152 b(=)135 b(')98 b(\\)166
+b(d)108 b(o)g(c)g(u)g(m)g(e)g(n)g(t)g(c)g(l)g(a)g(s)g(s)186
+b(')97 b(;)9631 46875 y
+SDict begin H.S end
+ 9631 46875 a 9631 46875 a
+SDict begin 12 H.A end
+ 9631
+46875 a 9631 46875 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-3.2) cvn /DEST pdfmark
+end
+ 9631 46875 a 2882 w Fq($)c(b)g(a)g(r)152
+b(=)116 b(")136 b(\\)77 b(\\)186 b(d)108 b(o)g(c)g(u)g(m)g(e)g(n)g(t)g
+(c)g(l)g(a)g(s)g(s)167 b(")117 b(;)p 0 TeXcolorgray 0
+TeXcolorgray 6863 48381 a
+SDict begin H.S end
+ 6863 48381 a 6863 48381 a
+SDict begin 12 H.A end
+ 6863
+48381 a 6863 48381 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.16) cvn /DEST pdfmark end
+ 6863 48381 a 0 TeXcolorgray 8216
+49753 a Fv(6.)p 0 TeXcolorgray 555 w(The)369 b(last)h(command)h(in)e
+(the)h(\014le)f(m)-31 b(ust)370 b(b)31 b(e)6863 50417
+y
+SDict begin H.S end
+ 6863 50417 a 6863 50417 a
+SDict begin 12 H.A end
+ 6863 50417 a 6863 50417 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-4) cvn /DEST pdfmark
+end
+
+6863 50417 a 9631 51746 a
+SDict begin H.S end
+ 9631 51746 a 9631 51746 a
+SDict begin 12 H.A end
+ 9631
+51746 a 9631 51746 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-4.1) cvn /DEST pdfmark
+end
+ 9631 51746 a 2867 w Fq(1)77 b(;)p
+0 TeXcolorgray 0 TeXcolorgray 8524 54624 a Fv(A)437 b(n)-31
+b(um)g(b)31 b(er)437 b(of)h(commen)-31 b(ted)440 b(con\014guration)f
+(\014les)e(can)h(b)31 b(e)437 b(found)h(in)f(the)h Fq(examples)6863
+55952 y Fv(sub)31 b(directory)369 b(of)h(the)f(distribution.)8524
+57281 y(In)311 b(the)h(remaining)i(parts)e(of)g(this)g(section)h(w)-31
+b(e)312 b(describ)31 b(e)311 b(the)h(con\014guration)i(v)-61
+b(ariables)6863 58609 y(in)370 b(detail.)6863 60158 y
+SDict begin H.S end
+
+6863 60158 a 6863 60158 a
+SDict begin 12 H.A end
+ 6863 60158 a 6863 60158 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.3.3) cvn /DEST pdfmark
+end
+ 6863
+60158 a 1550 x Ft(3.3)1495 b(T)11057 62003 y(E)11851
+61708 y(X)499 b(Output)g(Setup)6863 63751 y Fv(A)286
+b(n)-31 b(um)g(b)31 b(er)285 b(of)h(v)-61 b(ariables)286
+b(determine)g(what)h(kind)f(of)372 b(T)29663 63989 y(E)30279
+63751 y(X)285 b(\014le)h(is)f(pro)31 b(duced.)464 b(An)286
+b(example)6863 65079 y(of)370 b(their)f(usage)h(is)f(sho)-31
+b(wn)370 b(on)f(Listing)p 0 TeXcolorgray 23511 65079
+a
+SDict begin H.S end
+ 23511 65079 a 0 TeXcolorgray Fv(1)p 0 TeXcolorgray
+24064 64366 a
+SDict begin H.R end
+ 24064 64366 a 24064 65079 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.1) cvn H.B /ANN pdfmark end
+ 24064 65079
+a 0 TeXcolorgray Fv(.)p 0 TeXcolorgray 25681 70071 a(6)p
+0 TeXcolorgray eop end
+%%Page: 7 7
+TeXDict begin 7 6 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 TeXcolorgray
+6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752 1660 a 6752
+1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.7) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 6863 6531 a
+SDict begin H.S end
+ 6863 6531 a 6863 6531 a
+SDict begin 12 H.A end
+ 6863
+6531 a 6863 6531 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.1) cvn /DEST pdfmark
+end
+ 6863 6531 a 6863 7461 a
+SDict begin H.S end
+ 6863 7461
+a 6863 7461 a
+SDict begin 12 H.A end
+ 6863 7461 a 6863 7461 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.1) cvn /DEST pdfmark
+end
+ 6863 7461 a 58
+w Fj(#)833 b(D)77 b(o)854 b(w)77 b(e)868 b(w)93 b(a)g(n)g(t)869
+b(t)77 b(o)868 b(h)93 b(a)g(v)g(e)849 b(a)g(f)93 b(u)g(l)g(l)888
+b(L)97 b(a)g(T)g(e)g(X)6863 8789 y
+SDict begin H.S end
+ 6863 8789 a 6863 8789
+a
+SDict begin 12 H.A end
+ 6863 8789 a 6863 8789 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.2) cvn /DEST pdfmark
+end
+ 6863 8789 a 58 w Fj(#)849 b(f)93
+b(i)g(l)g(e)868 b(o)77 b(r)869 b(j)93 b(u)g(s)g(t)849
+b(a)859 b(f)103 b(r)g(a)g(g)g(m)g(e)g(n)g(t)165 b(?)6863
+10118 y
+SDict begin H.S end
+ 6863 10118 a 6863 10118 a
+SDict begin 12 H.A end
+ 6863 10118 a 6863 10118
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.3) cvn /DEST pdfmark
+end
+ 6863 10118 a 58 w Fj(#)6863 11446 y
+SDict begin H.S end
+ 6863 11446 a 6863
+11446 a
+SDict begin 12 H.A end
+ 6863 11446 a 6863 11446 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.4) cvn /DEST pdfmark
+end
+ 6863 11446 a 103 w
+Fq($)103 b(f)g(u)g(l)g(l)g(d)g(o)g(c)194 b(=)87 b(1)g(;)6863
+12774 y
+SDict begin H.S end
+ 6863 12774 a 6863 12774 a
+SDict begin 12 H.A end
+ 6863 12774 a 6863 12774
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.5) cvn /DEST pdfmark
+end
+ 6863 12774 a 6863 14103 a
+SDict begin H.S end
+ 6863 14103 a 6863 14103 a
+SDict begin 12 H.A end
+
+6863 14103 a 6863 14103 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.6) cvn /DEST pdfmark
+end
+ 6863 14103 a 58 w Fj(#)849
+b(W)93 b(h)g(a)g(t)884 b(k)93 b(i)g(n)g(d)868 b(o)77
+b(f)879 b(d)103 b(o)g(c)g(u)g(m)g(e)g(n)g(t)882 b(d)77
+b(o)853 b(w)77 b(e)869 b(w)93 b(a)g(n)g(t)6863 15431
+y
+SDict begin H.S end
+ 6863 15431 a 6863 15431 a
+SDict begin 12 H.A end
+ 6863 15431 a 6863 15431 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.7) cvn /DEST pdfmark
+end
+
+6863 15431 a 58 w Fj(#)6863 16759 y
+SDict begin H.S end
+ 6863 16759 a 6863
+16759 a
+SDict begin 12 H.A end
+ 6863 16759 a 6863 16759 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.8) cvn /DEST pdfmark
+end
+ 6863 16759 a 109 w
+Fq($)109 b(d)g(o)g(c)g(u)g(m)g(e)g(n)g(t)g(h)g(e)g(a)g(d)g(e)g(r)169
+b(=)136 b(')97 b(\\)166 b(d)108 b(o)g(c)g(u)g(m)g(e)g(n)g(t)g(c)g(l)g
+(a)g(s)g(s)167 b({)160 b(a)102 b(r)g(t)g(i)g(c)g(l)g(e)159
+b(})136 b(')97 b(;)6863 18088 y
+SDict begin H.S end
+ 6863 18088 a 6863 18088
+a
+SDict begin 12 H.A end
+ 6863 18088 a 6863 18088 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.9) cvn /DEST pdfmark
+end
+ 6863 18088 a 6863 19416 a
+SDict begin H.S end
+
+6863 19416 a 6863 19416 a
+SDict begin 12 H.A end
+ 6863 19416 a 6863 19416 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.10) cvn /DEST pdfmark
+end
+ 6863
+19416 a 58 w Fj(#)856 b(D)100 b(e)g(f)g(i)g(n)g(e)901
+b(a)106 b(d)g(d)g(i)g(t)g(i)g(o)g(n)g(a)g(l)905 b(p)103
+b(a)g(c)g(k)g(a)g(g)g(e)g(s)897 b(h)93 b(e)g(r)g(e)6863
+20744 y
+SDict begin H.S end
+ 6863 20744 a 6863 20744 a
+SDict begin 12 H.A end
+ 6863 20744 a 6863 20744
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.11) cvn /DEST pdfmark
+end
+ 6863 20744 a 58 w Fj(#)6863 22073 y
+SDict begin H.S end
+ 6863 22073 a 6863
+22073 a
+SDict begin 12 H.A end
+ 6863 22073 a 6863 22073 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.12) cvn /DEST pdfmark
+end
+ 6863 22073 a 108 w
+Fq($)108 b(a)g(d)g(d)g(t)g(o)g(p)g(r)g(e)g(a)g(m)g(b)g(l)g(e)176
+b(=)116 b(<)g(<)146 b(E)87 b(N)g(D)146 b(;)6863 23401
+y
+SDict begin H.S end
+ 6863 23401 a 6863 23401 a
+SDict begin 12 H.A end
+ 6863 23401 a 6863 23401 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.13) cvn /DEST pdfmark
+end
+
+6863 23401 a 77 w Fq(\\)77 b(\\)185 b(u)106 b(s)g(e)g(p)g(a)g(c)g(k)g
+(a)g(g)g(e)162 b({)128 b(p)70 b(s)g(t)197 b(-)152 b(p)93
+b(d)g(g)g(r)151 b(})6863 24729 y
+SDict begin H.S end
+ 6863 24729 a 6863 24729
+a
+SDict begin 12 H.A end
+ 6863 24729 a 6863 24729 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.14) cvn /DEST pdfmark
+end
+ 6863 24729 a 87 w Fq(E)87
+b(N)g(D)6863 26058 y
+SDict begin H.S end
+ 6863 26058 a 6863 26058 a
+SDict begin 12 H.A end
+ 6863 26058
+a 6863 26058 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.15) cvn /DEST pdfmark
+end
+ 6863 26058 a 6863 27386 a
+SDict begin H.S end
+ 6863 27386 a
+6863 27386 a
+SDict begin 12 H.A end
+ 6863 27386 a 6863 27386 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.16) cvn /DEST pdfmark
+end
+ 6863 27386 a 58
+w Fj(#)833 b(D)77 b(o)854 b(w)77 b(e)868 b(w)93 b(a)g(n)g(t)869
+b(t)77 b(o)872 b(p)97 b(r)g(i)g(n)g(t)853 b(a)i(l)100
+b(e)g(g)g(e)g(n)g(d)157 b(?)6863 28715 y
+SDict begin H.S end
+ 6863 28715 a
+6863 28715 a
+SDict begin 12 H.A end
+ 6863 28715 a 6863 28715 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.17) cvn /DEST pdfmark
+end
+ 6863 28715 a 58
+w Fj(#)6863 30043 y
+SDict begin H.S end
+ 6863 30043 a 6863 30043 a
+SDict begin 12 H.A end
+ 6863 30043
+a 6863 30043 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.18) cvn /DEST pdfmark
+end
+ 6863 30043 a 107 w Fq($)107 b(p)g(r)g(i)g(n)g(t)g(l)g(e)
+g(g)g(e)g(n)g(d)200 b(=)87 b(1)g(;)p 0 TeXcolorgray 0
+TeXcolorgray 13692 32478 a Fv(Listing)371 b(1:)493 b(Con\014guration)
+372 b(File:)493 b(Setting)386 b(T)32842 32717 y(E)33458
+32478 y(X)369 b(Output)p 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 8524 37809 a(The)563 b(v)-61 b(ariable)564
+b Fq($fulldoc)p 0 TeXcolorgray 0 TeXcolorgray 565 w Fv(determines)f
+(whether)h(the)f(program)h(pro)31 b(duces)563 b(a)g(full)6863
+39137 y(L)7156 38910 y Fp(A)7644 39137 y Fv(T)8258 39375
+y(E)8874 39137 y(X)541 b(\014le)g(with)i(header)e(and)g(pream)-31
+b(ble)542 b(\(when)g Fq($fulldoc)q(=1)p 0 TeXcolorgray
+0 TeXcolorgray Fv(\),)585 b(or)541 b(just)h(a)f(snipp)31
+b(et)6863 40465 y(to)370 b(b)31 b(e)369 b(included)h(in)f(a)h(larger)f
+(do)31 b(cumen)-31 b(t)370 b(\(when)g Fq($fulldoc)r(=0)p
+0 TeXcolorgray 0 TeXcolorgray Fv(\).)493 b(The)369 b(default)i(is)e(1.)
+8524 41794 y(The)416 b(v)-61 b(ariable)417 b Fq($documentheader)p
+0 TeXcolorgray 0 TeXcolorgray 418 w Fv(is)f(used)g(when)g
+Fq($fulldoc)p 0 TeXcolorgray 0 TeXcolorgray 417 w Fv(is)g(1.)634
+b(It)416 b(determines)6863 43122 y(the)337 b(do)31 b(cumen)-31
+b(t)339 b(class)e(of)g(the)g(resulting)354 b(L)24312
+42895 y Fp(A)24800 43122 y Fv(T)25414 43360 y(E)26029
+43122 y(X)337 b(\014le.)483 b(The)337 b(default)h(is)f
+Fq(article)h Fv(class,)344 b(set)6863 44450 y(b)-31 b(y)370
+b Fq(\\documentclass{article})s Fv(.)8524 45779 y(By)375
+b(default)h(the)f(pream)-31 b(ble)376 b(of)g(the)f(L)24152
+45552 y Fp(A)24640 45779 y Fv(T)25254 46017 y(E)25870
+45779 y(X)g(\014le)g(created)g(when)h Fq($fulldoc)p 0
+TeXcolorgray 0 TeXcolorgray 376 w Fv(is)f(1,)i(con-)6863
+47107 y(tains)391 b(only)f(the)g(line)h Fq(\\usepackage{pst-pdgr})h
+Fv(and,)k(if)390 b(the)g(language)i(c)-31 b(hosen)390
+b(is)f(not)6863 48435 y(English)331 b(\(see)f(Section)p
+0 TeXcolorgray 16796 48435 a
+SDict begin H.S end
+ 16796 48435 a 0 TeXcolorgray
+Fv(3.5)p 0 TeXcolorgray 18209 47722 a
+SDict begin H.R end
+ 18209 47722 a 18209
+48435 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.3.5) cvn H.B /ANN pdfmark end
+ 18209 48435 a 0 TeXcolorgray Fv(\),)340 b(the)330
+b(calls)h(of)416 b Fo(bab)31 b(el)330 b Fv(and)f Fo(inputenc)h
+Fv(pac)-31 b(k)-61 b(ages.)480 b(The)330 b(v)-61 b(ariable)6863
+49764 y Fq($addtopreamble)p 0 TeXcolorgray 0 TeXcolorgray
+2 w Fv(,)420 b(if)411 b(set,)420 b(ma)-31 b(y)411 b(con)-31
+b(tain)412 b(an)-31 b(y)410 b(other)h(L)30612 49537 y
+Fp(A)31100 49764 y Fv(T)31714 50002 y(E)32329 49764 y(X)f(co)31
+b(de)410 b(y)-31 b(ou)410 b(migh)-31 b(t)412 b(wish)e(to)6863
+51092 y(add)370 b(to)g(the)f(pream)-31 b(ble.)8524 52420
+y(The)396 b(v)-61 b(ariable)397 b Fq($printlegend)p 0
+TeXcolorgray 0 TeXcolorgray 397 w Fv(determines)g(whether)f(to)g(add)h
+(legend)f(to)h(the)f(p)31 b(edi-)6863 53749 y(gree.)493
+b(The)369 b(default)i(v)-61 b(alue)369 b(is)g(1,)h(and)g(the)f(legend)h
+(is)f(prin)-31 b(ted.)6863 55513 y
+SDict begin H.S end
+ 6863 55513 a 6863
+55513 a
+SDict begin 12 H.A end
+ 6863 55513 a 6863 55513 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.3.4) cvn /DEST pdfmark
+end
+ 6863 55513 a 1334 x
+Ft(3.4)1495 b(What)499 b(to)f(Prin)-42 b(t)6863 58891
+y Fv(The)335 b(next)h(groups)f(of)h(con\014guration)h(v)-61
+b(ariables)336 b(sets)e(the)i(information)i(to)e(b)31
+b(e)334 b(prin)-31 b(ted)336 b(in)6863 60219 y(the)247
+b(legend)f(and)h(on)f(the)h(p)31 b(edigree.)451 b(It)247
+b(consists)f(of)h(t)-31 b(w)g(o)248 b(arra)-31 b(ys:)431
+b(arra)-31 b(y)246 b Fq(@fieldsforlegend)p 0 TeXcolorgray
+0 TeXcolorgray 6863 61547 a Fv(is)359 b(the)f(list)i(of)f(\014elds)g
+(\(see)f(Section)p 0 TeXcolorgray 21850 61547 a
+SDict begin H.S end
+ 21850
+61547 a 0 TeXcolorgray Fv(4.2)p 0 TeXcolorgray 23263
+60834 a
+SDict begin H.R end
+ 23263 60834 a 23263 61547 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.2) cvn H.B /ANN pdfmark end
+ 23263 61547 a 0 TeXcolorgray
+Fv(\))i(whic)-31 b(h)360 b(are)e(included)h(in)g(the)g(legend,)j(and)d
+(arra)-31 b(y)6863 62876 y Fq(@fieldsforchart)p 0 TeXcolorgray
+0 TeXcolorgray 463 w Fv(is)460 b(the)h(list)g(of)g(\014elds)g(to)g
+(prin)-31 b(t)461 b(near)f(eac)-31 b(h)461 b(no)31 b(de)461
+b(in)f(the)h(p)31 b(edigree)6863 64204 y(\(Listing)p
+0 TeXcolorgray 11005 64204 a
+SDict begin H.S end
+ 11005 64204 a 0 TeXcolorgray
+Fv(2)p 0 TeXcolorgray 11558 63491 a
+SDict begin H.R end
+ 11558 63491 a 11558
+64204 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.2) cvn H.B /ANN pdfmark end
+ 11558 64204 a 0 TeXcolorgray Fv(\).)493 b(Setting)371
+b Fq(@fieldsforchart)p 0 TeXcolorgray 0 TeXcolorgray
+372 w Fv(to)f(empt)-31 b(y)370 b(arra)-31 b(y:)6863 65145
+y
+SDict begin H.S end
+ 6863 65145 a 6863 65145 a
+SDict begin 12 H.A end
+ 6863 65145 a 6863 65145 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-5) cvn /DEST pdfmark
+end
+
+6863 65145 a 6863 66197 a
+SDict begin H.S end
+ 6863 66197 a 6863 66197 a
+SDict begin 12 H.A end
+ 6863
+66197 a 6863 66197 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-5.1) cvn /DEST pdfmark
+end
+ 6863 66197 a 109 w Fq(@)109 b(f)g(i)g(e)g(l)g(d)g
+(s)g(f)g(o)g(r)g(c)g(h)g(a)g(r)g(t)866 b(=)843 b(\()87
+b(\))g(;)p 0 TeXcolorgray 0 TeXcolorgray 25681 70071
+a Fv(7)p 0 TeXcolorgray eop end
+%%Page: 8 8
+TeXDict begin 8 7 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 TeXcolorgray
+6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752 1660 a 6752
+1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.8) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 6863 6531 a
+SDict begin H.S end
+ 6863 6531 a 6863 6531 a
+SDict begin 12 H.A end
+ 6863
+6531 a 6863 6531 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.2) cvn /DEST pdfmark
+end
+ 6863 6531 a 6863 7461 a
+SDict begin H.S end
+ 6863 7461
+a 6863 7461 a
+SDict begin 12 H.A end
+ 6863 7461 a 6863 7461 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.1) cvn /DEST pdfmark
+end
+ 6863 7461 a 58
+w Fj(#)856 b(F)100 b(i)g(e)g(l)g(d)g(s)873 b(t)77 b(o)877
+b(i)102 b(n)g(c)g(l)g(u)g(d)g(e)876 b(i)77 b(n)863 b(t)87
+b(h)g(e)885 b(l)100 b(e)g(g)g(e)g(n)g(d)157 b(.)6863
+8789 y
+SDict begin H.S end
+ 6863 8789 a 6863 8789 a
+SDict begin 12 H.A end
+ 6863 8789 a 6863 8789
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.2) cvn /DEST pdfmark
+end
+ 6863 8789 a 58 w Fj(#)856 b(D)100 b(e)g(l)g(e)g(t)g(e)889
+b(N)93 b(a)g(m)g(e)878 b(f)87 b(o)g(r)887 b(p)102 b(r)g(i)g(v)g(a)g(c)g
+(y)904 b(p)106 b(r)g(o)g(t)g(e)g(c)g(t)g(i)g(o)g(n)162
+b(.)6863 10118 y
+SDict begin H.S end
+ 6863 10118 a 6863 10118 a
+SDict begin 12 H.A end
+ 6863 10118
+a 6863 10118 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.3) cvn /DEST pdfmark
+end
+ 6863 10118 a 58 w Fj(#)6863 11446 y
+SDict begin H.S end
+ 6863
+11446 a 6863 11446 a
+SDict begin 12 H.A end
+ 6863 11446 a 6863 11446 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.4) cvn /DEST pdfmark
+end
+ 6863 11446
+a 109 w Fq(@)109 b(f)g(i)g(e)g(l)g(d)g(s)g(f)g(o)g(r)g(l)g(e)g(g)g(e)g
+(n)g(d)874 b(=)833 b(q)77 b(w)136 b(\()152 b(N)93 b(a)g(m)g(e)878
+b(D)87 b(o)g(B)872 b(D)87 b(o)g(D)887 b(C)102 b(o)g(m)g(m)g(e)g(n)g(t)
+179 b(\))77 b(;)6863 12774 y
+SDict begin H.S end
+ 6863 12774 a 6863 12774
+a
+SDict begin 12 H.A end
+ 6863 12774 a 6863 12774 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.5) cvn /DEST pdfmark
+end
+ 6863 12774 a 6863 14103 a
+SDict begin H.S end
+
+6863 14103 a 6863 14103 a
+SDict begin 12 H.A end
+ 6863 14103 a 6863 14103 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.6) cvn /DEST pdfmark
+end
+ 6863
+14103 a 58 w Fj(#)6863 15431 y
+SDict begin H.S end
+ 6863 15431 a 6863 15431
+a
+SDict begin 12 H.A end
+ 6863 15431 a 6863 15431 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.7) cvn /DEST pdfmark
+end
+ 6863 15431 a 58 w Fj(#)856
+b(F)100 b(i)g(e)g(l)g(d)g(s)873 b(t)77 b(o)863 b(p)87
+b(u)g(t)863 b(a)77 b(t)863 b(t)87 b(h)g(e)878 b(n)93
+b(o)g(d)g(e)152 b(.)6863 16759 y
+SDict begin H.S end
+ 6863 16759 a 6863 16759
+a
+SDict begin 12 H.A end
+ 6863 16759 a 6863 16759 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.8) cvn /DEST pdfmark
+end
+ 6863 16759 a 58 w Fj(#)856
+b(D)100 b(e)g(l)g(e)g(t)g(e)889 b(N)93 b(a)g(m)g(e)878
+b(f)87 b(o)g(r)887 b(p)102 b(r)g(i)g(v)g(a)g(c)g(y)904
+b(p)106 b(r)g(o)g(t)g(e)g(c)g(t)g(i)g(o)g(n)162 b(.)6863
+18088 y
+SDict begin H.S end
+ 6863 18088 a 6863 18088 a
+SDict begin 12 H.A end
+ 6863 18088 a 6863 18088
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.9) cvn /DEST pdfmark
+end
+ 6863 18088 a 58 w Fj(#)6863 19416 y
+SDict begin H.S end
+ 6863 19416 a 6863
+19416 a
+SDict begin 12 H.A end
+ 6863 19416 a 6863 19416 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.10) cvn /DEST pdfmark
+end
+ 6863 19416 a 109 w
+Fq(@)109 b(f)g(i)g(e)g(l)g(d)g(s)g(f)g(o)g(r)g(c)g(h)g(a)g(r)g(t)866
+b(=)834 b(q)77 b(w)136 b(\()151 b(N)93 b(a)g(m)g(e)171
+b(\))77 b(;)p 0 TeXcolorgray 0 TeXcolorgray 12632 21851
+a Fv(Listing)370 b(2:)493 b(Con\014guration)372 b(File:)493
+b(Cho)31 b(osing)371 b(Fields)e(to)h(Prin)-31 b(t)p 0
+TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+6863 27159 a(prev)g(en)g(ts)369 b(putting)i(additional)i(information)f
+(on)d(the)h(p)31 b(edigrees.)8524 28487 y(The)549 b(\014eld)h(names)g
+(are)f(describ)31 b(ed)548 b(in)i(Section)p 0 TeXcolorgray
+29760 28487 a
+SDict begin H.S end
+ 29760 28487 a 0 TeXcolorgray Fv(4.2)p 0
+TeXcolorgray 31173 27774 a
+SDict begin H.R end
+ 31173 27774 a 31173 28487
+a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.2) cvn H.B /ANN pdfmark end
+ 31173 28487 a 0 TeXcolorgray Fv(.)1034 b(Note)551 b(that)f
+Fq(AgeAtDeath)h Fv(is)6863 29815 y(a)479 b(sp)31 b(ecial)478
+b(\014eld:)712 b(it)479 b(is)f(the)g(age)h(at)g(death)g(\(or)g(empt)-31
+b(y\))480 b(calculated)g(as)e(the)h(di\013erence)6863
+31144 y(b)31 b(et)-31 b(w)g(een)370 b(the)g(death)g(date)f(and)h(the)f
+(birth)h(date.)6863 32693 y
+SDict begin H.S end
+ 6863 32693 a 6863 32693 a
+SDict begin 12 H.A end
+
+6863 32693 a 6863 32693 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.3.5) cvn /DEST pdfmark
+end
+ 6863 32693 a 1549 x Ft(3.5)1495
+b(Language)500 b(and)f(Enco)42 b(ding)6863 36286 y Fv(The)460
+b(next)f(group)h(of)f(v)-61 b(ariables)460 b(describ)31
+b(es)458 b(the)h(language)i(and)f(enco)31 b(ding)460
+b(of)f(the)h(data)6863 37614 y(\014le)466 b(input)h(and)f(the)g(L)16337
+37387 y Fp(A)16825 37614 y Fv(T)17439 37852 y(E)18055
+37614 y(X)g(output.)784 b(They)467 b(are)f(sho)-31 b(wn)466
+b(in)g(Listing)p 0 TeXcolorgray 37253 37614 a
+SDict begin H.S end
+ 37253 37614
+a 0 TeXcolorgray Fv(3)p 0 TeXcolorgray 37806 36901 a
+SDict begin H.R end
+
+37806 36901 a 37806 37614 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.3) cvn H.B /ANN pdfmark end
+ 37806 37614 a 0 TeXcolorgray
+Fv(.)783 b(The)466 b(v)-61 b(ariable)6863 38942 y Fq($language)p
+0 TeXcolorgray 0 TeXcolorgray 508 w Fv(at)507 b(presen)-31
+b(t)506 b(can)g(ha)-31 b(v)g(e)508 b(one)e(of)h(t)-31
+b(w)g(o)508 b(v)-61 b(alues:)768 b Fq(english)507 b Fv(\(the)g
+(default\))h(or)6863 40271 y Fq(russian)q Fv(.)582 b(If)399
+b(the)h(v)-61 b(alue)399 b(is)g Fq(russian)q Fv(,)407
+b(the)400 b(output)g(do)31 b(cumen)-31 b(t)400 b(pream)-31
+b(ble)400 b(includes)g(the)6863 41599 y(line)6863 42263
+y
+SDict begin H.S end
+ 6863 42263 a 6863 42263 a
+SDict begin 12 H.A end
+ 6863 42263 a 6863 42263 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-6) cvn /DEST pdfmark
+end
+
+6863 42263 a 6863 43592 a
+SDict begin H.S end
+ 6863 43592 a 6863 43592 a
+SDict begin 12 H.A end
+ 6863
+43592 a 6863 43592 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-6.1) cvn /DEST pdfmark
+end
+ 6863 43592 a 58 w Fq(\\)164 b(u)106
+b(s)g(e)g(p)g(a)g(c)g(k)g(a)g(g)g(e)162 b([)e(r)102 b(u)g(s)g(s)g(i)g
+(a)g(n)179 b(])77 b({)175 b(b)97 b(a)g(b)g(e)g(l)155
+b(})p 0 TeXcolorgray 0 TeXcolorgray 6863 45584 a Fv(The)301
+b(v)-61 b(ariable)302 b Fq($encoding)p 0 TeXcolorgray
+0 TeXcolorgray 302 w Fv(sets)e(the)h(enco)31 b(ding)301
+b(of)h(the)e(L)30518 45357 y Fp(A)31006 45584 y Fv(T)31620
+45822 y(E)32236 45584 y(X)h(\014le)g(if)g(the)g(language)i(is)d(not)
+6863 46912 y(English.)639 b(By)418 b(default)h(it)f(is)g
+Fq(cp1251)p Fv(,)430 b(if)418 b(the)g(language)i(is)d(Russian.)638
+b(Set)418 b(it)g(to)g Fq(koi8-r)6863 48241 y Fv(to)371
+b(c)-31 b(ho)31 b(ose)370 b(K)-31 b(OI8)371 b(enco)31
+b(ding.)496 b(It)370 b(is)g(w)-31 b(orth)371 b(to)g(note)g(that)g(the)g
+(data)g(\014le)f(and)h(the)f(output)6863 49569 y(L)7156
+49342 y Fp(A)7644 49569 y Fv(T)8258 49807 y(E)8874 49569
+y(X)f(\014le)g(are)g(assumed)h(to)g(ha)-31 b(v)g(e)370
+b(the)f(same)h(language)h(and)e(enco)31 b(ding.)8524
+50898 y(If)252 b Fq($language)j Fv(is)e(not)g Fq(english)q
+Fv(,)277 b(the)253 b(program)h(recognizes)f(b)31 b(oth)254
+b(English)g(and)f(nativ)-31 b(e)6863 52226 y(names)370
+b(of)f(the)h(\014elds)f(in)g(the)h(data)g(\014le)g(\(see)f(Section)p
+0 TeXcolorgray 29851 52226 a
+SDict begin H.S end
+ 29851 52226 a 0 TeXcolorgray
+Fv(4.2)p 0 TeXcolorgray 31264 51513 a
+SDict begin H.R end
+ 31264 51513 a 31264
+52226 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.2) cvn H.B /ANN pdfmark end
+ 31264 52226 a 0 TeXcolorgray Fv(\).)6863 54052
+y
+SDict begin H.S end
+ 6863 54052 a 6863 54052 a
+SDict begin 12 H.A end
+ 6863 54052 a 6863 54052 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.3.6) cvn /DEST pdfmark
+end
+
+6863 54052 a 1273 x Ft(3.6)1495 b(F)-125 b(on)-42 b(ts)6863
+57368 y Fv(There)421 b(are)f(t)-31 b(w)g(o)423 b(kinds)e(of)g(text)h
+(on)e(the)h(c)-31 b(hart:)597 b(the)421 b(text)g(ab)31
+b(o)-31 b(v)g(e)422 b(a)f(no)31 b(de)421 b(and)g(the)g(text)6863
+58696 y(b)31 b(elo)-31 b(w)314 b(a)f(no)31 b(de)p 0 TeXcolorgray
+13115 58696 a
+SDict begin H.S end
+ 13115 58696 a -401 x Fp(4)13612 58696 y
+SDict begin 12 H.L end
+
+13612 58696 a 13612 58696 a
+SDict begin [/Subtype /Link/Dest (Hfootnote.4) cvn/H /I/Border [0 0
+0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 13612 58696 a 0 TeXcolorgray
+Fv(.)473 b(The)313 b(fon)-31 b(ts)314 b(for)f(them)g(are)g(set)f(b)-31
+b(y)313 b(the)g(v)-61 b(ariables)314 b Fq($belowtextfont)p
+0 TeXcolorgray 0 TeXcolorgray 314 w Fv(\(b)-31 b(y)6863
+60025 y(default)470 b Fq(\\small)q Fv(\))e(and)h Fq($abovetextfont)p
+0 TeXcolorgray 0 TeXcolorgray 470 w Fv(\(b)-31 b(y)469
+b(default)h Fq(\\scriptsize)q Fv(\).)790 b(An)-31 b(y)484
+b(L)42505 59798 y Fp(A)42993 60025 y Fv(T)43607 60263
+y(E)44223 60025 y(X)6863 61353 y(fon)-31 b(t)398 b(declaration)g(lik)
+-31 b(e)398 b Fq(\\sffamily)g Fv(or)e Fq(\\itshape)h
+Fv(is)g(allo)-31 b(w)g(ed)399 b(here.)573 b(See)397 b(Listing)p
+0 TeXcolorgray 42778 61353 a
+SDict begin H.S end
+ 42778 61353 a 0 TeXcolorgray
+Fv(4)p 0 TeXcolorgray 43331 60640 a
+SDict begin H.R end
+ 43331 60640 a 43331
+61353 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.4) cvn H.B /ANN pdfmark end
+ 43331 61353 a 0 TeXcolorgray 397 w Fv(for)6863
+62681 y(an)370 b(example)g(of)g(usage.)p 0 TeXcolorgray
+6863 63605 15276 45 v 8096 64321 a Fm(4)p 0 TeXcolorgray
+8557 64633 a
+SDict begin H.S end
+ 8557 64633 a 8557 64633 a
+SDict begin H.R end
+ 8557 64633 a 8557
+64633 a
+SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.4) cvn /DEST pdfmark
+end
+ 8557 64633 a 0 TeXcolorgray Fl(The)303 b(T)11004
+64824 y(E)11526 64633 y(X)g(pac)-26 b(k)-52 b(age)305
+b([)p 0 TeXcolorgray 16288 64633 a
+SDict begin H.S end
+ 16288 64633 a 0 TeXcolorgray
+Fl(2)p 0 TeXcolorgray 16758 64063 a
+SDict begin H.R end
+ 16758 64063 a 16758
+64633 a
+SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (cite.pst-pdgr06) cvn H.B /ANN pdfmark end
+ 16758 64633 a 0 TeXcolorgray Fl(])f(also)h(allo)-26
+b(ws)305 b(to)f(place)h(text)e(at)h(b)26 b(oth)304 b(sides)g(of)f(the)h
+(no)26 b(de,)306 b(but)d(the)h(program)6863 65685 y Fi(p)26
+b(edigree)315 b Fl(curren)-26 b(tly)313 b(do)26 b(es)314
+b(not)g(use)g(this)g(feature.)p 0 TeXcolorgray 0 TeXcolorgray
+25681 70071 a Fv(8)p 0 TeXcolorgray eop end
+%%Page: 9 9
+TeXDict begin 9 8 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 TeXcolorgray
+6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752 1660 a 6752
+1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.9) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 6863 6531 a
+SDict begin H.S end
+ 6863 6531 a 6863 6531 a
+SDict begin 12 H.A end
+ 6863
+6531 a 6863 6531 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.3) cvn /DEST pdfmark
+end
+ 6863 6531 a 6863 7461 a
+SDict begin H.S end
+ 6863 7461
+a 6863 7461 a
+SDict begin 12 H.A end
+ 6863 7461 a 6863 7461 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.1) cvn /DEST pdfmark
+end
+ 6863 7461 a 58
+w Fj(#)6863 8789 y
+SDict begin H.S end
+ 6863 8789 a 6863 8789 a
+SDict begin 12 H.A end
+ 6863 8789
+a 6863 8789 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.2) cvn /DEST pdfmark
+end
+ 6863 8789 a 58 w Fj(#)859 b(L)103 b(a)g(n)g(g)g(u)g(a)g
+(g)g(e)6863 10118 y
+SDict begin H.S end
+ 6863 10118 a 6863 10118 a
+SDict begin 12 H.A end
+ 6863 10118
+a 6863 10118 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.3) cvn /DEST pdfmark
+end
+ 6863 10118 a 58 w Fj(#)6863 11446 y
+SDict begin H.S end
+ 6863
+11446 a 6863 11446 a
+SDict begin 12 H.A end
+ 6863 11446 a 6863 11446 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.4) cvn /DEST pdfmark
+end
+ 6863 11446
+a 58 w Fj(#)861 b Fh($)105 b Fj(l)g(a)g(n)g(g)g(u)g(a)g(g)g(e)180
+b(=)77 b(")180 b(r)102 b(u)g(s)g(s)g(i)g(a)g(n)178 b(")77
+b(;)6863 12774 y
+SDict begin H.S end
+ 6863 12774 a 6863 12774 a
+SDict begin 12 H.A end
+ 6863 12774
+a 6863 12774 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.5) cvn /DEST pdfmark
+end
+ 6863 12774 a 105 w Fq($)105 b(l)g(a)g(n)g(g)g(u)g(a)g(g)
+g(e)161 b(=)116 b(")160 b(e)102 b(n)g(g)g(l)g(i)g(s)g(h)159
+b(")117 b(;)6863 14103 y
+SDict begin H.S end
+ 6863 14103 a 6863 14103 a
+SDict begin 12 H.A end
+ 6863
+14103 a 6863 14103 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.6) cvn /DEST pdfmark
+end
+ 6863 14103 a 6863 15431 a
+SDict begin H.S end
+ 6863 15431
+a 6863 15431 a
+SDict begin 12 H.A end
+ 6863 15431 a 6863 15431 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.7) cvn /DEST pdfmark
+end
+ 6863 15431 a
+58 w Fj(#)6863 16759 y
+SDict begin H.S end
+ 6863 16759 a 6863 16759 a
+SDict begin 12 H.A end
+ 6863
+16759 a 6863 16759 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.8) cvn /DEST pdfmark
+end
+ 6863 16759 a 58 w Fj(#)859 b(O)103
+b(v)g(e)g(r)g(r)g(i)g(d)g(e)892 b(t)87 b(h)g(e)888 b(e)103
+b(n)g(c)g(o)g(d)g(i)g(n)g(g)6863 18088 y
+SDict begin H.S end
+ 6863 18088 a
+6863 18088 a
+SDict begin 12 H.A end
+ 6863 18088 a 6863 18088 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.9) cvn /DEST pdfmark
+end
+ 6863 18088 a 58
+w Fj(#)6863 19416 y
+SDict begin H.S end
+ 6863 19416 a 6863 19416 a
+SDict begin 12 H.A end
+ 6863 19416
+a 6863 19416 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.10) cvn /DEST pdfmark
+end
+ 6863 19416 a 58 w Fj(#)861 b Fh($)105
+b Fj(e)g(n)g(c)g(o)g(d)g(i)g(n)g(g)180 b(=)77 b(")156
+b(k)77 b(o)g(i)g(8)215 b(-)116 b(r)136 b(")77 b(;)p 0
+TeXcolorgray 0 TeXcolorgray 10345 21851 a Fv(Listing)371
+b(3:)493 b(Con\014guration)372 b(File:)493 b(Cho)31 b(osing)370
+b(Language)h(and)f(Enco)31 b(ding)p 0 TeXcolorgray 0
+TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 6863 25830
+a
+SDict begin H.S end
+ 6863 25830 a 6863 25830 a
+SDict begin 12 H.A end
+ 6863 25830 a 6863 25830 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.4) cvn /DEST pdfmark
+end
+
+6863 25830 a 6863 26760 a
+SDict begin H.S end
+ 6863 26760 a 6863 26760 a
+SDict begin 12 H.A end
+ 6863
+26760 a 6863 26760 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.4.1) cvn /DEST pdfmark
+end
+ 6863 26760 a 58 w Fj(#)6863 28088
+y
+SDict begin H.S end
+ 6863 28088 a 6863 28088 a
+SDict begin 12 H.A end
+ 6863 28088 a 6863 28088 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.4.2) cvn /DEST pdfmark
+end
+
+6863 28088 a 58 w Fj(#)853 b(F)97 b(o)g(n)g(t)g(s)881
+b(f)87 b(o)g(r)873 b(t)87 b(h)g(e)882 b(c)97 b(h)g(a)g(r)g(t)6863
+29417 y
+SDict begin H.S end
+ 6863 29417 a 6863 29417 a
+SDict begin 12 H.A end
+ 6863 29417 a 6863 29417
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.4.3) cvn /DEST pdfmark
+end
+ 6863 29417 a 58 w Fj(#)6863 30745 y
+SDict begin H.S end
+ 6863 30745 a 6863
+30745 a
+SDict begin 12 H.A end
+ 6863 30745 a 6863 30745 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.4.4) cvn /DEST pdfmark
+end
+ 6863 30745 a 108 w
+Fq($)108 b(b)g(e)g(l)g(o)g(w)g(t)g(e)g(x)g(t)g(f)g(o)g(n)g(t)176
+b(=)135 b(')97 b(\\)156 b(s)97 b(m)g(a)g(l)g(l)174 b(')97
+b(;)6863 32074 y
+SDict begin H.S end
+ 6863 32074 a 6863 32074 a
+SDict begin 12 H.A end
+ 6863 32074
+a 6863 32074 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.4.5) cvn /DEST pdfmark
+end
+ 6863 32074 a 108 w Fq($)108 b(a)g(b)g(o)g(v)g(e)g(t)g(e)
+g(x)g(t)g(f)g(o)g(n)g(t)176 b(=)135 b(')97 b(\\)164 b(s)106
+b(c)g(r)g(i)g(p)g(t)g(s)g(i)g(z)g(e)182 b(')97 b(;)p
+0 TeXcolorgray 0 TeXcolorgray 14870 34509 a Fv(Listing)371
+b(4:)492 b(Con\014guration)372 b(File:)493 b(Cho)31 b(osing)371
+b(F)-92 b(on)-31 b(ts)p 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 6863 38709 a
+SDict begin H.S end
+ 6863 38709 a 6863 38709 a
+SDict begin 12 H.A end
+
+6863 38709 a 6863 38709 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.3.7) cvn /DEST pdfmark
+end
+ 6863 38709 a 1107 x Ft(3.7)1495
+b(Lengths)6863 41859 y Fv(The)391 b(next)g(group)g(of)g(v)-61
+b(ariables)392 b(\(Listing)p 0 TeXcolorgray 24891 41859
+a
+SDict begin H.S end
+ 24891 41859 a 0 TeXcolorgray Fv(5)p 0 TeXcolorgray
+25444 41146 a
+SDict begin H.R end
+ 25444 41146 a 25444 41859 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.5) cvn H.B /ANN pdfmark end
+ 25444 41859
+a 0 TeXcolorgray Fv(\))g(sets)e(the)h(distances)g(b)31
+b(et)-31 b(w)g(een)392 b(the)f(k)-31 b(ey)391 b(ele-)6863
+43188 y(men)-31 b(ts)283 b(of)f(the)h(c)-31 b(hart.)464
+b(All)283 b(lengths)g(are)f(in)g(cen)-31 b(timeters)283
+b(\(actually)-92 b(,)303 b(in)282 b Fq(unit)q Fv(s,)299
+b(are)282 b(de\014ned)6863 44516 y(in)370 b(PST)-92 b(ric)-31
+b(ks)369 b([)p 0 TeXcolorgray 13129 44516 a
+SDict begin H.S end
+ 13129 44516
+a 0 TeXcolorgray Fv(3)p 0 TeXcolorgray 13682 43803 a
+SDict begin H.R end
+
+13682 43803 a 13682 44516 a
+SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (cite.PSTricks93) cvn H.B /ANN pdfmark end
+ 13682 44516 a 0 TeXcolorgray
+1 w Fv(]\).)8524 45844 y(The)419 b(v)-61 b(ariable)421
+b Fq($descarmA)p 0 TeXcolorgray 0 TeXcolorgray 421 w
+Fv(sets)e(the)h(length)h(of)f(the)g(\014rst)f(segmen)-31
+b(t)421 b(of)f(the)g(descen)-31 b(t)6863 47173 y(line:)526
+b(from)387 b(the)f(paren)-31 b(t)386 b(no)31 b(de)385
+b(to)i(the)f(sibs)f(line,)391 b(as)385 b(measured)h(from)g(the)g(cen)
+-31 b(ter)386 b(of)g(the)6863 48501 y(paren)-31 b(t)370
+b(\(see)f([)p 0 TeXcolorgray 12868 48501 a
+SDict begin H.S end
+ 12868 48501
+a 0 TeXcolorgray Fv(2)p 0 TeXcolorgray 13421 47788 a
+SDict begin H.R end
+
+13421 47788 a 13421 48501 a
+SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (cite.pst-pdgr06) cvn H.B /ANN pdfmark end
+ 13421 48501 a 0 TeXcolorgray
+1 w Fv(])g(for)h(more)f(details\).)495 b(By)369 b(default)i(it)f(is)f
+(0.8.)8524 49829 y(The)327 b(v)-61 b(ariables)329 b Fq($xdist)p
+0 TeXcolorgray 0 TeXcolorgray 328 w Fv(and)f Fq($ydist)p
+0 TeXcolorgray 0 TeXcolorgray 328 w Fv(set)f(the)h(distances)g(b)31
+b(et)-31 b(w)g(een)328 b(the)g(no)31 b(des)327 b(along)6863
+51158 y(horizon)-31 b(tal)372 b(and)d(v)-31 b(ertical)371
+b(axes)e(corresp)31 b(ondingly)-92 b(.)494 b(The)369
+b(default)i(for)e(b)31 b(oth)370 b(is)f(2.)6863 52922
+y
+SDict begin H.S end
+ 6863 52922 a 6863 52922 a
+SDict begin 12 H.A end
+ 6863 52922 a 6863 52922 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.3.8) cvn /DEST pdfmark
+end
+
+6863 52922 a 1335 x Ft(3.8)1495 b(Scaling)500 b(and)f(Rotation)6863
+56300 y Fv(Complex)435 b(p)31 b(edigrees)432 b(migh)-31
+b(t)434 b(b)31 b(e)432 b(to)31 b(o)434 b(large)f(to)g(\014t)g(on)g(a)f
+(page.)684 b(In)432 b(this)h(case)f(a)h(scaling)6863
+57628 y(and)451 b(\(or\))h(rotation)h(migh)-31 b(t)452
+b(b)31 b(e)451 b(necessary)f(to)h(prin)-31 b(t)451 b(the)g(c)-31
+b(hart.)738 b(Of)451 b(course,)471 b(c)-31 b(hanging)6863
+58957 y(the)404 b(lengths)h(describ)31 b(ed)403 b(in)h(Section)p
+0 TeXcolorgray 22826 58957 a
+SDict begin H.S end
+ 22826 58957 a 0 TeXcolorgray
+Fv(3.7)p 0 TeXcolorgray 24239 58243 a
+SDict begin H.R end
+ 24239 58243 a 24239
+58957 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.3.7) cvn H.B /ANN pdfmark end
+ 24239 58957 a 0 TeXcolorgray 405 w Fv(migh)-31
+b(t)406 b(also)e(help,)414 b(but)404 b(the)g(scaling)h(describ)31
+b(ed)6863 60285 y(here)369 b(also)h(c)-31 b(hanged)370
+b(the)f(size)g(of)h(the)f(p)31 b(edigree)370 b(sym)-31
+b(b)31 b(ols.)8524 61613 y(There)426 b(are)h(three)f(v)-61
+b(ariables)427 b(con)-31 b(trolling)430 b(the)d(scaling)h(and)f
+(rotation)i(of)e(p)31 b(edigrees:)6863 62942 y Fq($maxW)p
+0 TeXcolorgray 0 TeXcolorgray 1 w Fv(,)368 b Fq($maxH)p
+0 TeXcolorgray 0 TeXcolorgray 368 w Fv(and)g Fq($rotate)p
+0 TeXcolorgray 0 TeXcolorgray 368 w Fv(\(see)g(Listing)p
+0 TeXcolorgray 26231 62942 a
+SDict begin H.S end
+ 26231 62942 a 0 TeXcolorgray
+Fv(6)p 0 TeXcolorgray 26784 62228 a
+SDict begin H.R end
+ 26784 62228 a 26784
+62942 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.6) cvn H.B /ANN pdfmark end
+ 26784 62942 a 0 TeXcolorgray Fv(\).)493 b(The)368
+b(v)-61 b(ariables)368 b Fq($maxW)p 0 TeXcolorgray 0
+TeXcolorgray 368 w Fv(and)g Fq($maxH)p 0 TeXcolorgray
+0 TeXcolorgray 368 w Fv(are)6863 64270 y(the)359 b(maximal)i(width)e
+(and)g(heigh)-31 b(t)359 b(of)g(the)f(c)-31 b(hart)359
+b(in)g(cen)-31 b(timeters.)490 b(Setting)360 b(an)-31
+b(y)359 b(of)f(them)6863 65598 y(to)370 b(zero)f(disables)h(scaling.)p
+0 TeXcolorgray 25681 70071 a(9)p 0 TeXcolorgray eop end
+%%Page: 10 10
+TeXDict begin 10 9 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 TeXcolorgray
+6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752 1660 a 6752
+1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.10) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 6863 6531 a
+SDict begin H.S end
+ 6863 6531 a 6863 6531 a
+SDict begin 12 H.A end
+ 6863
+6531 a 6863 6531 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.5) cvn /DEST pdfmark
+end
+ 6863 6531 a 6863 7461 a
+SDict begin H.S end
+ 6863 7461
+a 6863 7461 a
+SDict begin 12 H.A end
+ 6863 7461 a 6863 7461 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.1) cvn /DEST pdfmark
+end
+ 6863 7461 a 58
+w Fj(#)6863 8789 y
+SDict begin H.S end
+ 6863 8789 a 6863 8789 a
+SDict begin 12 H.A end
+ 6863 8789
+a 6863 8789 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.2) cvn /DEST pdfmark
+end
+ 6863 8789 a 58 w Fj(#)1557 b(d)103 b(e)g(s)g(c)g(a)g(r)g
+(m)g(A)881 b(i)77 b(n)853 b(c)77 b(m)6863 10118 y
+SDict begin H.S end
+ 6863
+10118 a 6863 10118 a
+SDict begin 12 H.A end
+ 6863 10118 a 6863 10118 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.3) cvn /DEST pdfmark
+end
+ 6863 10118
+a 58 w Fj(#)6863 11446 y
+SDict begin H.S end
+ 6863 11446 a 6863 11446 a
+SDict begin 12 H.A end
+ 6863
+11446 a 6863 11446 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.4) cvn /DEST pdfmark
+end
+ 6863 11446 a 105 w Fq($)105 b(d)g(e)g(s)g(c)g(a)g
+(r)g(m)g(A)858 b(=)849 b(0)93 b(.)g(8)g(;)6863 12774
+y
+SDict begin H.S end
+ 6863 12774 a 6863 12774 a
+SDict begin 12 H.A end
+ 6863 12774 a 6863 12774 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.5) cvn /DEST pdfmark
+end
+
+6863 12774 a 6863 14103 a
+SDict begin H.S end
+ 6863 14103 a 6863 14103 a
+SDict begin 12 H.A end
+ 6863
+14103 a 6863 14103 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.6) cvn /DEST pdfmark
+end
+ 6863 14103 a 58 w Fj(#)6863 15431
+y
+SDict begin H.S end
+ 6863 15431 a 6863 15431 a
+SDict begin 12 H.A end
+ 6863 15431 a 6863 15431 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.7) cvn /DEST pdfmark
+end
+
+6863 15431 a 58 w Fj(#)861 b(D)105 b(i)g(s)g(t)g(a)g(n)g(c)g(e)g(s)901
+b(b)102 b(e)g(t)g(w)g(e)g(e)g(n)896 b(n)97 b(o)g(d)g(e)g(s)852
+b(\()136 b(i)77 b(n)853 b(c)77 b(m)137 b(\))6863 16759
+y
+SDict begin H.S end
+ 6863 16759 a 6863 16759 a
+SDict begin 12 H.A end
+ 6863 16759 a 6863 16759 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.8) cvn /DEST pdfmark
+end
+
+6863 16759 a 58 w Fj(#)6863 18088 y
+SDict begin H.S end
+ 6863 18088 a 6863
+18088 a
+SDict begin 12 H.A end
+ 6863 18088 a 6863 18088 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.9) cvn /DEST pdfmark
+end
+ 6863 18088 a 100 w
+Fq($)100 b(x)g(d)g(i)g(s)g(t)186 b(=)87 b(2)g(;)6863
+19416 y
+SDict begin H.S end
+ 6863 19416 a 6863 19416 a
+SDict begin 12 H.A end
+ 6863 19416 a 6863 19416
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.10) cvn /DEST pdfmark
+end
+ 6863 19416 a 100 w Fq($)100 b(y)g(d)g(i)g(s)g(t)186
+b(=)87 b(2)g(;)p 0 TeXcolorgray 0 TeXcolorgray 14271
+21851 a Fv(Listing)370 b(5:)493 b(Con\014guration)372
+b(File:)493 b(Cho)31 b(osing)370 b(Lengths)p 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 8524 27159 a(The)412 b(scaling)h(w)-31
+b(orks)413 b(as)f(follo)-31 b(ws.)623 b(If)412 b(b)31
+b(oth)412 b(heigh)-31 b(t)414 b(and)e(width)h(of)g(the)f(p)31
+b(edigree)412 b(are)6863 28487 y(smaller)358 b(than)f(the)g(limits,)362
+b(no)357 b(scaling)h(is)f(done.)489 b(In)356 b(the)h(other)g(case)g
+(the)g(c)-31 b(hart)357 b(is)g(scaled)6863 29815 y(while)385
+b(preserving)d(the)i(asp)31 b(ect)383 b(ratio)i(\(b)-31
+b(y)384 b(c)-31 b(hanging)385 b(the)e(v)-61 b(alue)384
+b(of)g Fq(unit)p Fv(,)j(see)c([)p 0 TeXcolorgray 40966
+29815 a
+SDict begin H.S end
+ 40966 29815 a 0 TeXcolorgray Fv(3)p 0 TeXcolorgray
+41519 29102 a
+SDict begin H.R end
+ 41519 29102 a 41519 29815 a
+SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (cite.PSTricks93) cvn H.B /ANN pdfmark end
+ 41519 29815
+a 0 TeXcolorgray 1 w Fv(]\))h(to)g(\014t)6863 31144 y(in)-31
+b(to)371 b(the)e(limits.)8524 32472 y(The)552 b(v)-61
+b(ariable)554 b Fq($rotate)g Fv(sets)e(the)h(orien)-31
+b(tation)555 b(of)f(the)f(c)-31 b(hart.)1043 b(If)553
+b(it)g(is)g Fq(no)p Fv(,)599 b(the)6863 33800 y(p)31
+b(edigree)485 b(is)h(nev)-31 b(er)485 b(rotated,)516
+b(while)487 b(if)e(it)i Fq(yes)p Fv(,)515 b(it)486 b(is)f(alw)-31
+b(a)g(ys)488 b(rotated)e(ninet)-31 b(y)487 b(degrees)6863
+35129 y(coun)-31 b(terclo)31 b(c)-31 b(kwise.)873 b(If)495
+b(this)h(v)-61 b(ariable)496 b(is)f(set)g(to)h Fq(maybe)g
+Fv(\(the)g(default\),)529 b(the)495 b(program)6863 36457
+y(compares)308 b(the)h(scaling)g(for)f(the)g(non-rotated)i(and)e
+(rotated)h(p)31 b(edigrees,)321 b(and)308 b(c)-31 b(ho)31
+b(oses)308 b(the)6863 37785 y(orien)-31 b(tation)372
+b(for)e(whic)-31 b(h)370 b(the)f(scaling)i(is)e(closer)g(to)h(one.)6863
+39669 y
+SDict begin H.S end
+ 6863 39669 a 6863 39669 a
+SDict begin 12 H.A end
+ 6863 39669 a 6863 39669
+a
+SDict begin [/View [/XYZ H.V]/Dest (section.4) cvn /DEST pdfmark end
+ 6863 39669 a 1777 x Fu(4)1793 b(Running)598 b(the)h(Program)6863
+42852 y
+SDict begin H.S end
+ 6863 42852 a 6863 42852 a
+SDict begin 12 H.A end
+ 6863 42852 a 6863 42852
+a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.4.1) cvn /DEST pdfmark
+end
+ 6863 42852 a 1240 x Ft(4.1)1495 b(Program)500 b(In)-42
+b(v)g(o)42 b(cation)500 b(And)f(Options)6863 46135 y
+Fv(The)488 b(program)g Fq(pedigree)g Fv(is)g(a)f(command)i(line)f
+(program.)848 b(It)488 b(reads)e(the)i(data)h(from)6863
+47464 y(a)471 b(text)g(\014le)f Fq(input_file)i Fv(and)e(pro)31
+b(duces)470 b(an)g(output)i(\014le)e(with)i(L)35635 47237
+y Fp(A)36123 47464 y Fv(T)36737 47702 y(E)37352 47464
+y(X)f(macros.)796 b(The)6863 48792 y(format)371 b(of)f(the)f(input)h
+(\014le)f(is)g(describ)31 b(ed)369 b(in)g(Section)p 0
+TeXcolorgray 29544 48792 a
+SDict begin H.S end
+ 29544 48792 a 0 TeXcolorgray
+Fv(4.2)p 0 TeXcolorgray 30957 48079 a
+SDict begin H.R end
+ 30957 48079 a 30957
+48792 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.2) cvn H.B /ANN pdfmark end
+ 30957 48792 a 0 TeXcolorgray Fv(.)493 b(The)370
+b(program)g(in)-31 b(v)g(o)31 b(cation)372 b(is:)p 0
+TeXcolorgray 0 TeXcolorgray 6863 51006 a Fq(pedigree)582
+b([-c)g(configuration_file])i([-d])e([-o)f(output_file])12093
+52334 y([-s)h(start])g(input_file)6863 54548 y Fv(\(the)370
+b(square)f(brac)-31 b(k)g(ets)370 b(sho)-31 b(w)370 b(optional)h
+(argumen)-31 b(ts\).)8524 55877 y(All)370 b(argumen)-31
+b(ts)370 b(but)g Fq(input_file)g Fv(are)f(optional.)495
+b(They)370 b(are)f(describ)31 b(ed)368 b(b)31 b(elo)-31
+b(w.)8524 57205 y(The)419 b(option)h Fq(-c)f Fv(selects)g(a)g
+Fn(c)-57 b(on\014gur)g(ation)443 b(\014le.)641 b Fv(The)419
+b(format)i(of)e(the)g(con\014guration)6863 58533 y(\014le)315
+b(is)g(describ)31 b(ed)314 b(in)i(Section)p 0 TeXcolorgray
+19553 58533 a
+SDict begin H.S end
+ 19553 58533 a 0 TeXcolorgray Fv(3.1)p 0
+TeXcolorgray 20966 57820 a
+SDict begin H.R end
+ 20966 57820 a 20966 58533
+a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.3.1) cvn H.B /ANN pdfmark end
+ 20966 58533 a 0 TeXcolorgray Fv(.)476 b(If)315 b(this)g(option)i(is)e
+(absen)-31 b(t,)327 b(the)315 b(program)h(uses)e(its)h(o)-31
+b(wn)6863 59862 y(default)249 b(parameters,)273 b(or)248
+b(system-wide)g(or)g(user's)f(defaults,)273 b(as)248
+b(explained)h(in)f(Section)p 0 TeXcolorgray 43331 59862
+a
+SDict begin H.S end
+ 43331 59862 a 0 TeXcolorgray Fv(3.1)p 0 TeXcolorgray
+44744 59148 a
+SDict begin H.R end
+ 44744 59148 a 44744 59862 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.3.1) cvn H.B /ANN pdfmark end
+ 44744 59862
+a 0 TeXcolorgray Fv(.)8524 61190 y(The)496 b(option)i
+Fq(-)55 b(d)496 b Fv(selects)g(debugging)i(mo)31 b(de.)874
+b(In)496 b(this)g(mo)31 b(de)497 b(a)f(lot)i(of)e(debugging)6863
+62518 y(messages)369 b(are)g(dump)31 b(ed)370 b(to)g
+Fq(stderr)p Fv(.)8524 63847 y(The)417 b(parameter)h Fq(-o)f
+Fv(pro)-31 b(vides)417 b(the)g(name)h(of)f(the)h(output)g(\014le.)636
+b(Both)418 b Fq(input_file)6863 65175 y Fv(and)359 b
+Fq(output_file)i Fv(can)e(b)31 b(e)359 b(\\-",)j(whic)-31
+b(h)360 b(means)g Fq(stdin)g Fv(for)f(the)g(input)h(and)f
+Fq(stdout)h Fv(for)6863 66503 y(the)k(output.)492 b(If)364
+b(the)g(parameter)g Fq(-o)g Fv(is)g(absen)-31 b(t,)366
+b(the)e(program)h(tries)e(to)i(guess)e(the)h(name)p 0
+TeXcolorgray 25405 70071 a(10)p 0 TeXcolorgray eop end
+%%Page: 11 11
+TeXDict begin 11 10 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.11) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 6863 6531 a
+SDict begin H.S end
+ 6863 6531 a
+6863 6531 a
+SDict begin 12 H.A end
+ 6863 6531 a 6863 6531 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.6) cvn /DEST pdfmark
+end
+ 6863 6531 a 6863
+7461 a
+SDict begin H.S end
+ 6863 7461 a 6863 7461 a
+SDict begin 12 H.A end
+ 6863 7461 a 6863 7461
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.1) cvn /DEST pdfmark
+end
+ 6863 7461 a 58 w Fj(#)6863 8789 y
+SDict begin H.S end
+ 6863 8789 a 6863
+8789 a
+SDict begin 12 H.A end
+ 6863 8789 a 6863 8789 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.2) cvn /DEST pdfmark
+end
+ 6863 8789 a 58 w Fj(#)858
+b(M)102 b(a)g(x)g(i)g(m)g(a)g(l)895 b(w)97 b(i)g(d)g(t)g(h)881
+b(a)87 b(n)g(d)885 b(h)100 b(e)g(i)g(g)g(h)g(t)874 b(o)77
+b(f)863 b(t)87 b(h)g(e)889 b(p)103 b(e)g(d)g(i)g(g)g(r)g(e)g(e)881
+b(i)77 b(n)853 b(c)77 b(m)137 b(.)6863 10118 y
+SDict begin H.S end
+ 6863 10118
+a 6863 10118 a
+SDict begin 12 H.A end
+ 6863 10118 a 6863 10118 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.3) cvn /DEST pdfmark
+end
+ 6863 10118 a
+58 w Fj(#)843 b(S)87 b(e)g(t)878 b(t)93 b(h)g(i)g(s)869
+b(t)77 b(o)834 b(0)f(t)77 b(o)875 b(s)100 b(w)g(i)g(t)g(c)g(h)883
+b(o)87 b(f)g(f)887 b(s)102 b(c)g(a)g(l)g(i)g(n)g(g)6863
+11446 y
+SDict begin H.S end
+ 6863 11446 a 6863 11446 a
+SDict begin 12 H.A end
+ 6863 11446 a 6863 11446
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.4) cvn /DEST pdfmark
+end
+ 6863 11446 a 58 w Fj(#)6863 12774 y
+SDict begin H.S end
+ 6863 12774 a 6863
+12774 a
+SDict begin 12 H.A end
+ 6863 12774 a 6863 12774 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.5) cvn /DEST pdfmark
+end
+ 6863 12774 a 97 w Fq($)97
+b(m)g(a)g(x)g(W)853 b(=)842 b(1)87 b(5)g(;)6863 14103
+y
+SDict begin H.S end
+ 6863 14103 a 6863 14103 a
+SDict begin 12 H.A end
+ 6863 14103 a 6863 14103 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.6) cvn /DEST pdfmark
+end
+
+6863 14103 a 97 w Fq($)97 b(m)g(a)g(x)g(H)853 b(=)842
+b(1)87 b(9)g(;)6863 15431 y
+SDict begin H.S end
+ 6863 15431 a 6863 15431 a
+SDict begin 12 H.A end
+
+6863 15431 a 6863 15431 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.7) cvn /DEST pdfmark
+end
+ 6863 15431 a 6863 16759 a
+SDict begin H.S end
+ 6863
+16759 a 6863 16759 a
+SDict begin 12 H.A end
+ 6863 16759 a 6863 16759 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.8) cvn /DEST pdfmark
+end
+ 6863 16759
+a 58 w Fj(#)6863 18088 y
+SDict begin H.S end
+ 6863 18088 a 6863 18088 a
+SDict begin 12 H.A end
+ 6863
+18088 a 6863 18088 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.9) cvn /DEST pdfmark
+end
+ 6863 18088 a 58 w Fj(#)858 b(W)102
+b(h)g(e)g(t)g(h)g(e)g(r)875 b(t)77 b(o)876 b(r)100 b(o)g(t)g(a)g(t)g(e)
+883 b(t)87 b(h)g(e)878 b(p)93 b(a)g(g)g(e)152 b(.)1540
+b(T)87 b(h)g(e)885 b(v)100 b(a)g(l)g(u)g(e)g(s)883 b(a)87
+b(r)g(e)6863 19416 y
+SDict begin H.S end
+ 6863 19416 a 6863 19416 a
+SDict begin 12 H.A end
+ 6863 19416
+a 6863 19416 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.10) cvn /DEST pdfmark
+end
+ 6863 19416 a 58 w Fj(#)833 b(')126 b(y)87
+b(e)g(s)181 b(')93 b(,)822 b(')116 b(n)77 b(o)156 b(')824
+b(a)87 b(n)g(d)863 b(')135 b(m)97 b(a)g(y)g(b)g(e)175
+b(')6863 20744 y
+SDict begin H.S end
+ 6863 20744 a 6863 20744 a
+SDict begin 12 H.A end
+ 6863 20744
+a 6863 20744 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.11) cvn /DEST pdfmark
+end
+ 6863 20744 a 58 w Fj(#)833 b(I)77 b(f)854
+b(')135 b(m)97 b(a)g(y)g(b)g(e)175 b(')814 b(i)77 b(s)862
+b(c)87 b(h)g(o)g(s)g(e)g(n)235 b(,)843 b(t)87 b(h)g(e)888
+b(p)103 b(e)g(d)g(i)g(g)g(r)g(e)g(e)882 b(i)77 b(s)877
+b(r)102 b(o)g(t)g(a)g(t)g(e)g(d)6863 22073 y
+SDict begin H.S end
+ 6863 22073
+a 6863 22073 a
+SDict begin 12 H.A end
+ 6863 22073 a 6863 22073 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.12) cvn /DEST pdfmark
+end
+ 6863 22073 a
+58 w Fj(#)833 b(i)77 b(f)869 b(t)93 b(h)g(i)g(s)894 b(p)103
+b(r)g(o)g(v)g(i)g(d)g(e)g(s)904 b(b)100 b(e)g(t)g(t)g(e)g(r)898
+b(s)102 b(c)g(a)g(l)g(i)g(n)g(g)6863 23401 y
+SDict begin H.S end
+ 6863 23401
+a 6863 23401 a
+SDict begin 12 H.A end
+ 6863 23401 a 6863 23401 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.13) cvn /DEST pdfmark
+end
+ 6863 23401 a
+58 w Fj(#)6863 24729 y
+SDict begin H.S end
+ 6863 24729 a 6863 24729 a
+SDict begin 12 H.A end
+ 6863
+24729 a 6863 24729 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.14) cvn /DEST pdfmark
+end
+ 6863 24729 a 102 w Fq($)g(r)g(o)g(t)g(a)g(t)g(e)
+856 b(=)833 b(')136 b(m)97 b(a)g(y)g(b)g(e)175 b(')97
+b(;)p 0 TeXcolorgray 0 TeXcolorgray 11076 27165 a Fv(Listing)370
+b(6:)493 b(Con\014guration)372 b(File:)493 b(Cho)31 b(osing)371
+b(Scaling)g(and)e(Rotation)p 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 6863 32472 a(of)401 b(the)g(output)h(\014le)f(from)g
+(the)g(name)g(of)g(the)g(input)h(\014le.)587 b(If)400
+b(the)h(input)g(\014le)g(is)g Fq(foo.csv)q Fv(,)6863
+33800 y(the)410 b(output)i(\014le)e(will)i(b)31 b(e)409
+b Fq(foo.tex)q Fv(.)615 b(On)410 b(the)g(other)g(hand,)421
+b(if)411 b(the)f(input)h(\014le)f(is)g Fq(stdin)p Fv(,)6863
+35129 y(the)370 b(output)g(\014le)f(is)h Fq(stdout)p
+Fv(.)8524 36457 y(Usually)495 b(p)31 b(edigrees)494 b(are)g(built)h
+(starting)g(from)g(the)f(proband)p 0 TeXcolorgray 35383
+36457 a
+SDict begin H.S end
+ 35383 36457 a -402 x Fp(5)35881 36457 y
+SDict begin 12 H.L end
+ 35881
+36457 a 35881 36457 a
+SDict begin [/Subtype /Link/Dest (Hfootnote.5) cvn/H /I/Border [0 0
+0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 35881 36457 a 0 TeXcolorgray Fv(.)867
+b(Only)494 b(the)h(p)31 b(eople)6863 37785 y(that)485
+b(share)e(genes)g(with)i(the)f(proband,)512 b(are)484
+b(sho)-31 b(wn)484 b(on)f(the)h(p)31 b(edigree.)836 b(Ho)-31
+b(w)g(ev)g(er,)514 b(in)6863 39114 y(some)425 b(cases,)438
+b(for)424 b(example)i(when)f(there)f(is)g(no)g(proband,)439
+b(or)424 b(where)g(there)h(are)f(sev)-31 b(eral)6863
+40442 y(probands,)509 b(it)481 b(is)f(neccessary)g(to)h(o)-31
+b(v)g(erride)481 b(this)g(default)g(and)g(tell)h(the)e(program)i(from)
+6863 41771 y(whic)-31 b(h)491 b(p)31 b(erson)489 b(to)h(start.)855
+b(This)490 b(is)g(done)g(using)g(the)g(option)i Fq(-s)p
+Fv(.)854 b(If)490 b(it)h(is)e(presen)-31 b(t,)520 b(it)6863
+43099 y(m)-31 b(ust)399 b(b)31 b(e)398 b(follo)-31 b(w)g(ed)402
+b(b)-31 b(y)398 b(the)h(Id)f(of)h(a)g(p)31 b(erson)398
+b(in)g(the)h(data)h(\014le)e(\(see)h(Section)p 0 TeXcolorgray
+39980 43099 a
+SDict begin H.S end
+ 39980 43099 a 0 TeXcolorgray Fv(4.2)p 0
+TeXcolorgray 41393 42385 a
+SDict begin H.R end
+ 41393 42385 a 41393 43099
+a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.2) cvn H.B /ANN pdfmark end
+ 41393 43099 a 0 TeXcolorgray 399 w Fv(for)g(the)6863
+44427 y(discussion)369 b(of)h(Id\).)8524 45756 y(The)401
+b(option)h Fq(-v)g Fv(is)e(sp)31 b(ecial.)589 b(The)401
+b(in)-31 b(v)g(o)31 b(cation)404 b Fq(pedigree)583 b(-v)401
+b Fv(outputs)g(the)h(v)-31 b(ersion)6863 47084 y(and)370
+b(license)f(information.)6863 48633 y
+SDict begin H.S end
+ 6863 48633 a 6863
+48633 a
+SDict begin 12 H.A end
+ 6863 48633 a 6863 48633 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.4.2) cvn /DEST pdfmark
+end
+ 6863 48633 a 1550 x
+Ft(4.2)1495 b(Data)500 b(File)6863 52226 y Fv(The)299
+b(input)g(for)f(the)h(program)g(is)f(a)h(separated)g(v)-61
+b(alues)298 b(\014le.)470 b(Usually)299 b(suc)-31 b(h)298
+b(\014les)h(are)f(called)6863 53554 y(CSV)456 b(for)g(\\comma)h
+(separated)f(v)-61 b(alues".)753 b(Ho)-31 b(w)g(ev)g(er,)479
+b(this)456 b(program)g(uses)f(the)g(v)-31 b(ertical)6863
+54883 y(bar)433 b(\(\\pip)31 b(e"\))434 b Fq(|)f Fv(as)f(a)h
+(separator.)684 b(Eac)-31 b(h)433 b(line)h(of)f(this)g(\014le)g(is)f(a)
+h Fn(r)-57 b(e)g(c)g(or)g(d)p Fv(.)684 b(The)433 b(lines)g(are)6863
+56211 y(separated)277 b(b)-31 b(y)276 b(pip)31 b(es)276
+b(in)-31 b(to)278 b Fn(\014elds.)461 b Fv(Most)276 b(SQL)g(programs)h
+(pro)31 b(duce)276 b(suc)-31 b(h)276 b(\014les)g(b)-31
+b(y)276 b(default.)6863 57539 y(Spreadsheet)392 b(programs)h(will)h
+(mak)-31 b(e)393 b(them)g(if)g(y)-31 b(ou)392 b(c)-31
+b(ho)31 b(ose)393 b(\\Sa)-31 b(v)g(e)394 b(As.)184 b(.)h(.)g(")562
+b(option,)400 b(and)6863 58868 y(select)471 b Fq(|)f
+Fv(as)g(the)g(\014eld)h(separator,)496 b(and)470 b(empt)-31
+b(y)472 b(text)f(delimiter.)797 b(W)-92 b(e)470 b(sometimes)h(will)6863
+60196 y(call)335 b(the)f(records)e(\\ro)-31 b(ws")335
+b(and)f(the)g(\014elds)f(\\columns")i(to)g(use)e(the)h(familiar)i
+(spreadsheet)6863 61524 y(metaphor.)631 b(Normally)417
+b(eac)-31 b(h)415 b(ro)-31 b(w)415 b(corresp)31 b(onds)414
+b(to)h(a)g(p)31 b(erson)414 b(in)h(a)g(p)31 b(edigree.)629
+b(W)-92 b(e)414 b(will)6863 62853 y(call)371 b(this)e(p)31
+b(erson)369 b Fn(the)395 b(curr)-57 b(ent)397 b(p)-57
+b(erson)454 b Fv(when)369 b(describing)h(the)f(\014elds.)p
+0 TeXcolorgray 6863 63776 15276 45 v 8096 64492 a Fm(5)p
+0 TeXcolorgray 8557 64805 a
+SDict begin H.S end
+ 8557 64805 a 8557 64805 a
+SDict begin H.R end
+
+8557 64805 a 8557 64805 a
+SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.5) cvn /DEST pdfmark
+end
+ 8557 64805 a 0 TeXcolorgray
+Fl(The)341 b(proband)h(is)h(the)f(\014rst)g(p)26 b(erson)342
+b(among)h(the)f(relativ)-26 b(es)343 b(who)f(came)h(to)g(a)f
+(geneticist;)359 b(he)342 b(or)g(she)6863 65856 y(is)314
+b(the)g(primary)f(patien)-26 b(t.)p 0 TeXcolorgray 0
+TeXcolorgray 25405 70071 a Fv(11)p 0 TeXcolorgray eop
+end
+%%Page: 12 12
+TeXDict begin 12 11 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.12) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 8524 6974 a Fv(The)355 b(width)h(of)g(the)f(\014elds)h
+(ma)-31 b(y)356 b(not)g(b)31 b(e)355 b(the)g(same)g(in)h(all)g(ro)-31
+b(ws)356 b(\(or,)j(in)c(other)g(w)-31 b(ords,)6863 8302
+y(the)294 b(pip)31 b(es)292 b Fq(|)h Fv(ma)-31 b(y)295
+b(b)31 b(e)292 b(disaligned\).)470 b(W)-92 b(e)292 b(mak)-31
+b(e)295 b(them)f(aligned)g(in)g(the)f(examples)h(included)6863
+9631 y(in)370 b(this)f(man)-31 b(ual)371 b(just)f(to)g(mak)-31
+b(e)370 b(the)f(text)i(more)e(readable.)8524 10959 y(The)544
+b(\014rst)g(line)h(of)g(the)g(data)h(\014le)e(con)-31
+b(tains)546 b(the)f(names)g(of)g(the)g(\014elds)f(\(\\column)6863
+12287 y(headers"\).)1043 b(The)553 b(\014elds)g(in)f(the)h(subsequen)
+-31 b(t)553 b(lines)g(m)-31 b(ust)553 b(matc)-31 b(h)554
+b(the)f(order)f(of)h(the)6863 13616 y(headers.)651 b(An)422
+b(empt)-31 b(y)423 b(\014eld)f(m)-31 b(ust)423 b(b)31
+b(e)421 b(still)j(included)e(\(as)h Fq(||)f Fv(or)g Fq(|)581
+b(|)p Fv(\).)651 b(Otherwise)423 b(the)6863 14944 y(order)358
+b(of)h(columns)h(is)e(arbitrary)h(as)g(long)g(as)g(it)g(is)g(the)g
+(same)f(for)h(all)h(ro)-31 b(ws)359 b(\(i.e.)490 b(matc)-31
+b(hes)6863 16272 y(the)370 b(order)e(of)i(\\column)h(headers")e(in)g
+(the)h(\014rst)e(line\).)8524 17601 y(All)404 b(\014elds)f(but)g
+Fq(Id)h Fv(are)f(optional.)597 b(If)403 b(the)h(v)-61
+b(alue)403 b(is)h(empt)-31 b(y)404 b(for)f(all)i(ro)-31
+b(ws,)412 b(the)404 b(corre-)6863 18929 y(sp)31 b(onding)357
+b(column)g(can)f(b)31 b(e)355 b(dropp)31 b(ed.)488 b(If)356
+b(applicable,)361 b(the)356 b(default)i(v)-61 b(alues)356
+b(for)g(this)g(\014eld)6863 20257 y(will)371 b(b)31 b(e)369
+b(substituted)h(b)-31 b(y)369 b(the)h(program.)8524 21586
+y(On)i(the)h(other)g(hand)g(the)g(data)h(\014le)f(can)g(include)g(an)
+-31 b(y)374 b(additional)i(columns)d(as)g(long)6863 22914
+y(as)395 b(their)g(names)g(do)g(not)h(clash)f(with)h(the)g(names)f
+(listed)h(b)31 b(elo)-31 b(w)396 b(and)f(the)g(sp)31
+b(ecial)395 b(name)6863 24242 y Fq(AgeAtDeath)r Fv(.)580
+b(These)398 b(additional)k(columns)d(can)g(b)31 b(e)398
+b(included)h(in)g(the)g(c)-31 b(hart)399 b(or)f(legend)6863
+25571 y(as)369 b(describ)31 b(ed)369 b(in)g(Section)p
+0 TeXcolorgray 18286 25571 a
+SDict begin H.S end
+ 18286 25571 a 0 TeXcolorgray
+Fv(3.4)p 0 TeXcolorgray 19699 24857 a
+SDict begin H.R end
+ 19699 24857 a 19699
+25571 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.3.4) cvn H.B /ANN pdfmark end
+ 19699 25571 a 0 TeXcolorgray Fv(.)8524 26899
+y(Here)f(is)h(the)h(list)g(of)g(columns)g(and)f(explanation)j(of)e
+(their)f(meaning:)p 0 TeXcolorgray 6863 29015 a Fs(Id:)p
+0 TeXcolorgray 553 w Fv(Eac)-31 b(h)377 b(line)g(\(including)h(the)e
+(sp)31 b(ecial)376 b(lines)g(describ)31 b(ed)376 b(b)31
+b(elo)-31 b(w\))377 b(m)-31 b(ust)377 b(ha)-31 b(v)g(e)376
+b(a)h(unique)9631 30343 y Fq(Id)p Fv(.)486 b(The)349
+b Fq(Id)g Fv(ma)-31 b(y)350 b(con)-31 b(tain)351 b(only)f(Latin)g
+(letters)f(and)g(n)-31 b(um)g(b)31 b(ers,)353 b(and)c(start)h(with)g(a)
+9631 31671 y(letter.)p 0 TeXcolorgray 6863 33836 a Fs(Name:)p
+0 TeXcolorgray 554 w Fv(The)418 b(name)g(of)h(the)f(p)31
+b(erson)417 b(describ)31 b(ed)417 b(in)h(the)h(curren)-31
+b(t)417 b(ro)-31 b(w.)640 b(There)417 b(are)h(also)9631
+35164 y Fn(sp)-57 b(e)g(cial)290 b(names)345 b Fv(when)254
+b(the)g(curren)-31 b(t)254 b(ro)-31 b(w)254 b(describ)31
+b(es)253 b(ab)31 b(ortions)255 b(or)f(infertilit)-31
+b(y)-92 b(.)457 b(They)9631 36493 y(are)311 b(describ)31
+b(ed)311 b(b)31 b(elo)-31 b(w.)475 b(The)312 b(names)g(should)g(not)h
+(con)-31 b(tain)314 b(\\sp)31 b(ecial)313 b(sym)-31 b(b)31
+b(ols")313 b(lik)-31 b(e)9631 37821 y(#,)370 b($,)f(\045,)p
+14125 37821 333 45 v 769 w(,)g(^,)h(etc.)p 0 TeXcolorgray
+6863 39986 a Fs(Sex:)p 0 TeXcolorgray 554 w Fv(The)305
+b(gender)g(of)g(a)g(p)31 b(erson.)471 b(This)305 b(column)h(ma)-31
+b(y)306 b(ha)-31 b(v)g(e)306 b(one)f(of)h(t)-31 b(w)g(o)306
+b(v)-61 b(alues:)461 b Fq(male)305 b Fv(or)9631 41314
+y Fq(female)p Fv(.)491 b(The)365 b(empt)-31 b(y)366 b(v)-61
+b(alue)365 b(corresp)31 b(onds)363 b(to)j(a)f(p)31 b(erson)363
+b(with)j(unkno)-31 b(wn)366 b(gender.)p 0 TeXcolorgray
+6863 43479 a Fs(DoB:)p 0 TeXcolorgray 554 w Fv(The)384
+b(date)g(of)g(birth)h(for)e(the)h(curren)-31 b(t)384
+b(p)31 b(erson.)535 b(The)384 b(format)i(is)e Fq(YYYY.MM.DD)q
+Fv(.)536 b(If)9631 44807 y(the)459 b(date)g(of)g(birth)g(is)g(not)g
+(kno)-31 b(wn,)483 b(the)459 b(\014eld)g(ma)-31 b(y)460
+b(b)31 b(e)458 b(empt)-31 b(y)460 b(or)f(the)g(k)-31
+b(eyw)g(ord)9631 46136 y Fq(unknown)370 b Fv(ma)-31 b(y)370
+b(b)31 b(e)369 b(used.)p 0 TeXcolorgray 6863 48300 a
+Fs(DoD:)p 0 TeXcolorgray 554 w Fv(The)486 b(date)h(of)f(death)h(for)f
+(curren)-31 b(t)485 b(p)31 b(erson.)842 b(The)486 b(format)h(is)f(the)g
+(same)g(as)g(for)9631 49629 y Fq(DoB)p Fv(:)477 b Fq(YYYY.MM.DD)q
+Fv(.)482 b(If)337 b(this)h(\014eld)f(is)g(empt)-31 b(y)-92
+b(,)345 b(the)338 b(corresp)31 b(onding)337 b(p)31 b(erson)337
+b(is)g(aliv)-31 b(e.)9631 50957 y(F)-92 b(or)503 b(deceased)i(p)31
+b(ersons)503 b(with)i(an)g(unkno)-31 b(wn)506 b(date)f(of)g(death)g
+(use)f(the)h(k)-31 b(eyw)g(ord)9631 52285 y Fq(unknown)q
+Fv(.)655 b(Note)425 b(the)f(subtle)g(di\013erence)f(b)31
+b(et)-31 b(w)g(een)425 b(the)f(\014elds)f Fq(DoB)h Fv(and)g
+Fq(DoD)p Fv(:)602 b(an)9631 53614 y(empt)-31 b(y)291
+b(v)-61 b(alue)291 b(for)g Fq(DoB)f Fv(is)h(means)f(\\unkno)-31
+b(wn)292 b(birth)f(date")h(while)f(for)g Fq(DoD)g Fv(it)g(means)9631
+54942 y(that)370 b(there)f(is)g(no)h(date)f(of)h(death)g(at)g(all.)p
+0 TeXcolorgray 6863 57107 a Fs(Mother:)p 0 TeXcolorgray
+555 w Fv(The)g Fq(Id)f Fv(of)h(the)f(mother)h(of)g(the)f(p)31
+b(erson)368 b(\(or)i(empt)-31 b(y\).)p 0 TeXcolorgray
+6863 59272 a Fs(F)-106 b(ather:)p 0 TeXcolorgray 554
+w Fv(The)369 b Fq(Id)h Fv(of)f(the)h(father)g(of)f(the)h(p)31
+b(erson)368 b(\(or)i(empt)-31 b(y\).)p 0 TeXcolorgray
+6863 61436 a Fs(Proband)p 0 TeXcolorgray 555 w Fv(This)417
+b(\014eld)f(can)h(b)31 b(e)416 b(either)g Fq(yes)h Fv(for)g(the)f
+(probands,)429 b(or)416 b(empt)-31 b(y)417 b(\(or)g Fq(no)p
+Fv(\))g(for)9631 62765 y(other)250 b(p)31 b(ersons.)452
+b(Note)251 b(that)g(if)g(a)f(p)31 b(edigree)250 b(has)g(no)g(probands)g
+(or)g(sev)-31 b(eral)251 b(probands,)9631 64093 y(the)281
+b(program)g(do)31 b(es)281 b(not)g(kno)-31 b(w,)300 b(from)282
+b(whic)-31 b(h)281 b(no)31 b(de)281 b(to)h(start)f(the)g(p)31
+b(edigree.)463 b(There-)9631 65421 y(fore)348 b(in)h(this)g(case)g(the)
+g(option)h Fq(-s)f Fv(m)-31 b(ust)349 b(b)31 b(e)348
+b(used)g(to)h(explicitly)j(set)c(the)h Fq(Id)g Fv(of)g(the)9631
+66750 y(starting)370 b(c)-31 b(hart)370 b(no)31 b(de)369
+b(\(see)g(Section)p 0 TeXcolorgray 25392 66750 a
+SDict begin H.S end
+ 25392
+66750 a 0 TeXcolorgray Fv(4.1)p 0 TeXcolorgray 26805
+66036 a
+SDict begin H.R end
+ 26805 66036 a 26805 66750 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.1) cvn H.B /ANN pdfmark end
+ 26805 66750 a 0 TeXcolorgray
+Fv(\).)p 0 TeXcolorgray 25405 70071 a(12)p 0 TeXcolorgray
+eop end
+%%Page: 13 13
+TeXDict begin 13 12 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.13) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 6863 6974 a Fs(Condition:)p
+0 TeXcolorgray 555 w Fv(This)246 b(column)i(can)e(ha)-31
+b(v)g(e)247 b(the)g(v)-61 b(alues)246 b Fq(normal)q Fv(,)271
+b Fq(obligatory)q Fv(,)g Fq(asymptomatic)9631 8302 y
+Fv(or)369 b Fq(affected)q Fv(.)492 b(If)369 b(it)h(is)f(empt)-31
+b(y)-92 b(,)371 b(the)e(default)i(v)-61 b(alue)370 b
+Fq(normal)f Fv(is)h(assumed.)p 0 TeXcolorgray 6863 10516
+a Fs(Commen)-35 b(t:)p 0 TeXcolorgray 554 w Fv(A)369
+b(commen)-31 b(t)371 b(ab)31 b(out)371 b(the)e(p)31 b(erson.)p
+0 TeXcolorgray 6863 12730 a Fs(Twins:)p 0 TeXcolorgray
+553 w Fv(If)289 b(the)g(curren)-31 b(t)289 b(p)31 b(erson)288
+b(has)h(t)-31 b(wins,)307 b(they)290 b(are)f(listed)h(in)f(this)g
+(column)i(separated)9631 14058 y(b)-31 b(y)369 b(spaces)g(and)g(\(or\))
+h(commas.)494 b(See)369 b(Section)p 0 TeXcolorgray 29454
+14058 a
+SDict begin H.S end
+ 29454 14058 a 0 TeXcolorgray Fv(4.3)p 0 TeXcolorgray
+30867 13345 a
+SDict begin H.R end
+ 30867 13345 a 30867 14058 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.3) cvn H.B /ANN pdfmark end
+ 30867 14058
+a 0 TeXcolorgray 371 w Fv(for)g(more)h(details.)p 0 TeXcolorgray
+6863 16272 a Fs(T)-35 b(yp)35 b(e:)p 0 TeXcolorgray 553
+w Fv(This)360 b(column)g(is)f(used)g(in)g(certain)h(sp)31
+b(ecial)359 b(cases.)489 b(F)-92 b(or)358 b(ab)31 b(ortions)361
+b(it)e(sho)-31 b(ws)360 b(the)9631 17601 y(t)-31 b(yp)31
+b(e)459 b(of)h(the)g(ab)31 b(ortion)461 b(\(Section)p
+0 TeXcolorgray 24506 17601 a
+SDict begin H.S end
+ 24506 17601 a 0 TeXcolorgray
+Fv(4.4)p 0 TeXcolorgray 25919 16887 a
+SDict begin H.R end
+ 25919 16887 a 25919
+17601 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.4) cvn H.B /ANN pdfmark end
+ 25919 17601 a 0 TeXcolorgray Fv(\),)484 b(for)459
+b(c)-31 b(hildless)461 b(p)31 b(eople)459 b(and)h(marriages)g(it)9631
+18929 y(sho)-31 b(ws)412 b(the)g(t)-31 b(yp)31 b(e)413
+b(of)f(c)-31 b(hildnessness)412 b(\(Section)p 0 TeXcolorgray
+29666 18929 a
+SDict begin H.S end
+ 29666 18929 a 0 TeXcolorgray Fv(4.5)p 0
+TeXcolorgray 31079 18216 a
+SDict begin H.R end
+ 31079 18216 a 31079 18929
+a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.5) cvn H.B /ANN pdfmark end
+ 31079 18929 a 0 TeXcolorgray Fv(\),)425 b(and)412 b(for)g(t)-31
+b(wins)414 b(it)e(sho)-31 b(ws)413 b(the)9631 20257 y(t)-31
+b(yp)31 b(e)369 b(of)h(t)-31 b(wins)370 b(\(Section)p
+0 TeXcolorgray 20614 20257 a
+SDict begin H.S end
+ 20614 20257 a 0 TeXcolorgray
+Fv(4.3)p 0 TeXcolorgray 22027 19544 a
+SDict begin H.R end
+ 22027 19544 a 22027
+20257 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.3) cvn H.B /ANN pdfmark end
+ 22027 20257 a 0 TeXcolorgray Fv(\).)p 0 TeXcolorgray
+6863 22471 a Fs(SortOrder:)p 0 TeXcolorgray 556 w Fv(This)431
+b(column)h(is)e(used)g(when)h(the)g(algorithm)i(for)e(sorting)g
+(siblings)h(and)9631 23800 y(unions)386 b(giv)-31 b(es)387
+b(a)f(wrong)h(result,)k(and)386 b(a)g(man)-31 b(ual)388
+b(correction)f(is)f(needed.)543 b(See)385 b(Sec-)9631
+25128 y(tion)p 0 TeXcolorgray 11906 25128 a
+SDict begin H.S end
+ 11906 25128
+a 0 TeXcolorgray Fv(4.6)p 0 TeXcolorgray 13319 24415
+a
+SDict begin H.R end
+ 13319 24415 a 13319 25128 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.6) cvn H.B /ANN pdfmark end
+ 13319 25128 a 0 TeXcolorgray
+370 w Fv(for)370 b(the)f(explanation)j(and)e(examples.)8524
+27342 y(Examples)f(of)g(data)g(\014les)f(\(in)g(English)i(and)e
+(Russian\))g(are)g(sho)-31 b(wn)369 b(in)f(Listing)p
+0 TeXcolorgray 42164 27342 a
+SDict begin H.S end
+ 42164 27342 a 0 TeXcolorgray
+Fv(7)p 0 TeXcolorgray 42717 26629 a
+SDict begin H.R end
+ 42717 26629 a 42717
+27342 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.7) cvn H.B /ANN pdfmark end
+ 42717 27342 a 0 TeXcolorgray 368 w Fv(\(the)6863
+28670 y(Russian)h(k)-31 b(eyw)g(ords)370 b(are)f(discussed)g(in)g
+(Section)p 0 TeXcolorgray 27646 28670 a
+SDict begin H.S end
+ 27646 28670 a
+0 TeXcolorgray Fv(4.8)p 0 TeXcolorgray 29059 27957 a
+SDict begin H.R end
+
+29059 27957 a 29059 28670 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.8) cvn H.B /ANN pdfmark end
+ 29059 28670 a 0 TeXcolorgray
+Fv(\).)6863 30496 y
+SDict begin H.S end
+ 6863 30496 a 6863 30496 a
+SDict begin 12 H.A end
+ 6863 30496
+a 6863 30496 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.4.3) cvn /DEST pdfmark
+end
+ 6863 30496 a 1273 x Ft(4.3)1495 b(Twins)6863
+33812 y Fv(The)329 b(column)i Fq(Twins)e Fv(\(see)g(Section)p
+0 TeXcolorgray 22181 33812 a
+SDict begin H.S end
+ 22181 33812 a 0 TeXcolorgray
+Fv(4.3)p 0 TeXcolorgray 23594 33099 a
+SDict begin H.R end
+ 23594 33099 a 23594
+33812 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.3) cvn H.B /ANN pdfmark end
+ 23594 33812 a 0 TeXcolorgray Fv(\))i(lists)e(all)i
+Fq(Id)p Fv(s)d(of)i(all)g(t)-31 b(wins)330 b(of)g(the)f(giv)-31
+b(en)330 b(p)31 b(erson.)6863 35141 y(The)376 b(column)i
+Fq(Type)e Fv(can)g(b)31 b(e)376 b(used)f(to)i(sho)-31
+b(w)377 b(the)f(t)-31 b(yp)31 b(e)377 b(of)f(the)h(t)-31
+b(wins.)514 b(The)376 b(empt)-31 b(y)378 b(v)-61 b(alue)6863
+36469 y(means)249 b(p)31 b(olyzygotic)251 b(t)-31 b(wins,)274
+b Fq(monozygotic)249 b Fv(means)g(monozygotic)j(t)-31
+b(wins,)274 b(and)248 b Fq(qzygotic)6863 37797 y Fv(is)318
+b(used)g(in)g(the)h(case)f(when)g(the)g(t)-31 b(yp)31
+b(e)319 b(of)g(t)-31 b(wins)319 b(is)f(under)g(doubt.)476
+b(An)318 b(example)i(of)e(a)h(data)6863 39126 y(\014le)264
+b(with)h(t)-31 b(wins)264 b(is)g(sho)-31 b(wn)264 b(on)g(Listing)p
+0 TeXcolorgray 23076 39126 a
+SDict begin H.S end
+ 23076 39126 a 0 TeXcolorgray
+Fv(8)p 0 TeXcolorgray 23629 38412 a
+SDict begin H.R end
+ 23629 38412 a 23629
+39126 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.8) cvn H.B /ANN pdfmark end
+ 23629 39126 a 0 TeXcolorgray Fv(,)285 b(and)264
+b(the)g(corresp)31 b(onding)263 b(p)31 b(edigree)264
+b(on)g(Figure)p 0 TeXcolorgray 44192 39126 a
+SDict begin H.S end
+ 44192 39126
+a 0 TeXcolorgray Fv(3)p 0 TeXcolorgray 44745 38412 a
+SDict begin H.R end
+
+44745 38412 a 44745 39126 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.3) cvn H.B /ANN pdfmark end
+ 44745 39126 a 0 TeXcolorgray
+Fv(.)6863 40890 y
+SDict begin H.S end
+ 6863 40890 a 6863 40890 a
+SDict begin 12 H.A end
+ 6863 40890
+a 6863 40890 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.4.4) cvn /DEST pdfmark
+end
+ 6863 40890 a 1334 x Ft(4.4)1495 b(Ab)42
+b(ortions)6863 44268 y Fv(Ab)31 b(orted)362 b(pregnancies)g(are)f
+(describ)31 b(ed)360 b(b)-31 b(y)362 b(a)g(sp)31 b(ecial)362
+b(en)-31 b(try)362 b(in)f(the)h(data)h(\014le.)490 b(The)362
+b(\014eld)6863 45596 y Fq(Name)515 b Fv(has)e(the)i(v)-61
+b(alue)514 b Fq(#abortion)r Fv(;)586 b(the)514 b(sym)-31
+b(b)31 b(ol)516 b Fq(#)e Fv(is)f(used)h(to)h(sho)-31
+b(w)514 b(that)h(this)g(is)f(a)6863 46924 y(sp)31 b(ecial)371
+b(v)-61 b(alue.)495 b(The)370 b(columns)h Fq(Sex)p Fv(,)f
+Fq(DoB)q Fv(,)g Fq(Mother)q Fv(,)g Fq(Father)h Fv(and)f
+Fq(Condition)h Fv(ha)-31 b(v)g(e)371 b(the)6863 48253
+y(usual)353 b(meaning.)489 b(The)353 b(sp)31 b(ecial)353
+b(column)h Fq(Type)f Fv(is)f(either)h(empt)-31 b(y)354
+b(or)e(b)31 b(e)352 b(equal)i(to)f Fq(sab)g Fv(for)6863
+49581 y(self-ab)31 b(ortions.)6863 51130 y
+SDict begin H.S end
+ 6863 51130
+a 6863 51130 a
+SDict begin 12 H.A end
+ 6863 51130 a 6863 51130 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.4.5) cvn /DEST pdfmark
+end
+ 6863 51130 a
+1550 x Ft(4.5)1495 b(Childlessness)501 b(and)e(Infertilit)-42
+b(y)6863 54723 y Fv(Childlessness)374 b(is)f(can)h(b)31
+b(e)372 b(a)i(prop)31 b(ert)-31 b(y)373 b(of)h(a)g(p)31
+b(erson)373 b(or)g(a)g(union)h(b)31 b(et)-31 b(w)g(een)375
+b(t)-31 b(w)g(o)375 b(p)31 b(ersons.)6863 56051 y(Therefore)364
+b(in)h(this)f(implemen)-31 b(tation)369 b(w)-31 b(e)365
+b(use)e(a)i(sp)31 b(ecial)365 b(ro)-31 b(w)364 b(rather)g(than)h(a)g
+(column)g(to)6863 57380 y(rep)31 b(ort)438 b(it.)702
+b(As)438 b(other)h(ro)-31 b(ws,)457 b(this)439 b(one)g(has)f(a)h
+(unique)g Fq(Id)p Fv(.)701 b(The)439 b Fq(Name)g Fv(column)h(should)
+6863 58708 y(ha)-31 b(v)g(e)483 b(a)e(sp)31 b(ecial)482
+b(en)-31 b(try)482 b Fq(#childless)q Fv(.)829 b(Lik)-31
+b(e)482 b Fq(#abortion)h Fv(\(Section)p 0 TeXcolorgray
+36886 58708 a
+SDict begin H.S end
+ 36886 58708 a 0 TeXcolorgray Fv(4.4)p 0
+TeXcolorgray 38299 57995 a
+SDict begin H.R end
+ 38299 57995 a 38299 58708
+a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.4) cvn H.B /ANN pdfmark end
+ 38299 58708 a 0 TeXcolorgray Fv(\),)512 b(this)481
+b(sp)31 b(ecial)6863 60036 y(name)439 b(starts)e(with)i
+Fq(#)f Fv(to)g(distinguish)h(it)g(from)f(\\real")h(names.)698
+b(There)438 b(are)f(four)h(other)6863 61365 y(columns)370
+b(that)h(ha)-31 b(v)g(e)370 b(meaning)h(for)e(this)g(ro)-31
+b(w:)p 0 TeXcolorgray 6863 63579 a Fs(Mother:)p 0 TeXcolorgray
+555 w Fv(The)370 b Fq(Id)f Fv(of)h(the)f(c)-31 b(hildless)370
+b(female.)p 0 TeXcolorgray 25405 70071 a(13)p 0 TeXcolorgray
+eop end
+%%Page: 14 14
+TeXDict begin 14 13 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.14) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 6863 6531 a
+SDict begin H.S end
+ 6863 6531 a
+6863 6531 a
+SDict begin 12 H.A end
+ 6863 6531 a 6863 6531 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.7) cvn /DEST pdfmark
+end
+ 6863 6531 a 6863
+63816 a
+SDict begin H.S end
+ 6863 63816 a 6863 63816 a
+SDict begin 12 H.A end
+ 6863 63816 a 6863 63816
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.7.1) cvn /DEST pdfmark
+end
+ 6863 63816 a 19884 63816 a
+ gsave currentpoint currentpoint translate 90 neg rotate neg exch neg
+exch translate
+ 19884 63816 a -12328 x Fw(Id)523
+b(|Name)6276 b(|Sex)1570 b(|DoB)3661 b(|)523 b(DoD)3138
+b(|Mother|Father|Proband|Condition)524 b(|Comment)19884
+52705 y(P)1046 b(|John)523 b(Smith)3138 b(|male)1047
+b(|1970/02/05|)5230 b(|M1)2093 b(|F1)f(|)523 b(yes)1569
+b(|)523 b(affected|Evaluated)h(2005/12/01)19884 53923
+y(M1)f(|Mary)g(Smith)3138 b(|female|1940/02/05|)5231
+b(|GM2)1570 b(|GF2)f(|)3661 b(|)523 b(normal)1046 b(|)19884
+55140 y(F1)523 b(|Bill)g(Smith)3138 b(|male)1047 b(|1938/04/03|)5230
+b(|GM1)1570 b(|)523 b(GF1)1046 b(|)3661 b(|affected)523
+b(|)19884 56358 y(GM1|Joan)g(Smith)3138 b
+(|female|1902/07/01|1975/12/13|)i(|)e(|)3661 b(|asymptomatic)19884
+57576 y(GF1|Joseph)523 b(Smith)2092 b(|male)1047 b(|unknown)1569
+b(|unknown)g(|)3139 b(|)f(|)3661 b(|)523 b(normal)19884
+58793 y(GF2|Jim)g(Brown)3661 b(|male)1047 b(|1905/11/01|)5230
+b(|)3139 b(|)f(|)3661 b(|)523 b(normal)1046 b(|)19884
+60011 y(GM2|Lisa)523 b(Brown)3138 b(|female|1910/03/03|)5231
+b(|)3139 b(|)f(|)3661 b(|)523 b(normal)1046 b(|)19884
+61229 y(S1)523 b(|Rebecca)g(Smith)1569 b(|female|1972/12/25|)5231
+b(|M1)2093 b(|F1)f(|)3661 b(|)523 b(affected)19884 62446
+y(S2)g(|Alexander)g(Smith)g(|male)1047 b(|1975/11/12|)5230
+b(|M1)2093 b(|F1)f(|)3661 b(|)523 b(normal)19884 63664
+y(A1)g(|Ann)g(Gold)4184 b(|female|1941/09/02|)5231 b(|GM1)1570
+b(|)523 b(GF1)1046 b(|)3661 b(|)523 b(obligatory|Aunt)h(of)f(the)g
+(proband)19884 64882 y(C1)g(|)g(Jenny)g(Smith)2092 b
+(|female|1969/12/03|)5231 b(|A1)2093 b(|)3138 b(|)3661
+b(|)523 b(affected)g(|)g(Cousin)h(of)f(the)g(proband)19884
+68756 y Fg(\310\344\345\355\362|\324\310\316)10457 b
+(|\317\356\353|\320\356\346\344)3137 b(|\323\354\345\360)g
+(|\314\340\362\374|\316\362\345\366|\317\360\356\341\340\355\344|\321)p
+(\356\361\362\356\377\355\350\345)520 b(|)j
+(\312\356\354\354\345\355\362\340\360\350\351)19884 69974
+y(P)2091 b(|\310\342\340\355\356\342)523 b(\321\345\360\343\345\351)f
+(\317\345\362\360\356\342\350\367)g(|\354\363\346|1965/08/06|)5228
+b(|M1)1045 b(|F1)h(|\344\340)2614 b(|\341\356\353\374\355)g(|)19884
+71191 y(M1)1568 b(|\310\342\340\355\356\342\340)522 b
+(\313\376\341\356\342\374)h
+(\310\342\340\355\356\342\355\340|\346\345\355|1935/12/01|2005/10/01)p
+(|)2088 b(|)k(|)3660 b(|\355\356\360\354)19884 72409
+y(F1)1568 b(|\310\342\340\355\356\342)523 b(\317\345\362\360)f
+(\310\353\374\350\367)3137 b(|\354\363\346|\355\345\350\347\342)2614
+b(|2003/01/25|)2090 b(|)i(|)3660 b(|\356\341\353\350\343\340\362)19884
+73627 y(S1)1568 b(|\310\342\340\355\356\342\340)522 b(\300\355\355\340)
+h(\317\345\362\360\356\342\355\340)1045 b(|\346\345\355|1968/05/05|)
+5228 b(|M1)1045 b(|F1)h(|)3660 b(|\355\356\360\354)19884
+74844 y(K1)1568 b(|\310\342\340\355\356\342)523 b(\310\342\340\355)f
+(\321\345\360\343\345\345\342\350\367)1045 b(|\354\363\346|1990/12/01|)
+5228 b(|)2091 b(|P)1569 b(|)3660 b(|\340\361\350\354\357)1046
+b(|\303\345\355\345\362\350\367.)522 b(\350\361\361\353.)g(2005/12/08)
+19884 76062 y(K2)1568 b(|\310\342\340\355\356\342\340)522
+b(\304\340\360\374\377)h
+(\321\345\360\343\345\345\342\355\340|\346\345\355|1995/03/24|)5227
+b(|)2091 b(|P)1569 b(|)3660 b(|\355\356\360\354)1569
+b(|\303\345\355\345\362\350\367.)522 b(\350\361\361\353.)g(2005/12/08)
+77169 63816 y
+ currentpoint grestore moveto
+ 77169 63816 a 0 TeXcolorgray 0 TeXcolorgray
+12210 66252 a Fv(Listing)371 b(7:)493 b(Examples)370
+b(of)g(Data)g(Files)f(\(English)i(and)f(Russian\))p 0
+TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+25405 70071 a(14)p 0 TeXcolorgray eop end
+%%Page: 15 15
+TeXDict begin 15 14 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.15) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 32060 22112 a
+tx@Dict begin { -170.71646 56.90549 } PutCoor PutBegin end
+ 32060 22112
+a 31273 22112 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@GF1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 31273 22112 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto
+9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial 32060
+22112 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 32060 22112 a 177 w Fp(Joseph)298 b(Smith)32060
+22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 32060 22112 a 32237
+22792 a Fx(I:1)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112
+a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 0.0 56.90549 } PutCoor PutBegin end
+ 32060 22112 a 31273 22112
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@GF2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 31273 22112 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+32060 22112 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 32060 22112 a 177 w Fp(Jim)g(Bro)-24 b(wn)32060
+22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 32060 22112 a 32237
+22792 a Fx(I:3)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112
+a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 113.81097 56.90549 } PutCoor PutBegin end
+ 32060 22112 a 31273 22112
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@GM2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 31273 22112 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+32060 22112 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 32060 22112 a 177 w Fp(Lisa)298 b(Bro)-24
+b(wn)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 32060
+22112 a 32237 22792 a Fx(I:4)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060 22112
+a 32060 22112 a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 56.90549 56.90549 } PutCoor PutBegin end
+ 32060 22112
+a 32060 22112 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@GF2_m_GM2 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin PutEnd end
+ 32060 22112
+a 32060 22112 a
+tx@Dict begin { -113.81097 56.90549 } PutCoor PutBegin end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@GF1_m_GM1 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 32060 22112
+a 32060 22112 a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { -56.90549 56.90549 } PutCoor PutBegin end
+ 32060 22112
+a 31273 22112 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@GM1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 31273 22112 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray 0.0 7.11317 moveto
+0.0 -7.11317 L 0 setlinejoin 0 setlinecap stroke end
+
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto
+9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial 32060 22112 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 32060 22112 a
+177 w Fp(Joan)299 b(Smith)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a
+32060 22112 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 32060 22112 a 32237 22792 a Fx(I:2)32060
+22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060
+22112 a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@F1_m_M1 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 32060 22112 a 32060
+22112 a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { -142.26372 0.0 } PutCoor PutBegin end
+ 32060 22112 a 31273
+22112 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 31273 22112 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray /DS 2.0 2. CLW mul
+add 2 div def /PSTricksDotFont 0. [1.0 0.0 0.0 1.0 0.0 0.0] FontDot
+/Dot { moveto gsave 1. 1. scale (b) show grestore } bind def 0.0
+0.0 Dot end
+
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 32060
+22112 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 32060 22112 a 177 w Fp(Ann)g(Gold)32060 22112
+y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 32060 22112 a 32237 22792
+a Fx(I)28 b(I:1)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112
+a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end
+ 32060 22112 a 31273 22112
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@M1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 31273 22112 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+32060 22112 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 32060 22112 a 177 w Fp(Mary)299 b(Smith)32060
+22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 32060 22112 a 32237
+22792 a Fx(I)28 b(I:3)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060
+22112 a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { -85.35823 0.0 } PutCoor PutBegin end
+ 32060 22112 a 31273
+22112 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@F1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 31273 22112 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha
+ fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0
+setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 32060 22112 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 32060 22112 a 177 w Fp(Bill)297
+b(Smith)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 32060
+22112 a 32237 22792 a Fx(I)28 b(I:2)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060
+22112 a 32060 22112 a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 0.0 -56.90549 } PutCoor PutBegin end
+ 32060
+22112 a 31273 22112 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@S1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 31273 22112 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill
+ grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore end
+
+@endspecial 32060 22112 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 32060 22112 a
+177 w Fp(Reb)c(ecca)296 b(Smith)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060 22112
+a 32060 22112 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 32060 22112 a 32237 22792 a Fx(I)28 b(I)g(I:3)32060
+22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060
+22112 a
+tx@Dict begin { 56.90549 -56.90549 } PutCoor PutBegin end
+ 32060 22112 a 31273 22112 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@S2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 31273 22112 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 32060 22112
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 32060 22112 a 177 w Fp(Alexander)298 b(Smith)32060
+22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 32060 22112 a 32237
+22792 a Fx(I)28 b(I)g(I:4)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a
+32060 22112 a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { -56.90549 -56.90549 } PutCoor PutBegin end
+ 32060 22112
+a 31273 22112 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@P 16 {InitRnode } /NodeScale {} def NewNode end end
+ 31273 22112 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha
+ fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0
+setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow
+1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul
+dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0
+0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub
+moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray
+/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4
+1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0
+h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto
+gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside
+{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load
+def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def
+} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul
+neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha
+y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add
+y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan
+def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 32060
+22112 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 32060 22112 a 177 w Fp(John)298 b(Smith)32060
+22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 32060 22112 a 32237
+22792 a Fx(I)28 b(I)g(I:2)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a
+32060 22112 a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin { -142.26372 -56.90549 } PutCoor PutBegin end
+ 32060 22112
+a 31273 22112 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 31273 22112 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill
+ grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore end
+
+
+@endspecial 32060 22112 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 32060 22112 a 177 w Fp(Jenn)-24
+b(y)298 b(Smith)32060 22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 32060 22112 a 32237 22792 a Fx(I)28 b(I)g(I:1)32060
+22112 y
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin PutEnd end
+ 32060 22112 a 32060
+22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@M1 InitNC { tx@Dict begin
+/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90.
+def /AngleB 90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1
+sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB
+0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@GM2 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 32060 22112 a 32060
+22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@GF2 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@A1 InitNC { tx@Dict begin
+/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90.
+def /AngleB 90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1
+sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB
+0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 32060 22112 a 32060
+22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@F1 InitNC { tx@Dict begin
+/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90.
+def /AngleB 90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1
+sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB
+0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@GM1 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 32060 22112 a 32060
+22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@GF1 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@P InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 32060 22112 a 32060
+22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 32060 22112 a 32060
+22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@M1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 32060 22112 a 32060 22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@F1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 32060 22112 a 32060
+22112 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A1 /N@C1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 32060 22112 a 0 TeXcolorgray 6863 37145 a Fs(I:1)p
+0 TeXcolorgray 553 w Fv(Joseph)369 b(Smith;)i(b)31 b(orn:)492
+b(unkno)-31 b(wn;)371 b(age)f(at)g(death:)494 b(unkno)-31
+b(wn.)p 0 TeXcolorgray 6863 39359 a Fs(I:2)p 0 TeXcolorgray
+553 w Fv(Joan)370 b(Smith;)h(b)31 b(orn:)492 b(1902/07/01;)375
+b(age)370 b(at)g(death:)493 b(73.)p 0 TeXcolorgray 6863
+41573 a Fs(I:3)p 0 TeXcolorgray 553 w Fv(Jim)370 b(Bro)-31
+b(wn;)371 b(b)31 b(orn:)492 b(1905/11/01.)p 0 TeXcolorgray
+6863 43787 a Fs(I:4)p 0 TeXcolorgray 553 w Fv(Lisa)370
+b(Bro)-31 b(wn;)370 b(b)31 b(orn:)492 b(1910/03/03.)p
+0 TeXcolorgray 6863 46001 a Fs(I)35 b(I:1)p 0 TeXcolorgray
+554 w Fv(Ann)369 b(Gold;)h(b)31 b(orn:)492 b(1941/09/02;)374
+b(Aun)-31 b(t)370 b(of)g(the)f(proband.)p 0 TeXcolorgray
+6863 48215 a Fs(I)35 b(I:2)p 0 TeXcolorgray 554 w Fv(Bill)370
+b(Smith;)h(b)31 b(orn:)492 b(1938/04/03.)p 0 TeXcolorgray
+6863 50429 a Fs(I)35 b(I:3)p 0 TeXcolorgray 554 w Fv(Mary)369
+b(Smith;)h(b)31 b(orn:)493 b(1940/02/05.)p 0 TeXcolorgray
+6863 52643 a Fs(I)35 b(I)g(I:1)p 0 TeXcolorgray 554 w
+Fv(Jenn)-31 b(y)369 b(Smith;)i(b)31 b(orn:)492 b(1969/12/03;)374
+b(Cousin)c(of)g(the)g(proband.)p 0 TeXcolorgray 6863
+54857 a Fs(I)35 b(I)g(I:2)p 0 TeXcolorgray 554 w Fv(John)369
+b(Smith;)i(b)31 b(orn:)492 b(1970/02/05;)374 b(Ev)-61
+b(aluated)371 b(2005/12/01.)p 0 TeXcolorgray 6863 57071
+a Fs(I)35 b(I)g(I:3)p 0 TeXcolorgray 554 w Fv(Reb)c(ecca)369
+b(Smith;)i(b)31 b(orn:)492 b(1972/12/25.)p 0 TeXcolorgray
+6863 59284 a Fs(I)35 b(I)g(I:4)p 0 TeXcolorgray 554 w
+Fv(Alexander)370 b(Smith;)h(b)31 b(orn:)492 b(1975/11/12.)6863
+62827 y(Figure)285 b(1:)p 0 TeXcolorgray 11582 62827
+a
+SDict begin H.S end
+ 11582 62827 a 11582 62827 a
+SDict begin H.R end
+ 11582 62827 a 11582 62827
+a
+SDict begin [/View [/XYZ H.V]/Dest (figure.1) cvn /DEST pdfmark end
+ 11582 62827 a 0 TeXcolorgray Fv(Example)i(of)e(the)f(T)-31
+b(yp)31 b(eset)286 b(P)-31 b(edigree)285 b(in)g(English)h(\(Data)g
+(File)e(from)i(Listing)p 0 TeXcolorgray 44069 62827 a
+SDict begin H.S end
+
+44069 62827 a 0 TeXcolorgray Fv(7)p 0 TeXcolorgray 44622
+62113 a
+SDict begin H.R end
+ 44622 62113 a 44622 62827 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.7) cvn H.B /ANN pdfmark end
+ 44622 62827 a 0 TeXcolorgray
+Fv(\))p 0 TeXcolorgray 0 TeXcolorgray 25405 70071 a(15)p
+0 TeXcolorgray eop end
+%%Page: 16 16
+TeXDict begin 16 15 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.16) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 27651 17253 a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 27651 17253
+a 27651 17253 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@F1_m_M1 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin PutEnd end
+ 27651 17253
+a 27651 17253 a
+tx@Dict begin { 93.89413 0.0 } PutCoor PutBegin end
+ 27651 17253 a 26864 17253 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@M1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26864 17253
+a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto
+9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial 27651 17253 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27651 17253 a
+177 w Ff(\310\342\340\355\356\342\340)298 b(\313\376\341\356\342\374)h
+(\310\342\340\355\356\342\355\340)27651 17253 y
+tx@Dict begin PutEnd end
+ 27651
+17253 a 27651 17253 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27651 17253 a 27828 17933 a Fe(I:2)27651
+17253 y
+tx@Dict begin PutEnd end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin PutEnd end
+ 27651 17253 a 27651
+17253 a
+tx@Dict begin { -93.89413 0.0 } PutCoor PutBegin end
+ 27651 17253 a 26864 17253 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@F1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26864 17253 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray /DS 2.0 2. CLW mul
+add 2 div def /PSTricksDotFont 0. [1.0 0.0 0.0 1.0 0.0 0.0] FontDot
+/Dot { moveto gsave 1. 1. scale (b) show grestore } bind def 0.0
+0.0 Dot end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto
+9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial
+27651 17253 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27651 17253 a 177 w Ff(\310\342\340\355\356\342)f
+(\317\345\362\360)h(\310\353\374\350\367)27651 17253
+y
+tx@Dict begin PutEnd end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27651 17253 a 27828 17933
+a Fe(I:1)27651 17253 y
+tx@Dict begin PutEnd end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin PutEnd end
+ 27651
+17253 a 27651 17253 a
+tx@Dict begin { 0.0 -187.78827 } PutCoor PutBegin end
+ 27651 17253 a 26864 17253 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@K2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26864
+17253 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+27651 17253 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27651 17253 a 177 w Ff(\310\342\340\355\356\342\340)f
+(\304\340\360\374\377)h(\321\345\360\343\345\345\342\355\340)27651
+17253 y
+tx@Dict begin PutEnd end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27651 17253 a 27828
+17933 a Fe(I)28 b(I)g(I:2)27651 17253 y
+tx@Dict begin PutEnd end
+ 27651 17253 a
+27651 17253 a
+tx@Dict begin PutEnd end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin { -93.89413 -187.78827 } PutCoor PutBegin end
+ 27651 17253
+a 26864 17253 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@K1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26864 17253 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray 0.0 7.11317 moveto
+0.0 -7.11317 L 0 setlinejoin 0 setlinecap stroke end
+
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 27651
+17253 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27651 17253 a 177 w Ff(\310\342\340\355\356\342)298
+b(\310\342\340\355)h(\321\345\360\343\345\345\342\350\367)27651
+17253 y
+tx@Dict begin PutEnd end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27651 17253 a 27828
+17933 a Fe(I)28 b(I)g(I:1)27651 17253 y
+tx@Dict begin PutEnd end
+ 27651 17253 a
+27651 17253 a
+tx@Dict begin PutEnd end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin { 46.94684 -93.89413 } PutCoor PutBegin end
+ 27651 17253
+a 26864 17253 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@S1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26864 17253 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 27651 17253 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27651 17253 a 177 w Ff
+(\310\342\340\355\356\342\340)298 b(\300\355\355\340)h
+(\317\345\362\360\356\342\355\340)27651 17253 y
+tx@Dict begin PutEnd end
+ 27651
+17253 a 27651 17253 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27651 17253 a 27828 17933 a Fe(I)28
+b(I:2)27651 17253 y
+tx@Dict begin PutEnd end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin PutEnd end
+ 27651
+17253 a 27651 17253 a
+tx@Dict begin { -46.94684 -93.89413 } PutCoor PutBegin end
+ 27651 17253 a 26864 17253 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@P 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26864
+17253 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha
+ fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0
+setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow
+1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul
+dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0
+0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub
+moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray
+/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4
+1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0
+h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto
+gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside
+{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load
+def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def
+} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul
+neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha
+y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add
+y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan
+def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 27651 17253 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+
+27651 17253 a 177 w Ff(\310\342\340\355\356\342)298 b
+(\321\345\360\343\345\351)h(\317\345\362\360\356\342\350\367)27651
+17253 y
+tx@Dict begin PutEnd end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27651 17253 a 27828
+17933 a Fe(I)28 b(I:1)27651 17253 y
+tx@Dict begin PutEnd end
+ 27651 17253 a 27651
+17253 a
+tx@Dict begin PutEnd end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@P InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 27651 17253 a 27651
+17253 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@M1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 27651 17253 a 27651
+17253 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@F1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 27651 17253 a 27651 17253 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@P /N@K1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 27651 17253 a 27651
+17253 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@P /N@K2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 27651 17253 a 0 TeXcolorgray 6863 50869 a Fd(I:1)p
+0 TeXcolorgray 553 w Fc(\310\342\340\355\356\342)370
+b(\317\345\362\360)f(\310\353\374\350\367;)g(\360\356)-31
+b(\344.)369 b(\355\345\350\347\342.;)h(\363\354.)f(\342)g
+(\342\356\347\360.)739 b(\355\345\350\347\342..)p 0 TeXcolorgray
+6863 53083 a Fd(I:2)p 0 TeXcolorgray 553 w Fc
+(\310\342\340\355\356\342\340)370 b(\313\376\341\356\342\374)g
+(\310\342\340\355\356\342\355\340;)h(\360\356)-31 b(\344.)369
+b(1935/12/01;)k(\363\354.)c(\342)h(\342\356\347\360.)738
+b(70.)p 0 TeXcolorgray 6863 55297 a Fd(I)35 b(I:1)p 0
+TeXcolorgray 553 w Fc(\310\342\340\355\356\342)370 b
+(\321\345\360\343\345\351)e(\317\345\362\360\356\342\350\367;)i
+(\360\356)-31 b(\344.)369 b(1965/08/06.)p 0 TeXcolorgray
+6863 57511 a Fd(I)35 b(I:2)p 0 TeXcolorgray 553 w Fc
+(\310\342\340\355\356\342\340)370 b(\300\355\355\340)f
+(\317\345\362\360\356\342\355\340;)h(\360\356)-31 b(\344.)370
+b(1968/05/05.)p 0 TeXcolorgray 6863 59725 a Fd(I)35 b(I)g(I:1)p
+0 TeXcolorgray 553 w Fc(\310\342\340\355\356\342)370
+b(\310\342\340\355)f(\321\345\360\343\345\345\342\350\367;)g(\360\356)
+-31 b(\344.)370 b(1990/12/01;)i(\303)-92 b(\345\355\345\362\350\367.)
+369 b(\350\361\361\353.)f(2005/12/08.)p 0 TeXcolorgray
+6863 61939 a Fd(I)35 b(I)g(I:2)p 0 TeXcolorgray 553 w
+Fc(\310\342\340\355\356\342\340)250 b(\304\340\360\374\377)g
+(\321\345\360\343\345\345\342\355\340;)g(\360\356)-31
+b(\344.)249 b(1995/03/24;)k(\303)-92 b(\345\355\345\362\350\367.)249
+b(\350\361\361\353.)f(2005/12/08.)6863 65481 y Fv(Figure)269
+b(2:)p 0 TeXcolorgray 11559 65481 a
+SDict begin H.S end
+ 11559 65481 a 11559
+65481 a
+SDict begin H.R end
+ 11559 65481 a 11559 65481 a
+SDict begin [/View [/XYZ H.V]/Dest (figure.2) cvn /DEST pdfmark end
+ 11559 65481 a 0 TeXcolorgray
+Fv(Example)i(of)f(the)g(T)-31 b(yp)31 b(eset)270 b(P)-31
+b(edigree)270 b(in)f(Russian)h(\(Data)g(File)g(from)g(Listing)p
+0 TeXcolorgray 44069 65481 a
+SDict begin H.S end
+ 44069 65481 a 0 TeXcolorgray
+Fv(7)p 0 TeXcolorgray 44622 64768 a
+SDict begin H.R end
+ 44622 64768 a 44622
+65481 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.7) cvn H.B /ANN pdfmark end
+ 44622 65481 a 0 TeXcolorgray Fv(\))p 0 TeXcolorgray
+0 TeXcolorgray 25405 70071 a(16)p 0 TeXcolorgray eop
+end
+%%Page: 17 17
+TeXDict begin 17 16 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.17) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 6863 7821 a
+SDict begin H.S end
+ 6863 7821 a
+6863 7821 a
+SDict begin 12 H.A end
+ 6863 7821 a 6863 7821 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.8) cvn /DEST pdfmark
+end
+ 6863 7821 a 6863
+8751 a
+SDict begin H.S end
+ 6863 8751 a 6863 8751 a
+SDict begin 12 H.A end
+ 6863 8751 a 6863 8751
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.8.1) cvn /DEST pdfmark
+end
+ 6863 8751 a 1218 x Fw(Id)523 b(|Name)1046 b(|Sex)1570
+b(|DoB)3661 b(|DoD)g(|Mother|Father|Proband|Twins|Type)6863
+11187 y(F0)523 b(|Adam)1046 b(|male)h(|unknown)1569 b(|unknown)g(|)3139
+b(|)f(|)3661 b(|)2615 b(|)6863 12404 y(A0)523 b(|Sam)1569
+b(|male)1047 b(|1950.01.03|unknown)1569 b(|)3139 b(|F0)2092
+b(|)3661 b(|)523 b(A1)1046 b(|qzygotic)6863 13622 y(A1)523
+b(|John)1046 b(|male)h(|1950.01.03|2005.04.12|)3139 b(|F0)2092
+b(|)3661 b(|)523 b(A0)1046 b(|qzygotic)6863 14840 y(A2)523
+b(|Jane)1046 b(|female|1951.14.15|)5231 b(|)3139 b(|)f(|)3661
+b(|)2615 b(|)6863 16057 y(B1)523 b(|Jack)1046 b(|male)h(|1975.05.06|)
+5230 b(|A2)2093 b(|A1)f(|)3661 b(|B2)1569 b(|monozygotic)6863
+17275 y(B2)523 b(|Mike)1046 b(|male)h(|1975.05.06|)5230
+b(|A2)2093 b(|A1)f(|)3661 b(|B1)1569 b(|monozygotic)6863
+18493 y(B3)523 b(|Pam)1569 b(|female|1973.11.01|)5231
+b(|A2)2093 b(|A1)f(|)3661 b(|)2615 b(|)6863 19710 y(C1)523
+b(|Jane)1046 b(|female|1998.12.04|)5231 b(|)3139 b(|B1)2092
+b(|)3661 b(|C2,C3|)6863 20928 y(C2)523 b(|John)1046 b(|male)h
+(|1998.12.04|)5230 b(|)3139 b(|B1)2092 b(|)3661 b(|C1,C3|)6863
+22146 y(C3)523 b(|George|male)1047 b(|1998.12.04|)5230
+b(|)3139 b(|B1)2092 b(|)1046 b(yes)g(|C1,C2|)6863 23363
+y(C4)523 b(|Ann)1569 b(|female|2003.02.04|)5231 b(|)3139
+b(|B1)2092 b(|)3661 b(|)2615 b(|)p 0 TeXcolorgray 0 TeXcolorgray
+15282 25798 a Fv(Listing)371 b(8:)493 b(Example)371 b(of)e(Data)h(File)
+g(with)g(Twins)p 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 27349 43850 a
+tx@Dict begin { -28.45274 -91.04869 } PutCoor PutBegin end
+ 27349 43850 a 27349 43850
+a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@t_C3_C2_C1 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850
+a
+tx@Dict begin { -85.35823 56.90549 } PutCoor PutBegin end
+ 27349 43850 a 26562 43850 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@F0 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26562 43850 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto
+9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial
+27349 43850 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27349 43850 a 177 w Fp(Adam)27349 43850
+y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27349 43850 a 27526 44530
+a Fx(I:1)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349
+43850 a 27349 43850 a
+tx@Dict begin { 28.45274 -34.1432 } PutCoor PutBegin end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@t_B1_B2 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 27349
+43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin { -56.90549 0.0 } PutCoor PutBegin end
+ 27349
+43850 a 26562 43850 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26562 43850 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto
+9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial
+27349 43850 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27349 43850 a 177 w Fp(John)27349 43850
+y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27349 43850 a 27526 44530
+a Fx(I)28 b(I:2)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850
+a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin { -113.81097 0.0 } PutCoor PutBegin end
+ 27349 43850 a 26562 43850
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26562 43850 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto
+9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial 27349 43850 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+
+27349 43850 a 177 w Fp(Sam)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27349 43850 a 27526 44530 a Fx(I)g(I:1)27349
+43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349
+43850 a
+tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end
+ 27349 43850 a 26562 43850 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26562 43850 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 27349 43850
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27349 43850 a 177 w Fp(Jane)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27349 43850 a 27526 44530 a Fx(I)g(I:3)27349
+43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349
+43850 a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@A1_m_A2 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 27349 43850 a 27349
+43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin { -85.35823 22.76227 } PutCoor PutBegin end
+ 27349 43850 a 27349
+43850 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@t_A1_A0 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349
+43850 a
+tx@Dict begin { -85.35823 -113.81097 } PutCoor PutBegin end
+ 27349 43850 a 26562 43850 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C3 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26562 43850 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow
+1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul
+dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0
+0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub
+moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray
+/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4
+1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0
+h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto
+gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside
+{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load
+def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def
+} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul
+neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha
+y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add
+y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan
+def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 27349 43850 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27349 43850 a
+177 w Fp(George)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27349 43850 a 27526 44530 a Fx(IV:1)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349
+43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin { 85.35823 -113.81097 } PutCoor PutBegin end
+ 27349
+43850 a 26562 43850 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C4 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26562 43850 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 27349 43850 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27349 43850 a
+177 w Fp(Ann)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27349 43850 a 27526 44530 a Fx(IV:4)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349
+43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin { 28.45274 -113.81097 } PutCoor PutBegin end
+ 27349
+43850 a 26562 43850 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26562 43850 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 27349 43850 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27349 43850 a
+177 w Fp(Jane)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27349 43850 a 27526 44530 a Fx(IV:3)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349
+43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin { -28.45274 -113.81097 } PutCoor PutBegin end
+ 27349
+43850 a 26562 43850 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26562 43850 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 27349 43850 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27349 43850 a
+177 w Fp(John)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27349 43850 a 27526 44530 a Fx(IV:2)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349
+43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin { 0.0 -56.90549 } PutCoor PutBegin end
+ 27349
+43850 a 26562 43850 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26562 43850 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 27349 43850 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27349 43850 a
+177 w Fp(Jac)-24 b(k)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349
+43850 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27349 43850 a 27526 44530 a Fx(I)28 b(I)g(I:2)27349
+43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349
+43850 a
+tx@Dict begin { -56.90549 -56.90549 } PutCoor PutBegin end
+ 27349 43850 a 26562 43850 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B3 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26562 43850 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 27349 43850
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27349 43850 a 177 w Fp(P)-24 b(am)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349
+43850 a 27349 43850 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27349 43850 a 27526 44530 a Fx(I)28
+b(I)g(I:1)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349
+43850 a 27349 43850 a
+tx@Dict begin { 56.90549 -56.90549 } PutCoor PutBegin end
+ 27349 43850 a 26562 43850 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 26562
+43850 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+27349 43850 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 27349 43850 a 177 w Fp(Mik)-24 b(e)27349
+43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 27349 43850 a 27526
+44530 a Fx(I)28 b(I)g(I:3)27349 43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a
+27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@t_C3_C2_C1 /N@C1 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@t_C3_C2_C1 InitNC { tx@Dict begin
+ /Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90.
+def /AngleB 90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1
+sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB
+0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@t_C3_C2_C1 /N@C3 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@pst@pdgr@tempnodeA
+10 {InitPnode } /NodeScale {} def NewNode end end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@t_C3_C2_C1 /N@C2 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@pst@pdgr@tempnodeB
+10 {InitPnode } /NodeScale {} def NewNode end end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A1_m_A2 /N@t_B1_B2 InitNC { tx@Dict begin
+ /Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90.
+def /AngleB 90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1
+sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB
+0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@t_B1_B2 /N@B1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@pst@pdgr@tempnodeA
+10 {InitPnode } /NodeScale {} def NewNode end end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@t_B1_B2 /N@B2 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@pst@pdgr@tempnodeB
+10 {InitPnode } /NodeScale {} def NewNode end end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@pst@pdgr@tempnodeA /N@pst@pdgr@tempnodeB
+InitNC { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB 4 copy /y2
+ED /x2 ED /y1 ED /x1 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub
+atan def /ArrowPos 0. def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos
+0.5 abs def {/ArrowPos ArrowPos dArrowPos add def ArrowPos Length
+gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } loop }{/ArrowPos 0. def /dArrowPos 1.
+1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos
+mul y1 add ArrowInside pop pop } repeat } ifelse pop pop lineto pop
+pop end } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A1_m_A2 /N@B3 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A1_m_A2 /N@A2 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A1_m_A2 /N@A1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F0 /N@t_A1_A0 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@t_A1_A0 /N@A0 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@pst@pdgr@tempnodeA
+10 {InitPnode } /NodeScale {} def NewNode end end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@t_A1_A0 /N@A1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@pst@pdgr@tempnodeB
+10 {InitPnode } /NodeScale {} def NewNode end end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@pst@pdgr@tempnodeA /N@pst@pdgr@tempnodeB
+InitNC { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB 4 copy /y2
+ED /x2 ED /y1 ED /x1 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub
+atan def /ArrowPos 0. def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos
+0.5 abs def {/ArrowPos ArrowPos dArrowPos add def ArrowPos Length
+gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } loop }{/ArrowPos 0. def /dArrowPos 1.
+1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos
+mul y1 add ArrowInside pop pop } repeat } ifelse pop pop lineto pop
+pop end } if end grestore end
+ 27349 43850
+a 27349 43850 a
+tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end
+ 27349 43850 a 27088 44234 a Fv(?)27349
+43850 y
+tx@Dict begin PutEnd end
+ 27349 43850 a 27349 43850 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@C4 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 27349 43850 a 0 TeXcolorgray
+8636 65183 a Fv(Figure)369 b(3:)p 0 TeXcolorgray 13482
+65183 a
+SDict begin H.S end
+ 13482 65183 a 13482 65183 a
+SDict begin H.R end
+ 13482 65183 a 13482
+65183 a
+SDict begin [/View [/XYZ H.V]/Dest (figure.3) cvn /DEST pdfmark end
+ 13482 65183 a 0 TeXcolorgray Fv(Example)i(of)f(a)f(P)-31
+b(edigree)370 b(with)g(Twins)g(\(Data)h(File)f(from)f(Listing)p
+0 TeXcolorgray 42297 65183 a
+SDict begin H.S end
+ 42297 65183 a 0 TeXcolorgray
+Fv(8)p 0 TeXcolorgray 42850 64469 a
+SDict begin H.R end
+ 42850 64469 a 42850
+65183 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.8) cvn H.B /ANN pdfmark end
+ 42850 65183 a 0 TeXcolorgray Fv(\))p 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 25405 70071 a(17)p 0 TeXcolorgray
+eop end
+%%Page: 18 18
+TeXDict begin 18 17 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.18) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 6863 10556 a
+SDict begin H.S end
+ 6863 10556
+a 6863 10556 a
+SDict begin 12 H.A end
+ 6863 10556 a 6863 10556 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.9) cvn /DEST pdfmark
+end
+ 6863 10556 a
+6863 11486 a
+SDict begin H.S end
+ 6863 11486 a 6863 11486 a
+SDict begin 12 H.A end
+ 6863 11486 a 6863
+11486 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.9.1) cvn /DEST pdfmark
+end
+ 6863 11486 a 1217 x Fw(Id)523 b(|Name)2616 b(|Sex)1569
+b(|DoB)3661 b(|DoD)h(|Mother|Proband|Condition|Type)6863
+13921 y(A0)523 b(|Ann)3139 b(|female|1970.06.15|)5231
+b(|)3138 b(|)3661 b(|affected)523 b(|)6863 15139 y(B1)g
+(|#abortion|female|1990.03.01|)5232 b(|A0)2092 b(|)3661
+b(|affected)523 b(|)6863 16356 y(B2)g(|#abortion|male)1047
+b(|2000.10.10|)5231 b(|A0)2092 b(|)3661 b(|)4707 b(|sab)6863
+17574 y(B3)523 b(|John)2616 b(|male)1046 b(|2002.12.01|)5231
+b(|A0)2092 b(|yes)g(|affected)523 b(|)p 0 TeXcolorgray
+0 TeXcolorgray 14358 20009 a Fv(Listing)371 b(9:)493
+b(Example)370 b(of)g(Data)g(File)g(with)g(Ab)31 b(ortions)p
+0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+25958 37230 a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 25958 37230 a 25171 37230 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end
+ 25171 37230
+a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill
+ grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore end
+
+@endspecial 25958
+37230 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25958 37230 a 177 w Fp(Ann)25958 37230 y
+tx@Dict begin PutEnd end
+ 25958
+37230 a 25958 37230 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25958 37230 a 26135 37911 a Fx(I:1)25958
+37230 y
+tx@Dict begin PutEnd end
+ 25958 37230 a 25958 37230 a
+tx@Dict begin PutEnd end
+ 25958 37230 a 25958
+37230 a
+tx@Dict begin { 56.90549 -56.90549 } PutCoor PutBegin end
+ 25958 37230 a 25171 37230 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B3 16 {InitRnode } /NodeScale {} def NewNode end end
+ 25171 37230 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha
+ fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0
+setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow
+1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul
+dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0
+0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub
+moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray
+/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4
+1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0
+h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto
+gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside
+{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load
+def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def
+} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul
+neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha
+y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add
+y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan
+def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 25958 37230 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25958 37230 a
+177 w Fp(John)25958 37230 y
+tx@Dict begin PutEnd end
+ 25958 37230 a 25958 37230
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25958 37230 a 26135 37911 a Fx(I)d(I:3)25958 37230
+y
+tx@Dict begin PutEnd end
+ 25958 37230 a 25958 37230 a
+tx@Dict begin PutEnd end
+ 25958 37230 a 25958 37230
+a
+tx@Dict begin { -56.90549 -56.90549 } PutCoor PutBegin end
+ 25958 37230 a 25171 37624 a
+tx@Dict begin tx@NodeDict begin {14.22636 7.11317 14.22635 7.11317
+3.5566 } false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end
+ end
+ 25171 37624 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -7.11317 2.84544 moveto
+7.11317 17.07181 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 7.11317 0.0 14.22636
+-7.11317 7.11317 /Lineto /lineto load def 0 setlinejoin false NArray
+n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt
+{ CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1
+x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div
+def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha
+y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11
+sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos
+mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known
+{ ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1.
+ 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 0.5 setgray 1. .setopacityalpha fill grestore
+gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore end
+
+@endspecial
+25958 37624 a
+tx@Dict begin { 0.0 18.4941 } PutCoor PutBegin end
+ 25958 37624 a 177 w Fp(female)25958 37624
+y
+tx@Dict begin PutEnd end
+ 25958 37624 a 25958 37624 a
+tx@Dict begin { 0.0 2.84544 } PutCoor PutBegin end
+ 25958 37624 a 26135 38305
+a Fx(I)g(I:1)25958 37624 y
+tx@Dict begin PutEnd end
+ 25958 37624 a 25958 37230
+a
+tx@Dict begin PutEnd end
+ 25958 37230 a 25958 37230 a
+tx@Dict begin { 0.0 -56.90549 } PutCoor PutBegin end
+ 25958 37230 a 25171 37624
+a
+tx@Dict begin tx@NodeDict begin {14.22636 7.11317 14.22635 7.11317
+3.5566 } false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end
+ end
+ 25171 37624 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 7.11317 0.0 14.22636
+-7.11317 7.11317 /Lineto /lineto load def 0 setlinejoin false NArray
+n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt
+{ CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1
+x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div
+def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha
+y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11
+sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos
+mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known
+{ ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1.
+ 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore end
+
+@endspecial
+25958 37624 a
+tx@Dict begin { 0.0 18.4941 } PutCoor PutBegin end
+ 25958 37624 a 177 w Fp(male)25958 37624
+y
+tx@Dict begin PutEnd end
+ 25958 37624 a 25958 37624 a
+tx@Dict begin { 0.0 2.84544 } PutCoor PutBegin end
+ 25958 37624 a 26135 38305
+a Fx(I)g(I:2)25958 37624 y
+tx@Dict begin PutEnd end
+ 25958 37624 a 25958 37230
+a
+tx@Dict begin PutEnd end
+ 25958 37230 a 25958 37230 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25958 37230 a 25958 37230
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25958 37230 a 25958 37230 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B3 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25958 37230 a 0 TeXcolorgray
+6863 52264 a Fs(I:1)p 0 TeXcolorgray 553 w Fv(Ann;)370
+b(b)31 b(orn:)492 b(1970.06.15.)p 0 TeXcolorgray 6863
+54478 a Fs(I)35 b(I:1)p 0 TeXcolorgray 554 w Fv(ab)c(ortion;)371
+b(b)31 b(orn:)492 b(1990.03.01.)p 0 TeXcolorgray 6863
+56692 a Fs(I)35 b(I:2)p 0 TeXcolorgray 554 w Fv(ab)c(ortion;)371
+b(b)31 b(orn:)492 b(2000.10.10.)p 0 TeXcolorgray 6863
+58906 a Fs(I)35 b(I:3)p 0 TeXcolorgray 554 w Fv(John;)369
+b(b)31 b(orn:)493 b(2002.12.01.)p 0 TeXcolorgray 7712
+62448 a(Figure)369 b(4:)p 0 TeXcolorgray 12558 62448
+a
+SDict begin H.S end
+ 12558 62448 a 12558 62448 a
+SDict begin H.R end
+ 12558 62448 a 12558 62448
+a
+SDict begin [/View [/XYZ H.V]/Dest (figure.4) cvn /DEST pdfmark end
+ 12558 62448 a 0 TeXcolorgray Fv(Example)i(of)e(a)h(P)-31
+b(edigree)370 b(with)g(Ab)31 b(ortions)370 b(\(Data)h(File)f(from)f
+(Listing)p 0 TeXcolorgray 43221 62448 a
+SDict begin H.S end
+ 43221 62448 a
+0 TeXcolorgray Fv(9)p 0 TeXcolorgray 43774 61735 a
+SDict begin H.R end
+ 43774
+61735 a 43774 62448 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.9) cvn H.B /ANN pdfmark end
+ 43774 62448 a 0 TeXcolorgray Fv(\))p
+0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 25405 70071
+a(18)p 0 TeXcolorgray eop end
+%%Page: 19 19
+TeXDict begin 19 18 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.19) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 6863 6531 a
+SDict begin H.S end
+ 6863 6531 a
+6863 6531 a
+SDict begin 12 H.A end
+ 6863 6531 a 6863 6531 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.10) cvn /DEST pdfmark
+end
+ 6863 6531 a 6863
+7461 a
+SDict begin H.S end
+ 6863 7461 a 6863 7461 a
+SDict begin 12 H.A end
+ 6863 7461 a 6863 7461
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.10.1) cvn /DEST pdfmark
+end
+ 6863 7461 a 1218 x Fw(Id)523 b(|Name)3662 b(|Sex)1569
+b(|Mother|Father|Proband|Type)3139 b(|Comment)6863 9896
+y(A0)523 b(|John)3662 b(|male)1046 b(|)3138 b(|)g(|)3662
+b(|)5230 b(|)6863 11114 y(B1)523 b(|James)3139 b(|male)1046
+b(|)3138 b(|A0)2092 b(|)3662 b(|)5230 b(|)6863 12332
+y(B1c|#childless)524 b(|male)1046 b(|)3138 b(|B1)2092
+b(|)3662 b(|infertile)523 b(|anospermia)6863 13549 y(B2)g(|Ann)4185
+b(|female|)3138 b(|A0)2092 b(|yes)h(|)5230 b(|)6863 14767
+y(B2c|#childless)524 b(|)3138 b(|B2)2092 b(|)3138 b(|)3662
+b(|)5230 b(|)p 0 TeXcolorgray 0 TeXcolorgray 13336 17202
+a Fv(Listing)370 b(10:)494 b(Example)371 b(of)e(Data)h(File)g(with)g
+(Childlessness)p 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 6863 22509 a Fs(F)-106 b(ather:)p 0 TeXcolorgray
+554 w Fv(The)360 b Fq(Id)f Fv(of)h(the)f(c)-31 b(hildless)360
+b(male.)491 b(If)359 b(b)31 b(oth)360 b Fq(Mother)g Fv(and)f
+Fq(Father)h Fv(columns)g(are)9631 23838 y(not)311 b(empt)-31
+b(y)-92 b(,)325 b(the)311 b(en)-31 b(try)311 b(describ)31
+b(es)310 b(the)i(union)f(b)31 b(et)-31 b(w)g(een)312
+b(the)g Fq(Father)g Fv(and)f Fq(Mother)q Fv(.)9631 25166
+y(Of)418 b(only)h Fq(Mother)g Fv(or)f Fq(Father)h Fv(is)f(not)h(empt)
+-31 b(y)-92 b(,)431 b(the)419 b(en)-31 b(try)418 b(describ)31
+b(es)417 b(the)i(state)g(of)9631 26494 y(the)369 b(corresp)31
+b(onding)369 b(p)31 b(erson.)p 0 TeXcolorgray 6863 28708
+a Fs(T)-35 b(yp)35 b(e:)p 0 TeXcolorgray 553 w Fv(This)415
+b(column)h(migh)-31 b(t)417 b(b)31 b(e)414 b(either)i(empt)-31
+b(y)416 b(or)e(ha)-31 b(v)g(e)416 b(a)f(k)-31 b(eyw)g(ord)416
+b Fq(infertile)q Fv(.)630 b(In)9631 30037 y(the)523 b(latter)h(case)f
+(the)h(c)-31 b(hildlessness)523 b(of)h(the)f(p)31 b(erson)522
+b(or)h(union)h(is)f(caused)g(b)-31 b(y)524 b(a)9631 31365
+y(pro)-31 b(v)g(en)369 b(infertilit)-31 b(y)-92 b(.)p
+0 TeXcolorgray 6863 33579 a Fs(Commen)-35 b(t:)p 0 TeXcolorgray
+554 w Fv(The)386 b(v)-61 b(aule)386 b(of)g(this)f(column)i(is)e(sho)-31
+b(wn)386 b(under)f(the)h(c)-31 b(hildlessness)385 b(sym)-31
+b(b)31 b(ol)9631 34907 y(on)412 b(the)h(c)-31 b(hart.)623
+b(Put)413 b(there)f(a)h(short)f(description)i(of)f(the)f(cause)h(of)g
+(c)-31 b(hildlessness,)9631 36236 y(lik)g(e)370 b Fq(anospermia)g
+Fv(or)f Fq(vasectomy)r Fv(.)6863 38450 y(An)291 b(example)i(of)e(a)g(p)
+31 b(edigree)291 b(with)i(c)-31 b(hildlessness)290 b(is)h(sho)-31
+b(wn)292 b(on)f(Listing)p 0 TeXcolorgray 37305 38450
+a
+SDict begin H.S end
+ 37305 38450 a 0 TeXcolorgray Fv(10)p 0 TeXcolorgray
+38411 37736 a
+SDict begin H.R end
+ 38411 37736 a 38411 38450 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.10) cvn H.B /ANN pdfmark end
+ 38411 38450
+a 0 TeXcolorgray 292 w Fv(and)g(Figure)p 0 TeXcolorgray
+44192 38450 a
+SDict begin H.S end
+ 44192 38450 a 0 TeXcolorgray Fv(5)p 0 TeXcolorgray
+44745 37736 a
+SDict begin H.R end
+ 44745 37736 a 44745 38450 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.5) cvn H.B /ANN pdfmark end
+ 44745 38450
+a 0 TeXcolorgray Fv(.)6863 40214 y
+SDict begin H.S end
+ 6863 40214 a 6863
+40214 a
+SDict begin 12 H.A end
+ 6863 40214 a 6863 40214 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.4.6) cvn /DEST pdfmark
+end
+ 6863 40214 a 1334 x
+Ft(4.6)1495 b(Ordering)500 b(Siblings)g(and)f(Marriage)g(P)-42
+b(artners)6863 43592 y Fv(The)312 b(generations)g(in)g(p)31
+b(edigrees)311 b(are)g(ordered)g(in)g(v)-31 b(ertical)313
+b(direction,)325 b(from)312 b(up)f(do)h(do)-31 b(wn.)6863
+44920 y(Ho)g(w)372 b(should)f(w)-31 b(e)372 b(order)e(the)h(p)31
+b(eople)371 b(on)g(the)g(same)g(generation,)j(i.e.)498
+b(siblings)372 b(and)f(mar-)6863 46248 y(riage)f(partners?)8524
+47577 y(Usually)g(t)-31 b(w)g(o)371 b(rules)e(are)g(used:)6863
+48235 y
+SDict begin H.S end
+ 6863 48235 a 6863 48235 a
+SDict begin 12 H.A end
+ 6863 48235 a 6863 48235
+a
+SDict begin [/View [/XYZ H.V]/Dest (Item.17) cvn /DEST pdfmark end
+ 6863 48235 a 0 TeXcolorgray 8216 49791 a Fv(1.)p 0
+TeXcolorgray 555 w(The)331 b(siblings)i(are)e(ordered)g(from)g(the)h
+(oldest)g(on)g(the)g(left)g(to)g(the)g(y)-31 b(oungest)333
+b(to)f(the)9631 51119 y(righ)-31 b(t.)6863 51777 y
+SDict begin H.S end
+ 6863
+51777 a 6863 51777 a
+SDict begin 12 H.A end
+ 6863 51777 a 6863 51777 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.18) cvn /DEST pdfmark end
+ 6863 51777
+a 0 TeXcolorgray 8216 53333 a Fv(2.)p 0 TeXcolorgray
+555 w(In)330 b(marriage)i(or)e(other)h(union)g(the)g(male)h(is)f(to)g
+(the)g(left,)340 b(and)331 b(the)g(female)h(is)e(to)i(the)9631
+54661 y(righ)-31 b(t.)6863 56875 y(Ho)g(w)g(ev)g(er,)365
+b(the)d(com)-31 b(bination)365 b(of)d(these)g(rules)f(migh)-31
+b(t)363 b(lead)g(to)f(the)g(situation)i(when)e(mar-)6863
+58203 y(riage)347 b(lines)f(in)-31 b(tersect)346 b(the)h(paren)-31
+b(tal)347 b(lines.)485 b(Therefore)346 b(the)g(rule)p
+0 TeXcolorgray 34718 58203 a
+SDict begin H.S end
+ 34718 58203 a 0 TeXcolorgray
+Fv(1)p 0 TeXcolorgray 35271 57490 a
+SDict begin H.R end
+ 35271 57490 a 35271
+58203 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (Item.17) cvn H.B /ANN pdfmark end
+ 35271 58203 a 0 TeXcolorgray 346 w Fv(is)g(usually)h
+(implicitly)6863 59532 y(mo)31 b(di\014ed:)p 0 TeXcolorgray
+0 TeXcolorgray 7663 61746 a
+SDict begin H.S end
+ 7663 61746 a 0 TeXcolorgray
+Fv(1)p 0 TeXcolorgray 8216 61032 a
+SDict begin H.R end
+ 8216 61032 a 8216
+61746 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (Item.17) cvn H.B /ANN pdfmark end
+ 8216 61746 a 0 TeXcolorgray Fv(a.)p 0 TeXcolorgray
+555 w(The)400 b(are)g(ordered)f(from)i(the)f(oldest)h(on)g(the)f(left)h
+(to)g(the)g(y)-31 b(oungest)401 b(to)g(the)g(righ)-31
+b(t.)9631 63074 y(Ho)g(w)g(ev)g(er,)550 b(if)513 b(a)f(sibling's)i
+(marriage)g(is)e(sho)-31 b(wn)513 b(on)f(a)h(p)31 b(edigree,)549
+b(this)512 b(sibling)i(is)9631 64402 y(alw)-31 b(a)g(ys)371
+b(the)e(righ)-31 b(tmost)372 b(\(male\))f(or)e(the)g(leftmost)j
+(\(female\).)p 0 TeXcolorgray 25405 70071 a(19)p 0 TeXcolorgray
+eop end
+%%Page: 20 20
+TeXDict begin 20 19 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.20) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 25774 12166 a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 25774 12166
+a 24987 12166 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987 12166 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 25774 12166 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 12166 a 177 w Fp(John)25774
+12166 y
+tx@Dict begin PutEnd end
+ 25774 12166 a 25774 12166 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 12166 a 25951
+12847 a Fx(I:1)25774 12166 y
+tx@Dict begin PutEnd end
+ 25774 12166 a 25774 12166
+a
+tx@Dict begin PutEnd end
+ 25774 12166 a 25774 12166 a
+tx@Dict begin { -28.45274 -79.66776 } PutCoor PutBegin end
+ 25774 12166 a 25144 12166
+a
+tx@Dict begin tx@NodeDict begin {1.42271 1.42271 11.38092 5.69046 0.0
+} false /N@B1c 16 {InitRnode } /NodeScale {} def NewNode end end
+ 25144 12166 a 630 w @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -5.69046 -1.42271 moveto
+5.69046 -1.42271 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -5.69046 1.42271 moveto
+5.69046 1.42271 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial 26404 12166 a
+tx@Dict begin { 0.0 -5.69046 } PutCoor PutBegin end
+
+26404 12166 a 23854 12833 a Fx(anosp)28 b(ermia)26404
+12166 y
+tx@Dict begin PutEnd end
+ 26404 12166 a 25774 12166 a
+tx@Dict begin PutEnd end
+ 25774 12166 a 25774
+12166 a
+tx@Dict begin { 28.45274 -79.66776 } PutCoor PutBegin end
+ 25774 12166 a 25774 12166 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 0.0 0.0 0.0 } false /N@B2c
+16 {InitRnode } /NodeScale {} def NewNode end end
+ 25774 12166 a @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -5.69046 0.0 moveto
+5.69046 0.0 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial 25774 12166 a
+tx@Dict begin PutEnd end
+ 25774 12166 a
+25774 12166 a
+tx@Dict begin { -28.45274 -56.90549 } PutCoor PutBegin end
+ 25774 12166 a 24987 12166 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987 12166
+a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 25774
+12166 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 12166 a 177 w Fp(James)25774 12166 y
+tx@Dict begin PutEnd end
+ 25774
+12166 a 25774 12166 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 12166 a 25951 12847 a Fx(I)g(I:1)25774
+12166 y
+tx@Dict begin PutEnd end
+ 25774 12166 a 25774 12166 a
+tx@Dict begin PutEnd end
+ 25774 12166 a 25774
+12166 a
+tx@Dict begin { 28.45274 -56.90549 } PutCoor PutBegin end
+ 25774 12166 a 24987 12166 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987 12166 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow
+1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul
+dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0
+0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub
+moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray
+/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4
+1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0
+h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto
+gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside
+{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load
+def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def
+} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul
+neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha
+y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add
+y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan
+def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 25774 12166 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 12166 a
+177 w Fp(Ann)25774 12166 y
+tx@Dict begin PutEnd end
+ 25774 12166 a 25774 12166
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 12166 a 25951 12847 a Fx(I)g(I:2)25774 12166
+y
+tx@Dict begin PutEnd end
+ 25774 12166 a 25774 12166 a
+tx@Dict begin PutEnd end
+ 25774 12166 a 25774 12166
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 12166 a 25774 12166 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 12166 a 25774 12166
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@B1c InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 12166 a 25774 12166 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B2 /N@B2c InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 12166 a 6863 33499
+a Fv(Figure)339 b(5:)p 0 TeXcolorgray 11664 33499 a
+SDict begin H.S end
+ 11664
+33499 a 11664 33499 a
+SDict begin H.R end
+ 11664 33499 a 11664 33499 a
+SDict begin [/View [/XYZ H.V]/Dest (figure.5) cvn /DEST pdfmark end
+ 11664
+33499 a 0 TeXcolorgray Fv(Example)i(of)e(a)g(P)-31 b(edigree)340
+b(with)g(Childlessness)g(\(Data)g(File)f(from)h(Listing)p
+0 TeXcolorgray 43516 33499 a
+SDict begin H.S end
+ 43516 33499 a 0 TeXcolorgray
+Fv(10)p 0 TeXcolorgray 44622 32786 a
+SDict begin H.R end
+ 44622 32786 a 44622
+33499 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.10) cvn H.B /ANN pdfmark end
+ 44622 33499 a 0 TeXcolorgray Fv(\))p 0 TeXcolorgray
+6863 37097 a(The)380 b(program)g(follo)-31 b(ws)381 b(these)e(rules.)
+523 b(It)379 b(is)g(enough)h(to)g(dra)-31 b(w)380 b(p)31
+b(edigrees)378 b(in)i(most)g(cases.)6863 38425 y(In)443
+b(particular,)464 b(they)444 b(alw)-31 b(a)g(ys)446 b(pro)31
+b(duce)442 b(correct)i(p)31 b(edigrees)443 b(if)h(there)f(is)h(only)g
+(one)g(mar-)6863 39753 y(riage)351 b(sho)-31 b(wn.)487
+b(Ho)-31 b(w)g(ev)g(er,)356 b(in)350 b(complex)i(cases)d(these)h(rules)
+g(fail,)356 b(as)350 b(sho)-31 b(wn)351 b(on)f(Listing)p
+0 TeXcolorgray 43946 39753 a
+SDict begin H.S end
+ 43946 39753 a 0 TeXcolorgray
+Fv(11)p 0 TeXcolorgray 45052 39040 a
+SDict begin H.R end
+ 45052 39040 a 45052
+39753 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.11) cvn H.B /ANN pdfmark end
+ 45052 39753 a 0 TeXcolorgray 6863 41082 a Fv(and)524
+b(Figure)p 0 TeXcolorgray 12817 41082 a
+SDict begin H.S end
+ 12817 41082 a
+0 TeXcolorgray Fv(6)p 0 TeXcolorgray 13370 40368 a
+SDict begin H.R end
+ 13370
+40368 a 13370 41082 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.6) cvn H.B /ANN pdfmark end
+ 13370 41082 a 0 TeXcolorgray Fv(.)955
+b(It)524 b(is)f(p)31 b(ossible)523 b(to)h(extend)g(the)g(rules)e(ab)31
+b(o)-31 b(v)g(e)525 b(to)f(accoun)-31 b(t)525 b(for)e(these)6863
+42410 y(cases,)427 b(ho)-31 b(w)g(ev)g(er)416 b(w)-31
+b(e)416 b(c)-31 b(hose)415 b(another)h(solution:)586
+b(to)416 b(pro)-31 b(vide)416 b(a)f(facilit)-31 b(y)419
+b(for)c(the)g(man)-31 b(ual)6863 43738 y(in)g(terv)g(en)g(tion)424
+b(in)e(the)f(sorting)h(and)g(ordering)f(algorithm.)652
+b(F)-92 b(or)420 b(this)i(purp)31 b(ose)420 b(a)h(sp)31
+b(ecial)6863 45067 y(column)517 b Fq(SortOrder)g Fv(is)e(used.)932
+b(It)516 b(can)g(ha)-31 b(v)g(e)516 b(p)31 b(ositiv)-31
+b(e)518 b(n)-31 b(um)g(b)31 b(ers)515 b(greater)h(than)g(1)g(or)6863
+46395 y(negativ)-31 b(e)438 b(n)-31 b(um)g(b)31 b(ers)435
+b(smaller)h(than)g(-1.)691 b(If)435 b(the)h(v)-61 b(alue)436
+b(of)f(this)h(column)h(is)e(p)31 b(ositiv)-31 b(e,)454
+b(the)6863 47723 y(corresp)31 b(onding)330 b(p)31 b(erson)329
+b(is)g(mo)-31 b(v)g(ed)332 b(to)e(the)g(left)h(when)e(sorting)i
+(siblings)g(and)f(to)g(the)g(righ)-31 b(t)6863 49052
+y(when)312 b(sorting)g(marriage)g(partners.)473 b(If)311
+b(it)h(is)f(negativ)-31 b(e,)325 b(the)312 b(opp)31 b(osite)312
+b(sorting)g(rule)f(is)g(ap-)6863 50380 y(plied)344 b(\(see)g(Section)p
+0 TeXcolorgray 15586 50380 a
+SDict begin H.S end
+ 15586 50380 a 0 TeXcolorgray
+Fv(7)p 0 TeXcolorgray 16139 49667 a
+SDict begin H.R end
+ 16139 49667 a 16139
+50380 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (section.7) cvn H.B /ANN pdfmark end
+ 16139 50380 a 0 TeXcolorgray 344 w Fv(for)f(more)h(detailed)h
+(discussion\).)485 b(Note)344 b(that)h(sibling)g(sorting)f(and)6863
+51709 y(marriage)349 b(partners)e(sorting)h(m)-31 b(ust)349
+b(w)-31 b(ork)348 b(in)g(opp)31 b(osite)348 b(directions,)353
+b(otherwise)c(marriage)6863 53037 y(lines)370 b(in)-31
+b(tersect)370 b(paternal)g(lines.)8524 54365 y(Let)455
+b(us)f(return)g(to)i(the)f(p)31 b(edigree)455 b(on)g(Listing)p
+0 TeXcolorgray 28910 54365 a
+SDict begin H.S end
+ 28910 54365 a 0 TeXcolorgray
+Fv(11)p 0 TeXcolorgray 30016 53652 a
+SDict begin H.R end
+ 30016 53652 a 30016
+54365 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.11) cvn H.B /ANN pdfmark end
+ 30016 54365 a 0 TeXcolorgray Fv(.)751 b(T)-92
+b(o)455 b(impro)-31 b(v)g(e)456 b(Figure)p 0 TeXcolorgray
+40669 54365 a
+SDict begin H.S end
+ 40669 54365 a 0 TeXcolorgray Fv(6)p 0 TeXcolorgray
+41222 53652 a
+SDict begin H.R end
+ 41222 53652 a 41222 54365 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.6) cvn H.B /ANN pdfmark end
+ 41222 54365
+a 0 TeXcolorgray 455 w Fv(w)-31 b(e)456 b(can)6863 55694
+y(either)412 b(mo)-31 b(v)g(e)414 b(P)-31 b(eter)412
+b(to)h(the)g(righ)-31 b(t)413 b(or)f(Lucy)f(to)i(the)g(left.)622
+b(The)412 b(\014rst)g(solution)i(is)d(sho)-31 b(wn)6863
+57022 y(on)370 b(Listing)p 0 TeXcolorgray 12112 57022
+a
+SDict begin H.S end
+ 12112 57022 a 0 TeXcolorgray Fv(12)p 0 TeXcolorgray
+13218 56309 a
+SDict begin H.R end
+ 13218 56309 a 13218 57022 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.12) cvn H.B /ANN pdfmark end
+ 13218 57022
+a 0 TeXcolorgray 370 w Fv(and)f(Figure)p 0 TeXcolorgray
+19233 57022 a
+SDict begin H.S end
+ 19233 57022 a 0 TeXcolorgray Fv(7)p 0 TeXcolorgray
+19786 56309 a
+SDict begin H.R end
+ 19786 56309 a 19786 57022 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.7) cvn H.B /ANN pdfmark end
+ 19786 57022
+a 0 TeXcolorgray Fv(.)493 b(The)370 b(second)f(is)g(sho)-31
+b(wn)370 b(on)f(Listing)p 0 TeXcolorgray 36155 57022
+a
+SDict begin H.S end
+ 36155 57022 a 0 TeXcolorgray Fv(13)p 0 TeXcolorgray
+37261 56309 a
+SDict begin H.R end
+ 37261 56309 a 37261 57022 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.13) cvn H.B /ANN pdfmark end
+ 37261 57022
+a 0 TeXcolorgray 370 w Fv(and)g(Figure)p 0 TeXcolorgray
+43276 57022 a
+SDict begin H.S end
+ 43276 57022 a 0 TeXcolorgray Fv(8)p 0 TeXcolorgray
+43829 56309 a
+SDict begin H.R end
+ 43829 56309 a 43829 57022 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.8) cvn H.B /ANN pdfmark end
+ 43829 57022
+a 0 TeXcolorgray Fv(.)8524 58350 y(Of)404 b(course)g(sometimes)j(a)e(p)
+31 b(edigree)404 b(cannot)i(b)31 b(e)404 b(dra)-31 b(wn)406
+b(without)h(self-in)-31 b(tersections)6863 59679 y(with)303
+b(an)-31 b(y)303 b(sorting)g(of)g(siblings.)471 b(An)302
+b(example)i(of)e(suc)-31 b(h)302 b(p)31 b(edigree)302
+b(is)g(sho)-31 b(wn)303 b(on)f(Listing)p 0 TeXcolorgray
+43946 59679 a
+SDict begin H.S end
+ 43946 59679 a 0 TeXcolorgray Fv(14)p 0
+TeXcolorgray 45052 58965 a
+SDict begin H.R end
+ 45052 58965 a 45052 59679
+a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.14) cvn H.B /ANN pdfmark end
+ 45052 59679 a 0 TeXcolorgray 6863 61007 a Fv(and)331
+b(Figure)p 0 TeXcolorgray 12431 61007 a
+SDict begin H.S end
+ 12431 61007 a
+0 TeXcolorgray Fv(9)p 0 TeXcolorgray 12984 60294 a
+SDict begin H.R end
+ 12984
+60294 a 12984 61007 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.9) cvn H.B /ANN pdfmark end
+ 12984 61007 a 0 TeXcolorgray Fv(.)480
+b(Ob)-31 b(viously)332 b(no)f(amoun)-31 b(t)332 b(of)f(sh)-31
+b(u\017ing)332 b(the)e(siblngs)h(can)g(help)g(in)f(his)h(case.)8524
+62335 y(If)380 b(the)h(program)h(cannot)g(a)-31 b(v)g(oid)383
+b(self-in)-31 b(tersection)383 b(of)e(marriage)h(lines)f(and)h(paren)
+-31 b(tal)6863 63664 y(lines)439 b(despite)f(automatics)j(sorting)e
+(and)f(man)-31 b(ual)440 b(in)-31 b(terv)g(en)g(tion,)459
+b(as)437 b(the)i(last)g(resort)e(it)6863 64992 y(creates)369
+b(a)h(m)-31 b(ulti-segmen)g(t)372 b(marriage)f(line,)f(as)f(sho)-31
+b(wn)370 b(on)f(Figures)p 0 TeXcolorgray 35887 64992
+a
+SDict begin H.S end
+ 35887 64992 a 0 TeXcolorgray Fv(6)p 0 TeXcolorgray
+36440 64279 a
+SDict begin H.R end
+ 36440 64279 a 36440 64992 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.6) cvn H.B /ANN pdfmark end
+ 36440 64992
+a 0 TeXcolorgray 370 w Fv(and)p 0 TeXcolorgray 38962
+64992 a
+SDict begin H.S end
+ 38962 64992 a 0 TeXcolorgray Fv(9)p 0 TeXcolorgray
+39515 64279 a
+SDict begin H.R end
+ 39515 64279 a 39515 64992 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.9) cvn H.B /ANN pdfmark end
+ 39515 64992
+a 0 TeXcolorgray Fv(.)p 0 TeXcolorgray 25405 70071 a(20)p
+0 TeXcolorgray eop end
+%%Page: 21 21
+TeXDict begin 21 20 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.21) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 6863 11217 a
+SDict begin H.S end
+ 6863 11217
+a 6863 11217 a
+SDict begin 12 H.A end
+ 6863 11217 a 6863 11217 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.11) cvn /DEST pdfmark
+end
+ 6863 11217 a
+6863 12146 a
+SDict begin H.S end
+ 6863 12146 a 6863 12146 a
+SDict begin 12 H.A end
+ 6863 12146 a 6863
+12146 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.11.1) cvn /DEST pdfmark
+end
+ 6863 12146 a 1218 x Fw(Id)523 b(|Name)2616 b(|Sex)1569
+b(|DoB)3661 b(|Father|Mother|Proband)6863 14582 y(A0)523
+b(|John)2616 b(|male)1046 b(|1915.06.15|)3138 b(|)h(|)6863
+15799 y(B1)523 b(|Joan)2616 b(|female|1940.03.02|A0)2092
+b(|)3139 b(|)6863 17017 y(B2)523 b(|Jane)2616 b(|female|1942.07.07|A0)
+2092 b(|)3139 b(|)6863 18235 y(B3)523 b(|Bill)2616 b(|male)1046
+b(|1944.12.01|A0)2092 b(|)3139 b(|)6863 19452 y(B4)523
+b(|Peter)2093 b(|male)1046 b(|1941.05.01|)3138 b(|)h(|)6863
+20670 y(C1)523 b(|Jack)2616 b(|male)1046 b(|1963.12.01|B4)2092
+b(|B2)h(|)6863 21888 y(C2)523 b(|Sam)3139 b(|male)1046
+b(|1961.08.26|)3138 b(|B1)2093 b(|)6863 23105 y(C3)523
+b(|Ann)3139 b(|female|1965.11.12|)f(|B3)2093 b(|)6863
+24323 y(C4)523 b(|Lucy)2616 b(|female|1965.12.11|)3138
+b(|)h(|)6863 25541 y(D1)523 b(|Mark)2616 b(|male)1046
+b(|1989.06.21|C1)2092 b(|C4)h(|yes)6863 26758 y(D2)523
+b(|Dina)2616 b(|female|1991.12.02|C1)2092 b(|C4)h(|)p
+0 TeXcolorgray 0 TeXcolorgray 14375 29194 a Fv(Listing)370
+b(11:)494 b(A)369 b(Data)h(File)g(with)g(a)g(Sorting)g(Problem)p
+0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+6863 42101 a
+SDict begin H.S end
+ 6863 42101 a 6863 42101 a
+SDict begin 12 H.A end
+ 6863 42101 a 6863
+42101 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.12) cvn /DEST pdfmark
+end
+ 6863 42101 a 6863 43031 a
+SDict begin H.S end
+ 6863 43031 a 6863 43031
+a
+SDict begin 12 H.A end
+ 6863 43031 a 6863 43031 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.12.1) cvn /DEST pdfmark
+end
+ 6863 43031 a 1217 x Fw(Id)523
+b(|Name)2616 b(|Sex)1569 b(|DoB)3661 b
+(|Father|Mother|Proband|SortOrder)6863 45466 y(A0)523
+b(|John)2616 b(|male)1046 b(|1915.06.15|)3138 b(|)h(|)3661
+b(|)6863 46684 y(B1)523 b(|Joan)2616 b(|female|1940.03.02|A0)2092
+b(|)3139 b(|)3661 b(|)6863 47901 y(B2)523 b(|Jane)2616
+b(|female|1942.07.07|A0)2092 b(|)3139 b(|)3661 b(|)6863
+49119 y(B3)523 b(|Bill)2616 b(|male)1046 b(|1944.12.01|A0)2092
+b(|)3139 b(|)3661 b(|)6863 50337 y(B4)523 b(|Peter)2093
+b(|male)1046 b(|1941.05.01|)3138 b(|)h(|)3661 b(|)1046
+b(3)6863 51554 y(C1)523 b(|Jack)2616 b(|male)1046 b(|1963.12.01|B4)2092
+b(|B2)h(|)3661 b(|)6863 52772 y(C2)523 b(|Sam)3139 b(|male)1046
+b(|1961.08.26|)3138 b(|B1)2093 b(|)3661 b(|)6863 53990
+y(C3)523 b(|Ann)3139 b(|female|1965.11.12|)f(|B3)2093
+b(|)3661 b(|)6863 55207 y(C4)523 b(|Lucy)2616 b(|female|1965.12.11|)
+3138 b(|)h(|)3661 b(|)6863 56425 y(D1)523 b(|Mark)2616
+b(|male)1046 b(|1989.06.21|C1)2092 b(|C4)h(|yes)f(|)6863
+57642 y(D2)523 b(|Dina)2616 b(|female|1991.12.02|C1)2092
+b(|C4)h(|)3661 b(|)p 0 TeXcolorgray 0 TeXcolorgray 12708
+60078 a Fv(Listing)371 b(12:)493 b(First)369 b(Solution)i(to)f(the)g
+(Problem)g(in)g(Listing)p 0 TeXcolorgray 38101 60078
+a
+SDict begin H.S end
+ 38101 60078 a 0 TeXcolorgray Fv(11)p 0 TeXcolorgray
+39207 59364 a
+SDict begin H.R end
+ 39207 59364 a 39207 60078 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.11) cvn H.B /ANN pdfmark end
+ 39207 60078
+a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 25405 70071 a Fv(21)p 0 TeXcolorgray eop
+end
+%%Page: 22 22
+TeXDict begin 22 21 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.22) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 41522 60180 a
+ gsave currentpoint currentpoint translate 90 neg rotate neg exch neg
+exch translate
+ 41522 60180
+a 79317 47581 a
+tx@Dict begin { -56.90549 56.90549 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B3 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581
+a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 79317
+47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Bill)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262 a Fx(I)28
+b(I:4)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin { -113.81097 56.90549 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530
+47581 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Joan)79317 47581
+y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262
+a Fx(I)g(I:3)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -284.52744 56.90549 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B4 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(P)-24 b(eter)79317
+47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494
+48262 a Fx(I)28 b(I:1)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317
+47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -170.71646 56.90549 } PutCoor PutBegin end
+ 79317 47581 a 78530
+47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Jane)79317
+47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494
+48262 a Fx(I)g(I:2)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317
+47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -227.62195 56.90549 } PutCoor PutBegin end
+ 79317 47581 a 79317
+47581 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@B4_m_B2 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317
+47581 a
+tx@Dict begin { -56.90549 0.0 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C3 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 79317 47581
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Ann)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581
+a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262 a Fx(I)g(I)g(I:3)79317
+47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317
+47581 a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@C1_m_C4 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 79317 47581 a 79317
+47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -113.81097 0.0 } PutCoor PutBegin end
+ 79317 47581 a 78530
+47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Sam)79317
+47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494
+48262 a Fx(I)g(I)g(I:2)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317
+47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -227.62195 0.0 } PutCoor PutBegin end
+ 79317 47581 a 78530
+47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Jac)-24
+b(k)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581
+a 79494 48262 a Fx(I)28 b(I)g(I:1)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end
+ 79317
+47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C4 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a
+177 w Fp(Lucy)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262 a Fx(I)g(I)g(I:4)79317 47581
+y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin { -113.81097 113.81097 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a
+177 w Fp(John)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262 a Fx(I:1)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 28.45274 -56.90549 } PutCoor PutBegin end
+ 79317
+47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@D2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a
+177 w Fp(Dina)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262 a Fx(IV:2)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -28.45274 -56.90549 } PutCoor PutBegin end
+ 79317
+47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@D1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow
+1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul
+dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0
+0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub
+moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray
+/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4
+1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0
+h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto
+gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside
+{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load
+def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def
+} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul
+neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha
+y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add
+y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan
+def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Mark)79317 47581
+y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262
+a Fx(IV:1)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B3 /N@C3 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@C2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@C1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@B2 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@B4 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@D1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@D2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@C4 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C1 /N@C1_m_C4 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA 0. def /AngleB
+180. def /ArmA 22.76227 def /ArmB 22.76227 def /ArmTypeA 0 def /ArmTypeB
+0 def /loopsize 22.76227 def NCLoop } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B3 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317
+47581 a 91915 60180 a
+ currentpoint grestore moveto
+ 91915 60180 a 0 TeXcolorgray 17579
+62615 a Fv(Figure)369 b(6:)p 0 TeXcolorgray 22425 62615
+a
+SDict begin H.S end
+ 22425 62615 a 22425 62615 a
+SDict begin H.R end
+ 22425 62615 a 22425 62615
+a
+SDict begin [/View [/XYZ H.V]/Dest (figure.6) cvn /DEST pdfmark end
+ 22425 62615 a 0 TeXcolorgray Fv(P)-31 b(edigree)370
+b(from)g(Listing)p 0 TeXcolorgray 33230 62615 a
+SDict begin H.S end
+ 33230
+62615 a 0 TeXcolorgray Fv(12)p 0 TeXcolorgray 34336 61902
+a
+SDict begin H.R end
+ 34336 61902 a 34336 62615 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.12) cvn H.B /ANN pdfmark end
+ 34336 62615 a 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 25405 70071
+a Fv(22)p 0 TeXcolorgray eop end
+%%Page: 23 23
+TeXDict begin 23 22 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.23) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 38359 25738 a
+tx@Dict begin { -170.71646 56.90549 } PutCoor PutBegin end
+ 38359 25738
+a 37572 25738 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B3 16 {InitRnode } /NodeScale {} def NewNode end end
+ 37572 25738 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 38359 25738 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 38359 25738 a 177 w Fp(Bill)38359
+25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 38359 25738 a 38536
+26419 a Fx(I)28 b(I:2)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359
+25738 a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin { -227.62195 56.90549 } PutCoor PutBegin end
+ 38359 25738 a 37572
+25738 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 37572 25738 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 38359 25738 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 38359 25738 a 177 w Fp(Joan)38359
+25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 38359 25738 a 38536
+26419 a Fx(I)g(I:1)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359
+25738 a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin { 0.0 56.90549 } PutCoor PutBegin end
+ 38359 25738 a 37572
+25738 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B4 16 {InitRnode } /NodeScale {} def NewNode end end
+ 37572 25738 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 38359 25738 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 38359 25738 a 177 w Fp(P)-24
+b(eter)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 38359
+25738 a 38536 26419 a Fx(I)28 b(I:4)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359
+25738 a 38359 25738 a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin { -113.81097 56.90549 } PutCoor PutBegin end
+ 38359
+25738 a 37572 25738 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 37572 25738 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 38359 25738 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 38359 25738 a
+177 w Fp(Jane)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 38359 25738 a 38536 26419 a Fx(I)g(I:3)38359 25738
+y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738
+a
+tx@Dict begin { -56.90549 56.90549 } PutCoor PutBegin end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@B4_m_B2 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 38359 25738 a 38359 25738
+a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin { -170.71646 0.0 } PutCoor PutBegin end
+ 38359 25738 a 37572 25738
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C3 16 {InitRnode } /NodeScale {} def NewNode end end
+ 37572 25738 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+38359 25738 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 38359 25738 a 177 w Fp(Ann)38359 25738
+y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 38359 25738 a 38536 26419
+a Fx(I)g(I)g(I:2)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738
+a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 38359 25738 a 38359 25738
+a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@C1_m_C4 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738
+a
+tx@Dict begin { -227.62195 0.0 } PutCoor PutBegin end
+ 38359 25738 a 37572 25738 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 37572 25738 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 38359 25738 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 38359 25738 a
+177 w Fp(Sam)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 38359 25738 a 38536 26419 a Fx(I)g(I)g(I:1)38359 25738
+y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738
+a
+tx@Dict begin { -56.90549 0.0 } PutCoor PutBegin end
+ 38359 25738 a 37572 25738 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 37572 25738 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 38359 25738 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 38359 25738 a
+177 w Fp(Jac)-24 b(k)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359
+25738 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 38359 25738 a 38536 26419 a Fx(I)28 b(I)g(I:3)38359
+25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359
+25738 a
+tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end
+ 38359 25738 a 37572 25738 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C4 16 {InitRnode } /NodeScale {} def NewNode end end
+ 37572 25738 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 38359 25738
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 38359 25738 a 177 w Fp(Lucy)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359 25738
+a 38359 25738 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 38359 25738 a 38536 26419 a Fx(I)g(I)g(I:4)38359
+25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359
+25738 a
+tx@Dict begin { -170.71646 113.81097 } PutCoor PutBegin end
+ 38359 25738 a 37572 25738 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end
+ 37572 25738 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 38359 25738
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 38359 25738 a 177 w Fp(John)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359 25738
+a 38359 25738 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 38359 25738 a 38536 26419 a Fx(I:1)38359
+25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359
+25738 a
+tx@Dict begin { 28.45274 -56.90549 } PutCoor PutBegin end
+ 38359 25738 a 37572 25738 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@D2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 37572 25738 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 38359 25738
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 38359 25738 a 177 w Fp(Dina)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359 25738
+a 38359 25738 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 38359 25738 a 38536 26419 a Fx(IV:2)38359
+25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359
+25738 a
+tx@Dict begin { -28.45274 -56.90549 } PutCoor PutBegin end
+ 38359 25738 a 37572 25738 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@D1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 37572 25738 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow
+1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul
+dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0
+0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub
+moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray
+/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4
+1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0
+h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto
+gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside
+{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load
+def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def
+} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul
+neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha
+y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add
+y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan
+def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 38359 25738 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 38359 25738 a
+177 w Fp(Mark)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 38359 25738 a 38536 26419 a Fx(IV:1)38359 25738 y
+tx@Dict begin PutEnd end
+ 38359
+25738 a 38359 25738 a
+tx@Dict begin PutEnd end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B3 /N@C3 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 38359
+25738 a 38359 25738 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@C2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@C1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 38359
+25738 a 38359 25738 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@B2 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@B4 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 38359
+25738 a 38359 25738 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@D1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@D2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 38359
+25738 a 38359 25738 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@C4 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@C1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 38359
+25738 a 38359 25738 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 38359 25738 a 38359 25738 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B3 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 38359
+25738 a 38359 25738 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 38359 25738 a 0 TeXcolorgray 17579
+42100 a Fv(Figure)369 b(7:)p 0 TeXcolorgray 22425 42100
+a
+SDict begin H.S end
+ 22425 42100 a 22425 42100 a
+SDict begin H.R end
+ 22425 42100 a 22425 42100
+a
+SDict begin [/View [/XYZ H.V]/Dest (figure.7) cvn /DEST pdfmark end
+ 22425 42100 a 0 TeXcolorgray Fv(P)-31 b(edigree)370
+b(from)g(Listing)p 0 TeXcolorgray 33230 42100 a
+SDict begin H.S end
+ 33230
+42100 a 0 TeXcolorgray Fv(12)p 0 TeXcolorgray 34336 41387
+a
+SDict begin H.R end
+ 34336 41387 a 34336 42100 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.12) cvn H.B /ANN pdfmark end
+ 34336 42100 a 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 6863 45813
+a
+SDict begin H.S end
+ 6863 45813 a 6863 45813 a
+SDict begin 12 H.A end
+ 6863 45813 a 6863 45813 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.13) cvn /DEST pdfmark
+end
+
+6863 45813 a 6863 46742 a
+SDict begin H.S end
+ 6863 46742 a 6863 46742 a
+SDict begin 12 H.A end
+ 6863
+46742 a 6863 46742 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.13.1) cvn /DEST pdfmark
+end
+ 6863 46742 a 1218 x Fw(Id)523 b(|Name)2616
+b(|Sex)1569 b(|DoB)3661 b(|Father|Mother|Proband|SortOrder)6863
+49178 y(A0)523 b(|John)2616 b(|male)1046 b(|1915.06.15|)3138
+b(|)h(|)3661 b(|)6863 50395 y(B1)523 b(|Joan)2616 b
+(|female|1940.03.02|A0)2092 b(|)3139 b(|)3661 b(|)6863
+51613 y(B2)523 b(|Jane)2616 b(|female|1942.07.07|A0)2092
+b(|)3139 b(|)3661 b(|)6863 52831 y(B3)523 b(|Bill)2616
+b(|male)1046 b(|1944.12.01|A0)2092 b(|)3139 b(|)3661
+b(|)6863 54048 y(B4)523 b(|Peter)2093 b(|male)1046 b(|1941.05.01|)3138
+b(|)h(|)3661 b(|)6863 55266 y(C1)523 b(|Jack)2616 b(|male)1046
+b(|1963.12.01|B4)2092 b(|B2)h(|)3661 b(|)6863 56484 y(C2)523
+b(|Sam)3139 b(|male)1046 b(|1961.08.26|)3138 b(|B1)2093
+b(|)3661 b(|)6863 57701 y(C3)523 b(|Ann)3139 b(|female|1965.11.12|)f
+(|B3)2093 b(|)3661 b(|)6863 58919 y(C4)523 b(|Lucy)2616
+b(|female|1965.12.11|)3138 b(|)h(|)3661 b(|)523 b(-3)6863
+60137 y(D1)g(|Mark)2616 b(|male)1046 b(|1989.06.21|C1)2092
+b(|C4)h(|yes)f(|)6863 61354 y(D2)523 b(|Dina)2616 b
+(|female|1991.12.02|C1)2092 b(|C4)h(|)3661 b(|)p 0 TeXcolorgray
+0 TeXcolorgray 12183 63790 a Fv(Listing)370 b(13:)494
+b(Second)369 b(Solution)i(to)f(the)g(Problem)g(in)f(Listing)p
+0 TeXcolorgray 38627 63790 a
+SDict begin H.S end
+ 38627 63790 a 0 TeXcolorgray
+Fv(11)p 0 TeXcolorgray 39733 63076 a
+SDict begin H.R end
+ 39733 63076 a 39733
+63790 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.11) cvn H.B /ANN pdfmark end
+ 39733 63790 a 0 TeXcolorgray 0 TeXcolorgray 0
+TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 25405 70071
+a Fv(23)p 0 TeXcolorgray eop end
+%%Page: 24 24
+TeXDict begin 24 23 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.24) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 19462 25129 a
+tx@Dict begin { 227.62195 56.90549 } PutCoor PutBegin end
+ 19462 25129
+a 18675 25129 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B3 16 {InitRnode } /NodeScale {} def NewNode end end
+ 18675 25129 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 19462 25129 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 19462 25129 a 177 w Fp(Bill)19462
+25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 19462 25129 a 19639
+25810 a Fx(I)28 b(I:4)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462
+25129 a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin { 170.71646 56.90549 } PutCoor PutBegin end
+ 19462 25129 a 18675
+25129 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 18675 25129 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 19462 25129 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 19462 25129 a 177 w Fp(Joan)19462
+25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 19462 25129 a 19639
+25810 a Fx(I)g(I:3)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462
+25129 a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin { 0.0 56.90549 } PutCoor PutBegin end
+ 19462 25129 a 18675
+25129 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B4 16 {InitRnode } /NodeScale {} def NewNode end end
+ 18675 25129 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 19462 25129 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 19462 25129 a 177 w Fp(P)-24
+b(eter)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 19462
+25129 a 19639 25810 a Fx(I)28 b(I:1)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462
+25129 a 19462 25129 a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin { 113.81097 56.90549 } PutCoor PutBegin end
+ 19462
+25129 a 18675 25129 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 18675 25129 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 19462 25129 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 19462 25129 a
+177 w Fp(Jane)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 19462 25129 a 19639 25810 a Fx(I)g(I:2)19462 25129
+y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129
+a
+tx@Dict begin { 56.90549 56.90549 } PutCoor PutBegin end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@B4_m_B2 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 19462 25129 a 19462 25129
+a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin { 227.62195 0.0 } PutCoor PutBegin end
+ 19462 25129 a 18675 25129
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C3 16 {InitRnode } /NodeScale {} def NewNode end end
+ 18675 25129 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+19462 25129 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 19462 25129 a 177 w Fp(Ann)19462 25129
+y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 19462 25129 a 19639 25810
+a Fx(I)g(I)g(I:4)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129
+a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 19462 25129 a 19462 25129
+a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@C1_m_C4 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129
+a
+tx@Dict begin { 170.71646 0.0 } PutCoor PutBegin end
+ 19462 25129 a 18675 25129 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 18675 25129 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 19462 25129 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 19462 25129 a
+177 w Fp(Sam)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 19462 25129 a 19639 25810 a Fx(I)g(I)g(I:3)19462 25129
+y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129
+a
+tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end
+ 19462 25129 a 18675 25129 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 18675 25129 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 19462 25129 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 19462 25129 a
+177 w Fp(Jac)-24 b(k)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462
+25129 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 19462 25129 a 19639 25810 a Fx(I)28 b(I)g(I:2)19462
+25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462
+25129 a
+tx@Dict begin { -56.90549 0.0 } PutCoor PutBegin end
+ 19462 25129 a 18675 25129 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C4 16 {InitRnode } /NodeScale {} def NewNode end end
+ 18675 25129 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 19462 25129
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 19462 25129 a 177 w Fp(Lucy)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462 25129
+a 19462 25129 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 19462 25129 a 19639 25810 a Fx(I)g(I)g(I:1)19462
+25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462
+25129 a
+tx@Dict begin { 170.71646 113.81097 } PutCoor PutBegin end
+ 19462 25129 a 18675 25129 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end
+ 18675 25129 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 19462 25129
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 19462 25129 a 177 w Fp(John)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462 25129
+a 19462 25129 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 19462 25129 a 19639 25810 a Fx(I:1)19462
+25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462
+25129 a
+tx@Dict begin { 28.45274 -56.90549 } PutCoor PutBegin end
+ 19462 25129 a 18675 25129 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@D2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 18675 25129 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 19462 25129
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 19462 25129 a 177 w Fp(Dina)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462 25129
+a 19462 25129 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 19462 25129 a 19639 25810 a Fx(IV:2)19462
+25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462
+25129 a
+tx@Dict begin { -28.45274 -56.90549 } PutCoor PutBegin end
+ 19462 25129 a 18675 25129 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@D1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 18675 25129 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow
+1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul
+dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0
+0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub
+moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray
+/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4
+1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0
+h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto
+gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside
+{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load
+def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def
+} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul
+neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha
+y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add
+y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan
+def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 19462 25129 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 19462 25129 a
+177 w Fp(Mark)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 19462 25129 a 19639 25810 a Fx(IV:1)19462 25129 y
+tx@Dict begin PutEnd end
+ 19462
+25129 a 19462 25129 a
+tx@Dict begin PutEnd end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B3 /N@C3 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 19462
+25129 a 19462 25129 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@C2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@C1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 19462
+25129 a 19462 25129 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@B2 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@B4 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 19462
+25129 a 19462 25129 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@D1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@D2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 19462
+25129 a 19462 25129 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@C4 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@C1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 19462
+25129 a 19462 25129 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 19462 25129 a 19462 25129 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 19462
+25129 a 19462 25129 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B3 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 19462 25129 a 0 TeXcolorgray 17579
+41491 a Fv(Figure)369 b(8:)p 0 TeXcolorgray 22425 41491
+a
+SDict begin H.S end
+ 22425 41491 a 22425 41491 a
+SDict begin H.R end
+ 22425 41491 a 22425 41491
+a
+SDict begin [/View [/XYZ H.V]/Dest (figure.8) cvn /DEST pdfmark end
+ 22425 41491 a 0 TeXcolorgray Fv(P)-31 b(edigree)370
+b(from)g(Listing)p 0 TeXcolorgray 33230 41491 a
+SDict begin H.S end
+ 33230
+41491 a 0 TeXcolorgray Fv(13)p 0 TeXcolorgray 34336 40778
+a
+SDict begin H.R end
+ 34336 40778 a 34336 41491 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.13) cvn H.B /ANN pdfmark end
+ 34336 41491 a 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 6863 43986
+a
+SDict begin H.S end
+ 6863 43986 a 6863 43986 a
+SDict begin 12 H.A end
+ 6863 43986 a 6863 43986 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.14) cvn /DEST pdfmark
+end
+
+6863 43986 a 6863 44916 a
+SDict begin H.S end
+ 6863 44916 a 6863 44916 a
+SDict begin 12 H.A end
+ 6863
+44916 a 6863 44916 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.14.1) cvn /DEST pdfmark
+end
+ 6863 44916 a 1218 x Fw(Id)523 b(|Name)2616
+b(|Sex)1569 b(|DoB)3661 b(|Father|Mother|Proband)6863
+47351 y(A0)523 b(|John)2616 b(|male)1046 b(|1915.06.15|)3138
+b(|)h(|)6863 48569 y(B1)523 b(|Sam)3139 b(|male)1046
+b(|1935.12.04|A0)2092 b(|)3139 b(|)6863 49787 y(B2)523
+b(|Ann)3139 b(|female|1937.03.02|A0)2092 b(|)3139 b(|)6863
+51004 y(C1)523 b(|Paul)2616 b(|male)1046 b(|1952.10.03|B1)2092
+b(|)3139 b(|)6863 52222 y(F1)523 b(|Scott)2093 b(|male)1046
+b(|1912.02.01|)3138 b(|)h(|)6863 53440 y(G1)523 b(|Simon)2093
+b(|male)1046 b(|1934.09.17|F1)2092 b(|)3139 b(|)6863
+54657 y(G2)523 b(|Sarah)2093 b(|female|1936.12.19|F1)f(|)3139
+b(|)6863 55875 y(H1)523 b(|Lola)2616 b(|female|1960.04.13|G2)2092
+b(|)3139 b(|)6863 57093 y(K1)523 b(|Jim)3139 b(|male)1046
+b(|1962.11.05|G1)2092 b(|B2)h(|)6863 58310 y(M1)523 b(|Jane)2616
+b(|female|1917.02.13|)3138 b(|)h(|)6863 59528 y(P1)523
+b(|Simon)2093 b(|male)1046 b(|1935.10.04|)3138 b(|)523
+b(M1)1570 b(|)6863 60745 y(R1)523 b(|Pam)3139 b(|female|1964.02.05|P1)
+2092 b(|)3139 b(|)6863 61963 y(X1)523 b(|James)2093 b(|male)1046
+b(|1988.07.12|K1)2092 b(|R1)h(|yes)p 0 TeXcolorgray 0
+TeXcolorgray 11771 64398 a Fv(Listing)370 b(14:)493 b(A)370
+b(P)-31 b(edigree)370 b(with)g(Una)-31 b(v)g(oidable)372
+b(Self-In)-31 b(tersections)p 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 25405 70071 a(24)p 0 TeXcolorgray
+eop end
+%%Page: 25 25
+TeXDict begin 25 24 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.25) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 41522 60180 a
+ gsave currentpoint currentpoint translate 90 neg rotate neg exch neg
+exch translate
+ 41522 60180
+a 79317 47581 a
+tx@Dict begin { -227.62195 56.90549 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@G1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581
+a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 79317
+47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Simon)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262 a Fx(I)28
+b(I:2)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin { -284.52744 56.90549 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@G2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530
+47581 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Sarah)79317 47581
+y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262
+a Fx(I)g(I:1)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -56.90549 56.90549 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Sam)79317 47581
+y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262
+a Fx(I)g(I:4)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -113.81097 56.90549 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Ann)79317 47581
+y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262
+a Fx(I)g(I:3)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 56.90549 56.90549 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@P1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Simon)79317 47581
+y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262
+a Fx(I)g(I:5)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -170.71646 56.90549 } PutCoor PutBegin end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@G1_m_B2 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@R1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a
+177 w Fp(P)-24 b(am)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317
+47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262 a Fx(I)28 b(I)g(I:4)79317
+47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317
+47581 a
+tx@Dict begin { -284.52744 0.0 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@H1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 79317 47581
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Lola)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581
+a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262 a Fx(I)g(I)g(I:1)79317
+47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317
+47581 a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@K1_m_R1 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 79317 47581 a 79317
+47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -170.71646 0.0 } PutCoor PutBegin end
+ 79317 47581 a 78530
+47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@K1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(Jim)79317
+47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494
+48262 a Fx(I)g(I)g(I:2)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317
+47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -56.90549 0.0 } PutCoor PutBegin end
+ 79317 47581 a 78530
+47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(P)-24
+b(aul)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317
+47581 a 79494 48262 a Fx(I)28 b(I)g(I:3)79317 47581 y
+tx@Dict begin PutEnd end
+
+79317 47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin { 56.90549 113.81097 } PutCoor PutBegin end
+ 79317 47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@M1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a
+177 w Fp(Jane)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262 a Fx(I:3)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -85.35823 113.81097 } PutCoor PutBegin end
+ 79317
+47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a
+177 w Fp(John)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262 a Fx(I:2)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { -256.07469 113.81097 } PutCoor PutBegin end
+ 79317
+47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@F1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a
+177 w Fp(Scott)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262 a Fx(I:1)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -56.90549 } PutCoor PutBegin end
+ 79317
+47581 a 78530 47581 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@X1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 78530 47581 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow
+1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul
+dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0
+0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub
+moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray
+/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4
+1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0
+h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto
+gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside
+{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load
+def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def
+} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul
+neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha
+y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add
+y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan
+def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+79317 47581 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 79317 47581 a 177 w Fp(James)79317 47581
+y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 79317 47581 a 79494 48262
+a Fx(IV:1)79317 47581 y
+tx@Dict begin PutEnd end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin PutEnd end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@G2 /N@H1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@C1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@P1 /N@R1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@G1_m_B2 /N@K1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@G1_m_B2 /N@B2 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@G1_m_B2 /N@G1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@K1_m_R1 /N@X1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@K1_m_R1 /N@R1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@K1 /N@K1_m_R1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA 0. def /AngleB
+180. def /ArmA 22.76227 def /ArmB 22.76227 def /ArmTypeA 0 def /ArmTypeB
+0 def /loopsize 22.76227 def NCLoop } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@M1 /N@P1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317
+47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1 /N@G2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317 47581 a 79317 47581 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1 /N@G1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 79317
+47581 a 91915 60180 a
+ currentpoint grestore moveto
+ 91915 60180 a 0 TeXcolorgray 17579
+62615 a Fv(Figure)369 b(9:)p 0 TeXcolorgray 22425 62615
+a
+SDict begin H.S end
+ 22425 62615 a 22425 62615 a
+SDict begin H.R end
+ 22425 62615 a 22425 62615
+a
+SDict begin [/View [/XYZ H.V]/Dest (figure.9) cvn /DEST pdfmark end
+ 22425 62615 a 0 TeXcolorgray Fv(P)-31 b(edigree)370
+b(from)g(Listing)p 0 TeXcolorgray 33230 62615 a
+SDict begin H.S end
+ 33230
+62615 a 0 TeXcolorgray Fv(14)p 0 TeXcolorgray 34336 61902
+a
+SDict begin H.R end
+ 34336 61902 a 34336 62615 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.14) cvn H.B /ANN pdfmark end
+ 34336 62615 a 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 25405 70071
+a Fv(25)p 0 TeXcolorgray eop end
+%%Page: 26 26
+TeXDict begin 26 25 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.26) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 6863 6531 a
+SDict begin H.S end
+ 6863 6531 a
+6863 6531 a
+SDict begin 12 H.A end
+ 6863 6531 a 6863 6531 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.15) cvn /DEST pdfmark
+end
+ 6863 6531 a 6863
+7461 a
+SDict begin H.S end
+ 6863 7461 a 6863 7461 a
+SDict begin 12 H.A end
+ 6863 7461 a 6863 7461
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.15.1) cvn /DEST pdfmark
+end
+ 6863 7461 a 1218 x Fw(Id)523 b(|Name)2616 b(|Sex)1569
+b(|Father|Mother|Proband|DoB)6863 9896 y(A0)523 b(|Jane)2616
+b(|female|)3138 b(|)g(|)3662 b(|1908.12.12)6863 11114
+y(B1)523 b(|John)2616 b(|male)1046 b(|)3138 b(|A0)2092
+b(|)3662 b(|1936.12.15)6863 12332 y(B2)523 b(|Ann)3139
+b(|female|)f(|A0)2092 b(|)3662 b(|1934.04.17)6863 13549
+y(B3)523 b(|Samantha)h(|female|)3138 b(|A0)2092 b(|)3662
+b(|1932.12.03)6863 14767 y(B4)523 b(|Nancy)2093 b(|female|)3138
+b(|A0)2092 b(|)3662 b(|1928.01.05)6863 15984 y(C1)523
+b(|Mary)2616 b(|female|)3138 b(|B2)2092 b(|)523 b(yes)1570
+b(|1955.08.26)6863 17202 y(C2)523 b(|Paul)2616 b(|male)1046
+b(|)3138 b(|B3)2092 b(|)3662 b(|1964.05.07)6863 18420
+y(C3)523 b(|Jane)2616 b(|female|)3138 b(|B4)2092 b(|)3662
+b(|1950.11.03)6863 19637 y(D1)523 b(|Jack)2616 b(|male)1046
+b(|B1)2092 b(|C1)g(|)3662 b(|1975.07.01)6863 20855 y(D2)523
+b(|Laura)2093 b(|female|C2)f(|C3)g(|)3662 b(|1974.09.05)p
+0 TeXcolorgray 0 TeXcolorgray 13955 23290 a Fv(Listing)371
+b(15:)493 b(A)369 b(P)-31 b(edigree)370 b(with)h(Consanguinic)g(Unions)
+p 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 6863 27491
+a
+SDict begin H.S end
+ 6863 27491 a 6863 27491 a
+SDict begin 12 H.A end
+ 6863 27491 a 6863 27491 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.4.7) cvn /DEST pdfmark
+end
+
+6863 27491 a 1107 x Ft(4.7)1495 b(Consanguinic)501 b(Unions)6863
+30641 y Fv(Consanguinic)393 b(unions)d(presen)-31 b(t)390
+b(a)g(tec)-31 b(hnical)392 b(problem)f(for)f(the)h(program)g(\(see)f
+(the)g(dis-)6863 31969 y(cussion)365 b(in)g(Section)p
+0 TeXcolorgray 15840 31969 a
+SDict begin H.S end
+ 15840 31969 a 0 TeXcolorgray
+Fv(8)p 0 TeXcolorgray 16393 31256 a
+SDict begin H.R end
+ 16393 31256 a 16393
+31969 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (section.8) cvn H.B /ANN pdfmark end
+ 16393 31969 a 0 TeXcolorgray Fv(\).)492 b(Therefore)365
+b(the)g(supp)31 b(ort)364 b(of)h(consanguinicit)-31 b(y)368
+b(is)c(exp)31 b(erimen)-31 b(tal)6863 33298 y(for)369
+b(this)h(release.)8524 34626 y(There)387 b(is)h(a)g(n)-31
+b(um)g(b)31 b(er)388 b(of)g(limitations)k(for)c(consanguinic)i(unions)e
+(in)g(the)g(data)h(\014le)f(at)6863 35954 y(presen)-31
+b(t.)630 b(First,)426 b(the)415 b(consanguinic)i(unions)e(should)h(not)
+f(in)g(the)h(direct)f(lineage)h(of)g(the)6863 37283 y(proband)358
+b(or)f(the)g(p)31 b(erson)357 b(from)g(whic)-31 b(h)358
+b(the)g(p)31 b(edigree)357 b(starts.)489 b(In)357 b(man)-31
+b(y)358 b(cases)f(this)g(limi-)6863 38611 y(tation)370
+b(can)f(eliminated)h(b)-31 b(y)368 b(using)h Fq(-s)f
+Fv(option)i(\(see)e(Section)p 0 TeXcolorgray 33057 38611
+a
+SDict begin H.S end
+ 33057 38611 a 0 TeXcolorgray Fv(4.1)p 0 TeXcolorgray
+34470 37898 a
+SDict begin H.R end
+ 34470 37898 a 34470 38611 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.1) cvn H.B /ANN pdfmark end
+ 34470 38611
+a 0 TeXcolorgray Fv(\))h(to)g(c)-31 b(ho)31 b(ose)369
+b(a)f(di\013eren)-31 b(t)6863 39939 y(starting)504 b(p)31
+b(oin)-31 b(t)503 b(for)f(the)h(p)31 b(edigree.)892 b(Second,)536
+b(the)502 b(c)-31 b(hildren)503 b(of)g(consanguinic)h(unions)6863
+41268 y(migh)-31 b(t)324 b(app)31 b(ear)323 b(not)g(cen)-31
+b(terd)322 b(on)h(the)f(c)-31 b(harts.)477 b(An)323 b(example)g(of)g(a)
+g(p)31 b(edigree)322 b(with)i(consan-)6863 42596 y(guinic)390
+b(marriages)f(is)f(sho)-31 b(wn)389 b(on)f(Listing)p
+0 TeXcolorgray 25012 42596 a
+SDict begin H.S end
+ 25012 42596 a 0 TeXcolorgray
+Fv(15)p 0 TeXcolorgray 26118 41883 a
+SDict begin H.R end
+ 26118 41883 a 26118
+42596 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.15) cvn H.B /ANN pdfmark end
+ 26118 42596 a 0 TeXcolorgray Fv(,)394 b(and)389
+b(the)f(corresp)31 b(onding)388 b(c)-31 b(hart)389 b(is)f(sho)-31
+b(wn)6863 43924 y(on)383 b(Figure)p 0 TeXcolorgray 11919
+43924 a
+SDict begin H.S end
+ 11919 43924 a 0 TeXcolorgray Fv(10)p 0 TeXcolorgray
+13025 43211 a
+SDict begin H.R end
+ 13025 43211 a 13025 43924 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.10) cvn H.B /ANN pdfmark end
+ 13025 43924
+a 0 TeXcolorgray Fv(.)533 b(The)382 b(dra)-31 b(wbac)g(ks)383
+b(of)g(the)f(program)h(are)f(eviden)-31 b(t)383 b(from)g(the)f(p)31
+b(ositions)384 b(of)6863 45253 y(Laura)369 b(nad)h(Jac)-31
+b(k)370 b(on)f(these)g(c)-31 b(harts.)6863 46802 y
+SDict begin H.S end
+ 6863
+46802 a 6863 46802 a
+SDict begin 12 H.A end
+ 6863 46802 a 6863 46802 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.4.8) cvn /DEST pdfmark
+end
+ 6863 46802
+a 1550 x Ft(4.8)1495 b(Language-Dep)42 b(enden)-42 b(t)501
+b(Keyw)-42 b(ords)6863 50395 y Fv(A)-31 b(t)341 b(presen)-31
+b(t)339 b(the)h(program)h Fo(p)31 b(edigree)340 b Fv(can)g(w)-31
+b(ork)341 b(with)g(English)g(and)f(Russian)g(languages.)6863
+51723 y(As)471 b(discussed)e(in)i(Section)p 0 TeXcolorgray
+18886 51723 a
+SDict begin H.S end
+ 18886 51723 a 0 TeXcolorgray Fv(3.5)p 0
+TeXcolorgray 20299 51010 a
+SDict begin H.R end
+ 20299 51010 a 20299 51723
+a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.3.5) cvn H.B /ANN pdfmark end
+ 20299 51723 a 0 TeXcolorgray Fv(,)498 b(the)471 b(language)i(options)
+f(c)-31 b(ho)31 b(oses)471 b Fn(b)-57 b(oth)555 b Fv(the)471
+b(languages)6863 53052 y(of)i(input)g(and)f(output)i(\014les.)802
+b(It)472 b(is)g(easy)h(to)g(add)f(new)h(languages)h(to)f(the)f(sc)-31
+b(heme)473 b(b)-31 b(y)6863 54380 y(expanding)371 b(the)e(library)h
+Fq(Pedigree::Language.pm)i Fv(in)e(the)f(distribution.)8524
+55708 y(The)526 b(English)i(language)h(is)d(the)h(default.)966
+b(Moreo)-31 b(v)g(er,)567 b(if)527 b(the)g(Russian)f(option)i(is)6863
+57037 y(c)-31 b(hosen,)370 b(English)g(k)-31 b(eyw)g(ords)370
+b(are)f(still)i(recognized)f(in)f(the)h(input)g(\014le.)8524
+58365 y(The)456 b(English)h(and)g(Russian)f(k)-31 b(eyw)g(ords)457
+b(are)f(listed)h(in)f(T)-92 b(able)p 0 TeXcolorgray 35787
+58365 a
+SDict begin H.S end
+ 35787 58365 a 0 TeXcolorgray Fv(1)p 0 TeXcolorgray
+36340 57652 a
+SDict begin H.R end
+ 36340 57652 a 36340 58365 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (table.1) cvn H.B /ANN pdfmark end
+ 36340 58365
+a 0 TeXcolorgray Fv(.)754 b(Note)457 b(that)h(some)6863
+59693 y(k)-31 b(eyw)g(ords)370 b(ha)-31 b(v)g(e)370 b(v)-61
+b(arian)-31 b(ts;)371 b(they)f(are)f(listed)h(in)f(the)h(table)g(as)f
+(w)-31 b(ell.)p 0 TeXcolorgray 25405 70071 a(26)p 0 TeXcolorgray
+eop end
+%%Page: 27 27
+TeXDict begin 27 26 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.27) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 25774 25534 a
+tx@Dict begin { 56.90549 -85.35823 } PutCoor PutBegin end
+ 25774 25534
+a 25774 25534 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@B1_m_C1 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin PutEnd end
+ 25774 25534
+a 25774 25534 a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 25774 25534 a 24987 25534 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987 25534
+a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 25774
+25534 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 25534 a 177 w Fp(Jane)25774 25534 y
+tx@Dict begin PutEnd end
+ 25774
+25534 a 25774 25534 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 25534 a 25951 26215 a Fx(I:1)25774
+25534 y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774
+25534 a
+tx@Dict begin { -85.35823 -113.81097 } PutCoor PutBegin end
+ 25774 25534 a 24987 25534 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C3 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987 25534 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 25774 25534
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 25534 a 177 w Fp(Jane)25774 25534 y
+tx@Dict begin PutEnd end
+ 25774 25534
+a 25774 25534 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 25534 a 25951 26215 a Fx(I)28 b(I)g(I:1)25774
+25534 y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774
+25534 a
+tx@Dict begin { -56.90549 -113.81097 } PutCoor PutBegin end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@C2_m_C3 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 25774 25534 a 25774
+25534 a
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin { 56.90549 -113.81097 } PutCoor PutBegin end
+ 25774 25534 a 25774
+25534 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@B1_m1_C1 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774
+25534 a
+tx@Dict begin { 28.45274 -113.81097 } PutCoor PutBegin end
+ 25774 25534 a 24987 25534 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987 25534 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow
+1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul
+dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0
+0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub
+moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray
+/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4
+1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0
+h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto
+gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside
+{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load
+def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def
+} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul
+neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha
+y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add
+y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan
+def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 25774 25534 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 25534 a
+177 w Fp(Mary)25774 25534 y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 25534 a 25951 26215 a Fx(I)g(I)g(I:3)25774 25534
+y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin { -28.45274 -113.81097 } PutCoor PutBegin end
+ 25774 25534 a 24987 25534 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987 25534 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 25774 25534 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 25534 a
+177 w Fp(P)-24 b(aul)25774 25534 y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774
+25534 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 25534 a 25951 26215 a Fx(I)28 b(I)g(I:2)25774
+25534 y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774
+25534 a
+tx@Dict begin { 85.35823 -56.90549 } PutCoor PutBegin end
+ 25774 25534 a 24987 25534 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987 25534 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 25774 25534
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 25534 a 177 w Fp(John)25774 25534 y
+tx@Dict begin PutEnd end
+ 25774 25534
+a 25774 25534 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 25534 a 25951 26215 a Fx(I)g(I:4)25774
+25534 y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774
+25534 a
+tx@Dict begin { -28.45274 -56.90549 } PutCoor PutBegin end
+ 25774 25534 a 24987 25534 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B3 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987 25534 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 25774 25534
+a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 25534 a 177 w Fp(Saman)-24 b(tha)25774 25534
+y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 25534 a 25951 26215
+a Fx(I)28 b(I:2)25774 25534 y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin { -85.35823 -56.90549 } PutCoor PutBegin end
+ 25774 25534 a 24987 25534
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B4 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987 25534 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+25774 25534 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 25534 a 177 w Fp(Nancy)25774 25534
+y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 25534 a 25951 26215
+a Fx(I)g(I:1)25774 25534 y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin { 28.45274 -56.90549 } PutCoor PutBegin end
+ 25774 25534 a 24987 25534
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987 25534 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+25774 25534 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 25534 a 177 w Fp(Ann)25774 25534
+y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 25534 a 25951 26215
+a Fx(I)g(I:3)25774 25534 y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin { -85.35823 -170.71646 } PutCoor PutBegin end
+ 25774 25534 a 24987 25534
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@D2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987 25534 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+25774 25534 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 25534 a 177 w Fp(Laura)25774 25534
+y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 25534 a 25951 26215
+a Fx(IV:1)25774 25534 y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin PutEnd end
+ 25774
+25534 a 25774 25534 a
+tx@Dict begin { 28.45274 -170.71646 } PutCoor PutBegin end
+ 25774 25534 a 24987 25534 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@D1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 24987
+25534 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+25774 25534 a
+tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end
+ 25774 25534 a 177 w Fp(Jac)-24 b(k)25774
+25534 y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 25774 25534 a 25951
+26215 a Fx(IV:2)25774 25534 y
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin PutEnd end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B1_m_C1 /N@B1_m1_C1 InitNC { tx@Dict begin
+ /Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90.
+def /AngleB 90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1
+sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB
+0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 2.6 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B1_m_C1 /N@C1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 2.6 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+gsave 1.0 SLW 1 setgray stroke grestore gsave grestore grestore
+end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 2.6 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B1_m_C1 /N@B1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 2.6 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+gsave 1.0 SLW 1 setgray stroke grestore gsave grestore grestore
+end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B4 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B3 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C2_m_C3 /N@D2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 2.6 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C2_m_C3 /N@C3 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 2.6 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+gsave 1.0 SLW 1 setgray stroke grestore gsave grestore grestore
+end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 2.6 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@C2_m_C3 /N@C2 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 2.6 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+gsave 1.0 SLW 1 setgray stroke grestore gsave grestore grestore
+end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B1_m1_C1 /N@D1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B3 /N@C2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 25534 a 25774 25534 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B4 /N@C3 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 25534 a 25774 25534
+a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@B2 /N@C1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 25774 25534 a 0 TeXcolorgray 17302 53166 a Fv(Figure)369
+b(10:)p 0 TeXcolorgray 22702 53166 a
+SDict begin H.S end
+ 22702 53166 a 22702
+53166 a
+SDict begin H.R end
+ 22702 53166 a 22702 53166 a
+SDict begin [/View [/XYZ H.V]/Dest (figure.10) cvn /DEST pdfmark end
+ 22702 53166 a 0 TeXcolorgray
+Fv(P)-31 b(edigree)370 b(from)g(Listing)p 0 TeXcolorgray
+33507 53166 a
+SDict begin H.S end
+ 33507 53166 a 0 TeXcolorgray Fv(15)p 0
+TeXcolorgray 34613 52453 a
+SDict begin H.R end
+ 34613 52453 a 34613 53166
+a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (lstlisting.15) cvn H.B /ANN pdfmark end
+ 34613 53166 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 25405 70071 a Fv(27)p 0 TeXcolorgray eop
+end
+%%Page: 28 28
+TeXDict begin 28 27 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.28) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 7974 13932 35970 45 v 8638
+14862 a Fv(English)370 b(k)-31 b(eyw)g(ord)1330 b(English)370
+b(v)-61 b(arian)-31 b(ts)1330 b(Russian)369 b(k)-31 b(eyw)g(ords)p
+7974 15304 V 8638 16234 a Fs(Field)424 b(Names)8638 17563
+y Fv(Id)17379 b Fc(\310\344\345\355\362)8638 18891 y
+Fv(Name)15597 b Fc(\324\310\316)8638 20219 y Fv(Sex)16703
+b Fc(\317\356\353)8638 21548 y Fv(DoB)16211 b Fc(\320)-31
+b(\356)g(\346\344)8638 22876 y Fv(DoD)16149 b Fc(\323\354\345\360)8638
+24204 y Fv(Mother)14855 b Fc(\314\340\362\374)8638 25533
+y Fv(F)-92 b(ather)15239 b Fc(\316\362\345\366)8638 26861
+y Fv(Proband)14256 b Fc(\317\360\356\341\340\355\344)8638
+28189 y Fv(Condition)13600 b Fc(\321\356\361\362\356)-31
+b(\377\355\350\345)8638 29518 y Fv(Commen)g(t)13692 b
+Fc(\312\356\354\354\345\355\362)-31 b(\340\360\350\351)8638
+30846 y Fv(T)g(yp)31 b(e)15904 b Fc(\322\350\357)8638
+32174 y Fv(Twins)15437 b Fc(\301\353\350\347\355\345\366\373)8638
+33503 y Fv(SortOrder)4418 b(Sort)7076 b Fc(\317\356\360)-31
+b(\377\344\356\352\321\356\360\362\350\360\356\342\352\350,)371
+b(\321\356\360\362)8638 34831 y Fs(Field)424 b(V)-106
+b(alues)8638 36159 y Fv(male)16120 b Fc(\354\363\346,)369
+b(\354)8638 37488 y Fv(female)15290 b Fc(\346)-31 b(\345\355,)369
+b(\346)8638 38816 y Fv(unkno)-31 b(wn)14029 b Fc(\355\345\350\347\342,)
+369 b(\355\345\350\347\342\345\361\362\355\356)8638 40145
+y Fv(y)-31 b(es)16912 b Fc(\344\340)8638 41473 y Fv(no)17226
+b Fc(\355\345\362)8638 42801 y Fv(normal)15010 b Fc(\355\356\360\354,)
+369 b(\347\344\356\360\356\342)8638 44130 y Fv(obligatory)4397
+b(obligat)5790 b Fc(\356\341\353\350\343)-31 b(\340\362)8638
+45458 y Fv(asymptomatic)2488 b(asymp)5997 b Fc(\340\361\350\354\357)
+8638 46786 y Fv(a\013ected)5566 b(a\013ect)6495 b Fc
+(\341\356\353\374\355,)370 b(\341\356\353\345\355)8638
+48115 y Fv(infertile)14672 b Fc(\341\345\361\357\353\356)-31
+b(\344\355)8638 49443 y Fv(sab)16789 b Fc(\342\373\352\350\344\373\370)
+8638 50771 y Fv(monozygotic)3232 b(monzygot)4406 b Fc
+(\354\356\355\356\347\350\343\356\362\355,)370 b
+(\354\356\355\356\347\350\343)-92 b(,)368 b(\356)-31
+b(\344\355\356)g(\377\351\366\345\342)8638 52100 y Fv(qzygotic)5291
+b(qzygot,)371 b(?)4711 b Fc(?)8638 53428 y Fs(Sp)35 b(ecial)424
+b(Names)8638 54756 y Fq(#)p Fv(ab)31 b(ortion)13722 b
+Fq(#)p Fc(\340\341\356\360\362)8638 56085 y Fq(#)p Fv(c)-31
+b(hildless)13835 b Fq(#)p Fc(\341\345\347\344\345\362\355)p
+7974 56528 V 0 TeXcolorgray 15725 58514 a Fv(T)-92 b(able)370
+b(1:)p 0 TeXcolorgray 20122 58514 a
+SDict begin H.S end
+ 20122 58514 a 20122
+58514 a
+SDict begin H.R end
+ 20122 58514 a 20122 58514 a
+SDict begin [/View [/XYZ H.V]/Dest (table.1) cvn /DEST pdfmark end
+ 20122 58514 a 0 TeXcolorgray
+Fv(Keyw)-31 b(ords)370 b(in)f(Di\013eren)-31 b(t)369
+b(Languages)p 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
+25405 70071 a(28)p 0 TeXcolorgray eop end
+%%Page: 29 29
+TeXDict begin 29 28 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.29) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 6863 5867 a
+SDict begin H.S end
+ 6863 5867 a 6863 5867 a
+SDict begin 12 H.A end
+ 6863
+5867 a 6863 5867 a
+SDict begin [/View [/XYZ H.V]/Dest (part.2) cvn /DEST pdfmark end
+ 6863 5867 a 1107 x Fu(P)-50 b(art)599
+b(I)50 b(I)6863 9741 y Fr(Algorithm)864 b(Description)6863
+11617 y
+SDict begin H.S end
+ 6863 11617 a 6863 11617 a
+SDict begin 12 H.A end
+ 6863 11617 a 6863 11617
+a
+SDict begin [/View [/XYZ H.V]/Dest (section.5) cvn /DEST pdfmark end
+ 6863 11617 a 1547 x Fu(5)1793 b(In)-50 b(tro)50 b(duction)6863
+15588 y Fv(This)351 b(part)f(is)h(in)-31 b(tended)351
+b(for)f(adv)-61 b(anced)351 b(users)e(and)h(is)g(not)h(neccessary)f
+(for)g(runn)-31 b(uing)351 b(the)6863 16916 y(program.)8524
+18245 y(The)365 b(problem)h(of)g(nicely)g(t)-31 b(yp)31
+b(esetting)368 b(graphs)d(is)g(one)h(of)g(the)f(classical)i(problems)f
+(in)6863 19573 y(the)448 b(Computer)g(Science)g([)p 0
+TeXcolorgray 18416 19573 a
+SDict begin H.S end
+ 18416 19573 a 0 TeXcolorgray
+Fv(4)p 0 TeXcolorgray 18969 18860 a
+SDict begin H.R end
+ 18969 18860 a 18969
+19573 a
+SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (cite.GraphDrawing99) cvn H.B /ANN pdfmark end
+ 18969 19573 a 0 TeXcolorgray 1 w Fv(].)727 b(One)448
+b(of)f(the)h(earliest)g(algorithms)i(here)d(is)g(the)h(classical)6863
+20902 y(algorithm)541 b(for)e(la)-31 b(y)g(ered)540 b(ro)31
+b(oted)539 b(trees)f(b)-31 b(y)539 b(Reingold)h(and)f(Tilford)h([)p
+0 TeXcolorgray 37393 20902 a
+SDict begin H.S end
+ 37393 20902 a 0 TeXcolorgray
+Fv(4)p 0 TeXcolorgray 37946 20188 a
+SDict begin H.R end
+ 37946 20188 a 37946
+20902 a
+SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (cite.GraphDrawing99) cvn H.B /ANN pdfmark end
+ 37946 20902 a 0 TeXcolorgray 1 w Fv(,)581 b Fb(x)538
+b Fv(3.1].)1003 b(This)6863 22230 y(algorithm)359 b(w)-31
+b(as)356 b(implemen)-31 b(ted)358 b(b)-31 b(y)356 b Fq(PSTricks)h
+Fv([)p 0 TeXcolorgray 27382 22230 a
+SDict begin H.S end
+ 27382 22230 a 0 TeXcolorgray
+Fv(3)p 0 TeXcolorgray 27935 21517 a
+SDict begin H.R end
+ 27935 21517 a 27935
+22230 a
+SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (cite.PSTricks93) cvn H.B /ANN pdfmark end
+ 27935 22230 a 0 TeXcolorgray 1 w Fv(].)488 b(Ho)-31
+b(w)g(ev)g(er,)361 b(man)-31 b(y)356 b(p)31 b(edigrees)356
+b(are)f(not)6863 23558 y(trees)440 b([)p 0 TeXcolorgray
+9895 23558 a
+SDict begin H.S end
+ 9895 23558 a 0 TeXcolorgray Fv(2)p 0 TeXcolorgray
+10448 22845 a
+SDict begin H.R end
+ 10448 22845 a 10448 23558 a
+SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (cite.pst-pdgr06) cvn H.B /ANN pdfmark end
+ 10448 23558
+a 0 TeXcolorgray 1 w Fv(].)705 b(If)440 b(w)-31 b(e)440
+b(consider)g(a)g(subset)g(of)g(p)31 b(edigrees)440 b(where)f(in)-31
+b(breeding)441 b(is)f(absen)-31 b(t,)459 b(the)6863 24887
+y(p)31 b(edigrees)334 b(b)31 b(ecome)334 b(trees.)480
+b(Ho)-31 b(w)g(ev)g(er,)343 b(ev)-31 b(en)335 b(in)f(this)g(case)g(the)
+g(the)g(tree)g(is)g(not)h(necessary)6863 26215 y(la)-31
+b(y)g(ered,)426 b(as)413 b(can)g(b)31 b(e)413 b(seen)g(from)g(Figure)p
+0 TeXcolorgray 24685 26215 a
+SDict begin H.S end
+ 24685 26215 a 0 TeXcolorgray
+Fv(1)p 0 TeXcolorgray 25238 25502 a
+SDict begin H.R end
+ 25238 25502 a 25238
+26215 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.1) cvn H.B /ANN pdfmark end
+ 25238 26215 a 0 TeXcolorgray Fv(.)625 b(Therefore)413
+b(a)g(new)h(approac)-31 b(h)414 b(generalizing)6863 27543
+y(Reingold-Tilford)341 b(algorithm)g(is)d(necessary)-92
+b(.)481 b(This)338 b(approac)-31 b(h)339 b(is)f(based)g(on)g(the)g
+(analysis)6863 28872 y(of)370 b(the)f(structure)g(of)h(p)31
+b(edigrees)368 b(and)i(is)f(sk)-31 b(etc)g(hed)370 b(in)f(the)h
+(remainder)f(of)h(this)f(man)-31 b(ual.)6863 30755 y
+SDict begin H.S end
+
+6863 30755 a 6863 30755 a
+SDict begin 12 H.A end
+ 6863 30755 a 6863 30755 a
+SDict begin [/View [/XYZ H.V]/Dest (section.6) cvn /DEST pdfmark end
+ 6863
+30755 a 1777 x Fu(6)1793 b(Main)598 b(Algorithm)6863
+34957 y Fv(A)426 b(p)31 b(edigree)425 b(consists)h(of)g(no)31
+b(des)425 b(\(v)-31 b(ertices\),)441 b(connected)426
+b(b)-31 b(y)426 b(lines)g(\(edges\).)663 b(If)425 b(there)g(is)6863
+36285 y(no)373 b(in)-31 b(breeding,)375 b(the)e(graph)g(is)g(acyclic.)
+505 b(There)373 b(are)f(t)-31 b(w)g(o)375 b(kinds)e(of)g(no)31
+b(des)372 b(in)h(the)g(graph:)6863 37614 y(p)31 b(erson)533
+b(no)31 b(des)533 b(\(squares)h(and)g(circles)f(on)h(Figures)p
+0 TeXcolorgray 29973 37614 a
+SDict begin H.S end
+ 29973 37614 a 0 TeXcolorgray
+Fv(1)p 0 TeXcolorgray 30526 36900 a
+SDict begin H.R end
+ 30526 36900 a 30526
+37614 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.1) cvn H.B /ANN pdfmark end
+ 30526 37614 a 0 TeXcolorgray 534 w Fv(and)p 0
+TeXcolorgray 33377 37614 a
+SDict begin H.S end
+ 33377 37614 a 0 TeXcolorgray
+Fv(2)p 0 TeXcolorgray 33930 36900 a
+SDict begin H.R end
+ 33930 36900 a 33930
+37614 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.2) cvn H.B /ANN pdfmark end
+ 33930 37614 a 0 TeXcolorgray Fv(\))g(and)g Fn(marriage)548
+b(no)-57 b(des)p Fv(,)6863 38942 y(whic)-31 b(h)288 b(are)e(nameless)h
+(on)g(the)g(\014gures.)465 b(W)-92 b(e)286 b(will)i(use)e(the)h
+(notation)j(\\male)e(sp)31 b(ouse-female)6863 40270 y(sp)g(ouse")460
+b(for)g(suc)-31 b(h)459 b(no)31 b(des,)483 b(so)459 b(the)i(marriage)g
+(no)31 b(des)459 b(on)h(Figure)p 0 TeXcolorgray 35531
+40270 a
+SDict begin H.S end
+ 35531 40270 a 0 TeXcolorgray Fv(1)p 0 TeXcolorgray
+36084 39557 a
+SDict begin H.R end
+ 36084 39557 a 36084 40270 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.1) cvn H.B /ANN pdfmark end
+ 36084 40270
+a 0 TeXcolorgray 460 w Fv(are)g(I:1-I:2,)484 b(I:3-I:4)6863
+41599 y(and)330 b(I)31 b(I:2-I)g(I:3.)479 b(A)330 b(no)31
+b(de)329 b(has)g(a)h Fn(pr)-57 b(e)g(c)g(e)g(dessor)449
+b Fv(and)330 b Fn(childr)-57 b(en)p Fv(.)480 b(A)329
+b(marriage)i(no)31 b(de)329 b(do)31 b(es)329 b(not)6863
+42927 y(ha)-31 b(v)g(e)380 b(a)f(precedessor,)i(but)e(has)g
+Fn(male)405 b(sp)-57 b(ouse)462 b Fv(and)379 b Fn(female)406
+b(sp)-57 b(ouse)461 b Fv(\(it)380 b(is)f(customary)h(to)6863
+44255 y(put)336 b(male)h(sp)31 b(ouses)334 b(to)i(the)g(left)h(and)e
+(female)i(sp)31 b(ouses)335 b(to)h(the)g(righ)-31 b(t)336
+b(on)g(p)31 b(edigrees\).)482 b(An)-31 b(y)6863 45584
+y(no)31 b(de)311 b(has)f(a)h Fn(downwar)-57 b(d)341 b(tr)-57
+b(e)g(e)394 b Fv(of)311 b(its)g(c)-31 b(hildren,)323
+b(grandc)-31 b(hildren)312 b(etc.)473 b(The)311 b(do)-31
+b(wn)g(w)g(ard)312 b(tree)6863 46912 y(ma)-31 b(y)371
+b(b)31 b(e)368 b(empt)-31 b(y)-92 b(.)8524 48240 y(An)-31
+b(y)346 b(no)31 b(de)347 b(in)f(an)h(acyclic)g(graph)g(can)f(b)31
+b(e)346 b(a)g(ro)31 b(ot.)486 b(Ho)-31 b(w)g(ev)g(er,)353
+b(in)346 b(la)-31 b(y)g(ered)348 b(trees)d(there)6863
+49569 y(is)377 b(a)g(sp)31 b(ecial)378 b(ro)31 b(ot:)508
+b(the)377 b(one)h(that)g(has)f(no)g(precedessor.)514
+b(Similarly)380 b(w)-31 b(e)377 b(will)i(call)f(a)f Fn(lo)-57
+b(c)g(al)6863 50897 y(r)g(o)g(ot)488 b Fv(a)383 b(no)31
+b(de)384 b(that)g(has)f(no)g(predecessor.)534 b(All)384
+b(marriage)g(no)31 b(des)383 b(are)g(lo)31 b(cal)385
+b(ro)31 b(ots.)534 b(Some)6863 52225 y(p)31 b(erson)369
+b(no)31 b(des)368 b(can)i(b)31 b(e)368 b(lo)31 b(cal)371
+b(ro)31 b(ots)369 b(as)h(w)-31 b(ell.)8524 53554 y(Let)424
+b(us)f(\014rst)h(discuss)f(the)h(case)g(where)g(cobnsanguinic)i
+(marriages)f(are)f(absen)-31 b(t.)658 b(In)6863 54882
+y(this)370 b(case)f(a)g(p)31 b(edigree)369 b(is)h(a)f(tree.)8524
+56210 y(The)443 b(prop)31 b(osed)442 b(algorithm)k(is)d(recursiv)-31
+b(e)442 b(and)i(starts)f(from)g(a)h(lo)31 b(cal)444 b(ro)31
+b(ot.)715 b(Strictly)6863 57539 y(sp)31 b(eaking,)364
+b(it)f(can)e(start)h(from)g(an)-31 b(y)362 b(lo)31 b(cal)363
+b(ro)31 b(ot,)364 b(but)d(medical)i(p)31 b(edigrees)361
+b(ha)-31 b(v)g(e)363 b(a)e(sp)31 b(ecial)6863 58867 y(p)g(erson:)577
+b Fn(pr)-57 b(ob)g(and,)423 b Fv(the)412 b(p)31 b(erson)411
+b(who)i(w)-31 b(as)412 b(the)g(\014rst)g(to)g(b)31 b(e)412
+b(examined)h(b)-31 b(y)412 b(genetic)h(sp)31 b(e-)6863
+60196 y(cialists)426 b(\(the)e(proband)g(is)g(sho)-31
+b(wn)424 b(b)-31 b(y)425 b(an)f(arro)-31 b(w)424 b(dra)-31
+b(wn)425 b(near)e(the)h(no)31 b(de)424 b(on)g(Figures)p
+0 TeXcolorgray 44500 60196 a
+SDict begin H.S end
+ 44500 60196 a 0 TeXcolorgray
+Fv(1)p 0 TeXcolorgray 45053 59482 a
+SDict begin H.R end
+ 45053 59482 a 45053
+60196 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.1) cvn H.B /ANN pdfmark end
+ 45053 60196 a 0 TeXcolorgray 6863 61524 a Fv(and)p
+0 TeXcolorgray 8963 61524 a
+SDict begin H.S end
+ 8963 61524 a 0 TeXcolorgray
+Fv(2)p 0 TeXcolorgray 9516 60811 a
+SDict begin H.R end
+ 9516 60811 a 9516
+61524 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.2) cvn H.B /ANN pdfmark end
+ 9516 61524 a 0 TeXcolorgray Fv(\).)477 b(Therefore)317
+b(it)g(mak)-31 b(es)318 b(sense)e(to)i(start)g(from)f(the)h(lo)31
+b(cal)318 b(ro)31 b(ot)318 b(whic)-31 b(h)318 b(has)f(proband)6863
+62852 y(in)370 b(its)f(do)-31 b(wn)g(w)g(ard)371 b(tree.)8524
+64181 y(If)527 b(this)h(lo)31 b(cal)529 b(ro)31 b(ot)528
+b(is)g(a)g(p)31 b(erson)526 b(no)31 b(de,)568 b(the)528
+b(p)31 b(edigree)527 b(is)h(the)g(la)-31 b(y)g(ered)528
+b(tree,)568 b(and)6863 65509 y(Reingold-Tilford)387 b(algorithm)g(is)c
+(su\016cien)-31 b(t.)537 b(Therefore)384 b(w)-31 b(e)384
+b(should)h(consider)e(only)i(the)p 0 TeXcolorgray 25405
+70071 a(29)p 0 TeXcolorgray eop end
+%%Page: 30 30
+TeXDict begin 30 29 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.30) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 0 TeXcolorgray 28910 18465 a
+tx@Dict begin { -170.71646 56.90549 } PutCoor PutBegin end
+ 28910 18465
+a 28123 18465 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@GF1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 28123 18465 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto
+9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial 28910
+18465 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28910 18465 a 29087 19222 a Fv(I:1)28910 18465
+y
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465
+a
+tx@Dict begin { -113.81097 56.90549 } PutCoor PutBegin end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@GF1_m_GM1 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 28910 18465 a 28910 18465
+a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin { -56.90549 56.90549 } PutCoor PutBegin end
+ 28910 18465 a 28123 18465
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@GM1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 28123 18465 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray 0.0 7.11317 moveto
+0.0 -7.11317 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto
+9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end
+
+@endspecial 28910 18465 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28910 18465 a
+29087 19222 a Fv(I:2)28910 18465 y
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910
+18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin { 0.0 56.90549 } PutCoor PutBegin end
+ 28910 18465 a 28123
+18465 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@GF2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 28123 18465 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+
+@endspecial 28910 18465 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28910 18465 a 29087 19222
+a Fv(I:3)28910 18465 y
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin PutEnd end
+ 28910
+18465 a 28910 18465 a
+tx@Dict begin { 56.90549 56.90549 } PutCoor PutBegin end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@GF2_m_GM2 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 28910
+18465 a 28910 18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin { 113.81097 56.90549 } PutCoor PutBegin end
+ 28910
+18465 a 28123 18465 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@GM2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 28123 18465 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 28910 18465 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28910 18465 a
+29087 19222 a Fv(I:4)28910 18465 y
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910
+18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin { -142.26372 0.0 } PutCoor PutBegin end
+ 28910 18465 a 28123
+18465 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@A1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 28123 18465 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray /DS 2.0 2. CLW mul
+add 2 div def /PSTricksDotFont 0. [1.0 0.0 0.0 1.0 0.0 0.0] FontDot
+/Dot { moveto gsave 1. 1. scale (b) show grestore } bind def 0.0
+0.0 Dot end
+
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 28910
+18465 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28910 18465 a 29087 19222 a Fv(I)31 b(I:1)28910
+18465 y
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910
+18465 a
+tx@Dict begin { -85.35823 0.0 } PutCoor PutBegin end
+ 28910 18465 a 28123 18465 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@F1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 28123 18465 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha
+ fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0
+setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 28910 18465
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28910 18465 a 29087 19222 a Fv(I)g(I:2)28910 18465
+y
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465
+a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@F1_m_M1 10 {InitPnode
+} /NodeScale {} def NewNode end end
+ 28910 18465 a 28910 18465
+a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end
+ 28910 18465 a 28123 18465
+a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@M1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 28123 18465 a 787 w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+28910 18465 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28910 18465 a 29087 19222 a Fv(I)g(I:3)28910
+18465 y
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910
+18465 a
+tx@Dict begin { -142.26372 -56.90549 } PutCoor PutBegin end
+ 28910 18465 a 28123 18465 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 28123 18465 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill
+ grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore end
+
+@endspecial 28910 18465
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28910 18465 a 29087 19222 a Fv(I)g(I)g(I:1)28910 18465
+y
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465
+a
+tx@Dict begin { -56.90549 -56.90549 } PutCoor PutBegin end
+ 28910 18465 a 28123 18465 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@P 16 {InitRnode } /NodeScale {} def NewNode end end
+ 28123 18465 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha
+ fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0
+setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow
+1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul
+dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0
+0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub
+moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray
+/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4
+1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0
+h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto
+gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside
+{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load
+def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def
+} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul
+neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha
+y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add
+y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan
+def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos
+dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial
+28910 18465 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28910 18465 a 29087 19222 a Fv(I)g(I)g(I:2)28910
+18465 y
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910
+18465 a
+tx@Dict begin { 0.0 -56.90549 } PutCoor PutBegin end
+ 28910 18465 a 28123 18465 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@S1 16 {InitRnode } /NodeScale {} def NewNode end end
+ 28123 18465 a 787
+w @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul
+sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill
+ grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore end
+
+@endspecial 28910 18465
+a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28910 18465 a 29087 19222 a Fv(I)g(I)g(I:3)28910 18465
+y
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465
+a
+tx@Dict begin { 56.90549 -56.90549 } PutCoor PutBegin end
+ 28910 18465 a 28123 18465 a
+tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0
+} false /N@S2 16 {InitRnode } /NodeScale {} def NewNode end end
+ 28123 18465 a 787 w @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317
+7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def
+0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore end
+
+@endspecial 28910 18465 a
+tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end
+ 28910 18465 a
+29087 19222 a Fv(I)g(I)g(I:4)28910 18465 y
+tx@Dict begin PutEnd end
+ 28910 18465
+a 28910 18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@A1 InitNC { tx@Dict begin
+/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90.
+def /AngleB 90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1
+sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB
+0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 28910 18465
+a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@F1 InitNC { tx@Dict begin
+/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90.
+def /AngleB 90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1
+sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB
+0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@GM1 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 28910 18465
+a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@GF1 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@M1 InitNC { tx@Dict begin
+/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90.
+def /AngleB 90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1
+sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB
+0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha
+ 0 setlinejoin 0 setlinecap stroke grestore grestore end
+ 28910 18465
+a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@GM2 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@GF2 InitNC { NCCoor tx@Dict
+begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED
+x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0.
+ def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha
+cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop
+pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div
+}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def
+x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside
+pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave
+0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap
+stroke grestore grestore end
+ 28910 18465
+a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@A1 /N@C1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@P InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 28910 18465
+a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S1 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S2 InitNC { tx@Dict begin /Lineto
+/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB
+90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul
+add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles
+ } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin
+0 setlinecap stroke grestore grestore end
+ 28910 18465
+a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@M1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def
+/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin
+0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@F1 InitNC { NCCoor tx@Dict begin
+ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def
+1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray
+ 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore
+ grestore end
+ 28910 18465
+a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /NCLW CLW def tx@NodeDict
+begin 0.0 0.0 neg 19.91682 19.91682 0 0 /N@GF1 /N@GM1 InitNC { tx@Dict
+begin /Lineto /lineto load def 0 setlinejoin false pop end 28.45274
+19.91682 NCBox } if end gsave 45. rotate 0.08 SLW 0 0 1 setrgbcolor
+0.8 0.0 0.0 LineFill grestore grestore end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /NCLW CLW def tx@NodeDict
+begin 0.0 0.0 neg 19.91682 19.91682 0 0 /N@A1 /N@F1 InitNC { tx@Dict
+begin /Lineto /lineto load def 0 setlinejoin false pop end 36.98865
+19.91682 NCBox } if end gsave 45. rotate 0.08 SLW 0 0 1 setrgbcolor
+0.8 0.0 0.0 LineFill grestore grestore end
+ 28910 18465
+a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /NCLW CLW def tx@NodeDict
+begin 0.0 0.0 neg 19.91682 19.91682 0 0 /N@C1 /N@C1 InitNC { tx@Dict
+begin /Lineto /lineto load def 0 setlinejoin false pop end 36.98865
+19.91682 NCBox } if end gsave 45. rotate 0.08 SLW 0 0 1 setrgbcolor
+0.8 0.0 0.0 LineFill grestore grestore end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin { -113.81097 91.04869 } PutCoor PutBegin end
+ 28910 18465
+a 0 0 1 TeXcolorrgb 24901 18742 a Fv(Left)369 b(subp)31
+b(edigree)p 0 TeXcolorgray 28910 18465 a
+tx@Dict begin PutEnd end
+ 28910 18465
+a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /NCLW CLW def tx@NodeDict
+begin 0.0 0.0 neg 19.91682 19.91682 0 0 /N@GF2 /N@GM2 InitNC { tx@Dict
+begin /Lineto /lineto load def 0 setlinejoin false pop end 28.45274
+19.91682 NCBox } if end gsave 45. rotate 0.08 SLW 1 0 0 setrgbcolor
+0.8 0.0 0.0 LineFill grestore grestore end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /NCLW CLW def tx@NodeDict
+begin 0.0 0.0 neg 19.91682 19.91682 0 0 /N@M1 /N@M1 InitNC { tx@Dict
+begin /Lineto /lineto load def 0 setlinejoin false pop end 36.98865
+19.91682 NCBox } if end gsave 45. rotate 0.08 SLW 1 0 0 setrgbcolor
+0.8 0.0 0.0 LineFill grestore grestore end
+ 28910 18465
+a 28910 18465 a
+tx@Dict begin { 56.90549 91.04869 } PutCoor PutBegin end
+ 28910 18465 a 1 0 0 TeXcolorrgb 24532
+18742 a Fv(Righ)-31 b(t)370 b(subp)31 b(edigree)p 0 TeXcolorgray
+28910 18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { }
+def /ArrowInside { } def 0.8 SLW 0 setgray /NCLW CLW def tx@NodeDict
+begin 0.0 0.0 neg 19.91682 19.91682 0 0 /N@P /N@S2 InitNC { tx@Dict
+begin /Lineto /lineto load def 0 setlinejoin false pop end 36.98865
+19.91682 NCBox } if end gsave 45. rotate 0.08 SLW 0 1 0 setrgbcolor
+0.8 0.0 0.0 LineFill grestore grestore end
+ 28910 18465
+a 28910 18465 a
+tx@Dict begin { 0.0 -85.35823 } PutCoor PutBegin end
+ 28910 18465 a 0 1 0 TeXcolorrgb 25241
+18850 a Fv(Do)-31 b(wn)g(w)g(ard)370 b(tree)p 0 TeXcolorgray
+28910 18465 a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end
+ 28910 18465
+a @beginspecial @setspecial
+ tx@Dict begin STP newpath 0.8 SLW 0 setgray /DS 2.0 2. CLW mul
+add 2 div def /PSTricksDotFont 0. [1.0 0.0 0.0 1.0 0.0 0.0] FontDot
+/Dot { moveto gsave 1. 1. scale (b) show grestore } bind def 0.0
+0.0 Dot end
+
+@endspecial 28910 18465
+a
+tx@Dict begin PutEnd end
+ 28910 18465 a 28910 18465 a
+tx@Dict begin { 0.0 5.69046 } PutCoor PutBegin end
+ 28910 18465 a 26410 18850
+a Fv(Lo)31 b(cal)371 b(ro)31 b(ot)28910 18465 y
+tx@Dict begin PutEnd end
+ 28910
+18465 a 0 TeXcolorgray 15033 33499 a Fv(Figure)369 b(11:)p
+0 TeXcolorgray 20433 33499 a
+SDict begin H.S end
+ 20433 33499 a 20433 33499
+a
+SDict begin H.R end
+ 20433 33499 a 20433 33499 a
+SDict begin [/View [/XYZ H.V]/Dest (figure.11) cvn /DEST pdfmark end
+ 20433 33499 a 0 TeXcolorgray
+Fv(Subp)31 b(edigrees)368 b(and)i(Do)-31 b(wn)g(w)g(ard)371
+b(T)-92 b(ree)p 0 TeXcolorgray 0 TeXcolorgray 6863 37035
+a(case)450 b(when)g(the)h(lo)31 b(cal)451 b(ro)31 b(ot)451
+b(is)f(a)g(marriage)h(no)31 b(de.)736 b(In)449 b(this)h(case)g(w)-31
+b(e)451 b(can)f(t)-31 b(yp)31 b(eset)451 b(the)6863 38364
+y(do)-31 b(wn)g(w)g(ard)339 b(tree)e(using)h(Reingold-Tilford)i
+(algorithm.)485 b(The)338 b(sp)31 b(ouses)336 b(do)h(not)h(b)31
+b(elong)338 b(to)6863 39692 y(this)349 b(tree.)485 b(Ho)-31
+b(w)g(ev)g(er,)354 b(eac)-31 b(h)349 b(of)f(them)h(b)31
+b(elongs)348 b(to)h(eac)-31 b(h)349 b(o)-31 b(wn)349
+b(subp)31 b(edigree.)485 b(W)-92 b(e)347 b(will)j(call)6863
+41020 y(them)337 b Fn(left)365 b(subp)-57 b(e)g(digr)g(e)g(e)421
+b Fv(and)336 b Fn(right)366 b(subp)-57 b(e)g(digr)g(e)g(e)p
+Fv(.)483 b(W)-92 b(e)335 b(recursiv)-31 b(ely)336 b(apply)h(our)e
+(algorithm)6863 42349 y(to)442 b(t)-31 b(yp)31 b(eset)442
+b(left)h(and)f(righ)-31 b(t)442 b(subp)31 b(edigrees.)709
+b(Then)441 b(w)-31 b(e)442 b(mo)-31 b(v)g(e)443 b(the)f(left)g(subp)31
+b(edigree)441 b(to)6863 43677 y(the)351 b(righ)-31 b(t)352
+b(and)g(righ)-31 b(t)352 b(subp)31 b(edigree)350 b(to)i(the)f(left)h
+(as)f(far)g(as)g(w)-31 b(e)351 b(can)g(without)i(in)-31
+b(tersection)6863 45005 y(b)31 b(et)-31 b(w)g(een)370
+b(them)g(and)g(the)f(do)-31 b(wn)g(w)g(ard)371 b(tree.)8524
+46334 y(This)329 b(pro)31 b(cess)328 b(is)h(sho)-31 b(wn)329
+b(on)h(Figure)p 0 TeXcolorgray 24170 46334 a
+SDict begin H.S end
+ 24170 46334
+a 0 TeXcolorgray Fv(11)p 0 TeXcolorgray 25276 45620 a
+SDict begin H.R end
+
+25276 45620 a 25276 46334 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.11) cvn H.B /ANN pdfmark end
+ 25276 46334 a 0 TeXcolorgray
+Fv(.)481 b(Ob)-31 b(viously)330 b(this)f(algorithm)j(con)-31
+b(v)g(erges)330 b(and)6863 47662 y(leads)291 b(to)h(t)-31
+b(yp)31 b(esetting)293 b(the)e(p)31 b(edigree)290 b(without)j(in)-31
+b(tersections)292 b(b)31 b(et)-31 b(w)g(een)292 b(the)f(subtrees)f(and)
+6863 48990 y(subp)31 b(edigrees.)6863 50874 y
+SDict begin H.S end
+ 6863 50874
+a 6863 50874 a
+SDict begin 12 H.A end
+ 6863 50874 a 6863 50874 a
+SDict begin [/View [/XYZ H.V]/Dest (section.7) cvn /DEST pdfmark end
+ 6863 50874 a
+1777 x Fu(7)1793 b(Algorithm)696 b(for)e(Sorting)h(Siblings)g(and)g
+(Marriage)9553 54644 y(P)-50 b(artners)6863 57068 y Fv(When)393
+b(w)-31 b(e)394 b(create)f(a)h(marriage)g(no)31 b(de,)400
+b(w)-31 b(e)393 b(w)-31 b(an)g(t)395 b(to)f(put)g(the)f(male)i(to)f
+(the)f(left)h(and)g(the)6863 58396 y(female)426 b(to)f(the)g(righ)-31
+b(t.)659 b(When)424 b(w)-31 b(e)425 b(then)g(sort)f(siblings,)440
+b(w)-31 b(e)425 b(w)-31 b(an)g(t)426 b(this)f(male)h(to)f(b)31
+b(e)424 b(the)6863 59725 y(righ)-31 b(tmost,)370 b(and)d(the)g(female)h
+(to)g(b)31 b(e)366 b(the)h(leftmost.)494 b(T)-92 b(o)367
+b(do)g(so,)h(w)-31 b(e)367 b(assign)g(to)h(eac)-31 b(h)367
+b(no)31 b(de)6863 61053 y(the)481 b(sp)31 b(ecial)481
+b(quan)-31 b(tit)g(y)483 b Fq(SortOrder)q Fv(.)826 b(Initially)483
+b(all)f(no)31 b(des)480 b(ha)-31 b(v)g(e)481 b Fq(SortOrder)h
+Fv(equal)f(to)6863 62381 y(zero,)367 b(unless)e(sp)31
+b(eci\014cally)368 b(set)d(b)-31 b(y)367 b(the)f(user)f(in)h(the)g
+(input)h(\014le)f(\(see)f(Section)p 0 TeXcolorgray 39889
+62381 a
+SDict begin H.S end
+ 39889 62381 a 0 TeXcolorgray Fv(4.6)p 0 TeXcolorgray
+41302 61668 a
+SDict begin H.R end
+ 41302 61668 a 41302 62381 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.6) cvn H.B /ANN pdfmark end
+ 41302 62381
+a 0 TeXcolorgray Fv(\).)493 b(Then)6863 63710 y(w)-31
+b(e)370 b(use)e(the)i(follo)-31 b(wing)373 b(rules:)6863
+64368 y
+SDict begin H.S end
+ 6863 64368 a 6863 64368 a
+SDict begin 12 H.A end
+ 6863 64368 a 6863 64368
+a
+SDict begin [/View [/XYZ H.V]/Dest (Item.19) cvn /DEST pdfmark end
+ 6863 64368 a 0 TeXcolorgray 8216 65924 a Fv(1.)p 0
+TeXcolorgray 555 w(When)368 b(creating)j(the)e(the)g(marriage)i(no)31
+b(de:)p 0 TeXcolorgray 25405 70071 a(30)p 0 TeXcolorgray
+eop end
+%%Page: 31 31
+TeXDict begin 31 30 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.31) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 6863 5867 a
+SDict begin H.S end
+ 6863 5867 a 6863 5867 a
+SDict begin 12 H.A end
+ 6863
+5867 a 6863 5867 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.20) cvn /DEST pdfmark end
+ 6863 5867 a 0 TeXcolorgray 10098 6974
+a Fv(\(a\))p 0 TeXcolorgray 555 w(If)316 b(b)31 b(oth)318
+b(sp)31 b(ouses)315 b(ha)-31 b(v)g(e)318 b(equal)g Fq(SortOrder)g
+Fv(\014eld,)328 b(the)317 b(male)h(go)31 b(es)317 b(to)h(the)f(left,)
+12066 8302 y(the)369 b(female)i(go)31 b(es)369 b(to)h(the)g(righ)-31
+b(t.)6863 8739 y
+SDict begin H.S end
+ 6863 8739 a 6863 8739 a
+SDict begin 12 H.A end
+ 6863 8739 a
+6863 8739 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.21) cvn /DEST pdfmark end
+ 6863 8739 a 0 TeXcolorgray 10036 10073 a
+Fv(\(b\))p 0 TeXcolorgray 555 w(Otherwise,)370 b(the)f(sp)31
+b(ouse)369 b(with)h(greater)g Fq(SortOrder)g Fv(go)31
+b(es)369 b(to)h(the)g(left.)6863 10571 y
+SDict begin H.S end
+ 6863 10571 a
+6863 10571 a
+SDict begin 12 H.A end
+ 6863 10571 a 6863 10571 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.22) cvn /DEST pdfmark end
+ 6863 10571 a 0
+TeXcolorgray 10159 11844 a Fv(\(c\))p 0 TeXcolorgray
+555 w(If)377 b Fq(SortOrder)i Fv(of)f(a)g(sp)31 b(ouse)377
+b(is)h(0,)j(w)-31 b(e)378 b(set)f(it)i(to)f(1)g(\(the)h(sp)31
+b(ouse)377 b(on)h(the)g(left\))12066 13173 y(or)369 b(-1)g(\(the)h(sp)
+31 b(ouse)369 b(on)g(the)h(righ)-31 b(t\).)6863 13892
+y
+SDict begin H.S end
+ 6863 13892 a 6863 13892 a
+SDict begin 12 H.A end
+ 6863 13892 a 6863 13892 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.23) cvn /DEST pdfmark end
+
+6863 13892 a 0 TeXcolorgray 8216 15387 a Fv(2.)p 0 TeXcolorgray
+555 w(When)368 b(sorting)i(siblings:)6863 16266 y
+SDict begin H.S end
+ 6863
+16266 a 6863 16266 a
+SDict begin 12 H.A end
+ 6863 16266 a 6863 16266 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.24) cvn /DEST pdfmark end
+ 6863 16266
+a 0 TeXcolorgray 10098 17601 a Fv(\(a\))p 0 TeXcolorgray
+555 w(The)f(sibling)i(with)f(smaller)g Fq(SortOrder)h
+Fv(go)31 b(es)369 b(to)h(the)f(left.)6863 18099 y
+SDict begin H.S end
+ 6863
+18099 a 6863 18099 a
+SDict begin 12 H.A end
+ 6863 18099 a 6863 18099 a
+SDict begin [/View [/XYZ H.V]/Dest (Item.25) cvn /DEST pdfmark end
+ 6863 18099
+a 0 TeXcolorgray 10036 19372 a Fv(\(b\))p 0 TeXcolorgray
+555 w(If)345 b(b)31 b(oth)345 b(siblings)h(ha)-31 b(v)g(e)346
+b(the)f(same)g Fq(SortOrder)r Fv(,)350 b(the)345 b(oldest)h(one)f(go)31
+b(es)345 b(to)h(the)12066 20700 y(left.)6863 22368 y
+SDict begin H.S end
+
+6863 22368 a 6863 22368 a
+SDict begin 12 H.A end
+ 6863 22368 a 6863 22368 a
+SDict begin [/View [/XYZ H.V]/Dest (section.8) cvn /DEST pdfmark end
+ 6863
+22368 a 1993 x Fu(8)1793 b(Mo)50 b(di\014cations)598
+b(for)g(Consangunic)h(Unions)6863 26785 y Fv(Consanguinic)500
+b(unions)d(presen)-31 b(t)497 b(a)g(problem)h(for)f(the)h(describ)31
+b(ed)496 b(algorithm,)533 b(b)31 b(ecause)6863 28114
+y(p)g(edigrees)369 b(with)h(them)g(are)f(no)h(longer)g(trees)e(\(see)h
+(Figure)p 0 TeXcolorgray 32126 28114 a
+SDict begin H.S end
+ 32126 28114 a
+0 TeXcolorgray Fv(10)p 0 TeXcolorgray 33232 27400 a
+SDict begin H.R end
+ 33232
+27400 a 33232 28114 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (figure.10) cvn H.B /ANN pdfmark end
+ 33232 28114 a 0 TeXcolorgray Fv(\).)8524
+29442 y(In)269 b(this)i(release)e(of)i(the)f(program)h(w)-31
+b(e)271 b(use)e(the)h(follo)-31 b(wing)274 b(hac)-31
+b(k.)460 b(The)271 b(direct)f(lineage)i(of)6863 30770
+y(the)317 b(proband)f(\(or,)328 b(more)316 b(generally)-92
+b(,)329 b(the)316 b(starting)h(no)31 b(de\))317 b(ma)-31
+b(y)317 b(ha)-31 b(v)g(e)318 b(b)31 b(oth)316 b(mothers)h(and)6863
+32099 y(fathers)361 b(in)f(the)h(p)31 b(edigree)361 b(b)31
+b(ecause)360 b(they)h(share)e(genes)i(from)g(the)g(starting)g(no)31
+b(de.)490 b(If)360 b(an)-31 b(y)6863 33427 y(other)401
+b(p)31 b(erson)399 b(has)h(b)31 b(oth)401 b(mother)g(and)g(father)f(in)
+h(the)f(c)-31 b(hart,)409 b(his)401 b(or)f(her)f(paren)-31
+b(ts)401 b(b)31 b(oth)6863 34755 y(shared)281 b(their)h(genes)g(with)h
+(the)f(starting)h(no)31 b(de.)463 b(Therefore)282 b(they)g(formed)g(a)g
+(consanguinic)6863 36084 y(union.)964 b(In)525 b(this)i(case)f(the)g(c)
+-31 b(hildren)527 b(of)f(this)g(no)31 b(de)526 b(app)31
+b(ear)526 b(in)h(t)-31 b(w)g(o)527 b(subtrees:)806 b(their)6863
+37412 y(mother's)370 b(and)g(their)f(father's.)8524 38741
+y(W)-92 b(e)504 b(delete)j(them)f(from)g(one)g(of)g(the)f(subtrees)g
+(\(the)h(one)g(with)h(lo)-31 b(w)g(er)506 b(generation)6863
+40069 y(n)-31 b(um)g(b)31 b(er\),)328 b(connect)316 b(their)h(paren)-31
+b(ts)316 b(with)h(a)f(double)h(line)f(\(consanguinic)j(union\))e(and)f
+(put)6863 41397 y(the)370 b(descen)-31 b(t)369 b(line)h(from)g(the)f
+(middle)h(of)g(the)f(union)h(to)g(them.)8524 42726 y(There)494
+b(are)g(t)-31 b(w)g(o)497 b(problems)d(with)i(this)f(hac)-31
+b(k)495 b(\(see)g(Section)p 0 TeXcolorgray 34894 42726
+a
+SDict begin H.S end
+ 34894 42726 a 0 TeXcolorgray Fv(4.7)p 0 TeXcolorgray
+36307 42012 a
+SDict begin H.R end
+ 36307 42012 a 36307 42726 a
+SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype
+/Link/Dest (subsection.4.7) cvn H.B /ANN pdfmark end
+ 36307 42726
+a 0 TeXcolorgray Fv(\):)745 b(the)495 b(c)-31 b(hildren)495
+b(of)6863 44054 y(consanguinic)357 b(unions)e(are)g(not)h(cen)-31
+b(tered)355 b(on)g(the)g(diagaram,)361 b(and)355 b(the)g(hac)-31
+b(k)356 b(fails)g(if)g(the)6863 45382 y(starting)371
+b(no)31 b(de)369 b(itself)h(is)f(a)h(descendan)-31 b(t)369
+b(of)h(a)g(consanguinic)h(union.)8524 46711 y(Probably)460
+b(the)f(next)g(releases)f(will)i(emplo)-31 b(y)461 b(b)31
+b(etter)459 b(algorithms)i(for)d(consanguinic)6863 48039
+y(unions.)6863 49707 y
+SDict begin H.S end
+ 6863 49707 a 6863 49707 a
+SDict begin 12 H.A end
+ 6863
+49707 a 6863 49707 a
+SDict begin [/View [/XYZ H.V]/Dest (section.9) cvn /DEST pdfmark end
+ 6863 49707 a 1993 x Fu(9)1793 b(Conclusion)6863
+54124 y Fv(The)532 b(algorithm)j(seems)c(to)i(b)31 b(e)531
+b(e\016cien)-31 b(t)533 b(and)f(pro)31 b(ducing)533 b(nicely)g(t)-31
+b(yp)31 b(eset)532 b(p)31 b(edigrees.)6863 55453 y(Since)508
+b(the)g(input)h(\014le)f(format)i(is)e(simple,)544 b(it)508
+b(ma)-31 b(y)509 b(b)31 b(e)508 b(used)f(b)-31 b(y)508
+b(the)h(p)31 b(eople)508 b(without)6863 56781 y(sp)31
+b(ecial)414 b(skills)f(in)h(L)14932 56554 y Fp(A)15420
+56781 y Fv(T)16034 57019 y(E)16649 56781 y(X.)624 b(On)413
+b(the)g(other)g(hand,)425 b(the)413 b(T)30880 57019 y(E)31496
+56781 y(X)g(\014les)f(pro)31 b(duces)413 b(are)f(easy)h(to)6863
+58109 y(understand)369 b(and)h(edit)g(man)-31 b(ually)371
+b(if)f(the)g(need)e(arises.)p 0 TeXcolorgray 25405 70071
+a(31)p 0 TeXcolorgray eop end
+%%Page: 32 32
+TeXDict begin 32 31 bop 0 TeXcolorgray 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0
+TeXcolorgray 6752 1660 a
+SDict begin H.S end
+ 6752 1660 a 6752 1660 a
+SDict begin H.R end
+ 6752
+1660 a 6752 1660 a
+SDict begin [/View [/XYZ H.V]/Dest (page.32) cvn /DEST pdfmark end
+ 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray
+0 TeXcolorgray 6863 5867 a
+SDict begin H.S end
+ 6863 5867 a 6863 5867 a
+SDict begin 12 H.A end
+ 6863
+5867 a 6863 5867 a
+SDict begin [/View [/XYZ H.V]/Dest (section.10) cvn /DEST pdfmark end
+ 6863 5867 a 1107 x Fu(10)1793 b(Ac)-50
+b(kno)g(wledgemen)g(ts)6863 9398 y Fv(The)495 b(authors)g(are)f
+(grateful)i(to)f(Herb)31 b(ert)493 b(V)-92 b(o\031)496
+b(for)e(help)h(with)g Fq(PSTricks)h Fv(co)31 b(de.)868
+b(The)6863 10727 y(supp)31 b(ort)496 b(of)583 b(T)13177
+10965 y(E)13793 10727 y(X)496 b(User)f(Group)g(is)h(gratefully)j(ac)-31
+b(kno)g(wledged.)876 b(One)496 b(of)g(the)h(authors)6863
+12055 y(\(LA\))408 b(w)-31 b(as)408 b(supp)31 b(orted)407
+b(b)-31 b(y)407 b(Russian)g(F)-92 b(oundation)408 b(for)g(F)-92
+b(undamen)-31 b(tal)408 b(Researc)-31 b(h)407 b(\(tra)-31
+b(v)g(el)6863 13383 y(gran)g(t)252 b(06-04-58811\),)279
+b(Russian)250 b(F)-92 b(ederation)251 b(Presiden)-31
+b(t)251 b(Council)h(for)e(Gran)-31 b(ts)250 b(Supp)31
+b(orting)6863 14712 y(Y)-92 b(oung)370 b(Scien)-31 b(tists)370
+b(and)g(Flagship)g(Science)f(Sc)-31 b(ho)31 b(ols)370
+b(\(gran)-31 b(t)371 b(MD-4245.2006.7\))6863 18372 y
+SDict begin H.S end
+
+6863 18372 a 6863 18372 a
+SDict begin 18 H.A end
+ 6863 18372 a 6863 18372 a
+SDict begin [/View [/XYZ H.V]/Dest (section*.5) cvn /DEST pdfmark end
+ 6863
+18372 a Fu(References)6863 19026 y
+SDict begin H.S end
+ 6863 19026 a 6863
+19026 a
+SDict begin 12 H.A end
+ 6863 19026 a 6863 19026 a
+SDict begin [/View [/XYZ H.V]/Dest (cite.PedigreeNomenclature95) cvn
+/DEST pdfmark end
+ 6863 19026 a 0 TeXcolorgray
+1771 x Fv([1])p 0 TeXcolorgray 555 w(Robin)480 b(L.)f(Bennett,)508
+b(Kathryn)479 b(A.)h(Steinhaus,)507 b(Stefanie)481 b(B.)e(Uhric)-31
+b(h,)507 b(Corrine)480 b(K.)8585 22125 y(O'Sulliv)-61
+b(an,)369 b(Rob)31 b(ert)365 b(G.)h(Resta,)h(Debra)e(Lo)31
+b(c)-31 b(hner-Do)g(yle,)367 b(Dorene)e(S.)h(Mark)-31
+b(ei,)368 b(Vic-)8585 23454 y(toria)392 b(Vincen)-31
+b(t,)398 b(and)391 b(Jan)f(Hamanishi.)558 b(Recommendations)393
+b(for)e(standardized)g(h)-31 b(u-)8585 24782 y(man)370
+b(p)31 b(edigree)369 b(nomenclature.)493 b Fn(A)-28 b(m.)397
+b(J.)f(Hum.)h(Genet.)p Fv(,)371 b(56\(3\):745{752,)k(1995.)6863
+25502 y
+SDict begin H.S end
+ 6863 25502 a 6863 25502 a
+SDict begin 12 H.A end
+ 6863 25502 a 6863 25502
+a
+SDict begin [/View [/XYZ H.V]/Dest (cite.pst-pdgr06) cvn /DEST pdfmark
+end
+ 6863 25502 a 0 TeXcolorgray 1494 x Fv([2])p 0 TeXcolorgray
+555 w(Boris)1601 b(V)-92 b(eytsman)1601 b(and)g(Leila)h(Akhmadeev)-61
+b(a.)4162 b Fn(Cr)-57 b(e)g(ating)1530 b(Me)-57 b(d-)8585
+28324 y(ic)g(al)1984 b(Pe)-57 b(digr)g(e)g(es)1985 b(with)e(PST)-85
+b(ricks)1984 b(and)f(L)32992 28093 y Fa(A)33493 28324
+y Fn(T)34096 28563 y(E)34706 28324 y(X)p Fv(,)2526 b(July)2095
+b(2007.)p 0 TeXcolorgray 8585 29899 a
+SDict begin H.S end
+ 8585 29899 a 0
+TeXcolorgray -246 x Fq(http://ctan.tug.org/tex-)55 b
+(archive/graphics/pstricks/contrib/pedigree/pst-)g(pdgr)p
+0 TeXcolorgray 52270 28884 a
+SDict begin H.R end
+ 52270 28884 a 52270 29653
+a
+SDict begin [/H /I/Border [0 0 0]BorderArrayPatch/Color [0 1 1]/Action
+<</Subtype/URI/URI(http://ctan.tug.org/tex-archive/graphics/pstricks/contrib/pedigree/pst-pdgr)>>/Subtype
+/Link H.B /ANN pdfmark end
+ 52270 29653 a 0 TeXcolorgray Fv(.)6863 30341 y
+SDict begin H.S end
+ 6863
+30341 a 6863 30341 a
+SDict begin 12 H.A end
+ 6863 30341 a 6863 30341 a
+SDict begin [/View [/XYZ H.V]/Dest (cite.PSTricks93) cvn /DEST pdfmark
+end
+ 6863 30341
+a 0 TeXcolorgray 1526 x Fv([3])p 0 TeXcolorgray 555 w(Timoth)-31
+b(y)430 b(V)-92 b(an)428 b(Zandt.)667 b Fn(PST)-85 b(ricks:)618
+b(PostScript)449 b(Macr)-57 b(os)448 b(for)i(Generic)i(T)40796
+32105 y(E)41405 31867 y(X)p Fv(,)443 b(July)8585 33195
+y(2007.)p 0 TeXcolorgray 11397 33441 a
+SDict begin H.S end
+ 11397 33441 a
+0 TeXcolorgray -246 x Fq(http://ctan.tug.org/tex-)55
+b(archive/graphics/pstricks/base/doc)p 0 TeXcolorgray
+45150 32426 a
+SDict begin H.R end
+ 45150 32426 a 45150 33195 a
+SDict begin [/H /I/Border [0 0 0]BorderArrayPatch/Color [0 1 1]/Action
+<</Subtype/URI/URI(http://ctan.tug.org/tex-archive/graphics/pstricks/base/doc)>>/Subtype
+/Link H.B /ANN pdfmark end
+ 45150 33195
+a 0 TeXcolorgray Fv(.)6863 33884 y
+SDict begin H.S end
+ 6863 33884 a 6863
+33884 a
+SDict begin 12 H.A end
+ 6863 33884 a 6863 33884 a
+SDict begin [/View [/XYZ H.V]/Dest (cite.GraphDrawing99) cvn /DEST
+pdfmark end
+ 6863 33884 a 0 TeXcolorgray
+1525 x Fv([4])p 0 TeXcolorgray 555 w(Giusepp)31 b(e)275
+b(Di)g(Battista,)298 b(P)-31 b(eter)276 b(Eades,)295
+b(Rob)31 b(erto)276 b(T)-92 b(amassia,)296 b(and)276
+b(Ioannis)g(G.)g(T)-92 b(ollis.)8585 36737 y Fn(Gr)-57
+b(aph)301 b(Dr)-57 b(awing:)463 b(A)-28 b(lgortihms)301
+b(for)g(the)g(Visualization)g(of)h(Gr)-57 b(aphs)p Fv(.)323
+b(An)267 b(Alan)g(R.)g(Apt)8585 38066 y(Bo)31 b(ok.)371
+b(Pren)-31 b(tice)370 b(Hall,)h(New)e(Jersey)-92 b(,)369
+b(1999.)p 0 TeXcolorgray 25405 70071 a(32)p 0 TeXcolorgray
+eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.tex b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.tex
new file mode 100644
index 0000000000..51fb436101
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.tex
@@ -0,0 +1,1153 @@
+\documentclass{article}
+\usepackage[koi8-r]{inputenc}
+\usepackage[russian, english]{babel}
+\usepackage{pst-pdgr}
+\usepackage{pstricks-add}
+\usepackage{url}
+\usepackage{fancyvrb}
+\usepackage{listings}
+\lstset{language=Perl, captionpos=b, basicstyle=\ttfamily,
+abovecaptionskip=\abovedisplayskip,
+belowcaptionskip=\belowdisplayskip}
+\renewcommand{\lstlistlistingname}{List of Listings}
+\usepackage{graphicx}
+\usepackage{paralist}
+\psset{descarmA=1}
+\newcommand{\program}[1]{\textsf{#1}}
+\usepackage[breaklinks,colorlinks,linkcolor=black,citecolor=black,
+ pagecolor=black,urlcolor=black]{hyperref}
+\DefineShortVerb{\|}
+\begin{document}
+\selectlanguage{english}
+\title{A Program For Automatic Pedigree Construction With \path{pst-pdgr}\\
+ User Manual and Algorithm Description}
+\author{Boris Veytsman, \path{borisv@lk.net} \and Leila Akhmadeeva}
+\date{March 2012}
+\maketitle
+\begin{abstract}
+ The set of macros in \path{pst-pdgr} package allows to typeset
+ complex pedigrees. However, a manual placement of pedigree symbols
+ on a canvas is a time-consuming task. This program produces \TeX{}
+ files from spreadsheets with the data on inheritance for a large
+ class of pedigrees. It has a simple interface and can be used for
+ quite complex pedigrees.
+\end{abstract}
+
+\begin{center}
+ \input{english1.tex}
+\end{center}
+
+\clearpage
+
+\tableofcontents
+\listoffigures
+\listoftables
+\lstlistoflistings
+\clearpage
+
+
+\part{User Manual}
+\label{part:manual}
+
+
+\section{Introduction}
+\label{sec:intro}
+
+Medical pedigree is a very important tool for clinicians, genetic
+researchers and educators. As stated
+in~\cite{PedigreeNomenclature95}, ``The construction of an accurate
+family pedigree is a fundamental component of a clinical genetic
+evaluation and of human genetic research.'' The package
+\path{pst-pdgr}~\cite{pst-pdgr06} provides a set of PSTricks macros
+(see~\cite{PSTricks93}) to typeset pedigrees. In the framework of
+\path{pst-pdgr} the user manually chooses coordinates for each
+pedigree node on the diagram. While this is relatively easy for small
+pedigrees, this task becomes increasingly time-consuming for larger
+ones. There may be several approaches to automate it. For example,
+one may have data about the patients and their families in a
+spreadsheet or database. Then it would be useful to generate
+pedigrees from such data. This is the aim of the program
+\path{pedigree} described in this manual.
+
+Spreadsheets and databases can export the data as separated
+values files (``csv'' files for Comma Separated Values). Our program
+reads these files and outputs LaTeX{} code with \path{pst-pdgr}
+macros. We tried to make this code readable, so a user might tweak it
+if necessary.
+
+Of course, manually produced \LaTeX{} code is more versatile than the
+automatically generated one. There are certain limitations for the
+program:
+\begin{inparaenum}
+\item only persons having common genes with the proband or the
+ ``starting person'' are included in the
+ pedigree;
+\item no adopted children, sperm donors or surrogate
+ mothers are shown on the pedigree;
+\item only one disease is shown on the chart;
+\item the support for consanguinic unions and inbreeding is rather
+ experimental (see Section~\ref{sec:consanguinic}).
+\end{inparaenum}
+Subsequent versions of the program may ease some of these
+limitations.
+
+\section{Installation}
+\label{sec:install}
+
+\subsection{System Requirements}
+\label{sec:reqs}
+
+The program requires \program{Perl} version~5 or newer (it was tested
+with \program{Perl} v5.8.8, but should work with any
+\program{Perl-5}). The \LaTeX{} macros require \path{pst-pdgr}
+version~0.3 (July 2007) or newer.
+
+\subsection{Unix/Linux Installation}
+\label{sec:install_unix}
+
+If your system has a working \program{make} program, which is the
+usual case for Unix-like environments, the supplied \path{Makefile}
+installs the executable \path{pedigree} in \path{/usr/local/bin}, the
+libraries in \path{/usr/local/lib/site_perl} and the manual pages in
+\path{/usr/local/man}. This is done by the usual command
+|make install|. Optionally you can install files in the
+\path{doc} and \path{examples} subdirectories in the proper places in
+your system.
+
+\subsection{Installation in Other Systems}
+\label{sec:other}
+
+If your system does not have \program{make}, you need to manually
+perform the following:
+\begin{enumerate}
+\item Install the executable \path{pedigree.pl} to the place your
+ system can find it.
+\item Install the libraries: \path{Pedigree.pm}, directory
+ \path{Pedigree} and all files in it to the \program{Perl} search
+ path. The latter is listed in the array \path{@INC}, which can be
+ checked by the command |perl -V| or its equivalent.
+\end{enumerate}
+
+\section{Configuration}
+\label{sec:config}
+
+
+\subsection{Configuration Variables and Location of Configuration File}
+\label{sec:conf_file}
+
+The program defaults are sufficient for most cases. However, if you
+want to draw pedigrees in a language other than English, or to tweak
+the layout of the pedigrees, you need to change the program
+configuration.
+
+The behavior of the program \program{pedigree} is determined by
+\emph{configuration variables.} There are several sources of
+configuration variables. They are (in the order of increasing
+priority):
+\begin{enumerate}
+\item Program defaults.
+\item The system configuration file\footnote{On Unix-like systems,
+ where \path{/etc} exists} \path{/etc/pedigree.cfg}. On \TeX Live
+ the system coniguration files are
+ \path{$TEXMFHOME/texmf-config/pedigree/pedigree.cfg} and
+ \path{$TEXMFLOCAL/pedigree/pedigree.cfg}.
+\item User configuration file\footnote{On Unix-like systems, where
+ \path{$HOME} exists} \path{$HOME/.pedigreerc}.
+\item The file specified by the |-c| option (see
+ Section~\ref{sec:invocation}).
+\end{enumerate}
+If a file mentioned in this list does not exists, the program
+silently\footnote{Unless \path{-d} option is selected, see
+ Section~\ref{sec:invocation}} continues.
+
+Note that even if a configuration file with higher priority exists,
+the program reads the files with lower priority first. The former
+\emph{overrides} the latter, but not precludes it from reading. In
+other words, if \path{/etc/pedigree.cfg} defines variables
+\lstinline|$foo| and \lstinline|$bar|, and \path{$HOME/.pedigreerc}
+defines \lstinline|$bar| and \lstinline|$baz|, the program takes
+\lstinline|$foo| from the first file, and \lstinline|$bar| and
+\lstinline|$baz| from the second one.
+
+
+\subsection{Configuration File Format}
+\label{sec:conf_file_format}
+
+All configuration files mentioned in Section~\ref{sec:conf_file}, have
+the same format. They are actually snippets of \program{Perl} code,
+executed by the program \program{pedigree}. This means, by the way,
+that all precautions usually taken with respect to programs and
+scripts, are relevant for configuration files as well. In particular,
+it is a bad idea to have world-writable system-wide configuration
+file \path{/etc/pedigree.cfg}.
+
+The code in configuration files is very simple, and one does not need
+to know \program{Perl} to edit configuration files. There are several
+simple rules which are enough to understand these files:
+\begin{enumerate}
+\item All text after \lstinline|#| to the end of the line is a
+ comments. In particular, the lines starting with \lstinline|#|, are
+ comment lines.
+\item \program{Perl} commands must end by semicolon \lstinline|;|.
+\item The commands like
+ \begin{lstlisting}
+ $xdist=1.5;
+ \end{lstlisting}
+ or
+ \begin{lstlisting}
+ @fieldsforprint=qw(Name DoB);
+ \end{lstlisting}
+ assign values to the variables.
+\item Variables starting with \lstinline|$| are scalars and
+ take numerical or string values. Variables starting with
+ \lstinline|@| are arrays and take list of values.
+\item A backslash in single quotes stands for itself, A backslash in
+ double quotes or inside \lstinline|<<END|\dots\lstinline|END|
+ construction must be doubled. Compare the commands
+ \begin{lstlisting}
+ $foo='\documentclass';
+ $bar="\\documentclass";
+ \end{lstlisting}
+\item The last command in the file must be
+ \begin{lstlisting}
+ 1;
+ \end{lstlisting}
+\end{enumerate}
+
+A number of commented configuration files can be found in the
+\path{examples} subdirectory of the distribution.
+
+In the remaining parts of this section we describe the configuration
+variables in detail.
+
+\subsection{\TeX{} Output Setup}
+\label{sec:conf_tex}
+
+A number of variables determine what kind of \TeX{} file is produced.
+An example of their usage is shown on Listing~\ref{lst:tex}.
+
+The variable \lstinline|$fulldoc| determines whether the program
+produces a full \LaTeX{} file with header and preamble (when
+\lstinline|$fulldoc=1|), or just a snippet to be included in a larger
+document (when \lstinline|$fulldoc=0|). The default is 1.
+
+The variable \lstinline|$documentheader| is used when
+\lstinline|$fulldoc| is 1. It determines the document class of the
+resulting \LaTeX{} file. The default is |article| class, set by
+|\documentclass{article}|.
+
+By default the preamble of the \LaTeX{} file created when
+\lstinline|$fulldoc| is 1, contains only the line
+|\usepackage{pst-pdgr}| and, if the language chosen is not English
+(see Section~\ref{sec:conf_lang}), the calls of \program{babel} and
+\program{inputenc} packages. The variable \lstinline|$addtopreamble|,
+if set, may contain any other \LaTeX{} code you might wish to add to
+the preamble.
+
+The variable \lstinline|$printlegend| determines whether to add legend
+to the pedigree. The default value is 1, and the legend is printed.
+
+\begin{lstlisting}[float, caption={Configuration File: Setting \TeX{} Output},
+ label=lst:tex]
+# Do we want to have a full LaTeX
+# file or just a fragment?
+#
+$fulldoc=1;
+
+# What kind of document do we want
+#
+$documentheader='\documentclass{article}';
+
+# Define additional packages here
+#
+$addtopreamble=<<END;
+\\usepackage{pst-pdgr}
+END
+
+# Do we want to print a legend?
+#
+$printlegend=1;
+\end{lstlisting}
+
+
+\subsection{What to Print}
+\label{sec:what_to_print}
+
+The next groups of configuration variables sets the information to be
+printed in the legend and on the pedigree. It consists of two arrays:
+array \lstinline|@fieldsforlegend| is the list of fields (see
+Section~\ref{sec:data_file}) which are included in the legend, and
+array \lstinline|@fieldsforchart| is the list of fields to print near
+each node in the pedigree (Listing~\ref{lst:what_to_print}). Setting
+\lstinline|@fieldsforchart| to empty array:
+\begin{lstlisting}
+@fieldsforchart = ();
+\end{lstlisting}
+prevents putting additional information on the pedigrees.
+
+The field names are described in Section~\ref{sec:data_file}. Note
+that |AgeAtDeath| is a special field: it is the age at death (or
+empty) calculated as the difference between the death date and the
+birth date.
+
+\begin{lstlisting}[float, caption={Configuration File: Choosing
+Fields to Print}, label=lst:what_to_print]
+# Fields to include in the legend.
+# Delete Name for privacy protection.
+#
+@fieldsforlegend = qw(Name DoB DoD Comment);
+
+#
+# Fields to put at the node.
+# Delete Name for privacy protection.
+#
+@fieldsforchart = qw(Name);
+\end{lstlisting}
+
+\subsection{Language and Encoding}
+\label{sec:conf_lang}
+
+The next group of variables describes the language and encoding of
+the data file input and the \LaTeX{} output. They are shown in
+Listing~\ref{lst:lang_enc}. The variable \lstinline|$language| at
+present can have one of two values: |english| (the default) or
+|russian|. If the value is |russian|, the output document preamble
+includes the line
+\begin{lstlisting}[language=tex]
+\usepackage[russian]{babel}
+\end{lstlisting}
+The variable \lstinline|$encoding| sets the encoding of the \LaTeX{}
+file if the language is not English. By default it is |cp1251|, if
+the language is Russian. Set it to |koi8-r| to choose KOI8 encoding.
+It is worth to note that the data file and the output \LaTeX{} file
+are assumed to have the same language and encoding.
+
+
+\begin{lstlisting}[float, caption={Configuration File: Choosing
+Language and Encoding}, label=lst:lang_enc]
+#
+# Language
+#
+# $language="russian";
+$language="english";
+
+#
+# Override the encoding
+#
+# $encoding="koi8-r";
+\end{lstlisting}
+
+If |$language| is not |english|, the program recognizes both English
+and native names of the fields in the data file (see
+Section~\ref{sec:data_file}).
+
+\subsection{Fonts}
+\label{sec:fonts}
+
+There are two kinds of text on the chart: the text above a node
+and the text below a node\footnote{The \TeX{}
+ package~\cite{pst-pdgr06} also allows to place text at both sides of
+the node, but the program \program{pedigree} currently does not use
+this feature.}. The fonts for them are set by the variables
+\lstinline|$belowtextfont| (by default |\small|) and
+\lstinline|$abovetextfont| (by default |\scriptsize|). Any \LaTeX{}
+font declaration like |\sffamily| or |\itshape| is allowed here. See
+Listing~\ref{lst:fonts} for an example of usage.
+
+\begin{lstlisting}[float, caption={Configuration File: Choosing
+Fonts}, label=lst:fonts]
+#
+# Fonts for the chart
+#
+$belowtextfont='\small';
+$abovetextfont='\scriptsize';
+\end{lstlisting}
+
+\subsection{Lengths}
+\label{sec:conf_dist}
+
+The next group of variables (Listing~\ref{lst:dist}) sets the
+distances between the key elements of the chart. All lengths are in
+centimeters (actually, in |unit|s, are defined in
+PSTricks~\cite{PSTricks93}).
+
+\begin{lstlisting}[float, caption={Configuration File: Choosing
+Lengths}, label=lst:dist]
+#
+# descarmA in cm
+#
+$descarmA = 0.8;
+
+#
+# Distances between nodes (in cm)
+#
+$xdist=2;
+$ydist=2;
+\end{lstlisting}
+
+The variable \lstinline|$descarmA| sets the length of the first
+segment of the descent line: from the parent node to the sibs line,
+as measured from the center of the parent (see~\cite{pst-pdgr06} for
+more details). By default it is 0.8.
+
+The variables \lstinline|$xdist| and \lstinline|$ydist| set the
+distances between the nodes along horizontal and vertical axes
+correspondingly. The default for both is 2.
+
+\subsection{Scaling and Rotation}
+\label{sec:scaling_rotation}
+
+Complex pedigrees might be too large to fit on a page. In this case a
+scaling and (or) rotation might be necessary to print the chart. Of
+course, changing the lengths described in Section~\ref{sec:conf_dist}
+might also help, but the scaling described here also changed the size
+of the pedigree symbols.
+
+There are three variables controlling the scaling and rotation of
+pedigrees: \lstinline|$maxW|, \lstinline|$maxH| and
+\lstinline|$rotate| (see Listing~\ref{lst:scaling_rotation}). The
+variables \lstinline|$maxW| and \lstinline|$maxH| are the maximal
+width and height of the chart in centimeters. Setting any of them to
+zero disables scaling.
+
+The scaling works as follows. If both height and width of the
+pedigree are smaller than the limits, no scaling is done. In the other
+case the chart is scaled while preserving the aspect ratio (by
+changing the value of |unit|, see~\cite{PSTricks93}) to fit into the
+limits.
+
+The variable |$rotate| sets the orientation of the chart. If it is
+|no|, the pedigree is never rotated, while if it |yes|, it is always
+rotated ninety degrees counterclockwise. If this variable is set to
+|maybe| (the default), the program compares the scaling for
+the non-rotated and rotated pedigrees, and chooses the orientation for
+which the scaling is closer to one.
+
+\begin{lstlisting}[float, caption={Configuration File: Choosing
+Scaling and Rotation}, label=lst:scaling_rotation]
+#
+# Maximal width and height of the pedigree in cm.
+# Set this to 0 to switch off scaling
+#
+$maxW = 15;
+$maxH = 19;
+
+#
+# Whether to rotate the page. The values are
+# 'yes', 'no' and 'maybe'
+# If 'maybe' is chosen, the pedigree is rotated
+# if this provides better scaling
+#
+$rotate = 'maybe';
+\end{lstlisting}
+
+\section{Running the Program}
+\label{sec:runnning}
+
+
+
+\subsection{Program Invocation And Options}
+\label{sec:invocation}
+
+The program \path{pedigree} is a command line program. It reads the
+data from a text file \path{input_file} and produces an output file
+with \LaTeX{} macros. The format of the input file is described in
+Section~\ref{sec:data_file}. The program invocation is:
+\begin{verbatim}
+pedigree [-c configuration_file] [-d] [-o output_file]
+ [-s start] input_file
+\end{verbatim}
+(the square brackets show optional arguments).
+
+All arguments but |input_file| are optional. They are described
+below.
+
+The option |-c| selects a \emph{configuration file.} The format
+of the configuration file is described in
+Section~\ref{sec:conf_file}. If this option is absent, the program
+uses its own default parameters, or system-wide or user's defaults, as
+explained in Section~\ref{sec:conf_file}.
+
+
+The option \path{-d} selects debugging mode. In this mode a lot of
+debugging messages are dumped to \path{stderr}.
+
+The parameter |-o| provides the name of the output file. Both
+\path{input_file} and \path{output_file} can be ``-'', which means
+\path{stdin} for the input and \path{stdout} for the output. If the
+parameter |-o| is absent, the program tries to guess the name of
+the output file from the name of the input file. If the input file is
+|foo.csv|, the output file will be |foo.tex|. On the other
+hand, if the input file is \path{stdin}, the output file is
+\path{stdout}.
+
+Usually pedigrees are built starting from the proband\footnote{The
+ proband is the first person among the relatives who came to a
+ geneticist; he or she is the primary patient.}. Only the people
+that share genes with the proband, are shown on the pedigree.
+However, in some cases, for example when there is no proband, or
+where there are several probands, it is neccessary to override this
+default and tell the program from which person to start. This is done
+using the option |-s|. If it is present, it must be followed by the
+Id of a person in the data file (see Section~\ref{sec:data_file} for
+the discussion of Id).
+
+The option |-v| is special. The invocation |pedigree -v|
+outputs the version and license information.
+
+
+\subsection{Data File}
+\label{sec:data_file}
+
+The input for the program is a separated values file. Usually such
+files are called CSV for ``comma separated values''. However, this
+program uses the vertical bar (``pipe'') \verb+|+ as a separator.
+Each line of this file is a \emph{record}. The lines are separated by
+pipes into \emph{fields.} Most SQL programs produce such files by
+default. Spreadsheet programs will make them if you choose ``Save
+As\dots'' option, and select \verb+|+ as the field separator, and
+empty text delimiter. We sometimes will call the records ``rows'' and
+the fields ``columns'' to use the familiar spreadsheet metaphor.
+Normally each row corresponds to a person in a pedigree. We will call
+this person \emph{the current person} when describing the fields.
+
+The width of the fields may not be the same in all rows (or, in other
+words, the pipes \verb+|+ may be disaligned). We make them aligned in
+the examples included in this manual just to make the text more
+readable.
+
+The first line of the data file contains the names of the fields
+(``column headers''). The fields in the subsequent lines must match
+the order of the headers. An empty field must be still included (as
+\verb+||+ or \verb+| |+). Otherwise the order of columns is arbitrary
+as long as it is the same for all rows (i.e. matches the order of
+``column headers'' in the first line).
+
+All fields but |Id| are optional. If the value is empty for all rows,
+the corresponding column can be dropped. If applicable, the default
+values for this field will be substituted by the program.
+
+On the other hand the data file can include any additional columns as
+long as their names do not clash with the names listed below and the
+special name |AgeAtDeath|. These additional columns can be included
+in the chart or legend as described in
+Section~\ref{sec:what_to_print}.
+
+Here is the list of columns and explanation of their meaning:
+\begin{description}
+\item[Id:] Each line (including the special lines described below)
+ must have a unique |Id|. The |Id| may contain only Latin letters
+ and numbers, and start with a letter.
+\item[Name:] The name of the person described in the current row.
+ There are also \emph{special names} when the current row describes
+ abortions or infertility. They are described below. The names
+ should not contain ``special symbols'' like \#, \$, \%, \_,
+ \textasciicircum, etc.
+\item[Sex:] The gender of a person. This column may have one of two
+ values: |male| or |female|. The empty value corresponds to a person
+ with unknown gender.
+\item[DoB:] The date of birth for the current person. The format is
+ |YYYY.MM.DD|. If the date of birth is not known, the field may be
+ empty or the keyword |unknown| may be used.
+\item[DoD:] The date of death for current person. The format is the
+ same as for |DoB|: |YYYY.MM.DD|. If this field is empty, the
+ corresponding person is alive. For deceased persons with an unknown
+ date of death use the keyword |unknown|. Note the subtle difference
+ between the fields |DoB| and |DoD|: an empty value for |DoB| is
+ means ``unknown birth date'' while for |DoD| it means that there is
+ no date of death at all.
+\item[Mother:] The |Id| of the mother of the person (or empty).
+\item[Father:] The |Id| of the father of the person (or empty).
+\item[Proband] This field can be either |yes| for the probands, or
+ empty (or |no|) for other persons. Note that if a pedigree has no
+ probands or several probands, the program does not know, from which
+ node to start the pedigree. Therefore in this case the option |-s|
+ must be used to explicitly set the |Id| of the starting chart node
+ (see Section~\ref{sec:invocation}).
+\item[Condition:] This column can have the values |normal|,
+ |obligatory|, |asymptomatic| or |affected|. If it is empty, the
+ default value |normal| is assumed.
+\item[Comment:] A comment about the person.
+\item[Twins:] If the current person has twins, they are listed in this
+ column separated by spaces and (or) commas. See
+ Section~\ref{sec:twins} for more details.
+\item[Type:] This column is used in certain special cases. For
+ abortions it shows the type of the abortion
+ (Section~\ref{sec:abortions}), for childless people and marriages it
+ shows the type of childnessness (Section~\ref{sec:childless}), and
+ for twins it shows the type of twins (Section~\ref{sec:twins}).
+\item[SortOrder:] This column is used when the algorithm for sorting
+ siblings and unions gives a wrong result, and a manual correction is
+ needed. See Section~\ref{sec:sorting} for the explanation and
+ examples.
+\end{description}
+
+Examples of data files (in English and Russian) are shown in
+Listing~\ref{lst:data_examples} (the Russian keywords are discussed in
+Section~\ref{sec:language}).
+
+\begin{lstlisting}[float, caption={Examples of Data Files (English and
+Russian)}, label=lst:data_examples, escapeinside={`'}]
+`
+\rotatebox{90}{%
+ \begin{minipage}{1.5\linewidth}
+ \small
+ \VerbatimInput{../examples/english.csv}
+ \bigskip
+ \selectlanguage{russian}
+ \VerbatimInput{../examples/russian.csv}
+ \end{minipage}}
+'
+\end{lstlisting}
+
+\begin{figure}
+ \centering
+ \input{english.tex}
+ \caption{Example of the Typeset Pedigree in English (Data File from
+ Listing~\ref{lst:data_examples})}
+ \label{fig:example-english-typeset}
+\end{figure}
+
+\begin{figure}
+ \centering
+ {\selectlanguage{russian}
+ \input{russian.tex}}
+ \caption{Example of the Typeset Pedigree in Russian (Data File from
+ Listing~\ref{lst:data_examples})}
+ \label{fig:example-russian-typeset}
+\end{figure}
+
+
+\subsection{Twins}
+\label{sec:twins}
+
+The column |Twins| (see Section~\ref{sec:twins}) lists all |Id|s of
+all twins of the given person. The column |Type| can be used to show
+the type of the twins. The empty value means polyzygotic twins,
+|monozygotic| means monozygotic twins, and |qzygotic| is used in the
+case when the type of twins is under doubt. An example of a data file
+with twins is shown on Listing~\ref{lst:twins}, and the corresponding
+pedigree on Figure~\ref{fig:twins}.
+
+
+\begin{lstlisting}[float, caption={Example of Data File with Twins},
+label=lst:twins, escapeinside={`'}]
+`
+ \small
+ \VerbatimInput{../examples/twins.csv}
+'
+\end{lstlisting}
+
+\begin{figure}
+ \centering
+ \input{twins.tex}
+ \caption{Example of a Pedigree with Twins (Data File from
+ Listing~\ref{lst:twins})}
+ \label{fig:twins}
+\end{figure}
+
+\subsection{Abortions}
+\label{sec:abortions}
+
+Aborted pregnancies are described by a special entry in the data file.
+The field |Name| has the value |#abortion|; the symbol |#| is used to
+show that this is a special value. The columns |Sex|, |DoB|,
+|Mother|, |Father| and |Condition| have the usual meaning. The
+special column |Type| is either empty or be equal to |sab| for
+self-abortions.
+
+\begin{lstlisting}[float, caption={Example of Data File with Abortions},
+label=lst:abortions, escapeinside={`'}]
+`
+ \small
+ \VerbatimInput{../examples/abortions.csv}
+'
+\end{lstlisting}
+
+\begin{figure}
+ \centering
+ \input{abortions.tex}
+ \caption{Example of a Pedigree with Abortions (Data File from
+ Listing~\ref{lst:abortions})}
+ \label{fig:abortions}
+\end{figure}
+
+\subsection{Childlessness and Infertility}
+\label{sec:childless}
+
+Childlessness is can be a property of a person or a union between two
+persons. Therefore in this implementation we use a special row rather
+than a column to report it. As other rows, this one has a unique
+|Id|. The |Name| column should have a special entry |#childless|.
+Like |#abortion| (Section~\ref{sec:abortions}), this special name
+starts with |#| to distinguish it from ``real'' names. There are four
+other columns that have meaning for this row:
+\begin{description}
+\item[Mother:] The |Id| of the childless female.
+\item[Father:] The |Id| of the childless male. If both |Mother| and
+ |Father| columns are not empty, the entry describes the union
+ between the |Father| and |Mother|. Of only |Mother| or |Father| is
+ not empty, the entry describes the state of the corresponding
+ person.
+\item[Type:] This column might be either empty or have a keyword
+ |infertile|. In the latter case the childlessness of the person or
+ union is caused by a proven infertility.
+\item[Comment:] The vaule of this column is shown under the
+ childlessness symbol on the chart. Put there a short description of
+ the cause of childlessness, like |anospermia| or |vasectomy|.
+\end{description}
+An example of a pedigree with childlessness is shown on
+Listing~\ref{lst:childless} and Figure~\ref{fig:childless}.
+
+\begin{lstlisting}[float, caption={Example of Data File with
+Childlessness}, label=lst:childless, escapeinside={`'}]
+`
+ \small
+ \VerbatimInput{../examples/childlessness.csv}
+'
+\end{lstlisting}
+
+\begin{figure}
+ \centering
+ \input{childlessness.tex}
+ \caption{Example of a Pedigree with Childlessness (Data File from
+ Listing~\ref{lst:childless})}
+ \label{fig:childless}
+\end{figure}
+
+\subsection{Ordering Siblings and Marriage Partners}
+\label{sec:sorting}
+
+The generations in pedigrees are ordered in vertical direction, from
+up do down. How should we order the people on the same generation,
+i.e. siblings and marriage partners?
+
+Usually two rules are used:
+\begin{enumerate}
+\item The siblings are ordered from the oldest on the left to the
+ youngest to the right.\label{item:sibling_order}
+\item In marriage or other union the male is to the left, and the
+ female is to the right.
+\end{enumerate}
+However, the combination of these rules might lead to the situation
+when marriage lines intersect the parental lines. Therefore the
+rule~\ref{item:sibling_order} is usually implicitly modified:
+\begin{enumerate}
+\item[\ref{item:sibling_order}a.] The are ordered from the oldest on
+ the left to the youngest to the right. However, if a sibling's
+ marriage is shown on a pedigree, this sibling is always the
+ rightmost (male) or the leftmost (female).
+\end{enumerate}
+The program follows these rules. It is enough to draw pedigrees in
+most cases. In particular, they always produce correct pedigrees if
+there is only one marriage shown. However, in complex cases these
+rules fail, as shown on Listing~\ref{lst:sort1} and
+Figure~\ref{fig:sort1}. It is possible to extend the rules
+above to account for these cases, however we chose another solution:
+to provide a facility for the manual intervention in the sorting and
+ordering algorithm. For this purpose a special column |SortOrder| is
+used. It can have positive numbers greater than 1 or negative numbers
+smaller than -1. If the value of this column is positive, the
+corresponding person is moved to the left when sorting siblings and
+to the right when sorting marriage partners. If it is negative, the
+opposite sorting rule is applied (see Section~\ref{sec:alg_sorting}
+for more detailed discussion). Note that sibling sorting and marriage
+partners sorting must work in opposite directions, otherwise marriage
+lines intersect paternal lines.
+
+\begin{lstlisting}[float, caption={A Data File with a Sorting
+Problem}, label=lst:sort1, escapeinside={`'}]
+`
+ \small
+ \VerbatimInput{../examples/sort1.csv}
+'
+\end{lstlisting}
+
+\begin{figure}
+ \centering
+ \input{sort1.tex}
+ \caption{Pedigree from Listing~\ref{lst:sort2}}
+ \label{fig:sort1}
+\end{figure}
+
+Let us return to the pedigree on Listing~\ref{lst:sort1}. To improve
+Figure~\ref{fig:sort1} we can either move Peter to the right or Lucy to
+the left. The first solution is shown on Listing~\ref{lst:sort2} and
+Figure~\ref{fig:sort2}. The second is shown on Listing~\ref{lst:sort3} and
+Figure~\ref{fig:sort3}.
+
+\begin{lstlisting}[float, caption={First Solution to the Problem in
+Listing~\ref{lst:sort1} }, label=lst:sort2, escapeinside={`'}]
+`
+ \small
+ \VerbatimInput{../examples/sort2.csv}
+'
+\end{lstlisting}
+
+\begin{figure}
+ \centering
+ \input{sort2.tex}
+ \caption{Pedigree from Listing~\ref{lst:sort2}}
+ \label{fig:sort2}
+\end{figure}
+
+\begin{lstlisting}[float, caption={Second Solution to the Problem in
+Listing~\ref{lst:sort1} }, label=lst:sort3, escapeinside={`'}]
+`
+ \small
+ \VerbatimInput{../examples/sort3.csv}
+'
+\end{lstlisting}
+
+\begin{figure}
+ \centering
+ \input{sort3.tex}
+ \caption{Pedigree from Listing~\ref{lst:sort3}}
+ \label{fig:sort3}
+\end{figure}
+
+
+Of course sometimes a pedigree cannot be drawn without
+self-intersections with any sorting of siblings. An example of such
+pedigree is shown on Listing~\ref{lst:badsort} and
+Figure~\ref{fig:badsort}. Obviously no amount of shuffling the
+siblngs can help in his case.
+
+\begin{lstlisting}[float, caption={A Pedigree with Unavoidable
+Self-Intersections}, label=lst:badsort, escapeinside={`'}]
+`
+ \small
+ \VerbatimInput{../examples/badsort.csv}
+'
+\end{lstlisting}
+
+\begin{figure}
+ \centering
+ \input{badsort.tex}
+ \caption{Pedigree from Listing~\ref{lst:badsort}}
+ \label{fig:badsort}
+\end{figure}
+
+
+If the program cannot avoid self-intersection of marriage lines and
+parental lines despite automatics sorting and manual intervention, as
+the last resort it creates a multi-segment marriage line, as shown on
+Figures~\ref{fig:sort1} and~\ref{fig:badsort}.
+
+
+\subsection{Consanguinic Unions}
+\label{sec:consanguinic}
+
+Consanguinic unions present a technical problem for the program (see
+the discussion in Section~\ref{sec:alg_consanguinic}). Therefore the
+support of consanguinicity is experimental for this release.
+
+There is a number of limitations for consanguinic unions in the data
+file at present. First, the consanguinic unions should not in the
+direct lineage of the proband or the person from which the pedigree
+starts. In many cases this limitation can eliminated by using |-s|
+option (see Section~\ref{sec:invocation}) to choose a different
+starting point for the pedigree. Second, the children of consanguinic
+unions might appear not centerd on the charts. An example of a
+pedigree with consanguinic marriages is shown on
+Listing~\ref{lst:consanguinic}, and the corresponding chart is shown
+on Figure~\ref{fig:consanguinic}. The drawbacks of the program are
+evident from the positions of Laura nad Jack on these charts.
+
+\begin{lstlisting}[float, caption={A Pedigree with Consanguinic
+Unions}, label=lst:consanguinic, escapeinside={`'}]
+`
+ \small
+ \VerbatimInput{../examples/consanguinic.csv}
+'
+\end{lstlisting}
+
+\begin{figure}
+ \centering
+ \input{consanguinic.tex}
+ \caption{Pedigree from Listing~\ref{lst:consanguinic}}
+ \label{fig:consanguinic}
+\end{figure}
+
+
+
+\subsection{Language-Dependent Keywords}
+\label{sec:language}
+
+At present the program \program{pedigree} can work with English and
+Russian languages. As discussed in Section~\ref{sec:conf_lang}, the
+language options chooses \emph{both} the languages of input and output
+files. It is easy to add new languages to the scheme by expanding the
+library |Pedigree::Language.pm| in the distribution.
+
+The English language is the default. Moreover, if the Russian option
+is chosen, English keywords are still recognized in the input file.
+
+The English and Russian keywords are listed in
+Table~\ref{tab:keywords}. Note that some keywords have variants;
+they are listed in the table as well.
+
+\begin{table}
+ \centering
+ \begin{tabular}{lll}
+ \hline
+ English keyword & English variants & Russian keywords \\
+ \hline
+ \multicolumn{3}{l}{\textbf{Field Names}}\\
+ Id & & \foreignlanguage{russian}{éÄÅÎÔ}\\
+ Name & & \foreignlanguage{russian}{æéï}\\
+ Sex & & \foreignlanguage{russian}{ðÏÌ}\\
+ DoB & & \foreignlanguage{russian}{òÏÖÄ}\\
+ DoD & & \foreignlanguage{russian}{õÍÅÒ}\\
+ Mother & & \foreignlanguage{russian}{íÁÔØ}\\
+ Father & & \foreignlanguage{russian}{ïÔÅÃ}\\
+ Proband & & \foreignlanguage{russian}{ðÒÏÂÁÎÄ}\\
+ Condition & & \foreignlanguage{russian}{óÏÓÔÏÑÎÉÅ}\\
+ Comment & & \foreignlanguage{russian}{ëÏÍÍÅÎÔÁÒÉÊ}\\
+ Type & & \foreignlanguage{russian}{ôÉÐ}\\
+ Twins & & \foreignlanguage{russian}{âÌÉÚÎÅÃÙ}\\
+ SortOrder & Sort & \foreignlanguage{russian}{ðÏÒÑÄÏËóÏÒÔÉÒÏ×ËÉ,
+ óÏÒÔ}\\
+ \multicolumn{3}{l}{\textbf{Field Values}}\\
+ male & & \foreignlanguage{russian}{ÍÕÖ, Í}\\
+ female & & \foreignlanguage{russian}{ÖÅÎ, Ö}\\
+ unknown & & \foreignlanguage{russian}{ÎÅÉÚ×, ÎÅÉÚ×ÅÓÔÎÏ}\\
+ yes & & \foreignlanguage{russian}{ÄÁ}\\
+ no & & \foreignlanguage{russian}{ÎÅÔ}\\
+ normal & & \foreignlanguage{russian}{ÎÏÒÍ, ÚÄÏÒÏ×}\\
+ obligatory & obligat & \foreignlanguage{russian}{ÏÂÌÉÇÁÔ}\\
+ asymptomatic & asymp & \foreignlanguage{russian}{ÁÓÉÍÐ}\\
+ affected & affect & \foreignlanguage{russian}{ÂÏÌØÎ, ÂÏÌÅÎ}\\
+ infertile & & \foreignlanguage{russian}{ÂÅÓÐÌÏÄÎ}\\
+ sab & & \foreignlanguage{russian}{×ÙËÉÄÙÛ}\\
+ monozygotic & monzygot & \foreignlanguage{russian}{ÍÏÎÏÚÉÇÏÔÎ,
+ ÍÏÎÏÚÉÇ, ÏÄÎÏÑÊÃÅ×}\\
+ qzygotic & qzygot, ? & \foreignlanguage{russian}{?}\\
+ \multicolumn{3}{l}{\textbf{Special Names}}\\
+ |#|abortion & & |#|\foreignlanguage{russian}{ÁÂÏÒÔ}\\
+ |#|childless & & |#|\foreignlanguage{russian}{ÂÅÚÄÅÔÎ}\\
+ \hline
+ \end{tabular}
+ \caption{Keywords in Different Languages}
+ \label{tab:keywords}
+\end{table}
+
+
+
+
+
+\clearpage
+
+\part{Algorithm Description}
+\label{part:algortihm}
+
+
+\section{Introduction}
+\label{sec:alg_intro}
+
+This part is intended for advanced users and is not neccessary for
+runnuing the program.
+
+The problem of nicely typesetting graphs is one of the classical
+problems in the Computer Science~\cite{GraphDrawing99}. One of the
+earliest algorithms here is the classical algorithm for layered rooted
+trees by Reingold and Tilford~\cite[\S~3.1]{GraphDrawing99}. This
+algorithm was implemented by |PSTricks|~\cite{PSTricks93}. However,
+many pedigrees are not trees~\cite{pst-pdgr06}. If we consider a
+subset of pedigrees where inbreeding is absent, the pedigrees become
+trees. However, even in this case the the tree is not necessary
+layered, as can be seen from
+Figure~\ref{fig:example-english-typeset}. Therefore a new approach
+generalizing Reingold-Tilford algorithm is necessary. This approach
+is based on the analysis of the structure of pedigrees and is
+sketched in the remainder of this manual.
+
+\section{Main Algorithm}
+\label{sec:alg}
+
+
+A pedigree consists of nodes (vertices), connected by lines (edges).
+If there is no inbreeding, the graph is acyclic. There are two kinds
+of nodes in the graph: person nodes (squares and circles on
+Figures~\ref{fig:example-english-typeset}
+and~\ref{fig:example-russian-typeset}) and \emph{marriage nodes},
+which are nameless on the figures. We will use the notation ``male
+spouse-female spouse'' for such nodes, so the marriage nodes on
+Figure~\ref{fig:example-english-typeset} are I:1-I:2, I:3-I:4 and
+II:2-II:3. A node has a \emph{precedessor} and \emph{children}. A
+marriage node does not have a precedessor, but has \emph{male spouse}
+and \emph{female spouse} (it is customary to put male spouses to the
+left and female spouses to the right on pedigrees). Any node has a
+\emph{downward tree} of its children, grandchildren etc. The downward
+tree may be empty.
+
+Any node in an acyclic graph can be a root. However, in layered
+trees there is a special root: the one that has no precedessor.
+Similarly we will call a \emph{local root} a node that has no
+predecessor. All marriage nodes are local roots. Some person nodes
+can be local roots as well.
+
+Let us first discuss the case where cobnsanguinic marriages are
+absent. In this case a pedigree is a tree.
+
+The proposed algorithm is recursive and starts from a local root.
+Strictly speaking, it can start from any local root, but medical
+pedigrees have a special person: \emph{proband,} the person who was
+the first to be examined by genetic specialists (the proband is shown by an
+arrow drawn near the node on
+Figures~\ref{fig:example-english-typeset}
+and~\ref{fig:example-russian-typeset}). Therefore it makes sense to
+start from the local root which has proband in its downward tree.
+
+If this local root is a person node, the pedigree is the layered tree,
+and Reingold-Tilford algorithm is sufficient. Therefore we should
+consider only the case when the local root is a marriage node. In
+this case we can typeset the downward tree using Reingold-Tilford
+algorithm. The spouses do not belong to this tree. However, each of
+them belongs to each own subpedigree. We will call them \emph{left
+ subpedigree} and \emph{right subpedigree}. We recursively apply our
+algorithm to typeset left and right subpedigrees. Then we move the
+left subpedigree to the right and right subpedigree to the left as far
+as we can without intersection between them and the downward tree.
+
+This process is shown on Figure~\ref{fig:subpedigrees}. Obviously
+this algorithm converges and leads to typesetting the pedigree without
+intersections between the subtrees and subpedigrees.
+
+\begin{figure}
+ \centering
+ \begin{pspicture}(-7,-4)(5.5,4)
+% \psgrid(-8,-4)(6,4)
+ \rput(-6, 2){\pstPerson[male, normal, belowtext=I:1, deceased]{GF1}}
+ \rput(-4, 2){\pnode{GF1_m_GM1}}
+ \rput(-2, 2){\pstPerson[female, asymptomatic, belowtext=I:2, deceased]{GM1}}
+ \rput(0, 2){\pstPerson[male, normal, belowtext=I:3]{GF2}}
+ \rput(2, 2){\pnode{GF2_m_GM2}}
+ \rput(4, 2){\pstPerson[female, normal, belowtext=I:4]{GM2}}
+ \rput(-5, 0){\pstPerson[female, obligatory, belowtext=II:1]{A1}}
+ \rput(-3, 0){\pstPerson[male, affected, belowtext=II:2]{F1}}
+ \rput(0, 0){\pnode{F1_m_M1}}
+ \rput(2, 0){\pstPerson[female, normal, belowtext=II:3]{M1}}
+ \rput(-5, -2){\pstPerson[female, affected, belowtext=III:1]{C1}}
+ \rput(-2, -2){\pstPerson[male, affected, belowtext=III:2, proband]{P}}
+ \rput(0, -2){\pstPerson[female, affected, belowtext=III:3]{S1}}
+ \rput(2, -2){\pstPerson[male, normal, belowtext=III:4]{S2}}
+ \pstDescent{GF1_m_GM1}{A1}
+ \pstDescent{GF1_m_GM1}{F1}
+ \ncline{GF1_m_GM1}{GM1}
+ \ncline{GF1_m_GM1}{GF1}
+ \pstDescent{GF2_m_GM2}{M1}
+ \ncline{GF2_m_GM2}{GM2}
+ \ncline{GF2_m_GM2}{GF2}
+ \pstDescent{A1}{C1}
+ \pstDescent{F1_m_M1}{P}
+ \pstDescent{F1_m_M1}{S1}
+ \pstDescent{F1_m_M1}{S2}
+ \ncline{F1_m_M1}{M1}
+ \ncline{F1_m_M1}{F1}
+ \ncbox[linestyle=none, boxsize=1, nodesepA=0.7, nodesepB=0.7,
+ boxdepth=0.7, style=TBlue]{GF1}{GM1}
+ \ncbox[linestyle=none, boxsize=1.3, nodesepA=0.7, nodesepB=0.7,
+ boxdepth=0.7, style=TBlue]{A1}{F1}
+ \ncbox[linestyle=none, boxsize=1.3, nodesepA=0.7, nodesepB=0.7,
+ boxdepth=0.7, style=TBlue]{C1}{C1}
+ \rput(-4,3.2){\textcolor{blue}{Left subpedigree}}
+ \ncbox[linestyle=none, boxsize=1, nodesepA=0.7, nodesepB=0.7,
+ boxdepth=0.7, style=TRed]{GF2}{GM2}
+ \ncbox[linestyle=none, boxsize=1.3, nodesepA=0.7, nodesepB=0.7,
+ boxdepth=0.7, style=TRed]{M1}{M1}
+ \rput(2,3.2){\textcolor{red}{Right subpedigree}}
+ \ncbox[linestyle=none, boxsize=1.3, nodesepA=0.7, nodesepB=0.7,
+ boxdepth=0.7, style=TGreen]{P}{S2}
+ \rput(0,-3){\textcolor{green}{Downward tree}}
+ \rput(0,0){\psdot}
+ \rput(0,0.2){Local root}
+ \end{pspicture}
+ \caption{Subpedigrees and Downward Tree}
+ \label{fig:subpedigrees}
+\end{figure}
+
+
+\section{Algorithm for Sorting Siblings and Marriage Partners}
+\label{sec:alg_sorting}
+
+When we create a marriage node, we want to put the male to the left
+and the female to the right. When we then sort siblings, we want this
+male to be the rightmost, and the female to be the leftmost. To do
+so, we assign to each node the special quantity |SortOrder|.
+Initially all nodes have |SortOrder| equal to zero, unless
+specifically set by the user in the input file (see
+Section~\ref{sec:sorting}). Then we use the following rules:
+\begin{enumerate}
+\item When creating the the marriage node:
+ \begin{enumerate}
+ \item If both spouses have equal |SortOrder| field, the male goes to
+ the left, the female goes to the right.
+ \item Otherwise, the spouse with greater |SortOrder| goes to the left.
+ \item If |SortOrder| of a spouse is 0, we set it to 1 (the
+ spouse on the left) or -1 (the spouse on the right).
+ \end{enumerate}
+\item When sorting siblings:
+ \begin{enumerate}
+ \item The sibling with smaller |SortOrder| goes to the left.
+ \item If both siblings have the same |SortOrder|, the oldest one
+ goes to the left.
+ \end{enumerate}
+\end{enumerate}
+
+\section{Modifications for Consangunic Unions}
+\label{sec:alg_consanguinic}
+
+Consanguinic unions present a problem for the described algorithm,
+because pedigrees with them are no longer trees (see
+Figure~\ref{fig:consanguinic}).
+
+In this release of the program we use the following hack. The direct
+lineage of the proband (or, more generally, the starting node) may have
+both mothers and fathers in the pedigree because they share genes from
+the starting node. If any other person has both mother and father in
+the chart, his or her parents both shared their genes with the
+starting node. Therefore they formed a consanguinic union. In this
+case the children of this node appear in two subtrees: their mother's
+and their father's.
+
+We delete them from one of the subtrees (the one with lower generation
+number), connect their parents with a double line (consanguinic union)
+and put the descent line from the middle of the union to them.
+
+There are two problems with this hack (see
+Section~\ref{sec:consanguinic}): the children of consanguinic unions
+are not centered on the diagaram, and the hack fails if the starting
+node itself is a descendant of a consanguinic union.
+
+Probably the next releases will employ better algorithms for
+consanguinic unions.
+
+\section{Conclusion}
+\label{sec:concl}
+
+The algorithm seems to be efficient and producing nicely typeset
+pedigrees. Since the input file format is simple, it may be used by
+the people without special skills in \LaTeX. On the other hand, the
+\TeX{} files produces are easy to understand and edit manually if the
+need arises.
+
+\clearpage
+
+\section{Acknowledgements}
+\label{sec:ack}
+
+The authors are grateful to Herbert Vo\ss{} for help with
+|PSTricks| code. The support of \TeX{} User Group is gratefully
+acknowledged. One of the authors (LA) was supported by Russian
+Foundation for Fundamental Research (travel grant 06-04-58811),
+Russian Federation President Council for Grants Supporting Young
+Scientists and Flagship Science Schools (grant MD-4245.2006.7)
+
+
+\bibliographystyle{unsrt}
+\bibliography{pedigree}
+
+\end{document}
+
+% $Id: pedigree.tex,v 2.18 2012-03-16 01:29:03 boris Exp $ \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/russian.tex b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/russian.tex
new file mode 100644
index 0000000000..70b3dad5cb
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/russian.tex
@@ -0,0 +1,27 @@
+{%
+\psset{descarmA=0.8}%
+\begin{pspicture}(-6.6,-9.9)(6.6,3.3)
+\rput(0, 0){\pnode{F1_m_M1}}
+\rput(3.3, 0){\pstPerson[female, normal, belowtext={\small I:2}, deceased, abovetext={\scriptsize é×ÁÎÏ×Á ìÀÂÏ×Ø é×ÁÎÏ×ÎÁ}]{M1}}
+\rput(-3.3, 0){\pstPerson[male, obligatory, belowtext={\small I:1}, deceased, abovetext={\scriptsize é×ÁÎÏ× ðÅÔÒ éÌØÉÞ}]{F1}}
+\rput(0, -6.6){\pstPerson[female, normal, belowtext={\small III:2}, abovetext={\scriptsize é×ÁÎÏ×Á äÁÒØÑ óÅÒÇÅÅ×ÎÁ}]{K2}}
+\rput(-3.3, -6.6){\pstPerson[male, asymptomatic, belowtext={\small III:1}, abovetext={\scriptsize é×ÁÎÏ× é×ÁÎ óÅÒÇÅÅ×ÉÞ}]{K1}}
+\rput(1.65, -3.3){\pstPerson[female, normal, belowtext={\small II:2}, abovetext={\scriptsize é×ÁÎÏ×Á áÎÎÁ ðÅÔÒÏ×ÎÁ}]{S1}}
+\rput(-1.65, -3.3){\pstPerson[male, affected, belowtext={\small II:1}, proband, abovetext={\scriptsize é×ÁÎÏ× óÅÒÇÅÊ ðÅÔÒÏ×ÉÞ}]{P}}
+\pstDescent{F1_m_M1}{P}
+\pstDescent{F1_m_M1}{S1}
+\ncline[]{F1_m_M1}{M1}
+\ncline[]{F1_m_M1}{F1}
+\pstDescent{P}{K1}
+\pstDescent{P}{K2}
+\end{pspicture}%
+}
+
+\begin{description}
+\item[I:1] é×ÁÎÏ× ðÅÔÒ éÌØÉÞ; {\cyr\cyrr\cyro\cyrd.} {\cyr\cyrn\cyre\cyri\cyrz\cyrv.}; {\cyr\cyru\cyrm. \cyrv{} \cyrv\cyro\cyrz\cyrr. } {\cyr\cyrn\cyre\cyri\cyrz\cyrv.}.
+\item[I:2] é×ÁÎÏ×Á ìÀÂÏ×Ø é×ÁÎÏ×ÎÁ; {\cyr\cyrr\cyro\cyrd.} 1935/12/01; {\cyr\cyru\cyrm. \cyrv{} \cyrv\cyro\cyrz\cyrr. } 70.
+\item[II:1] é×ÁÎÏ× óÅÒÇÅÊ ðÅÔÒÏ×ÉÞ; {\cyr\cyrr\cyro\cyrd.} 1965/08/06.
+\item[II:2] é×ÁÎÏ×Á áÎÎÁ ðÅÔÒÏ×ÎÁ; {\cyr\cyrr\cyro\cyrd.} 1968/05/05.
+\item[III:1] é×ÁÎÏ× é×ÁÎ óÅÒÇÅÅ×ÉÞ; {\cyr\cyrr\cyro\cyrd.} 1990/12/01; çÅÎÅÔÉÞ. ÉÓÓÌ. 2005/12/08.
+\item[III:2] é×ÁÎÏ×Á äÁÒØÑ óÅÒÇÅÅ×ÎÁ; {\cyr\cyrr\cyro\cyrd.} 1995/03/24; çÅÎÅÔÉÞ. ÉÓÓÌ. 2005/12/08.
+\end{description}
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/abortions.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/abortions.csv
new file mode 100644
index 0000000000..0397efb1aa
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/abortions.csv
@@ -0,0 +1,5 @@
+Id |Name |Sex |DoB |DoD |Mother|Proband|Condition|Type
+A0 |Ann |female|1970.06.15| | | |affected |
+B1 |#abortion|female|1990.03.01| |A0 | |affected |
+B2 |#abortion|male |2000.10.10| |A0 | | |sab
+B3 |John |male |2002.12.01| |A0 |yes |affected |
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/badsort.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/badsort.csv
new file mode 100644
index 0000000000..2681636195
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/badsort.csv
@@ -0,0 +1,14 @@
+Id |Name |Sex |DoB |Father|Mother|Proband
+A0 |John |male |1915.06.15| | |
+B1 |Sam |male |1935.12.04|A0 | |
+B2 |Ann |female|1937.03.02|A0 | |
+C1 |Paul |male |1952.10.03|B1 | |
+F1 |Scott |male |1912.02.01| | |
+G1 |Simon |male |1934.09.17|F1 | |
+G2 |Sarah |female|1936.12.19|F1 | |
+H1 |Lola |female|1960.04.13|G2 | |
+K1 |Jim |male |1962.11.05|G1 |B2 |
+M1 |Jane |female|1917.02.13| | |
+P1 |Simon |male |1935.10.04| | M1 |
+R1 |Pam |female|1964.02.05|P1 | |
+X1 |James |male |1988.07.12|K1 |R1 |yes \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/childlessness.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/childlessness.csv
new file mode 100644
index 0000000000..38b524cb45
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/childlessness.csv
@@ -0,0 +1,6 @@
+Id |Name |Sex |Mother|Father|Proband|Type |Comment
+A0 |John |male | | | | |
+B1 |James |male | |A0 | | |
+B1c|#childless |male | |B1 | |infertile |anospermia
+B2 |Ann |female| |A0 |yes | |
+B2c|#childless | |B2 | | | | \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/consanguinic.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/consanguinic.csv
new file mode 100644
index 0000000000..0aba287f1a
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/consanguinic.csv
@@ -0,0 +1,11 @@
+Id |Name |Sex |Father|Mother|Proband|DoB
+A0 |Jane |female| | | |1908.12.12
+B1 |John |male | |A0 | |1936.12.15
+B2 |Ann |female| |A0 | |1934.04.17
+B3 |Samantha |female| |A0 | |1932.12.03
+B4 |Nancy |female| |A0 | |1928.01.05
+C1 |Mary |female| |B2 | yes |1955.08.26
+C2 |Paul |male | |B3 | |1964.05.07
+C3 |Jane |female| |B4 | |1950.11.03
+D1 |Jack |male |B1 |C1 | |1975.07.01
+D2 |Laura |female|C2 |C3 | |1974.09.05
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.cfg b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.cfg
new file mode 100644
index 0000000000..a8028789a7
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.cfg
@@ -0,0 +1,76 @@
+# An example configuration file for pedigree program
+# This file is used for the examples in the program manual.
+
+# Do we want to have a full LaTeX file or just a fragment?
+#
+$fulldoc=0;
+
+# What kind of document do we want
+#
+# $documentheader='\documentclass[landscape]{article}';
+
+# Define additional packages here
+#
+# $addtopreamble=<<END;
+# \\usepackage{pst-pdgr}
+# END
+
+# Do we want to print a legend?
+#
+$printlegend=1;
+
+# Fields to include in the legend. Delete Name for privacy
+# protection.
+#
+@fieldsforlegend = qw(Name DoB AgeAtDeath Comment);
+
+#
+# Fields to put at the node. Delete Name for privacy
+# protection.
+#
+@fieldsforchart = qw(Name);
+
+# Language
+#
+# $language="russian";
+$language="english";
+
+# Override the encoding
+#
+# $encoding="koi8-r";
+
+#
+# Fonts for the chart
+#
+$belowtextfont='\small';
+$abovetextfont='\scriptsize';
+
+#
+# descarmA
+#
+$descarmA = 0.8;
+
+#
+# Distances between nodes (in cm)
+#
+$xdist=2;
+$ydist=2;
+
+#
+# Maximal width and height of the pedigree in cm.
+# Set this to 0 to switch off scaling
+#
+$maxW = 15;
+$maxH = 19;
+
+#
+# Whether to rotate the page. The values are 'yes', 'no' and 'maybe'
+# If 'maybe' is chosen, the pedigree is rotated if it allows better
+# scaling
+#
+$rotate = 'maybe';
+
+
+# Must be the last line
+#
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.csv
new file mode 100644
index 0000000000..01a59888bd
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.csv
@@ -0,0 +1,12 @@
+Id |Name |Sex |DoB | DoD |Mother|Father|Proband|Condition |Comment
+P |John Smith |male |1970/02/05| |M1 |F1 | yes | affected|Evaluated 2005/12/01
+M1 |Mary Smith |female|1940/02/05| |GM2 |GF2 | | normal |
+F1 |Bill Smith |male |1938/04/03| |GM1 | GF1 | |affected |
+GM1|Joan Smith |female|1902/07/01|1975/12/13| | | |asymptomatic
+GF1|Joseph Smith |male |unknown |unknown | | | | normal
+GF2|Jim Brown |male |1905/11/01| | | | | normal |
+GM2|Lisa Brown |female|1910/03/03| | | | | normal |
+S1 |Rebecca Smith |female|1972/12/25| |M1 |F1 | | affected
+S2 |Alexander Smith |male |1975/11/12| |M1 |F1 | | normal
+A1 |Ann Gold |female|1941/09/02| |GM1 | GF1 | | obligatory|Aunt of the proband
+C1 | Jenny Smith |female|1969/12/03| |A1 | | | affected | Cousin of the proband
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english1.cfg b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english1.cfg
new file mode 100644
index 0000000000..5ce3a8d303
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english1.cfg
@@ -0,0 +1,76 @@
+# An example configuration file for pedigree program
+# This file is used for the examples in the program manual.
+
+# Do we want to have a full LaTeX file or just a fragment?
+#
+$fulldoc=0;
+
+# What kind of document do we want
+#
+# $documentheader='\documentclass[landscape]{article}';
+
+# Define additional packages here
+#
+# $addtopreamble=<<END;
+# \\usepackage{pst-pdgr}
+# END
+
+# Do we want to print a legend?
+#
+$printlegend=0;
+
+# Fields to include in the legend. Delete Name for privacy
+# protection.
+#
+@fieldsforlegend = qw(Name DoB AgeAtDeath Comment);
+
+#
+# Fields to put at the node. Delete Name for privacy
+# protection.
+#
+@fieldsforchart = qw();
+
+# Language
+#
+# $language="russian";
+$language="english";
+
+# Override the encoding
+#
+# $encoding="koi8-r";
+
+#
+# Fonts for nodes
+#
+$belowtextfont='\small';
+$abovetextfont='\scriptsize';
+
+#
+# descarmA
+#
+$descarmA = 0.9;
+
+#
+# Distances between nodes (in cm)
+#
+$xdist=1.5;
+$ydist=1.8;
+
+#
+# Maximal width and height of the pedigree in cm.
+# Set this to 0 to switch off scaling
+#
+$maxW = 15;
+$maxH = 19;
+
+#
+# Whether to rotate the page. The values are 'yes', 'no' and 'maybe'
+# If 'maybe' is chosen, the pedigree is rotated if it allows better
+# scaling
+#
+$rotate = 'maybe';
+
+
+# Must be the last line
+#
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english_short.cfg b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english_short.cfg
new file mode 100644
index 0000000000..8ee82a474c
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english_short.cfg
@@ -0,0 +1,76 @@
+# An example configuration file for pedigree program
+# This file is used for the examples in the program manual.
+
+# Do we want to have a full LaTeX file or just a fragment?
+#
+$fulldoc=0;
+
+# What kind of document do we want
+#
+# $documentheader='\documentclass[landscape]{article}';
+
+# Define additional packages here
+#
+# $addtopreamble=<<END;
+# \\usepackage{pst-pdgr}
+# END
+
+# Do we want to print a legend?
+#
+$printlegend=0;
+
+# Fields to include in the legend. Delete Name for privacy
+# protection.
+#
+@fieldsforlegend = qw(Name DoB AgeAtDeath Comment);
+
+#
+# Fields to put at the node. Delete Name for privacy
+# protection.
+#
+@fieldsforchart = qw(Name);
+
+# Language
+#
+# $language="russian";
+$language="english";
+
+# Override the encoding
+#
+# $encoding="koi8-r";
+
+#
+# Fonts for the chart
+#
+$belowtextfont='\small';
+$abovetextfont='\scriptsize';
+
+#
+# descarmA
+#
+$descarmA = 0.8;
+
+#
+# Distances between nodes (in cm)
+#
+$xdist=2;
+$ydist=2;
+
+#
+# Maximal width and height of the pedigree in cm.
+# Set this to 0 to switch off scaling
+#
+$maxW = 15;
+$maxH = 19;
+
+#
+# Whether to rotate the page. The values are 'yes', 'no' and 'maybe'
+# If 'maybe' is chosen, the pedigree is rotated if it allows better
+# scaling
+#
+$rotate = 'maybe';
+
+
+# Must be the last line
+#
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/pedigree.cfg b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/pedigree.cfg
new file mode 100644
index 0000000000..a82689e0e3
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/pedigree.cfg
@@ -0,0 +1,47 @@
+# An example configuration file for pedigree program
+#
+
+# Do we want to have a full LaTeX file or just a fragment?
+#
+$fulldoc=1;
+
+# What kind of document do we want
+#
+# $documentheader='\documentclass[landscape]{article}';
+$documentheader='\documentclass{article}';
+
+# Define additional packages here
+#
+# $addtopreamble=<<END;
+# \\usepackage{graphics}
+# END
+$addtopreamble=<<END;
+\\psset{armB=1}
+END
+
+# Do we want to print a legend?
+#
+$printlegend=1;
+
+# Fields to include in the legend. Delete Name for privacy
+# protection.
+#
+@fieldstoprint = qw(Name DoB AgeAtDeath Comment);
+
+# Language
+#
+# $language="russian";
+$language="english";
+
+# Override the encoding, if neccessary
+#
+# $encoding="koi8-r";
+
+# Distances between nodes (in cm)
+#
+$xdist=2;
+$ydist=2;
+
+# Must be the last line
+#
+1; \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.cfg b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.cfg
new file mode 100644
index 0000000000..13f16b5974
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.cfg
@@ -0,0 +1,78 @@
+# An example configuration file for pedigree program
+# This file is used for the examples in the program manual.
+
+# Do we want to have a full LaTeX file or just a fragment?
+#
+$fulldoc=0;
+
+# What kind of document do we want
+#
+# $documentheader='\documentclass[landscape]{article}';
+
+# Define additional packages here
+#
+# $addtopreamble=<<END;
+# \\usepackage{pst-pdgr}
+# END
+
+# Do we want to print a legend?
+#
+$printlegend=1;
+
+# Fields to include in the legend. Delete Name for privacy
+# protection.
+#
+@fieldsforlegend = qw(Name DoB AgeAtDeath Comment);
+
+#
+# Fields to put at the node. Delete Name for privacy
+# protection.
+#
+@fieldsforchart = qw(Name);
+
+# Language
+#
+# $language="english";
+ $language="russian";
+
+
+# Override the encoding
+#
+$encoding="koi8-r";
+
+#
+# Fonts for nodes
+#
+$belowtextfont='\small';
+$abovetextfont='\scriptsize';
+
+#
+# descarmA
+#
+$descarmA = 0.8;
+
+#
+# Distances between nodes (in cm)
+#
+$xdist=3.3;
+$ydist=3.3;
+
+#
+# Maximal width and height of the pedigree in cm.
+# Set this to 0 to switch off scaling
+#
+$maxW = 15;
+$maxH = 19;
+
+#
+# Whether to rotate the page. The values are 'yes', 'no' and 'maybe'
+# If 'maybe' is chosen, the pedigree is rotated if it allows better
+# scaling
+#
+$rotate = 'maybe';
+
+
+
+# Must be the last line
+#
+1;
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.csv
new file mode 100644
index 0000000000..d702582b96
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.csv
@@ -0,0 +1,7 @@
+éÄÅÎÔ|æéï |ðÏÌ|òÏÖÄ |õÍÅÒ |íÁÔØ|ïÔÅÃ|ðÒÏÂÁÎÄ|óÏÓÔÏÑÎÉÅ | ëÏÍÍÅÎÔÁÒÉÊ
+P |é×ÁÎÏ× óÅÒÇÅÊ ðÅÔÒÏ×ÉÞ |ÍÕÖ|1965/08/06| |M1 |F1 |ÄÁ |ÂÏÌØÎ |
+M1 |é×ÁÎÏ×Á ìÀÂÏ×Ø é×ÁÎÏ×ÎÁ|ÖÅÎ|1935/12/01|2005/10/01| | | |ÎÏÒÍ
+F1 |é×ÁÎÏ× ðÅÔÒ éÌØÉÞ |ÍÕÖ|ÎÅÉÚ× |2003/01/25| | | |ÏÂÌÉÇÁÔ
+S1 |é×ÁÎÏ×Á áÎÎÁ ðÅÔÒÏ×ÎÁ |ÖÅÎ|1968/05/05| |M1 |F1 | |ÎÏÒÍ
+K1 |é×ÁÎÏ× é×ÁÎ óÅÒÇÅÅ×ÉÞ |ÍÕÖ|1990/12/01| | |P | |ÁÓÉÍÐ |çÅÎÅÔÉÞ. ÉÓÓÌ. 2005/12/08
+K2 |é×ÁÎÏ×Á äÁÒØÑ óÅÒÇÅÅ×ÎÁ|ÖÅÎ|1995/03/24| | |P | |ÎÏÒÍ |çÅÎÅÔÉÞ. ÉÓÓÌ. 2005/12/08
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort1.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort1.csv
new file mode 100644
index 0000000000..315721ebe8
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort1.csv
@@ -0,0 +1,12 @@
+Id |Name |Sex |DoB |Father|Mother|Proband
+A0 |John |male |1915.06.15| | |
+B1 |Joan |female|1940.03.02|A0 | |
+B2 |Jane |female|1942.07.07|A0 | |
+B3 |Bill |male |1944.12.01|A0 | |
+B4 |Peter |male |1941.05.01| | |
+C1 |Jack |male |1963.12.01|B4 |B2 |
+C2 |Sam |male |1961.08.26| |B1 |
+C3 |Ann |female|1965.11.12| |B3 |
+C4 |Lucy |female|1965.12.11| | |
+D1 |Mark |male |1989.06.21|C1 |C4 |yes
+D2 |Dina |female|1991.12.02|C1 |C4 |
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort2.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort2.csv
new file mode 100644
index 0000000000..f38830ee3e
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort2.csv
@@ -0,0 +1,12 @@
+Id |Name |Sex |DoB |Father|Mother|Proband|SortOrder
+A0 |John |male |1915.06.15| | | |
+B1 |Joan |female|1940.03.02|A0 | | |
+B2 |Jane |female|1942.07.07|A0 | | |
+B3 |Bill |male |1944.12.01|A0 | | |
+B4 |Peter |male |1941.05.01| | | | 3
+C1 |Jack |male |1963.12.01|B4 |B2 | |
+C2 |Sam |male |1961.08.26| |B1 | |
+C3 |Ann |female|1965.11.12| |B3 | |
+C4 |Lucy |female|1965.12.11| | | |
+D1 |Mark |male |1989.06.21|C1 |C4 |yes |
+D2 |Dina |female|1991.12.02|C1 |C4 | |
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort3.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort3.csv
new file mode 100644
index 0000000000..44b60b2dc0
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort3.csv
@@ -0,0 +1,12 @@
+Id |Name |Sex |DoB |Father|Mother|Proband|SortOrder
+A0 |John |male |1915.06.15| | | |
+B1 |Joan |female|1940.03.02|A0 | | |
+B2 |Jane |female|1942.07.07|A0 | | |
+B3 |Bill |male |1944.12.01|A0 | | |
+B4 |Peter |male |1941.05.01| | | |
+C1 |Jack |male |1963.12.01|B4 |B2 | |
+C2 |Sam |male |1961.08.26| |B1 | |
+C3 |Ann |female|1965.11.12| |B3 | |
+C4 |Lucy |female|1965.12.11| | | | -3
+D1 |Mark |male |1989.06.21|C1 |C4 |yes |
+D2 |Dina |female|1991.12.02|C1 |C4 | |
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/twins.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/twins.csv
new file mode 100644
index 0000000000..a07333accc
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/twins.csv
@@ -0,0 +1,12 @@
+Id |Name |Sex |DoB |DoD |Mother|Father|Proband|Twins|Type
+F0 |Adam |male |unknown |unknown | | | | |
+A0 |Sam |male |1950.01.03|unknown | |F0 | | A1 |qzygotic
+A1 |John |male |1950.01.03|2005.04.12| |F0 | | A0 |qzygotic
+A2 |Jane |female|1951.14.15| | | | | |
+B1 |Jack |male |1975.05.06| |A2 |A1 | |B2 |monozygotic
+B2 |Mike |male |1975.05.06| |A2 |A1 | |B1 |monozygotic
+B3 |Pam |female|1973.11.01| |A2 |A1 | | |
+C1 |Jane |female|1998.12.04| | |B1 | |C2,C3|
+C2 |John |male |1998.12.04| | |B1 | |C1,C3|
+C3 |George|male |1998.12.04| | |B1 | yes |C1,C2|
+C4 |Ann |female|2003.02.04| | |B1 | | | \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.1 b/graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.1
new file mode 100644
index 0000000000..adb65ae743
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.1
@@ -0,0 +1,185 @@
+.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "pedigree 1"
+.TH pedigree 1 "2012-04-14" "perl v5.10.0" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+pedigree \- create a TeX file for pedigree from a csv file
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBpedigree\fR [\-c \fIconfiguration_file\fR] [\-d] [\-o \fIoutput_file\fR] [\-s \fIstart_id\fR] \fIinput_file\fR
+.PP
+\&\fBpedigree\fR \-v
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The program converts a comma separated \fIinput_file\fR into a TeX file
+with pst-pdgr macros.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-c\fR \fIconfiguration_file\fR" 4
+.IX Item "-c configuration_file"
+The configuration file to read along with the system-wide and user's
+configuration files
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+Debug mode on
+.IP "\fB\-o\fR \-\fIoutput_file\fR" 4
+.IX Item "-o -output_file"
+The ouput file instead of \fIinput_file.tex\fR
+.IP "\fB\-s\fR \-\fIstart_id\fR" 4
+.IX Item "-s -start_id"
+If this option is selected, the pedigree is constructed starting from
+the node with the Id i<start_id>. Otherwise it is started from the
+proband node.
+.Sp
+This option allows to create pedigrees with multiple probands or absent
+probands, or show people who are not proband's relatives.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+Print version information
+.SH "FILES"
+.IX Header "FILES"
+.IP "\fB/etc/pedigree.cfg\fR" 4
+.IX Item "/etc/pedigree.cfg"
+Global configuration file
+.ie n .IP "\fB\fB$HOME\fB/.pedigreerc\fR" 4
+.el .IP "\fB\f(CB$HOME\fB/.pedigreerc\fR" 4
+.IX Item "$HOME/.pedigreerc"
+User configuration file
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+The manual distributed with this program describes the format of the
+configuration file and the input file.
+.PP
+The library functions are described in \fIPedigree::Language\fR\|(3),
+\&\fIPedigree::Parser\fR\|(3), \fIPedigree::Node\fR\|(3), \fIPedigree::PersonNode\fR\|(3),
+\&\fIPedigree::MarriageNode\fR\|(3), \fIPedigree::Area\fR\|(3).
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman, Leila Akhmadeeva, 2006\-2012
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.pl b/graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.pl
new file mode 100644
index 0000000000..209c3131be
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.pl
@@ -0,0 +1,544 @@
+#!/usr/bin/env perl
+#
+# Copyright (C) 2006-2012 Boris Veytsman & Leila Akhmadeeva
+#
+# 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.
+#
+#
+=pod
+
+=head1 NAME
+
+pedigree - create a TeX file for pedigree from a csv file
+
+=head1 SYNOPSIS
+
+B<pedigree> [-c I<configuration_file>] [-d] [-o I<output_file>] [-s I<start_id>] I<input_file>
+
+B<pedigree> -v
+
+=head1 DESCRIPTION
+
+The program converts a comma separated I<input_file> into a TeX file
+with pst-pdgr macros.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-c> I<configuration_file>
+
+The configuration file to read along with the system-wide and user's
+configuration files
+
+=item B<-d>
+
+Debug mode on
+
+=item B<-o> -I<output_file>
+
+The ouput file instead of I<input_file.tex>
+
+=item B<-s> -I<start_id>
+
+If this option is selected, the pedigree is constructed starting from
+the node with the Id i<start_id>. Otherwise it is started from the
+proband node.
+
+This option allows to create pedigrees with multiple probands or absent
+probands, or show people who are not proband's relatives.
+
+=item B<-v>
+
+Print version information
+
+=back
+
+=head1 FILES
+
+=over 4
+
+=item B</etc/pedigree.cfg>
+
+Global configuration file
+
+=item B<$HOME/.pedigreerc>
+
+User configuration file
+
+=back
+
+=head1 SEE ALSO
+
+The manual distributed with this program describes the format of the
+configuration file and the input file.
+
+The library functions are described in Pedigree::Language(3),
+Pedigree::Parser(3), Pedigree::Node(3), Pedigree::PersonNode(3),
+Pedigree::MarriageNode(3), Pedigree::Area(3).
+
+=head1 AUTHOR
+
+Boris Veytsman, Leila Akhmadeeva, 2006-2012
+
+
+=cut
+
+
+#########################################################
+# Packages and Options #
+#########################################################
+
+use strict;
+use vars qw($opt_c $opt_d $opt_o $opt_s $opt_v);
+
+our $TLCONF; # TL config file
+our $TLCONFLOCAL; # TL local config file
+
+BEGIN {
+ # find files relative to our installed location within TeX Live
+ chomp(my $TLMaster = `kpsewhich -var-value=SELFAUTOPARENT`); # TL root
+ if (length($TLMaster)) {
+ unshift @INC, "$TLMaster/texmf-dist/scripts/pedigree-perl";
+ $TLCONF = "$TLMaster/texmf-config/pedigree/pedigree.cfg";
+ chomp($TLCONFLOCAL = `kpsewhich -var-value=TEXMFLOCAL`);
+ $TLCONFLOCAL .= "/pedigree/pedigree.cfg";
+ }
+}
+
+use Getopt::Std;
+use FileHandle;
+use Pedigree;
+
+#########################################################
+# Options Reading and Global Variables #
+#########################################################
+
+my $USAGE="Usage: $0 [-c configuration_file] [-d] [-o output_file] [-s start_id] input_file\n";
+my $COPYRIGHT=<<END;
+$0 Version 1.0, April 2012
+
+Copyright (C) 2006-2012 Boris Veytsman & Leila Akhmadeeva
+
+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,
+END
+
+my $GLOBALCONF="/etc/pedigree.cfg";
+
+my $USERCONF="$ENV{HOME}/.pedigreerc";
+
+
+our $IN = new FileHandle;
+our $OUT = new FileHandle;
+
+getopts('c:do:s:v') or die $USAGE;
+
+if ($opt_v) {
+ die $COPYRIGHT;
+}
+
+our $DEBUG = $opt_d ||0;
+
+if (scalar @ARGV != 1) {
+ die $USAGE;
+}
+
+our $start_id = $opt_s;
+
+#########################################################
+# Opening Files #
+#########################################################
+
+
+if ($ARGV[0] eq '-') {
+ $IN->fdopen(fileno(STDIN),"r");
+} else {
+ $IN->open($ARGV[0], "r") or die "Cannot read from $ARGV[0]\n";
+}
+
+my $outfile=$ARGV[0];
+if ($opt_o) {
+ $outfile = $opt_o;
+} else {
+ $outfile =~ s/\.[^\.]*$/.tex/;
+}
+if ($outfile eq '-') {
+ $OUT->fdopen(fileno(STDOUT),"w");
+} else {
+ $OUT->open($outfile, "w") or die "Cannot write to $outfile\n";
+}
+
+#########################################################
+# Configuration #
+#########################################################
+
+#
+# First, the defaults. Even if we do not find any
+# configuration file, these will work.
+#
+
+
+#
+# Do we want to have a full LaTeX file or just a fragment?
+#
+our $fulldoc=1;
+
+#
+# What kind of document do we want
+#
+# our $documentheader='\documentclass[landscape]{article}';
+our $documentheader='\documentclass{article}';
+
+#
+# Define additional packages here
+#
+# our $addtopreamble=<<END;
+# \\usepackage{graphics}
+# END
+our $addtopreamble=<<END;
+\\psset{descarmA=1}
+END
+
+
+
+#
+# Do we want to print a legend?
+#
+our $printlegend=1;
+
+#
+# Fields to include in the legend. Delete Name for privacy
+# protection.
+#
+our @fieldsforlegend = qw(Name DoB AgeAtDeath Comment);
+
+#
+# Fields to put at the node. Delete Name for privacy
+# protection.
+#
+our @fieldsforchart = qw(Name);
+
+#
+# Language
+#
+# our $language="russian";
+our $language="english";
+
+#
+# Override the encoding
+#
+# our $encoding="koi8-r";
+
+our $encoding;
+
+#
+# descarmA
+#
+our $descarmA = 0.8;
+
+#
+# Fonts for nodes
+#
+our $belowtextfont='\small';
+our $abovetextfont='\scriptsize';
+
+#
+# Distances between nodes (in cm)
+#
+our $xdist=2;
+our $ydist=2;
+
+#
+# Maximal width and height of the pedigree in cm.
+# Set this to 0 to switch off scaling
+#
+our $maxW = 15;
+our $maxH = 19;
+
+#
+# Whether to rotate the page. The values are 'yes', 'no' and 'maybe'
+# If 'maybe' is chosen, the pedigree is rotated if it allows better
+# scaling
+#
+our $rotate = 'maybe';
+
+#
+# Read the global configuration file(s)
+#
+foreach my $conffile ($GLOBALCONF, $TLCONF, $TLCONFLOCAL) {
+ if (-r $conffile) {
+ if ($DEBUG) {
+ print STDERR "Reading global configuration file $conffile\n";
+ }
+ require "$conffile";
+ } else {
+ if ($DEBUG) {
+ print STDERR "Cannot find global configuration file $conffile; going without it\n";
+ }
+ }
+}
+
+#
+# Read the user configuration file
+#
+if (-r $USERCONF) {
+ if ($DEBUG) {
+ print STDERR "Reading user configuration file $USERCONF\n";
+ }
+ require "$USERCONF";
+} else {
+ if ($DEBUG) {
+ print STDERR "Cannot find user configuration file $USERCONF; going without it\n";
+ }
+}
+
+#
+# Read the option configuration file
+#
+if ($opt_c) {
+ if (-r $opt_c) {
+ if ($DEBUG) {
+ print STDERR "Reading optional configuration file $opt_c\n";
+ }
+ require "$opt_c";
+ } else {
+ die "Cannot find $opt_c\n";
+ }
+}
+
+#########################################################
+# Setting up #
+#########################################################
+
+my $lang = new Pedigree::Language($language, $encoding);
+$_=<$IN>;
+my $parser = new Pedigree::Parser($_,$lang);
+my $start;
+
+#########################################################
+# Reading input #
+#########################################################
+
+while (<$IN>) {
+ my $node = Pedigree->MakeNode($parser->Parse($_));
+ if (ref($node)) {
+ if ($start_id) {
+ if ($start_id eq $node->Id()) {
+ $start = $node;
+ if ($DEBUG) {
+ print STDERR "Found start: ", $start->Id(), "\n";
+ }
+ }
+ } else {
+ if ($node->isProband()) {
+ if (ref($start)) {
+ print STDERR "Two probands? I got ", $start->Id(),
+ " and ", $node->Id(), "\n";
+ }
+ $start=$node;
+ if ($DEBUG) {
+ print STDERR "Found proband: ", $start->Id(), "\n";
+ }
+ }
+ }
+ }
+}
+
+if (!ref($start)) {
+ die "Cannot find the start!\n";
+}
+
+#########################################################
+# Process Pedigree #
+#########################################################
+
+#
+# Check all parents
+#
+$start->CheckAllParents();
+
+
+#
+# The root is the root of the tree to which the proband
+# belongs
+#
+
+my ($root, undef)=@{$start->FindRoot(0)};
+if ($DEBUG) {
+ print STDERR "Root: ", $root->Id(), "\n";
+}
+
+#
+# Calculate relative coordinates
+#
+$root->SetRelX(0);
+$root->SetRelY(0);
+$root->SetArea();
+
+#
+# Calculate the absolute coordinates
+#
+$root->CalcAbsCoor(0,0);
+
+#
+# Check for consanguinic marriages
+#
+$root->AddConsanguinicMarriages();
+
+#
+# And twins
+#
+$root->AddTwins($ydist);
+
+#
+# Get the frame
+#
+my ($xmin, $ymin, $xmax, $ymax) = @{$root->SetFrame($xdist, $ydist)};
+
+
+
+#########################################################
+# Printing headers #
+#########################################################
+
+if ($fulldoc) {
+ printheader($OUT,$lang,$addtopreamble);
+}
+
+#########################################################
+# Calculate scale and check whether to rotate #
+#########################################################
+
+my $scale=1;
+my $scaleRotated = 1;
+
+if ($maxH && $maxW) {
+ if ($maxH/($ymax-$ymin) < $scale) {
+ $scale = $maxH/($ymax-$ymin);
+ }
+ if ($maxW/($xmax-$xmin) < $scale) {
+ $scale = $maxW/($xmax-$xmin);
+ }
+ if ($maxW/($ymax-$ymin) < $scaleRotated) {
+ $scaleRotated = $maxW/($ymax-$ymin);
+ }
+ if ($maxH/($xmax-$xmin) < $scaleRotated) {
+ $scaleRotated = $maxH/($xmax-$xmin);
+ }
+}
+
+my $doRotate = ($rotate =~ /yes/i) || (($rotate =~ /maybe/i) &&
+ ($scaleRotated > $scale));
+
+#########################################################
+# Printing pspicture #
+#########################################################
+
+my $pre;
+my $post ='}'."\n";
+
+if ($doRotate) {
+ $descarmA *= $scaleRotated;
+ $pre="\\rotatebox{90}{%\n\\psset{descarmA=$descarmA}%\n";
+ if ($scaleRotated<1) {
+ $pre .= '\psset{unit='.$scaleRotated.'}%'."\n";
+ }
+} else {
+ $descarmA *= $scale;
+ $pre="{%\n\\psset{descarmA=$descarmA}%\n";
+ if ($scale<1) {
+ $pre .= '{\psset{unit='.$scale.'}%'."\n";
+ }
+}
+
+print $OUT $pre;
+
+print $OUT '\begin{pspicture}',"($xmin,$ymin)($xmax,$ymax)\n";
+
+print $OUT $root->DrawAll($xdist, $ydist, $belowtextfont,
+ $abovetextfont, @fieldsforchart);
+
+print $OUT '\end{pspicture}%',"\n";
+
+print $OUT $post;
+
+#########################################################
+# Printing legend #
+#########################################################
+
+
+if ($printlegend) {
+ print $OUT $root->PrintAllLegends($lang, @fieldsforlegend);
+}
+
+#########################################################
+# Printing end #
+#########################################################
+
+
+if ($fulldoc) {
+ printend($OUT);
+}
+
+#########################################################
+# Exiting #
+#########################################################
+
+exit 0;
+
+#########################################################
+# Subroutines #
+#########################################################
+
+#
+# Printing headers & footers
+#
+
+sub printheader {
+ my ($OUT,$lang,$addtopreamble)=@_;
+ print $OUT <<END;
+$documentheader
+\\usepackage{pst-pdgr}
+END
+
+ print $OUT $lang->Header;
+ print $OUT <<END;
+$addtopreamble
+\\begin{document}
+END
+ return 0;
+}
+
+
+sub printend {
+ my $OUT=shift;
+ print $OUT "\\end{document}\n";
+ return 0;
+}
+
+
diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/Makefile b/graphics/pstricks/contrib/pedigree/pst-pdgr/Makefile
new file mode 100644
index 0000000000..7eae24e9a3
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/Makefile
@@ -0,0 +1,54 @@
+#
+# Makefile for pst-pdgr package
+#
+# This file is in public domain
+#
+# $Id: Makefile,v 2.2 2017/11/20 21:27:26 boris Exp $
+#
+
+PACKAGE=pst-pdgr
+
+all: $(PACKAGE).pdf
+
+%.pdf: %.ps
+ ps2pdf -sAutoRotatePages=None $<
+
+%.ps: %.dvi
+ dvips -Ppdf -o $@ $<
+
+%.dvi: %.dtx $(PACKAGE).sty $(PACKAGE).tex
+ latex $<
+ - bibtex $*
+ latex $<
+ - makeindex -s gind.ist -o $*.ind $*.idx
+ - makeindex -s gglo.ist -o $*.gls $*.glo
+ latex $<
+ while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log) \
+ do latex $<; done
+
+
+%.sty: %.ins %.dtx
+ latex $<
+
+
+%.tex: %.ins %.dtx
+ latex $<
+
+.PRECIOUS: $(PACKAGE).cfg $(PACKAGE).tex $(PACKAGE).sty
+
+
+clean:
+ $(RM) $(PACKAGE).tex $(PACKAGE).sty $(PACKAGE).log $(PACKAGE).aux \
+ $(PACKAGE).cfg $(PACKAGE).glo $(PACKAGE).idx $(PACKAGE).toc \
+ $(PACKAGE).ilg $(PACKAGE).ind $(PACKAGE).out $(PACKAGE).lof \
+ $(PACKAGE).lot $(PACKAGE).bbl $(PACKAGE).blg $(PACKAGE).gls \
+ $(PACKAGE).dvi $(PACKAGE).ps
+
+distclean: clean
+ $(RM) $(PACKAGE).pdf
+
+#
+# Archive for the distribution. Includes typeset documentation
+#
+archive: all clean
+ COPYFILE_DISABLE=1 tar -C .. -czvf ../pst-pdgr.tgz --exclude '*~' --exclude '*.tgz' --exclude '*.zip' --exclude CVS --exclude '.git*' -s/latex/pst-pdgr/ latex; mv ../pst-pdgr.tgz .
diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/NEWS b/graphics/pstricks/contrib/pedigree/pst-pdgr/NEWS
new file mode 100644
index 0000000000..fbe2393576
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/NEWS
@@ -0,0 +1,14 @@
+pst-pdgr NEWS: History of user interface changes
+
+Changes in v0.4, 2017/11/20
+
+* Compatible with new pstricks
+
+Changes in v0.3, 2007/06/25
+
+* armB no longer sets the length of the arm for \pstDescent and
+ \pstTwins. Instead the new option descarmA is instroduced.
+
+
+
+This file is in public domain \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/README b/graphics/pstricks/contrib/pedigree/pst-pdgr/README
new file mode 100644
index 0000000000..a4a75d4b38
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/README
@@ -0,0 +1,26 @@
+ Creating Medical Pedigrees with PSTricks and LaTeX
+ Boris Veytsman & Leila Akhmadeeva
+ Version 0.4, November 2017
+
+This package is a set of macros based on PSTricks to draw medical
+pedigrees according to the recommendations for standardized human
+pedigree nomenclature. The drawing commands place the symbols on a
+pspicture canvas. An interface for making trees is also provided.
+The package can be used both with LaTeX and PlainTeX. A separate
+Perl program for generating TeX files from spreadsheets is
+provided elsewhere on CTAN.
+
+To extract the files, run pst-pdgr.ins through latex. Then move the
+files pst-pdgr.sty & pst-pdgr.cfg to the place where LaTeX files are
+kept in your system, e. g. /usr/share/texmf/tex/latex/pst-pdgr/, and
+the file pst-pdgr.tex to the place where generic TeX files are kept in
+your system, e.g. /usr/share/texmf/tex/generic/pstricks/pst-pdgr/.
+
+The documentation is in the file pst-pdgr.pdf. You may use the
+provided Makefile to re-typeset it.
+
+Copyright 2006--2017 Boris Veytsman <borisv@lk.net>, Leila Akhmadeev
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3 of this license
+or (at your option) any later version.
diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.bib b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.bib
new file mode 100644
index 0000000000..1e888c9721
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.bib
@@ -0,0 +1,50 @@
+,-------------------.
+| BIBTEX ENTRIES |
+`-------------------'
+
+@book{Harper01:MDBook,
+ address = {Philadelphia},
+ author = {Peter Harper},
+ edition = {Third},
+ publisher = {W. B. Saunders},
+ title = {Myotonic Dystrophy},
+ year = {2001},
+}
+
+@article{PedigreeNomenclature95,
+ author = {Robin L. Bennett and Kathryn A. Steinhaus and
+ Stefanie B. Uhrich and Corrine K. O'Sullivan and
+ Robert G. Resta and Debra Lochner-Doyle and
+ Dorene S. Markei and Victoria Vincent and
+ Jan Hamanishi},
+ journal = {Am. J. Hum. Genet.},
+ number = {3},
+ pages = {745--752},
+ title = {Recommendations for Standardized Human Pedigree
+ Nomenclature},
+ volume = {56},
+ year = {1995},
+}
+
+
+@manual{PSTricks93,
+ author = {Van Zandt, Timothy},
+ editor = {Denis Girou},
+ month = {July},
+ note = {\url{http://ctan.tug.org/tex-archive/graphics/pstricks/base/doc}},
+ title = {PSTricks: PostScript Macros for Generic \TeX.
+ Usesr's Guide},
+ year = {2003},
+}
+
+@manual{pedigree-perl,
+ author = {Boris Veytsman and Leila Akhmadeeva},
+ month = {July},
+ note = {\url{http://ctan.tug.org/tex-archive/graphics/pstricks/contrib/pedigree/pedigree-perl}},
+ title = {A Program For Automatic Pedigree Construction With pst-pdgr.
+ User Manual and Algorithm Description},
+ year = {2007},
+
+}
+
+This file is in public domain \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.dtx b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.dtx
new file mode 100644
index 0000000000..cd2468c19c
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.dtx
@@ -0,0 +1,2193 @@
+% \iffalse
+%<*gobble>
+% $Id: pst-pdgr.dtx,v 2.9 2017/11/20 21:27:26 boris Exp $
+%
+% Copyright 2006, 2007, Boris Veytsman <borisv@lk.net>, Leila Akhmadeeva
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3 of this license or (at your option) any
+% later version.
+% The latest version of the license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2003/06/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Boris Veytsman
+%
+% This work consists of the file pst-pdgr.dtx and the
+% derived files pst-pdgr.tex, pst-pdgr.sty, pst-pdgr.pdf.
+%
+% \fi
+% \CheckSum{0}
+%
+% \changes{v0.1}{2006/04/18}{The interface is mostly done}
+% \changes{v0.2}{2006/04/19}{Added new examples}
+% \changes{v0.3}{2007/07/20}{Documentation update}
+%
+%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+%\iffalse
+% \begin{macrocode}
+\documentclass{ltxdoc}
+\usepackage{array}
+\usepackage{url}
+\usepackage{graphicx}
+\usepackage{pst-pdgr}
+\usepackage{pstricks-add}
+% Taken from xkeyval.dtx
+\makeatletter
+\def\DescribeOption#1{\leavevmode\@bsphack
+ \marginpar{\raggedleft\PrintDescribeOption{#1}}%
+ \SpecialOptionIndex{#1}\@esphack\ignorespaces}
+\def\PrintDescribeOption#1{\strut\emph{option}\\\MacroFont #1\ }
+\def\SpecialOptionIndex#1{\@bsphack
+ \index{#1\actualchar{\protect\ttfamily#1}
+ (option)\encapchar usage}%
+ \index{options:\levelchar#1\actualchar{\protect\ttfamily#1}\encapchar
+ usage}\@esphack}
+\def\DescribeOptions#1{\leavevmode\@bsphack
+ \marginpar{\raggedleft\strut\emph{options}%
+ \@for\@tempa:=#1\do{%
+ \\\strut\MacroFont\@tempa\SpecialOptionIndex\@tempa
+ }}\@esphack\ignorespaces}
+\makeatother
+\PageIndex
+\CodelineIndex
+\RecordChanges
+\EnableCrossrefs
+\begin{document}
+ \DocInput{pst-pdgr.dtx}
+\end{document}
+% \end{macrocode}
+%</gobble>
+% \fi
+% \MakeShortVerb{|}
+%
+%\GetFileInfo{pst-pdgr.sty}
+%\title{Creating Medical Pedigrees with PSTricks and \LaTeX.
+% \thanks{\copyright Boris Veytsman, Leila Akhmadeeva 2006, 2007}}
+%\author{Boris Veytsman, \path{borisv@lk.net} \and Leila Akhmadeeva}
+%\date{\filedate, \fileversion}
+%\maketitle
+%\begin{abstract}
+% A set of macros based on |PSTricks| to draw medical pedigrees
+% according to the recommendations for standardized human pedigree
+% nomenclature. The drawing commands place the symbols on a
+% |pspicture| canvas. An interface for making trees is also
+% provided. The package can be used both with \LaTeX{} and
+% \PlainTeX. A separate |Perl| program for generating \TeX{} files
+% from spreadsheets is provided elsewhere on |CTAN|.
+%\end{abstract}
+%
+% \begin{center}
+% \begin{pspicture}(0,1)(7,7)
+% \rput(3,4){%
+% \pstree{\TpstPerson[female, obligatory, belowtext=Ann]{Ann}}{%
+% \def\psedge{\pstDescent}\psset{descarmA=1}
+% \pstree{\TpstPerson[male, affected, belowtext=John]{John}}{%
+% \TpstPerson[female, belowtext=Sue]{Sue}
+% \TpstPerson[male, belowtext=Paul]{Paul}
+% \TpstAbortion[affected, belowtext=male]{A1}
+% \pstree[thislevelsep=1.2]{\TpstPerson[male,
+% belowtext=Peter, affected, proband]{Peter}}{%
+% \def\psedge{\ncline}
+% \TpstChildless[infertile]{C1}
+% }
+% }
+% \pstree{\TpstPerson[female, belowtext=Mary]{Mary}}{
+% \TpstPerson[female, belowtext=Joan]{Joan}
+% }
+% }
+% }
+% \pstRelationship[consanguinic]{Peter}{Joan}
+% \end{pspicture}
+% \end{center}
+%
+% \clearpage
+%
+%\tableofcontents
+%
+% \clearpage
+%
+%\listoffigures
+%\listoftables
+% \clearpage
+%
+%\section{User Guide}
+%\label{sec:user_guide}
+%
+%
+%\subsection{Introduction}
+%\label{sec:intro}
+%
+% Medical pedigree is a very important tool for clinicians, genetic
+% researchers and educators. As stated
+% in~\cite{PedigreeNomenclature95}, ``The construction of an accurate
+% family pedigree is a fundamental component of a clinical genetic
+% evaluation and of human genetic research.'' Unfortunately, up to
+% now most geneticians make the pedigrees manually. There are several
+% programs for doing so (see a list at
+% \url{http://www.kumc.edu/gec/prof/genecomp.html#pedigree}), but they
+% are rather expensive, lack multilanguage support and the quality of
+% typesetting is somewhat lacking. This package tries to offer a
+% \LaTeX-based solution for this problem. It could be used with a
+% companion \path{Perl} program \path{pedigree}~\cite{pedigree-perl},
+% which converts databases of patients into a \LaTeX{} file.
+%
+% Note that there are ways to draw genealogical trees with
+% |PSTricks|~\cite{PSTricks93}; see the beautiful ones at
+% \url{http://www.tug.org/PSTricks/main.cgi?file=Examples/Genealogy/genealogy}.
+% Unfortunately, medical pedigrees are often not \emph{trees}.
+% Therefore we do not use tree approach throughout, but provide it as
+% an alternative. Our general approach is based on the use of
+% nodes~\cite[Part~VII]{PSTricks93}. Each person or entity is a node,
+% and the lines are in fact |\ncline|s. This provides a flexibility
+% to draw complex pedigrees.
+%
+% Each node in the system \emph{must} have a name. To prevent
+% confusion with names of individuals, we call such name an \emph{id}.
+% As usual in |PSTricks|, it is a sequence of letters and numbers
+% starting with a letter. This rule is very important; a name like 1
+% or 1-1 can lead to mysterious PostScript errors.
+%
+% Our symbols follows the standard~\cite{PedigreeNomenclature95} with
+% the exception that we do not implement showing several conditions
+% on the same chart.
+%
+% To use the package, add the line
+% \begin{verbatim}
+% \usepackage{pst-pdgr}
+% \end{verbatim}
+% to a \LaTeX{} document or
+% \begin{verbatim}
+% \input pst-pdgr.tex
+% \end{verbatim}
+% to a \PlainTeX{} one. Note that since this is a |PSTricks|
+% package, you need to use \path{tex-dvips} path to compile your
+% document. If you need a PDF document, you can use \path{ps2pdf} or
+% packages like \path{pst-pdf}, \path{ps4pdf}, \path{pstricks}.
+%
+% If you are using the package in a \LaTeX{} document, you have an
+% added benefit of a local configuration file |pst-pdgr.cfg|. Such
+% file, if exists, will be read. It can be used to override package
+% settings (use |\AtEndOfPackage| for this).
+%
+%
+%
+%\subsection{Global Settings}
+%\label{sec:globals}
+%
+% By default the size of each node is |0.5 unit|. You can change
+% the size by setting the value of |unit| (1\,cm by default)
+% with |\psset|
+%
+%\DescribeMacro{\affectedstyle}
+%\DescribeMacro{\affectedbgcolor}
+% By default the affected individual is drawn as a black node. This
+% could be changed by setting |\affectedstyle| and
+% |\affectedbgcolor|, see Figure~\ref{fig:affectedstyle}.
+%\DescribeMacro{\affectedfgcolor}
+% Sometimes we need to write something inside a node representing an
+% affected individual. An example in~\cite{PedigreeNomenclature95}
+% changes in this situation the style from filled to hatched, which
+% looks inconsistent. We rather change the color of the foreground,
+% as shown on Fig.~\ref{fig:affectedfgcolor}.
+%
+% \begin{figure}
+% \centering
+% \begin{minipage}[t]{0.4\linewidth}
+% \centering
+% \begin{pspicture}(2,2)
+% \def\affectedbgcolor{blue}
+% \expandafter\pscircle\expandafter[\affectedstyle](1,1){1}
+% \end{pspicture}\leavevmode\\
+% \small
+% |\def\affectedbgcolor{%|\\
+% |blue}|
+% \end{minipage}
+% \begin{minipage}[t]{0.4\linewidth}
+% \centering
+% \begin{pspicture}(2,2)
+% \def\affectedstyle{fillstyle=hlines, hatchcolor=\affectedbgcolor}
+% \expandafter\pscircle\expandafter[\affectedstyle](1,1){1}
+% \end{pspicture}\leavevmode\\
+% \small
+% |\def\affectedstyle{fillstyle=%|\\
+% |hlines,hatchcolor=\affectedbgcolor}|
+% \end{minipage}
+% \caption{Setting Style of Affected Individuals}
+% \label{fig:affectedstyle}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{minipage}[t]{0.4\linewidth}
+% \centering
+% \begin{pspicture}(2,2)
+% \expandafter\pscircle\expandafter[\affectedstyle](1,1){1}
+% \rput(1,1){\expandafter\textcolor\expandafter{%
+% \affectedfgcolor}{\Huge 2}}
+% \end{pspicture}\leavevmode\\
+% \small
+% default
+% \end{minipage}
+% \begin{minipage}[t]{0.4\linewidth}
+% \centering
+% \begin{pspicture}(2,2)
+% \def\affectedfgcolor{green}
+% \expandafter\pscircle\expandafter[\affectedstyle](1,1){1}
+% \rput(1,1){\expandafter\textcolor\expandafter{%
+% \affectedfgcolor}{\Huge 2}}
+% \end{pspicture}
+% \small
+% |\def\affectedfgcolor{green}|
+% \end{minipage}
+% \caption{Use of Foreground Colors for Affected Individuals }
+% \label{fig:affectedfgcolor}
+% \end{figure}
+%
+%
+%\subsection{Node Drawing Commands}
+%\label{sec:node_commands}
+%
+%
+% The node drawing commands are based on the |\pnode| commands from
+% |PSTricks|~\cite[Part~VII]{PSTricks93}. It is the preferred command
+% for drawing, for example, a ``marriage node'' (see the examples
+% below). It is useful to remember this when drawing complex
+% pedigrees.
+%
+%
+%\subsubsection{One Person}
+%\label{sec:person}
+%
+% \DescribeMacro{\pstPerson} The main command in the package is
+% |\pstPerson|. It draws one person, which is a |PSTricks| node. It
+% has the following structure: |\pstPerson|\oarg{options}\marg{id}.
+% The parameter \meta{id} is the name of the node. It can be used to
+% make connections to the node (see below).
+%
+% There are many options to this command. As other |PSTricks|
+% options, the also can be set globally through |\psset| command.
+%
+%
+% \DescribeOptions{sex,condition,deceased,proband,adopted,evaluated}
+% The first group of options describes the state of the person: sex,
+% condition with respect to the decease, whether the person is
+% deceased, is a proband, was adopted and was evaluated. These
+% options are listed in Table~\ref{tab:person_state_opts}. Some
+% options of this group can take only two values: |true| or |false|.
+% For simplicity the clause |=true| can be omitted, so the clauses
+% |adopted=true| and |adopted| are equivalent. Two options: |sex| and
+% |condition| can take several values each (geneticians consider three
+% possibilities for sex: |male|, |female| and |unknown|). Again for
+% simplicity the clauses |sex=| and |condition=| can be omitted, so
+% the invocations |sex=male| and |male| are equivalent, as well as
+% |condition=asymptomatic| and |asymptomatic|.
+%
+% \DescribeOptions{insidetext,abovetext,belowtext,lefttext,righttext}
+% The second group of options (Table~\ref{tab:person_text_opts}) is
+% used to putting text comments inside the symbol, above it, below it
+% or to the right or left to it. The text will be typeset in a
+% |PSTricks| LR-box~\cite{PSTricks93}; additional control over the
+% text position can be achieved by using |\parbox| or \PlainTeX{}
+% boxes.
+%
+% \DescribeOptions{abovetextrp,belowtextrp,lefttextrp,righttextrp}
+% The third group of options (Table~\ref{tab:person_text_rp_opts}) is
+% used to set the text position with respect to the node. They set
+% the reference point of the text. They correspond to the usual
+% notation: |r| being right, |l| being left, |t| being top, |b| being
+% bottom and |B| being baseline. The setting |={}| makes the
+% reference point to be the center of the box. Note that to prevent
+% the text above and below the symbol to clash with the descent lines,
+% the spaces of |2\pslinewidth| are added to the right and to the left
+% of the symbol.
+%
+% Examples of usage of this command are shown in
+% Table~\ref{tab:pstPerson}.
+%
+%
+% \begin{table}
+% \centering
+% \begin{tabular}{l>{\raggedright\obeylines
+% }p{0.3\linewidth}lp{0.3\linewidth}}
+% \hline
+% Option & Values & Default & Description \\
+% \hline
+% |sex| & |male|, |female|, |unknown| & |unknown| & Sex of the
+% person\\
+% |condition| & |normal|, |obligatory|, |asymptomatic|, |affected|
+% & |normal| & The condition of the person\\
+% |deceased| & |true|, |false| & |false| & Whether the person is
+% deceased \\
+% |proband| & |true|, |false| & |false| & Whether the person is a
+% proband\\
+% |adopted| & |true|, |false| & |false| & Whether the individual
+% is adopted \\
+% |evaluated| & |true|, |false| & |false| & Whether a documented
+% evaluation took place\\
+% \hline
+% \end{tabular}
+% \caption{Options Showing State of a Person}
+% \label{tab:person_state_opts}
+% \end{table}
+%
+%
+%
+% \begin{table}
+% \centering
+% \begin{tabular}{l>{\raggedright\obeylines
+% }llp{0.5\linewidth}}
+% \hline
+% Option & Values & Default & Description \\
+% \hline
+% |insidetext| & String & None & A text to be placed inside the
+% symbol (number of individuals, pregnancy, etc.)\\
+% |abovetext| & String & None & A text to be placed above the
+% symbol (name, number, etc.)\\
+% |belowtext| & String & None & A text to be placed below the
+% symbol (name, number, etc.)\\
+% |lefttext| & String & None & A text to be placed to the left of the
+% symbol (name, number, etc.)\\
+% |righttext| & String & None & A text to be placed to the right of the
+% symbol (name, number, etc.)\\
+% \hline
+% \end{tabular}
+% \caption{Options for Making Textual Comments}
+% \label{tab:person_text_opts}
+% \end{table}
+%
+% \begin{table}
+% \centering
+% \begin{tabular}{l>{\raggedright\obeylines
+% }p{0.25\linewidth}lp{0.35\linewidth}}
+% \hline
+% Option & Values & Default & Description \\
+% \hline
+% |abovetextrp| & Combination of |r| or |l| and |t|, |b| or |B| &
+% |lB| & The reference point for the text above the symbol\\
+% |belowtextrp| & Combination of |r| or |l| and |t|, |b| or |B| &
+% |lt| & The reference point for the text below the symbol\\
+% |lefttextrp| & Combination of |r| or |l| and |t|, |b| or |B| &
+% |r| & The reference point for the text to the left the symbol\\
+% |righttextrp| & Combination of |r| or |l| and |t|, |b| or |B| &
+% |l| & The reference point for the text to the right the symbol\\
+% \hline
+% \end{tabular}
+% \caption{Options for Setting Text Reference Point}
+% \label{tab:person_text_rp_opts}
+% \end{table}
+%
+%
+% \begin{table}
+% \centering
+% \def\arraystretch{1.5}
+% \begin{tabular}{>{\tt\bslash pstPerson[}p{0.6\textwidth}<{]\{P\}}c}
+% \hline
+% \multicolumn{1}{l}{Command} & Result\rule{0.5cm}{0cm}\\
+% \hline
+% condition=asymptomatic &
+% \pstPerson[condition=asymptomatic]{A} \\
+% condition=affected, sex=male, evaluated &
+% \pstPerson[condition=affected,sex=male, evaluated]{A} \\
+% obligatory, female &
+% \pstPerson[obligatory, female]{A} \\
+% asymptomatic, male, proband &
+% \pstPerson[asymptomatic, male, proband]{A} \\
+% condition=obligatory, sex=male, deceased &
+% \pstPerson[condition=obligatory, sex=male, deceased]{A} \\
+% sex=female, adopted, condition=affected, abovetext=Jane &
+% \pstPerson[sex=female, adopted, condition=affected,
+% abovetext=Jane]{A} \\
+% sex=male, condition=affected, belowtext=20 yr, deceased &
+% \pstPerson[sex=male, condition=affected, deceased,
+% belowtext=20 yr]{A} \\[5ex]
+% unknown, affected, righttext=\bslash
+% parbox\{1cm\}\{\bslash footnotesize A \bslash\bslash 1 w\} &
+% \pstPerson[unknown, affected,
+% righttext=\parbox{1cm}{\footnotesize A\\1 w}]{A} \\
+% sex=male, insidetex=5 &
+% \pstPerson[sex=male, insidetext=5]{A}\\
+% sex=female, condition=affected, insidetext=P &
+% \pstPerson[sex=female, condition=affected, insidetext=P]{A}\\
+% sex=female, affected, belowtext=\bslash
+% parbox\{1cm\}\{\bslash centering SB\bslash\bslash 2wks\}, deceased &
+% \pstPerson[sex=female, affected, deceased,
+% belowtext=\parbox{1cm}{\centering SB\\ 2wks}]{A} \\[7ex]
+% \hline
+% \end{tabular}
+% \caption{Examples of Persons}
+% \label{tab:pstPerson}
+% \end{table}
+%
+%
+%\subsubsection{Pregnancy Not Carried To Term}
+%\label{sec:abortion}
+%
+% \DescribeMacro{\pstAbortion}
+% The command |\pstAbortion| is used to draw a pregnancy not carried
+% to term: spontaneous abortions or terminated pregnancies. The
+% format of it the same as for the command |\pstPerson| (see
+% Section~\ref{sec:person}): |\pstAbortion|\oarg{options}\marg{id}.
+% However, many of options listed in Table~\ref{tab:person_state_opts} are
+% silently ignored. The only options meaningful for these nodes are
+% |sex| and |condition| (only |normal| and |affected| values are
+% possible). All options listed in Table~\ref{tab:person_text_opts}
+% and \ref{tab:person_text_rp_opts} are valid and have the same
+% meaning as in Section~\ref{sec:person}.
+%
+% \DescribeOption{sab}
+% The command has also an option |sab| with the values |true| or
+% |false|. If it is |true|, the pregnancy is a spontaneous abortion.
+% Otherwise it is terminated. Examples of usage of this command are
+% shown in Table~\ref{tab:abortions}.
+%
+%
+% \begin{table}
+% \centering
+% \def\arraystretch{2}
+% \begin{tabular}{>{\tt\bslash pstAbortion[}p{0.6\textwidth}<{]\{A\}}c}
+% \hline
+% \multicolumn{1}{l}{Command} & Symbol\\
+% \hline
+% belowtext=male & \rule{0cm}{1cm} \pstAbortion[belowtext=male]{A}\\
+% sab, righttext=1w & \pstAbortion[sab, righttext=1w]{A}\\
+% affected & \pstAbortion[affected]{A}\\
+% \hline
+% \end{tabular}
+% \caption{Examples of Abortion Symbols}
+% \label{tab:abortions}
+% \end{table}
+%
+%\subsubsection{Childlessness and Infertility}
+%\label{sec:childness}
+%
+% The symbols for childlessness and infertility are listed under
+% ``line definitions'' in~\cite{PedigreeNomenclature95}. However, to
+% make the placing the symbols on the chart more flexible, we assign
+% nodes to them.
+%
+% \DescribeMacro{\pstChildless}
+% The command for drawing these symbols
+% has the same structure as the other node drawing commands:
+% |\pstChildless}|\oarg{options}\marg{id}.
+% While all options listed in Table~\ref{tab:pstPerson} are valid, the
+% only meaningful one is |belowtext|. Note that the option
+% |belowtextrp| is silently ignored: the text is always centered
+% below the infertility symbol.
+%
+% \DescribeOption{infertile}
+% There is one additional option
+% |infertile|, which can have values |true| of |false|. If it is
+% |false|, the person (or relationship) is childless by choice (or by
+% an unknown reason). The clause |=true| can be omitted.
+%
+%
+% \begin{table}
+% \centering
+% \def\arraystretch{2}
+% \begin{tabular}{>{\tt\bslash pstChildless[}p{0.6\textwidth}<{]\{C\}}c}
+% \hline
+% \multicolumn{1}{l}{Command} & Symbol\rule{0.5cm}{0cm}\\
+% \hline
+% belowtext=vasectomy &
+% \pstChildless[belowtext=vasectomy]{A}\\
+% belowtext=anospermia, infertile &
+% \pstChildless[belowtext=anospermia, infertile]{A}\\
+% \hline
+% \end{tabular}
+% \caption{Examples of Childlessness or Infertility Symbols}
+% \label{tab:childness}
+% \end{table}
+%
+%
+%
+%\subsection{Connection Drawing Commands}
+%\label{sec:lines}
+%
+% The connections in pedigrees are based on |\ncline| and friends.
+% There are, however, some additional features for pedigree
+% connections.
+%
+%
+%\subsubsection{Relationship}
+%\label{sec:relationship}
+%
+%\DescribeMacro{\pstRelationship}
+% Relationships are marriages or other unions. The main command for
+% drawing relationships is
+% |\pstRelationship|\oarg{options}\marg{nodeA}\marg{nodeB}. It draws
+% a relationship line between \marg{nodeA} and \marg{nodeB}. Normal
+% |PSTricks| options like |linestyle=dashed| can be used with the
+% expected effect.
+%
+% \DescribeOptions{broken,consanguinic,descentnode,brokenpos,descentnodepos,rellinecmd}
+% There are also several options specific for this command, listed in
+% Table~\ref{tab:relationship_opts}. The options |broken| and
+% |consanguinic| are self-explanatory. The option |descentnode| is
+% used, if we want the descent lines to start at a node on the
+% relationship line. The name of this descent node must satisfy the
+% usual criteria for the node (see Section~\ref{sec:intro}). The
+% options |brokenpos| and |descentnodepos| determine, where on the
+% relationship line the corresponding objects are placed. The option
+% |rellinecmd| allows to change the default straight line for the
+% relationship to something else, like |ncbar|, |ncangle|, etc.
+% Examples of this command use are shown in
+% Table~\ref{tab:pstRelationship}
+%
+%
+%
+% \begin{table}
+% \centering
+% \begin{tabular}{l>{\raggedright\obeylines
+% }p{0.2\linewidth}lp{0.3\linewidth}}
+% \hline
+% Option & Values & Default & Description \\
+% \hline
+% |broken| & |true|, |false| & |false| & Whether the
+% relationship no longer exists\\
+% |consanguinic| & |true|, |false| & |false| & Whether the
+% relationship is consanguinic\\
+% |descentnode| & Node name & None & A node that will be used
+% to draw descent lines for the relationship \\
+% |brokenpos| & A number between 0 and 1 & 0.3 & Where to put the
+% symbol for broken relationship on the line (as a fraction of the
+% line length)\\
+% |descentnodepos| & A number & 0.5 & Where
+% to put the the descent node on the relationship line\\
+% |rellinecmd| & Name & |ncline| & Name of the line drawing
+% command (without \textbackslash)\\
+% \hline
+% \end{tabular}
+% \caption{Options for Relationship Lines}
+% \label{tab:relationship_opts}
+% \end{table}
+%
+% \begin{table}
+% \centering
+% \def\arraystretch{1.5}
+% \begin{tabular}{>{\tt\raggedright\obeylines }b{0.6\textwidth}c}
+% \hline
+% \multicolumn{1}{l}{Command} & Result\\
+% \hline
+% \bslash rput(0.5,0.5)\{\bslash pstPerson[male]\{A\}\}
+% \bslash rput(2.5,0.5)\{\bslash pstPerson[female]\{B\}\}
+% \bslash pstRelationship[broken]\{A\}\{B\}
+% &
+% \begin{pspicture}[shift=-1](3,1)
+% \rput(0.5,0.5){\pstPerson[male]{A}}
+% \rput(2.5,0.5){\pstPerson[female]{B}}
+% \pstRelationship[broken]{A}{B}
+% \end{pspicture}\\
+% \bslash rput(0.5,0.5)\{\bslash pstPerson[male]\{A\}\}
+% \bslash rput(2.5,0.5)\{\bslash pstPerson[female]\{B\}\}
+% \bslash pstRelationship[consanguinic]\{A\}\{B\}
+% &
+% \begin{pspicture}[shift=-1](3,1)
+% \rput(0.5,0.5){\pstPerson[male]{A}}
+% \rput(2.5,0.5){\pstPerson[female]{B}}
+% \pstRelationship[consanguinic]{A}{B}
+% \end{pspicture}\\
+% \bslash rput(0.5,1.5)\{\bslash pstPerson[male]\{A\}\}
+% \bslash rput(2.5,1.5)\{\bslash pstPerson[female]\{B\}\}
+% \bslash rput(1.5,0.5)\{\bslash pstPerson[female]\{C\}\}
+% \bslash pstRelationship[descentnode=AB]\{A\}\{B\}
+% \bslash ncline\{AB\}\{C\}
+% &
+% \begin{pspicture}[shift=-1](3,2)
+% \rput(0.5,1.5){\pstPerson[male]{A}}
+% \rput(2.5,1.5){\pstPerson[female]{B}}
+% \rput(1.5,0.5){\pstPerson[female]{C}}
+% \pstRelationship[descentnode=AB]{A}{B}
+% \ncline{AB}{C}
+% \end{pspicture}\\
+% \bslash rput(0.5,1.5)\{\bslash
+% pstPerson[male, belowtext=1-1]\{A\}\}
+% \bslash rput(2.5,1.5)\{\bslash
+% pstPerson[affected, female, belowtext=1-2]\{B\}\}
+% \bslash rput(1.5,0.6)\{\bslash pstPerson[male,
+% belowtext=2-1]\{C\}\}
+% \bslash pstRelationship[descentnode=AB, rellinecmd=ncangle,
+% angleA=90, angleB=90, descentnodepos=1.5,
+% broken, brokenpos=1.2]\{A\}\{B\}
+% \bslash ncline\{AB\}\{C\}
+% &
+% \begin{pspicture}[shift=-1](3,3)
+% \rput(0.5,1.5){\pstPerson[male,belowtext=1-1]{A}}
+% \rput(2.5,1.5){\pstPerson[affected,female, belowtext=1-2]{B}}
+% \rput(1.5,0.6){\pstPerson[male, belowtext=2-1]{C}}
+% \pstRelationship[descentnode=AB, rellinecmd=ncangle,
+% angleA=90, angleB=90, descentnodepos=1.5,
+% broken, brokenpos=1.2]{A}{B}
+% \ncline{AB}{C}
+% \end{pspicture}\\
+% \hline
+% \end{tabular}
+% \caption{Examples of Relationships}
+% \label{tab:pstRelationship}
+% \end{table}
+%
+%
+%\subsubsection{Descent}
+%\label{sec:pstDescent}
+%
+% \changes{v0.3}{2007/06/24}{Added option descarmA}
+% The paper~\cite{PedigreeNomenclature95} distinguishes between
+% descent line and sibs line. We, however, will call all segments of
+% the line, joining a parent (or a descent node) and a child, the
+% descent line. \DescribeMacro{\pstDescent} The main command for
+% showing parent-child relations is
+% |\pstDescent|\oarg{options}\marg{Parent}\marg{Child}.
+% \DescribeOption{descarmA}
+% \marginpar{New in v0.3}
+% The descent line consists of three segments: the vertical arm from the
+% parent node, the vertical arm from the child node and the
+% horizontal segment connecting these arms. When there are several
+% sibs, the horizontal segments form the sibs line. The length
+% |descarmA| is the length of the first segment. By default it is 0.8
+% (in |PSTricks| units), but it can be changed by the usual |\psset|
+% command or in the option list of |\pstDescent|. Note that it is
+% calculated from the center of the node rather than from the node
+% edge.
+%
+% Examples of |\pstDescent| are shown in Table~\ref{tab:pstDescent}.
+% Note the |PSTricks| option |linestyle=dashed| used to show social
+% parentage in the first example.
+%
+%
+%
+% \begin{table}
+% \centering
+% \def\arraystretch{1.5}
+% \begin{tabular}{>{\tt\raggedright\obeylines }b{0.6\textwidth}c}
+% \hline
+% \multicolumn{1}{l}{Command} & Result\\
+% \hline
+% \bslash rput(1.5,2)\{\bslash pstPerson[female]\{A\}\}
+% \bslash rput(0.5,0.5)\{\bslash pstPerson[female, adopted]\{B\}\}
+% \bslash rput(1.5,0.5)\{\bslash pstPerson[male]\{C\}\}
+% \bslash rput(2.5,0.5)\{\bslash pstAbortion[female]\{D\}\}
+% \bslash pstDescent[linestyle=dashed]\{A\}\{B\}
+% \bslash pstDescent\{A\}\{C\}
+% \bslash pstDescent\{A\}\{D\}
+% &
+% \begin{pspicture}[shift=-1](3,2.5)
+% \rput(1.5,2){\pstPerson[female]{A}}
+% \rput(0.5,0.5){\pstPerson[female, adopted]{B}}
+% \rput(1.5,0.5){\pstPerson[male]{C}}
+% \rput(2.5,0.5){\pstAbortion[female]{D}}
+% \pstDescent[linestyle=dashed]{A}{B}
+% \pstDescent{A}{C}
+% \pstDescent{A}{D}
+% \end{pspicture}\\
+% \bslash psset\{descarmA=1\}
+% \bslash rput(0.5,2)\{\bslash pstPerson[male, belowtext=Fred]\{A\}\}
+% \bslash rput(2.5,2)\{\bslash pstPerson[female, obligatory, belowtext=Ginger]\{B\}\}
+% \bslash pstRelationship[descentnode=AB]\{A\}\{B\}
+% \bslash rput(0.5,0.5)\{\bslash pstPerson[male,asymptomatic, belowtext=John]\{C1\}\}
+% \bslash rput(1.5,0.5)\{\bslash pstPerson[female, belowtext=Mary]\{C2\}\}
+% \bslash rput(2.5,0.5)\{\bslash pstAbortion[sab, affected, belowtext=male]\{C3\}\}
+% \bslash pstDescent\{AB\}\{C1\}
+% \bslash pstDescent\{AB\}\{C2\}
+% \bslash pstDescent\{AB\}\{C3\}
+% &
+% \begin{pspicture}[shift=-1](0,-0.2)(3.5,2.5)
+% \psset{descarmA=1}
+% \rput(0.5,2){\pstPerson[male, belowtext=Fred]{A}}
+% \rput(2.5,2){\pstPerson[female, obligatory, belowtext=Ginger]{B}}
+% \pstRelationship[descentnode=AB]{A}{B}
+% \rput(0.5,0.5){\pstPerson[male,asymptomatic, belowtext=John]{C1}}
+% \rput(1.5,0.5){\pstPerson[female, belowtext=Mary]{C2}}
+% \rput(2.5,0.5){\pstAbortion[sab, affected, belowtext=male]{C3}}
+% \pstDescent{AB}{C1}
+% \pstDescent{AB}{C2}
+% \pstDescent{AB}{C3}
+% \end{pspicture}\\
+% \bslash rput(0.5,1.5)\{\bslash pstPerson[male]\{A\}\}
+% \bslash rput(2.5,1.5)\{\bslash pstPerson[female]\{B\}\}
+% \bslash pstRelationship[descentnode=AB]\{A\}\{B\}
+% \bslash rput(1.5,0.5)\{\bslash pstChildless[infertile, belowtext=anospermia]\{C\}\}
+% \bslash pstDescent\{AB\}\{C\}
+% &
+% \begin{pspicture}[shift=-1](0,-0.2)(3,2)
+% \rput(0.5,1.5){\pstPerson[male]{A}}
+% \rput(2.5,1.5){\pstPerson[female]{B}}
+% \pstRelationship[descentnode=AB]{A}{B}
+% \rput(1.5,0.5){\pstChildless[belowtext=anospermia, infertile]{C}}
+% \pstDescent{AB}{C}
+% \end{pspicture}\\
+% \hline
+% \end{tabular}
+% \caption{Examples of Descent Lines}
+% \label{tab:pstDescent}
+% \end{table}
+%
+%
+%\subsubsection{Twins}
+%\label{sec:pstTwins}
+%
+%
+%
+% \DescribeMacro{\pstTwins} A special care is needed when we talk
+% about twins. First, the user must define a \emph{twin node}: the
+% node which is used as a nexus for twin lines. Then the following
+% command draws all the necessary
+% lines: \\
+% |\pstTwins|\oarg{options}\marg{Parent}\marg{TwinNode}\marg{LeftTwin}\marg{RightTwin}.
+%
+% \DescribeOptions{monozygotic,qzygotic,mzlinepos,addtwin}
+% The options for this command are listed in
+% Table~\ref{tab:twin_opts}. The option |monozygotic| allows to show
+% that the twins are monozygotic. The actual position of the
+% horizontal line is determined by the option |mzlinepos|. If it is
+% unknown, whether the twins are monozygotic or not, |qzygotic|
+% options draws a question mark, as recommended
+% by~\cite{PedigreeNomenclature95}. Note that |mzlinepos| in this
+% situation helps to position the question mark properly. The option
+% |addtwin| allows to draw pedigrees with more than two twins. It can
+% be repeated several times if necessary. Examples of the usage of
+% this command are shown in Table~\ref{tab:pstTwins}.
+%
+% \DescribeOption{descarmA}
+% The first part of the |pstTwins| line has the same shape as
+% |\pstDescent|. The option |descarmA| has the same meaning, as for
+% |\pstDescent|. Therefore if there are both twins and non-twins, as
+% in the first example in Table~\ref{tab:pstTwins}, the sibs segment
+% is drawn correctly.
+%
+% \begin{table}
+% \centering
+% \begin{tabular}{l>{\raggedright\obeylines
+% }p{0.2\linewidth}lp{0.3\linewidth}}
+% \hline
+% Option & Values & Default & Description \\
+% \hline
+% |monozygotic| & |true|, |false| & |false| & Whether the twins
+% are monozygotic\\
+% |qzygotic| & |true|, |false| & |false| & Whether the
+% monozygoticity of twins is questionable\\
+% |addtwin| & Twin node & Node & Additional twin node id if
+% there are more than two twins (this
+% option may be repeated)\\
+% |mzlinepos| & A number & 0.5 & Where to put the horizontal
+% line for monozygotic twins (as a factor of the total line length)\\
+% \hline
+% \end{tabular}
+% \caption{Options for Twins Lines}
+% \label{tab:twin_opts}
+% \end{table}
+%
+%
+% \begin{table}
+% \centering
+% \def\arraystretch{1.5}
+% \begin{tabular}{>{\tt\raggedright\obeylines }b{0.6\textwidth}c}
+% \hline
+% \multicolumn{1}{l}{Command} & Result\\
+% \hline
+% \bslash rput(1.5,2)\{\bslash pstPerson[female]\{A\}\}
+% \bslash rput(1,1.1)\{\bslash pnode\{Twins\}\}
+% \bslash rput(0.5,0.5)\{\bslash pstPerson[male]\{B\}\}
+% \bslash rput(1.5,0.5)\{\bslash pstPerson[male]\{C\}\}
+% \bslash rput(2.5,0.5)\{\bslash pstPerson[female]\{D\}\}
+% \bslash pstTwins[monozygotic]\{A\}\{Twins\}\{B\}\{C\}
+% \bslash pstDescent\{A\}\{D\}
+% &
+% \begin{pspicture}(3,2.5)
+% \rput(1.5,2){\pstPerson[female]{A}}
+% \rput(1,1.1){\pnode{Twins}}
+% \rput(0.5,0.5){\pstPerson[male]{B}}
+% \rput(1.5,0.5){\pstPerson[male]{C}}
+% \rput(2.5,0.5){\pstPerson[female]{D}}
+% \pstTwins[monozygotic]{A}{Twins}{B}{C}
+% \pstDescent{A}{D}
+% \end{pspicture}\\
+% \bslash rput(0.5,2)\{\bslash pstPerson[male]\{A\}\}
+% \bslash rput(2.5,2)\{\bslash pstPerson[female]\{B\}\}
+% \bslash pstRelationship[descentnode=AB]\{A\}\{B\}
+% \bslash rput(1.5,1.2)\{\bslash pnode\{Twins\}\}
+% \bslash rput(1,0.5)\{\bslash pstPerson[male]\{C1\}\}
+% \bslash rput(2,0.5)\{\bslash pstPerson[male]\{C2\}\}
+% \bslash pstTwins[qzygotic, mzlinepos=0.8]\{AB\}\{Twins\}\{C1\}\{C2\}
+% &
+% \begin{pspicture}(3,2.5)
+% \rput(0.5,2){\pstPerson[male]{A}}
+% \rput(2.5,2){\pstPerson[female]{B}}
+% \pstRelationship[descentnode=AB]{A}{B}
+% \rput(1.5,1.2){\pnode{Twins}}
+% \rput(1,0.5){\pstPerson[male]{C1}}
+% \rput(2,0.5){\pstPerson[male]{C2}}
+% \pstTwins[qzygotic, mzlinepos=0.8]{AB}{Twins}{C1}{C2}
+% \end{pspicture}\\
+% \bslash rput(1.5,2)\{\bslash pstPerson[male]\{A\}\}
+% \bslash rput(1.5,1.5)\{\bslash pnode\{Twins\}\}
+% \bslash rput(0.5,0.5)\{\bslash pstPerson[female]\{B\}\}
+% \bslash rput(1.2,0.5)\{\bslash pstPerson[female]\{C\}\}
+% \bslash rput(1.9,0.5)\{\bslash pstPerson[female]\{D\}\}
+% \bslash rput(2.6,0.5)\{\bslash pstPerson[female]\{E\}\}
+% \bslash pstTwins[descarmA=0.5,
+% addtwin=C, addtwin=D]\{A\}\{Twins\}\{B\}\{E\}
+% &
+% \begin{pspicture}(3,2.5)
+% \rput(1.5,2){\pstPerson[male]{A}}
+% \rput(1.5,1.5){\pnode{Twins}}
+% \rput(0.5,0.5){\pstPerson[female]{B}}
+% \rput(1.2,0.5){\pstPerson[female]{C}}
+% \rput(1.9,0.5){\pstPerson[female]{D}}
+% \rput(2.6,0.5){\pstPerson[female]{E}}
+% \pstTwins[descarmA=0.5, addtwin=C, addtwin=D]{A}{Twins}{B}{E}
+% \end{pspicture}\\
+% \hline
+% \end{tabular}
+% \caption{Examples of Twins Lines}
+% \label{tab:pstTwins}
+% \end{table}
+%
+%
+%
+%\subsection{Making Trees}
+%\label{sec:trees}
+%
+% As discussed above (Section~\ref{sec:intro}), the medical pedigrees
+% are not necessary trees. Even if they are, they are usually not
+% simple layered trees. Nevertheless sometimes pedigree can be
+% represented as a layered tree. For such cases we provide tree
+% drawing commands. See the discussion in~\cite{pedigree-perl} for
+% more details.
+%
+% \DescribeMacro{\TpstPerson}
+% \DescribeMacro{\TpstAbortion}
+% \DescribeMacro{\TpstChildless}
+% The macros |\TpstPerson|, |\TpstAbortion| and |\TpstChildless| have
+% the same options and arguments as their ``normal'' counterparts. You
+% probably need to use command like
+% \begin{verbatim}
+% \def\psedge{\pstDescent}
+% \psset{descarmA=1}
+% \end{verbatim}
+% in your code. An example of us of such commands is shown on
+% Figure~\ref{fig:example_tree}. Note that the resulting figure is
+% \emph{not} a tree! The corresponding code is shown on
+% Figure~\ref{fig:example_tree_code}.
+%
+% \begin{figure}
+% \centering
+% \begin{pspicture}(0,1)(7,7)
+% \rput(3,4){%
+% \pstree{\TpstPerson[female, obligatory, belowtext=Ann]{Ann}}{%
+% \def\psedge{\pstDescent}\psset{descarmA=1}
+% \pstree{\TpstPerson[male, affected, belowtext=John]{John}}{%
+% \TpstPerson[female, belowtext=Sue]{Sue}
+% \TpstPerson[male, belowtext=Paul]{Paul}
+% \TpstAbortion[affected, belowtext=male]{A1}
+% \pstree[thislevelsep=1.2]{\TpstPerson[male,
+% belowtext=Peter, affected, proband]{Peter}}{%
+% \def\psedge{\ncline}
+% \TpstChildless[infertile]{C1}
+% }
+% }
+% \pstree{\TpstPerson[female, belowtext=Mary]{Mary}}{
+% \TpstPerson[female, belowtext=Joan]{Joan}
+% }
+% }
+% }
+% \pstRelationship[consanguinic]{Peter}{Joan}
+% \end{pspicture}
+% \caption{Example of Using Tree-Making Commands}
+% \label{fig:example_tree}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{verbatim}
+% \begin{pspicture}(0,1)(7,7)
+% \rput(3,4){%
+% \pstree{\TpstPerson[female, obligatory, belowtext=Ann]{Ann}}{%
+% \def\psedge{\pstDescent}\psset{descarmA=1}
+% \pstree{\TpstPerson[male, affected, belowtext=John]{John}}{%
+% \TpstPerson[female, belowtext=Sue]{Sue}
+% \TpstPerson[male, belowtext=Paul]{Paul}
+% \TpstAbortion[affected, belowtext=male]{A1}
+% \pstree[thislevelsep=1.2]{\TpstPerson[male,
+% belowtext=Peter, affected, proband]{Peter}}{%
+% \def\psedge{\ncline}
+% \TpstChildless[infertile]{C1}
+% }
+% }
+% \pstree{\TpstPerson[female, belowtext=Mary]{Mary}}{
+% \TpstPerson[female, belowtext=Joan]{Joan}
+% }
+% }
+% }
+% \pstRelationship[consanguinic]{Peter}{Joan}
+% \end{pspicture}
+% \end{verbatim}
+% \caption{Code Producing Figure~\ref{fig:example_tree}}
+% \label{fig:example_tree_code}
+% \end{figure}
+%
+%
+%
+%\subsection{More Examples}
+%\label{sec:examples}
+%
+% A number of examples were listed above. Here we show even more
+% examples of complex pedigrees.
+%
+% On Figure~\ref{fig:example_PROMM} we show an example of a pedigree
+% from~\cite{Harper01:MDBook}. The corresponding code is listed on
+% Figure~\ref{fig:example_PROMM_code}.
+%
+% \begin{figure}
+% \centering
+% \begin{pspicture}(6,6)
+% \psset{belowtextrp=t, descarmA=1}
+% \rput(2.5,5.5){\pstPerson[male, deceased, belowtext=I:1]{I:1}}
+% \rput(3.5,5.5){\pstPerson[female, deceased, belowtext=I:2]{I:2}}
+% \pstRelationship[descentnode=I:1_2]{I:1}{I:2}
+% \rput(1,3.5){\pstPerson[female, affected, belowtext=II:1]{II:1}}
+% \pstDescent{I:1_2}{II:1}
+% \rput(2,3.5){\pstPerson[male, belowtext=II:2]{II:2}}
+% \pstRelationship[descentnode=II:1_2]{II:1}{II:2}
+% \rput(3.5,3.5){\pstPerson[male, affected, belowtext=II:3]{II:3}}
+% \pstDescent{I:1_2}{II:3}
+% \rput(4.5,3.5){\pstPerson[female, belowtext=II:4]{II:4}}
+% \pstRelationship[descentnode=II:3_4]{II:3}{II:4}
+% \rput(5.5,3.5){\pstPerson[female, affected, deceased, proband,
+% belowtext=II:5]{II:5}}
+% \pstDescent{I:1_2}{II:5}
+% \rput(0.5,1.5){\pstPerson[female, belowtext=III:1]{III:1}}
+% \pstDescent{II:1_2}{III:1}
+% \rput(1.5,1.5){\pstPerson[female, belowtext=III:2]{III:2}}
+% \pstDescent{II:1_2}{III:2}
+% \rput(2.5,1.5){\pstPerson[female, deceased,
+% belowtext=\parbox{2cm}{\centering III:3\\4/52}]{III:3}}
+% \pstDescent{II:1_2}{III:3}
+% \rput(3.5,1.5){\pstPerson[female, affected,
+% belowtext=III:4]{III:4}}
+% \pstDescent{II:3_4}{III:4}
+% \rput(4.5,1.5){\pstPerson[male, insidetext=?,
+% belowtext=III:5]{III:5}}
+% \pstDescent{II:3_4}{III:5}
+% \end{pspicture}
+% \caption{Example of a Pedigree of a Family With PROMM
+% From~\cite[p.~48]{Harper01:MDBook}}
+% \label{fig:example_PROMM}
+% \end{figure}
+%
+%
+% \begin{figure}
+% \centering
+% \begin{verbatim}
+% \begin{pspicture}(6,6)
+% \psset{belowtextrp=t, descarmA=1}
+% \rput(2.5,5.5){\pstPerson[male, deceased, belowtext=I:1]{I:1}}
+% \rput(3.5,5.5){\pstPerson[female, deceased, belowtext=I:2]{I:2}}
+% \pstRelationship[descentnode=I:1_2]{I:1}{I:2}
+% \rput(1,3.5){\pstPerson[female, affected, belowtext=II:1]{II:1}}
+% \pstDescent{I:1_2}{II:1}
+% \rput(2,3.5){\pstPerson[male, belowtext=II:2]{II:2}}
+% \pstRelationship[descentnode=II:1_2]{II:1}{II:2}
+% \rput(3.5,3.5){\pstPerson[male, affected, belowtext=II:3]{II:3}}
+% \pstDescent{I:1_2}{II:3}
+% \rput(4.5,3.5){\pstPerson[female, belowtext=II:4]{II:4}}
+% \pstRelationship[descentnode=II:3_4]{II:3}{II:4}
+% \rput(5.5,3.5){\pstPerson[female, affected, deceased, proband,
+% belowtext=II:5]{II:5}}
+% \pstDescent{I:1_2}{II:5}
+% \rput(0.5,1.5){\pstPerson[female, belowtext=III:1]{III:1}}
+% \pstDescent{II:1_2}{III:1}
+% \rput(1.5,1.5){\pstPerson[female, belowtext=III:2]{III:2}}
+% \pstDescent{II:1_2}{III:2}
+% \rput(2.5,1.5){\pstPerson[female, deceased,
+% belowtext=\parbox{2cm}{\centering III:3\\4/52}]{III:3}}
+% \pstDescent{II:1_2}{III:3}
+% \rput(3.5,1.5){\pstPerson[female, affected,
+% belowtext=III:4]{III:4}}
+% \pstDescent{II:3_4}{III:4}
+% \rput(4.5,1.5){\pstPerson[male, insidetext=?,
+% belowtext=III:5]{III:5}}
+% \pstDescent{II:3_4}{III:5}
+% \end{pspicture}
+% \end{verbatim}
+% \caption{Code Producing Figure~\ref{fig:example_PROMM}}
+% \label{fig:example_PROMM_code}
+% \end{figure}
+%
+%
+% A very complex pedigree is used as an example
+% in~\cite{PedigreeNomenclature95}. On
+% Figure~\ref{fig:complex_example} we reproduce this pedigree. The
+% corresponding code is shown on
+% Figures~\ref{fig:complex_example_codeI},
+% \ref{fig:complex_example_codeII} and~\ref{fig:complex_example_codeIII}.
+%
+% \begin{figure}
+% \centering
+% \rotatebox{90}{
+% \begin{pspicture}(0.7,0)(21.3,9)
+% \psset{descarmA=1.1, hatchsep=1.5pt}
+% \rput(3.5,8){Ethnic Background}
+% \rput(18.5,8){Ethnic Background}
+% \rput(3.5,7.6){\rnode[b]{OType1}{O'Type}}
+% \rput(18.5,7.5){\pnode{Origin2}}
+% \rput(6.5,7.5){\rnode{Quest1}{?}}
+% \rput(1,6.5){\Huge I}
+% \rput(1.5,6.5){\pstPerson[male, belowtext=1]{I1}}
+% \rput(2.5,6.5){\pstPerson[female, obligatory, belowtext=2]{I2}}
+% \rput(3.5,6.5){\pstPerson[male, belowtext=3]{I3}}
+% \rput(4.5,6.5){\pstPerson[male, belowtext=4]{I4}}
+% \rput(5.5,6.5){\pstPerson[male, belowtext=5]{I5}}
+% \rput(6.5,6.5){\pstPerson[female, affected,
+% belowtext=6]{I6}}
+% \rput(2,7.2){\pnode{Twins1}}
+% \rput(4,7.2){\pnode{Twins2}}
+% \pstTwins[descarmA=0]{OType1}{Twins1}{I1}{I2}
+% \pstTwins[qzygotic, descarmA=0, mzlinepos=0.8]{OType1}{Twins2}{I3}{I4}
+% \pstDescent[descarmA=0]{OType1}{I5}
+% \pstDescent[descarmA=0]{Quest1}{I6}
+% \pstRelationship[descentnode=I5I6]{I5}{I6}
+% \rput(1.5,5.5){\pstChildless{CI1}}
+% \ncline{I1}{CI1}
+% \rput(13.5,6.5){\pstPerson[male, deceased, belowtextrp=t,
+% belowtext=\parbox{2cm}{\centering d. 72 y\\7}]{I7}}
+% \rput(15.5,6.5){\pstPerson[female, deceased, belowtextrp=t,
+% belowtext=\parbox{2cm}{\centering d. 70 y\\8}]{I8}}
+% \pstRelationship[descentnode=I7I8]{I7}{I8}
+% \rput(21,6.5){\pstPerson[insidetext=5, belowtext=9--14,
+% belowtextrp=rt]{I9}}
+% \pstDescent[descarmA=0]{Origin2}{I8}
+% \pstDescent[descarmA=0]{Origin2}{I9}
+% \rput(1,4.5){\Huge II}
+% \rput(2.5,4.5){\pstPerson[male, affected, belowtext=1,
+% abovetext=Proto, abovetextrp=rB]{II1}}
+% \pstDescent{I2}{II1}
+% \rput(4.5,4.5){\pstPerson[female, asymptomatic,
+% belowtext=\parbox{3cm}{32 y\\
+% $E_3-$\\$E_4+$(45n/18n)\\2}, abovetext={Sterrie},
+% abovetextrp=rB, evaluated]{II2}}
+% \pstDescent{I5I6}{II2}
+% \pstRelationship[consanguinic, descentnode=II1II2]{II1}{II2}
+% \rput(5.5,5.2){\rnode{Quest2}{?}}
+% \rput(5.5,4.5){\pstPerson[female, insidetext=D,
+% belowtext=3]{II3}}
+% \ncline{Quest2}{II3}
+% \rput(6.5,5.2){\rnode{Quest3}{?}}
+% \rput(6.5,4.5){\pstPerson[male, insidetext=D,
+% belowtext=4]{II4}}
+% \ncline{Quest3}{II4}
+% \rput(7.5,4.5){\pstPerson[female, belowtext=5]{II5}}
+% \rput(8.5,4.5){\pstPerson[male, abovetext=Gary, abovetextrp=rB,
+% belowtext=\parbox{2cm}{36 y\\$E_3-$\\6},
+% evaluated]{II6}}
+% \rput(9.5,4.5){\pstPerson[male, abovetext={Gene},
+% belowtext=\parbox{2cm}{36 y\\$E_3-$\\7},
+% evaluated]{II7}}
+% \rput(9,5.2){\pnode{Twins3}}
+% \pstTwins[monozygotic]{I5I6}{Twins3}{II6}{II7}
+% \pstRelationship{II5}{II6}
+% \rput(7.5,5.7){O'Type}
+% \rput(11.5,4.5){\pstPerson[female, proband,
+% belowtext=\parbox{1cm}{35 y\\8}, abovetext=Feene]{II8}}
+% \pstRelationship[descentnode=II7II8]{II7}{II8}
+% \rput(13.5,4.5){\pstPerson[male, belowtext=9]{II9}}
+% \pstRelationship[broken, descentnode=II8II9,
+% descentnodepos=0.85]{II8}{II9}
+% \rput(16,4.5){\pstPerson[abovetext=Stacey, female,
+% abovetextrp=rB,
+% belowtext=\parbox{1cm}{33y\\ 10}]{II10}}
+% \def\affectedstyle{fillstyle=crosshatch}
+% \rput(17,4.5){\pstPerson[male, affected, abovetext=Sam,
+% belowtext=\parbox{3cm}{31 y\\ $E_2+$\\
+% 11}, hatchsep=3pt]{II11}}
+% \rput(17,3.6){\pstChildless[infertile]{C2}}
+% \ncline{II11}{C2}
+% \rput(18,4.5){\pstPerson[male, obligatory,
+% abovetext=Donald,
+% belowtext=\parbox{3cm}{29 y\\ $E_2+$ \\
+% 12}]{II12}}
+% \pstDescent{I7I8}{II8}
+% \pstDescent{I7I8}{II10}
+% \pstDescent{I7I8}{II11}
+% \pstDescent{I7I8}{II12}
+% \rput(19,4.5){\pstPerson[female, belowtext=13]{II13}}
+% \pstRelationship[descentnode=II12II13]{II12}{II13}
+% \rput(20,4.5){\pstPerson[female, insidetext=S,
+% belowtext=14]{II14}}
+% \rput(21,4.5){\pstPerson[insidetext=n]{II15}}
+% \pstDescent{I9}{II15}
+% \rput(1,2.5){\Huge III}
+% \rput(3,2.5){\pstPerson[male, adopted, belowtext=1]{III1}}
+% \rput(4,2.5){\pstPerson[insidetext=P, belowtext=2]{III2}}
+% \pstDescent[linestyle=dashed]{II1II2}{III1}
+% \pstDescent{II1II2}{III2}
+% \ncline{II3}{III2}
+% \rput(7.5,2.5){\pstPerson[insidetext=P,
+% belowtext=\parbox{2cm}{6 wk\\3}]{III3}}
+% \pstDescent{II5}{III3}
+% \ncline{II4}{III3}
+% \def\affectedstyle{fillstyle=vlines}
+% \rput(10,2.5){\pstAbortion[affected,
+% belowtext=\parbox{2cm}{\centering
+% female\\18wk\\$E_1+$(tri 21)\\4},
+% belowtextrp=t]{III4}}
+% \rput(11,2.5){\pstPerson[insidetext=P,
+% belowtext=\parbox{1cm}{16wk\\5}]{III5}}
+% \pstDescent{II7II8}{III4}
+% \pstDescent{II7II8}{III5}
+% \rput(12,2.5){\pstAbortion[belowtext=6]{III6}}
+% \rput(13,2.5){\pstAbortion[sab, belowtextrp=t,
+% belowtext=\parbox{2cm}{\centering female\\19 wk\\
+% 7}]{III7}}
+% \rput(14,2.5){\pstPerson[adopted, male,
+% belowtext=\parbox{1cm}{10 y\\ 8}]{III8}}
+% \pstDescent{II8II9}{III6}
+% \pstDescent{II8II9}{III7}
+% \pstDescent{II8II9}{III8}
+% \ncline[linestyle=dashed]{II10}{III8}
+% \rput(15,2.5){\pstAbortion[sab, belowtext=9]{III9}}
+% \def\affectedstyle{fillstyle=hlines}
+% \rput(16,2.5){\pstAbortion[sab, belowtextrp=t, affected,
+% belowtext=\parbox{2cm}{\centering male\\ 20 wk\\ $E_1+$
+% (tri 18)\\ 10}]{III10}}
+% \rput(17,2.5){\pstPerson[deceased, female,
+% belowtext=\parbox{1cm}{\centering SB\\32 wk\\
+% 11}]{III11}}
+% \pstDescent{II10}{III9}
+% \pstDescent{II10}{III10}
+% \pstDescent{II10}{III11}
+% \rput(20,2.5){\pstPerson[insidetext=P,
+% belowtext=12]{III12}}
+% \pstDescent{II14}{III12}
+% \ncline{II12II13}{III12}
+% \end{pspicture}
+% }
+% \caption{A Complex Pedigree From~\cite{PedigreeNomenclature95}}
+% \label{fig:complex_example}
+% \end{figure}
+%
+%
+% \begin{figure}
+% \centering
+% \begin{verbatim}
+% \psset{descarmA=1.1, hatchsep=1.5pt}
+% \rput(3.5,8){Ethnic Background}
+% \rput(18.5,8){Ethnic Background}
+% \rput(3.5,7.5){\rnode{OType1}{O'Type}}
+% \rput(18.5,7.5){\pnode{Origin2}}
+% \rput(6.5,7.5){\rnode{Quest1}{?}}
+% \rput(1,6.5){\Huge I}
+% \rput(1.5,6.5){\pstPerson[male, belowtext=1]{I1}}
+% \rput(2.5,6.5){\pstPerson[female, obligatory, belowtext=2]{I2}}
+% \rput(3.5,6.5){\pstPerson[male, belowtext=3]{I3}}
+% \rput(4.5,6.5){\pstPerson[male, belowtext=4]{I4}}
+% \rput(5.5,6.5){\pstPerson[male, belowtext=5]{I5}}
+% \rput(6.5,6.5){\pstPerson[female, affected,
+% belowtext=6]{I6}}
+% \rput(2,7.2){\pnode{Twins1}}
+% \rput(4,7.2){\pnode{Twins2}}
+% \pstTwins[descarmA=0]{OType1}{Twins1}{I1}{I2}
+% \pstTwins[qzygotic, descarmA=0, mzlinepos=0.8]{OType1}{Twins2}{I3}{I4}
+% \pstDescent[descarmA=0]{OType1}{I5}
+% \pstDescent[descarmA=0]{Quest1}{I6}
+% \pstRelationship[descentnode=I5I6]{I5}{I6}
+% \rput(1.5,5.5){\pstChildless{CI1}}
+% \ncline{I1}{CI1}
+% \rput(13.5,6.5){\pstPerson[male, deceased, belowtextrp=t,
+% belowtext=\parbox{2cm}{\centering d. 72 y\\7}]{I7}}
+% \rput(15.5,6.5){\pstPerson[female, deceased, belowtextrp=t,
+% belowtext=\parbox{2cm}{\centering d. 70 y\\8}]{I8}}
+% \pstRelationship[descentnode=I7I8]{I7}{I8}
+% \rput(21,6.5){\pstPerson[insidetext=5, belowtext=9--14,
+% belowtextrp=rt]{I9}}
+% \pstDescent[descarmA=0]{Origin2}{I8}
+% \pstDescent[descarmA=0]{Origin2}{I9}
+% \end{verbatim}
+% \caption{Code for Figure~\ref{fig:complex_example}: Generation I}
+% \label{fig:complex_example_codeI}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{verbatim}
+% \rput(1,4.5){\Huge II}
+% \rput(2.5,4.5){\pstPerson[male, affected, belowtext=1,
+% abovetext=Proto, abovetextrp=rB]{II1}}
+% \pstDescent{I2}{II1}
+% \rput(4.5,4.5){\pstPerson[female, asymptomatic,
+% belowtext=\parbox{3cm}{32 y\\
+% $E_3-$\\$E_4+$(45n/18n)\\2}, abovetext={Sterrie},
+% abovetextrp=rB, evaluated]{II2}}
+% \pstDescent{I5I6}{II2}
+% \pstRelationship[consanguinic, descentnode=II1II2]{II1}{II2}
+% \rput(5.5,5.2){\rnode{Quest2}{?}}
+% \rput(5.5,4.5){\pstPerson[female, insidetext=D,
+% belowtext=3]{II3}}
+% \ncline{Quest2}{II3}
+% \rput(6.5,5.2){\rnode{Quest3}{?}}
+% \rput(6.5,4.5){\pstPerson[male, insidetext=D,
+% belowtext=4]{II4}}
+% \ncline{Quest3}{II4}
+% \rput(7.5,4.5){\pstPerson[female, belowtext=5]{II5}}
+% \rput(8.5,4.5){\pstPerson[male, abovetext=Gary, abovetextrp=rB,
+% belowtext=\parbox{2cm}{36 y\\$E_3-$\\6},
+% evaluated]{II6}}
+% \rput(9.5,4.5){\pstPerson[male, abovetext={Gene},
+% belowtext=\parbox{2cm}{36 y\\$E_3-$\\7},
+% evaluated]{II7}}
+% \rput(9,5.2){\pnode{Twins3}}
+% \pstTwins[monozygotic]{I5I6}{Twins3}{II6}{II7}
+% \pstRelationship{II5}{II6}
+% \rput(7.5,5.7){O'Type}
+% \rput(11.5,4.5){\pstPerson[female, proband,
+% belowtext=\parbox{1cm}{35 y\\8}, abovetext=Feene]{II8}}
+% \pstRelationship[descentnode=II7II8]{II7}{II8}
+% \rput(13.5,4.5){\pstPerson[male, belowtext=9]{II9}}
+% \pstRelationship[broken, descentnode=II8II9,
+% descentnodepos=0.85]{II8}{II9}
+% \rput(16,4.5){\pstPerson[abovetext=Stacey, female,
+% abovetextrp=rB,
+% belowtext=\parbox{1cm}{33y\\ 10}]{II10}}
+% \def\affectedstyle{fillstyle=crosshatch}
+% \rput(17,4.5){\pstPerson[male, affected, abovetext=Sam,
+% belowtext=\parbox{3cm}{31 y\\ $E_2+$\\
+% 11}, hatchsep=3pt]{II11}}
+% \rput(17,3.6){\pstChildless[infertile]{C2}}
+% \ncline{II11}{C2}
+% \rput(18,4.5){\pstPerson[male, obligatory,
+% abovetext=Donald,
+% belowtext=\parbox{3cm}{29 y\\ $E_2+$ \\
+% 12}]{II12}}
+% \pstDescent{I7I8}{II8}
+% \pstDescent{I7I8}{II10}
+% \pstDescent{I7I8}{II11}
+% \pstDescent{I7I8}{II12}
+% \rput(19,4.5){\pstPerson[female, belowtext=13]{II13}}
+% \pstRelationship[descentnode=II12II13]{II12}{II13}
+% \rput(20,4.5){\pstPerson[female, insidetext=S,
+% belowtext=14]{II14}}
+% \rput(21,4.5){\pstPerson[insidetext=n]{II15}}
+% \pstDescent{I9}{II15}
+% \end{verbatim}
+% \caption{Code for Figure~\ref{fig:complex_example}: Generation II}
+% \label{fig:complex_example_codeII}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{verbatim}
+% \rput(1,2.5){\Huge III}
+% \rput(3,2.5){\pstPerson[male, adopted, belowtext=1]{III1}}
+% \rput(4,2.5){\pstPerson[insidetext=P, belowtext=2]{III2}}
+% \pstDescent[linestyle=dashed]{II1II2}{III1}
+% \pstDescent{II1II2}{III2}
+% \ncline{II3}{III2}
+% \rput(7.5,2.5){\pstPerson[insidetext=P,
+% belowtext=\parbox{2cm}{6 wk\\3}]{III3}}
+% \pstDescent{II5}{III3}
+% \ncline{II4}{III3}
+% \def\affectedstyle{fillstyle=vlines}
+% \rput(10,2.5){\pstAbortion[affected,
+% belowtext=\parbox{2cm}{\centering
+% female\\18wk\\$E_1+$(tri 21)\\4},
+% belowtextrp=t]{III4}}
+% \rput(11,2.5){\pstPerson[insidetext=P,
+% belowtext=\parbox{1cm}{16wk\\5}]{III5}}
+% \pstDescent{II7II8}{III4}
+% \pstDescent{II7II8}{III5}
+% \rput(12,2.5){\pstAbortion[belowtext=6]{III6}}
+% \rput(13,2.5){\pstAbortion[sab, belowtextrp=t,
+% belowtext=\parbox{2cm}{\centering female\\19 wk\\
+% 7}]{III7}}
+% \rput(14,2.5){\pstPerson[adopted, male,
+% belowtext=\parbox{1cm}{10 y\\ 8}]{III8}}
+% \pstDescent{II8II9}{III6}
+% \pstDescent{II8II9}{III7}
+% \pstDescent{II8II9}{III8}
+% \ncline[linestyle=dashed]{II10}{III8}
+% \rput(15,2.5){\pstAbortion[sab, belowtext=9]{III9}}
+% \def\affectedstyle{fillstyle=hlines}
+% \rput(16,2.5){\pstAbortion[sab, belowtextrp=t, affected,
+% belowtext=\parbox{2cm}{\centering male\\ 20 wk\\ $E_1+$
+% (tri 18)\\ 10}]{III10}}
+% \rput(17,2.5){\pstPerson[deceased, female,
+% belowtext=\parbox{1cm}{\centering SB\\32 wk\\
+% 11}]{III11}}
+% \pstDescent{II10}{III9}
+% \pstDescent{II10}{III10}
+% \pstDescent{II10}{III11}
+% \rput(20,2.5){\pstPerson[insidetext=P,
+% belowtext=12]{III12}}
+% \pstDescent{II14}{III12}
+% \ncline{II12II13}{III12}
+% \end{verbatim}
+% \caption{Code for Figure~\ref{fig:complex_example}: Generation III}
+% \label{fig:complex_example_codeIII}
+% \end{figure}
+%\clearpage
+%
+%
+%\StopEventually{%
+% \clearpage
+% \section{Acknowledgements}
+% The authors are grateful to Herbert Vo\ss{} for help with
+% |PSTricks| code. The support of \TeX{} User Group is gratefully
+% acknowledged. One of the authors (LA) was supported by Russian
+% Foundation for Fundamental Research (travel grant 06-04-58811),
+% Russian Federation President Council for Grants Supporting Young
+% Scientists and Flagship Science Schools (grant MD-4245.2006.7)
+%
+% \bibliography{pst-pdgr}
+% \bibliographystyle{plain}
+%}
+%
+%\section{Implementation}
+%\label{sec:implementation}
+%
+%
+%
+%\subsection{Identification and Setting Up}
+%\label{sec:identification}
+%
+%
+%Traditionally |PSTricks| works in two regimes: the \LaTeX one and
+%the plain one. Probably it is a good idea to keep this
+%tradition. Therefore we will use a \TeX{} file \path{pst-pdgr.tex}
+%and a \LaTeX file \path{pst-pdgr.sty}. They have different means of
+%preserving from loading twice and identification.
+%
+% \begin{macro}{\PSTPedigreeLoaded}
+% A \TeX{} guard |\PSTPedigreeLoaded| prevents the double loading
+% of the file:
+% \begin{macrocode}
+%<*tex>
+\csname PSTPedigreeLoaded\endcsname
+\let\PSTPedigreeLoaded\endinput
+%</tex>
+% \end{macrocode}
+% \end{macro}
+%
+%Now we can start real identification. Note the difference between
+%the ways a \LaTeX{} style, a \LaTeX{} configuration file and a \TeX{}
+%file announce itself
+% \begin{macrocode}
+%<latex>\NeedsTeXFormat{LaTeX2e}
+%<latex>\ProvidesPackage{pst-pdgr}
+%<cfg>\ProvidesFile{pst-pdgr.cfg}
+%<tex>\message{
+[2017/11/20 v0.4 Medical Pedigree with PSTricks]
+%<tex>}
+% \end{macrocode}
+%
+% The \LaTeX{} style is in fact just a wrapper: it calls the
+% configuration file, and then the \TeX file, which does the real
+% work:
+% \begin{macrocode}
+%<*latex>
+\RequirePackage{pstricks}%
+\InputIfFileExists{pst-pdgr.cfg}{%
+ \typeout{Loading configuration file pst-pdgr.cfg}}{%
+ \typeout{Configuration file pst-pdgr.cfg is not found}}
+\input{pst-pdgr.tex}
+%</latex>
+% \end{macrocode}
+%
+% Now we are dealing (almost) exclusively with \TeX.
+% \begin{macrocode}
+%<*tex>
+% \end{macrocode}
+%
+% Check the packages we use are loaded:
+% \begin{macrocode}
+\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
+\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi
+\ifx\PSTreeLoaded\endinput\else\input pst-tree.tex\fi
+\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex\fi
+% \end{macrocode}
+%
+% We set up that |@| symbol:
+% \begin{macrocode}
+\catcode`\@=11\relax
+% \end{macrocode}
+% and set up keys for our package
+% \begin{macrocode}
+\pst@addfams{pst-pdgr}
+% \end{macrocode}
+%
+%\subsection{Global Parameters}
+%\label{sec:impl_globals}
+%
+% These macros define the way affected individuals are drawn
+% \begin{macro}{\affectedbgcolor}
+% The background color:
+% \begin{macrocode}
+\def\affectedbgcolor{gray}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\affectedfgcolor}
+% The foreground color for the text:
+% \begin{macrocode}
+\def\affectedfgcolor{white}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\affectedstyle}
+% And the style:
+% \begin{macrocode}
+\def\affectedstyle{fillstyle=solid, fillcolor=\affectedbgcolor}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@intxtcolor}
+% Normally the color of the inside text for normal persons is the
+% current color:
+% \begin{macrocode}
+\def\pst@pdgr@instxtcolor{\relax}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%\subsection{Options}
+%\label{sec:impl_opts}
+%
+% Here we define the option for the commands and their action.
+%
+%
+%\subsubsection{Choice Options}
+%\label{sec:impl_choice}
+%
+% This groups of options sets a key from a given set of choices.
+% \begin{macro}{\pst@pdgr@sex}
+% First, the sex of the person. The numbers 0, 1 and 2 correspond
+% to the sequence in the alternatives list
+% \begin{macrocode}
+\def\pst@pdgr@sex{0}
+\define@choicekey[psset]{pst-pdgr}{sex}[\pst@pdgr@temp \pst@pdgr@sex]{%
+ unknown,male,female}[unknown]{}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@condition}
+% Next, the condition of the person. The numbers again correspond
+% to the sequence in the alternatives list
+% \begin{macrocode}
+\def\pst@pdgr@condition{0}
+\define@choicekey[psset]{pst-pdgr}{%
+ condition}[\pst@pdgr@temp \pst@pdgr@condition]{%
+ normal,obligatory,asymptomatic,affected}[normal]{}
+% \end{macrocode}
+% \end{macro}
+%
+% A bunch of shortcuts
+% \begin{macrocode}
+\define@key[psset]{pst-pdgr}{unknown}[]{\psset{sex=unknown}}
+\define@key[psset]{pst-pdgr}{male}[]{\psset{sex=male}}
+\define@key[psset]{pst-pdgr}{female}[]{\psset{sex=female}}
+\define@key[psset]{pst-pdgr}{normal}[]{\psset{condition=normal}}
+\define@key[psset]{pst-pdgr}{obligatory}[]{\psset{condition=obligatory}}
+\define@key[psset]{pst-pdgr}{asymptomatic}[]{\psset{condition=asymptomatic}}
+\define@key[psset]{pst-pdgr}{affected}[]{\psset{condition=affected}}
+% \end{macrocode}
+%
+%
+%
+%\subsubsection{Boolean Options}
+%\label{sec:impl_bool}
+%
+% True or false options.
+%
+%
+% \begin{macro}{\pst@pdgr@defineboolkey}
+% We use use our own version of definition of boolean keys, rather
+% than the one provided by |xkeyval|.
+% \begin{macrocode}
+\def\pst@pdgr@defineboolkey#1{%
+\expandafter\newif\csname ifpst@pdgr@#1\endcsname%
+\csname pst@pdgr@#1false\endcsname%
+\define@key[psset]{pst-pdgr}{#1}[true]{%
+ \@nameuse{pst@pdgr@#1##1}}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\ifpst@pdgr@deceased}
+% Whether the individual is deceased:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{deceased}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@proband}
+% Whether the individual is a proband:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{proband}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@adopted}
+% Whether the individual is adopted:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{adopted}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@evaluated}
+% Whether the individual is evaluated:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{evaluated}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@sab}
+% Whether the abortion is SAB:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{sab}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@infertile}
+% Whether the individual or relationship is infertile:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{infertile}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@broken}
+% Whether the relationship is broken:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{broken}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@consanguinic}
+% Whether the relationship is consanguinic:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{consanguinic}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@monozygotic}
+% Whether the twins are monozygotic:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{monozygotic}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@qzygotic}
+% Whether the are questionably monozygotic:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{qzygotic}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%\subsubsection{String Options}
+%\label{sec:impl_string}
+%
+% Options setting up strings.
+%
+%
+% \begin{macro}{\pst@pdgr@insidetext}
+% Text inside the symbol
+% \begin{macrocode}
+\def\pst@pdgr@insidetext{}%
+\define@key[psset]{pst-pdgr}{insidetext}{%
+ \def\pst@pdgr@insidetext{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@belowtext}
+% Text below the symbol
+% \begin{macrocode}
+\def\pst@pdgr@belowtext{}%
+\define@key[psset]{pst-pdgr}{belowtext}{%
+ \def\pst@pdgr@belowtext{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@abovetext}
+% Text above the symbol
+% \begin{macrocode}
+\def\pst@pdgr@abovetext{}%
+\define@key[psset]{pst-pdgr}{abovetext}{%
+ \def\pst@pdgr@abovetext{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@lefttext}
+% Text to the left of the symbol
+% \begin{macrocode}
+\def\pst@pdgr@lefttext{}%
+\define@key[psset]{pst-pdgr}{lefttext}{%
+ \def\pst@pdgr@lefttext{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@righttext}
+% Text to the right of the symbol
+% \begin{macrocode}
+\def\pst@pdgr@righttext{}%
+\define@key[psset]{pst-pdgr}{righttext}{%
+ \def\pst@pdgr@righttext{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@descentnode}
+% Name of the descent node
+% \begin{macrocode}
+\def\pst@pdgr@descentnode{}%
+\define@key[psset]{pst-pdgr}{descentnode}{%
+ \def\pst@pdgr@descentnode{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@rellinecmd}
+% Command to draw relationship lines:
+% \begin{macrocode}
+\def\pst@pdgr@rellinecmd{\ncline}%
+\define@key[psset]{pst-pdgr}{rellinecmd}{%
+ \def\pst@pdgr@rellinecmd{\@nameuse{#1}}}%
+% \end{macrocode}
+% \end{macro}
+%
+% A number of text positioning commands.
+% \begin{macro}{\pst@pdgr@abovetextrp}
+% The command to set the reference position for the text above the
+% symbol.
+% \begin{macrocode}
+\def\pst@pdgr@abovetextrp{lB}%
+\define@key[psset]{pst-pdgr}{abovetextrp}{%
+ \def\pst@pdgr@abovetextrp{#1}}%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Added the command}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@belowtextrp}
+% The command to set the reference position for the text below the
+% symbol.
+% \begin{macrocode}
+\def\pst@pdgr@belowtextrp{lt}%
+\define@key[psset]{pst-pdgr}{belowtextrp}{%
+ \def\pst@pdgr@belowtextrp{#1}}%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Added the command}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@lefttextrp}
+% The command to set the reference position for the text to the left
+% of the symbol.
+% \begin{macrocode}
+\def\pst@pdgr@lefttextrp{r}%
+\define@key[psset]{pst-pdgr}{lefttextrp}{%
+ \def\pst@pdgr@lefttextrp{#1}}%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Added the command}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@righttextrp}
+% The command to set the reference position for the text to the right
+% of the symbol.
+% \begin{macrocode}
+\def\pst@pdgr@righttextrp{l}%
+\define@key[psset]{pst-pdgr}{righttextrp}{%
+ \def\pst@pdgr@righttextrp{#1}}%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Added the command}
+% \end{macro}
+%
+% The option |addtwin| for |\pstTwin| command is special. Since it
+% can be repeated, we want it to be executed immediately. We store
+% the name of the descentnode in |\pst@pdgr@tempnode|
+% \begin{macrocode}
+\define@key[psset]{pst-pdgr}{addtwin}{\ncline{\pst@pdgr@tempnode}{#1}}%
+\define@key[psset]{pst-pdgr}{descentnode}{%
+ \def\pst@pdgr@descentnode{#1}}%
+% \end{macrocode}
+%
+%
+%
+%\subsubsection{Numerical Options}
+%\label{sec:impl_opts_num}
+%
+% The options to set up numerical values.
+%
+%
+% \begin{macro}{\psk@descarmA}
+% \changes{v0.3}{2007/06/24}{Introduced new length}
+% The length of the arm A on the |\pstDescent| line.
+% \begin{macrocode}
+\newdimen\psk@descarmA%
+\define@key[psset]{pst-pdgr}{descarmA}{\pssetlength\psk@descarmA{#1}}%
+\psset{descarmA=0.8}%
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\pst@pdgr@descentnodepos}
+% The position of the descent node on the relationship line
+% \begin{macrocode}
+\def\pst@pdgr@descentnodepos{0.5}
+\define@key[psset]{pst-pdgr}{descentnodepos}{%
+ \pst@checknum{#1}\pst@pdgr@descentnodepos%
+ \ifdim\pst@pdgr@descentnodepos \p@<\z@
+ \def\pst@pdgr@descentnodepos{0.5}%
+ \@pstrickserr{Bad `descentnodepos' value: `#1'. Must be >0}\@ehpa%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@brokenpos}
+% The position of the broken line symbol on the relationship line
+% \begin{macrocode}
+\def\pst@pdgr@brokenpos{0.3}
+\define@key[psset]{pst-pdgr}{brokenpos}{%
+ \pst@checknum{#1}\pst@pdgr@brokenpos%
+ \ifdim\pst@pdgr@brokenpos \p@<\z@
+ \def\pst@pdgr@brokenpos{0.3}%
+ \@pstrickserr{Bad `brokenpos' value: `#1'. Must be >0}\@ehpa%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@mzlinepos}
+% The position of the monozygotic line or question mark on the twins
+% line:
+% \begin{macrocode}
+\def\pst@pdgr@mzlinepos{0.5}
+\define@key[psset]{pst-pdgr}{mzlinepos}{%
+ \pst@checknum{#1}\pst@pdgr@mzlinepos%
+ \ifdim\pst@pdgr@mzlinepos \p@<\z@%
+ \def\pst@pdgr@mzlinepos{0.5}%
+ \@pstrickserr{Bad `mzlinepos' value: `#1'. Must be >0}\@ehpa%
+ \fi%
+ \ifdim\pst@pdgr@mzlinepos \p@>\p@\relax%
+ \def\pst@pdgr@mzlinepos{0.5}%
+ \@pstrickserr{Bad `mzlinepos' value: `#1'. Must be <1}\@ehpa%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%\subsection{Drawing A Person}
+%\label{sec:impl_pstPerson}
+%
+% And now the main macro.
+%
+% \begin{macro}{\pstPerson}
+% First, the standard processing of optional parameter
+% \begin{macrocode}
+\def\pstPerson{\@ifnextchar[{\pstPerson@i}{\pstPerson@i[]}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pstPerson@i}
+% And now we are ready for a real work. Actually we create a
+% |rnode| and put everything inside. We add a |\pspicture| for the
+% node to have non-zero size.
+% \begin{macrocode}
+\def\pstPerson@i[#1]#2{%
+ \rnode{#2}{%
+ \psset{arrows=-, linestyle=solid}%
+ \psset{#1}%
+ \pspicture[shift=-0.25](-0.25,-0.25)(0.25,0.25)%
+% \end{macrocode}
+% Condition processing.
+% \begin{macrocode}
+ \ifcase\pst@pdgr@condition\relax % Nothing to do if normal
+ \or % obligatory
+ \psdot(0,0)%
+ \or % asymptomatic
+ \qline(0,0.25)(0,-0.25)%
+ \or % affected
+ \expandafter\psset\expandafter{\affectedstyle}%
+ \def\pst@pdgr@instxtcolor{\csname\affectedfgcolor\endcsname}%
+ \fi%
+% \end{macrocode}
+% The actual drawing
+% \begin{macrocode}
+ \ifcase\pst@pdgr@sex\relax % First, unknown sex. A diamond
+ \pspolygon(0,0.25)(0.25,0)(0,-0.25)(-0.25,0)%
+ \or % Male. A square with side 0.5
+ \pspolygon(-0.25,-0.25)(-0.25,0.25)(0.25,0.25)(0.25,-0.25)%
+ \or % Female. A circle with radius 0.25
+ \pscircle{0.25}%
+ \fi%
+% \end{macrocode}
+% Necessary for next
+% \begin{macrocode}
+ \psset{fillstyle=none}%
+% \end{macrocode}
+%
+% Deceased or not?
+% \begin{macrocode}
+ \ifpst@pdgr@deceased%
+ \qline(-0.33,-0.33)(0.33,0.33)%
+ \fi%
+% \end{macrocode}
+% Proband or not?
+% \begin{macrocode}
+ \ifpst@pdgr@proband%
+ \psline[arrows=->](-0.55,-0.55)(-0.29,-0.29)%
+ \fi%
+% \end{macrocode}
+% Adopted or not?
+% \begin{macrocode}
+ \ifpst@pdgr@adopted%
+ \psline(-0.25,-0.35)(-0.35,-0.35)(-0.35,0.35)(-0.25,0.35)%
+ \psline(0.25,-0.35)(0.35,-0.35)(0.35,0.35)(0.25,0.35)%
+ \fi%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Slightly increased brackets for the ``adopted''
+% symbol}
+% Evaluated or not?
+% \begin{macrocode}
+ \ifpst@pdgr@evaluated%
+ \rput(0.4,-0.4){$\ast$}%
+ \fi%
+% \end{macrocode}
+%
+% Now a bunch of text putting commands
+% \begin{macrocode}
+ \ifx\pst@pdgr@abovetext\@empty\relax\else%
+ \rput[\pst@pdgr@abovetextrp](0,0.4){%
+ \kern2\pslinewidth\pst@pdgr@abovetext\kern2\pslinewidth}%
+ \fi%
+ \ifx\pst@pdgr@belowtext\@empty\relax\else%
+ \rput[\pst@pdgr@belowtextrp](0,-0.4){%
+ \kern2\pslinewidth\pst@pdgr@belowtext\kern2\pslinewidth}%
+ \fi%
+ \ifx\pst@pdgr@righttext\@empty\relax\else%
+ \rput[\pst@pdgr@righttextrp](0.4,0){\pst@pdgr@righttext}%
+ \fi%
+ \ifx\pst@pdgr@lefttext\@empty\relax\else%
+ \rput[\pst@pdgr@lefttextrp](-0.4,0){\pst@pdgr@lefttext}%
+ \fi%
+% \end{macrocode}
+% Inside text is a bit more difficult since we want to be able to
+% do reverse video if necessary
+% \begin{macrocode}
+ \ifx\pst@pdgr@insidetext\@empty\relax\else%
+ \rput(0,0){\pst@pdgr@instxtcolor\pst@pdgr@insidetext}%
+ \fi%
+ \endpspicture%
+}}%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Changed text positioning}
+% \end{macro}
+%
+%
+%\subsection{Drawing A Terminated Pregnancy}
+%\label{sec:impl_pstAbortion}
+%
+% \begin{macro}{\pstAbortion}
+% First, the standard processing of optional parameter
+% \begin{macrocode}
+\def\pstAbortion{\@ifnextchar[{\pstAbortion@i}{\pstAbortion@i[]}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pstAbortion@i}
+% And the actual macro:
+% \begin{macrocode}
+\def\pstAbortion@i[#1]#2{%
+ \rnode{#2}{%
+ \psset{arrows=-, linestyle=solid}%
+ \psset{#1}%
+% \end{macrocode}
+%
+% The standard~\cite{PedigreeNomenclature95} requires the lines for
+% the terminated pregnancies to be shorter than for the normal ones.
+% A way to do this is to make the node \emph{higher}:
+% \begin{macrocode}
+ \pspicture[shift=-0.25](-0.25,-0.25)(0.25,0.5)%
+% \end{macrocode}
+%
+%
+% Condition processing:
+% \begin{macrocode}
+ \ifcase\pst@pdgr@condition\relax % Nothing to do if normal
+ \or \relax % Nothing to do if obligatory
+ \or \relax % Nothing to do if asymptomatic
+ \or % affected
+ \expandafter\psset\expandafter{\affectedstyle}%
+ \fi%
+% \end{macrocode}
+%
+% If this is a terminated pregnancy, we use the same symbol as for
+% |deceased|:
+% \begin{macrocode}
+ \ifpst@pdgr@sab\relax\else%
+ \qline(-0.25,0.1)(0.25,0.6)%
+ \fi%
+% \end{macrocode}
+%
+% The actual drawing
+% \begin{macrocode}
+ \pspolygon(-0.25,0.25)(0,0.5)(0.25,0.25)
+% \end{macrocode}
+%
+% And text putting commands
+% \begin{macrocode}
+ \ifx\pst@pdgr@abovetext\@empty\relax\else%
+ \rput[\pst@pdgr@abovetextrp](0,0.65){%
+ \kern2\pslinewidth\pst@pdgr@abovetext\kern2\pslinewidth}%
+ \fi%
+ \ifx\pst@pdgr@belowtext\@empty\relax\else%
+ \rput[\pst@pdgr@belowtextrp](0,0.1){%
+ \kern2\pslinewidth\pst@pdgr@belowtext\kern2\pslinewidth}%
+ \fi%
+ \ifx\pst@pdgr@righttext\@empty\relax\else%
+ \rput[\pst@pdgr@righttextrp](0.4,0.35){\pst@pdgr@righttext}%
+ \fi%
+ \ifx\pst@pdgr@lefttext\@empty\relax\else%
+ \rput[\pst@pdgr@lefttextrp](-0.4,0.35){\pst@pdgr@lefttext}%
+ \fi%
+ \endpspicture%
+}}%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Changed text positioning}
+% \end{macro}
+%
+%
+%\subsection{Drawing A Childlessness Symbol}
+%\label{sec:impl_childless}
+%
+% \begin{macro}{\pstChildless}
+% Again, the standard processing of optional parameter
+% \begin{macrocode}
+\def\pstChildless{\@ifnextchar[{\pstChildless@i}{\pstChildless@i[]}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pstChildless@i}
+% And the actual macro:
+% \begin{macrocode}
+\def\pstChildless@i[#1]#2{%
+ \rnode{#2}{%
+ \psset{arrows=-, linestyle=solid}%
+ \psset{#1}%
+% \end{macrocode}
+% The actual drawing depends on the |infertile| option. If it is
+% true, we want a double line (an non-zero height). Otherwise this is
+% a single line with zero height:
+% \begin{macrocode}
+ \ifpst@pdgr@infertile % double line
+ \pspicture[shift=-0.05](-0.2,-0.05)(0.2,0.05)%
+ \qline(-0.2,-0.05)(0.2,-0.05)%
+ \qline(-0.2,0.05)(0.2,0.05)%
+ \endpspicture%
+ \else % single line
+ \qline(-0.2,0)(0.2,0)%
+ \fi%
+% \end{macrocode}
+% And the text below the symbol:
+% \begin{macrocode}
+ \ifx\pst@pdgr@belowtext\@empty\relax\else%
+ \rput[t](0,-0.2){\pst@pdgr@belowtext}%
+ \fi%
+}}%
+% \end{macrocode}
+%
+% \end{macro}
+%
+%\subsection{Drawing A Relationship Line}
+%\label{sec:impl_pstRelationship}
+%
+% \begin{macro}{\pstRelationship}
+% The |\pstRelationship| command can have both optional and
+% non-optional parameters:
+% \begin{macrocode}
+\def\pstRelationship{\@ifnextchar[{%
+ \pstRelationship@i}{\pstRelationship@i[]}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pstRelationship@i}
+% The actual macro:
+% \begin{macrocode}
+\def\pstRelationship@i[#1]#2#3{%
+ \begingroup%
+ \psset{arrows=-, linestyle=solid, nodesep=0.7\pslinewidth}%
+ \psset{#1}%
+% \end{macrocode}
+% A consanguinic relationship is shown by a double line:
+% \begin{macrocode}
+ \ifpst@pdgr@consanguinic%
+ \psset{doubleline=true}%
+ \else%
+ \psset{doubleline=false}%
+ \fi%
+% \end{macrocode}
+% The actual drawing
+% \begin{macrocode}
+ \pst@pdgr@rellinecmd{#2}{#3}%
+% \end{macrocode}
+% The broken relationships are shown using //:
+% \begin{macrocode}
+ \ifpst@pdgr@broken%
+ \lput(\pst@pdgr@brokenpos){/\kern-0.7ex/}%
+ \fi%
+% \end{macrocode}
+% And the descent node
+% \begin{macrocode}
+ \ifx\pst@pdgr@descentnode\@empty\relax%
+ \else%
+ \lput(\pst@pdgr@descentnodepos){\pnode{\pst@pdgr@descentnode}}%
+ \fi%
+ \endgroup%
+}%
+% \end{macrocode}
+%
+% \end{macro}
+%
+%\subsection{Drawing a Descent Line}
+%\label{sec:impl_pstDescent}
+%
+% \begin{macro}{\ncAngles}
+% \changes{v0.3}{2007/06/24}{Introduced the macro}
+% In the new version of pst-node.tex (1.00 and up) |\ncangles| has the
+% option |pcRef| for the arm lengths to be calculated from the node
+% center. Unfortunately at this time we cannot be sure the users have
+% the new version.
+%
+% This macro is from Herbert Vo\ss{}
+% (\url{http://www.tug.org/mail-archives/pstricks/2007/004608.html})
+% \begin{macrocode}
+\def\ncAngles{\pst@object{ncAngles}}
+\def\ncAngles@i{\check@arrow{\ncAngles@ii}}
+\def\ncAngles@ii#1#2{%
+ \nc@object{Open}{#1}{#2}{1.5}{\ncAngles@iii \tx@NCAngles}}
+%
+\def\ncAngles@iii{%
+ tx@Dict begin \psline@iii pop end
+ /AngleA \psk@angleA def
+ /AngleB \psk@angleB def
+ /ArmA \psk@armA GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul add
+sqrt sub def
+ /ArmB \psk@armB def
+ /ArmTypeA \psk@armtypeA def
+ /ArmTypeB \psk@armtypeB def }
+% \end{macrocode}
+%
+%
+% \end{macro}
+%
+% \begin{macro}{\pstDescent}
+% \changes{v0.3}{2007/06/24}{Rewrote using new code from Herbert Vo\ss}
+% The standard option processing command:
+% \begin{macrocode}
+\def\pstDescent{\@ifnextchar[{\pstDescent@i}{\pstDescent@i[]}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pstDescent@i}
+% The actual macro. Note that we want to set |armA| \emph{after}
+% processing user input, but all other options are processed after
+% standard ones.
+% \begin{macrocode}
+\def\pstDescent@i[#1]#2#3{%
+ \begingroup%
+ \psset{arrows=-, linestyle=solid, angleA=-90, %
+ angleB=90, armB=0}%
+ \psset{#1}%
+ \psset{armA=\psk@descarmA}%
+ \ncAngles{#2}{#3}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%\subsection{Drawing Twins}
+%\label{sec:impl_pstTwins}
+%
+% \begin{macro}{\pstTwins}
+% The standard option processing command:
+% \begin{macrocode}
+\def\pstTwins{\@ifnextchar[{\pstTwins@i}{\pstTwins@i[]}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pstTwins@i}
+% The actual macro. Note that we need to keep the twin node in
+% |\pst@pdgr@tempnode| to correctly process |addtwin|.
+% \begin{macrocode}
+\def\pstTwins@i[#1]#2#3#4#5{%
+ \begingroup%
+ \def\pst@pdgr@tempnode{#3}
+ \psset{arrows=-, linestyle=solid, angleA=90, %
+ angleB=-90}%
+ \psset{#1}%
+% \end{macrocode}
+% The descent line from the parent to the twin node
+% \begin{macrocode}
+ \pstDescent{#2}{#3}%
+% \end{macrocode}
+% And the twin lines and nodes
+% \begin{macrocode}
+ \ncline{#3}{#4}%
+ \lput(\pst@pdgr@mzlinepos){\pnode{pst@pdgr@tempnodeA}}%
+ \ncline{#3}{#5}%
+ \lput(\pst@pdgr@mzlinepos){\pnode{pst@pdgr@tempnodeB}}%
+% \end{macrocode}
+% The monozygotic or qzygotic line
+% \begin{macrocode}
+ \ifpst@pdgr@monozygotic%
+ \ncline{pst@pdgr@tempnodeA}{pst@pdgr@tempnodeB}%
+ \else%
+ \ifpst@pdgr@qzygotic%
+ \ncline[linestyle=none]{pst@pdgr@tempnodeA}{pst@pdgr@tempnodeB}%
+ \lput(0.5){?}%
+ \fi%
+ \fi%
+ \endgroup}%
+% \end{macrocode}
+%
+%
+% \end{macro}
+%
+%
+%\subsection{Tree Making Commands}
+%\label{sec:impl_trees}
+%
+% \begin{macro}{\pst@pdgr@makeTcommand}
+% The general macro to create a tree command from the normal command
+% \begin{macrocode}
+\def\pst@pdgr@makeTcommand#1{%
+ \@namedef{T#1}{%
+ \@ifnextchar[{\@nameuse{T#1@i}}{\@nameuse{T#1@i}[]}}%
+ \@namedef{T#1@i}[##1]##2{%
+ \Tr{\@nameuse{#1@i}[##1]{##2}}}}%
+% \end{macrocode}
+% \end{macro}
+%
+% And the macros
+% \begin{macro}{\TpstPerson}
+% Drawing a person
+% \begin{macrocode}
+\pst@pdgr@makeTcommand{pstPerson}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TpstAbortion}
+% Drawing an abortion
+% \begin{macrocode}
+\pst@pdgr@makeTcommand{pstAbortion}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TpstChildless}
+% Drawing a childlessness symbol
+% \begin{macrocode}
+\pst@pdgr@makeTcommand{pstChildless}%
+% \end{macrocode}
+% \end{macro}
+%
+%\subsection{Finishing Touch}
+%\label{sec:finish}
+%
+%
+% \begin{macrocode}
+%</tex>
+% \end{macrocode}
+%\Finale
+%
+%\clearpage
+%\PrintChanges
+%\clearpage
+%\PrintIndex
+%
+\endinput
diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.ins b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.ins
new file mode 100644
index 0000000000..ad66285967
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.ins
@@ -0,0 +1,48 @@
+%
+% Doctrip file for pst-pedigree
+% This file is in public domain
+% $Id: pst-pdgr.ins,v 2.0 2007/06/24 20:01:28 boris Exp $
+%
+\def\batchfile{pst-pdgr.ins}
+\input docstrip
+\keepsilent
+\showprogress
+
+\declarepreamble\cfg
+
+You are allowed and encouraged to modify THIS file.
+
+Good luck
+
+\endpreamble
+
+% This should be deleted in the final version
+\askforoverwritefalse
+
+\generate{%
+ \file{pst-pdgr.tex}{\from{pst-pdgr.dtx}{tex}}
+ \file{pst-pdgr.sty}{\from{pst-pdgr.dtx}{latex}}
+ \usepreamble\empty\usepreamble\cfg\file{pst-pdgr.cfg}{\from{pst-pdgr.dtx}{cfg}}}
+
+\obeyspaces
+\Msg{*********************************************************}%
+\Msg{* Congratulations! You successfully generated the *}%
+\Msg{* pst-pdgr package. *}%
+\Msg{* *}%
+\Msg{* Please move the files pst-pdgr.sty & pst-pdgr.cfg to *}%
+\Msg{* the place where LaTeX files are kept in your system; *}%
+\Msg{* e. g. /usr/share/texmf/tex/latex/pst-pdgr/. Please *}%
+\Msg{* move the file pst-pdgr.tex to the place where generic *}%
+\Msg{* TeX files are kept in your system, for example *}%
+\Msg{* /usr/share/texmf/tex/generic/pstricks/pst-pdgr/. *}%
+\Msg{* *}%
+\Msg{* You may customize your settings by changing the file *}%
+\Msg{* pst-pdgr.cfg. *}%
+\Msg{* *}%
+\Msg{* The documentation is in the file pst-pdgr.pdf. You *}%
+\Msg{* may use the provided Makefile to re-typeset it. *}%
+\Msg{* *}%
+\Msg{* The package is released under LPPL *}%
+\Msg{* *}%
+\Msg{* Happy TeXing! *}%
+\Msg{*********************************************************}% \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.pdf b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.pdf
new file mode 100644
index 0000000000..bd39c904ec
--- /dev/null
+++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.pdf
Binary files differ