% mangletex (11 May 1992) run at 14:41 BST Monday 02 September 1996
\message{<Paul Taylor's commutative diagrams, version 3.84, September 1996>}%
%%======================================================================%
%%      TeX  macros for drawing category-theoretic diagrams             %
%%                                                                      %
%%                              Paul  Taylor                            %
%%                                                                      %
%%                       Department of Computer Science,                %
%%                      Queen Mary and Westfield College,               %
%%                              London E1 4NS                           %
%%                            +44 171 975 5241                          %
%%                             pt@dcs.qmw.ac.uk                         %
%%                       http://www.dcs.qmw.ac.uk/~pt                   %
%%                                                                      %
%%                           PLEASE READ THE MANUAL!                    %
%%                                                                      %
%%      The authoritative version is available by anonymous ftp from:   %
%%    ftp://ftp.dcs.qmw.ac.uk/pub/tex/contrib/pt/diagrams/diagrams.tex  %
%%                                                                      %
%%      Also available from the Comprehensive TeX Archive Network as    %
%%              macros/generic/diagrams/taylor/diagrams.tex             %
%%      For example, ftp://ftp.tex.ac.uk/tex-archive/macros/...         %
%%                                                                      %
%%      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).  %
%%                                                                      %
%%                                                                      %
%% CONTENTS:                                                            %
%%  (O) corruption-sensitive hacks    (to approx line 330)              %
%%              Arrow components & commands - starts approx line 1175   %
%% (21) auxillary macros for adjustment of components                   %
%% (22) bits of arrows  (\rhvee etc)                                    %
%% (23) arrow commands  (\rTo etc)                                      %
%% (24) miscellaneous                                                   %
%% Apart from these five sections, the rest is intended to be totally   %
%% meaningless in the undocumented version, which is approximately 1820 %
%% 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.84 Released 2 September 1996                                       %
%%      Fixed undefined control sequence in \luOnto[dotted,PS]          %
%%      Use \AtEndDocument to give once-only warnings.                  %
%%      Report unknown grid correctly.                                  %
%% 3.83 Released 18 May 1995                                            %
%%      "dotted" option (set dot filler on maps)                        %
%%      Fixed bug with interaction with amslatex/equation.              %
%%      Parallel maps (\pile) outside diagrams stretch correctly.       %
%%      Avoid stepped lines in PostScript by restricting the slopes.    %
%%      Rightmost width now calculated correctly.                       %
%%      Fewer "arrow too short" errors (the l> option for eliminating   %
%%      birds' feet arrows is only applied in text, l>.5em in diagrams).%
%%      "midshaft" option now works; "midvshaft" ignored.               %
%%      Option "LaTeXeqno" uses LaTeX's equation number and style       %
%%      for "eqno";  LaTeX's \label command picks this up.              %
%%      Suppress warnings & 2nd pass errors with "silent" option.       %
%%      Recover from square brackets mis-interpreted as options.        %
%% 3.82                                                                 %
%% 3.81 Second alpha release 18 July 1994                               %
%%      Fixed displaced parenthesis instead of hook tails in manual p8. %
%%      Parentheses and braces (not quite right): see end of source.    %
%%      \overprint{text} sets text in maths and overprints it in the    %
%%      current cell, centered in the column irrespective of other stuff%
%%      "repositionpullbacks" option uses this for \SEpbk etc           %
%%      \newdiagramgrid declaration, grid option and pentagon grid.     %
%% 3.80 Alpha release for adjusted diagonals 15 July 1994.              %
%%      Some options can now take (x,y) values.                         %
%%      Name of DVI->PS translator as argument to PostScript option.    %
%%      Improved recovery from missing {} in labels.                    %
%%      Removed error message from \across since this works now.        %
%%      Loading after \begin{document} in LaTeX2e possible.             %
%%      Loading before \documentstyle or \documentclass possible.       %
%%      Equilateral triangle or regular hexagon size options.           %
%%      Introduced landscape and portrait options.                      %
%%      Define PS commands once for each (outermost) diagram needing    %
%%      them; previously they were defined for every map.               %
%%      Don't hide width of vertical middle components.                 %
%%      Parse []-options during label processing.                       %
%%      Made midhshaft work; always set it for single-row diagrams.     %
%%      \diagramstyle may be used within diagrams.                      %
%%      Vertical maps targetted at labels of horizontals avoid them.    %
%%      Wide object on right no longer causes "increase width" warning. %
%%      Make these warnings more accurate and informative.              %
%%      Fixed decapitated arrows (I think!).                            %
%%      Diagonals adjusted to meet their endpoints, at last!!!!         %
%%      Most of the history has been suppressed from the user version.  %
%% 3.29 Released 11 March 1994                                          %
%% 3.28 Released 30 November 1993                                       %
%%      Peter Freyd's \puncture symbol provided.                        %
%% 3.27 Released 26 March 1993                                          %
%% 3.26 Released 11 February 1993                                       %
%% 3.25 Released 30 January 1993                                        %
%%      LaTeX heads made default (unless \tenln undefined, when vee)    %
%%      Circle, cross, little vee, little black triangle heads.         %
%%      First-use warning when defaulted diagonal components are used.  %
%%      Warning if diagonals used & columns stretched significantly.    %
%%      AMSTEX emulation - works at least when amstex not present.      %
%% 3.24 Release 7 Sept 1992 advertised to users.                        %
%%      PostScript option introduced:                                   %
%%      LaTeX, vee, curlyvee, triangle & blacktriangle heads & tails    %
%%      TPIC option introduced as an alternative to \LaTeX@make@line.   %
%%      New reformatting program.                                       %
%%      Optional arguments on \diagram, maps and \diagramstyle.         %
%% 3.20 (29.4.92) early release of version 4                            %
%%      Postscript arrows (basic code).                                 %
%%      Implemented \newarrow \newarrowhead etc.                        %
%%      Corruption-sensitive characters avoided wherever possible.      %
%%      Reloading prevented.                                            %
%%      Horizontal arrows outside diagram can stretch by wordspacing.   %
%%      Added < and > for labels on left and right of arrow;            %
%% 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 for reading this file:
%%          \=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
%% CTAN: dviware/dvips
\def\cdps@Rokicki#1{\special{ps:#1}}\let\cdps@dvips\cdps@Rokicki\let
\cdps@RadicalEye\cdps@Rokicki\let\CD@eJ\cdps@Rokicki\let\CD@FB\cdps@Rokicki
%%
%% 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\cdps@Bechtolsheim#1{\special{dvitps: Literal "#1"}}%
%% ASCII two dbl quotes
\let\cdps@dvitps\cdps@Bechtolsheim\let\cdps@IntegratedComputerSystems
\cdps@Bechtolsheim%%
%% dvitops (James Clark)
%% CTAN: dviware/dvitops
\def\cdps@Clark#1{\special{dvitops: inline #1}}%%
\let\cdps@dvitops\cdps@Clark%%
%% OzTeX (Andrew Trevorrow) cannot be used
\let\cdps@OzTeX\empty\let\cdps@oztex\empty\let\cdps@Trevorrow\empty%%
%% dvi3ps (Kevin Coombes)
%% CTAN: dviware/dvi2ps/dvi3ps
\def\cdps@Coombes#1{\special{ps-string #1}}%%
%% psprint (Trevorrow) CTAN: dviware/psprint
%% dvi2ps (Senn) CTAN: dviware/dvi2ps
%% psdvi (Elwell) CTAN: dviware/dvi2ps/psdvi

\count@=\year\multiply\count@12 \advance\count@\month%%
\ifnum\count@>23972 %% (1 Sept 1997) It's changing very fast at the moment!
\message{***********************************************************}%%ascii
\message{! THIS IS AN EXPERIMENTAL VERSION OF COMMUTATIVE DIAGRAMS *}%%
\message{! it expired in August 1996 and is time-bombed for January *}%%
\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
\ifnum\count@>23975 %% (1 Dec 1997)
\errhelp{You may press RETURN and carry on for the time being.}\message{! It
is embarrassing to see papers in conference proceedings}\message{! and
journals containing bugs which I had fixed years before.}\message{! It is easy
to obtain and install a new version, which will}\errmessage{! remain
compatible with your files. Please get it NOW.}\fi\fi

\def\CD@uD{\global\let}\def\CD@xG{\outer\def}

%% safe names for braces, tab (&) and maths ($), as commands and for messages
{\escapechar\m@ne\xdef\CD@l{\string\{}\xdef\CD@pC{\string\}}%%
%%
%% three ASCII ampersands (ands) (&&&) appear on the next line
\catcode\lq\&=4 \CD@uD\CD@O=&\xdef\CD@Q{\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@uD\CD@i=$\CD@uD\CD@CD=$%%ascii three dollars
\xdef\CD@eC{\string\$}\gdef\CD@sF{$$}%%ascii three dollars
%%
%% two ASCII underlines (__) appear on the next line.
\catcode\lq\_=8 \CD@uD\@sub=_%%ascii two underlines
%%
%% six ASCII carets (^^^^^^) appear on the next three lines.
\obeylines\catcode\lq\^=7 \CD@uD\@super=^%%ascii two carets
\ifnum\newlinechar=10 \gdef\CD@aG{^^J}%%ascii two carets
\else\ifnum\newlinechar=13 \gdef\CD@aG{^^M}%%ascii two carets
\else\CD@uD\CD@aG\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\message{***************************************************}\message{!
Obsolete TeX (version 2). You should upgrade to *}\message{! version 3, which
has been available since 1990. *}\message{***********************************%
****************}\fi

\newif\if@ignore

\def\cd@shouldnt#1{\CD@GB{* THIS (#1) 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@rD#1{\CD@kJ\let\CD@kG\CD@qD\CD@qD#1,],}%%ascii sq brackets
\def\CD@k{[}\def\CD@GD{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1%
\enddiagram}}

%% ASCII open square bracket occurs on next line
\def\CD@oE{{\ifx\CD@lG[\aftergroup\get@square@arg\aftergroup\CD@DH\else
\aftergroup\CD@pG\fi}}%%
\def\CD@pE#1#2{\def\CD@DH{#1}\def\CD@pG{#2}\futurelet\CD@lG\CD@oE}

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

\def\CD@LB{%% arguments to maps inside diagrams
\tokcase\CD@tC:\CD@y\break@args;\catcase\@super:\upper@label;\catcase\@sub:%
\lower@label;\tokcase{~}:\middle@label;%%ascii tilde
\tokcase<:\left@label;%%ascii less-than
\tokcase>:\right@label;%%ascii greater-than
\tokcase(:\CD@wB;%%)%ascii open round bracket
\tokcase[:\optional@;%%]%ascii open square bracket
\tokcase.:\CD@jI;%%ascii dot 12.7.94
\catcase\space:\eat@space;\catcase\bgroup:\positional@;\default:\CD@@A
\break@args;\endswitch}

\def\switch@arg{%% arguments to horizontal maps outside diagrams
\catcase\@super:\upper@label;\catcase\@sub:\lower@label;\tokcase[:\optional@;%
%%]%ascii open square bracket
\tokcase.:\CD@jI:%%ascii dot 12.7.94
\catcase\space:\eat@space;\catcase\bgroup:\positional@;\tokcase{~}:%
\middle@label;%%ascii tilde (questionable!)
\default:\CD@y\break@args;\endswitch}

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

\let\CD@PJ\relax\ifx\protect\undefined\let\protect\relax\fi\ifx\AtEndDocument
\undefined\let\CD@wF\CD@cB\def\info@at@end#1#2{}\else\def\CD@wF#1{\edef\CD@jG
{#1}\expandafter\CD@fC\CD@jG\CD@DD}\def\CD@fC#1\CD@DD{\AtEndDocument{\typeout
{\CD@rA: #1}}}\def\info@at@end#1#2{\gdef#1{#2}\AtEndDocument{#1}}\fi\def
\CD@ZA#1#2{\def#1{\CD@wF{#2\CD@cD\CD@U}\CD@uD#1\relax}}\def\CD@cF#1\repeat{%
\def\CD@m{#1}\CD@@F}\def\CD@@F{\CD@m\relax\expandafter\CD@@F\fi}\def\CD@aF#1%
\repeat{\def\CD@n{#1}\CD@AF}\def\CD@AF{\CD@n\relax\expandafter\CD@AF\fi}\def
\CD@bF#1\repeat{\def\CD@o{#1}\CD@BF}\def\CD@BF{\CD@o\relax\expandafter\CD@BF
\fi}\def\CD@ZG#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y%
\diagram@help@messages\def\CD@XG#1#2{\csname newtoks\endcsname#1#1=%
\expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\no@cd@help
\no@cd@help{See the manual}\def\CD@XG#1#2{\let#1\no@cd@help}\fi\chardef\CD@VF
=1 \chardef\CD@LI=2 \chardef\CD@sG=5 \chardef\CD@XH=6 \chardef\CD@WH=7
\chardef\CD@HC=9 \dimendef\CD@JI=2 \dimendef\CD@TF=3 \dimendef\CD@WF=4
\dimendef\CD@MI=5 \dimendef\CD@SJ=6 \dimendef\CD@TI=8 \dimendef\CD@SI=9
\skipdef\CD@oB=1 \skipdef\CD@zE=2 \skipdef\CD@nB=3 \skipdef\CD@PE=4 \skipdef
\CD@fJ=5 \skipdef\CD@KI=6 \skipdef\CD@UF=7 \skipdef\CD@QI=8 \skipdef\CD@PI=9
\countdef\CD@BC=9 \countdef\CD@VD=8 \countdef\CD@A=7 \def\sdef#1#2{\def#1{#2}%
}\def\CD@J#1{\expandafter\aftergroup\csname#1\endcsname}\def\CD@JC#1{%
\expandafter\def\csname#1\endcsname}\def\CD@iD#1{\expandafter\gdef\csname#1%
\endcsname}\def\CD@mC#1{\expandafter\edef\csname#1\endcsname}\def\CD@XF#1#2{%
\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}\def\CD@vD
#1#2{\expandafter\CD@uD\csname#1\expandafter\endcsname\csname#2\endcsname}%
\def\CD@YJ#1{\csname#1\endcsname}\def\CD@wI#1{\expandafter\show\csname#1%
\endcsname}\def\CD@yI#1{\expandafter\showthe\csname#1\endcsname}\def\CD@vI#1{%
\expandafter\showbox\csname#1\endcsname}\def\CD@rA{Commutative Diagram}\edef
\CD@PH{\string\par}\edef\CD@VC{\string\diagram}\edef\CD@xC{\string\enddiagram
}\edef\CD@xB{\string\\}\def\CD@RF{LaTeX}\def\CD@e{{\ifnum0=\lq}\fi}\def\CD@nC
{\ifnum0=\lq{\fi}}\def\catcase#1:{\ifcat\noexpand\CD@lG#1\CD@PJ\expandafter
\CD@bC\else\expandafter\CD@BJ\fi}\def\tokcase#1:{\ifx\CD@lG#1\CD@PJ
\expandafter\CD@bC\else\expandafter\CD@BJ\fi}\def\CD@bC#1;#2\endswitch{#1}%
\def\CD@BJ#1;{}\let\endswitch\relax\def\default:#1;#2\endswitch{#1}\ifx\at@
\undefined\def\at@{@}\fi\edef\CD@N{\CD@l pt\CD@pC}\CD@JC{\CD@N>}#1>#2>{\CD@z
\rTo\sp{#1}\sb{#2}\CD@z}\CD@JC{\CD@N<}#1<#2<{\CD@z\lTo\sp{#1}\sb{#2}\CD@z}%
\CD@JC{\CD@N)}#1)#2){\CD@z\rTo\sp{#1}\sb{#2}\CD@z}%%ascii round
\CD@JC{\CD@N(}#1(#2({\CD@z\lTo\sp{#1}\sb{#2}\CD@z}%%ascii brack
\def\CD@M{\def\endCD{\enddiagram}\CD@JC{\CD@N A}##1A##2A{\uTo<{##1}>{##2}%
\CD@z\CD@z}\CD@JC{\CD@N V}##1V##2V{\dTo<{##1}>{##2}\CD@z\CD@z}\CD@JC{\CD@N=}{%
\CD@z\hEq\CD@z}\CD@JC{\CD@N\CD@gJ}{\vEq\CD@z\CD@z}\CD@JC{\CD@N\string\vert}{%
\vEq\CD@z\CD@z}\CD@JC{\CD@N.}{\CD@z\CD@z}\let\CD@z\CD@O}\def\CD@zD{\let\tmp
\CD@@E\ifcat A\noexpand\CD@jG\else\ifcat=\noexpand\CD@jG\else\ifcat\relax
\noexpand\CD@jG\else\let\tmp\at@\fi\fi\fi\tmp}\def\CD@@E#1{\CD@XF{tmp}{\CD@N
\string#1}\ifx\tmp\relax\def\tmp{\at@#1}\fi\tmp}\def\CD@z{}\begingroup
\aftergroup\def\aftergroup\CD@R\aftergroup{\aftergroup\def\catcode\lq\@%
\active\aftergroup @\endgroup{\futurelet\CD@jG\CD@zD}}\newcount\CD@sA
\newcount\CD@tA\newcount\CD@uA\newcount\CD@vA\newdimen\CD@OA\newdimen\CD@PA
\CD@ZG\CD@UE\CD@@A\CD@y\CD@ZG\CD@VE\CD@EA\CD@BA\newdimen\CD@RA\newdimen\CD@SA
\newcount\CD@wA\newcount\CD@xA\newdimen\CD@QA\newbox\CD@DA\CD@ZG\CD@ZE\CD@cA
\CD@bA\newcount\CD@rG\newcount\CD@LC\def\CD@T#1#2{\ifdim#1<#2\relax#1=#2%
\relax\fi}\def\CD@V#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\CD@CH\CD@CH
=1sp \newdimen\CD@qC\CD@qC\z@\def\CD@AJ{\ifdim\CD@qC=1em\else\CD@JJ\fi}\def
\CD@JJ{\CD@qC1em\def\CD@FC{\fontdimen8\textfont3 }\CD@bI\CD@nI\setbox0=\vbox{%
\CD@q\noindent\CD@i\null\penalty-9993\null\CD@CD\null\endgraf\setbox0=%
\lastbox\unskip\unpenalty\setbox1=\lastbox\global\setbox\CD@pF=\hbox{\unhbox0%
\unskip\unskip\unpenalty\setbox0=\lastbox}\global\setbox\CD@rF=\hbox{\unhbox1%
\unskip\unpenalty\setbox1=\lastbox}}}\newdimen\CD@dH\CD@dH=1true in \divide
\CD@dH300 \def\CD@cH#1{\multiply#1\tw@\advance#1\ifnum#1<\z@-\else+\fi\CD@dH
\divide#1\tw@\divide#1\CD@dH\multiply#1\CD@dH}\def\MapBreadth{%
\afterassignment\CD@HI\CD@xE}\newdimen\CD@xE\newdimen\CD@OI\def\CD@HI{\CD@OI
\CD@xE\CD@T\CD@dH{4\CD@CH}\CD@V\CD@dH\p@\CD@cH\CD@OI\ifdim\CD@xE>\z@\CD@T
\CD@OI\CD@dH\fi\CD@AJ}\def\CD@qI#1{\CD@pD\count@\CD@dH#1\ifnum\count@>\z@
\divide\CD@dH\count@\fi\CD@HI\CD@nI}\def\CD@nI{\dimen@\CD@IC\count@\dimen@
\divide\count@5\divide\count@\CD@dH\edef\CD@GC{\the\count@}}\def\set@axis{%
\CD@TI\axisheight\advance\CD@TI-.5\CD@OI\CD@cH\CD@TI\CD@SI-\CD@TI\advance
\CD@TI\CD@xE}\def\CD@cI{\CD@SI\z@\CD@TI\CD@xE\relax}\def\horizhtdp{height%
\CD@TI depth\CD@SI}\def\axisheight{\fontdimen22\the\textfont\tw@}\def
\script@axisheight{\fontdimen22\the\scriptfont\tw@}\def\ss@axisheight{%
\fontdimen22\the\scriptscriptfont\tw@}\def\CD@FC{0.4pt}\def\CD@qJ{\fontdimen3%
\textfont\z@}\def\CD@pJ{\fontdimen3\textfont\z@}\newdimen\PileSpacing
\newdimen\CD@lA\CD@lA\z@\def\CD@yF{\ifincommdiag1.3em\else2em\fi}\newdimen
\CD@UB\def\CellSize{\afterassignment\CD@gB\DiagramCellHeight}\newdimen
\DiagramCellHeight\DiagramCellHeight-\maxdimen\newdimen\DiagramCellWidth
\DiagramCellWidth-\maxdimen\def\CD@gB{\DiagramCellWidth\DiagramCellHeight}%
\def\CD@IC{3em}\newdimen\MapShortFall\def\MapsAbut{\MapShortFall\z@
\objectheight\z@\objectwidth\z@}\newdimen\CD@gA\CD@gA\z@\def\newarrowhead{%
\CD@SG h\CD@jF\CD@nF>}\def\newarrowtail{\CD@SG t\CD@jF\CD@nF>}\def
\newarrowmiddle{\CD@SG m\CD@jF\hbox@maths\empty}\def\newarrowfiller{\CD@SG f%
\CD@RE\CD@iJ-}\def\CD@SG#1#2#3#4#5#6#7#8#9{\CD@JC{r#1:#5}{#2{#6}}\CD@JC{l#1:#%
5}{#2{#7}}\CD@JC{d#1:#5}{#3{#8}}\CD@JC{u#1:#5}{#3{#9}}\CD@mC{-#1:#5}{%
\expandafter\noexpand\csname-#1:#4\endcsname\noexpand\CD@EC}\CD@mC{+#1:#5}{%
\expandafter\noexpand\csname+#1:#4\endcsname\noexpand\CD@EC}}\CD@ZA\CD@EC{%
\CD@RF\space diagonals are used unless PostScript is set}\def
\defaultarrowhead#1{\edef\CD@OJ{#1}\CD@bI}\def\CD@bI{\CD@iI\CD@OJ<>ht\CD@iI
\CD@OJ<>th}\def\CD@iI#1#2#3#4#5{\CD@hI{r#4}{#3}{l#5}{#2}{r#4:#1}\CD@hI{r#5}{#%
2}{l#4}{#3}{l#4:#1}\CD@hI{d#4}{#3}{u#5}{#2}{d#4:#1}\CD@hI{d#5}{#2}{u#4}{#3}{u%
#4:#1}}\def\CD@hI#1#2#3#4#5{\begingroup\aftergroup\CD@gI\CD@J{#1+:#2}\CD@J{#1%
:#2}\CD@J{#3:#4}\CD@J{#5}\endgroup}\def\CD@gI#1#2#3#4{\csname newbox%
\endcsname#1\def#2{\copy#1}\def#3{\copy#1}\setbox#1=\box\voidb@x}\def\CD@OJ{}%
\CD@bI\def\CD@gI#1#2#3#4{\setbox#1=#4}\ifx\tenln\nullfont\def\CD@OJ{vee}\else
\let\CD@OJ\CD@RF\fi\def\CD@fF#1#2#3{\begingroup\aftergroup\CD@eF\CD@J{#1#2:#3%
#3}\CD@J{#1#2:#3}\endgroup}\def\CD@eF#1#2{\def#1{\hbox{\rlap{#2}\kern.4\CD@qC
#2}}}\CD@fF rh>\CD@fF lh>\CD@fF rt>\CD@fF lt>\CD@fF rh<\CD@fF lh<\CD@fF rt<%
\CD@fF lt<\def\CD@eF#1#2{\def#1{\vbox{\vbox to\z@{#2\vss}\nointerlineskip
\kern.4\CD@qC#2}}}\CD@fF dh>\CD@fF uh>\CD@fF dt>\CD@fF ut>\CD@fF dh<\CD@fF uh%
<\CD@fF dt<\CD@fF ut<\def\CD@jF#1{\hbox{\mathsurround\z@\offinterlineskip
\CD@i\mkern-1.5mu{#1}\mkern-1.5mu\CD@CD}}\def\hbox@maths#1{\hbox{\CD@i#1%
\CD@CD}}\def\CD@nF#1{\hbox to\CD@xE{\setbox0=\hbox{\offinterlineskip
\mathsurround\z@\CD@i{#1}\CD@CD}\dimen0.5\wd0\advance\dimen0-.5\CD@OI\CD@cH{%
\dimen0}\kern-\dimen0\unhbox0\hss}}\def\CD@mB#1{\hbox to2\CD@xE{\hss
\offinterlineskip\mathsurround\z@\CD@i{#1}\CD@CD\hss}}\def\CD@dF#1{\hbox{%
\mathsurround\z@\CD@i{#1}\CD@CD}}\def\CD@RE#1{\hbox{\kern-.15\CD@qC\CD@i{#1}%
\CD@CD\kern-.15\CD@qC}}\def\CD@iJ#1{\vbox{\offinterlineskip\kern-.2ex\CD@nF{#%
1}\kern-.2ex}}\def\@fillh{\xleaders\vrule\horizhtdp}\def\@fillv{\xleaders
\hrule width\CD@xE}\CD@XF{rf:-}{@fillh}\CD@XF{lf:-}{@fillh}\CD@XF{df:-}{%
@fillv}\CD@XF{uf:-}{@fillv}\CD@XF{rh:}{null}\CD@XF{rm:}{null}\CD@XF{rt:}{null%
}\CD@XF{lh:}{null}\CD@XF{lm:}{null}\CD@XF{lt:}{null}\CD@XF{dh:}{null}\CD@XF{%
dm:}{null}\CD@XF{dt:}{null}\CD@XF{uh:}{null}\CD@XF{um:}{null}\CD@XF{ut:}{null%
}\CD@XF{+h:}{null}\CD@XF{+m:}{null}\CD@XF{+t:}{null}\CD@XF{-h:}{null}\CD@XF{-%
m:}{null}\CD@XF{-t:}{null}\CD@JC{rf:}{\hbox{\kern1pt}}\CD@XF{lf:}{rf:}\CD@XF{%
+f:}{rf:}\CD@JC{df:}{\vbox{\kern1pt}}\CD@XF{uf:}{df:}\CD@XF{-f:}{df:}\edef
\CD@RG{\string\newarrow}\def\newarrow#1#2#3#4#5#6{\begingroup\edef\CD@KG{#1}%
\edef\CD@KJ{#2}\edef\CD@XD{#3}\edef\CD@xF{#4}\edef\CD@YD{#5}\edef\CD@BE{#6}%
\let\CD@yD\CD@YG\let\CD@bJ\CD@iG\let\@x\CD@hG\ifx\CD@KJ\CD@XD\let\CD@KJ\empty
\fi\ifx\CD@BE\CD@YD\let\CD@BE\empty\fi\def\CD@nH{r}\def\CD@DF{l}\def\CD@AC{d}%
\def\CD@UJ{u}\def\CD@LH{+}\def\@m{-}\ifx\CD@XD\CD@YD\ifx\CD@xF\CD@XD\let
\CD@xF\empty\fi\ifx\CD@BE\empty\ifx\CD@XD\CD@QE\let\@x\CD@eG\else\let\@x
\CD@fG\fi\fi\else\edef\CD@Y{\CD@XD\CD@KJ}\ifx\CD@Y\empty\ifx\CD@xF\CD@YD\let
\CD@xF\empty\fi\fi\fi\ifmmode\aftergroup\CD@QG\else\CD@@A\CD@kB rh{head\space
\space}\CD@BE\CD@kB rf{filler}\CD@XD\CD@kB rm{middle}\CD@xF\ifx\CD@YD\CD@XD
\else\CD@kB rf{filler}\CD@YD\fi\CD@kB rt{tail\space\space}\CD@KJ\CD@UE\CD@yD
\CD@bJ\@x\CD@TG l-2+2{lu}{nw}\NorthWest\CD@TG r+2+2{ru}{ne}\NorthEast\CD@TG l%
-2-2{ld}{sw}\SouthWest\CD@TG r+2-2{rd}{se}\SouthEast\else\aftergroup\CD@Z
\CD@J{r\CD@KG}\fi\fi\endgroup}\def\CD@YG{\CD@bG\CD@nH\CD@DF rl\Horizontal@Map
}\def\CD@iG{\CD@bG\CD@AC\CD@UJ du\Vertical@Map}\def\CD@hG{\CD@bG\CD@LH\@m+-%
\Vector@Map}\def\CD@eG{\CD@bG\CD@LH\@m+-\Slant@Map}\def\CD@fG{\CD@bG\CD@LH\@m
+-\Slope@Map}\catcode\lq\/=\active\def\CD@bG#1#2#3#4#5{\CD@PG#1#3#5t:\CD@KJ/f%
:\CD@XD/m:\CD@xF/f:\CD@YD/h:\CD@BE//\CD@PG#2#4#5h:\CD@BE/f:\CD@YD/m:\CD@xF/f:%
\CD@XD/t:\CD@KJ//}\def\CD@PG#1#2#3#4//{\edef\CD@LG{#2}\aftergroup\sdef\CD@J{#%
1\CD@KG}\aftergroup{\aftergroup#3\CD@K#4//\aftergroup}}\def\CD@K#1/{\edef
\CD@lG{#1}\ifx\CD@lG\empty\else\CD@J{\CD@LG#1}\expandafter\CD@K\fi}\catcode
\lq\/=12 \def\CD@TG#1#2#3#4#5#6#7#8{\aftergroup\sdef\CD@J{#6\CD@KG}%
\aftergroup{\CD@J{#2\CD@KG}\if#2#4\aftergroup\PositiveGradienttrue\else
\aftergroup\PositiveGradientfalse\fi\CD@J{#1\CD@KG}%
%% ASCII round brackets and comma (,) appear on the next line
\aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}%
\def\CD@kB#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\CD@y\CD@cB{%
arrow#3 "#4" undefined}\fi}\CD@XG\CD@LE{All five components must be defined
before an arrow.}\CD@XG\CD@IE{\CD@RG, unlike \string\HorizontalMap, is a
declaration.}\def\CD@Z#1{\CD@YA{Arrows \string#1 etc could not be defined}%
\CD@LE}\def\CD@QG{\CD@YA{misplaced \CD@RG}\CD@IE}\def\newdiagramgrid#1#2#3{%
\CD@JC{cdgh@#1}{#2,],}%% ASCII close square bracket
\CD@JC{cdgv@#1}{#3,],}}%% ASCII close square bracket
\CD@ZG\ifincommdiag\incommdiagtrue\incommdiagfalse\CD@ZG\CD@mE\CD@uE\CD@tE
\newcount\CD@VA\CD@VA=0 \def\CD@bH{\CD@VA6 }\def\CD@KB{\CD@VA1 \global\CD@wA1
\CD@uD\CD@JF\empty}\def\CD@JF{}\def\CD@jB#1{\relax\CD@BD\edef\CD@RJ{#1}%
\begingroup\CD@TE\else\ifcase\CD@VA\ifmmode\else\CD@EG\CD@E0\fi\or\CD@SE5\or
\CD@EG\CD@F5\or\CD@EG\CD@B5\or\CD@EG\CD@B5\or\CD@EG\CD@C5\or\CD@SE7\or\CD@EG
\CD@D7\fi\fi\endgroup\xdef\CD@JF{#1}}\def\CD@lB#1#2#3#4#5{\relax\CD@BD\xdef
\CD@RJ{#4}\begingroup\ifnum\CD@VA<#1 \expandafter\CD@SE\ifcase\CD@VA0\or#2\or
#3\else#2\fi\else\ifnum\CD@VA<6 \CD@PJ\CD@EG\CD@B#2\else\CD@EG\CD@G#2\fi\fi
\endgroup\CD@uD\CD@JF\CD@RJ\ifincommdiag\let\CD@PD#5\else\let\CD@PD\CD@hJ\fi}%
\def\CD@ZI{\global\CD@wA=\ifnum\CD@VA<5 1\else2\fi\relax}\def\CD@qH{\CD@VA
\CD@wA}\def\CD@SE#1{\aftergroup\CD@VA\aftergroup#1\aftergroup\relax}\def
\CD@oG{\def\CD@jB##1{\relax}\let\CD@lB\CD@mG\let\CD@bH\relax\let\CD@KB\relax
\let\CD@ZI\relax\let\CD@qH\relax}\def\CD@mG#1#2#3#4#5{\ifincommdiag\let\CD@PD
#5\else\xdef\CD@RJ{#4}\let\CD@PD\CD@hJ\fi}\def\CD@EG#1{\aftergroup#1%
\aftergroup\relax\CD@SE}\def\CD@B{\CD@OE\CD@Q\CD@CE\CD@O}\def\CD@G{\CD@OE{%
\CD@pC\CD@Q}\CD@NE\CD@FD\CD@O}\def\CD@F{\CD@OE{*\CD@Q}\CD@HE\clubsuit\CD@O}%
\def\CD@C{\CD@OE{\CD@Q*\CD@Q}\CD@HE\CD@O\clubsuit\CD@O}\def\CD@D{\CD@OE\CD@xB
\CD@JE\\}\def\CD@E{\CD@OE\CD@eC\CD@GE\CD@i}\def\CD@hJ{\CD@YA{\CD@RJ\space
ignored \CD@IH}\CD@ME}\def\CD@wD{}\def\CD@b{\CD@YA{maps must never be enclosed
in braces}\CD@EE}\def\CD@IH{outside diagram}\def\CD@yB{\string\HonV, \string
\VonH\space and \string\HmeetV}\CD@XG\CD@CE{The way that horizontal and
vertical arrows are terminated implicitly means\CD@aG that they cannot be
mixed with each other or with \CD@yB.}\CD@XG\CD@NE{\string\pile\space is for
parallel horizontal arrows; verticals can just be put together in\CD@aG a cell%
. \CD@yB\space are not meaningful in a \string\pile.}\CD@XG\CD@HE{The
horizontal maps must point to an object, not each other (I've put in\CD@aG one
which you're unlikely to want). Use \string\pile\space if you want them
parallel.}\CD@XG\CD@JE{Parallel horizontal arrows must be in separate layers
of a \string\pile.}\CD@XG\CD@GE{Horizontal arrows may be used \CD@IH s, but
must still be in maths.}\CD@XG\CD@ME{Vertical arrows, \CD@yB\space\CD@IH s don%
't know where\CD@aG where to terminate.}\CD@XG\CD@EE{This prevents them from
stretching correctly.}\def\CD@OE#1{\CD@YA{"#1" inserted \ifx\CD@JF\empty
before \CD@RJ\else between \CD@JF\ifx\CD@JF\CD@RJ s\else\space and \CD@RJ\fi
\fi}}\count@=\year\multiply\count@12 \advance\count@\month\ifnum\count@>23977
\message{because this one expired in August 1997!}\expandafter\endinput\fi
\def\Horizontal@Map{\CD@jB{horizontal map}\CD@DC\CD@sI\CD@gD}\def\CD@sI{%
\CD@EB-9999 \let\CD@PD\CD@OD\ifincommdiag\else\CD@AJ\ifinpile\else\skip2\z@
plus 1.5\CD@qJ minus .5\CD@pJ\skip4\skip2 \fi\fi\let\CD@aD\@fillh\let\CD@ZD
\hfdot}\def\Vector@Map{\CD@dJ4}\def\Slant@Map{\CD@dJ{\CD@rE255\else6\fi}}\def
\Slope@Map{\CD@dJ\CD@GC}\def\CD@dJ#1#2#3#4#5#6{\CD@DC\def\CD@rJ{2}\def\CD@vJ{%
2}\def\CD@uJ{1}\def\CD@wJ{1}\let\Horizontal@Map\CD@NI\def\CD@vF{#1}\def\CD@pH
{\CD@S#2#3#4#5#6}}\def\CD@NI{\CD@sI\CD@x\let\CD@PD\CD@LD\CD@gD}\CD@ZG\CD@dE
\CD@pA\CD@oA\CD@pA\def\cds@missives{\CD@pA}\def\CD@LD{\CD@iE\let\CD@vF\CD@GC
\CD@v\CD@HF\setbox\z@\hbox{\incommdiagfalse\CD@jH}\CD@dE\CD@QD\else\global
\CD@QC\CD@JD\fi\else\CD@pH\CD@oH\global\CD@QC\CD@ID\fi}\def\CD@DC{\begingroup
\dimen1=\MapShortFall\dimen2=\CD@yF\dimen5=\MapShortFall\setbox3=\box\voidb@x
\setbox6=\box\voidb@x\setbox7=\box\voidb@x\CD@fD\mathsurround\z@\skip2\z@ plus%
1fill minus 1000pt\skip4\skip2 \CD@PB}\CD@ZG\CD@gE\CD@QB\CD@PB\def\CD@S#1#2#3%
#4#5{\let\CD@KJ#1\let\CD@XD#2\let\CD@xF#3\let\CD@YD#4\let\CD@BE#5\CD@PB\ifx
\CD@XD\CD@YD\CD@QB\fi}\def\CD@gD#1#2#3#4#5{\CD@S#1#2#3#4#5\CD@jD}\def
\Vertical@Map{\CD@lB433{vertical map}\CD@RD\CD@DC\CD@EB-9995 \let\CD@aD
\@fillv\let\CD@ZD\vfdot\CD@gD}\def\break@args{\def\CD@jD{\CD@PD}\CD@PD
\endgroup\aftergroup\CD@wD}\def\CD@mI{\setbox1=\CD@KJ\setbox5=\CD@BE\ifvoid3
\ifx\CD@xF\null\else\setbox3=\CD@xF\fi\fi\CD@hF2\CD@XD\CD@hF4\CD@YD}\def
\CD@hF#1#2{\ifx#2\CD@aD\setbox#1=\box\voidb@x\else\setbox#1=#2\def#2{%
\xleaders\box#1}\fi}\CD@ZA\CD@ZJ{\string\HorizontalMap, \string\VerticalMap
\space and \string\DiagonalMap\CD@aG are obsolete - use \CD@RG\space to pre-%
define maps}\def\HorizontalMap#1#2#3#4#5{\CD@ZJ\CD@jB{old horizontal map}%
\CD@DC\CD@sI\def\CD@KJ{\CD@@H{#1}}\CD@yG\CD@XD{#2}\def\CD@xF{\CD@@H{#3}}%
\CD@yG\CD@YD{#4}\def\CD@BE{\CD@@H{#5}}\CD@jD}\def\VerticalMap#1#2#3#4#5{%
\CD@ZJ\CD@lB433{vertical map}\CD@RD\CD@DC\CD@EB-9995 \let\CD@aD\@fillv\def
\CD@KJ{\CD@nF{#1}}\CD@AH\CD@XD{#2}\def\CD@xF{\CD@nF{#3}}\CD@AH\CD@YD{#4}\def
\CD@BE{\CD@nF{#5}}\CD@jD}\def\DiagonalMap#1#2#3#4#5{\CD@ZJ\CD@DC\def\CD@vF{4}%
\let\CD@aD\undefined\let\CD@PD\CD@ID\def\CD@rJ{2}\def\CD@vJ{2}\def\CD@uJ{1}%
\def\CD@wJ{1}\def\CD@xF{\CD@dF{#3}}\ifPositiveGradient\let\mv\raise\def\CD@KJ
{\CD@dF{#5}}\def\CD@XD{\CD@dF{#4}}\def\CD@YD{\CD@dF{#2}}\def\CD@BE{\CD@dF{#1}%
}\else\let\mv\lower\def\CD@KJ{\CD@dF{#1}}\def\CD@XD{\CD@dF{#2}}\def\CD@YD{%
\CD@dF{#4}}\def\CD@BE{\CD@dF{#5}}\fi\CD@jD}\def\CD@QE{-}\def\CD@rC{\empty}%
\def\CD@yG{\CD@lF\CD@RE\CD@QE\@fillh}\def\CD@AH{\CD@lF\CD@iJ\CD@gJ\@fillv}%
\def\CD@lF#1#2#3#4#5{\def\CD@jG{#5}\ifx\CD@jG#2\let#4#3\else\let#4\null\ifx
\CD@jG\empty\else\ifx\CD@jG\CD@rC\else\let#4\CD@jG\fi\fi\fi}\def\CD@@H#1{%
\hbox{\mathsurround\z@\offinterlineskip\def\CD@jG{#1}\ifx\CD@jG\empty\else
\ifx\CD@jG\CD@rC\else\CD@i\mkern-1.5mu{\CD@jG}\mkern-1.5mu\CD@CD\fi\fi}}\def
\CD@oD#1#2{\setbox#1=\hbox\bgroup\setbox0=\hbox{\CD@i\labelstyle()\CD@CD}%
%% ASCII round brackets
\setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\CD@qC\CD@i\bgroup\labelstyle
\aftergroup\CD@AD\CD@nD}\def\CD@AD{\CD@CD\kern.1\CD@qC\egroup\CD@jD}\def
\CD@nD{\futurelet\CD@lG\CD@IJ}\def\CD@IJ{%% qualifiers on label arguments
\catcase\bgroup:\CD@t;\catcase\egroup:\missing@label;\catcase\space:\CD@EF;%
\tokcase[:\CD@IF;%%]%ascii close square bracket 
\default:\CD@VJ;\endswitch}\def\CD@t{\let\CD@BD\CD@a\let\CD@jG}\def\CD@VJ#1{%
\let\CD@FF\egroup{\let\actually@braces@missing@around@macro@in@label\CD@EH
\let\CD@BD\CD@oC\let\CD@FF\CD@GF#1%
\actually@braces@missing@around@macro@in@label}\CD@FF}\def
\actually@braces@missing@around@macro@in@label{\let\CD@jG=}\def\missing@label
{\egroup\CD@YA{missing label}\CD@FE}\def\CD@oC{\egroup\missing@label}\outer
\def\CD@EH{}\def\CD@FF{}\def\CD@GF{\CD@nC\CD@FF}\def\CD@BD{}\def\CD@IF{\let
\CD@L\CD@nD\get@square@arg\CD@rD}\CD@XG\CD@FE{The text which has just been
read is not allowed within map labels.}\def\CD@a{\egroup\CD@YA{missing \CD@pC
\space inserted after label}\CD@FE}\def\upper@label{\CD@eD\CD@oD6}\def
\lower@label{\def\positional@{\CD@@A\break@args}\CD@oD7}\def\middle@label{%
\CD@oD3}\CD@ZG\CD@lE\CD@fD\CD@eD\def\left@label{\ifPositiveGradient\CD@PJ
\expandafter\upper@label\else\expandafter\lower@label\fi}\def\right@label{%
\ifPositiveGradient\CD@PJ\expandafter\lower@label\else\expandafter
\upper@label\fi}\CD@ZA\CD@wG{labels as positional arguments are obsolete}\def
\positional@{\CD@wG\CD@lE\CD@PJ\expandafter\upper@label\else\expandafter
\lower@label\fi-}\def\CD@jD{\futurelet\CD@lG\switch@arg}\def\eat@space{%
\afterassignment\CD@jD\let\CD@lG= }\def\CD@EF{\afterassignment\CD@nD\let
\CD@lG= }\def\CD@wB{\get@round@pair\CD@kD}\def\CD@kD#1#2{\def\CD@rJ{#1}\def
\CD@vJ{#2}\CD@jD}\def\optional@{\let\CD@L\CD@jD\get@square@arg\CD@rD}\def
\CD@jI.{\CD@jC\CD@jD}\def\CD@jC{\let\CD@XD\CD@ZD\let\CD@YD\CD@ZD\def\CD@oH{%
\let\CD@XD\dfdot\let\CD@YD\dfdot}}\def\CD@oH{}\def\CD@qD#1,{\CD@SH#1,%
\begingroup\ifx\CD@KG\CD@GD\CD@sE\aftergroup\CD@c\fi\aftergroup\CD@aC\else
\expandafter\def\expandafter\CD@CF\expandafter{\csname\CD@KG\endcsname}%
\expandafter\CD@lD\CD@CF\CD@@D\ifx\CD@CF\empty\aftergroup\CD@gC\expandafter
\aftergroup\csname\CD@DB\CD@KG\endcsname\expandafter\aftergroup\csname\CD@DB @%
\CD@KG\endcsname\else\gdef\CD@xD{#1}\CD@cB{\string\relax\space inserted before
`[\CD@xD'}\message{(I was trying to read it as an option.)}\aftergroup\CD@H
\fi\fi\endgroup}\def\CD@lD#1#2\CD@@D{\def\CD@CF{#2}}\def\CD@aC{\let\CD@jG
\CD@L\let\CD@L\relax\CD@jG}\def\CD@H#1],{%% ASCII close square bracket
\CD@aC\relax\def\CD@CF{#1}\ifx\CD@CF\empty\def\CD@CF{[\CD@xD]}%
%% ASCII open and close square bracket
\else\def\CD@CF{[\CD@xD,#1]}%% ASCII open and close square bracket
\fi\CD@CF}\def\CD@gC#1#2{\ifx#2\undefined\ifx#1\undefined\CD@cB{option `%
\CD@KG' undefined}\else#1\fi\else\CD@sE\expandafter#2\CD@cJ\CD@kJ\else\CD@lJ
\fi\fi\CD@kG}\CD@ZG\CD@sE\CD@lJ\CD@kJ\def\CD@SH#1,{\CD@sE\ifx\CD@cJ\undefined
\CD@c\else\expandafter\CD@TH\CD@cJ,#1,(,),(,)[]%
%%ASCII 5commas two pairs round, pair square
\fi\fi\CD@sE\else\CD@RH#1==,\fi}\def\CD@c{\CD@cB{option `\CD@KG' needs (x,y)
value}\CD@kJ\let\CD@KG\empty}\def\CD@RH#1=#2=#3,{\def\CD@KG{#1}\def\CD@cJ{#2}%
\def\CD@CF{#3}\ifx\CD@CF\empty\let\CD@cJ\undefined\fi}%
%% ASCII 2commas 2pair round, pair square on next line
\def\CD@TH#1(#2,#3)#4,(#5,#6)#7[]{\def\CD@cJ{{#2}{#3}}\def\CD@CF{#1#4#5#6}%
\ifx\CD@CF\empty\def\CD@CF{#7}\ifx\CD@CF\empty\CD@c\fi\else\CD@c\fi}\def
\CD@DB{cds@}\let\CD@L\relax\def\CD@pD#1{\ifx\CD@cJ\undefined\CD@cB{option `%
\CD@KG' needs a value}\else#1\CD@cJ\relax\fi}\def\CD@sD#1#2{\ifx\CD@cJ
\undefined#1#2\relax\else#1\CD@cJ\relax\fi}\def\cds@@showpair#1#2{\message{x=%
#1,y=#2}}\def\cds@@diagonalbase#1#2{\edef\CD@uJ{#1}\edef\CD@wJ{#2}}\def\CD@fH
#1{\CD@XF{@x}{cdps@#1}\ifx\@x\undefined\CD@d{unknown}\else\ifx\@x\empty\CD@d{%
cannot be used}\else\let\CD@eJ\@x\fi\fi}\def\CD@d#1{\CD@cB{PostScript
translator `\CD@cJ' #1}\CD@VB\let\cds@PS\empty\let\cds@noPS\empty}\def\CD@vG{%
}\def\CD@pI{\CD@dA\edef\CD@vG{\noexpand\CD@GB{\CD@KG\space ignored within
maths}}}\def\diagramstyle{\CD@AJ\let\CD@L\relax\CD@pE\CD@rD\CD@rD}\let
\diagramsstyle\diagramstyle\CD@ZG\CD@fE\CD@OB\CD@NB\CD@ZG\CD@eE\CD@CB\CD@BB
\CD@ZG\CD@cE\CD@nA\CD@mA\CD@ZG\CD@WE\CD@HA\CD@GA\CD@HA\CD@ZG\CD@XE\CD@JA
\CD@IA\CD@ZG\CD@YE\CD@LA\CD@KA\CD@ZG\CD@iE\CD@WB\CD@VB\CD@ZG\CD@rE\CD@XJ
\CD@WJ\CD@ZG\CD@TE\CD@x\CD@w\CD@ZG\CD@aE\CD@eA\CD@dA\CD@ZG\CD@bE\CD@iA\CD@hA
\CD@ZG\CD@nE\CD@NG\CD@MG\CD@JC{cds@ }{}\CD@JC{cds@}{}\CD@JC{cds@1em}{%
\CellSize1\CD@qC}\CD@JC{cds@1.5em}{\CellSize1.5\CD@qC}\CD@JC{cds@2em}{%
\CellSize2\CD@qC}\CD@JC{cds@2.5em}{\CellSize2.5\CD@qC}\CD@JC{cds@3em}{%
\CellSize3\CD@qC}\CD@JC{cds@3.5em}{\CellSize3.5\CD@qC}\CD@JC{cds@4em}{%
\CellSize4\CD@qC}\CD@JC{cds@4.5em}{\CellSize4.5\CD@qC}\CD@JC{cds@5em}{%
\CellSize5\CD@qC}\CD@JC{cds@6em}{\CellSize6\CD@qC}\CD@JC{cds@7em}{\CellSize7%
\CD@qC}\CD@JC{cds@8em}{\CellSize8\CD@qC}\def\cds@abut{\MapsAbut\dimen1\z@
\dimen5\z@}\def\cds@alignlabels{\CD@IA\CD@KA}\def\cds@amstex{\ifincommdiag
\CD@M\else\def\CD{\diagram[amstex]}%%ascii square brackets []
\fi\CD@R\catcode\lq\@\active}\def\cds@b{\let\CD@ZB\CD@XB}\def\cds@balance{%
\let\CD@fA\CD@AA}\let\cds@bottom\cds@b\def\cds@center{\cds@vcentre
\cds@nobalance}\let\cds@centre\cds@center\def\cds@centerdisplay{\CD@HA\CD@pI
\cds@balance}\let\cds@centredisplay\cds@centerdisplay\def\cds@defaultsize{%
\CD@sD{\let\CD@IC}{3em}\CD@nI}\def\cds@displayoneliner{\CD@BB}\let\cds@dotted
\CD@jC\def\cds@dpi{\CD@qI{1truein}}\def\cds@dpm{\CD@qI{100truecm}}\let\CD@XA
\undefined\def\cds@eqno{\let\CD@XA\CD@cJ\let\CD@eI\empty}\def\cds@fixed{%
\CD@oA}\def\cds@flushleft{\CD@GA\CD@pI\cds@nobalance\CD@sD\CD@lA\z@}\def
\cds@grid{\ifx\CD@cJ\undefined\let\h@grid\relax\let\v@grid\relax\else\CD@XF{%
h@grid}{cdgh@\CD@cJ}\CD@XF{v@grid}{cdgv@\CD@cJ}\ifx\h@grid\relax\CD@cB{%
unknown grid `\CD@cJ'}\else\CD@SB\fi\fi}\let\h@grid\relax\let\v@grid\relax
\def\cds@gridx{\ifx\CD@cJ\undefined\else\cds@grid\fi\let\CD@jG\h@grid\let
\h@grid\v@grid\let\v@grid\CD@jG}\def\cds@h{\CD@pD\DiagramCellHeight}\def
\cds@hcenter{\let\CD@fA\CD@aA}\let\cds@hcentre\cds@hcenter\def\cds@heads{%
\CD@sD{\let\CD@OJ}\CD@OJ\CD@bI\CD@iE\else\ifx\CD@OJ\CD@RF\else\CD@EC\fi\fi}%
\let\cds@height\cds@h\let\cds@hmiddle\cds@balance\def\cds@htriangleheight{%
\CD@sD\DiagramCellHeight\DiagramCellHeight\DiagramCellWidth1.73205%
\DiagramCellHeight}\def\cds@htrianglewidth{\CD@sD\DiagramCellWidth
\DiagramCellWidth\DiagramCellHeight.57735\DiagramCellWidth}\def\cds@inline{%
\CD@eA\let\CD@vG\empty}\def\cds@inlineoneliner{\CD@CB}\CD@JC{cds@l>}{\CD@pD{%
\let\CD@yF}\dimen2=\CD@yF}\def\cds@labelstyle{\CD@pD{\let\labelstyle}}\def
\cds@landscape{\CD@iA}\def\cds@large{\CellSize5\CD@qC}\let\CD@eI\empty\def
\CD@fI{\refstepcounter{equation}\def\CD@XA{\hbox{\@eqnnum}}}\def
\cds@LaTeXeqno{\let\CD@eI\CD@fI}\def\cds@lefteqno{\CD@nA}\def
\cds@leftshortfall{\CD@pD{\dimen1 }}\def\cds@lowershortfall{%
\ifPositiveGradient\cds@leftshortfall\else\cds@rightshortfall\fi}\def
\cds@loose{\CD@RB}\def\cds@midhshaft{\CD@JA}\def\cds@midshaft{\CD@JA}\def
\cds@midvshaft{\CD@cB{midvshaft option doesn't work}}\def\cds@moreoptions{%
\CD@@A}\let\cds@nobalance\cds@hcenter\def\cds@nohcheck{\CD@oG}\def
\cds@nooptions{\def\CD@SC{\CD@ND}}\let\cds@noorigin\cds@nobalance\def
\cds@nopixel{\CD@dH4\CD@CH\CD@AJ}\def\cds@noPostScript{\global\let
\better@use@ps\empty\CD@sD\CD@fH\empty\CD@VB\let\cds@PS\empty\let\cds@noPS
\empty}\def\cds@noPS{\CD@VB\global\let\better@use@ps\empty}\def
\cds@notextflow{\CD@NB}\def\cds@noTPIC{\CD@WJ}\def\cds@objectstyle{\CD@pD{%
\let\objectstyle}}\def\cds@origin{\let\CD@fA\CD@eB}\def\cds@p{\CD@pD
\PileSpacing}\let\cds@pilespacing\cds@p\def\cds@pixelsize{\CD@pD\CD@dH\CD@HI}%
\def\cds@portrait{\CD@hA}\def\cds@PostScript{\CD@WB\global\let\better@use@ps
\empty\let\cds@PS\CD@WB\let\cds@noPS\CD@VB\CD@sD\CD@fH\empty}\def\cds@PS{%
\CD@WB\global\let\better@use@ps\empty}\info@at@end\better@use@ps{\typeout{%
\CD@rA: try the PostScript option for better results}}\def
\cds@repositionpullbacks{\let\make@pbk\CD@KH\let\CD@VH\CD@UH}\def
\cds@righteqno{\CD@mA}\def\cds@rightshortfall{\CD@pD{\dimen5 }}\def
\cds@ruleaxis{\CD@pD{\let\axisheight}}\def\cds@cmex{\let\CD@nF\CD@mB\let
\set@axis\CD@cI}\def\cds@s{\cds@height\DiagramCellWidth\DiagramCellHeight}%
\def\cds@scriptlabels{\let\labelstyle\scriptstyle}\def\cds@shortfall{\CD@pD
\MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}\def\cds@showfirstpass{%
\CD@sD{\let\CD@dD}\z@}\def\cds@silent{\def\CD@GB##1{}\def\CD@cB##1{}}\let
\cds@size\cds@s\def\cds@small{\CellSize2\CD@qC}\def\cds@t{\let\CD@ZB\CD@bB}%
\def\cds@textflow{\CD@OB\CD@pI}\def\cds@thick{\let\CD@ZF\tenlnw\CD@xE\CD@FC
\CD@sD\MapBreadth{2\CD@xE}}\def\cds@thin{\let\CD@ZF\tenln\CD@sD\MapBreadth{%
\CD@FC}}\def\cds@tight{\CD@SB}\let\cds@top\cds@t\def\cds@TPIC{\CD@XJ}\def
\cds@uppershortfall{\ifPositiveGradient\cds@rightshortfall\else
\cds@leftshortfall\fi}\def\cds@vcenter{\let\CD@ZB\CD@YB}\let\cds@vcentre
\cds@vcenter\def\cds@vtriangleheight{\CD@sD\DiagramCellHeight
\DiagramCellHeight\DiagramCellWidth.577035\DiagramCellHeight}\def
\cds@vtrianglewidth{\CD@sD\DiagramCellWidth\DiagramCellWidth
\DiagramCellHeight1.73205\DiagramCellWidth}\def\cds@vmiddle{\let\CD@ZB\CD@aB}%
\def\cds@w{\CD@pD\DiagramCellWidth}\let\cds@width\cds@w\def\diagram{\relax
\protect\CD@TC}\def\enddiagram{\protect\CD@zF}\def\CD@TC{\CD@e\CD@UI
\incommdiagtrue\edef\CD@WI{\the\CD@JB}\global\CD@JB\z@\boxmaxdepth\maxdimen
\everycr{}\CD@SC}\def\CD@SC{\CD@y\let\CD@L\CD@RC\CD@pE\CD@rD\CD@ND}\def\CD@RC
{\CD@UE\expandafter\CD@SC\else\expandafter\CD@ND\fi}\def\CD@ND{\let\CD@lG
\relax\CD@bE\CD@iE\else\CD@GB{landscape ignored without PostScript}\CD@hA\fi
\fi\CD@eI\setbox2=\vbox\bgroup\CD@vE\CD@MD}\def\CD@HH{\CD@bE\CD@bB\else\CD@ZB
\fi\CD@fA\nointerlineskip\setbox0=\null\ht0-\CD@PI\dp0\CD@PI\wd0\CD@KI\box0
\global\CD@QA\CD@UF\global\CD@wA\CD@TB\egroup\CD@gF\CD@bE\setbox2=\hbox to\dp
2{\dp2=\CD@QA\global\CD@QA\ht2\ht2\wd2\global\CD@NG\CD@eJ{0 1 bturn}\box2%
\CD@eJ{eturn}\hss}\CD@BB\fi\ifnum\CD@wA=1 \else\CD@BB\fi\global\@ignorefalse
\CD@aE\leavevmode\fi\ifvmode\CD@TA\else\ifmmode\CD@vG\CD@iH\else\CD@eE\CD@eA
\fi\ifinner\CD@eA\fi\CD@aE\CD@iH\else\CD@fE\CD@MB\else\CD@TA\fi\fi\fi\fi
\CD@SD}\def\CD@SD{\global\CD@JB\CD@WI\relax\CD@kE\global\CD@yC\else
\aftergroup\CD@dC\fi\if@ignore\aftergroup\ignorespaces\fi\CD@nC\ignorespaces}%
\def\CD@bB{\advance\CD@PI\dimen1\relax}\def\CD@aB{\advance\CD@PI.5\dimen1%
\relax}\def\CD@XB{}\def\CD@YB{\CD@bB\advance\CD@PI\CD@UB\divide\CD@PI2
\advance\CD@PI-\axisheight\relax}\def\CD@aA{}\def\CD@eB{\CD@UF\z@}\def\CD@AA{%
\ifdim\dimen2>\CD@UF\CD@UF\dimen2 \else\dimen2\CD@UF\CD@KI\dimen0 \advance
\CD@KI\dimen2 \fi}\def\CD@MB{\skip0\z@\relax\loop\skip1\lastskip\ifdim\skip1>%
\z@\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty
\predisplaypenalty\vskip\abovedisplayskip\CD@UA\penalty\postdisplaypenalty
\vskip\belowdisplayskip}\ifdim\skip0=\z@\else\hskip\skip0 \global\@ignoretrue
\fi}\def\CD@TA{\CD@sF\kern-\displayindent\CD@UA\CD@sF\global\@ignoretrue}\def
\CD@UA{\hbox to\hsize{\setbox1=\hbox{\ifx\CD@XA\undefined\else\CD@i\CD@XA
\CD@CD\fi}\CD@cE\CD@WE\else\advance\CD@QA\wd1 \fi\wd1\z@\box1 \fi\dimen0\wd2
\advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\CD@lA\CD@HA\fi
\advance\dimen0\CD@QA\ifdim\dimen0>\z@\CD@GB{wider than the page by \the
\dimen0 }\CD@HA\fi\CD@WE\hss\else\CD@T\CD@QA\CD@lA\fi\CD@iH\hss\kern-\wd1\box
1 }}\def\CD@iH{\CD@nE\CD@mE\else\CD@KC\global\CD@MG\fi\fi\kern\CD@QA\box2 }%
\CD@ZG\CD@jE\CD@QC\CD@PC\def\CD@vE{\CD@AJ\ifdim\DiagramCellHeight=-\maxdimen
\DiagramCellHeight\CD@IC\fi\ifdim\DiagramCellWidth=-\maxdimen
\DiagramCellWidth\CD@IC\fi\global\CD@PC\CD@uE\let\CD@wD\empty\let\CD@z\CD@O
\let\overprint\CD@JH\let\CD@p\CD@NJ\let\enddiagram\CD@uC\let\\\CD@UC\let\par
\CD@OH\let\CD@BD\empty\let\switch@arg\CD@LB\let\shift\CD@gA\baselineskip
\DiagramCellHeight\lineskip\z@\lineskiplimit\z@\mathsurround\z@\tabskip\z@
\CD@KB}\def\CD@MD{\penalty-123 \begingroup\CD@hA\aftergroup\CD@I\halign
\bgroup\global\advance\CD@JB1 \vadjust{\penalty1}\global\CD@FA\z@\CD@KB\CD@h#%
#\CD@tC\CD@O\CD@O\CD@qH\CD@h##\CD@tC\cr}\def\CD@uC{\CD@BD\CD@wC\crcr\egroup
\global\CD@zC\endgroup}\def\CD@h{\global\advance\CD@FA1 \futurelet\CD@lG\CD@g
}\def\CD@g{\ifx\CD@lG\CD@tC\CD@PJ\hskip1sp plus 1fil \relax\let\CD@tC\relax
\CD@VI\else\hfil\CD@i\objectstyle\let\CD@wD\CD@b\fi}\def\CD@tC{\CD@BD\relax
\CD@ZI\CD@VI\global\CD@QA\CD@gA\penalty-9993 \CD@CD\hfil\null\kern-2\CD@QA
\null}\def\CD@UC{\cr}\def\across#1{\span\omit\mscount=#1 \global\advance
\CD@FA\mscount\global\advance\CD@FA\m@ne\CD@aF\ifnum\mscount>2 \CD@CJ\repeat
\ignorespaces}\def\CD@CJ{\relax\span\omit\advance\mscount\m@ne}\def\CD@MJ{%
\ifincommdiag\ifx\CD@XD\@fillh\ifx\CD@YD\@fillh\ifdim\dimen3>\z@\else\ifdim
\dimen2>93\CD@dH\ifdim\dimen2>18\p@\ifdim\CD@xE>\z@\count@\CD@@J\advance
\count@\m@ne\ifnum\count@<\z@\count@20\let\CD@zI\CD@QJ\fi\xdef\CD@@J{\the
\count@}\fi\fi\fi\fi\fi\fi\fi}\def\CD@IG#1{\vrule\horizhtdp width#1\dimen@
\kern2\dimen@}\def\CD@QJ{\rlap{\dimen@\CD@dH\CD@T\dimen@{.182\p@}\CD@cH
\dimen@\advance\CD@TI\dimen@\CD@IG0\CD@IG0\CD@IG2\CD@IG6\CD@IG6\CD@IG2\CD@IG0%
\CD@IG0\CD@IG2\CD@IG6\CD@IG0\CD@IG0\CD@IG2\CD@IG2\CD@IG6\CD@IG0\CD@IG0\CD@IG2%
\CD@IG6\CD@IG2\CD@IG2\CD@IG0\CD@IG0}}\def\CD@@J{10}\def\CD@zI{}\def\CD@OD{%
\CD@UE\CD@PB\fi\CD@v\CD@HF\CD@jH}\def\CD@v{\set@axis\CD@mI\ifvoid3 \setbox3=%
\null\ht3\CD@TI\dp3\CD@SI\else\CD@T{\ht3}\CD@TI\CD@T{\dp3}\CD@SI\fi\dimen3=.5%
\wd3 \ifdim\dimen3=\z@\CD@gE\else\dimen3-\CD@CH\fi\else\CD@PB\fi\CD@T{\dimen2%
}{\wd7}\CD@T{\dimen2}{\wd6}\CD@MJ\advance\dimen2-2\dimen3 \dimen4.5\dimen2
\dimen2\dimen4 \advance\dimen2-\wd1 \advance\dimen4-\wd5 \ifvoid2 \else\CD@T{%
\ht3}{\ht2}\CD@T{\dp3}{\dp2}\CD@T{\dimen2}{\wd2}\fi\ifvoid4 \else\CD@T{\ht3}{%
\ht4}\CD@T{\dp3}{\dp4}\CD@T{\dimen4}{\wd4}\fi\advance\skip2\dimen2 \advance
\skip4\dimen4 \CD@gE\advance\skip2\skip4 \dimen0\dimen5 \advance\dimen0\wd5
\skip3-\skip4 \advance\skip3-\dimen0 \let\CD@YD\empty\else\skip3\z@\relax
\dimen0\z@\fi}\def\CD@HF{\offinterlineskip\lineskip.2\CD@qC\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@jH{\kern\dimen1 \box
1 \CD@zI\CD@XD\hskip\skip2 \kern\dimen0 \ifincommdiag\CD@XE\penalty1\fi\kern
\dimen3 \penalty\CD@EB\hskip\skip3 \null\kern-\dimen3 \else\hskip\skip3 \fi
\box3 \CD@YD\hskip\skip4 \box5 \kern\dimen5}\def\CD@yE{\ifnum\CD@rG>\CD@LC
\CD@T{\dimen1}\objectheight\CD@T{\dimen5}\objectheight\else\CD@T{\dimen1}%
\objectwidth\CD@T{\dimen5}\objectwidth\fi}\def\CD@W{\begingroup\ifdim\dimen7=%
\z@\kern\dimen8 \else\ifdim\dimen6=\z@\kern\dimen9 \else\dimen5\dimen6 \dimen
6\dimen9 \CD@kI\dimen4\dimen2 \CD@JG{\dimen4}\dimen6\dimen5 \dimen7\dimen8
\CD@kI\CD@ZC{\dimen2}\ifdim\dimen2<\dimen4 \kern\dimen2 \else\kern\dimen4 \fi
\fi\fi\endgroup}\def\CD@GJ{\CD@lH\setbox\z@\hbox{\lower\axisheight\hbox to%
\dimen2{\CD@qE\ifPositiveGradient\dimen8\ht\CD@sG\dimen9\CD@MI\else\dimen8\dp
3 \dimen9\dimen1 \fi\else\dimen8 \ifPositiveGradient\objectheight\else\z@\fi
\dimen9\objectwidth\fi\advance\dimen8 \ifPositiveGradient-\fi\axisheight\CD@W
\unhbox\z@\CD@qE\ifPositiveGradient\dimen8\dp3 \dimen9\dimen0 \else\dimen8\ht
\CD@sG\dimen9\CD@WF\fi\else\dimen8 \ifPositiveGradient\z@\else\objectheight
\fi\dimen9\objectwidth\fi\advance\dimen8 \ifPositiveGradient\else-\fi
\axisheight\CD@W}}}\def\CD@JD{\dimen6 \CD@vJ\DiagramCellHeight\dimen7 \CD@rJ
\DiagramCellWidth\CD@GJ\ifPositiveGradient\advance\dimen7-\CD@uJ
\DiagramCellWidth\else\dimen7 \CD@uJ\DiagramCellWidth\dimen6\z@\multiply
\CD@rG\m@ne\fi\advance\dimen6-\CD@wJ\DiagramCellHeight\setbox0=\rlap{\global
\CD@NG\kern-\dimen7 \lower\dimen6\hbox{\CD@TD{\the\CD@LC\space\the\CD@rG
\space bturn}\box0 \CD@eJ{eturn}}}\ht0\z@\dp0\z@\raise\axisheight\box0 }\def
\CD@pB{\advance\CD@TF-\CD@MI\CD@SJ\CD@TF\advance\CD@SJ\CD@JI\ifvoid\CD@WH
\ifdim\CD@SJ<.1em\ifnum\CD@VD=\@m\else\CD@GG h\CD@SJ<.1em:objects overprint:%
\CD@FA\CD@VD\fi\fi\else\ifhbox\CD@WH\CD@nJ\else\CD@oJ\fi\advance\CD@SJ\CD@MI
\CD@GH{-\CD@MI}{\box\CD@WH}{\CD@SJ}\z@\fi\CD@TF-\CD@WF\CD@VD\CD@FA\CD@JI\z@}%
\def\CD@nJ{\setbox\CD@WH=\hbox{\unhbox\CD@WH\unskip\unpenalty}\setbox\CD@XH=%
\hbox{\unhbox\CD@XH\unskip\unpenalty}\setbox\CD@WH=\hbox to\CD@SJ{\CD@OA\wd
\CD@WH\unhbox\CD@WH\CD@PA\lastkern\unkern\ifdim\CD@PA=\z@\CD@QB\advance\CD@OA
-\wd\CD@XH\else\CD@PB\fi\ifnum\lastpenalty=\z@\else\CD@JA\unpenalty\fi\kern
\CD@PA\ifdim\CD@TF<\CD@OA\CD@JA\fi\ifdim\CD@JI<\wd\CD@XH\CD@JA\fi\CD@XE\CD@JI
\CD@SJ\advance\CD@JI-\CD@OA\advance\CD@JI\wd\CD@XH\ifdim\CD@JI<2\wd\CD@XH
\CD@GG h\CD@JI<2\wd\CD@XH:arrow too short:\CD@FA\CD@VD\fi\divide\CD@JI\tw@
\CD@TF\CD@SJ\advance\CD@TF-\CD@JI\fi\CD@gE\kern-\CD@JI\fi\hbox to\CD@JI{%
\unhbox\CD@XH}\CD@oF}}\CD@ZG\ifinpile\inpiletrue\inpilefalse\inpilefalse\def
\pile{\protect\CD@tI\protect\CD@YH}\def\CD@YH#1{\CD@j#1\CD@FD}\def\CD@tI{%
\CD@jB{pile}\setbox0=\vtop\bgroup\aftergroup\CD@bD\inpiletrue\let\CD@wD\empty
\let\pile\CD@wE\let\CD@FD\CD@ED\let\CD@wC\CD@vC\CD@bH\baselineskip.5%
\PileSpacing\lineskip.1\CD@qC\relax\lineskiplimit\lineskip\mathsurround\z@
\tabskip\z@\let\\\CD@ZH}\def\CD@j{\CD@uD\CD@JF\empty\halign\bgroup\hfil\CD@i
\let\CD@wD\CD@b##\CD@BD\CD@CD\hfil\CD@O\CD@P##\cr}\CD@XG\CD@DE{pile only
allows one column.}\CD@XG\CD@KE{you left it out!}\def\CD@P{\CD@FD\CD@O\relax
\CD@YA{missing \CD@pC\space inserted after \string\pile}\CD@DE}\def\CD@ED{%
\CD@BD\crcr\egroup\egroup}\def\CD@wC{\CD@BD}\def\CD@vC{\CD@BD\relax\CD@FD
\CD@YA{missing \CD@pC\space inserted between \string\pile\space and \CD@xC}%
\CD@KE}\def\CD@FD{\CD@BD}\def\CD@bD{\vbox{\dimen1\dp0 \unvbox0 \setbox0=%
\lastbox\advance\dimen1\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=%
\null\dp0.5\dimen1\ht0-\dp0 \box0}\ifincommdiag\CD@PJ\penalty-9998 \fi\xdef
\CD@JF{pile}}\def\CD@ZH{\cr}\def\CD@wE#1{#1}\def\CD@oJ{\setbox\CD@WH=\vbox{%
\unvbox\CD@WH\setbox1=\lastbox\setbox0=\box\voidb@x\CD@bF\setbox\CD@WH=%
\lastbox\ifhbox\CD@WH\CD@iC\repeat\unvbox0 \global\CD@QA\CD@PE}\CD@PE\CD@QA}%
\def\CD@iC{\CD@XE\setbox\CD@WH=\hbox{\unhbox\CD@WH\unskip\setbox\CD@WH=%
\lastbox\unskip\unhbox\CD@WH}\ifdim\CD@SJ<\wd\CD@WH\CD@GG h\CD@SJ<\wd\CD@WH:%
arrow in pile too short:\CD@FA\CD@VD\else\setbox\CD@WH=\hbox to\CD@SJ{\unhbox
\CD@WH}\fi\else\CD@DJ\fi\setbox0=\vbox{\box\CD@WH\nointerlineskip\ifvoid0
\CD@PJ\box1 \else\vskip\skip0 \unvbox0 \fi}\skip0=\lastskip\unskip}\def\CD@DJ
{\penalty7 \noindent\unhbox\CD@WH\unskip\setbox\CD@WH=\lastbox\unskip\unhbox
\CD@WH\endgraf\setbox\CD@XH=\lastbox\unskip\setbox\CD@XH=\hbox{\CD@qF\unhbox
\CD@XH\unskip\unskip\unpenalty}\ifcase\prevgraf\cd@shouldnt P\or\ifdim\CD@SJ<%
\wd\CD@XH\CD@GG h\CD@SJ<\wd\CD@WH:object in pile too wide:\CD@FA\CD@VD\setbox
\CD@WH=\hbox to\CD@SJ{\hss\unhbox\CD@XH\hss}\else\setbox\CD@WH=\hbox to\CD@SJ
{\hss\kern\CD@TF\unhbox\CD@XH\kern\CD@JI\hss}\fi\or\setbox\CD@WH=\lastbox
\unskip\CD@nJ\else\cd@shouldnt Q\fi\unskip\unpenalty}\def\CD@RD{\CD@mI\ifvoid
3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5\CD@xE\else\dimen4\dp3
\dimen3.5\wd3 \setbox3=\CD@nF{\box3}\dp3\dimen4 \ifdim\ht3=-\dp3 \else\CD@PB
\fi\fi\setbox0=\null\CD@gE\dimen4=\ht\CD@sG\advance\dimen4\dp5 \advance\dimen
4\dimen1 \let\CD@YD\empty\else\dimen4\ht3 \fi\ht0\dimen4 \offinterlineskip
\setbox8=\vbox spread2ex{\kern\dimen5 \box1 \CD@XD\vfill\box0}\ht8=\z@\setbox
9=\vtop spread2ex{\kern-\ht3 \box3 \CD@YD\vfill\box5 \kern\dimen1}\dp9=\z@
\dimen0\dimen3 \advance\dimen0-.5\CD@xE\hskip\z@ plus.0001fil \box6 \kern
\dimen0 \box9 \kern-\CD@xE\box8 \CD@gE\penalty1 \fi\kern\PileSpacing\kern-%
\PileSpacing\kern-.5\CD@xE\penalty\CD@EB\null\kern\dimen3 \box7}\def\CD@EI{%
\ifhbox\CD@VA\CD@GB{clashing verticals}\ht\CD@sG.5\dp\CD@VA\dp\CD@sG-\ht5
\CD@sB\ht\CD@sG\z@\dp\CD@sG\z@\fi\dimen1\dp\CD@VA\CD@vA\prevgraf\unvbox\CD@VA
\CD@uA\lastpenalty\unpenalty\setbox\CD@VA=\null\setbox\CD@LI=\hbox{\CD@qF
\unhbox\CD@LI\unskip\unpenalty\dimen0\lastkern\unkern\unkern\unkern\kern
\dimen0 \CD@oF}\setbox\CD@VF=\hbox{\unhbox\CD@VF\dimen0\lastkern\unkern
\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }\CD@bF\ifnum\CD@vA>4 \CD@aI
\repeat\unskip\unskip\advance\CD@WF.5\wd\CD@VA\advance\CD@WF\wd\CD@VF\advance
\CD@MI.5\wd\CD@VA\advance\CD@MI\wd\CD@LI\setbox\CD@VA=\hbox{\kern-\CD@WF\box
\CD@VF\unhbox\CD@VA\box\CD@LI\kern-\CD@MI\penalty\CD@uA\penalty\CD@JB}\ht
\CD@VA\dimen1 \dp\CD@VA\z@\wd\CD@VA\CD@nB\CD@pB}\def\CD@aI{\ifdim\wd\CD@VF<%
\CD@QA\setbox\CD@VF=\hbox to\CD@QA{\CD@qF\unhbox\CD@VF}\fi\advance\CD@vA\m@ne
\setbox\CD@VA=\hbox{\box\CD@VF\unhbox\CD@VA}\unskip\setbox\CD@VF=\lastbox
\setbox\CD@VF=\hbox{\unhbox\CD@VF\unskip\unpenalty\dimen0\lastkern\unkern
\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }}\def\CD@sB{\dimen1\dp
\CD@VA\ifhbox\CD@VA\CD@rB\else\CD@tB\fi\setbox\CD@VA=\vbox{\penalty\CD@JB}\dp
\CD@VA-\dp\CD@sG\wd\CD@VA\CD@nB}\def\CD@tB{\unvbox\CD@VA\CD@uA\lastpenalty
\unpenalty\ifdim\dimen1<\ht\CD@sG\CD@GG v\dimen1<\ht\CD@sG:rows overprint:%
\CD@JB\CD@uA\fi}\def\CD@rB{\dimen0=\ht\CD@VA\setbox\CD@VA=\hbox\bgroup
\advance\dimen1-\ht\CD@sG\unhbox\CD@VA\CD@vA\lastpenalty\unpenalty\CD@uA
\lastpenalty\unpenalty\global\CD@RA-\lastkern\unkern\setbox0=\lastbox\CD@bF
\setbox\CD@VA=\hbox{\box0\unhbox\CD@VA}\setbox0=\lastbox\ifhbox0 \CD@HJ
\repeat\global\CD@SA-\lastkern\unkern\global\CD@QA\CD@fJ\unhbox\CD@VA\egroup
\CD@fJ\CD@QA\CD@GH{\CD@SA}{\box\CD@VA}{\CD@RA}{\dimen1}}\def\CD@HJ{\setbox0=%
\hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern\ifnum
\lastpenalty=1 \unpenalty\CD@QB\else\CD@PB\fi\setbox0=\lastbox\dimen6%
\lastkern\unkern\setbox1=\lastbox\setbox0=\vbox{\unvbox0\CD@gE\kern-\dimen1%
\fi}\ifdim\dimen0<\ht0 \CD@GG v\dimen0<\ht0:upper part of vertical too short:%
{\CD@gE\CD@JB\else\CD@uA\fi}\CD@vA\else\setbox0=\vbox to\dimen0{\unvbox0}\fi
\setbox1=\vtop{\unvbox1}\ifdim\dimen1<\dp1 \CD@GG v\dimen1<\dp1:lower part of
vertical too short:\CD@JB\CD@uA\else\setbox1=\vtop to\dimen1{\unvbox1}\fi\box
1 \kern\dimen6 \box0 \kern\dimen7 \CD@oF\global\CD@QA\CD@fJ\egroup\CD@fJ
\CD@QA\relax}\countdef\CD@r=14 \newcount\CD@CA\newcount\CD@TB\newcount\CD@JB
\let\CD@HB\insc@unt\newcount\CD@FA\newcount\CD@jA\let\CD@kA\CD@TB\newcount
\CD@IB\CD@ZG\CD@qE\CD@DI\CD@CI\CD@CI\def\CD@dD{-1}\def\CD@I{\ifnum\CD@dD<\z@
\else\begingroup\scrollmode\showboxdepth\CD@dD\showboxbreadth\maxdimen
\showlists\endgroup\fi\CD@DI\CD@gF\CD@CA=\CD@r\advance\CD@CA1 \CD@TB=\CD@CA
\ifnum\CD@JB=1 \CD@JA\fi\advance\CD@TB\CD@JB\dimen1\z@\skip0\z@\count@=%
\insc@unt\advance\count@\CD@r\divide\count@2 \ifnum\CD@TB>\count@\CD@GB{The
diagram has too many rows! It can't be reformatted.}\else\CD@uF\CD@zH\fi
\CD@HH}\def\CD@uF{\CD@JB\CD@CA\CD@cF\ifnum\CD@JB<\CD@TB\setbox\CD@JB\box
\voidb@x\advance\CD@JB1\relax\repeat\CD@JB\CD@CA\skip\z@\z@\CD@cF\CD@EB
\lastpenalty\unpenalty\ifnum\CD@EB>\z@\CD@AE\repeat\ifnum\CD@EB=-123 \CD@PJ
\unpenalty\else\cd@shouldnt D\fi\ifx\v@grid\relax\else\CD@JB\CD@TB\advance
\CD@JB\m@ne\expandafter\CD@uI\v@grid\fi\CD@IB\CD@kA\CD@nB\z@\CD@DG\ifx\h@grid
\relax\else\expandafter\CD@lI\h@grid\fi\count@\CD@TB\advance\count@\m@ne
\CD@UB\ht\count@}\def\CD@AE{\ifcase\CD@EB\or\CD@tF\else\CD@sA-\lastpenalty
\unpenalty\CD@tA\lastpenalty\unpenalty\setbox0=\lastbox\CD@CG\fi\CD@mD}\def
\CD@mD{\skip1\lastskip\unskip\advance\skip0\skip1 \ifdim\skip1=\z@\else
\expandafter\CD@mD\fi}\def\CD@tF{\setbox0=\lastbox\CD@PI\dp0 \advance\CD@PI
\skip\z@\skip\z@\z@\advance\CD@zE\CD@PI\CD@hE\ifnum\CD@JB>\CD@CA\CD@zE
\DiagramCellHeight\CD@PI\CD@zE\advance\CD@PI-\CD@QI\fi\fi\CD@QI\ht0 \CD@zE
\CD@QI\setbox\CD@JB\hbox{\unhbox\CD@JB\unhbox0}\dp\CD@JB\CD@PI\ht\CD@JB\CD@QI
\advance\CD@JB1 }\def\CD@CG{\ifnum\CD@sA<\z@\advance\CD@sA\CD@TB\ifnum\CD@sA<%
\CD@CA\CD@AG\else\CD@OA\dp\CD@sA\CD@PA\ht\CD@sA\setbox\CD@sA\hbox{\box\z@
\penalty\CD@tA\penalty\CD@EB\unhbox\CD@sA}\dp\CD@sA\CD@OA\ht\CD@sA\CD@PA\fi
\else\CD@AG\fi}\def\CD@AG{\CD@GB{diagonal goes outside diagram (lost)}}\def
\CD@GI{\advance\CD@sA\CD@TB\ifnum\CD@sA<\CD@CA\CD@AG\else\ifnum\CD@sA=\CD@JB
\CD@BG\else\ifnum\CD@sA>\CD@JB\cd@shouldnt M\else\CD@OA\dp\CD@sA\CD@PA\ht
\CD@sA\setbox\CD@sA\hbox{\box\z@\penalty\CD@tA\penalty\CD@EB\unhbox\CD@sA}\dp
\CD@sA\CD@OA\ht\CD@sA\CD@PA\fi\fi\fi}\def\CD@zH{\CD@q\set@axis\setbox\CD@HC=%
\hbox{\CD@i A\@super f\@sub f\CD@CD}\CD@PE\z@\CD@fJ\z@\CD@KI\z@\CD@UF\z@
\CD@JB=\CD@TB\CD@zE\z@\CD@oB\z@\CD@cF\ifnum\CD@JB>\CD@CA\advance\CD@JB\m@ne
\CD@QI\ht\CD@JB\CD@PI\dp\CD@JB\advance\CD@zE\CD@QI\CD@RI\advance\CD@oB\CD@zE
\CD@CC\CD@BI\CD@u\ht\CD@JB\CD@QI\dp\CD@JB\CD@PI\nointerlineskip\box\CD@JB
\CD@zE\CD@PI\setbox\CD@JB\null\ht\CD@JB\CD@oB\repeat\CD@qB\nointerlineskip
\box\CD@JB\CD@OG\CD@PE\DiagramCellWidth{width}\CD@OG\CD@fJ\DiagramCellHeight{%
height}\CD@VA\CD@HB\advance\CD@VA-\CD@jA\advance\CD@VA\m@ne\advance\CD@VA
\CD@kA\dimen0\wd\CD@VA\CD@TI\axisheight\dimen1\CD@oB\advance\dimen1-\CD@UB
\dimen2\CD@KI\advance\dimen2-\dimen0 \advance\CD@TB-\CD@CA\advance\CD@HB-%
\CD@jA}\count@\year\multiply\count@12 \advance\count@\month\ifnum\count@>%
23978 \loop\iftrue\message{gone February 1998!}\repeat\fi\def\CD@qB{\CD@QI-%
\CD@zE\CD@PI\CD@zE\setbox\CD@sG=\null\dp\CD@sG\CD@zE\ht\CD@sG-\CD@zE\CD@WF\z@
\CD@MI\z@\CD@jA\CD@HB\advance\CD@jA-\CD@IB\advance\CD@jA\CD@kA\CD@FA\CD@HB
\CD@VA\CD@IB\CD@aF\ifnum\CD@FA>\CD@jA\advance\CD@FA\m@ne\advance\CD@VA\m@ne
\CD@nB\wd\CD@VA\setbox\CD@FA=\box\voidb@x\CD@sB\repeat\CD@u\ht\CD@JB\CD@QI\dp
\CD@JB\CD@PI}\def\CD@OG#1#2#3{\ifdim#1>.01\CD@qC\CD@PA#2\relax\advance\CD@PA#%
1\relax\advance\CD@PA.99\CD@qC\count@\CD@PA\divide\count@\CD@qC\CD@GB{%
increase cell #3 to \the\count@ em}\fi}\def\CD@RI{\CD@FA=\CD@HB\penalty4
\noindent\unhbox\CD@JB\CD@aF\unskip\setbox0=\lastbox\ifhbox0 \advance\CD@FA
\m@ne\setbox\CD@FA\hbox to\wd0{\null\penalty-9990\null\unhbox0}\repeat\CD@jA
\CD@FA\advance\CD@FA\CD@IB\advance\CD@FA-\CD@kA\ifnum\CD@FA<\CD@HB\count@
\CD@FA\advance\count@\m@ne\dimen0=\wd\count@\count@\CD@IB\advance\count@\m@ne
\CD@nB\wd\count@\CD@aF\ifnum\CD@FA<\CD@HB\CD@dI\CD@DG\dimen0\wd\CD@FA\advance
\CD@FA1 \repeat\fi\CD@aF\CD@EB\lastpenalty\unpenalty\ifnum\CD@EB>\z@\CD@tA
\lastpenalty\unpenalty\CD@BG\repeat\endgraf\unskip\ifnum\lastpenalty=4
\unpenalty\else\cd@shouldnt S\fi}\def\CD@BG{\advance\CD@tA\CD@jA\advance
\CD@tA\m@ne\setbox0=\lastbox\ifnum\CD@tA<\CD@HB\setbox\CD@tA\hbox{\box0%
\penalty\CD@EB\unhbox\CD@tA}\else\CD@AG\fi}\def\CD@HG{}\CD@ZG\CD@hE\CD@SB
\CD@RB\def\CD@dI{\advance\dimen0\wd\CD@FA\divide\dimen0\tw@\CD@hE\dimen0%
\DiagramCellWidth\else\CD@T{\dimen0}\DiagramCellWidth\CD@LJ\fi\advance\CD@nB
\dimen0 }\def\CD@DG{\setbox\CD@IB=\vbox{}\dp\CD@IB=\CD@oB\wd\CD@IB\CD@nB
\advance\CD@IB1 }\def\CD@lI#1,{\def\CD@cJ{#1}\ifx\CD@cJ\CD@GD\else\advance
\CD@nB\CD@cJ\DiagramCellWidth\CD@DG\expandafter\CD@lI\fi}\def\CD@uI#1,{\def
\CD@cJ{#1}\ifx\CD@cJ\CD@GD\else\ifnum\CD@JB>\CD@CA\CD@zE\CD@cJ
\DiagramCellHeight\advance\CD@zE-\dp\CD@JB\advance\CD@JB\m@ne\ht\CD@JB\CD@zE
\fi\expandafter\CD@uI\fi}\def\CD@LJ{\CD@jE\CD@OA\dimen0 \advance\CD@OA-%
\DiagramCellWidth\ifdim\CD@OA>2\MapShortFall\CD@GB{badly drawn diagonals (see
manual)}\let\CD@LJ\empty\fi\else\let\CD@LJ\empty\fi}\def\CD@CC{\CD@VA\CD@kA
\CD@aF\ifnum\CD@VA<\CD@IB\dimen0\dp\CD@VA\advance\dimen0\CD@zE\dp\CD@VA\dimen
0 \advance\CD@VA1 \repeat}\def\CD@GH#1#2#3#4{\ifnum\CD@FA<\CD@HB\CD@OA=#1%
\relax\setbox\CD@FA=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3\relax\ifhbox
\CD@FA\unhbox\CD@FA\advance\CD@OA-\lastkern\unkern\fi\ifdim\CD@OA=\z@\else
\kern-\CD@OA\fi\raise\dimen7\box0 \kern-\dimen8 }\ifnum\CD@FA=\CD@jA\CD@T
\CD@UF\CD@OA\fi\else\cd@shouldnt O\fi}\def\CD@u{\setbox\CD@JB=\hbox{\CD@FA
\CD@jA\CD@VA\CD@kA\CD@PA\z@\relax\CD@aF\ifnum\CD@FA<\CD@HB\CD@nB\wd\CD@VA
\relax\CD@FI\advance\CD@FA1 \advance\CD@VA1 \repeat}\CD@T\CD@KI{\wd\CD@JB}\wd
\CD@JB\z@}\def\CD@FI{\ifhbox\CD@FA\CD@OA\CD@nB\relax\advance\CD@OA-\CD@PA
\relax\ifdim\CD@OA=\z@\else\kern\CD@OA\fi\CD@PA\CD@nB\advance\CD@PA\wd\CD@FA
\relax\unhbox\CD@FA\advance\CD@PA-\lastkern\unkern\fi}\def\CD@BI{\setbox
\CD@WH=\box\voidb@x\CD@VA=\CD@IB\CD@FA\CD@HB\CD@VA\CD@kA\advance\CD@VA\CD@FA
\advance\CD@VA-\CD@jA\advance\CD@VA\m@ne\CD@nB\wd\CD@VA\count@\CD@HB\advance
\count@\m@ne\CD@TF.5\wd\count@\advance\CD@TF\CD@nB\CD@A\m@ne\CD@VD\@m\CD@aF
\ifnum\CD@FA>\CD@jA\advance\CD@FA\m@ne\advance\CD@TF-\CD@nB\CD@uH\wd\CD@VA
\CD@nB\advance\CD@TF\CD@nB\advance\CD@VA\m@ne\CD@nB\wd\CD@VA\repeat\CD@WF
\CD@UF\CD@MI-\CD@WF\CD@pB}\newcount\CD@EB\def\CD@p{}\def\CD@q{\mathsurround
\z@\hsize\z@\rightskip\z@ plus1fil minus\maxdimen\parfillskip\z@\linepenalty
9000 \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 \CD@IA\prevdepth\z@}\newbox
\CD@rF\newbox\CD@pF\def\CD@qF{\unhcopy\CD@rF}\def\CD@oF{\unhcopy\CD@pF}\def
\CD@FJ{\hbox{}\penalty1\nointerlineskip}\def\CD@uH{\penalty5 \noindent\setbox
\CD@sG=\null\CD@WF\z@\CD@MI\z@\ifnum\CD@FA<\CD@HB\ht\CD@sG\ht\CD@FA\dp\CD@sG
\dp\CD@FA\unhbox\CD@FA\skip0=\lastskip\unskip\else\CD@jJ\skip0=\z@\fi\endgraf
\ifcase\prevgraf\cd@shouldnt Y \or\cd@shouldnt Z \or\CD@wH\or\CD@@I\else
\CD@vH\fi\unskip\setbox0=\lastbox\unskip\unskip\unpenalty\noindent\unhbox0%
\setbox0\lastbox\unpenalty\unskip\unskip\unpenalty\setbox0\lastbox\CD@bF
\CD@EB\lastpenalty\unpenalty\ifnum\CD@EB>\z@\setbox\z@\lastbox\CD@hB\repeat
\endgraf\unskip\unskip\unpenalty}\def\CD@xI{\CD@sA\CD@TB\advance\CD@sA-\CD@JB
\CD@tA\CD@FA\advance\CD@tA-\CD@jA\advance\CD@tA1 \expandafter\message{%
prevgraf=\the\prevgraf at (\the\CD@sA,\the\CD@tA)}}\def\CD@@I{\CD@tD\setbox
\CD@LI=\lastbox\setbox\CD@LI=\hbox{\unhbox\CD@LI\unskip\unpenalty}\unskip
\ifdim\ht\CD@LI>\ht\CD@HC\setbox\CD@sG=\copy\CD@LI\else\ifdim\dp\CD@LI>\dp
\CD@HC\setbox\CD@sG=\copy\CD@LI\else\CD@mF\CD@LI\fi\fi\advance\CD@WF.5\wd
\CD@LI\advance\CD@MI.5\wd\CD@LI\setbox\CD@LI=\hbox{\unhbox\CD@LI\CD@oF}\CD@GH
\CD@WF{\box\CD@LI}\CD@MI\z@\CD@sB\CD@pB}\def\CD@tD{\ifnum\CD@A>0 \advance
\dimen0-\CD@nB\CD@gA-.5\dimen0 \CD@A-\CD@A\else\CD@A0 \CD@gA\z@\fi\setbox
\CD@sG=\lastbox\setbox\CD@sG=\hbox{\unhbox\CD@sG\unskip\unskip\unpenalty
\setbox0=\lastbox\global\CD@QA\lastkern\unkern}\advance\CD@gA-.5\CD@QA\unskip
\setbox\CD@sG=\null\CD@MI\CD@gA\CD@WF-\CD@gA}\def\CD@X{\ht\CD@sG\CD@TI\dp
\CD@sG\CD@SI}\def\CD@mF#1{\setbox\CD@sG=\hbox{\CD@T{\ht\CD@sG}{\ht#1}\CD@T{%
\dp\CD@sG}{\dp#1}\CD@T{\wd\CD@sG}{\wd#1}\vrule height\ht\CD@sG depth\dp\CD@sG
width\wd\CD@sG}}\def\CD@vH{\CD@tD\CD@X\setbox\CD@LI=\lastbox\unskip\setbox
\CD@VF=\lastbox\unskip\setbox\CD@VF=\hbox{\unhbox\CD@VF\unskip\global\CD@wA
\lastpenalty\unpenalty}\advance\CD@wA9999 \ifcase\CD@wA\CD@yH\or\CD@AI\or
\CD@sH\or\CD@tH\or\CD@EI\or\CD@rH\else\cd@shouldnt9\fi}\def\CD@yH{\CD@mF
\CD@LI\CD@xH\setbox\CD@WH=\box\CD@VF\setbox\CD@XH=\box\CD@LI}\def\CD@AI{%
\CD@mF\CD@VF\setbox\CD@LI\hbox{\penalty8 \unhbox\CD@LI\unskip\unpenalty\ifnum
\lastpenalty=8 \else\CD@aH\fi}\CD@xH\setbox\CD@VF=\hbox{\unhbox\CD@VF\unskip
\unpenalty\global\setbox\CD@DA=\lastbox}\ifdim\wd\CD@VF=\z@\else\CD@aH\fi
\setbox\CD@WH=\box\CD@DA}\def\CD@aH{\CD@GB{extra material in \string\pile
\space cell (lost)}}\def\CD@xH{\CD@sB\ifvoid\CD@WH\else\CD@GB{Clashing
horizontal arrows}\CD@MI.5\CD@TF\CD@WF-\CD@MI\CD@pB\CD@MI\z@\CD@WF\z@\fi
\CD@JI\CD@TF\advance\CD@JI-\CD@MI\CD@TF-\CD@WF\CD@BC\CD@FA}\def\CD@wH{\setbox
0\lastbox\unskip\CD@gA\z@\CD@X\ifdim\skip0>\z@\CD@PJ\CD@A0 \else\ifnum\CD@A<1
\CD@A0 \dimen0\CD@nB\fi\advance\CD@A1 \fi}\def\VonH{\CD@MA46\VonH{.5\CD@xE}}%
\def\HonV{\CD@MA57\HonV{.5\CD@xE}}\def\HmeetV{\CD@MA44\HmeetV{-\MapShortFall}%
}\def\CD@MA#1#2#3#4{\CD@lB34#1{\string#3}\CD@KD\CD@EB-999#2 \dimen0=#4\CD@TI
\dimen0\advance\CD@TI\axisheight\CD@SI\dimen0\advance\CD@SI-\axisheight\CD@pE
\CD@@C\CD@PD}\def\CD@@C#1{\setbox0=\hbox{\CD@i#1\CD@CD}\dimen0.5\wd0 \CD@TI
\ht0 \CD@SI\dp0 \CD@PD}\def\CD@KD{\setbox0=\null\ht0=\CD@TI\dp0=\CD@SI\wd0=%
\dimen0 \copy0\penalty\CD@EB\box0 }\def\CD@sH{\CD@zB\CD@sB}\def\CD@tH{\CD@zB
\CD@pB}\def\CD@rH{\CD@zB\CD@sB\CD@pB}\def\CD@zB{\setbox\CD@LI=\hbox{\unhbox
\CD@LI}\setbox\CD@VF=\hbox{\unhbox\CD@VF\global\setbox\CD@DA=\lastbox}\ht
\CD@sG\ht\CD@DA\dp\CD@sG\dp\CD@DA\advance\CD@WF\wd\CD@DA\advance\CD@MI\wd
\CD@LI}\CD@ZG\ifPositiveGradient\PositiveGradienttrue\PositiveGradientfalse
\PositiveGradienttrue\CD@ZG\ifClimbing\Climbingtrue\Climbingfalse
\Climbingtrue\newcount\DiagonalChoice\DiagonalChoice\m@ne\ifx\tenln\nullfont
\CD@PJ\def\CD@YF{\CD@qG\ifPositiveGradient/\else\CD@i\backslash\CD@CD\fi}%
\else\def\CD@YF{\CD@ZF\char\count@}\fi\let\CD@ZF\tenln\def\use@line@char#1{%
\hbox{#1\CD@ZF\ifPositiveGradient\else\advance\count@64 \fi\char\count@}}\def
\CD@PF{\use@line@char{\count@\CD@LC\multiply\count@8\advance\count@-9\advance
\count@\CD@rG}}\def\CD@MF{\use@line@char{\ifcase\DiagonalChoice\CD@LF\or
\CD@KF\or\CD@KF\else\CD@LF\fi}}\def\CD@LF{\ifnum\CD@LC=\z@\count@\rq33 \else
\count@\CD@LC\multiply\count@\sixt@@n\advance\count@-9\advance\count@\CD@rG
\advance\count@\CD@rG\fi}\def\CD@KF{\count@\rq\ifcase\CD@rG55\or\ifcase\CD@LC
66\or22\or52\or61\or72\fi\or\ifcase\CD@LC66\or25\or22\or63\or52\fi\or\ifcase
\CD@LC66\or16\or36\or22\or76\fi\or\ifcase\CD@LC66\or27\or25\or67\or22\fi\fi
\relax}\def\CD@lC#1{\hbox{#1\setbox0=\use@line@char{#1}\ifPositiveGradient
\else\raise.3\ht0\fi\copy0 \kern-.7\wd0 \ifPositiveGradient\raise.3\ht0\fi
\box0}}\def\CD@SF#1{\hbox{\setbox0=#1\kern-.75\wd0 \vbox to.25\ht0{%
\ifPositiveGradient\else\vss\fi\box0 \ifPositiveGradient\vss\fi}}}\def\CD@II#%
1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox to.25\ht0{\ifPositiveGradient\vss\fi
\box0 \ifPositiveGradient\else\vss\fi}\kern-.75\dimen0 }}\CD@JC{+h:>}{%
\use@line@char\CD@KF}\CD@JC{-h:>}{\use@line@char\CD@LF}\CD@XF{+t:<}{-h:>}%
\CD@XF{-t:<}{+h:>}\CD@JC{+t:>}{\CD@SF{\use@line@char\CD@KF}}\CD@JC{-t:>}{%
\CD@II{\use@line@char\CD@LF}}\CD@XF{+h:<}{-t:>}\CD@XF{-h:<}{+t:>}\CD@JC{+h:>>%
}{\CD@lC\CD@KF}\CD@JC{-h:>>}{\CD@lC\CD@LF}\CD@XF{+t:<<}{-h:>>}\CD@XF{-t:<<}{+%
h:>>}\CD@JC{+t:>>}{\CD@SF{\CD@lC\CD@KF}}\CD@JC{-t:>>}{\CD@II{\CD@lC\CD@LF}}%
\CD@XF{+h:<<}{-t:>>}\CD@XF{-h:<<}{+t:>>}\CD@JC{+f:-}{\CD@rE\null\else\CD@PF
\fi}\CD@XF{-f:-}{+f:-}\def\CD@kC#1#2{\vbox to#1{\vss\hbox to#2{\hss.\hss}\vss
}}\def\hfdot{\CD@kC{2\axisheight}{.7em}}%%
\def\vfdot{\CD@kC{1.46ex}\z@}\def\CD@OF{\hbox{\dimen0=.3\CD@qC\dimen1\dimen0
\ifnum\CD@rG>\CD@LC\CD@ZC{\dimen1}\else\CD@JG{\dimen0}\fi\CD@kC{\dimen0}{%
\dimen1}}}\newarrowfiller{.}\hfdot\hfdot\vfdot\vfdot\def\dfdot{\CD@OF\CD@WJ}%
\CD@JC{+f:.}{\dfdot}\CD@JC{-f:.}{\dfdot}\def\use@old@line@char#1{\hbox\bgroup
\def\CD@jG{#1\egroup}\afterassignment\CD@jG%%
\count@=\rq}\def\lnchar{\use@old@line@char\CD@YF}\let\laf\lnchar\let\lah
\lnchar\def\lad{\use@old@line@char\xlad}\def\xlad{\setbox2=\hbox{\CD@YF}%
\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@old@line@char\xlahh}%
\def\lat{\use@old@line@char\xlat}\def\xlat{\setbox0=\hbox{\CD@YF}\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@YF}\ifPositiveGradient\CD@PJ\copy0
\kern-.7\wd0 \mv.3\ht0\box0 \else\ifClimbing\CD@PJ\copy0 \kern-.7\wd0 \mv.3%
\ht0\box0 \else\mv-.3\ht0\copy0 \kern-.7\wd0 \box0 \fi\fi}\def\CD@QF#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@cB{%
diagonal line too short}\fi\else\dimen3=\dimen5 \advance\dimen3-\dimen1
\divide\dimen3\count@\dimen4\dimen3 \CD@JG{\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@kF#1{\CD@rE\CD@TJ{#1}\else\CD@QF{#1}\fi}\newdimen
\objectheight\objectheight1.8ex \newdimen\objectwidth\objectwidth1em \def
\CD@ID{\dimen6=\CD@vJ\DiagramCellHeight\dimen7=\CD@rJ\DiagramCellWidth\CD@kI
\ifnum\CD@rG>0 \ifnum\CD@LC>0 \CD@NF\else\aftergroup\CD@NC\fi\else\aftergroup
\CD@MC\fi}\def\CD@NC{\CD@YA{diagonal map is nearly vertical}\CD@NA}\def\CD@MC
{\CD@YA{diagonal map is nearly horizontal}\CD@NA}\CD@XG\CD@NA{Use an
orthogonal map instead}\def\CD@NF{\CD@mI\dimen3\dimen7\dimen7\dimen6\CD@ZC{%
\dimen7}\advance\dimen3-\dimen7 \CD@yE\ifnum\CD@rG>\CD@LC\advance\dimen6-%
\dimen1\advance\dimen6-\dimen5 \CD@ZC{\dimen1}\CD@ZC{\dimen5}\else\dimen0%
\dimen1\advance\dimen0\dimen5\CD@JG{\dimen0}\advance\dimen6-\dimen0 \fi\dimen
2.5\dimen7\advance\dimen2-\dimen1 \dimen4.5\dimen7\advance\dimen4-\dimen5
\ifPositiveGradient\dimen0\dimen5 \advance\dimen1-\CD@rJ\DiagramCellWidth
\advance\dimen1 \CD@uJ\DiagramCellWidth\setbox6=\llap{\unhbox6\kern.1\ht2}%
\setbox7=\rlap{\kern.1\ht2\unhbox7}\else\dimen0\dimen1 \advance\dimen1-\CD@uJ
\DiagramCellWidth\setbox7=\llap{\unhbox7\kern.1\ht2}\setbox6=\rlap{\kern.1\ht
2\unhbox6}\fi\setbox6=\vbox{\box6\kern.1\wd2}\setbox7=\vtop{\kern.1\wd2\box7}%
\CD@JG{\dimen0}\advance\dimen0-\axisheight\advance\dimen0-\CD@wJ
\DiagramCellHeight\dimen5-\dimen0 \advance\dimen0\dimen6 \advance\dimen1.5%
\dimen3 \ifdim\wd3>\z@\ifdim\ht3>-\dp3\CD@PB\fi\fi\dimen3\dimen2 \dimen7%
\dimen2\advance\dimen7\dimen4 \ifvoid3 \else\CD@gE\else\dimen8\ht3\advance
\dimen8-\axisheight\CD@ZC{\dimen8}\CD@V{\dimen8}{.5\wd3}\dimen9\dp3\advance
\dimen9\axisheight\CD@ZC{\dimen9}\CD@V{\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@vJ
\DiagramCellHeight\advance\dimen9-2\DiagramCellHeight\CD@gE\advance\dimen2%
\dimen4 \CD@kF{2}\dimen2-\dimen0\advance\dimen2\dp2 \else\CD@kF{2}\CD@kF{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@gE\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{\PositiveGradientfalse
\Climbingtrue\DiagonalChoice0 }\def\NorthEast{\PositiveGradienttrue
\Climbingtrue\DiagonalChoice1 }\def\SouthWest{\PositiveGradienttrue
\Climbingfalse\DiagonalChoice3 }\def\SouthEast{\PositiveGradientfalse
\Climbingfalse\DiagonalChoice2 }\def\CD@QD{\vadjust{\CD@sA\CD@FA\advance
\CD@sA\ifPositiveGradient\else-\fi\CD@uJ\relax\CD@tA\CD@JB\advance\CD@tA-%
\CD@wJ\relax\hbox{\advance\CD@sA\ifPositiveGradient-\fi\CD@rJ\advance\CD@tA
\CD@vJ\box\z@\penalty\CD@sA\penalty\CD@tA}\penalty\CD@sA\penalty\CD@tA
\penalty104}}\def\CD@JH#1{\relax\vadjust{\hbox@maths{#1}\penalty\CD@FA
\penalty\CD@JB\penalty\tw@}}\def\CD@hB{\ifcase\CD@EB\or\or\CD@GH{.5\wd0}{\box
0}{.5\wd0}\z@\or\unhbox\z@\setbox\z@\lastbox\CD@GH{.5\wd0}{\box0}{.5\wd0}\z@
\unpenalty\unpenalty\setbox\z@\lastbox\or\CD@@G\else\advance\CD@EB-100 \ifnum
\CD@EB<\z@\cd@shouldnt B\fi\setbox\z@\hbox{\kern\CD@WF\copy\CD@sG\kern\CD@MI
\CD@sA\CD@TB\advance\CD@sA-\CD@JB\penalty\CD@sA\CD@sA\CD@FA\advance\CD@sA-%
\CD@jA\penalty\CD@sA\unhbox\z@\global\CD@wA\lastpenalty\unpenalty\global
\CD@xA\lastpenalty\unpenalty}\CD@sA-\CD@wA\CD@tA\CD@xA\CD@GI\fi}\def\CD@@G{%
\unhbox\z@\setbox\z@\lastbox\CD@sA\lastpenalty\unpenalty\advance\CD@sA\CD@kA
\CD@tA\CD@TB\advance\CD@tA-\lastpenalty\unpenalty\dimen1\lastkern\unkern
\setbox3\lastbox\dimen0\lastkern\unkern\setbox0=\hbox to\z@{\dimen7\CD@nB
\advance\dimen7-\wd\CD@sA\ifdim\dimen7<\z@\PositiveGradienttrue\multiply
\dimen7\m@ne\else\PositiveGradientfalse\fi\ifnum\CD@tA>\CD@JB\dimen6\CD@oB
\advance\dimen6-\ht\CD@tA\else\dimen6\z@\fi\CD@GJ\ifPositiveGradient\dimen6%
\z@\else\CD@rG-\CD@rG\kern-\dimen7 \fi\global\CD@NG\raise\dimen6\hbox{\CD@TD{%
\the\CD@LC\space\the\CD@rG\space bturn}\box0 \CD@eJ{eturn}}\hss}\ht0\z@\dp0%
\z@\CD@GH{\z@}{\box\z@}{\z@}{\axisheight}}\def\CD@TD#1{\expandafter\CD@eJ{#1}%
}\CD@ZA\CD@aJ{output is PostScript dependent}\def\CD@KC{\CD@eJ{/bturn {gsave
currentpoint currentpoint translate 4 2 roll neg exch atan rotate neg exch neg
exch translate } def /eturn {currentpoint grestore moveto} def}}\def\CD@oI#1{%
\count@#1\relax\multiply\count@7\advance\count@16577\divide\count@33154 }\def
\CD@UD#1{\expandafter\special{#1}} \def\CD@TJ#1{\setbox#1=\hbox{\dimen0\dimen
#1\CD@JG{\dimen0}\CD@oI{\dimen0}\setbox0=\null\ifPositiveGradient\count@-%
\count@\ht0\dimen0 \else\dp0\dimen0 \fi\box0 \CD@sA\count@\CD@oI\CD@xE\CD@UD{%
pn \the\count@}\CD@UD{pa 0 0}\CD@oI{\dimen#1}\CD@UD{pa \the\count@\space\the
\CD@sA}\CD@UD{fp}\kern\dimen#1}}\def\CD@lH{\CD@kI\begingroup\ifdim\dimen7<%
\dimen6 \dimen2=\dimen6 \dimen6=\dimen7 \dimen7=\dimen2 \count@\CD@rG\CD@rG
\CD@LC\CD@LC\count@\else\dimen2=\dimen7 \fi\ifdim\dimen6>.01\p@\CD@mH\global
\CD@QA\dimen0 \else\global\CD@QA\dimen7 \fi\endgroup\dimen2\CD@QA}\def\CD@mH{%
\CD@EJ\ifdim\dimen7>1.73\dimen6 \divide\dimen2 4 \multiply\CD@LC2 \else\dimen
2=0.353553\dimen2 \advance\CD@rG-\CD@LC\multiply\CD@LC4 \fi\dimen0=4\dimen2
\CD@FG4\CD@FG{-2}\CD@FG2\CD@FG{-2.5}}\def\CD@eH{\begingroup\count@\dimen0
\dimen2 45pt \divide\count@\dimen2 \ifdim\dimen0<\z@\advance\count@\m@ne\fi
\ifodd\count@\advance\count@1\CD@@A\else\CD@y\fi\advance\dimen0-\count@\dimen
2 \CD@UE\multiply\dimen0\m@ne\fi\ifnum\count@<0 \multiply\count@-7 \fi\dimen3%
\dimen1 \dimen6\dimen0 \dimen7 3754936sp \ifdim\dimen0<6\p@\def\CD@vF{4000}%
\fi\CD@kI\dimen2\dimen3\CD@JG{\dimen2}\CD@EJ\multiply\CD@LC-6 \dimen0\dimen2
\CD@FG1\CD@FG{0.3}\dimen1\dimen0 \dimen2\dimen3 \dimen0\dimen3 \CD@FG3\CD@FG{%
1.5}\CD@FG{0.3}\divide\count@2 \CD@UE\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@QA\dimen0\global
\CD@RA\dimen1\endgroup\dimen6\CD@QA\dimen7\CD@RA}\def\CD@GC{255}\let\CD@vF
\CD@GC\def\CD@kI{\begingroup\ifdim\dimen7<\dimen6 \dimen9\dimen7\dimen7\dimen
6\dimen6\dimen9\CD@@A\else\CD@y\fi\dimen2\z@\dimen3\CD@CH\dimen4\CD@CH\dimen0%
\z@\dimen8=\CD@vF\CD@CH\CD@cC\global\CD@wA\dimen\CD@UE0\else3\fi\global\CD@xA
\dimen\CD@UE3\else0\fi\endgroup\CD@rG\CD@wA\CD@LC\CD@xA}\def\CD@cC{\count@
\dimen6 \divide\count@\dimen7 \advance\dimen6-\count@\dimen7 \dimen9\dimen4
\advance\dimen9\count@\dimen0 \ifdim\dimen9>\dimen8 \CD@uB\else\CD@vB\ifdim
\dimen6>\z@\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen9 \expandafter
\expandafter\expandafter\CD@cC\fi\fi}\def\CD@uB{\ifdim\dimen0=\z@\ifdim\dimen
9<2\dimen8 \dimen0\dimen8 \fi\else\advance\dimen8-\dimen4 \divide\dimen8%
\dimen0 \ifdim\count@\CD@CH<2\dimen8 \count@\dimen8 \dimen9\dimen4 \advance
\dimen9\count@\dimen0 \CD@vB\fi\fi}\def\CD@vB{\dimen4\dimen0 \dimen0\dimen9
\advance\dimen2\count@\dimen3 \dimen9\dimen2 \dimen2\dimen3 \dimen3\dimen9 }%
\def\CD@FG#1{\CD@JG{\dimen2}\advance\dimen0 #1\dimen2 }\def\CD@JG#1{\divide#1%
\CD@LC\multiply#1\CD@rG}\def\CD@ZC#1{\divide#1\CD@rG\multiply#1\CD@LC}\def
\CD@EJ{\dimen6\CD@rG\CD@CH\multiply\dimen6\CD@rG\dimen7\CD@LC\CD@CH\multiply
\dimen7\CD@LC\CD@kI}\ifx\errorcontextlines\undefined\CD@PJ\let\CD@nG\relax
\else\def\CD@nG{\errorcontextlines\m@ne}\fi\ifnum\inputlineno<0 \let\CD@sC
\empty\let\CD@U\empty\let\CD@cD\relax\let\CD@UI\relax\let\CD@VI\relax\let
\CD@gF\relax\message{! Why not upgrade to TeX version 3? (available since 1990%
)}\else\def\CD@U{ at line \number\inputlineno}\def\CD@cD{ - first occurred}%
\def\CD@UI{\edef\CD@f{\the\inputlineno}\global\let\CD@fB\CD@f}\def\CD@f{9999}%
\def\CD@VI{\xdef\CD@fB{\the\inputlineno}}\def\CD@fB{\CD@f}\def\CD@gF{\ifnum
\CD@f<\inputlineno\edef\CD@sC{\space at lines \CD@f--\the\inputlineno}\else
\edef\CD@sC{\CD@U}\fi}\fi\let\CD@sC\empty\def\CD@YA#1#2{\CD@nG\errhelp=#2%
\expandafter\errmessage{\CD@rA: #1}}\def\CD@GB#1{{\expandafter\message{!
\CD@rA: #1\CD@sC}}}\def\CD@cB#1{{\expandafter\message{\CD@rA\space Warning: #%
1\CD@U}}}\def\CD@AB#1#2{\CD@cB{#1 \string#2 is obsolete\CD@cD}}\def\CD@zA#1{%
\CD@AB{Dimension}{#1}\CD@uD#1\CD@@B\CD@@B}\def\CD@@B{\CD@OA=}\def\CD@yA#1{%
\CD@AB{Count}{#1}\CD@uD#1\CD@uG\CD@uG}\def\CD@uG{\count@=}\def
\HorizontalMapLength{\CD@zA\HorizontalMapLength}\def\VerticalMapHeight{\CD@zA
\VerticalMapHeight}\def\VerticalMapDepth{\CD@zA\VerticalMapDepth}\def
\VerticalMapExtraHeight{\CD@zA\VerticalMapExtraHeight}\def
\VerticalMapExtraDepth{\CD@zA\VerticalMapExtraDepth}\def\DiagonalLineSegments
{\CD@yA\DiagonalLineSegments}\ifx\tenln\nullfont\CD@ZA\CD@qG{\CD@RF\space
diagonal line and arrow font not available}\else\let\CD@qG\relax\fi\def\CD@GG
#1#2<#3:#4:#5#6{\begingroup\CD@PA#3\relax\advance\CD@PA-#2\relax\ifdim.1em<%
\CD@PA\CD@sA#5\relax\CD@tA#6\relax\ifnum\CD@sA<\CD@tA\count@\CD@tA\advance
\count@-\CD@sA\CD@GB{#4 by \the\CD@PA}\if#1v\let\CD@jG\CD@fJ\else\advance
\count@\count@\if#1l\advance\count@-\CD@A\else\if#1r\advance\count@\CD@A\fi
\fi\advance\CD@PA\CD@PA\let\CD@jG\CD@PE\fi\divide\CD@PA\count@\ifdim\CD@jG<%
\CD@PA\global\CD@jG\CD@PA\fi\fi\fi\endgroup}\CD@ZG\CD@kE\CD@zC\CD@yC\CD@XG
\CD@YI{See the message above.}\CD@XG\CD@QH{Perhaps you've forgotten to end the
diagram before resuming the text, in\CD@aG which case some garbage may be
added to the diagram, but we should be ok now.\CD@aG Alternatively you've left
a blank line in the middle - TeX will now complain\CD@aG that the remaining
\CD@Q s are misplaced - so please use comments for layout.}\CD@XG\CD@WD{You
have already closed too many brace pairs or environments; an \CD@xC\CD@aG
command was (over)due.}\CD@XG\CD@MH{\CD@VC\space and \CD@xC\space commands
must match.}\def\CD@OH{\ifnum\inputlineno=0 \else\expandafter\CD@NH\fi}\def
\CD@NH{\CD@BD\CD@wC\crcr\CD@YA{missing \CD@xC\space inserted before \CD@PH-
type "h"}\CD@QH\enddiagram\CD@iF\CD@PH\par}\def\CD@iF#1{\edef\enddiagram{%
\noexpand\CD@hD{#1\CD@U}}}\def\CD@hD#1{\CD@YA{\CD@xC\space(anticipated by #1)
ignored}\CD@YI\let\enddiagram\CD@zF}\def\CD@zF{\CD@YA{misplaced \CD@xC\space
ignored}\CD@MH}\def\CD@dC{\CD@YA{missing \CD@xC\space inserted.}\CD@WD\CD@iF{%
closing group}}\ifx\DeclareOption\undefined\else\ifx\DeclareOption\@notprerr
\else\DeclareOption*{\let\CD@L\relax\let\CD@kG\relax\expandafter\CD@qD
\CurrentOption,}\fi\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{\CD@XI{$\scriptstyle#1$}}%%
\def\ssaxis#1{\@ssaxis{$\scriptscriptstyle#1$}}%%
\def\CD@XI#1{\dimen0\axisheight\advance\dimen0-\ss@axisheight\raise\dimen0%
\hbox{#1}}\def\@ssaxis#1{\dimen0\axisheight\advance\dimen0-\ss@axisheight
\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{\CD@XI{\boldmath$\scriptstyle#1$}}%%
\def\boldscript#1{\hbox{\boldmath$\scriptstyle#1$}}%%
\def\boldscriptscript#1{\hbox{\boldmath$\scriptscriptstyle#1$}}%%
\fi

%%  #1= {} or \boldmath; #2= + or -; #3=\subset or \supset
\def\raisehook#1#2#3{\hbox{\setbox3=\hbox{#1$\scriptscriptstyle#3$}%
%% the character to use
\dimen0\ss@axisheight%% \scriptscriptstyle axis height
\dimen1\axisheight\advance\dimen1-\dimen0%% difference in axis heights
\dimen2\ht3\advance\dimen2-\dimen0%
%%  height of char above axis (half spread)
\advance\dimen1 #2\dimen2%% shift = axis_difference +/- half_spread
\raise\dimen1\box3}}%% 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@cH{\dimen0}%%  "u"
\dimen1\wd0\advance\dimen1-2\dimen0\advance\dimen1-\CD@OI\CD@cH{\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\make@pbk#1{\setbox\tw@\hbox to\z@{#1}\ht\tw@\z@\dp\tw@\z@\box\tw@}\def
\CD@KH#1{\overprint{\hbox to\z@{#1}}}\def\CD@VH{\kern0.1em}\def\CD@UH{\kern0.%
25em}

\def\SEpbk{\make@pbk{\CD@VH\vrule depth 2.67ex height -2.55ex width 0.9em
\vrule height -0.46ex depth 2.67ex width .05em \hss}}

\def\SWpbk{\make@pbk{\hss\vrule height -0.46ex depth 2.67ex width .05em \vrule
depth 2.67ex height -2.55ex width .9em \CD@VH}}

\def\NEpbk{\make@pbk{\CD@VH\vrule depth -3.48ex height 3.67ex width 0.95em
\vrule height 3.67ex depth -1.39ex width .05em \hss}}

\def\NWpbk{\make@pbk{\hss\vrule height 3.6ex depth -1.39ex width .05em \vrule
depth -3.48ex height 3.67ex width .95em \CD@VH}}

%%  Freyd & Scedrov puncture symbol for non-commuting polygon
\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 }}

%% 2-cells: (24.11.95)
%%% \NEclck puts a clockwise (ie southeast) arrow to the northwest of cell etc
\def\NEclck{\overprint{\raise2.5ex\rlap{ $\scriptstyle\searrow$}}}%%
\def\NEanti{\overprint{\raise2.5ex\rlap{ $\scriptstyle\nwarrow$}}}%%
\def\NWclck{\overprint{\raise2.5ex\llap{$\scriptstyle\nearrow$ }}}%%
\def\NWanti{\overprint{\raise2.5ex\llap{$\scriptstyle\swarrow$ }}}%%
\def\SEclck{\overprint{\lower1ex\rlap{ $\scriptstyle\swarrow$}}}%%
\def\SEanti{\overprint{\lower1ex\rlap{ $\scriptstyle\nearrow$}}}%%
\def\SWclck{\overprint{\lower1ex\llap{$\scriptstyle\nwarrow$ }}}%%
\def\SWanti{\overprint{\lower1ex\llap{$\scriptstyle\searrow$ }}}

%%======================================================================%
%%                                                                      %
%%      (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

%% harpoon with shaft (trailing up/left can be changed to down/right)
\newarrowtail{harpoon}\leftharpoondown\rightharpoondown\upharpoonright
\downharpoonright

%%      **********  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@xE height0.6ex depth 0pt}%%
\def\hfthedash{\set@axis\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}%% partial function
\newarrow{Relto}{harpoon}---{harpoon}%% binary relation

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

%% braces and parentheses
%% \newarrow gives inappropriate directions, so we change the names
%% the vertical filler is too far to the right; horizontal too high
%% the vertical middles are too low with midvshaft
%% maybe we'll add square brackets and the integral sign one day
\newarrowhead{cmexbra}{\@cmex7B}{\@cmex7C}{\@cmex3B}{\@cmex38}%%
\newarrowtail{cmexbra}{\@cmex7A}{\@cmex7D}{\@cmex39}{\@cmex3A}%%
\newarrowmiddle{cmexbra}{\braceru\bracelu}{\bracerd\braceld}{\@cmex3D}{\@cmex
3C}%%
\newarrow{@brace}{cmexbra}-{cmexbra}-{cmexbra}%% braces
\newarrow{@parenth}{cmexbra}---{cmexbra}%% straight parentheses
\def\rightBrace{\d@brace[cmex,thick,midvshaft]}%%ASCII square brackets []
\def\leftBrace{\u@brace[cmex,thick,midvshaft]}%%ASCII square brackets []
\def\upperBrace{\r@brace[cmex,thick,midhshaft]}%%ASCII square brackets []
\def\lowerBrace{\l@brace[cmex,thick,midhshaft]}%%ASCII square brackets []
\def\rightParenth{\d@parenth[cmex,thick]}%%ASCII square brackets []
\def\leftParenth{\u@parenth[cmex,thick]}%%ASCII square brackets []
\def\upperParenth{\r@parenth[cmex,thick]}%%ASCII square brackets []
\def\lowerParenth{\l@parenth[cmex,thick]}%%ASCII square brackets []

%% 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

\newdiagramgrid{pentagon}{0.618034,0.618034,1,1,1,1,0.618034,0.618034}{1.%
17557,1.17557,1.902113,1.902113}

\newdiagramgrid{perspective}{0.75,0.75,1.1,1.1,0.9,0.9,0.95,0.95,0.75,0.75}{0%
.75,0.75,1.1,1.1,0.9,0.9}

\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
%% The following are defaulted on entry to the diagram itself.
%% l>=2em               minimum length of horizontal arrow shafts in text
%% l>=1em               ditto in diagrams
%% size=3em             cell size
%% heads=LaTeX          arrowheads
]%%ascii close square bracket

%% process options to LaTeX2e's \usepackage[options]{diagrams}
\ifx\ProcessOptions\undefined\else\CD@kJ\ProcessOptions\relax\CD@sE\CD@c\fi
\fi

\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

%%
