% mangletex (11 May 1992) run at 18:14 GMT Friday 11 March 1994
\message{<Paul Taylor's commutative diagrams, version 3.29, 12 March 1994>}
%%======================================================================%
%%      TeX  macros for drawing rectangular category-theory diagrams    %
%%                                                                      %
%%                              Paul  Taylor                            %
%%                                                                      %
%%      Department of Computing, Imperial College, London SW7 2BZ       %
%%      +44 71 589 5111 x 5057                    pt@doc.ic.ac.uk       %
%%                                                                      %
%%              For user documentation, see "diagram-doc.tex"           %
%%                      PLEASE READ THE MANUAL!                         %
%%                                                                      %
%%      Authoritative version:   /tex/contrib/Taylor/tex/diagrams.tex   %
%%      by anonymous ftp from:   theory.doc.ic.ac.uk (146.169.2.27)     %
%%                                                                      %
%%      Please ensure that you are registered with me as a user so that %
%%      you can be informed of future releases.  Any electronic mail    %
%%      message with "commutative" or "diagram" in the subject line     %
%%      (such as your request for the package, a question about it, or  %
%%      even an otherwise blank message) automatically registers you, as%
%%      does fetching it directly by ftp (quoting your email address).  %
%%                                                                      %
%% THIS RELEASE:                                                        %
%%      Supports \usepackage[option-list]{diagrams} in LaTeX2e.         %
%%      As I need better diagonals and curved arrows for my book,       %
%%      they will get done eventually!   Paul                           %
%%                                                                      %
%% CONTENTS:                                                            %
%%  (O) corruption-sensitive hacks    (to approx line 300)              %
%%              Arrow components & commands - starts approx line 990    %
%% (21) auxillary macros for adjustment of components                   %
%% (22) bits of arrows  (\rhvee etc)                                    %
%% (23) arrow commands  (\rTo etc)                                      %
%% (24) miscellaneous                                                   %
%% Apart from these four sections, the rest is intended to be totally   %
%% meaningless in the undocumented version, which is approximately 1580 %
%% lines long. Please do not waste trees by printing it out.            %
%%                                                                      %
%% COPYRIGHT NOTICE:                                                    %
%%      This package may be copied and used freely for any academic     %
%%      (not commercial or military) purpose, on condition that it      %
%%      is not altered in any way, and that an acknowledgement is       %
%%      included in any published work making substantial use of it.    %
%%                                                                      %
%%      IT IS SUPPLIED "AS IS", WITHOUT WARRANTY, EXPRESS OR IMPLIED.   %
%%                                                                      %
%%      If you are doing something where mistakes cost money (or where  %
%%      success brings financial profit) then you must use commercial   %
%%      software, not this package. In any case, please remember to     %
%%      keep several backup copies of all files, and check everything   %
%%      visually before sending final copy to the publishers.           %
%%                                                                      %
%%      You may use this package as a (substantial) aid to writing an   %
%%      academic research or text book on condition that                %
%%       (i) you contact me at a suitable time to ensure that you have  %
%%           an up-to-date version (and any infelicities can be fixed), %
%%      (ii) you send me a copy of the book when it's published.        %
%%                                                                      %
%%                                                                      %
%% HISTORY                                                              %
%% 3.29 Released 11 March 1993                                          %
%%      Corrected error message when insertion made outside diagram.    %
%%      Also when label missing after <>^_~.                            %
%%      Switch to centredisplay if flushleft doesn't fit on the page.   %
%%      Added Y head & tail from St. Mary Rd. font (not yet adjusted).  %
%%      First attempt to support LaTeX2e \usepackage options.           %
%%      Fixed bug (missing \endgroup and no arrow) with \rTo[opt][opt]. %
%%      Set \mathsurround=0pt for everything within our code.           %
%% 3.28 Released 30 November 1993                                       %
%%      Fixed bug causing diagram to disappear in vert mode in LaTeX    %
%%      Peter Freyd's \puncture symbol provided.                        %
%% 3.27 Released 26 March 1993                                          %
%%      Fixed bug which forced LaTeX slopes on PostScript diagonals.    %
%% 3.26 Released 11 February 1993                                       %
%%      Added 1pt space between label (strut) and horizontal shaft.     %
%% 3.25 Released 30 January 1993                                        %
%%      Resolution-dependent fudge (dpi) applied to horizontal arrows.  %
%%      LaTeX heads made default (unless \tenln undefined, when vee)    %
%%      Also cures zero-length shafts of arrows in text in footnotes.   %
%%      Made \labelstyle and \objectstyle available as options.         %
%%      New display options give warning if used within maths.          %
%%      Catch missing bracket at end of label and misplaced (but not    %
%%      missing) bracket at end of \pile.                               %
%%      Small adjustments on some heads and tails. hbox option.         %
%%      Circle, cross, little vee, little black triangle heads.         %
%%      Fixed spaces before & after diagram in display and textflow.    %
%%      Catch em-braced arrow commands.                                 %
%%      Adjusted hook tails yet again (some theory behind horizontals!).%
%%      Default \MapBreadth as TeXbook p447; pixel round on input.      %
%%      First-use warning when defaulted diagonal components are used.  %
%%      Warning if diagonals used & columns stretched significantly.    %
%%      Warning if diagonals with repeating components are too short.   %
%%      Added \@use@TPIC@false to diagonal dot repeater.                %
%%      Allowed curly instead of square brackets in \diagramstyle.      %
%%      Also \diagramsstyle.                                            %
%%      AMSTEX emulation - works at least when amstex not present.      %
%%      Position horizontal labels using strut rather than \baselineskip%
%%      Removed \outer from \diagramstyle.                              %
%%      Lots of adjustments to bits of arrows (drives me mad!).         %
%% 3.24 Release 7 Sept 1992 advertised to users.                        %
%%      \lq and \rq (instead of ` and ') for catcodes and octals.       %
%%      Made it consistent with texinfo - for loading, at least.        %
%%      PostScript option introduced:                                   %
%%      LaTeX, vee, curlyvee, triangle & blacktriangle heads & tails    %
%%      TPIC option introduced as an alternative to \LaTeX@make@line.   %
%%      Fixed vmiddle positioning of one-row diagrams.                  %
%%      Fixed catastrophic error of empty first cell in nested diagram  %
%%      New reformatting program.                                       %
%%      Optional arguments on \diagram, maps and \diagramstyle.         %
%%      Made \PileSpacing between verticals local.                      %
%%      Piles vertically centered ignoring outer labels.                %
%%      Move labels away from wide vertical arrow middles.              %
%% 3.20 (29.4.92) early release of version 4                            %
%%      Ensure \enddiagram occurs only at correct {}-level              %
%%      Blank line and \par within diagram =\enddiagram.                %
%%      Clashing (horizontal) arrows detected at first pass             %
%%      Postscript arrows (basic code).                                 %
%%      Implemented \newarrow \newarrowhead etc.                        %
%%      Corruption-sensitive characters avoided wherever possible.      %
%%      Reloading prevented.                                            %
%%      Horizontal arrows outside diagram can stretch by wordspacing.   %
%%      Changed \lt and \gt to \lessthan and \greaterthan for Roy Crole.%
%%      Added < and > for labels on left and right of arrow;            %
%%      also [] for optional arguments on arrows (not used yet);        %
%% 3.16 (20.7.90) as mass mailed; only have mangled version             %
%% -- all following version numbers are post-facto --                   %
%%  3   (Jan 90) stretching vertical arrows                             %
%%  2   (Sept 89) horizontals stretch to objects; "superscript" labels  %
%%  1   (1987) horizontal arrows stretch to edge of cell                %
%%  0   (1986) implementation of Knuth's TeXercise 18.46                %
%%======================================================================%

%%======================================================================%
%%                                                                      %
%%      (1) CORRUPTION-SENSITIVE HACKS                                  %
%%                                                                      %
%%======================================================================%

%%                      CORRUPTION & \catcode WARNING

%% BITNET (IBM) machines may corrupt certain important characters
%% in transmission by electronic mail:
%%        0123456789=digits, abcdefghijklmnopqrstuvwxyz=lowers,
%%        ABCDEFGHIJKLMNOPQRSTUVWXYZ=uppers, @=at (internal names),
%%        {}=curly braces (grouping), \=backslash (keywords),
%%        %=percent (comment), #=hash/sharp (argument), +=plus, -=minus,
%%        <>=angle brackets (relations \ifnum,\ifdim), ==equals,
%%        ,=comma, .=dot, :=colon, ;=semicolon,  =space
%% $=dollar (maths) is only used in the "bits of maps" section

%% The following characters are marked by a comment including the word "ASCII",
%% except in comments and messages:
%%        &=and (alignment), ~=tilde, |=vertical, []=square brackets,
%%        ^=caret (superscript), _=underline (subscript),
%%        `=grave/backquote (catcodes), '=acute/single quote (octal),
%%        "=double quote (hex), ()=round brackets,
%%        /=slash, ?=query, !=pling/bang, 

%% The \catcode's marked * are assumed:
%%          \=0* {=1* }=2* $=3 &=4 return=5* #=6 ^=7 _=8 ignored=9*
%%          space=10* letter=11* other=12 active=13 %=14* invalid=15
%% If you want to load this package inside Stallman's "texinfo", you must do
%%% @catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13
%% and then use @diagram @rTo @\ @enddiagram etc. (braces {} stay the same).
%% Also need @catcode`@&=4.

%%*** You *MUST NOT* use the internal commands (with names beginning \cD@)****

%% don't load me twice!
\ifx\diagram\undefined\else\message{WARNING: the \string\diagram\space command
is already defined and will not be loaded again}\expandafter\endinput\fi

%% make @ letter, saving its old code to restore at the end of this file
%%% look for this on the last line of the file if you think something's missing!
%% the other \catcode assignments are to make it work with texinfo.
\edef\cdrestoreat{%%
\noexpand\catcode\lq\noexpand\@=\the\catcode\lq\@%%
\noexpand\catcode\lq\noexpand\#=\the\catcode\lq\#%%
\noexpand\catcode\lq\noexpand\$=\the\catcode\lq\$%%
\noexpand\catcode\lq\noexpand\<=\the\catcode\lq\<%%
\noexpand\catcode\lq\noexpand\>=\the\catcode\lq\>%%
\noexpand\catcode\lq\noexpand\+=\the\catcode\rq53%
%% texinfo @+ is @outer@active
}\catcode\lq\@=11 \catcode\lq\#=6 \catcode\lq\<=12 \catcode\lq\>=12 \catcode
\rq53=12

%% Change y to n if pool_size in your implementation of TeX is small.
%% This is reasonable if you have a small ("personal") computer, but if you
%%% have a sun, dec, hp, ... workstation or a mainframe, complain to your local
%% system manager and get him/her to install a version of TeX with bigger
%% parameters. The "hash size" (number of command names) gets you next.
\ifx\diagram@help@messages\undefined\let\diagram@help@messages y\fi

%% The following macro is used to include literal PostScript commands in the
%% DVI file for rotation, etc.  Since this goes beyond standard TeX, it is
%%% dependent on the convention used by your local DVI-to-PostScript translator.
%% Choose whichever line applies to the program used at your site, or, if
%% yours is not listed, consult the manual, experiment with this macro and
%% (please) tell me what is needed to make it work.
%%
%%% dvips (Tomas Rokicki, Radical Eye) labrea.stanford.edu /pub/dvips9999.tar.Z
\def\cD@XI#1{\special{ps:#1}}%%
%%
%% I'm not sure that the rest work.
%%
%% dvitps (Stephan Bechtolsheim, Integrated Computer Systems)
%% arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z
%%\def\verbatim@ps@special#1{\special{dvitps: Literal "#1"}}%%
%%
%% dvitops (James Clark)
%%\def\verbatim@ps@special#1{\special{dvitops: inline #1}}%%

\count@=\year\multiply\count@12 \advance\count@\month%%
\ifnum\count@>23943 %% (March 1995) It's changing very fast at the moment!
\message{***********************************************************}%%ascii
\message{! THIS IS AN EXPERIMENTAL VERSION OF COMMUTATIVE DIAGRAMS *}%%
\message{! which expired in March 1995 and is time-bombed for June *}%%
\message{! You may obtain an up to date version of this package by *}%%ascii
\message{! "anonymous FTP" from theory.doc.ic.ac.uk (146.169.2.27) *}%%
\message{***********************************************************}%%ascii
\fi

\def\cD@nG{\global\let}\def\cD@RH{\outer\def}

%% safe names for braces, tab (&) and maths ($), as commands and for messages
{\escapechar\m@ne\xdef\cD@gA{\string\{}\xdef\cD@QC{\string\}}%%
%%
%% three ASCII ampersands (ands) (&&&) appear on the next line
\catcode\lq\&=4 \cD@nG\cD@F=&\xdef\cD@XA{\string\&}%%ascii three ands
%%
%% ASCII ^ and _ each appear twice on next line
%% six ASCII dollars ($$$$$$) appear on the next two lines.
\catcode\lq\$=3 \cD@nG\cD@dA=$\cD@nG\cD@WC=$%%ascii three dollars
\xdef\cD@PC{\string\$}\gdef\cD@uD{$$}%%ascii three dollars
%%
%% two ASCII underlines (__) appear on the next line.
\catcode\lq\_=8 \cD@nG\cD@pH=_%%ascii two underlines
%%
%% six ASCII carets (^^^^^^) appear on the next three lines.
\obeylines\catcode\lq\^=7 \cD@nG\cD@qH=^%%ascii two carets
\ifnum\newlinechar=10 \gdef\cD@IE{^^J}%%ascii two carets
\else\ifnum\newlinechar=13 \gdef\cD@IE{^^M}%%ascii two carets
\else\cD@nG\cD@IE\space\expandafter\message{! input error: \noexpand
\newlinechar\space is ASCII \the\newlinechar, not LF=10 or CR=13.}%%
\fi\fi}%%

%% avoid using <> (because I personally re-define them to mean \langle\rangle)
\mathchardef\lessthan=\rq30474 \mathchardef\greaterthan=\rq30476

%% LaTeX line and arrowhead font
%% the "hit return" comments show up if the font is missing.
\ifx\tenln\undefined%%
\font\tenln=line10\relax%% Hit return - who needs diagonals?
\fi\ifx\tenlnw\undefined\ifx\tenln\nullfont\let\tenlnw\nullfont\else%%
\font\tenlnw=linew10\relax%% Hit return - who needs diagonals?
\fi\fi%%

%% report line numbers in TeX3 only
\ifx\inputlineno\undefined\csname newcount\endcsname\inputlineno\inputlineno
\m@ne\fi

\newif\if@ignore

\def\cd@shouldnt{\cD@WB{* THIS SHOULD NEVER HAPPEN! *}}

%% turn round- and square-bracketed arguments into curly-bracketed
\def\get@round@pair#1(#2,#3){#1{#2}{#3}}%%ascii round brackets ()
\def\get@square@arg#1[#2]{#1{#2}}%%ascii square brackets []
\def\cD@rC#1{\cD@D#1,],}%%ascii square brackets
\def\cD@fA{[}\def\cD@YC{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1%
\enddiagram}}

%% ASCII open square bracket occurs on next line
\def\cD@E{{\ifx\cD@NE[\aftergroup\get@square@arg\aftergroup\cD@z\else
\aftergroup\cD@x\fi}}%%
\def\cD@u#1#2{\def\cD@z{#1}\def\cD@x{#2}\futurelet\cD@NE\cD@E}

%% ASCII vertical bar (|) occurs on the next line
\def\cD@jH{|}

\def\cD@WG{%% arguments to maps inside diagrams
\tokcase\cD@TC:\cD@K\break@args;\catcase\cD@qH:\cD@iH;\catcase\cD@pH:\cD@wG;%
\tokcase{~}:\cD@OI;%%ascii tilde
\tokcase<:\cD@uG;%%ascii less-than
\tokcase>:\right@label;%%ascii greater-than
\tokcase(:\cD@YG;%%)%ascii open round bracket
\tokcase[:\optional@;%%]%ascii open square bracket
\catcase\space:\eat@space;\catcase\bgroup:\positional@;\default:\cD@L
\break@args;\endswitch}

\def\switch@arg{%% arguments to horizontal maps outside diagrams
\catcase\cD@qH:\cD@iH;\catcase\cD@pH:\cD@wG;\tokcase[:\optional@;%
%%]%ascii open square bracket
\catcase\space:\eat@space;\catcase\bgroup:\positional@;\tokcase{~}:\cD@OI;%
%%ascii tilde (questionable!)
\default:\cD@K\break@args;\endswitch}

%% That's as much as you get to read "in clear" - the rest is private!

\def\cD@BB#1#2{\def#1{\cD@kB{#2\cD@jC}\cD@nG#1\relax}}\let\cD@ZF\relax\ifx
\protect\undefined\let\protect\relax\fi\def\cD@jD#1\repeat{\def\cD@hA{#1}%
\cD@WD}\def\cD@WD{\cD@hA\relax\expandafter\cD@WD\fi}\def\cD@hD#1\repeat{\def
\cD@iA{#1}\cD@XD}\def\cD@XD{\cD@iA\relax\expandafter\cD@XD\fi}\def\cD@iD#1%
\repeat{\def\cD@jA{#1}\cD@YD}\def\cD@YD{\cD@jA\relax\expandafter\cD@YD\fi}%
\def\cD@HE#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y%
\diagram@help@messages\def\cD@GE#1#2{\csname newtoks\endcsname#1#1=%
\expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\cD@PI\cD@PI{%
See the manual}\def\cD@GE#1#2{\let#1\cD@PI}\fi\chardef\cD@dD=1 \chardef\cD@FF
=2 \chardef\cD@TE=5 \chardef\cD@iE=6 \chardef\cD@hE=7 \chardef\cD@FC=9
\dimendef\cD@DF=2 \dimendef\cD@bD=3 \dimendef\cD@eD=4 \dimendef\cD@GF=5
\dimendef\cD@gH=6 \dimendef\cD@KF=8 \dimendef\cD@JF=9 \skipdef\cD@wB=1
\skipdef\cD@VD=2 \skipdef\cD@UD=3 \skipdef\cD@CD=4 \skipdef\cD@eF=5 \skipdef
\cD@EF=6 \skipdef\cD@cD=7 \skipdef\cD@IF=8 \skipdef\cD@HF=9 \countdef\cD@AC=9
\countdef\cD@gC=8 \countdef\cD@MA=7 \def\sdef#1#2{\def#1{#2}}\def\cD@UA#1{%
\expandafter\aftergroup\csname#1\endcsname}\def\cD@CC#1{\expandafter\def
\csname#1\endcsname}\def\cD@nC#1{\expandafter\gdef\csname#1\endcsname}\def
\cD@gI#1{\expandafter\edef\csname#1\endcsname}\def\cD@fD#1#2{\expandafter\let
\csname#1\expandafter\endcsname\csname#2\endcsname}\def\cD@uC#1#2{%
\expandafter\cD@nG\csname#1\expandafter\endcsname\csname#2\endcsname}\def
\cD@bF#1{\csname#1\endcsname}\def\cD@dH#1{\expandafter\show\csname#1%
\endcsname}\def\cD@eH#1{\expandafter\showthe\csname#1\endcsname}\def\cD@cH#1{%
\expandafter\showbox\csname#1\endcsname}\def\cD@KB{Commutative Diagram}\edef
\cD@fE{\string\par}\edef\cD@IC{\string\diagram}\edef\cD@UC{\string\enddiagram
}\edef\cD@xB{\string\\}\def\cD@sH{LaTeX}\def\cD@RG{{\ifnum0=\lq}\fi}\def
\cD@jG{\ifnum0=\lq{\fi}}

\def\catcase#1:{\ifcat\noexpand\cD@NE#1\cD@ZF\expandafter\cD@LC\else
\expandafter\cD@TF\fi}\def\tokcase#1:{\ifx\cD@NE#1\cD@ZF\expandafter\cD@LC
\else\expandafter\cD@TF\fi}\def\cD@LC#1;#2\endswitch{#1}\def\cD@TF#1;{}\let
\endswitch\relax\def\default:#1;#2\endswitch{#1}\def\cD@g{\cD@dA{\cdot}{-}{%
\cdot}\;\;{-}\cD@WC}\cD@CC{rt:dah}{\rlap{\cD@g}}\ifx\at@\undefined\def\at@{@}%
\fi\edef\cD@vH{\cD@gA pt\cD@QC}\cD@CC{\cD@vH>}#1>#2>{\cD@BI\rTo\sp{#1}\sb{#2}%
\cD@BI}\cD@CC{\cD@vH<}#1<#2<{\cD@BI\lTo\sp{#1}\sb{#2}\cD@BI}\cD@CC{\cD@vH)}#1%
)#2){\cD@BI\rTo\sp{#1}\sb{#2}\cD@BI}%%ascii round
\cD@CC{\cD@vH(}#1(#2({\cD@BI\lTo\sp{#1}\sb{#2}\cD@BI}%%ascii brack
\def\cD@uH{\def\endCD{\enddiagram}\cD@CC{\cD@vH A}##1A##2A{\uTo<{##1}>{##2}%
\cD@BI\cD@BI}\cD@CC{\cD@vH V}##1V##2V{\dTo<{##1}>{##2}\cD@BI\cD@BI}\cD@CC{%
\cD@vH=}{\cD@BI\hEq\cD@BI}\cD@CC{\cD@vH\cD@jH}{\vEq\cD@BI\cD@BI}\cD@CC{\cD@vH
\string\vert}{\vEq\cD@BI\cD@BI}\cD@CC{\cD@vH.}{\cD@BI\cD@BI}\let\cD@BI\cD@F}%
\def\cD@FI{\let\tmp\cD@GI\ifcat A\noexpand\cD@ME\else\ifcat=\noexpand\cD@ME
\else\ifcat\relax\noexpand\cD@ME\else\let\tmp\at@\fi\fi\fi\tmp}\def\cD@GI#1{%
\cD@fD{tmp}{\cD@vH\string#1}\ifx\tmp\relax\def\tmp{\at@#1}\fi\tmp}\def\cD@BI{%
}\begingroup\aftergroup\def\aftergroup\cD@xH\aftergroup{\aftergroup\def
\catcode\lq\@\active\aftergroup @\endgroup{\futurelet\cD@ME\cD@FI}}\newcount
\cD@LB\newcount\cD@MB\newcount\cD@NB\newcount\cD@OB\newdimen\cD@tA\newdimen
\cD@uA\cD@HE\cD@GD\cD@L\cD@K\cD@HE\cD@HD\cD@N\cD@M\newdimen\cD@wA\newdimen
\cD@xA\newcount\cD@PB\newcount\cD@VG\newdimen\cD@vA\newbox\cD@qA\cD@HE\cD@LD
\cD@V\cD@U\newcount\cD@NH\newcount\cD@bG\def\cD@PG#1#2{\ifdim#1<#2\relax#1=#2%
\relax\fi}\def\cD@QG#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\cD@SH
\cD@SH=1sp \newdimen\cD@nH\cD@nH\z@\def\cD@TI{\ifdim\cD@nH=1em\else\cD@rH\fi}%
\def\cD@rH{\cD@nH1em\cD@cI\setbox0=\vbox{\everypar{}\mathsurround\z@\noindent
\cD@dA\null\penalty-9993\null\cD@WC\null\endgraf\setbox0=\lastbox\unskip
\unpenalty\setbox1=\lastbox\global\setbox\cD@rD=\hbox{\unhbox0\unskip\unskip
\unpenalty\setbox0=\lastbox}\global\setbox\cD@tD=\hbox{\unhbox1\unskip
\unpenalty\setbox1=\lastbox}}}\newdimen\cD@kH\cD@kH=1true in \divide\cD@kH300
\def\cD@RI#1{\multiply#1\tw@\advance#1\ifnum#1<\z@-\else+\fi\cD@kH\divide#1%
\tw@\divide#1\cD@kH\multiply#1\cD@kH}\def\MapBreadth{\afterassignment\cD@aI
\cD@NI}\newdimen\cD@NI\newdimen\cD@bI\def\cD@aI{\cD@bI\cD@NI\cD@PG\cD@kH{4%
\cD@SH}\cD@QG\cD@kH\p@\cD@RI\cD@bI\ifdim\cD@NI>\z@\cD@PG\cD@bI\cD@kH\fi\cD@TI
}\def\cD@iI#1{\cD@qC\count@\cD@kH#1\ifnum\count@>\z@\divide\cD@kH\count@\fi
\cD@aI}\def\cD@QF{\cD@KF\axisheight\advance\cD@KF-.5\cD@bI\cD@RI\cD@KF\cD@JF-%
\cD@KF\advance\cD@KF\cD@NI}\def\horizhtdp{height\cD@KF depth\cD@JF}\def
\axisheight{\fontdimen22\the\textfont\tw@}\newdimen\PileSpacing\newdimen
\cD@HB\cD@HB\z@\newdimen\cD@IB\newdimen\cD@fB\def\CellSize{\afterassignment
\cD@oB\DiagramCellHeight}\newdimen\DiagramCellHeight\DiagramCellHeight-%
\maxdimen\newdimen\DiagramCellWidth\DiagramCellWidth-\maxdimen\def\cD@oB{%
\DiagramCellWidth\DiagramCellHeight}\def\cD@nI{3em}\newdimen\MapShortFall\def
\MapsAbut{\MapShortFall\z@\cD@OH\z@\cD@PH\z@}\newdimen\cD@EB\cD@EB\z@\def
\newarrowhead{\cD@EH h\cD@mD\cD@oD>}\def\newarrowtail{\cD@EH t\cD@mD\cD@oD>}%
\def\newarrowmiddle{\cD@EH m\cD@mD\cD@oD{}}\def\newarrowfiller{\cD@EH f\cD@DD
\cD@gF-}\def\cD@EH#1#2#3#4#5#6#7#8#9{\cD@CC{r#1:#5}{#2{#6}}\cD@CC{l#1:#5}{#2{%
#7}}\cD@CC{d#1:#5}{#3{#8}}\cD@CC{u#1:#5}{#3{#9}}\cD@gI{-#1:#5}{\expandafter
\noexpand\csname-#1:#4\endcsname\noexpand\cD@CI}\cD@gI{+#1:#5}{\expandafter
\noexpand\csname+#1:#4\endcsname\noexpand\cD@CI}}\cD@BB\cD@CI{\cD@sH\space
diagonals are used unless PostScript is set}\def\defaultarrowhead#1{\edef
\cD@VI{#1}\cD@cI}\def\cD@cI{\cD@YH\cD@VI<>ht\cD@YH\cD@VI<>th}\def\cD@YH#1#2#3%
#4#5{\cD@RF{r#4}{#3}{l#5}{#2}{r#4:#1}\cD@RF{r#5}{#2}{l#4}{#3}{l#4:#1}\cD@RF{d%
#4}{#3}{u#5}{#2}{d#4:#1}\cD@RF{d#5}{#2}{u#4}{#3}{u#4:#1}}\def\cD@RF#1#2#3#4#5%
{\begingroup\aftergroup\cD@DA\cD@UA{#1+:#2}\cD@UA{#1:#2}\cD@UA{#3:#4}\cD@UA{#%
5}\endgroup}\def\cD@DA#1#2#3#4{\csname newbox\endcsname#1\def#2{\copy#1}\def#%
3{\copy#1}\setbox#1=\box\voidb@x}\def\cD@VI{}\cD@cI\def\cD@DA#1#2#3#4{\setbox
#1=#4}\ifx\tenln\nullfont\def\cD@VI{vee}\else\let\cD@VI\cD@sH\fi\def\cD@xG#1#%
2#3{\begingroup\aftergroup\cD@zF\cD@UA{#1#2:#3#3}\cD@UA{#1#2:#3}\endgroup}%
\def\cD@zF#1#2{\def#1{\hbox{\rlap{#2}\kern.4\cD@nH#2}}}\cD@xG rh> \cD@xG lh>
\cD@xG rt> \cD@xG lt> \cD@xG rh< \cD@xG lh< \cD@xG rt< \cD@xG lt< \def\cD@zF#%
1#2{\def#1{\vbox{\vbox to\z@{#2\vss}\nointerlineskip\kern.4\cD@nH#2}}}\cD@xG
dh> \cD@xG uh> \cD@xG dt> \cD@xG ut> \cD@xG dh< \cD@xG uh< \cD@xG dt< \cD@xG
ut< \def\cD@mD#1{\hbox{\mathsurround\z@\offinterlineskip\cD@dA\mkern-1.5mu{#1%
}\mkern-1.5mu\cD@WC}}\def\cD@oD#1{\hbox to\cD@NI{\setbox0=\hbox{%
\offinterlineskip\mathsurround\z@\cD@dA{#1}\cD@WC}\dimen0.5\wd0\advance\dimen
0-.5\cD@bI\cD@RI{\dimen0}\kern-\dimen0\unhbox0\hss}}\def\cD@kD#1{\hbox{%
\mathsurround\z@\cD@dA{#1}\cD@WC}}\def\cD@DD#1{\hbox{\kern-.15\cD@nH\cD@dA{#1%
}\cD@WC\kern-.15\cD@nH}}\def\cD@gF#1{\vbox{\offinterlineskip\kern-.2ex\cD@oD{%
#1}\kern-.2ex}}\def\@fillh{\xleaders\vrule\horizhtdp}\def\@fillv{\xleaders
\hrule width\cD@NI}\cD@fD{rf:-}{@fillh}\cD@fD{lf:-}{@fillh}\cD@fD{df:-}{%
@fillv}\cD@fD{uf:-}{@fillv}\cD@fD{rh:}{null}\cD@fD{rm:}{null}\cD@fD{rt:}{null%
}\cD@fD{lh:}{null}\cD@fD{lm:}{null}\cD@fD{lt:}{null}\cD@fD{dh:}{null}\cD@fD{%
dm:}{null}\cD@fD{dt:}{null}\cD@fD{uh:}{null}\cD@fD{um:}{null}\cD@fD{ut:}{null%
}\cD@fD{+h:}{null}\cD@fD{+m:}{null}\cD@fD{+t:}{null}\cD@fD{-h:}{null}\cD@fD{-%
m:}{null}\cD@fD{-t:}{null}\cD@CC{rf:}{\hbox{\kern1pt}}\cD@CC{lf:}{\hbox{\kern
1pt}}\cD@CC{df:}{\vbox{\kern1pt}}\cD@CC{uf:}{\vbox{\kern1pt}}\cD@CC{+f:}{%
\hbox{\kern1pt}}\cD@CC{-f:}{\vbox{\kern1pt}}\edef\cD@CE{\string\newarrow}\def
\newarrow#1#2#3#4#5#6{\begingroup\edef\@name{#1}\edef\cD@EA{#2}\edef\cD@o{#3}%
\edef\cD@v{#4}\edef\cD@p{#5}\edef\cD@t{#6}\let\cD@s\cD@GH\let\cD@FG\cD@LH\let
\cD@HG\cD@KH\ifx\cD@EA\cD@o\let\cD@EA\empty\fi\ifx\cD@t\cD@p\let\cD@t\empty
\fi\def\cD@AG{r}\def\cD@xF{l}\def\cD@uF{d}\def\cD@CG{u}\def\cD@@G{+}\def
\cD@yF{-}\ifx\cD@o\cD@p\ifx\cD@v\cD@o\let\cD@v\empty\fi\ifx\cD@t\empty\ifx
\cD@o\cD@FD\let\cD@HG\cD@IH\else\let\cD@HG\cD@JH\fi\fi\else\edef\cD@G{\cD@o
\cD@EA}\ifx\cD@G\empty\ifx\cD@v\cD@p\let\cD@v\empty\fi\fi\fi\ifmmode
\aftergroup\cD@MH\else\cD@L\cD@rB rh{head\space\space}\cD@t\cD@rB rf{filler}%
\cD@o\cD@rB rm{middle}\cD@v\ifx\cD@p\cD@o\else\cD@rB rf{filler}\cD@p\fi\cD@rB
rt{tail\space\space}\cD@EA\cD@GD\cD@s\cD@FG\cD@HG\cD@FH l-2+2{lu}{nw}%
\NorthWest\cD@FH r+2+2{ru}{ne}\NorthEast\cD@FH l-2-2{ld}{sw}\SouthWest\cD@FH r%
+2-2{rd}{se}\SouthEast\else\aftergroup\cD@aA\cD@UA{r\@name}\fi\fi\endgroup}%
\def\cD@GH{\cD@HH\cD@AG\cD@xF rl\Horizontal@Map}\def\cD@LH{\cD@HH\cD@uF\cD@CG
du\Vertical@Map}\def\cD@KH{\cD@HH\cD@@G\cD@yF+-\Vector@Map}\def\cD@IH{\cD@HH
\cD@@G\cD@yF+-\Slant@Map}\def\cD@JH{\cD@HH\cD@@G\cD@yF+-\Slope@Map}\catcode
\lq\/=\active\def\cD@HH#1#2#3#4#5{\cD@w#1#3#5t:\cD@EA/f:\cD@o/m:\cD@v/f:\cD@p
/h:\cD@t//\cD@w#2#4#5h:\cD@t/f:\cD@p/m:\cD@v/f:\cD@o/t:\cD@EA//}\def\cD@w#1#2%
#3#4//{\edef\cD@AE{#2}\aftergroup\sdef\cD@UA{#1\@name}\aftergroup{\aftergroup
#3\cD@VA#4//\aftergroup}}\def\cD@VA#1/{\edef\cD@NE{#1}\ifx\cD@NE\empty\else
\cD@UA{\cD@AE#1}\expandafter\cD@VA\fi}\catcode\lq\/=12 \def\cD@FH#1#2#3#4#5#6%
#7#8{\aftergroup\sdef\cD@UA{#6\@name}\aftergroup{\cD@UA{#2\@name}\if#2#4%
\aftergroup\cD@KA\else\aftergroup\cD@JA\fi\cD@UA{#1\@name}%
%% ASCII round brackets and comma (,) appear on the next line
\aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}%
\def\cD@rB#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\cD@K\cD@kB{%
arrow#3 "#4" undefined}\fi}\cD@GE\cD@zC{All five components must be defined
before an arrow.}\cD@GE\cD@oG{\cD@CE, unlike \string\HorizontalMap, is a
declaration.}\def\cD@aA#1{\cD@AB{Arrows \string#1 etc could not be defined}%
\cD@zC}\def\cD@MH{\cD@AB{misplaced \cD@CE}\cD@oG}\cD@HE\ifincommdiag
\incommdiagtrue\incommdiagfalse\newcount\cD@zA\cD@zA=0 \def\cD@kE{\cD@zA6 }%
\def\cD@aB{\cD@zA1 \global\cD@PB1 \cD@nG\cD@aD\empty}\def\cD@aD{}\def\cD@qB#1%
{\relax\cD@VC\edef\cD@aF{#1}\begingroup\cD@pG\else\ifcase\cD@zA\ifmmode\else
\cD@yD\cD@QA0\fi\or\cD@ED5\or\cD@yD\cD@RA5\or\cD@yD\cD@NA5\or\cD@yD\cD@NA5\or
\cD@yD\cD@OA5\or\cD@ED7\or\cD@yD\cD@PA7\fi\fi\endgroup\xdef\cD@aD{#1}}\def
\cD@sB#1#2#3#4#5{\relax\cD@VC\xdef\cD@aF{#4}\begingroup\ifnum\cD@zA<#1
\expandafter\cD@ED\ifcase\cD@zA0\or#2\or#3\else#2\fi\else\ifnum\cD@zA<6 \cD@ZF
\cD@yD\cD@NA#2\else\cD@yD\cD@SA#2\fi\fi\endgroup\cD@nG\cD@aD\cD@aF
\ifincommdiag\let\cD@cC#5\else\let\cD@cC\cD@fF\fi}\def\cD@OF{\global\cD@PB=%
\ifnum\cD@zA<5 1\else2\fi\relax}\def\cD@qE{\cD@zA\cD@PB}\def\cD@ED#1{%
\aftergroup\cD@zA\aftergroup#1\aftergroup\relax}\def\cD@SE{\def\cD@qB##1{%
\relax}\let\cD@sB\cD@PE\let\cD@kE\relax\let\cD@aB\relax\let\cD@OF\relax\let
\cD@qE\relax}\def\cD@PE#1#2#3#4#5{\ifincommdiag\let\cD@cC#5\else\xdef\cD@aF{#%
4}\let\cD@cC\cD@fF\fi}\def\cD@yD#1{\aftergroup#1\aftergroup\relax\cD@ED}\def
\cD@NA{\cD@BD\cD@XA\cD@vC\cD@F}\def\cD@SA{\cD@BD{\cD@QC\cD@XA}\cD@AD\cD@XC
\cD@F}\def\cD@RA{\cD@BD{*\cD@XA}\cD@xC\clubsuit\cD@F}\def\cD@OA{\cD@BD{\cD@XA
*\cD@XA}\cD@xC\cD@F\clubsuit\cD@F}\def\cD@PA{\cD@BD\cD@xB\cD@yC\\}\def\cD@QA{%
\cD@BD\cD@PC\cD@wC\cD@dA}\def\cD@fF{\cD@AB{\cD@aF\space ignored \cD@cE}\cD@@D
}\def\cD@EI{}\def\cD@@I{\cD@AB{maps must never be enclosed in braces}\cD@II}%
\def\cD@cE{outside diagram}\def\cD@yB{\string\HonV, \string\VonH\space and
\string\HmeetV}\cD@GE\cD@vC{The way that horizontal and vertical arrows are
terminated implicitly means\cD@IE that they cannot be mixed with each other or
with \cD@yB.}\cD@GE\cD@AD{\string\pile\space is for parallel horizontal arrows%
; verticals can just be put together in\cD@IE a cell. \cD@yB\space are not
meaningful in a \string\pile.}\cD@GE\cD@xC{The horizontal maps must point to
an object, not each other (I've put in\cD@IE one which you're unlikely to want%
). Use \string\pile\space if you want them parallel.}\cD@GE\cD@yC{Parallel
horizontal arrows must be in separate layers of a \string\pile.}\cD@GE\cD@wC{%
Horizontal arrows may be used \cD@cE s, but must still be in maths.}\cD@GE
\cD@@D{Vertical arrows, \cD@yB\space\cD@cE s don't know where\cD@IE where to
terminate.}\cD@GE\cD@II{This prevents them from stretching correctly.}\def
\cD@BD#1{\cD@AB{"#1" inserted \ifx\cD@aD\empty before \cD@aF\else between
\cD@aD\ifx\cD@aD\cD@aF s\else\space and \cD@aF\fi\fi}}\count@=\year\multiply
\count@12 \advance\count@\month\ifnum\count@>23946 \message{because this one
expired in June 1995!}\expandafter\endinput\fi\def\Horizontal@Map{\cD@qB{%
horizontal map}\cD@EC\cD@BG\cD@mG}\def\cD@BG{\cD@VB-9999 \let\cD@cC\cD@bC
\ifincommdiag\else\cD@TI\skip2\z@ plus 1.5\fontdimen3\textfont0 minus .5%
\fontdimen4\textfont0 \skip4\skip2 \fi\let\cD@vF\@fillh}\def\Vector@Map{%
\cD@GG4}\def\Slant@Map{\cD@GG{\cD@rG255\else6\fi}}\def\Slope@Map{\cD@GG{255}}%
\def\cD@GG#1#2#3#4#5#6{\cD@EC\def\cD@kF{2}\def\cD@nF{2}\global\cD@ZI\let
\Horizontal@Map\cD@tH\def\cD@BH{#1}\def\cD@SI{\cD@yH#2#3#4#5#6}}\def\cD@tH{%
\cD@BG\cD@rF\let\cD@cC\cD@hI\cD@mG}\def\cD@hI{\cD@qG\def\cD@BH{255}\cD@nA
\cD@ZD\cD@VH\else\cD@SI\cD@kG\fi}\def\cD@EC{\begingroup\dimen1=\MapShortFall
\dimen2\cD@IB\dimen5=\MapShortFall\setbox3=\box\voidb@x\setbox6=\box\voidb@x
\setbox7=\box\voidb@x\cD@lC\mathsurround\z@\skip2\z@ plus1fill\relax\skip4%
\skip2 \cD@c} \cD@HE\cD@PD\cD@d\cD@c\def\cD@yH#1#2#3#4#5{\let\cD@EA#1\let
\cD@o#2\let\cD@v#3\let\cD@p#4\let\cD@t#5 \cD@c\ifx\cD@o\cD@p\cD@d\fi}\def
\cD@mG#1#2#3#4#5{\cD@yH#1#2#3#4#5\cD@oC}\def\Vertical@Map{\cD@sB433{vertical
map}\cD@dC\cD@EC\cD@VB-9995 \let\cD@vF\@fillv\cD@mG}\def\break@args{\def
\cD@oC{\cD@cC}\cD@cC\endgroup\aftergroup\cD@EI}\def\cD@aH{\setbox1=\cD@EA
\setbox5=\cD@t\ifvoid3 \ifx\cD@v\null\else\setbox3=\cD@v\fi\fi\cD@zG2\cD@o
\cD@zG4\cD@p}\def\cD@zG#1#2{\ifx#2\cD@vF\setbox#1=\box\voidb@x\else\setbox#1=%
#2\def#2{\xleaders\box#1}\fi}\cD@BB\cD@cF{\string\HorizontalMap, \string
\VerticalMap\space and \string\DiagonalMap\cD@IE are obsolete - use \cD@CE
\space to pre-define maps}\def\HorizontalMap#1#2#3#4#5{\cD@cF\cD@qB{old
horizontal map}\cD@EC\cD@BG\def\cD@EA{\cD@XE{#1}}\cD@VE\cD@o{#2}\def\cD@v{%
\cD@XE{#3}}\cD@VE\cD@p{#4}\def\cD@t{\cD@XE{#5}}\cD@oC}\def\VerticalMap#1#2#3#%
4#5{\cD@cF\cD@sB433{vertical map}\cD@dC\cD@EC\cD@VB-9995 \let\cD@vF\@fillv
\def\cD@EA{\cD@oD{#1}}\cD@YE\cD@o{#2}\def\cD@v{\cD@oD{#3}}\cD@YE\cD@p{#4}\def
\cD@t{\cD@oD{#5}}\cD@oC}\def\DiagonalMap#1#2#3#4#5{\cD@cF\cD@EC\def\cD@BH{4}%
\let\cD@vF\undefined\let\cD@cC\cD@kG\def\cD@kF{2}\def\cD@nF{2}\def\cD@v{%
\cD@kD{#3}}\ifPositiveGradient\let\mv\raise\def\cD@EA{\cD@kD{#5}}\def\cD@o{%
\cD@kD{#4}}\def\cD@p{\cD@kD{#2}}\def\cD@t{\cD@kD{#1}}\else\let\mv\lower\def
\cD@EA{\cD@kD{#1}}\def\cD@o{\cD@kD{#2}}\def\cD@p{\cD@kD{#4}}\def\cD@t{\cD@kD{%
#5}}\fi\cD@oC}\def\cD@FD{-}\def\cD@RC{\empty}\def\cD@VE{\cD@nD\cD@DD\cD@FD
\@fillh}\def\cD@YE{\cD@nD\cD@gF\cD@jH\@fillv}\def\cD@nD#1#2#3#4#5{\def\cD@ME{%
#5}\ifx\cD@ME#2\let#4#3\else\let#4\null\ifx\cD@ME\empty\else\ifx\cD@ME\cD@RC
\else\let#4\cD@ME\fi\fi\fi}\def\cD@XE#1{\hbox{\mathsurround\z@
\offinterlineskip\def\cD@ME{#1}\ifx\cD@ME\empty\else\ifx\cD@ME\cD@RC\else
\cD@dA\mkern-1.5mu{\cD@ME}\mkern-1.5mu\cD@WC\fi\fi}}\def\cD@pC#1#2{\setbox#1=%
\hbox\bgroup\setbox0=\hbox{\cD@dA\labelstyle()\cD@WC}%% ASCII round brackets
\setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\cD@nH\cD@dA\futurelet\cD@NE\cD@q}%
\def\cD@k{\cD@WC\kern.1\cD@nH\egroup\cD@oC}\def\cD@q{\bgroup\aftergroup\cD@k
\labelstyle\ifcat\bgroup\noexpand\cD@NE\expandafter\cD@AI\else\expandafter
\cD@WI\fi}\def\cD@AI{\let\cD@VC\cD@zH\let\cD@ME} \def\cD@WI#1{\let\cD@VC
\missing@label\let\cD@pI\egroup#1\cD@pI}\def\cD@pI{}\def\cD@VC{}\cD@GE\cD@JI{%
The text which has just been read is not allowed within map labels.}\def
\cD@zH{\egroup\cD@AB{missing \cD@QC\space inserted after label}\cD@JI}\def
\missing@label{\egroup\cD@AB{missing label}\cD@JI}\def\cD@iH{\cD@kC\cD@pC6}%
\def\cD@wG{\def\positional@{\cD@L\break@args}\cD@pC7}\def\cD@OI{\cD@pC3}%
\cD@HE\cD@SD\cD@lC\cD@kC\def\cD@uG{\ifPositiveGradient\cD@ZF\expandafter
\cD@iH\else\expandafter\cD@wG\fi}\def\right@label{\ifPositiveGradient\cD@ZF
\expandafter\cD@wG\else\expandafter\cD@iH\fi}\cD@BB\cD@QH{labels as positional
arguments are obsolete}\def\positional@{\cD@QH\cD@SD\cD@ZF\expandafter\cD@iH
\else\expandafter\cD@wG\fi-}\def\cD@oC{\futurelet\cD@NE\switch@arg}\def
\eat@space{\afterassignment\cD@oC\let\cD@NE= }\def\cD@YG{\get@round@pair\cD@r
}\def\cD@r#1#2{\def\cD@kF{#1}\def\cD@nF{#2}\cD@oC}\def\optional@{\let\cD@WA
\cD@oC\get@square@arg\cD@rC}\def\cD@D#1,{\cD@qI#1==,\let\cD@ME\cD@oI\ifx
\@name\cD@YC\let\cD@ME\cD@WA\let\cD@WA\relax\fi\cD@ME}\def\cD@qI#1=#2=#3,{%
\def\@name{#1}\def\cD@FA{#2}\def\cD@wF{#3}}\def\cD@oI{\cD@NC\cD@D}\def\cD@NC{%
\ifx\cD@wF\empty\let\cD@FA\undefined\fi\expandafter\let\expandafter\cD@ME
\csname\cD@UB\@name\endcsname\ifx\cD@ME\relax\cD@kB{option `\@name' undefined%
}\else\cD@ME\fi}\def\cD@UB{cds@}\let\cD@WA\relax\def\cD@qC#1{\ifx\cD@FA
\undefined\cD@kB{option `\@name' needs a value}\else#1\cD@FA\relax\fi}\def
\cD@sC#1#2{\ifx\cD@FA\undefined#1#2\relax\else#1\cD@FA\relax\fi}\def\cD@QI{}%
\def\cD@dI{\cD@lH\edef\cD@QI{\noexpand\cD@WB{\@name\space ignored within maths%
}}}\def\diagramstyle{\cD@TI\cD@u\cD@rC\cD@rC}\let\diagramsstyle\diagramstyle
\cD@HE\cD@OD\cD@b\cD@a\cD@HE\cD@ND\cD@Z\cD@Y\cD@HE\cD@MD\cD@X\cD@W\cD@HE
\cD@ID\cD@P\cD@O\cD@P\cD@HE\cD@JD\cD@R\cD@Q\cD@HE\cD@KD\cD@T\cD@S\cD@HE\cD@qG
\cD@tF\cD@sF\cD@HE\cD@rG\cD@EG\cD@DG\cD@HE\cD@pG\cD@rF\cD@qF\cD@HE\cD@LI
\cD@mH\cD@lH\cD@CC{cds@ }{}\cD@CC{cds@}{}\cD@CC{cds@1em}{\CellSize1\cD@nH}%
\cD@CC{cds@1.5em}{\CellSize1.5\cD@nH}\cD@CC{cds@2em}{\CellSize2\cD@nH}\cD@CC{%
cds@2.5em}{\CellSize2.5\cD@nH}\cD@CC{cds@3em}{\CellSize3\cD@nH}\cD@CC{cds@3.5%
em}{\CellSize3.5\cD@nH}\cD@CC{cds@4em}{\CellSize4\cD@nH}\cD@CC{cds@4.5em}{%
\CellSize4.5\cD@nH}\cD@CC{cds@5em}{\CellSize5\cD@nH}\cD@CC{cds@6em}{\CellSize
6\cD@nH}\cD@CC{cds@7em}{\CellSize7\cD@nH}\cD@CC{cds@8em}{\CellSize8\cD@nH}%
\def\cds@abut{\MapsAbut\dimen1\z@\dimen5\z@}\def\cds@alignlabels{\cD@Q\cD@S}%
\def\cds@amstex{\ifincommdiag\cD@uH\else\def\CD{\diagram[amstex]}%
%%ascii square brackets []
\fi\cD@xH\catcode\lq\@\active}\def\cds@b{\let\cD@iB\cD@gB}\def\cds@balance{%
\let\cD@DB\cD@oA}\let\cds@bottom\cds@b\def\cds@center{\cds@vcentre
\cds@nobalance}\let\cds@centre\cds@center\def\cds@centerdisplay{\cD@P\cD@dI
\cds@balance}\let\cds@centredisplay\cds@centerdisplay\def\cds@defaultsize{%
\cD@sC{\let\cD@nI}{3em}}\def\cds@displayoneliner{\cD@Y}\def\cds@dpi{\cD@iI{1%
truein}}\def\cds@dpm{\cD@iI{100truecm}}\def\cds@eqno{\let\cD@UG\cD@FA}\def
\cds@fixed{}\def\cds@flushleft{\cD@O\cD@dI\cds@nobalance\cD@sC\cD@HB\z@}\def
\cds@h{\cD@qC\DiagramCellHeight}\def\cds@hcenter{\let\cD@DB\cD@CB}\let
\cds@hcentre\cds@hcenter\def\cds@heads{\cD@sC{\let\cD@VI}\cD@VI\cD@cI\cD@qG
\else\ifx\cD@VI\cD@sH\else\cD@CI\fi\fi}\let\cds@height\cds@h\let\cds@hmiddle
\cds@balance\def\cds@inline{\cD@mH\let\cD@QI\empty}\def\cds@inlineoneliner{%
\cD@Z}\cD@CC{cds@l>}{\cD@qC\cD@IB\dimen2\cD@IB}\def\cds@labelstyle{\cD@qC{%
\let\labelstyle}}\def\cds@landscape{}\def\cds@large{\CellSize5\cD@nH}\def
\cds@lefteqno{\cD@X}\def\cds@leftshortfall{\cD@qC{\dimen1 }}\def
\cds@lowershortfall{\ifPositiveGradient\cds@leftshortfall\else
\cds@rightshortfall\fi}\def\cds@loose{\cD@cB}\def\cds@midhshaft{\cD@R}\def
\cds@midshaft{\cD@R}\def\cds@midvshaft{\cD@T}\def\cds@moreoptions{\cD@L}\let
\cds@nobalance\cds@hcenter\def\cds@nohcheck{\cD@SE}\def\cds@nooptions{\def
\cD@C{\cD@aC}}\let\cds@noorigin\cds@nobalance\def\cds@nopixel{\cD@kH4\cD@SH
\cD@TI}\def\cds@noPostScript{\cD@sF\let\cds@PS\empty\let\cds@noPS\empty}\let
\cds@noPS\cD@sF\def\cds@notextflow{\cD@a}\def\cds@noTPIC{\cD@DG}\def
\cds@objectstyle{\cD@qC{\let\objectstyle}}\def\cds@origin{\let\cD@DB\cD@mB}%
\def\cds@p{\cD@qC\PileSpacing}\let\cds@pilespacing\cds@p\def\cds@pixelsize{%
\cD@qC\cD@kH\cD@aI}\def\cds@PostScript{\cD@tF\let\cds@PS\cD@tF\let\cds@noPS
\cD@sF}\let\cds@PS\cD@tF\def\cds@righteqno{\cD@W}\def\cds@rightshortfall{%
\cD@qC{\dimen5 }}\def\cds@s{\cds@height\DiagramCellWidth\DiagramCellHeight}%
\def\cds@scriptlabels{\let\labelstyle\scriptstyle}\def\cds@shortfall{\cD@qC
\MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}\let\cds@size\cds@s\def
\cds@small{\CellSize2\cD@nH}\def\cds@t{\let\cD@iB\cD@jB}\def\cds@textflow{%
\cD@b\cD@dI}\def\cds@thick{\let\cD@gD\tenlnw\cD@sC\MapBreadth{2\fontdimen8%
\textfont3}}\def\cds@thin{\let\cD@gD\tenln\cD@sC\MapBreadth{\fontdimen8%
\textfont3}}\def\cds@tight{\cD@dB}\let\cds@top\cds@t\def\cds@TPIC{\cD@EG}\def
\cds@uppershortfall{\ifPositiveGradient\cds@rightshortfall\else
\cds@leftshortfall\fi}\def\cds@vcenter{\let\cD@iB\cD@XG}\let\cds@vcentre
\cds@vcenter\def\cds@vmiddle{\let\cD@iB\cD@hB}\def\cds@w{\cD@qC
\DiagramCellWidth}\let\cds@width\cds@w\def\diagram{\relax\protect\cD@h}\def
\enddiagram{\protect\cD@wD}\def\cD@h{\cD@RG\cD@LF\incommdiagtrue\cD@C}\def
\cD@C{\cD@K\let\cD@WA\cD@A\cD@u\cD@rC\cD@aC}\def\cD@A{\cD@GD\expandafter\cD@C
\else\expandafter\cD@aC\fi}\def\cD@aC{\let\cD@NE\relax\setbox2=\vbox\bgroup
\cD@sG\cD@n}\def\cD@bE{\cD@iB\cD@DB\nointerlineskip\setbox0=\null\ht0-\cD@HF
\dp0\cD@HF\wd0\cD@EF\box0 \global\cD@vA\cD@cD\global\cD@PB\cD@eB\egroup\cD@yG
\ifnum\cD@PB=1 \else\cD@Y\fi\global\@ignorefalse\cD@LI\leavevmode\fi\ifvmode
\cD@yA\else\ifmmode\cD@QI\cD@nE\else\cD@ND\cD@mH\fi\ifinner\cD@mH\fi\cD@LI
\cD@nE\else\cD@OD\cD@bB\else\cD@yA\fi\fi\fi\fi\cD@QD\global\cD@i\else
\aftergroup\cD@MC\fi\if@ignore\aftergroup\ignorespaces\fi\cD@jG\ignorespaces}%
\def\cD@jB{\advance\cD@HF\dimen1\relax}\def\cD@hB{\advance\cD@HF.5\dimen1%
\relax}\def\cD@gB{}\def\cD@XG{\cD@jB\advance\cD@HF\cD@fB\divide\cD@HF2
\advance\cD@HF-\axisheight\relax}\def\cD@CB{}\def\cD@mB{\cD@cD\z@}\def\cD@oA{%
\ifdim\dimen2>\cD@cD\cD@cD\dimen2 \else\dimen2\cD@cD\cD@EF\dimen0 \advance
\cD@EF\dimen2 \fi}\def\cD@bB{\skip0\z@\relax\loop\skip1\lastskip\ifdim\skip1>%
\z@\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty
\predisplaypenalty\vskip\abovedisplayskip\cD@TG\penalty\postdisplaypenalty
\vskip\belowdisplayskip}\ifdim\skip0=\z@\else\hskip\skip0 \global\@ignoretrue
\fi}\def\cD@yA{\cD@uD\kern-\displayindent\cD@TG\cD@uD\global\@ignoretrue}\def
\cD@TG{\hbox to\hsize{\setbox1=\hbox{\ifx\cD@UG\undefined\else\cD@dA\cD@UG
\cD@WC\fi}\cD@MD\cD@ID\else\advance\cD@vA\wd1 \fi\wd1\z@\box1 \fi\dimen0\wd2
\advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\cD@HB\cD@P\fi
\advance\dimen0\cD@vA\ifdim\dimen0>\z@\cD@WB{wider than the page by \the
\dimen0 }\cD@P\fi\cD@ID\hss\else\cD@PG\cD@vA\cD@HB\fi\cD@nE\hss\kern-\wd1\box
1 }}\def\cD@nE{\kern\cD@vA\box2 }\cD@HE\cD@MI\cD@ZI\cD@YI\def\cD@sG{\cD@TI
\ifdim\DiagramCellHeight=-\maxdimen\DiagramCellHeight\cD@nI\fi\ifdim
\DiagramCellWidth=-\maxdimen\DiagramCellWidth\cD@nI\fi\global\cD@YI\let\cD@EI
\empty\let\cD@BI\cD@F\let\cD@I\cD@YF\let\enddiagram\cD@m\let\\\cD@HC\let\par
\cD@eE\let\cD@VC\empty\let\switch@arg\cD@WG\let\shift\cD@EB\baselineskip
\DiagramCellHeight\lineskip\z@\lineskiplimit\z@\mathsurround\z@\tabskip\z@
\cD@aB}\def\cD@n{\penalty123 \begingroup\aftergroup\cD@TA\halign\bgroup\cD@aB
\cD@cA##\cD@TC\cD@F\cD@F\cD@qE\cD@cA##\cD@TC\cr}\def\cD@m{\cD@VC\cD@DI\crcr
\egroup\global\cD@j\endgroup}\def\cD@TA{\cD@yG\cD@vD\cD@yE\cD@bE}\def\cD@cA{%
\futurelet\cD@NE\cD@H}\def\cD@H{\ifx\cD@NE\cD@TC\cD@ZF\hskip1sp plus 1fil
\relax\let\cD@TC\relax\else\hfil\cD@dA\objectstyle\let\cD@EI\cD@@I\fi}\def
\cD@TC{\cD@VC\relax\cD@OF\global\cD@vA\cD@EB\penalty-9993 \cD@WC\hfil\null
\kern-2\cD@vA\null}\def\cD@HC{\cr}\cD@BB\cD@UE{\string\across\space must be
changed to multiple \cD@XA}\def\across#1{\cD@UE\span\omit\mscount=#1 \cD@hD
\ifnum\mscount>2 \cD@UF\repeat\ignorespaces}\def\cD@UF{\relax\span\omit
\advance\mscount\m@ne}\def\cD@bC{ \cD@GD\cD@c\fi\cD@nA\cD@ZD\cD@oE}\def\cD@nA
{\cD@QF\cD@aH\ifvoid3 \setbox3=\null\ht3\cD@KF\dp3\cD@JF\else\cD@PG{\ht3}%
\cD@KF\cD@PG{\dp3}\cD@JF\fi\dimen3=.5\wd3 \ifdim\dimen3=\z@\cD@PD\else\dimen3%
-\cD@SH\fi\else\cD@c\fi\cD@PG{\dimen2}{\wd7}\cD@PG{\dimen2}{\wd6}%
\ifincommdiag\ifx\cD@o\@fillh\ifx\cD@p\@fillh\ifdim\dimen3>\z@\else\ifdim
\dimen2>81\cD@kH\ifdim\cD@NI>\z@\count@\cD@kI\advance\count@\m@ne\ifnum
\count@<\z@\count@20\let\cD@fI\cD@lI\fi\xdef\cD@kI{\the\count@}\fi\fi\fi\fi
\fi\fi\advance\dimen2-2\dimen3 \dimen4.5\dimen2 \dimen2\dimen4 \advance\dimen
2-\wd1 \advance\dimen4-\wd5 \ifvoid2 \else\cD@PG{\ht3}{\ht2}\cD@PG{\dp3}{\dp2%
}\cD@PG{\dimen2}{\wd2}\fi\ifvoid4 \else\cD@PG{\ht3}{\ht4}\cD@PG{\dp3}{\dp4}%
\cD@PG{\dimen4}{\wd4}\fi\advance\skip2\dimen2 \advance\skip4\dimen4 \cD@PD
\dimen0\dimen5 \advance\dimen0\wd5 \skip3-\skip4 \advance\skip2\skip4 \advance
\skip3-\dimen0 \let\cD@p\empty\else\skip3\z@\relax\dimen0\z@\fi}\def\cD@eI#1{%
\vrule\horizhtdp width#1\dimen@\kern2\dimen@}\def\cD@lI{\rlap{\dimen@\cD@kH
\cD@PG\dimen@{.182\p@}\cD@RI\dimen@\advance\cD@KF\dimen@\cD@eI0\cD@eI0\cD@eI2%
\cD@eI6\cD@eI2\cD@eI0\cD@eI0\cD@eI2\cD@eI6\cD@eI0\cD@eI0\cD@eI2\cD@eI2\cD@eI6%
\cD@eI0\cD@eI0\cD@eI2\cD@eI6\cD@eI2\cD@eI2\cD@eI0\cD@eI0}}\def\cD@kI{10}\def
\cD@fI{}\def\cD@ZD{\offinterlineskip\lineskip.2\cD@nH\ifvoid6 \else\setbox3=%
\vbox{\hbox to2\dimen3{\hss\box6\hss}\box3}\fi\ifvoid7 \else\setbox3=\vtop{%
\box3 \hbox to2\dimen3{\hss\box7\hss}}\fi}\def\cD@oE{\kern\dimen1 \box1 \cD@fI
\cD@o\hskip\skip2 \kern\dimen0 \ifincommdiag\kern\dimen3 \penalty\cD@VB\hskip
\skip3 \null\kern-\dimen3 \else\hskip\skip3 \fi\box3 \cD@p\hskip\skip4 \box5
\kern\dimen5}\def\cD@mI{\ifnum\cD@NH>\cD@bG\cD@PG{\dimen1}\cD@OH\cD@PG{\dimen
5}\cD@OH\else\cD@PG{\dimen1}\cD@PH\cD@PG{\dimen5}\cD@PH\fi}\def\cD@VH{\dimen6
\cD@nF\DiagramCellHeight\dimen7 \cD@kF\DiagramCellWidth\cD@LA\cD@mI\setbox0=%
\hbox{\lower\axisheight\hbox to\dimen2{\incommdiagfalse\cD@oE}}%
\ifPositiveGradient\advance\dimen7-\DiagramCellWidth\else\dimen7%
\DiagramCellWidth\dimen6\z@\multiply\cD@NH\m@ne\fi\advance\dimen6-%
\DiagramCellHeight\setbox0=\rlap{\cD@DC\kern-\dimen7 \lower\dimen6\hbox{%
\cD@fC{\the\cD@bG\space\the\cD@NH\space bturn}\box0 \cD@XI{eturn}}}\ht0\z@\dp
0\z@\raise\axisheight\box0 }\def\cD@tB{\advance\cD@bD-\cD@GF\cD@gH\cD@bD
\advance\cD@gH\cD@DF\ifvoid\cD@hE\ifdim\cD@bD<\z@\cD@zD h\cD@bD<\z@:space
between objects:\cD@rA\cD@gC\fi\else\ifhbox\cD@hE\cD@iF\else\cD@jF\fi\advance
\cD@gH\cD@GF\cD@aE{-\cD@GF}{\box\cD@hE}{\cD@gH}\z@\fi\cD@bD-\cD@eD\cD@gC
\cD@rA\cD@DF\z@}\def\cD@iF{\setbox\cD@hE=\hbox{\unhbox\cD@hE\unskip\unpenalty
\ifdim\cD@DF<\wd\cD@iE\cD@R\else\ifdim\cD@bD<\z@\cD@R\fi\fi\cD@JD\cD@DF.5%
\cD@gH\cD@bD\cD@DF\fi\setbox\cD@iE=\hbox to\cD@DF{\hss\cD@sD\unhbox\cD@iE\hss
}\ifdim\lastkern=\z@\kern-\wd\cD@iE\global\cD@PB\cD@gC\else\global\cD@PB
\cD@AC\fi\cD@qD\box\cD@iE}\ifdim\cD@gH<\wd\cD@hE\cD@zD h\cD@gH<\wd\cD@hE:%
horizontal:\cD@rA\cD@PB\fi\setbox\cD@hE=\hbox to\cD@gH{\unhbox\cD@hE}}\def
\pile{\protect\cD@SF\protect\cD@AA}\def\cD@AA#1{\cD@eA#1\cD@XC}\def\cD@SF{%
\cD@qB{pile}\setbox0=\vtop\bgroup\aftergroup\cD@iC\let\cD@EI\empty\let\pile
\cD@TD\let\cD@XC\cD@l\let\cD@DI\cD@oH\cD@kE\baselineskip.5\PileSpacing
\lineskip.1\cD@nH\relax\lineskiplimit\lineskip\mathsurround\z@\tabskip\z@\let
\\\cD@jE}\def\cD@eA{\cD@nG\cD@aD\empty\halign\bgroup\hfil\cD@dA\let\cD@EI
\cD@@I##\cD@VC\cD@WC\hfil\cD@F\cD@wH##\cr}\cD@GE\cD@HI{pile only allows one
column.}\cD@GE\cD@KI{you left it out!}\def\cD@wH{\cD@XC\cD@F\relax\cD@AB{%
missing \cD@QC\space inserted after \string\pile}\cD@HI}\def\cD@l{\cD@VC\crcr
\egroup\egroup}\def\cD@DI{\cD@VC}\def\cD@oH{\cD@VC\relax\cD@XC\cD@AB{missing
\cD@QC\space inserted between \string\pile\space and \cD@UC}\cD@KI}\def\cD@XC
{\cD@VC}\def\cD@iC{\vbox{\dimen1\dp0 \unvbox0 \setbox0=\lastbox\advance\dimen
1\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=\null\dp0.5\dimen1\ht0-%
\dp0 \box0}\ifincommdiag\cD@ZF\penalty-9998 \fi\xdef\cD@aD{pile}}\def\cD@jE{%
\cr}\def\cD@TD#1{#1}\def\cD@jF{\setbox\cD@hE=\vbox{\unvbox\cD@hE\setbox1=%
\lastbox\setbox0=\box\voidb@x\cD@iD\setbox\cD@hE=\lastbox\ifhbox\cD@hE\cD@OC
\repeat\unvbox0 \global\cD@vA\cD@CD}\cD@CD\cD@vA}\def\cD@OC{\cD@JD\setbox
\cD@hE=\hbox{\unhbox\cD@hE\unskip\setbox\cD@hE=\lastbox\unskip\unhbox\cD@hE}%
\ifdim\cD@gH<\wd\cD@hE\cD@zD h\cD@gH<\wd\cD@hE:map in pile:\cD@rA\cD@gC\else
\setbox\cD@hE=\hbox to\cD@gH{\unhbox\cD@hE}\fi\else\cD@VF\fi\setbox0=\vbox{%
\box\cD@hE\nointerlineskip\ifvoid0 \cD@ZF\box1 \else\vskip\skip0 \unvbox0 \fi
}\skip0=\lastskip\unskip}\def\cD@VF{\penalty7 \noindent\unhbox\cD@hE\unskip
\setbox\cD@hE=\lastbox\unskip\unhbox\cD@hE\endgraf\setbox\cD@iE=\lastbox
\unskip\setbox\cD@iE=\hbox{\unhbox\cD@iE\unskip\unskip\unpenalty}\ifcase
\prevgraf\cd@shouldnt\or\ifdim\cD@gH<\wd\cD@iE\cD@zD h\cD@gH<\wd\cD@hE:object
in pile:\cD@rA\cD@gC\setbox\cD@hE=\hbox to\cD@gH{\hss\unhbox\cD@iE\hss}\else
\setbox\cD@hE=\hbox to\cD@gH{\hss\kern\cD@bD\unhbox\cD@iE\kern\cD@DF\hss}\fi
\or\setbox\cD@hE=\lastbox\unskip\cD@iF\else\cd@shouldnt\fi\unskip\unpenalty}%
\def\cD@dC{\cD@aH\ifvoid3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5%
\cD@NI\else\dimen4\dp3 \dimen3.5\wd3 \setbox3=\cD@oD{\box3}\dp3\dimen4 \ifdim
\ht3=-\dp3 \else\cD@c\fi\fi\setbox0=\null\cD@PD\dimen4=\ht\cD@TE\advance
\dimen4\dp5 \advance\dimen4\dimen1 \let\cD@p\empty\else\dimen4\ht3 \fi\ht0%
\dimen4 \offinterlineskip\setbox8=\vbox spread2ex{\kern\dimen5 \box1 \cD@o
\vfill\box0}\ht8=\z@\setbox9=\vtop spread2ex{\kern-\ht3 \box3 \cD@p\vfill\box
5 \kern\dimen1}\dp9=\z@\dimen0\dimen3 \advance\dimen0-.5\cD@NI\hskip\z@ plus.%
0001fil \box6 \kern\dimen0 \box9 \kern-\cD@NI\box8 \cD@PD\penalty1 \fi\kern
\PileSpacing\kern-\PileSpacing\kern-.5\cD@NI\penalty\cD@VB\null\kern\dimen3
\box7}\def\cD@BF{\ifhbox\cD@zA\cD@WB{clashing verticals}\ht\cD@TE.5\dp\cD@zA
\dp\cD@TE-\ht5 \cD@vB\ht\cD@TE\z@\dp\cD@TE\z@\fi\dimen1\dp\cD@zA\cD@OB
\prevgraf\unvbox\cD@zA\cD@NB\lastpenalty\unpenalty\setbox\cD@zA=\null\setbox
\cD@FF=\hbox{\cD@sD\unhbox\cD@FF\unskip\unpenalty\dimen0\lastkern\unkern
\unkern\unkern\kern\dimen0 \cD@qD}\setbox\cD@dD=\hbox{\unhbox\cD@dD\dimen0%
\lastkern\unkern\unkern\global\cD@vA\lastkern\unkern\kern\dimen0 }\cD@iD
\ifnum\cD@OB>3 \cD@PF\repeat\unskip\unskip\advance\cD@eD.5\wd\cD@zA\advance
\cD@eD\wd\cD@dD\advance\cD@GF.5\wd\cD@zA\advance\cD@GF\wd\cD@FF\setbox\cD@zA=%
\hbox{\kern-\cD@eD\box\cD@dD\unhbox\cD@zA\box\cD@FF\kern-\cD@GF\penalty\cD@NB
\penalty\cD@ZB}\ht\cD@zA\dimen1 \dp\cD@zA\z@\wd\cD@zA\cD@UD\cD@tB}\def\cD@PF{%
\ifdim\wd\cD@dD<\cD@vA\setbox\cD@dD=\hbox to\cD@vA{\cD@sD\unhbox\cD@dD}\fi
\advance\cD@OB\m@ne\setbox\cD@zA=\hbox{\box\cD@dD\unhbox\cD@zA}\unskip\setbox
\cD@dD=\lastbox\setbox\cD@dD=\hbox{\unhbox\cD@dD\unskip\unpenalty\dimen0%
\lastkern\unkern\unkern\global\cD@vA\lastkern\unkern\kern\dimen0 }}\def\cD@vB
{\dimen1\dp\cD@zA\ifhbox\cD@zA\cD@e\else\cD@f\fi\setbox\cD@zA=\vbox{\penalty
\cD@ZB}\dp\cD@zA-\dp\cD@TE\wd\cD@zA\cD@UD}\def\cD@f{\unvbox\cD@zA\cD@NB
\lastpenalty\unpenalty\ifdim\dimen1<\ht\cD@TE\cD@zD v\dimen1<\ht\cD@TE:%
vertical space:\cD@ZB\cD@NB\fi}\def\cD@e{\dimen0=\ht\cD@zA\cD@KD\advance
\dimen0\dimen1 \dimen1.5\dimen0 \dimen0\dimen1 \fi\setbox\cD@zA=\hbox\bgroup
\advance\dimen1-\ht\cD@TE\unhbox\cD@zA\cD@OB\lastpenalty\unpenalty\cD@NB
\lastpenalty\unpenalty\global\cD@wA-\lastkern\unkern\setbox0=\lastbox\cD@iD
\setbox\cD@zA=\hbox{\box0\unhbox\cD@zA}\setbox0=\lastbox\ifhbox0 \cD@XF
\repeat\global\cD@xA-\lastkern\unkern\global\cD@vA\cD@eF\unhbox\cD@zA\egroup
\cD@eF\cD@vA\cD@aE{\cD@xA}{\box\cD@zA}{\cD@wA}{\dimen1}}\def\cD@XF{\setbox0=%
\hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern\ifnum
\lastpenalty=1 \unpenalty\cD@d\else\cD@c\fi\setbox0=\lastbox\dimen6\lastkern
\unkern\setbox1=\lastbox\setbox0=\vbox{\unvbox0\cD@PD\kern-\dimen1\fi}\ifdim
\dimen0<\ht0 \cD@zD v\dimen0<\ht0:upper part of vertical:{\cD@PD\cD@ZB\else
\cD@NB\fi}\cD@OB\else\setbox0=\vbox to\dimen0{\unvbox0}\fi\setbox1=\vtop{%
\unvbox1}\ifdim\dimen1<\dp1 \cD@zD v\dimen1<\dp1:lower part of vertical:%
\cD@ZB\cD@NB\else\setbox1=\vtop to\dimen1{\unvbox1}\fi\box1 \kern\dimen6 \box
0 \kern\dimen7 \cD@qD\global\cD@vA\cD@eF\egroup\cD@eF\cD@vA\relax}\countdef
\cD@lA=14 \newcount\cD@pA\newcount\cD@eB\newcount\cD@ZB\let\cD@XB\insc@unt
\newcount\cD@rA\newcount\cD@FB\let\cD@GB\cD@eB\newcount\cD@YB\def\cD@vD{%
\cD@pA=\cD@lA\advance\cD@pA1 \cD@eB=\cD@pA\dimen1\z@\skip0\z@\count@=%
\insc@unt\advance\count@\cD@lA\divide\count@2 \cD@jD\setbox0=\lastbox\ifhbox0
\cD@AH\advance\cD@eB1 \skip0=\lastskip\unskip\repeat\cD@YB\cD@GB\advance
\cD@YB1 \setbox\cD@GB=\vbox{}\ifnum\lastpenalty=123 \cD@ZF\unpenalty\else
\cD@WB{some rows remain unreformatted.}\cd@shouldnt\fi\count@\cD@eB\advance
\count@\m@ne\cD@fB\ht\count@}\def\cD@AH{\cD@HF\dp0 \advance\cD@HF\skip0
\advance\cD@VD\cD@HF\cD@RD\ifnum\cD@eB>\cD@pA\cD@VD\DiagramCellHeight\cD@HF
\cD@VD\advance\cD@HF-\cD@IF\fi\fi\dp0\cD@HF\ifnum\cD@eB>\count@\box0 \penalty
1 \cD@WB{The diagram has too many rows, so...}\else\cD@IF\ht0 \cD@VD\cD@IF
\setbox\cD@eB=\box0 \fi}\def\cD@yE{\cD@kA\cD@QF\setbox\cD@FC=\hbox{\cD@dA A%
\cD@qH f\cD@pH f\cD@WC}\cD@CD\z@\cD@eF\z@\cD@EF\z@\cD@cD\z@\cD@ZB=\cD@eB
\cD@VD\z@\cD@wB\z@\cD@jD\ifnum\cD@ZB>\cD@pA\advance\cD@ZB\m@ne\cD@IF\ht\cD@ZB
\cD@HF\dp\cD@ZB\advance\cD@VD\cD@IF\cD@XH\cD@@E\advance\cD@wB\cD@VD\cD@BC
\cD@AF\cD@mA\ht\cD@ZB\cD@IF\dp\cD@ZB\cD@HF\nointerlineskip\box\cD@ZB\cD@VD
\cD@HF\repeat\cD@uB\nointerlineskip\box\cD@ZB\cD@BE\cD@CD\DiagramCellWidth{%
horizontal}\cD@BE\cD@eF\DiagramCellHeight{vertical}\cD@zA\cD@GB\advance\cD@zA
1 \dimen0\z@\cD@hD\ifnum\cD@zA<\cD@XB\advance\dimen0\wd\cD@zA\advance\cD@zA1
\repeat\cD@KF\axisheight\dimen1\cD@wB\advance\dimen1-\cD@fB\dimen7\cD@EF
\advance\dimen7-\dimen0 \advance\cD@eB-\cD@pA\advance\cD@XB-\cD@FB}\count@
\year\multiply\count@12 \advance\count@\month\ifnum\count@>23947 \loop\iftrue
\message{gone July 1995!}\repeat\fi\def\cD@uB{\cD@IF-\cD@VD\cD@HF\cD@VD
\setbox\cD@TE=\null\dp\cD@TE\cD@VD\ht\cD@TE-\cD@VD\cD@eD\z@\cD@GF\z@\cD@FB
\cD@XB\advance\cD@FB-\cD@YB\advance\cD@FB\cD@GB\cD@rA\cD@XB\cD@zA\cD@YB\cD@hD
\ifnum\cD@rA>\cD@FB\advance\cD@rA\m@ne\advance\cD@zA\m@ne\cD@UD\wd\cD@zA
\setbox\cD@rA=\box\voidb@x\cD@vB\repeat\cD@mA\ht\cD@ZB\cD@IF\dp\cD@ZB\cD@HF}%
\def\cD@BE#1#2#3{\ifdim#1>.1\cD@nH\cD@uA#2\relax\advance\cD@uA#1\relax
\advance\cD@uA.9\cD@nH\count@\cD@uA\divide\count@\cD@nH\cD@WB{increase \string
#2 to \the\count@ em}\fi}\def\cD@XH{\cD@rA=\cD@XB\penalty4 \noindent\unhbox
\cD@ZB\cD@hD\unskip\setbox0=\lastbox\ifhbox0 \advance\cD@rA\m@ne\setbox\cD@rA
=\box0 \repeat\endgraf\unskip\ifnum\lastpenalty=4 \unpenalty\else\cD@WB{%
\string\cD@XH\space didn't clear stack}\cd@shouldnt\fi\cD@FB=\cD@rA} \def
\cD@@E{\advance\cD@rA\cD@YB\advance\cD@rA-\cD@GB\ifnum\cD@rA<\cD@XB\count@
\cD@rA\advance\count@\m@ne\dimen0=\wd\count@\cD@hD\ifnum\cD@rA<\cD@XB\cD@xD
\dimen0\wd\cD@rA\advance\cD@rA1 \advance\cD@YB1 \repeat\fi}\cD@HE\cD@RD\cD@dB
\cD@cB\def\cD@xD{\setbox\cD@YB=\vbox{}\dp\cD@YB=\cD@wB\advance\dimen0\wd
\cD@rA\divide\dimen0 2 \cD@PG{\dimen0}\DiagramCellWidth\cD@RD\wd\cD@YB
\DiagramCellWidth\else\wd\cD@YB\dimen0 \cD@UI\fi}\def\cD@UI{\cD@MI\advance
\dimen0-\DiagramCellWidth\ifdim\dimen0>2\MapShortFall\cD@WB{increase width and
use "tight" option}\let\cD@UI\empty\fi\else\let\cD@UI\empty\fi}\def\cD@BC{%
\cD@zA\cD@GB\cD@hD\ifnum\cD@zA<\cD@YB\dimen0\dp\cD@zA\advance\dimen0\cD@VD\dp
\cD@zA\dimen0 \advance\cD@zA1 \repeat}\def\cD@aE#1#2#3#4{\ifnum\cD@rA<\cD@XB
\cD@tA=#1\relax\setbox\cD@rA=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3%
\relax\ifhbox\cD@rA\unhbox\cD@rA\dimen9=\lastkern\unkern\advance\dimen9-%
\cD@tA\ifdim\dimen9=\z@\else\kern\dimen9 \fi\fi\raise\dimen7\box0 \kern-%
\dimen8 }\ifnum\cD@rA=\cD@FB\cD@PG\cD@cD\cD@tA\fi\else\cd@shouldnt\fi}\def
\cD@mA{\setbox\cD@ZB=\hbox{\cD@rA\cD@FB\cD@zA\cD@GB\cD@tA\z@\cD@hD\cD@CF
\advance\cD@rA1 \ifnum\cD@rA<\cD@XB\advance\cD@zA1 \advance\cD@tA\wd\cD@zA
\repeat}\cD@PG\cD@EF{\wd\cD@ZB}\wd\cD@ZB\z@}\def\cD@CF{\ifhbox\cD@rA\advance
\cD@tA-\wd\cD@rA\ifdim\cD@tA=\z@\else\kern\cD@tA\fi\unhbox\cD@rA\box\cD@rA
\cD@tA=\lastkern\unkern\fi}\def\cD@AF{\setbox\cD@hE=\box\voidb@x\cD@zA=\cD@YB
\cD@rA\cD@XB\cD@zA\cD@GB\advance\cD@zA\cD@rA\advance\cD@zA-\cD@FB\count@
\cD@XB\advance\count@\m@ne\cD@bD.5\wd\count@\cD@MA\m@ne\cD@hD\ifnum\cD@rA>%
\cD@FB\advance\cD@zA\m@ne\advance\cD@rA\m@ne\cD@UD\wd\cD@zA\cD@uE\wd\cD@zA=%
\cD@UD\advance\cD@bD\cD@UD\repeat\cD@eD\cD@UD\cD@GF-\cD@UD\cD@tB}\newcount
\cD@VB\def\cD@I{}\def\cD@kA{\hsize\z@\rightskip\z@ plus1fil minus\maxdimen
\parfillskip\z@\linepenalty9000 \looseness0 \hfuzz\maxdimen\hbadness10000
\clubpenalty0 \widowpenalty0 \displaywidowpenalty0 \interlinepenalty0
\predisplaypenalty0 \postdisplaypenalty0 \interdisplaylinepenalty0
\interfootnotelinepenalty0 \floatingpenalty0 \brokenpenalty0 \everypar{}%
\leftskip\z@\parskip\z@\parindent\z@\pretolerance10000 \tolerance10000
\hyphenpenalty10000 \exhyphenpenalty10000 \binoppenalty10000 \relpenalty10000
\adjdemerits0 \doublehyphendemerits0 \finalhyphendemerits0 \prevdepth\z@}%
\newbox\cD@tD\newbox\cD@rD\def\cD@sD{\unhcopy\cD@tD}\def\cD@qD{\unhcopy\cD@rD
}\def\cD@WF{\hbox{}\penalty1\nointerlineskip}\def\cD@uE{\penalty5 \noindent
\setbox\cD@TE=\null\cD@eD\z@\cD@GF\z@\ifnum\cD@rA<\cD@XB\ht\cD@TE\ht\cD@rA\dp
\cD@TE\dp\cD@rA\unhbox\cD@rA\skip0=\lastskip\unskip\else\cD@pF\skip0=\z@\fi
\endgraf\ifcase\prevgraf\cD@wE\or\or\cD@zE\else\cD@vE\fi\unskip\unpenalty}%
\def\cD@zE{\cD@tC\setbox\cD@FF=\lastbox\setbox\cD@FF=\hbox{\unhbox\cD@FF
\unskip\unpenalty}\unskip\ifdim\ht\cD@FF>\ht\cD@FC\setbox\cD@TE=\copy\cD@FF
\else\ifdim\dp\cD@FF>\dp\cD@FC\setbox\cD@TE=\copy\cD@FF\else\setbox\cD@TE=%
\hbox{\vrule height\ht\cD@FF depth\dp\cD@FF width\wd\cD@FF}\dp\cD@TE\dp\cD@FF
\fi\fi\advance\cD@eD.5\wd\cD@FF\advance\cD@GF.5\wd\cD@FF\setbox\cD@FF=\hbox{%
\unhbox\cD@FF\cD@qD}\cD@aE\cD@eD{\box\cD@FF}\cD@GF\z@\cD@vB\cD@tB}\def\cD@tC{%
\ifnum\cD@MA>0 \cD@EB.5\dimen0 \cD@MA-\cD@MA\else\cD@MA0 \cD@EB\z@\fi\setbox
\cD@TE=\lastbox\setbox\cD@TE=\hbox{\unhbox\cD@TE\unskip\unskip\unpenalty
\setbox0=\lastbox\global\cD@vA\lastkern\unkern}\advance\cD@EB-.5\cD@vA\unskip
\setbox\cD@TE=\null\cD@GF\cD@EB\cD@eD-\cD@EB}\def\cD@ZA{\ht\cD@TE\cD@KF\dp
\cD@TE\cD@JF}\def\cD@vE{\cD@tC\setbox\cD@FF=\lastbox\unskip\setbox\cD@dD=%
\lastbox\unskip\setbox\cD@dD=\hbox{\unhbox\cD@dD\unskip\global\cD@PB
\lastpenalty\unpenalty}\advance\cD@PB9999 \ifcase\cD@PB\cD@xE\or\cD@@F\or
\cD@sE\or\cD@tE\or\cD@BF\or\cD@rE\else\cd@shouldnt\fi}\def\cD@xE{\cD@CA
\setbox\cD@hE=\box\cD@dD\setbox\cD@iE=\box\cD@FF}\def\cD@@F{\cD@CA\setbox
\cD@dD=\hbox{\unhbox\cD@dD\unskip\unpenalty\global\setbox\cD@qA=\lastbox}%
\setbox\cD@hE=\box\cD@qA}\def\cD@CA{\cD@vB\ifvoid\cD@hE\else\cD@WB{Clashing
horizontal arrows}\cD@GF.5\cD@bD\cD@eD-\cD@GF\cD@tB\cD@GF\z@\cD@eD\z@\fi
\cD@DF\cD@bD\advance\cD@DF-\cD@GF\cD@bD-\cD@eD\cD@AC\cD@rA}\def\cD@wE{\cD@EB
\z@\cD@ZA\ifdim\skip0>\z@\cD@ZF\cD@MA0 \else\ifnum\cD@MA<1 \cD@MA0 \dimen0\z@
\fi\advance\cD@MA1 \advance\dimen0\cD@UD\fi}\def\VonH{\cD@sA46\VonH{.5\cD@NI}%
}\def\HonV{\cD@sA57\HonV{.5\cD@NI}}\def\HmeetV{\cD@sA44\HmeetV{-\MapShortFall
}}\def\cD@sA#1#2#3#4{\cD@sB34#1{\string#3}\cD@ZC\cD@VB-999#2 \dimen0=#4\cD@KF
\dimen0\advance\cD@KF\axisheight\cD@JF\dimen0\advance\cD@JF-\axisheight\cD@u
\cD@@C\cD@cC}\def\cD@@C#1{\setbox0=\hbox{\cD@dA#1\cD@WC}\dimen0.5\wd0 \cD@KF
\ht0 \cD@JF\dp0 \cD@cC}\def\cD@ZC{\setbox0=\null\ht0=\cD@KF\dp0=\cD@JF\wd0=%
\dimen0 \copy0\penalty\cD@VB\box0 }\def\cD@sE{\cD@zB\cD@vB}\def\cD@tE{\cD@zB
\cD@tB}\def\cD@rE{\cD@zB\cD@vB\cD@tB}\def\cD@zB{\setbox\cD@FF=\hbox{\unhbox
\cD@FF}\setbox\cD@dD=\hbox{\unhbox\cD@dD\global\setbox\cD@qA=\lastbox}\ht
\cD@TE\ht\cD@qA\dp\cD@TE\dp\cD@qA\advance\cD@eD\wd\cD@qA\advance\cD@GF\wd
\cD@FF}\cD@HE\ifPositiveGradient\cD@KA\cD@JA\cD@KA\cD@HE\ifClimbing\cD@HA
\cD@GA\cD@HA\newcount\DiagonalChoice\DiagonalChoice\m@ne\ifx\tenln\nullfont
\cD@ZF\def\cD@vG{\cD@RE\ifPositiveGradient/\else\cD@dA\backslash\cD@WC\fi}%
\else\def\cD@vG{\cD@gD\char\count@}\fi\let\cD@gD\tenln\def\cD@OG#1{\hbox{#1%
\cD@gD\ifPositiveGradient\else\advance\count@64 \fi\char\count@}}\def\cD@NG{%
\cD@OG{\count@\cD@bG\multiply\count@8\advance\count@-9\advance\count@\cD@NH}}%
\def\cD@LG{\cD@OG{\ifcase\DiagonalChoice\cD@KG\or\cD@JG\or\cD@JG\else\cD@KG
\fi}}\def\cD@KG{\ifnum\cD@bG=\z@\count@\rq33 \else\count@\cD@bG\multiply
\count@\sixt@@n\advance\count@-9\advance\count@\cD@NH\advance\count@\cD@NH\fi
}\def\cD@JG{\count@\rq\ifcase\cD@NH55\or\ifcase\cD@bG66\or22\or52\or61\or72%
\fi\or\ifcase\cD@bG66\or25\or22\or63\or52\fi\or\ifcase\cD@bG66\or16\or36\or22%
\or76\fi\or\ifcase\cD@bG66\or27\or25\or67\or22\fi\fi\relax}\def\cD@iG#1{\hbox
{#1\setbox0=\cD@OG{#1}\ifPositiveGradient\else\raise.3\ht0\fi\copy0 \kern-.7%
\wd0 \ifPositiveGradient\raise.3\ht0\fi\box0}}\def\cD@tG#1{\hbox{\setbox0=#1%
\kern-.75\wd0 \vbox to.25\ht0{\ifPositiveGradient\else\vss\fi\box0
\ifPositiveGradient\vss\fi}}}\def\cD@WH#1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox
to.25\ht0{\ifPositiveGradient\vss\fi\box0 \ifPositiveGradient\else\vss\fi}%
\kern-.75\dimen0 }}\cD@CC{+h:>}{\cD@OG\cD@JG}\cD@CC{-h:>}{\cD@OG\cD@KG}\cD@fD
{+t:<}{-h:>}\cD@fD{-t:<}{+h:>}\cD@CC{+t:>}{\cD@tG{\cD@OG\cD@JG}}\cD@CC{-t:>}{%
\cD@WH{\cD@OG\cD@KG}}\cD@fD{+h:<}{-t:>}\cD@fD{-h:<}{+t:>}\cD@CC{+h:>>}{\cD@iG
\cD@JG}\cD@CC{-h:>>}{\cD@iG\cD@KG}\cD@fD{+t:<<}{-h:>>}\cD@fD{-t:<<}{+h:>>}%
\cD@CC{+t:>>}{\cD@tG{\cD@iG\cD@JG}}\cD@CC{-t:>>}{\cD@WH{\cD@iG\cD@KG}}\cD@fD{%
+h:<<}{-t:>>}\cD@fD{-h:<<}{+t:>>}\cD@CC{+f:-}{\cD@rG\null\else\cD@NG\fi}%
\cD@fD{-f:-}{+f:-}\def\cD@hG#1#2{\vbox to#1{\vss\hbox to#2{\hss.\hss}\vss}}%
\def\hfdot{\cD@hG{2\axisheight}{.7em}}%%
\def\vfdot{\cD@hG{1.46ex}\z@}\def\cD@MG{\hbox{\dimen0=.3\cD@nH\dimen1\dimen0
\ifnum\cD@NH>\cD@bG\cD@fG{\dimen1}\else\cD@DH{\dimen0}\fi\cD@hG{\dimen0}{%
\dimen1}}}\newarrowfiller{.}\hfdot\hfdot\vfdot\vfdot\cD@CC{+f:.}{\cD@MG\cD@DG
}\cD@fD{-f:.}{+f:.}\def\use@line@char#1{\hbox\bgroup\def\cD@ME{#1\egroup}%
\afterassignment\cD@ME%%
\count@=\rq}\def\lnchar{\use@line@char\cD@vG}\let\laf\lnchar\let\lah\lnchar
\def\lad{\use@line@char\xlad}\def\xlad{\setbox2=\hbox{\cD@vG}\setbox0=\hbox to%
.3\wd2{\hss.\hss}\dimen0=\ht0 \advance\dimen0-\dp0 \dimen1=.3\ht2 \advance
\dimen1-\dimen0 \dp0=.5\dimen1 \dimen1=.3\ht2 \advance\dimen1\dimen0 \ht0=.5%
\dimen1 \raise\dp0\box0}\def\lahh{\use@line@char\xlahh}\def\lat{%
\use@line@char\xlat}\def\xlat{\setbox0=\hbox{\cD@vG}\dimen0=\ht0 \setbox1=%
\hbox to.25\wd0{\ifcase\DiagonalChoice\box0\hss\or\hss\box0 \or\hss\box0 \or
\box0\hss\fi}\vbox to.25\dimen0{\ifClimbing\box1\vss\else\vss\box1\fi\kern\z@
}}\def\xlahh{\setbox0=\hbox{\cD@vG}\ifPositiveGradient\cD@ZF\copy0 \kern-.7%
\wd0 \mv.3\ht0\box0 \else\ifClimbing\cD@ZF\copy0 \kern-.7\wd0 \mv.3\ht0\box0
\else\mv-.3\ht0\copy0 \kern-.7\wd0 \box0 \fi\fi}\def\cD@IG#1{\setbox#1=\hbox{%
\dimen5\dimen#1 \setbox8=\box#1 \dimen1\wd8 \count@\dimen5 \divide\count@
\dimen1 \ifnum\count@=0 \box8 \ifdim\dimen5<.95\dimen1 \cD@kB{diagonal line
too short}\fi\else\dimen3=\dimen5 \advance\dimen3-\dimen1 \divide\dimen3%
\count@\dimen4\dimen3 \cD@DH{\dimen4}\ifPositiveGradient\multiply\dimen4\m@ne
\fi\dimen6\dimen1 \advance\dimen6-\dimen3 \loop\raise\count@\dimen4\copy8
\ifnum\count@>0 \kern-\dimen6 \advance\count@\m@ne\repeat\fi}}\def\cD@@H#1{%
\cD@rG\cD@hH{#1}\else\cD@IG{#1}\fi}\newdimen\cD@OH\cD@OH1.8ex \newdimen\cD@PH
\cD@PH1em \def\cD@kG{\dimen6=\cD@nF\DiagramCellHeight\dimen7=\cD@kF
\DiagramCellWidth\cD@ZH\ifnum\cD@NH>0 \ifnum\cD@bG>0 \cD@oF\else\aftergroup
\cD@dG\fi\else\aftergroup\cD@cG\fi}\def\cD@dG{\cD@AB{diagonal map is nearly
vertical}\cD@SG}\def\cD@cG{\cD@AB{diagonal map is nearly horizontal}\cD@SG}%
\cD@GE\cD@SG{Use an orthogonal map instead}\def\cD@oF{\cD@aH\dimen3\dimen7%
\dimen7\dimen6\cD@fG{\dimen7}\advance\dimen3-\dimen7 \cD@mI\ifnum\cD@NH>%
\cD@bG\advance\dimen6-\dimen1\advance\dimen6-\dimen5 \cD@fG{\dimen1}\cD@fG{%
\dimen5}\else\dimen0\dimen1\advance\dimen0\dimen5\cD@DH{\dimen0}\advance
\dimen6-\dimen0 \fi\dimen2.5\dimen7\advance\dimen2-\dimen1 \dimen4.5\dimen7%
\advance\dimen4-\dimen5 \ifPositiveGradient\dimen0\dimen5 \advance\dimen1-%
\cD@kF\DiagramCellWidth\advance\dimen1\DiagramCellWidth\setbox6=\llap{\unhbox
6\kern.1\ht2}\setbox7=\rlap{\kern.1\ht2\unhbox7}\else\dimen0\dimen1 \advance
\dimen1-\DiagramCellWidth\setbox7=\llap{\unhbox7\kern.1\ht2}\setbox6=\rlap{%
\kern.1\ht2\unhbox6}\fi\setbox6=\vbox{\box6\kern.1\wd2}\setbox7=\vtop{\kern.1%
\wd2\box7}\cD@DH{\dimen0}\advance\dimen0-\axisheight\advance\dimen0-%
\DiagramCellHeight\dimen5-\dimen0 \advance\dimen0\dimen6 \advance\dimen1.5%
\dimen3 \ifdim\wd3>\z@\ifdim\ht3>-\dp3\cD@c\fi\fi\dimen3\dimen2 \dimen7\dimen
2\advance\dimen7\dimen4 \ifvoid3 \else\cD@PD\else\dimen8\ht3\advance\dimen8-%
\axisheight\cD@fG{\dimen8}\cD@QG{\dimen8}{.5\wd3}\dimen9\dp3\advance\dimen9%
\axisheight\cD@fG{\dimen9}\cD@QG{\dimen9}{.5\wd3}\ifPositiveGradient\advance
\dimen2-\dimen9\advance\dimen4-\dimen8 \else\advance\dimen4-\dimen9\advance
\dimen2-\dimen8 \fi\fi\advance\dimen3-.5\wd3 \fi\dimen9=\cD@nF
\DiagramCellHeight\advance\dimen9-2\DiagramCellHeight\cD@PD\advance\dimen2%
\dimen4 \cD@@H{2}\dimen2-\dimen0\advance\dimen2\dp2 \else\cD@@H{2}\cD@@H{4}%
\ifPositiveGradient\dimen2-\dimen0\advance\dimen2\dp2 \dimen4\dimen5\advance
\dimen4-\ht4 \else\dimen4-\dimen0\advance\dimen4\dp4 \dimen2\dimen5\advance
\dimen2-\ht2 \fi\fi\setbox0=\hbox to\z@{\kern\dimen1 \ifvoid1 \else
\ifPositiveGradient\advance\dimen0-\dp1 \lower\dimen0 \else\advance\dimen5-%
\ht1 \raise\dimen5 \fi\rlap{\unhbox1}\fi\raise\dimen2\rlap{\unhbox2}\ifvoid3
\else\lower.5\dimen9\rlap{\kern\dimen3\unhbox3}\fi\kern.5\dimen7 \lower.5%
\dimen9\box6 \lower.5\dimen9\box7 \kern.5\dimen7 \cD@PD\else\raise\dimen4%
\llap{\unhbox4}\fi\ifvoid5 \else\ifPositiveGradient\advance\dimen5-\ht5 \raise
\dimen5 \else\advance\dimen0-\dp5 \lower\dimen0 \fi\llap{\unhbox5}\fi\hss}\ht
0=\axisheight\dp0=-\ht0\box0 }\def\NorthWest{\cD@JA\cD@HA\DiagonalChoice0 }%
\def\NorthEast{\cD@KA\cD@HA\DiagonalChoice1 }\def\SouthWest{\cD@KA\cD@GA
\DiagonalChoice3 }\def\SouthEast{\cD@JA\cD@GA\DiagonalChoice2 }\def\cD@fC#1{%
\expandafter\cD@XI{#1}}\cD@BB\cD@dF{output is PostScript dependent}\def\cD@DC
{\cD@XI{/bturn {gsave currentpoint currentpoint translate 4 2 roll neg exch
atan rotate neg exch neg exch translate } def /eturn {currentpoint grestore
moveto} def}\let\cD@DC\relax}\def\cD@bH#1{\count@#1\relax\multiply\count@7%
\advance\count@16577\divide\count@33154 }\def\cD@lG#1{\expandafter\special{#1%
}} \def\cD@hH#1{\setbox#1=\hbox{\dimen0\dimen#1\cD@DH{\dimen0}\cD@bH{\dimen0}%
\setbox0=\null\ifPositiveGradient\count@-\count@\ht0\dimen0 \else\dp0\dimen0
\fi\box0 \cD@LB\count@\cD@bH\cD@NI\cD@lG{pn \the\count@}\cD@lG{pa 0 0}\cD@bH{%
\dimen#1}\cD@lG{pa \the\count@\space\the\cD@LB}\cD@lG{fp}\kern\dimen#1}}\def
\cD@LA{\cD@ZH\begingroup\ifdim\dimen7<\dimen6 \dimen2=\dimen6 \dimen6=\dimen7
\dimen7=\dimen2 \count@\cD@NH\cD@NH\cD@bG\cD@bG\count@\else\dimen2=\dimen7 \fi
\ifdim\dimen6>.01\p@\cD@BA\global\cD@vA\dimen0 \else\global\cD@vA\dimen7 \fi
\endgroup\dimen2\cD@vA}\def\cD@BA{\cD@fH\ifdim\dimen7>1.73\dimen6 \divide
\dimen2 4 \multiply\cD@bG2 \else\dimen2=0.353553\dimen2 \advance\cD@NH-\cD@bG
\multiply\cD@bG4 \fi\dimen0=4\dimen2 \cD@CH4\cD@CH{-2}\cD@CH2\cD@CH{-2.5}}%
\def\cD@UH{\begingroup\count@\dimen0 \dimen2 45pt \divide\count@\dimen2 \ifdim
\dimen0<\z@\advance\count@\m@ne\fi\ifodd\count@\advance\count@1\cD@L\else
\cD@K\fi\advance\dimen0-\count@\dimen2 \cD@GD\multiply\dimen0\m@ne\fi\ifnum
\count@<0 \multiply\count@-7 \fi\dimen3\dimen1 \dimen6\dimen0 \dimen7 3754936%
sp \ifdim\dimen0<6\p@\def\cD@BH{4000}\fi\cD@ZH\dimen2\dimen3\cD@DH{\dimen2}%
\cD@fH\multiply\cD@bG-6 \dimen0\dimen2 \cD@CH1\cD@CH{0.3}\dimen1\dimen0 \dimen
2\dimen3 \dimen0\dimen3 \cD@CH3\cD@CH{1.5}\cD@CH{0.3}\divide\count@2 \cD@GD
\multiply\dimen1\m@ne\fi\ifodd\count@\dimen2\dimen1\dimen1\dimen0\dimen0-%
\dimen2 \fi\divide\count@2 \ifodd\count@\multiply\dimen0\m@ne\multiply\dimen1%
\m@ne\fi\global\cD@vA\dimen0\global\cD@wA\dimen1\endgroup\dimen6\cD@vA\dimen7%
\cD@wA}\def\cD@BH{255}\def\cD@ZH{\begingroup\ifdim\dimen7<\dimen6 \dimen9%
\dimen7\dimen7\dimen6\dimen6\dimen9\cD@L\else\cD@K\fi\dimen2\z@\dimen3\cD@SH
\dimen4\cD@SH\dimen0\z@\dimen8=\cD@BH\cD@SH\cD@gG\global\cD@PB\dimen\cD@GD0%
\else3\fi\global\cD@VG\dimen\cD@GD3\else0\fi\endgroup\cD@NH\cD@PB\cD@bG\cD@VG
}\def\cD@gG{\count@\dimen6 \divide\count@\dimen7 \advance\dimen6-\count@
\dimen7 \dimen9\dimen4 \advance\dimen9\count@\dimen0 \ifdim\dimen9>\dimen8
\cD@ZG\else\cD@aG\ifdim\dimen6>\z@\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen
9 \expandafter\expandafter\expandafter\cD@gG\fi\fi}\def\cD@ZG{\ifdim\dimen0=%
\z@\ifdim\dimen9<2\dimen8 \dimen0\dimen8 \fi\else\advance\dimen8-\dimen4
\divide\dimen8\dimen0 \ifdim\count@\cD@SH<2\dimen8 \count@\dimen8 \dimen9%
\dimen4 \advance\dimen9\count@\dimen0 \cD@aG\fi\fi}\def\cD@aG{\dimen4\dimen0
\dimen0\dimen9 \advance\dimen2\count@\dimen3 \dimen9\dimen2 \dimen2\dimen3
\dimen3\dimen9 }\def\cD@CH#1{\cD@DH{\dimen2}\advance\dimen0 #1\dimen2 }\def
\cD@DH#1{\divide#1\cD@bG\multiply#1\cD@NH}\def\cD@fG#1{\divide#1\cD@NH
\multiply#1\cD@bG}\def\cD@fH{\dimen6\cD@NH\cD@SH\multiply\dimen6\cD@NH\dimen7%
\cD@bG\cD@SH\multiply\dimen7\cD@bG\cD@ZH}\ifx\errorcontextlines\undefined
\cD@ZF\let\cD@QE\relax\else\def\cD@QE{\errorcontextlines\m@ne}\fi\ifnum
\inputlineno<0 \let\cD@SC\empty\let\cD@YA\empty\let\cD@jC\relax\let\cD@LF
\relax\let\cD@MF\relax\let\cD@yG\relax\message{! Why not upgrade to TeX
version 3? (available since 1990)}\else\def\cD@YA{ at line \number
\inputlineno}\def\cD@jC{ - first occurred}\def\cD@LF{\edef\cD@bA{\the
\inputlineno}}\def\cD@bA{9999}\def\cD@MF{\edef\cD@nB{\the\inputlineno}}\def
\cD@nB{\cD@bA}\def\cD@yG{\ifnum\cD@bA<\inputlineno\edef\cD@SC{\space at lines
\cD@bA--\the\inputlineno}\else\edef\cD@SC{\cD@YA}\fi}\fi\let\cD@SC\empty\def
\cD@AB#1#2{\cD@QE\errhelp=#2\expandafter\errmessage{\cD@KB: #1}}\def\cD@WB#1{%
{\expandafter\message{! \cD@KB: #1\cD@SC}}}\def\cD@kB#1{{\expandafter\message
{\cD@KB\space Warning: #1\cD@YA}}}\def\cD@TB#1#2{\cD@kB{#1 \string#2 is
obsolete\cD@jC}}\def\cD@RB#1{\cD@TB{Dimension}{#1}\cD@nG#1\cD@SB\cD@SB}\def
\cD@SB{\cD@tA=}\def\cD@QB#1{\cD@TB{Count}{#1}\cD@nG#1\cD@y\cD@y}\def\cD@y{%
\count@=}\def\HorizontalMapLength{\cD@RB\HorizontalMapLength}\def
\VerticalMapHeight{\cD@RB\VerticalMapHeight}\def\VerticalMapDepth{\cD@RB
\VerticalMapDepth}\def\VerticalMapExtraHeight{\cD@RB\VerticalMapExtraHeight}%
\def\VerticalMapExtraDepth{\cD@RB\VerticalMapExtraDepth}\def
\DiagonalLineSegments{\cD@QB\DiagonalLineSegments}\ifx\tenln\nullfont\cD@BB
\cD@RE{\cD@sH\space diagonal line and arrow font not available}\else\let
\cD@RE\relax\fi\def\cD@zD#1#2<#3:#4:#5#6{\ifnum#6>#5\count@#6\advance\count@-%
#5\cD@uA#3\advance\cD@uA-#2\if#1v \let\cD@ME\cD@eF\else\advance\count@\count@
\if#1l\advance\count@-\cD@MA\else\if#1r\advance\count@\cD@MA\fi\fi\advance
\cD@uA\cD@uA\let\cD@ME\cD@CD\fi\divide\cD@uA\count@\ifdim\cD@ME<\cD@uA\cD@ME
\cD@uA\fi\fi}\cD@HE\cD@QD\cD@j\cD@i\cD@GE\cD@NF{See the message above.}\cD@GE
\cD@gE{Perhaps you've forgotten to end the diagram before resuming the text,
in\cD@IE which case some garbage may be added to the diagram, but we should be
ok now.\cD@IE Alternatively you've left a blank line in the middle - TeX will
now complain\cD@IE that the remaining \cD@XA s are misplaced - so please use
comments for layout.}\cD@GE\cD@hC{You have already closed too many brace pairs
or environments; an \cD@UC\cD@IE command was (over)due.}\cD@GE\cD@dE{\cD@IC
\space and \cD@UC\space commands must match.}\def\cD@eE{\ifnum\inputlineno=0
\else\expandafter\cD@@A\fi}\def\cD@@A{\cD@VC\cD@DI\crcr\cD@AB{missing \cD@UC
\space inserted before \cD@fE- type "h"}\cD@gE\enddiagram\cD@lD\cD@fE\par}%
\def\cD@lD#1{\edef\enddiagram{\noexpand\cD@mC{#1\cD@YA}}}\def\cD@mC#1{\cD@AB{%
\cD@UC\space(anticipated by #1) ignored}\cD@NF\let\enddiagram\cD@wD}\def
\cD@wD{\cD@AB{misplaced \cD@UC\space ignored}\cD@dE}\def\cD@MC{\cD@AB{missing
\cD@UC\space inserted.}\cD@hC\cD@lD{closing group}}

\ifx\DeclareOption\undefined\else\DeclareOption*{\expandafter\cD@qI
\CurrentOption==,\cD@NC}\ProcessOptions\relax\fi
%%======================================================================%
%%                                                                      %
%%      (21) AUXILLARY MACROS FOR ADJUSTMENT OF COMPONENTS              %
%%                                                                      %
%%======================================================================%

%% NOTE: The recommended way of defining arrow commands is now
%%      \newarrow{Name}{tail}{filler}{middle}{filler}{head}
%% which defines \rName, \lName, \dName and \uName using arrow parts which
%% have themselves previously been defined using the commands
%% \newarrowtail, \newarrowfiller, \newarrowmiddle and \newarrowhead.

%% The components \rhvee etc have been retained for the time being, as an
%% intermediate stage and to continue to support the old \HorizontalMap and
%% \VerticalMap commands, but you should not rely on the continued existence
%% of these macros.

%% The various components usually need some correction
%% - longitudinally, ie to prevent gaps and overprints with the shaft,
%% - transversally,  ie to prevent "steps" in the junction with the shaft.
%% The former can be done safely ad hoc, eg with \mkern1mu.
%% The latter are now done with the macros \scriptaxis, \boldscriptaxis,
%% \shifthook and \raisehook, which include pixel corrections.

%% Please note that these and the other auxillary macros which follow are
%% interim. When it becomes clear exactly what kinds of adjustments are
%% needed for characters, this job will be done by a suitable extension
%% to the language of \newarrowhead, etc. If you have any other ideas for
%% transformations of general use please tell me.

%% By all means experiment with other characters for arrowheads, but
%% please, in your own interests, do not rely on macros like \rhvee,
%% send me a copy of your definitions for distribution to other users
%% in this file, and keep track of where your efforts get copied so
%% that they can be replaced with the "official" version when it is
%% incorporated.

%% ***** DONT use macros with mangled names like \cD@gH. *****

\catcode\lq\$=3 %% make sure that $ means maths-shift
\def\vboxtoz{\vbox to\z@}%% \z@ is in plain TeX and means 0pt

%% print #1 in \scriptstyle, adjusting for the maths axis height
\def\scriptaxis#1{\@scriptaxis{$\scriptstyle#1$}}%%
\def\@scriptaxis#1{\dimen0\axisheight\advance\dimen0-\fontdimen22\the
\scriptfont2\raise\dimen0\hbox{#1}}

%% Some of the characters would look better in bold since they're
%% taken from sub/superscript fonts; we use LaTeX's \boldmath to
%% do this, defining this to do nothing if it doesn't exist.
%% With the old LaTeX font selection at other than 10pt you may still
%% get nothing happenning.  Also, PK fonts may be missing.
%% If you have problems, DONT use boldhook or boldlittlevee.
\ifx\boldmath\undefined%%
\let\boldscriptaxis\scriptaxis%%
\def\boldscript#1{\hbox{$\scriptstyle#1$}}%%
\def\boldscriptscript#1{\hbox{$\scriptscriptstyle#1$}}%%
\else\def\boldscriptaxis#1{\@scriptaxis{\boldmath$\scriptstyle#1$}}%%
\def\boldscript#1{\hbox{\boldmath$\scriptstyle#1$}}%%
\def\boldscriptscript#1{\hbox{\boldmath$\scriptscriptstyle#1$}}%%
\fi

\def\raisehook#1#2#3{%
%%  #1= {} or \boldmath; #2= + or -; #3=\subset or \supset
\setbox0=\hbox{#1$\scriptscriptstyle#3$}%% the character to use
\dimen0\fontdimen22\the\scriptscriptfont2%% \scriptscriptstyle axis height
\dimen1\axisheight\advance\dimen1-\dimen0%% difference in axis heights
\dimen2\ht0\advance\dimen2-\dimen0%
%%  height of char above axis (half spread)
\advance\dimen1 #2\dimen2%% shift = axis_difference +/- half_spread
\raise\dimen1\box0}%% print the character

%% Mark Dawson suggested using the width
\def\shifthook#1#2#3{\setbox0=\hbox{#1$\scriptscriptstyle#3$}\dimen0\wd0%
\divide\dimen0 12\cD@RI{\dimen0}%%  "u"
\dimen1\wd0\advance\dimen1-2\dimen0\advance\dimen1-\cD@bI\cD@RI{\dimen1}\kern
#2\dimen1\box0}%% print

%% use the extension font (cmex) for double vertical arrows
\def\@cmex{\mathchar"03}%%ascii double quote

%%      ************* P U L L B A C K S ************

%% These will probably be replaced by something less ad hoc
%% in a future version.

\def\SEpbk{\rlap{\smash{\kern0.1em \vrule depth 2.67ex height -2.55ex width 0%
.9em \vrule height -0.46ex depth 2.67ex width .05em }}}

\def\SWpbk{\llap{\smash{\vrule height -0.46ex depth 2.67ex width .05em \vrule
depth 2.67ex height -2.55ex width .9em \kern0.1em }}}

\def\NEpbk{\rlap{\smash{\kern0.1em \vrule depth -3.48ex height 3.67ex width 0%
.95em \vrule height 3.67ex depth -1.39ex width .05em }}}

\def\NWpbk{\llap{\smash{\vrule height 3.6ex depth -1.39ex width .05em \vrule
depth -3.48ex height 3.67ex width .95em \kern0.1em }}}

\def\puncture{{\setbox0\hbox{A}\vrule height.53\ht0 depth-.47\ht0 width.35\ht
0 \kern.12\ht0 \vrule height\ht0 depth-.65\ht0 width.06\ht0 \kern-.06\ht0
\vrule height.35\ht0 depth0pt width.06\ht0 \kern.12\ht0 \vrule height.53\ht0
depth-.47\ht0 width.35\ht0 }}

%%======================================================================%
%%                                                                      %
%%      (22) BITS OF ARROWS                                             %
%%                                                                      %
%%======================================================================%

%%       **********  H E A D S ***********

%% \diagramstyle[heads=xxx] defines {>} as {xxx} where xxx
%% has been defined by \newarrowhead{xxx} and \newarrowtail{xxx}

%% vee head
\def\rhvee{\mkern-10mu\greaterthan}%%
\def\lhvee{\lessthan\mkern-10mu}%%
\def\dhvee{\vboxtoz{\vss\hbox{$\vee$}\kern0pt}}%%
\def\uhvee{\vboxtoz{\hbox{$\wedge$}\vss}}%%
\newarrowhead{vee}\rhvee\lhvee\dhvee\uhvee

%% little vee head
\def\dhlvee{\vboxtoz{\vss\hbox{$\scriptstyle\vee$}\kern0pt}}%%
\def\uhlvee{\vboxtoz{\hbox{$\scriptstyle\wedge$}\vss}}%%
\newarrowhead{littlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
\dhlvee\uhlvee\ifx\boldmath\undefined%%
\newarrowhead{boldlittlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
\dhlvee\uhlvee\else%%
\def\dhblvee{\vboxtoz{\vss\boldscript\vee\kern0pt}}%%
\def\uhblvee{\vboxtoz{\boldscript\wedge\vss}}%%
\newarrowhead{boldlittlevee}{\mkern1mu\boldscriptaxis\rhvee}{\boldscriptaxis
\lhvee}\dhblvee\uhblvee%%
\fi

%% curly vee head (uses AMS symbols fonts)
\def\rhcvee{\mkern-10mu\succ}%%
\def\lhcvee{\prec\mkern-10mu}%%
\def\dhcvee{\vboxtoz{\vss\hbox{$\curlyvee$}\kern0pt}}%%
\def\uhcvee{\vboxtoz{\hbox{$\curlywedge$}\vss}}%%
\newarrowhead{curlyvee}\rhcvee\lhcvee\dhcvee\uhcvee

%% double vee head %% will probably be withdrawn later
\def\rhvvee{\mkern-13mu\gg}%% 24.8.92 changed 10mu to 13mu
\def\lhvvee{\ll\mkern-13mu}%% to make rule go through
\def\dhvvee{\vboxtoz{\vss\hbox{$\vee$}\kern-.6ex\hbox{$\vee$}\kern0pt}}%%
\def\uhvvee{\vboxtoz{\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\vss}}%%
\newarrowhead{doublevee}\rhvvee\lhvvee\dhvvee\uhvvee

%% open and closed triangles (uses AMS symbols fonts)
\def\triangleup{{\scriptscriptstyle\bigtriangleup}}%%
\def\littletriangledown{{\scriptscriptstyle\triangledown}}%% AMS
\def\rhtriangle{\triangleright\mkern1.2mu}%% 29.1.93
\def\lhtriangle{\triangleleft\mkern1mu}%%
\def\uhtriangle{\vbox{\kern-.2ex \hbox{$\scriptscriptstyle\bigtriangleup$}%
\kern-.25ex}}%%
%% Changed \scriptstyle\triangledown to \scriptscriptstyle\bigtriangledown
%% at the suggestion of Martin Hofmann (25.11.92) to avoid using AMS symbols
%% and also for compatibility with upward arrow.
\def\dhtriangle{\vbox{\kern-.4ex \hbox{$\scriptscriptstyle\bigtriangledown$}%
\kern-.1ex}}%% 15.1.93 from -.25ex
\def\dhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangledown$}}}%
%% AMS
\def\uhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangle$}}}%
%% AMS
\def\dhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
\blacktriangledown$}}}%% AMS
\def\uhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
\blacktriangle$}}}%% AMS
\newarrowhead{triangle}\rhtriangle\lhtriangle\dhtriangle\uhtriangle
\newarrowhead{blacktriangle}{\mkern-1mu\blacktriangleright\mkern.4mu}{%
\blacktriangleleft}\dhblack\uhblack\newarrowhead{littleblack}{\mkern-1mu%
\scriptaxis\blacktriangleright}{\scriptaxis\blacktriangleleft\mkern-2mu}%
\dhlblack\uhlblack

%% LaTeX arrowheads
\def\rhla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.6\dimen0\ht0\z@\raise
\axisheight\box0\kern.1\dimen0}}%%
\def\lhla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern.05\dimen0\ht0\z@\raise
\axisheight\box0\kern-.5\dimen0}}%%
\def\dhla{\vboxtoz{\vss\rlap{\lnchar77}}}%%
\def\uhla{\vboxtoz{\setbox0=\lnchar66 \wd0\z@\kern-.15\ht0\box0\vss}}%% 1/93
\newarrowhead{LaTeX}\rhla\lhla\dhla\uhla

%% double LaTeX arrowheads %% will probably be withdrawn later
\def\lhlala{\lhla\kern.3em\lhla}%%
\def\rhlala{\rhla\kern.3em\rhla}%%
\def\uhlala{\hbox{\uhla\raise-.6ex\uhla}}%%
\def\dhlala{\hbox{\dhla\lower-.6ex\dhla}}%%
\newarrowhead{doubleLaTeX}\rhlala\lhlala\dhlala\uhlala

%% circles % \rho is a Greek letter!
\def\hhO{\scriptaxis\bigcirc\mkern.4mu} \def\hho{{\circ}\mkern1.2mu}%
\newarrowhead{o}\hho\hho\circ\circ%%
\newarrowhead{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%

%% crosses
\def\rhtimes{\mkern-5mu{\times}\mkern-.8mu}\def\lhtimes{\mkern-.8mu{\times}%
\mkern-5mu}\def\uhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\dp0-\ht0%
\lower\ht0\box0 }\def\dhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\box0 }%
\newarrowhead{X}\rhtimes\lhtimes\dhtimes\uhtimes\newarrowhead+++++

%% empty head {} is also available

%% Y from stmaryrd (vertical ones still need large adjustment)
\newarrowhead{Y}{\mkern-3mu\Yright}{\Yleft\mkern-3mu}\Yup\Ydown

%%       **********  H E A D S  with  S H A F T S  ***********

%% little arrow with shaft
\newarrowhead{->}\rightarrow\leftarrow\downarrow\uparrow

%% arrow with double shaft
%%\newarrowhead{=>}\Rightarrow\Leftarrow\Downarrow\Uparrow
\newarrowhead{=>}\Rightarrow\Leftarrow{\@cmex7F}{\@cmex7E}

%% harpoon with shaft (trailing up/left can be changed to down/right)
\newarrowhead{harpoon}\rightharpoonup\leftharpoonup\downharpoonleft
\upharpoonleft

%% little double-headed arrow with shaft (uses AMS symbols fonts)
\def\twoheaddownarrow{\rlap{$\downarrow$}\raise-.5ex\hbox{$\downarrow$}}%%
\def\twoheaduparrow{\rlap{$\uparrow$}\raise.5ex\hbox{$\uparrow$}}%%
\newarrowhead{->>}\twoheadrightarrow\twoheadleftarrow\twoheaddownarrow
\twoheaduparrow

%%       **********  T A I L S ***********

%% vee tail
\def\rtvee{\greaterthan}%%
\def\ltvee{\mkern-1mu{\lessthan}\mkern.4mu}%% \mkern added 15.1.93
\def\dtvee{\vee}%%
\def\utvee{\wedge}%%
\newarrowtail{vee}\greaterthan\ltvee\vee\wedge

%% little vee tail
\newarrowtail{littlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\ifx\boldmath\undefined
\newarrowtail{boldlittlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\else\newarrowtail{%
boldlittlevee}{\boldscriptaxis\greaterthan}{\mkern-1mu\boldscriptaxis
\lessthan}{\boldscript\vee}{\boldscript\wedge}\fi

%% curly vee tail (uses AMS symbols fonts)
\newarrowtail{curlyvee}\succ{\mkern-1mu{\prec}\mkern.4mu}\curlyvee\curlywedge

%% open and closed triangle tails (uses AMS symbols fonts)
\def\rttriangle{\mkern1.2mu\triangleright}%% 29.1.93
\newarrowtail{triangle}\rttriangle\lhtriangle\dhtriangle\uhtriangle
\newarrowtail{blacktriangle}\blacktriangleright{\mkern-1mu\blacktriangleleft
\mkern.4mu}\dhblack\uhblack\newarrowtail{littleblack}{\scriptaxis
\blacktriangleright\mkern-2mu}{\mkern-1mu\scriptaxis\blacktriangleleft}%
\dhlblack\uhlblack

%% LaTeX tails
\def\rtla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.5\dimen0\ht0\z@\raise
\axisheight\box0\kern-.2\dimen0}}%%
\def\ltla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern-.15\dimen0\ht0\z@\raise
\axisheight\box0\kern-.5\dimen0}}%%
\def\dtla{\vbox{\setbox0=\rlap{\lnchar77}\dimen0=\ht0\kern-.7\dimen0\box0%
\kern-.1\dimen0}}%% 15.1.93 from -.6
\def\utla{\vbox{\setbox0=\rlap{\lnchar66}\dimen0=\ht0\kern-.1\dimen0\box0%
\kern-.6\dimen0}}%%
\newarrowtail{LaTeX}\rtla\ltla\dtla\utla

%% double vee tail %% will probably be withdrawn later
\def\rtvvee{\gg\mkern-3mu}%%
\def\ltvvee{\mkern-3mu\ll}%%
\def\dtvvee{\vbox{\hbox{$\vee$}\kern-.6ex \hbox{$\vee$}\vss}}%%
\def\utvvee{\vbox{\vss\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\kern\z@}}%%
\newarrowtail{doublevee}\rtvvee\ltvvee\dtvvee\utvvee

%% double LaTeX tails %% will probably be withdrawn later
\def\ltlala{\ltla\kern.3em\ltla}%%
\def\rtlala{\rtla\kern.3em\rtla}%%
\def\utlala{\hbox{\utla\raise-.6ex\utla}}%%
\def\dtlala{\hbox{\dtla\lower-.6ex\dtla}}%%
\newarrowtail{doubleLaTeX}\rtlala\ltlala\dtlala\utlala

%% bar (as in \mapsto)
\def\utbar{\vrule height 0.093ex depth0pt width 0.4em}%%
\let\dtbar\utbar%%
\def\rtbar{\mkern1.5mu\vrule height 1.1ex depth.06ex width .04em\mkern1.5mu}%
%%
\let\ltbar\rtbar%%
\newarrowtail{mapsto}\rtbar\ltbar\dtbar\utbar%%
\newarrowtail{|}\rtbar\ltbar\dtbar\utbar%%ascii vertical bar (|)

%% hooks (as in \into): choice of after/above and before/below

\def\rthooka{\raisehook{}+\subset\mkern-1mu}%%
\def\lthooka{\mkern-1mu\raisehook{}+\supset}%%
\def\rthookb{\raisehook{}-\subset\mkern-2mu}%%
\def\lthookb{\mkern-1mu\raisehook{}-\supset}%%

\def\dthooka{\shifthook{}+\cap}%%
\def\dthookb{\shifthook{}-\cap}%%
\def\uthooka{\shifthook{}+\cup}%%
\def\uthookb{\shifthook{}-\cup}%%

\newarrowtail{hooka}\rthooka\lthooka\dthooka\uthooka\newarrowtail{hookb}%
\rthookb\lthookb\dthookb\uthookb

\ifx\boldmath\undefined\newarrowtail{boldhooka}\rthooka\lthooka\dthooka
\uthooka\newarrowtail{boldhookb}\rthookb\lthookb\dthookb\uthookb\newarrowtail
{boldhook}\rthooka\lthookb\dthooka\uthooka\else\def\rtbhooka{\raisehook
\boldmath+\subset\mkern-1mu}%%
\def\ltbhooka{\mkern-1mu\raisehook\boldmath+\supset}%%
\def\rtbhookb{\raisehook\boldmath-\subset\mkern-2mu}%%
\def\ltbhookb{\mkern-1mu\raisehook\boldmath-\supset}%%
\def\dtbhooka{\shifthook\boldmath+\cap}%%
\def\dtbhookb{\shifthook\boldmath-\cap}%%
\def\utbhooka{\shifthook\boldmath+\cup}%%
\def\utbhookb{\shifthook\boldmath-\cup}%%
\newarrowtail{boldhooka}\rtbhooka\ltbhooka\dtbhooka\utbhooka\newarrowtail{%
boldhookb}\rtbhookb\ltbhookb\dtbhookb\utbhookb\newarrowtail{boldhook}%
\rtbhooka\ltbhookb\dthbooka\utbhooka\fi

%% the following seem the better choices at 10pt & 300dpi
\newarrowtail{hook}\rthooka\lthookb\dthooka\uthooka\newarrowtail{C}\rthooka
\lthookb\dthooka\uthooka

%% circles
\newarrowtail{o}\hho\hho\circ\circ%%
\newarrowtail{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%

%% crosses
\newarrowtail{X}\lhtimes\rhtimes\uhtimes\dhtimes\newarrowtail+++++

%% empty tail {} is also available

%% Y from stmaryrd (vertical ones still need adjustment)
\newarrowtail{Y}\Yright\Yleft\Yup\Ydown

%%      **********  F I L L E R S ***********

%% shortening is up to 0.15em=2.7mu horiz and 0.35ex vertically at each end.

%% dot {.}, single rule {-} and empty {} fillers are also available

%% double and triple lines
%%\newarrowfiller{=}==\Vert\Vert%%
\newarrowfiller{=}=={\@cmex77}{\@cmex77}%% 16.1.93
\def\vfthree{\mid\!\!\!\mid\!\!\!\mid}%%ascii
\newarrowfiller{3}\equiv\equiv\vfthree\vfthree

%% dashed line
\def\vfdashstrut{\vrule width0pt height1.3ex depth0.7ex}%%
\def\vfthedash{\vrule width\cD@NI height0.6ex depth 0pt}%%
\def\hfthedash{\cD@QF\vrule\horizhtdp width 0.26em}%%
\def\hfdash{\mkern5.5mu\hfthedash\mkern5.5mu}%%
\def\vfdash{\vfdashstrut\vfthedash}%%
\newarrowfiller{dash}\hfdash\hfdash\vfdash\vfdash

%%      ************* M I D D L E S ************

%% plus
\newarrowmiddle+++++

%%      ************* D I A G O N A L S ************

%% simple arrow heads
%%\def\nwhTO{\nwarrow\mkern-1mu}%%
%%\def\nehTO{\mkern-.1mu\nearrow}%%
%%\def\sehTO{\searrow\mkern-.02mu}%%
%%\def\swhTO{\mkern-.8mu\swarrow}%%

%%======================================================================%
%%                                                                      %
%%      (22) ARROW COMMANDS                                             %
%%                                                                      %
%%======================================================================%

%% change to \iftrue to get mixed heads
\iffalse%%
\newarrow{To}----{vee}%%
\newarrow{Arr}----{LaTeX}%%
\newarrow{Dotsto}....{vee}%%
\newarrow{Dotsarr}....{LaTeX}%%
\newarrow{Dashto}{}{dash}{}{dash}{vee}%%
\newarrow{Dasharr}{}{dash}{}{dash}{LaTeX}%%
\newarrow{Mapsto}{mapsto}---{vee}%%
\newarrow{Mapsarr}{mapsto}---{LaTeX}%%
\newarrow{IntoA}{hooka}---{vee}%%
\newarrow{IntoB}{hookb}---{vee}%%
\newarrow{Embed}{vee}---{vee}%%
\newarrow{Emarr}{LaTeX}---{LaTeX}%%
\newarrow{Onto}----{doublevee}%%
\newarrow{Dotsonarr}....{doubleLaTeX}%%
\newarrow{Dotsonto}....{doublevee}%%
\newarrow{Dotsonarr}....{doubleLaTeX}%%
\else%%
\newarrow{To}---->%%
\newarrow{Arr}---->%%
\newarrow{Dotsto}....>%%
\newarrow{Dotsarr}....>%%
\newarrow{Dashto}{}{dash}{}{dash}>%%
\newarrow{Dasharr}{}{dash}{}{dash}>%%
\newarrow{Mapsto}{mapsto}--->%%
\newarrow{Mapsarr}{mapsto}--->%%
\newarrow{IntoA}{hooka}--->%%
\newarrow{IntoB}{hookb}--->%%
\newarrow{Embed}>--->%%
\newarrow{Emarr}>--->%%
\newarrow{Onto}----{>>}%%
\newarrow{Dotsonarr}....{>>}%%
\newarrow{Dotsonto}....{>>}%%
\newarrow{Dotsonarr}....{>>}%%
\fi%%

\newarrow{Implies}===={=>}%% minimum cell height 9.5pt
\newarrow{Project}----{triangle}%%
\newarrow{Pto}----{harpoon}%%

\newarrow{Eq}=====%%
\newarrow{Line}-----%%
\newarrow{Dots}.....%%
\newarrow{Dashes}{}{dash}{}{dash}{}%%

%% synonyms for reverse compatibility

\let\uFrom\uTo%%
\let\lFrom\lTo%%
\let\uDotsfrom\uDotsto%%
\let\lDotsfrom\lDotsto%%
\let\uDashfrom\uDashto%%
\let\lDashfrom\lDashto%%
\let\uImpliedby\uImplies%%
\let\lImpliedby\lImplies%%
\let\uMapsfrom\uMapsto%%
\let\lMapsfrom\lMapsto%%
\let\lOnfrom\lOnto%%
\let\uOnfrom\uOnto%%
\let\lPfrom\lPto%%
\let\uPfrom\uPto%%

\let\uInfromA\uIntoA%%
\let\uInfromB\uIntoB%%
\let\lInfromA\lIntoA%%
\let\lInfromB\lIntoB%%
\let\rInto\rIntoA%%
\let\lInto\lIntoA%%
\let\dInto\dIntoB%%
\let\uInto\uIntoA%%
\let\ruInto\ruIntoA%%
\let\luInto\luIntoA%%
\let\rdInto\rdIntoA%%
\let\ldInto\ldIntoA%%
%%
\let\hEq\rEq%%
\let\vEq\uEq%%
\let\hLine\rLine%%
\let\vLine\uLine%%
\let\hDots\rDots%%
\let\vDots\uDots%%
\let\hDashes\rDashes%%
\let\vDashes\uDashes%%

%%=========================================================================%
%% The following are included for reverse compatibility only.
%%=========================================================================%
\let\NW\luTo\let\NE\ruTo\let\SW\ldTo\let\SE\rdTo\def\nNW{\luTo(2,3)}\def\nNE{%
\ruTo(2,3)}%%ascii
\def\sSW{\ldTo(2,3)}\def\sSE{\rdTo(2,3)}%%ascii
\def\wNW{\luTo(3,2)}\def\eNE{\ruTo(3,2)}%%ascii
\def\wSW{\ldTo(3,2)}\def\eSE{\rdTo(3,2)}%%ascii
\def\NNW{\luTo(2,4)}\def\NNE{\ruTo(2,4)}%%ascii
\def\SSW{\ldTo(2,4)}\def\SSE{\rdTo(2,4)}%%ascii
\def\WNW{\luTo(4,2)}\def\ENE{\ruTo(4,2)}%%ascii
\def\WSW{\ldTo(4,2)}\def\ESE{\rdTo(4,2)}%%ascii
\def\NNNW{\luTo(2,6)}\def\NNNE{\ruTo(2,6)}%%ascii
\def\SSSW{\ldTo(2,6)}\def\SSSE{\rdTo(2,6)}%%ascii
\def\WWNW{\luTo(6,2)}\def\EENE{\ruTo(6,2)}%%ascii
\def\WWSW{\ldTo(6,2)}\def\EESE{\rdTo(6,2)}%%ascii

\let\NWd\luDotsto\let\NEd\ruDotsto\let\SWd\ldDotsto\let\SEd\rdDotsto\def\nNWd
{\luDotsto(2,3)}\def\nNEd{\ruDotsto(2,3)}%%ascii
\def\sSWd{\ldDotsto(2,3)}\def\sSEd{\rdDotsto(2,3)}%%ascii
\def\wNWd{\luDotsto(3,2)}\def\eNEd{\ruDotsto(3,2)}%%ascii
\def\wSWd{\ldDotsto(3,2)}\def\eSEd{\rdDotsto(3,2)}%%ascii
\def\NNWd{\luDotsto(2,4)}\def\NNEd{\ruDotsto(2,4)}%%ascii
\def\SSWd{\ldDotsto(2,4)}\def\SSEd{\rdDotsto(2,4)}%%ascii
\def\WNWd{\luDotsto(4,2)}\def\ENEd{\ruDotsto(4,2)}%%ascii
\def\WSWd{\ldDotsto(4,2)}\def\ESEd{\rdDotsto(4,2)}%%ascii
\def\NNNWd{\luDotsto(2,6)}\def\NNNEd{\ruDotsto(2,6)}%%ascii
\def\SSSWd{\ldDotsto(2,6)}\def\SSSEd{\rdDotsto(2,6)}%%ascii
\def\WWNWd{\luDotsto(6,2)}\def\EENEd{\ruDotsto(6,2)}%%ascii
\def\WWSWd{\ldDotsto(6,2)}\def\EESEd{\rdDotsto(6,2)}%%ascii

\let\NWl\luLine\let\NEl\ruLine\let\SWl\ldLine\let\SEl\rdLine\def\nNWl{\luLine
(2,3)}\def\nNEl{\ruLine(2,3)}%%ascii
\def\sSWl{\ldLine(2,3)}\def\sSEl{\rdLine(2,3)}%%ascii
\def\wNWl{\luLine(3,2)}\def\eNEl{\ruLine(3,2)}%%ascii
\def\wSWl{\ldLine(3,2)}\def\eSEl{\rdLine(3,2)}%%ascii
\def\NNWl{\luLine(2,4)}\def\NNEl{\ruLine(2,4)}%%ascii
\def\SSWl{\ldLine(2,4)}\def\SSEl{\rdLine(2,4)}%%ascii
\def\WNWl{\luLine(4,2)}\def\ENEl{\ruLine(4,2)}%%ascii
\def\WSWl{\ldLine(4,2)}\def\ESEl{\rdLine(4,2)}%%ascii
\def\NNNWl{\luLine(2,6)}\def\NNNEl{\ruLine(2,6)}%%ascii
\def\SSSWl{\ldLine(2,6)}\def\SSSEl{\rdLine(2,6)}%%ascii
\def\WWNWl{\luLine(6,2)}\def\EENEl{\ruLine(6,2)}%%ascii
\def\WWSWl{\ldLine(6,2)}\def\EESEl{\rdLine(6,2)}%%ascii

\let\NWld\luDots\let\NEld\ruDots\let\SWld\ldDots\let\SEld\rdDots\def\nNWld{%
\luDots(2,3)}\def\nNEld{\ruDots(2,3)}%%ascii
\def\sSWld{\ldDots(2,3)}\def\sSEld{\rdDots(2,3)}%%ascii
\def\wNWld{\luDots(3,2)}\def\eNEld{\ruDots(3,2)}%%ascii
\def\wSWld{\ldDots(3,2)}\def\eSEld{\rdDots(3,2)}%%ascii
\def\NNWld{\luDots(2,4)}\def\NNEld{\ruDots(2,4)}%%ascii
\def\SSWld{\ldDots(2,4)}\def\SSEld{\rdDots(2,4)}%%ascii
\def\WNWld{\luDots(4,2)}\def\ENEld{\ruDots(4,2)}%%ascii
\def\WSWld{\ldDots(4,2)}\def\ESEld{\rdDots(4,2)}%%ascii
\def\NNNWld{\luDots(2,6)}\def\NNNEld{\ruDots(2,6)}%%ascii
\def\SSSWld{\ldDots(2,6)}\def\SSSEld{\rdDots(2,6)}%%ascii
\def\WWNWld{\luDots(6,2)}\def\EENEld{\ruDots(6,2)}%%ascii
\def\WWSWld{\ldDots(6,2)}\def\EESEld{\rdDots(6,2)}%%ascii

\let\NWe\luEmbed\let\NEe\ruEmbed\let\SWe\ldEmbed\let\SEe\rdEmbed\def\nNWe{%
\luEmbed(2,3)}\def\nNEe{\ruEmbed(2,3)}%%ascii
\def\sSWe{\ldEmbed(2,3)}\def\sSEe{\rdEmbed(2,3)}%%ascii
\def\wNWe{\luEmbed(3,2)}\def\eNEe{\ruEmbed(3,2)}%%ascii
\def\wSWe{\ldEmbed(3,2)}\def\eSEe{\rdEmbed(3,2)}%%ascii
\def\NNWe{\luEmbed(2,4)}\def\NNEe{\ruEmbed(2,4)}%%ascii
\def\SSWe{\ldEmbed(2,4)}\def\SSEe{\rdEmbed(2,4)}%%ascii
\def\WNWe{\luEmbed(4,2)}\def\ENEe{\ruEmbed(4,2)}%%ascii
\def\WSWe{\ldEmbed(4,2)}\def\ESEe{\rdEmbed(4,2)}%%ascii
\def\NNNWe{\luEmbed(2,6)}\def\NNNEe{\ruEmbed(2,6)}%%ascii
\def\SSSWe{\ldEmbed(2,6)}\def\SSSEe{\rdEmbed(2,6)}%%ascii
\def\WWNWe{\luEmbed(6,2)}\def\EENEe{\ruEmbed(6,2)}%%ascii
\def\WWSWe{\ldEmbed(6,2)}\def\EESEe{\rdEmbed(6,2)}%%ascii

\let\NWo\luOnto\let\NEo\ruOnto\let\SWo\ldOnto\let\SEo\rdOnto\def\nNWo{\luOnto
(2,3)}\def\nNEo{\ruOnto(2,3)}%%ascii
\def\sSWo{\ldOnto(2,3)}\def\sSEo{\rdOnto(2,3)}%%ascii
\def\wNWo{\luOnto(3,2)}\def\eNEo{\ruOnto(3,2)}%%ascii
\def\wSWo{\ldOnto(3,2)}\def\eSEo{\rdOnto(3,2)}%%ascii
\def\NNWo{\luOnto(2,4)}\def\NNEo{\ruOnto(2,4)}%%ascii
\def\SSWo{\ldOnto(2,4)}\def\SSEo{\rdOnto(2,4)}%%ascii
\def\WNWo{\luOnto(4,2)}\def\ENEo{\ruOnto(4,2)}%%ascii
\def\WSWo{\ldOnto(4,2)}\def\ESEo{\rdOnto(4,2)}%%ascii
\def\NNNWo{\luOnto(2,6)}\def\NNNEo{\ruOnto(2,6)}%%ascii
\def\SSSWo{\ldOnto(2,6)}\def\SSSEo{\rdOnto(2,6)}%%ascii
\def\WWNWo{\luOnto(6,2)}\def\EENEo{\ruOnto(6,2)}%%ascii
\def\WWSWo{\ldOnto(6,2)}\def\EESEo{\rdOnto(6,2)}%%ascii

\let\NWod\luDotsonto\let\NEod\ruDotsonto\let\SWod\ldDotsonto\let\SEod
\rdDotsonto\def\nNWod{\luDotsonto(2,3)}\def\nNEod{\ruDotsonto(2,3)}%%ascii
\def\sSWod{\ldDotsonto(2,3)}\def\sSEod{\rdDotsonto(2,3)}%%ascii
\def\wNWod{\luDotsonto(3,2)}\def\eNEod{\ruDotsonto(3,2)}%%ascii
\def\wSWod{\ldDotsonto(3,2)}\def\eSEod{\rdDotsonto(3,2)}%%ascii
\def\NNWod{\luDotsonto(2,4)}\def\NNEod{\ruDotsonto(2,4)}%%ascii
\def\SSWod{\ldDotsonto(2,4)}\def\SSEod{\rdDotsonto(2,4)}%%ascii
\def\WNWod{\luDotsonto(4,2)}\def\ENEod{\ruDotsonto(4,2)}%%ascii
\def\WSWod{\ldDotsonto(4,2)}\def\ESEod{\rdDotsonto(4,2)}%%ascii
\def\NNNWod{\luDotsonto(2,6)}\def\NNNEod{\ruDotsonto(2,6)}%%ascii
\def\SSSWod{\ldDotsonto(2,6)}\def\SSSEod{\rdDotsonto(2,6)}%%ascii
\def\WWNWod{\luDotsonto(6,2)}\def\EENEod{\ruDotsonto(6,2)}%%ascii
\def\WWSWod{\ldDotsonto(6,2)}\def\EESEod{\rdDotsonto(6,2)}%%ascii

%%======================================================================%
%%                                                                      %
%%      (23) MISCELLANEOUS                                              %
%%                                                                      %
%%======================================================================%

\def\labelstyle{%%
\ifincommdiag%%
\textstyle%%
\else%%
\scriptstyle%%
\fi}%%
\let\objectstyle\displaystyle

\diagramstyle[%%ascii open square bracket
dpi=300,%%              office laserwriters are usually 300 dots per inch
vmiddle,nobalance,%%    vertical and horizontal positioning
loose,%%                allow rows and columns to stretch
thin,%%                 line10 arrows; default rule thickness (TeXbook p447)
pilespacing=10pt,%
%%     parallel vertical separation (horizontals: half this)
shortfall=4pt,%%        distance between arrowheads and their targets
l>=20pt%%               minimum length of horizontal arrow shafts
%% size=3em             defaulted on entry to the diagram itself
%% heads=LaTeX          also defaulted
]%%ascii close square bracket

\cdrestoreat%% restore old category code for @ etc
%%============================== THE END ==============================

\dimen0 200pt \dimen1 210pt \dimen2 220pt \dimen3 230pt \dimen4 240pt \dimen5
250pt \dimen6 260pt \dimen7 270pt \dimen8 280pt \dimen9 290pt

%%