The many faces of alternating-sign matrices
James Propp\thanks{Supported by grants from the National Science Foundation and the National Security Agency.}
Department of Mathematics
Wisconsin
USA
\noindent I give a survey of different combinatorial forms of alternating-sign matrices, starting with the original form introduced by Mills, Robbins and Rumsey as well as corner-sum matrices, height-function matrices, three-colorings, monotone triangles, tetrahedral order ideals, square ice, gasket-and-basket tilings and full packings of loops. (This article has been published in a conference edition of the journal {Discrete Mathematics and Theoretical Computer Science}, entitled ``Discrete Models: Combinatorics, Computation, and Geometry,'' edited by R.\ Cori, J.\ Mazoyer, M.\ Morvan, and R.\ Mosseri, and published in July 2001 in cooperation with le Maison de l'Informatique et des Math\'ematiques Discr\`etes, Paris, France: ISSN 1365-8050, {http://dmtcs.lori.fr}.)
arxiv.tex
\documentclass[12pt]{article}
\usepackage{times,mathptmx}
\usepackage{pstricks,pst-node,graphics}
\input epsf
%To use epsf:
%   \epsfbox{filename.ps} % where you want to insert a vbox for a figure
%   \newcommand{\evects}{\input evect.tex}

\title{The many faces of alternating-sign matrices}

\author{James Propp\thanks{Supported by grants from the National Science
Foundation and the National Security Agency.}\\
\small Department of Mathematics\\[-0.8ex]
\small University of Wisconsin -- Madison, Wisconsin, USA\\[-0.8ex]
\small \texttt{propp@math.wisc.edu}}

\begin{document}
\maketitle

\begin{abstract}
\noindent
I give a survey of different combinatorial forms of 
alternating-sign matrices, starting with the original form introduced 
by Mills, Robbins and Rumsey as well as corner-sum matrices, 
height-function matrices, three-colorings, monotone triangles, 
tetrahedral order ideals, square ice, gasket-and-basket tilings
and full packings of loops.
(This article has been published in a conference edition
of the journal {\it Discrete Mathematics and Theoretical 
Computer Science}, entitled ``Discrete Models: Combinatorics,
Computation, and Geometry,'' edited by R.\ Cori, J.\ Mazoyer,
M.\ Morvan, and R.\ Mosseri, and published in July 2001
in cooperation with le Maison de l'Informatique et des
Math\'ematiques Discr\`etes, Paris, France: ISSN 1365-8050,
{\tt http://dmtcs.lori.fr}.)
\end{abstract}

\newcommand{\R}{{\bf R}}
\newcommand{\Z}{{\bf Z}}
\newcommand{\odisk}{\pscircle[fillstyle=solid,fillcolor=black]}

\section{Introduction}
\label{sec:in}              
An \emph{alternating-sign matrix of order $n$}
is an $n$-by-$n$ array of 0's, $+1$'s and $-1$'s
with the property that in each row and each column,
the non-zero entries alternate in sign,
beginning and ending with a $+1$.
For example, Figure 1 shows an alternating-sign matrix
(ASM for short)
of order 4.
$$
\left( \begin{array}{rrrr}
 0 & +1 &  0 &  0 \\
+1 & -1 & +1 &  0 \\
 0 &  0 &  0 & +1 \\
 0 & +1 &  0 &  0 
\end{array} \right)
$$
\begin{center}
Figure 1: An alternating-sign matrix of order 4.
\end{center}
Figure 2 exhibits all seven of the ASMs of order 3.
$$
\left( \begin{array}{rrr}
 0 &  0 & +1 \\
 0 & +1 &  0 \\
+1 &  0 &  0 
\end{array} \right)
\ \ \left( \begin{array}{rrr}
 0 &  0 & +1 \\
+1 &  0 &  0 \\
 0 & +1 &  0 
\end{array} \right)
\ \ \left( \begin{array}{rrr}
 0 & +1 &  0 \\
 0 &  0 & +1 \\
+1 &  0 &  0 
\end{array} \right)
\ \ \left( \begin{array}{rrr}
 0 & +1 &  0 \\
+1 & -1 & +1 \\
 0 & +1 &  0 
\end{array} \right)
$$
$$
\left( \begin{array}{rrr}
 0 & +1 &  0 \\
+1 &  0 &  0 \\
 0 &  0 & +1 
\end{array} \right)
\ \ \left( \begin{array}{rrr}
+1 &  0 &  0 \\
 0 &  0 & +1 \\
 0 & +1 &  0 
\end{array} \right)
\ \ \left( \begin{array}{rrr}
+1 &  0 &  0 \\
 0 & +1 &  0 \\
 0 &  0 & +1 
\end{array} \right)
$$
\begin{center}
Figure 2: The seven alternating-sign matrices of order 3.
\end{center}
Matrices satisfying these constraints
were first investigated by Mills, Robbins and Rumsey~\cite{MRR}.
The matrices arose from their investigation
of Dodgson's scheme for computing determinants via ``condensation''
(see section~\ref{sec:dodgson}).
The number of ASMs of order $n$, for small values of $n$,
goes like $1,2,7,42,429,7436,\dots\/$,
and it was conjectured by Mills et al.\ that
the number of ASMs of order $n$
is given by the product
$$\frac{1!4!7!\cdots(3n-2)!}{n!(n+1)!(n+2)!\cdots(2n-1)!}.$$
However, it took over a decade
before this conjecture was proved
by Zeilberger~\cite{Z}.
For more details on this history,
see the expository article by Robbins~\cite{Ro1},
the survey article by Bressoud and Propp~\cite{BP},
or the book by Bressoud~\cite{Br}.

Here my concern will be not with the alternating-sign matrix conjecture
and its proof by Zeilberger,
but with the inherent interest of alternating-sign matrices
as combinatorial objects
admitting many different representations. 
I will present here a number of different ways of looking at an ASM.
Along the way, I will also mention a few topics related to ASMs
in their various guises, such as 
weighted enumeration formulas
and asymptotic shape.
Much of what is in this article
has appeared elsewhere, but
I hope that by gathering these topics together in one place,
I will help raise the level of knowledge and interest
of the mathematical community
concerning these fascinating combinatorial objects.

\section{Corner-sum, heights, and colorings}
\label{sec:corner}              
Given an ASM $(a_{i,j})_{i,j=1}^{n}$ of order $n$,
we can define a \emph{corner-sum matrix} $(c_{i,j})_{i,j=0}^n$
of order $n$
by putting $c_{i,j} = \sum_{i'\leq i,\ j'\leq j} \, a_{i',j'}$.
This definition was introduced in~\cite{RR}.
Figure 3 shows the seven corner-sum matrices of order 3
(note that they are 4-by-4 matrices).
$$
\left( \begin{array}{rrrr}
 0 & 0 & 0 & 0 \\
 0 & 0 & 0 & 1 \\
 0 & 0 & 1 & 2 \\
 0 & 1 & 2 & 3
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 0 & 0 & 0 \\
 0 & 0 & 0 & 1 \\
 0 & 1 & 1 & 2 \\
 0 & 1 & 2 & 3
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 0 & 0 & 0 \\
 0 & 0 & 1 & 1 \\
 0 & 0 & 1 & 2 \\
 0 & 1 & 2 & 3
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 0 & 0 & 0 \\
 0 & 0 & 1 & 1 \\
 0 & 1 & 1 & 2 \\
 0 & 1 & 2 & 3
\end{array} \right)
$$
$$
\left( \begin{array}{rrrr}
 0 & 0 & 0 & 0 \\
 0 & 0 & 1 & 1 \\
 0 & 1 & 2 & 2 \\
 0 & 1 & 2 & 3
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 0 & 0 & 0 \\
 0 & 1 & 1 & 1 \\
 0 & 1 & 1 & 2 \\
 0 & 1 & 2 & 3
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 0 & 0 & 0 \\
 0 & 1 & 1 & 1 \\
 0 & 1 & 2 & 2 \\
 0 & 1 & 2 & 3
\end{array} \right)
$$
\begin{center}
Figure 3: The seven corner-sum matrices of order 3.
\end{center}

Corner-sum matrices, viewed as objects in their own right,
have a very simple description:
the first row and first column consist of 0's,
the last row and last column consist of the numbers from 0 to $n$
(in order),
and within each row and column,
each entry is either equal to, or one more than,
the preceding entry.

Note that the seven corner-sum matrices in Figure 3
correspond respectively to the seven alternating-sign matrices in Figure 2.
I will adhere to this pattern throughout,
to make it easier for the reader to verify
the bijections between the different representations.

Corner-sum matrices can in turn be transformed
into a somewhat more symmetrical form.
Given a corner-sum matrix $(c_{i,j})_{i,j=0}^n$
define $h_{i,j} = i+j-2c_{i,j}$.
Call the result a \emph{height-function matrix}
(see~\cite{EKLP}).
Figure 4 shows the seven height-function matrices of order 3
(4-by-4 matrices).
$$
\left( \begin{array}{rrrr}
 0 & 1 & 2 & 3 \\
 1 & 2 & 3 & 2 \\
 2 & 3 & 2 & 1 \\
 3 & 2 & 1 & 0
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 1 & 2 & 3 \\
 1 & 2 & 3 & 2 \\
 2 & 1 & 2 & 1 \\
 3 & 2 & 1 & 0
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 1 & 2 & 3 \\
 1 & 2 & 1 & 2 \\
 2 & 3 & 2 & 1 \\
 3 & 2 & 1 & 0
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 1 & 2 & 3 \\
 1 & 2 & 1 & 2 \\
 2 & 1 & 2 & 1 \\
 3 & 2 & 1 & 0
\end{array} \right)
$$
$$
\left( \begin{array}{rrrr}
 0 & 1 & 2 & 3 \\
 1 & 2 & 1 & 2 \\
 2 & 1 & 0 & 1 \\
 3 & 2 & 1 & 0
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 1 & 2 & 3 \\
 1 & 0 & 1 & 2 \\
 2 & 1 & 2 & 1 \\
 3 & 2 & 1 & 0
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 1 & 2 & 3 \\
 1 & 0 & 1 & 2 \\
 2 & 1 & 0 & 1 \\
 3 & 2 & 1 & 0
\end{array} \right)
$$
\begin{center}
Figure 4: The seven height-function matrices of order 3.
\end{center}

Height-function matrices
have a simple intrinsic description:
the first row and first column consist of the numbers from 0 to $n$
(consecutively),
the last row and last column consist of the numbers from $n$ to 0
(consecutively),
and any two entries that are row-adjacent or column-adjacent
differ by 1.

If one reduces a height-function matrix modulo 3,
and views the residues 0, 1, and 2 as ``colors'',
one obtains a proper 3-coloring of the $n+1$-by-$n+1$ square grid
satisfying specific boundary conditions.
Here ``proper'' means that adjacent sites get distinct colors,
and the specific boundary conditions are as follows:
colors increase modulo 3 along the first row and first column
and decrease modulo 3 along the last row and last column,
with the color 0 occurring in the upper left.
Figure 5 shows the seven such 3-colorings
of the 4-by-4 grid.

$$
\left( \begin{array}{rrrr}
 0 & 1 & 2 & 0 \\
 1 & 2 & 0 & 2 \\
 2 & 0 & 2 & 1 \\
 0 & 2 & 1 & 0
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 1 & 2 & 0 \\
 1 & 2 & 0 & 2 \\
 2 & 1 & 2 & 1 \\
 0 & 2 & 1 & 0
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 1 & 2 & 0 \\
 1 & 2 & 1 & 2 \\
 2 & 0 & 2 & 1 \\
 0 & 2 & 1 & 0
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 1 & 2 & 0 \\
 1 & 2 & 1 & 2 \\
 2 & 1 & 2 & 1 \\
 0 & 2 & 1 & 0
\end{array} \right)
$$
$$
\left( \begin{array}{rrrr}
 0 & 1 & 2 & 0 \\
 1 & 2 & 1 & 2 \\
 2 & 1 & 0 & 1 \\
 0 & 2 & 1 & 0
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 1 & 2 & 0 \\
 1 & 0 & 1 & 2 \\
 2 & 1 & 2 & 1 \\
 0 & 2 & 1 & 0
\end{array} \right)
\ \ \left( \begin{array}{rrrr}
 0 & 1 & 2 & 0 \\
 1 & 0 & 1 & 2 \\
 2 & 1 & 0 & 1 \\
 0 & 2 & 1 & 0
\end{array} \right)
$$
\begin{center}
Figure 5: The seven colorings associated with the ASMs of order 3.
\end{center}

Conversely, every proper 3-coloring of that graph
that satisfies the boundary conditions
is associated with a unique height-function matrix~\cite{Ba}.

\section{Monotone triangles and order ideals}
\label{sec:monotone}              
Another way to ``process'' an ASM
is to form partial sums of its columns from the top toward the bottom,
as shown in Figure 6 for a 4-by-4 ASM.
In the resulting square matrix of partial sums,
the $i$th row has $i$ 1's in it
and $n-i$ 0's.
Hence we may form a triangular array
whose $i$th row consists of precisely those values $j$
for which the $i,j$th entry of the partial-sum matrix is 1.
The result is called a \emph{monotone triangle}~\cite{MRR}
(or \emph{Gog triangle} in the terminology of Zeilberger~\cite{Z}).
Figure 7 shows the seven monotone triangles of order 3.

$$
\left( \begin{array}{rrrr}
 0 & +1 &  0 &  0 \\
+1 & -1 & +1 &  0 \\
 0 &  0 &  0 & +1 \\
 0 & +1 &  0 &  0 
\end{array} \right)
\rightarrow
\left( \begin{array}{rrrr}
0 & 1 & 0 & 0 \\
1 & 0 & 1 & 0 \\
1 & 0 & 1 & 1 \\
1 & 1 & 1 & 1 
\end{array} \right)
\rightarrow
\begin{array}{rrrrrrr}
  &   &   & 2 &   &   &   \\[2ex]
  &   & 1 &   & 3 &   &   \\[2ex]
  & 1 &   & 3 &   & 4 &   \\[2ex]
1 &   & 2 &   & 3 &   & 4
\end{array}
$$
\begin{center}
Figure 6: Turning an ASM into a monotone triangle.
\end{center}


$$
\begin{array}{rrrrr}
  &   & 3 &   &   \\[2ex]
  & 2 &   & 3 &   \\[2ex]
1 &   & 2 &   & 3
\end{array}
\ \ \ \ \ \ \ \ \begin{array}{rrrrr}
  &   & 3 &   &   \\[2ex]
  & 1 &   & 3 &   \\[2ex]
1 &   & 2 &   & 3
\end{array}
\ \ \ \ \ \ \ \ \begin{array}{rrrrr}
  &   & 2 &   &   \\[2ex]
  & 2 &   & 3 &   \\[2ex]
1 &   & 2 &   & 3
\end{array}
\ \ \ \ \ \ \ \ \begin{array}{rrrrr}
  &   & 2 &   &   \\[2ex]
  & 1 &   & 3 &   \\[2ex]
1 &   & 2 &   & 3
\end{array}
$$
$$
\begin{array}{rrrrr}
  &   & 2 &   &   \\[2ex]
  & 1 &   & 2 &   \\[2ex]
1 &   & 2 &   & 3
\end{array}
\ \ \ \ \ \ \ \ \begin{array}{rrrrr}
  &   & 1 &   &   \\[2ex]
  & 1 &   & 3 &   \\[2ex]
1 &   & 2 &   & 3
\end{array}
\ \ \ \ \ \ \ \ \begin{array}{rrrrr}
  &   & 1 &   &   \\[2ex]
  & 1 &   & 2 &   \\[2ex]
1 &   & 2 &   & 3
\end{array}
$$
\begin{center}
Figure 7: The seven monotone triangles of order 3.
\end{center}

One may intrinsically describe a monotone triangle of order $n$
as a triangular array with $n$ numbers along each side,
where the numbers in the bottom row are $1$ through $n$ in succession,
the numbers in each row are strictly increasing from left to right,
and the numbers along diagonals
are weakly increasing from left to right.
Zeilberger's proof of the ASM conjecture~\cite{Z}
used these Gog triangles
and a natural generalization,
``Gog trapezoids''.

A different geometry comes from looking at the set of ASMs
as a distributive lattice.
Given two height-function matrices $(h_{i,j})_{i,j=0}^n$
and $(h'_{i,j})_{i,j=0}^n$,
we can define new matrices
(called the \emph{join} and \emph{meet})
whose $i,j$th entries are
$\max(h_{i,j},h'_{i,j})$
and $\min(h_{i,j},h'_{i,j})$,
respectively.
These new matrices are themselves height-function matrices,
and the operations of join and meet
turn the set of ASMs of order $n$ into a distributive lattice $L$
(see~\cite{St} for background on finite posets and lattices).

The fundamental theorem of finite distributive lattices
tells us that $L$
can be realized as the lattice of order-ideals of
a certain poset $P$,
namely, the poset of join-irreducibles of the lattice $L$.
There is a nice geometric description of the ranked poset $P$.
It has $(1)(n-1)$ elements of rank 0,
$(2)(n-2)$ elements of rank 1,
$(3)(n-3)$ elements of rank 2,
etc.,
up through
$(n-1)(1)$ elements of rank $n-1$.
These elements are arranged in the fashion of a tetrahedron
resting on its edge.
A generic element of $P$, well inside the interior of the tetrahedron,
covers 4 elements and is covered by 4 elements.

Using this poset $P$,
we can give a picture of the lattice $L$
that does not require a knowledge of poset-theory
(also described in~\cite{EKLP}).
Picture a tetrahedron that is densely packed with
$(1)(n-1)+(2)(n-2)+(3)(n-3)+\dots+(n-1)(1)$ balls,
resting on an edge.
Carefully remove the two upper faces of the tetrahedron
so as not disturb the balls.
One may now start to remove some of the balls,
starting from the top,
so that removal of a ball does not affect
any of the balls below.
There are many configurations of this kind,
ranging from the full packing
to the empty packing.
These configurations are in bijective correspondence
with the ASMs of order $n$,
and the lattice operations of meet and join
correspond to intersection and union.

\section{Square ice}
\label{sec:ice}              
Zeilberger's proof of the ASM conjecture was followed in short order
by a simpler proof due to Kuperberg~\cite{Ku1}.
Kuperberg's proof made use of a different representation of ASMs,
the ``6-vertex model'' of statistical mechanics.
This model is also called square ice
on account of its origin as a two-dimensional surrogate
for a more realistic (and still intractable) 
three-dimensional model of ice proposed by physicists~\cite{Ba}.
A square ice state is an orientation of the edges of a square grid
or a finite sub-graph thereof
with the property that each vertex other than vertices on the boundary
has two incoming arrows and two outgoing arrows.
Each internal vertex must be of one of the six kinds
shown in Figure 8
(hence the name ``six-vertex model'').
The markings under the six vertex-types
can be ignored for the time being.
$$
\begin{array}{c}
\begin{pspicture}(-.9,-.9)(.9,.9)
\psset{arrowsize=5pt}
\psline{->}(0,.5)
\psline{->}(0,-.5)
\psline{-<}(.5,0)
\psline{-<}(-.5,0)
\psline(0,.9)
\psline(0,-.9)
\psline(.9,0)
\psline(-.9,0)
\end{pspicture} \\
+1
\end{array}
\begin{array}{c}
\begin{pspicture}(-1,-1)(1,1)
\psset{arrowsize=5pt}
\psline{-<}(0,.5)
\psline{-<}(0,-.5)
\psline{->}(.5,0)
\psline{->}(-.5,0)
\psline(0,.9)
\psline(0,-.9)
\psline(.9,0)
\psline(-.9,0)
\psset{arrowsize=5pt}
\end{pspicture} \\
-1
\end{array}
\begin{array}{c}
\begin{pspicture}(-1,-1)(1,1)
\psset{arrowsize=5pt}
\psline{->}(0,.5)
\psline{-<}(0,-.5)
\psline{->}(.5,0)
\psline{-<}(-.5,0)
\psline(0,.9)
\psline(0,-.9)
\psline(.9,0)
\psline(-.9,0)
\psset{arrowsize=5pt}
\end{pspicture} \\
0
\end{array}
\begin{array}{c}
\begin{pspicture}(-1,-1)(1,1)
\psset{arrowsize=5pt}
\psline{-<}(0,.5)
\psline{->}(0,-.5)
\psline{-<}(.5,0)
\psline{->}(-.5,0)
\psline(0,.9)
\psline(0,-.9)
\psline(.9,0)
\psline(-.9,0)
\psset{arrowsize=5pt}
\end{pspicture} \\
0
\end{array}
\begin{array}{c}
\begin{pspicture}(-1,-1)(1,1)
\psset{arrowsize=5pt}
\psline{->}(0,.5)
\psline{-<}(0,-.5)
\psline{-<}(.5,0)
\psline{->}(-.5,0)
\psline(0,.9)
\psline(0,-.9)
\psline(.9,0)
\psline(-.9,0)
\psset{arrowsize=5pt}
\end{pspicture} \\
0
\end{array}
\begin{array}{c}
\begin{pspicture}(-1,-1)(1,1)
\psset{arrowsize=5pt}
\psline{-<}(0,.5)
\psline{->}(0,-.5)
\psline{->}(.5,0)
\psline{-<}(-.5,0)
\psline(0,.9)
\psline(0,-.9)
\psline(.9,0)
\psline(-.9,0)
\psset{arrowsize=5pt}
\end{pspicture} \\
0
\end{array}
$$
\begin{center} 
Figure 8: The six vertex-types for the square-ice model.
\end{center}

As our finite subgraph of the square grid,
we will take the ``generalized tic-tac-toe graph''
formed by $n$ horizontal lines and $n$ vertical lines
meeting in $n^2$ intersections of degree 4,
with $4n$ vertices of degree 1 at the boundary.
We say that an ice state on this graph
satisfies \emph{domain-wall boundary conditions}~\cite{KBI}
if all the arrows along the left and right flank point inward
and all the arrows along the top and bottom point outward.

Figure 9 shows the possibilities when $n=3$.
$$
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psline{->}(0,0)(.7,0) \psline(1,0)}
\newcommand{\iceL}{\psline{->}(0,0)(-.7,0) \psline(-1,0)}
\newcommand{\iceU}{\psline{->}(0,0)(0,.7) \psline(0,1)}
\newcommand{\iceD}{\psline{->}(0,0)(0,-.7) \psline(0,-1)}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%1
\rput(1,3){\iceR}
\rput(1,2){\iceR}
\rput(2,3){\iceR}
\rput(3,2){\iceL}
\rput(2,1){\iceL}
\rput(3,1){\iceL}
\rput(1,2){\iceU}
\rput(1,1){\iceU}
\rput(2,2){\iceU}
\rput(2,2){\iceD}
\rput(3,3){\iceD}
\rput(3,2){\iceD}
\end{pspicture}
\ \ \ \ \ \ \ \ {}
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psline{->}(0,0)(.7,0) \psline(1,0)}
\newcommand{\iceL}{\psline{->}(0,0)(-.7,0) \psline(-1,0)}
\newcommand{\iceU}{\psline{->}(0,0)(0,.7) \psline(0,1)}
\newcommand{\iceD}{\psline{->}(0,0)(0,-.7) \psline(0,-1)}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%2
\rput(1,3){\iceR}
\rput(2,3){\iceR}
\rput(1,1){\iceR}
\rput(3,1){\iceL}
\rput(2,2){\iceL}
\rput(3,2){\iceL}
\rput(1,2){\iceU}
\rput(2,2){\iceU}
\rput(2,1){\iceU}
\rput(1,2){\iceD}
\rput(3,3){\iceD}
\rput(3,2){\iceD}
\end{pspicture}
\ \ \ \ \ \ \ \ {}
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psline{->}(0,0)(.7,0) \psline(1,0)}
\newcommand{\iceL}{\psline{->}(0,0)(-.7,0) \psline(-1,0)}
\newcommand{\iceU}{\psline{->}(0,0)(0,.7) \psline(0,1)}
\newcommand{\iceD}{\psline{->}(0,0)(0,-.7) \psline(0,-1)}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%3
\rput(1,2){\iceR}
\rput(1,3){\iceR}
\rput(2,2){\iceR}
\rput(3,1){\iceL}
\rput(3,3){\iceL}
\rput(2,1){\iceL}
\rput(1,1){\iceU}
\rput(1,2){\iceU}
\rput(3,1){\iceU}
\rput(3,2){\iceU}
\rput(2,3){\iceD}
\rput(2,2){\iceD}
\end{pspicture}
\ \ \ \ \ \ \ \ {}
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psline{->}(0,0)(.7,0) \psline(1,0)}
\newcommand{\iceL}{\psline{->}(0,0)(-.7,0) \psline(-1,0)}
\newcommand{\iceU}{\psline{->}(0,0)(0,.7) \psline(0,1)}
\newcommand{\iceD}{\psline{->}(0,0)(0,-.7) \psline(0,-1)}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%4
\rput(1,3){\iceR}
\rput(2,2){\iceR}
\rput(1,1){\iceR}
\rput(3,3){\iceL}
\rput(2,2){\iceL}
\rput(3,1){\iceL}
\rput(1,2){\iceU}
\rput(2,1){\iceU}
\rput(3,2){\iceU}
\rput(1,2){\iceD}
\rput(2,3){\iceD}
\rput(3,2){\iceD}
\end{pspicture}
$$
$$
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psline{->}(0,0)(.7,0) \psline(1,0)}
\newcommand{\iceL}{\psline{->}(0,0)(-.7,0) \psline(-1,0)}
\newcommand{\iceU}{\psline{->}(0,0)(0,.7) \psline(0,1)}
\newcommand{\iceD}{\psline{->}(0,0)(0,-.7) \psline(0,-1)}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%5
\rput(1,1){\iceR}
\rput(2,1){\iceR}
\rput(1,3){\iceR}
\rput(3,3){\iceL}
\rput(2,2){\iceL}
\rput(3,2){\iceL}
\rput(1,2){\iceU}
\rput(3,2){\iceU}
\rput(3,1){\iceU}
\rput(1,2){\iceD}
\rput(2,2){\iceD}
\rput(2,3){\iceD}
\end{pspicture}
\ \ \ \ \ \ \ \ {}
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psline{->}(0,0)(.7,0) \psline(1,0)}
\newcommand{\iceL}{\psline{->}(0,0)(-.7,0) \psline(-1,0)}
\newcommand{\iceU}{\psline{->}(0,0)(0,.7) \psline(0,1)}
\newcommand{\iceD}{\psline{->}(0,0)(0,-.7) \psline(0,-1)}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%6
\rput(1,1){\iceR}
\rput(1,2){\iceR}
\rput(2,2){\iceR}
\rput(3,3){\iceL}
\rput(2,3){\iceL}
\rput(3,1){\iceL}
\rput(2,2){\iceU}
\rput(2,1){\iceU}
\rput(3,2){\iceU}
\rput(1,2){\iceD}
\rput(1,3){\iceD}
\rput(3,2){\iceD}
\end{pspicture}
\ \ \ \ \ \ \ \ {}
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psline{->}(0,0)(.7,0) \psline(1,0)}
\newcommand{\iceL}{\psline{->}(0,0)(-.7,0) \psline(-1,0)}
\newcommand{\iceU}{\psline{->}(0,0)(0,.7) \psline(0,1)}
\newcommand{\iceD}{\psline{->}(0,0)(0,-.7) \psline(0,-1)}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%7
\rput(1,1){\iceR}
\rput(1,2){\iceR}
\rput(2,1){\iceR}
\rput(3,3){\iceL}
\rput(2,3){\iceL}
\rput(3,2){\iceL}
\rput(2,2){\iceU}
\rput(3,1){\iceU}
\rput(3,2){\iceU}
\rput(1,2){\iceD}
\rput(1,3){\iceD}
\rput(2,2){\iceD}
\end{pspicture}
$$
\begin{center} 
Figure 9: The seven square-ice states for $n=3$ with domain-wall
boundary conditions.
\end{center}

These states of the square-ice model
are in bijective correspondence with ASMs.
To turn a state of the square-ice model on an $n$-by-$n$ grid
with domain-wall boundary conditions
into an alternating-sign matrix of order $n$,
replace each vertex by $+1$, $-1$, or 0
according to the marking given in Figure 8.
Kuperberg was able to give a simplified proof of the ASM conjecture
by making use of results about the square-ice model
in the mathematical physics literature~\cite{KBI}.

An amusing variant of the square-ice model is a tiling model
in which the tiles are deformed versions of squares
that the physicist Joshua Burton has dubbed
``gaskets'' and ``baskets'',
depicted in Figure 10.
(To see why the basket deserves its name,
you might want to rotate the page by 45 degrees,
so that the ``handle'' of the basket is pointing up.)
$$
\begin{pspicture}(0.25,-0.25)(1.75,1.25)
\psarc(0,.5){0.707}{-45}{45}
\psarc(2,.5){0.707}{135}{225}
\psarc(1,.5){0.707}{45}{135}
\psarc(1,.5){0.707}{225}{315}
\end{pspicture}
\begin{pspicture}(0,-0.25)(1.75,1.25)
\psarc(0,0.5){0.707}{-45}{45}
\psarc(1,0.5){0.707}{-45}{45}
\psarc(1,0.5){0.707}{225}{315}
\psarc(1,1.5){0.707}{225}{315}
\end{pspicture}
{}
$$
\begin{center} 
Figure 10: A gasket and a basket.
\end{center}
The gasket and basket correspond respectively to
the first and last vertex-types shown in Figure 8;
the other five vertex-types
correspond to tiles obtained by rotating the gasket
by 90 degrees
or by rotating the basket by 90, 180, or 270 degrees.
The directions of the bulges of the four sides of a tile
correspond to the orientations of the four edges
incident with a vertex.
Thus, the seven ASMs of order 3
correspond to the seven distinct ways
of tiling the region shown in Figure 11
(a ``supergasket'' of order 3)
with gaskets and baskets.
$$
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psarc(0,0){0.4949}{-45}{45}}
\newcommand{\iceL}{\psarc(0,0){0.4949}{135}{225}}
\newcommand{\iceU}{\psarc(0,0){0.4949}{45}{135}}
\newcommand{\iceD}{\psarc(0,0){0.4949}{225}{315}}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%1
\rput(1,3){\iceR}
\rput(1,2){\iceR}
\rput(2,3){\iceR}
\rput(3,2){\iceL}
\rput(2,1){\iceL}
\rput(3,1){\iceL}
\rput(1,2){\iceU}
\rput(1,1){\iceU}
\rput(2,2){\iceU}
\rput(2,2){\iceD}
\rput(3,3){\iceD}
\rput(3,2){\iceD}
\end{pspicture}
\ \ \ \ \ \ \ \ {}
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psarc(0,0){0.4949}{-45}{45}}
\newcommand{\iceL}{\psarc(0,0){0.4949}{135}{225}}
\newcommand{\iceU}{\psarc(0,0){0.4949}{45}{135}}
\newcommand{\iceD}{\psarc(0,0){0.4949}{225}{315}}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%2
\rput(1,3){\iceR}
\rput(2,3){\iceR}
\rput(1,1){\iceR}
\rput(3,1){\iceL}
\rput(2,2){\iceL}
\rput(3,2){\iceL}
\rput(1,2){\iceU}
\rput(2,2){\iceU}
\rput(2,1){\iceU}
\rput(1,2){\iceD}
\rput(3,3){\iceD}
\rput(3,2){\iceD}
\end{pspicture}
\ \ \ \ \ \ \ \ {}
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psarc(0,0){0.4949}{-45}{45}}
\newcommand{\iceL}{\psarc(0,0){0.4949}{135}{225}}
\newcommand{\iceU}{\psarc(0,0){0.4949}{45}{135}}
\newcommand{\iceD}{\psarc(0,0){0.4949}{225}{315}}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%3
\rput(1,2){\iceR}
\rput(1,3){\iceR}
\rput(2,2){\iceR}
\rput(3,1){\iceL}
\rput(3,3){\iceL}
\rput(2,1){\iceL}
\rput(1,1){\iceU}
\rput(1,2){\iceU}
\rput(3,1){\iceU}
\rput(3,2){\iceU}
\rput(2,3){\iceD}
\rput(2,2){\iceD}
\end{pspicture}
\ \ \ \ \ \ \ \ {}
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psarc(0,0){0.4949}{-45}{45}}
\newcommand{\iceL}{\psarc(0,0){0.4949}{135}{225}}
\newcommand{\iceU}{\psarc(0,0){0.4949}{45}{135}}
\newcommand{\iceD}{\psarc(0,0){0.4949}{225}{315}}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%4
\rput(1,3){\iceR}
\rput(2,2){\iceR}
\rput(1,1){\iceR}
\rput(3,3){\iceL}
\rput(2,2){\iceL}
\rput(3,1){\iceL}
\rput(1,2){\iceU}
\rput(2,1){\iceU}
\rput(3,2){\iceU}
\rput(1,2){\iceD}
\rput(2,3){\iceD}
\rput(3,2){\iceD}
\end{pspicture}
$$
$$
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psarc(0,0){0.4949}{-45}{45}}
\newcommand{\iceL}{\psarc(0,0){0.4949}{135}{225}}
\newcommand{\iceU}{\psarc(0,0){0.4949}{45}{135}}
\newcommand{\iceD}{\psarc(0,0){0.4949}{225}{315}}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%5
\rput(1,1){\iceR}
\rput(2,1){\iceR}
\rput(1,3){\iceR}
\rput(3,3){\iceL}
\rput(2,2){\iceL}
\rput(3,2){\iceL}
\rput(1,2){\iceU}
\rput(3,2){\iceU}
\rput(3,1){\iceU}
\rput(1,2){\iceD}
\rput(2,2){\iceD}
\rput(2,3){\iceD}
\end{pspicture}
\ \ \ \ \ \ \ \ {}
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psarc(0,0){0.4949}{-45}{45}}
\newcommand{\iceL}{\psarc(0,0){0.4949}{135}{225}}
\newcommand{\iceU}{\psarc(0,0){0.4949}{45}{135}}
\newcommand{\iceD}{\psarc(0,0){0.4949}{225}{315}}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%6
\rput(1,1){\iceR}
\rput(1,2){\iceR}
\rput(2,2){\iceR}
\rput(3,3){\iceL}
\rput(2,3){\iceL}
\rput(3,1){\iceL}
\rput(2,2){\iceU}
\rput(2,1){\iceU}
\rput(3,2){\iceU}
\rput(1,2){\iceD}
\rput(1,3){\iceD}
\rput(3,2){\iceD}
\end{pspicture}
\ \ \ \ \ \ \ \ {}
\begin{pspicture}(0,0)(2.8,2.8)
\psset{xunit=.7,yunit=.7}
\psset{arrowsize=5pt}
\newcommand{\iceR}{\psarc(0,0){0.4949}{-45}{45}}
\newcommand{\iceL}{\psarc(0,0){0.4949}{135}{225}}
\newcommand{\iceU}{\psarc(0,0){0.4949}{45}{135}}
\newcommand{\iceD}{\psarc(0,0){0.4949}{225}{315}}
\rput(0,1){\iceR}
\rput(0,2){\iceR}
\rput(0,3){\iceR}
\rput(4,1){\iceL}
\rput(4,2){\iceL}
\rput(4,3){\iceL}
\rput(1,3){\iceU}
\rput(2,3){\iceU}
\rput(3,3){\iceU}
\rput(1,1){\iceD}
\rput(2,1){\iceD}
\rput(3,1){\iceD}
%7
\rput(1,1){\iceR}
\rput(1,2){\iceR}
\rput(2,1){\iceR}
\rput(3,3){\iceL}
\rput(2,3){\iceL}
\rput(3,2){\iceL}
\rput(2,2){\iceU}
\rput(3,1){\iceU}
\rput(3,2){\iceU}
\rput(1,2){\iceD}
\rput(1,3){\iceD}
\rput(2,2){\iceD}
\end{pspicture}
$$
\begin{center} 
Figure 11: The seven tilings of an order-3 supergasket 
with gaskets and baskets.
\end{center}

\noindent
For another fanciful embodiment of ASMs as tilings,
see the cover of~\cite{Br}. 

\section{Symmetric ASMs and partial ASMs}
\label{sec:sym}
Some ASMs are more symmetrical than others.
More precisely,
the eight-element dihedral group $D_4$
acts on ASMs,
and for every subgroup $G$ of $D_4$
there are ASMs that are invariant under the action
of every element of $G$.
In~\cite{Ro2},
Robbins gave some conjectures for
the number of ASMs of order $n$
that are invariant under particular groups $G$;
for most (but not all) of the subgroups $G$ of $D_4$,
numerical evidence suggested specific product-formula.
Since then,
Kuperberg~\cite{Ku2}
has proved some of these, but others remain conjectural.

At the same time,
one may also look at halves
(or even quarters or eighths) of ASMs ---
the fundamental regions under the action
of the aforementioned groups $G$ ---
and look at them in their own right,
asking, How many partial ASMs are there
if one limits attention to such a region?
There are some interesting phenomena here.

For instance, for $c_1$,$c_2$,$c_3$
each equal to $+1$ or $-1$,
define $N(c_1,c_2,c_3)$ as the number of 
4-by-7 partial height-function matrices
of the form shown in Figure 12.
$$
\begin{array}{ccccccc}
0 & 1 & 2 & 3 & 4 & 5 & 6 \\
1 & ? & ? & ? & ? & ? & 5 \\
2 & ? & ? & ? & ? & ? & 4 \\
3 & 3+c_1 & 3 & 3+c_2 & 3 & 3+c_3 & 3
\end{array}
$$
\begin{center}
Figure 12: Half of a height-function matrix of order 6.
\end{center}
Not surprisingly, the eight values of $N(c_1,c_2,c_3)$
as $c_1,c_2,c_3$ vary
are not all equal to one another.
But it is surprising that the four numbers
$$N(1,1,1),$$
$$(N(1,1,-1)+N(1,-1,1)+N(-1,1,1))/3,$$
$$(N(1,-1,-1)+N(-1,1,-1)+N(-1,-1,1))/3,$$
and 
$$N(-1,-1,-1)$$ 
{\it are\/} all equal.
More generally,
consider $(n+1)$-by-$(2n+1)$ partial height-function matrices
of the following form:
$$
\begin{array}{ccccccccc}
0 & 1 & 2 & 3 & 4 & 5 & ... & 2n-1 & 2n \\
1 & ? & ? & ? & ? & ? & ... & ? & 2n-1 \\
2 & ? & ? & ? & ? & ? & ... & ? & 2n-2 \\
\vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\
n-1 & ? & ? & ? & ? & ? & ... & ? & n+1 \\
n & n+c_1 & n & n+c_2 & n & n+c_3 & ... & n+c_{n} & n
\end{array} .
$$
\begin{center}
Figure 13: Half of a height-function matrix of order $2n$.
\end{center}
Here each $c_i$ ($1 \leq i \leq n$) is either $+1$ or $-1$.
Let $N(c_1,c_2,\dots,c_n)$ be the number of such
partial height-function matrices.
Then one finds empirically that
for every $k$ in $-n,-(n-2),-(n-4),\dots,n-4,n-2,n$,
the average of $N(c_1,c_2,\dots,c_n)$ over all vectors $(c_1,\dots,c_n)$
satisfying $c_1+\dots+c_n=k$
depends only on $n$, not on $k$.
Kuperberg has found an algebraic proof of this 
using the Tsuchiya determinant formula~\cite{T} 
invented for the study of the square ice model,
but there ought to be a purely combinatorial proof
of this simple relation.

\section{Weighted enumeration}
\label{sec:weight}
There are some interesting results in the literature
on weighted enumeration of ASMs.
Here one assigns to each ASM of order $n$ some weight,
and tries to compute the sum of the weights of all the ASMs of order $n$.
A priori it might be unclear why this would be interesting,
but with certain weighting schemes
one gets beautiful (and mysterious) formulas,
which are their own justification.

For instance, following~\cite{MRR}, 
one can assign weight $x^k$ to every ASM
that contains exactly $k$ entries equal to $-1$.
What is the sum of the weights of the ASMs of order $n$?
When $x=1$, this is nothing other than ordinary enumeration of ASMs.
When $x=2$, there is a very nice answer~\cite{MRR}:
the sum of the weights is exactly $2^{n(n-1)/2}$.
When $x=3$, the answer is more complicated,
but it is roughly similar in type to the formula for the case $x=1$,
and roughly similar in difficulty;
the ``3-enumeration'' formula
was first conjectured by Mills, Robbins and Rumsey~\cite{MRR}
and was eventually proved by Kuperberg~\cite{Ku2}
(with corrections provided by Robin Chapman).
No other positive integer $x$ seems to give nice answers.
One can also assign weight $x^k$ to every ASM
that contains exactly $k$ entries equal to $+1$,
but this is essentially the same weighting scheme,
since in any ASM of order $n$,
the number of $+1$'s is always
$n$ plus the number of $-1$'s.

More interestingly, one can also use a hybrid weighting scheme
in which the exponent of $x$ is equal to the number of entries
$a_{i,j}$ such that \emph{either} $i+j$ is even and $a_{i,j}=-1$
\emph{or} $i+j$ is odd and $a_{i,j}=+1$.
When $x=2$, this too leads to an interesting result:
the sum of the weights is always a power of two
times a power of five!~\cite{Y}

One can come up with many open problems by combining
the ideas of this section and the previous section.
Here is one example:
Each way of filling in Figure 13
(with the $c_i$'s now permitted to vary freely)
gives rise to a ``half-ASM''.
For instance, the filling
$$
\begin{array}{ccccccc}
0 & 1 & 2 & 3 & 4 & 5 & 6 \\
1 & 2 & 3 & 4 & 5 & 4 & 5 \\
2 & 3 & 4 & 3 & 4 & 3 & 4 \\
3 & 2 & 3 & 2 & 3 & 4 & 3
\end{array}
$$
of Figure 12 gives rise to the half-ASM
$$
\begin{array}{rrrrrr}
\ 0 & \ \ 0 & \ 0 & \ \ 0 &  +1 & \ 0 \\
\ 0 & \ \ 0 &  +1 & \ \ 0 & \ 0 & \ 0 \\
 +1 & \ \ 0 & \ 0 & \ \ 0 &  -1 &  +1 
\end{array}
$$
which has a single $-1$.
If we assign each rectangular array that arises in this way
a weight equal to 2 to the power of the number of $-1$'s, 
we get $2^{n^2}$ (Robin Chapman and Theresia Eisenk\"olbl 
have independently found nice proofs of this).
On the other hand, suppose we now permit
every entry in the bottom row of Figure 13
to vary freely
(aside from the $n$ on the left and the $n$ on the right).
When we 2-enumerate half-ASMs of this sort,
as a function of $n$,
we get the following sequence of numbers:
$2$, $20 = 2^2 \cdot 5$,
$896 = 2^7 \cdot 7$,
$177408 = 2^8 \cdot 3^2 \cdot 7 \cdot 11$,
$154632192 = 2^{15} \cdot 3 \cdot 11^2 \cdot 13$,
$592344383488 = 2^{17} \cdot 11^2 \cdot 13^3 \cdot 17$, $\dots$.
Clearly the absence of larger prime factors
indicates that there is some nice product formula
governing these numbers.
Can someone find the right conjecture?
Can someone prove it?
(For more data of this kind,
see: 
\begin{center}
{\tt http://www.math.wisc.edu/$\sim$propp/half-asm}
\end{center}
Late-breaking news: Theresia Eisenk\"olbl~\cite{E} has made
progress with the data-set
and proved a number of theorems about half-ASMs.)

\section{Full packings of loops}
\label{sec:loops}
Given an ice state of order $n$,
we can form a subgraph of the underlying tic-tac-toe graph
by selecting precisely those edges
that are oriented so as to point from an odd vertex to an even vertex,
where we have assigned parities to vertices
so that each odd vertex has only even vertices as neighbors
and vice versa.
Then one gets a subgraph of the tic-tac-toe graph
such that each of the $n^2$ internal vertices
lies on exactly 2 of the selected edges,
and the $4n$ external vertices,
taken in cyclical order,
alternate between lying on a selected edge
and not lying on a selected edge.
Moreover, every such subgraph
arises from an ice state in this way.

Let us say that the leftmost vertex
in the top row of external vertices
is even.
Figure 14 shows the seven subgraphs that result
from applying the transformation
to the seven ice states of order 3.

$$
\begin{pspicture}(0,0)(3.6,3.6)
\psset{xunit=.6,yunit=.6}
\multips(2,1)(1,0){3}{\odisk{.1}}
\multips(1,2)(1,0){5}{\odisk{.1}}
\multips(1,3)(1,0){5}{\odisk{.1}}
\multips(1,4)(1,0){5}{\odisk{.1}}
\multips(2,5)(1,0){3}{\odisk{.1}}
\psline(2,4)(2,5)
\psline(4,4)(4,5)
\psline(2,1)(2,2)
\psline(4,1)(4,2)
\psline(1,3)(2,3)
\psline(4,3)(5,3)
%1
\psline(2,4)(3,4)(3,2)(4,2)
\psline(4,4)(4,3)
\psline(2,2)(2,3)
\end{pspicture}
\ {}
\begin{pspicture}(0,0)(4.2,4.2)
\psset{xunit=.6,yunit=.6}
\multips(2,1)(1,0){3}{\odisk{.1}}
\multips(1,2)(1,0){5}{\odisk{.1}}
\multips(1,3)(1,0){5}{\odisk{.1}}
\multips(1,4)(1,0){5}{\odisk{.1}}
\multips(2,5)(1,0){3}{\odisk{.1}}
\psline(2,4)(2,5)
\psline(4,4)(4,5)
\psline(2,1)(2,2)
\psline(4,1)(4,2)
\psline(1,3)(2,3)
\psline(4,3)(5,3)
%2
\psline(2,4)(3,4)(3,3)(2,3)
\psline(4,4)(4,3)
\psline(2,2)(4,2)
\end{pspicture}
\ {}
\begin{pspicture}(0,0)(4.2,4.2)
\psset{xunit=.6,yunit=.6}
\multips(2,1)(1,0){3}{\odisk{.1}}
\multips(1,2)(1,0){5}{\odisk{.1}}
\multips(1,3)(1,0){5}{\odisk{.1}}
\multips(1,4)(1,0){5}{\odisk{.1}}
\multips(2,5)(1,0){3}{\odisk{.1}}
\psline(2,4)(2,5)
\psline(4,4)(4,5)
\psline(2,1)(2,2)
\psline(4,1)(4,2)
\psline(1,3)(2,3)
\psline(4,3)(5,3)
%3
\psline(2,4)(4,4)
\psline(2,2)(2,3)
\psline(4,2)(3,2)(3,3)(4,3)
\end{pspicture}
\ {}
\begin{pspicture}(0,0)(4.2,4.2)
\psset{xunit=.6,yunit=.6}
\multips(2,1)(1,0){3}{\odisk{.1}}
\multips(1,2)(1,0){5}{\odisk{.1}}
\multips(1,3)(1,0){5}{\odisk{.1}}
\multips(1,4)(1,0){5}{\odisk{.1}}
\multips(2,5)(1,0){3}{\odisk{.1}}
\psline(2,4)(2,5)
\psline(4,4)(4,5)
\psline(2,1)(2,2)
\psline(4,1)(4,2)
\psline(1,3)(2,3)
\psline(4,3)(5,3)
%4
\psline(2,4)(4,4)
\psline(2,3)(4,3)
\psline(2,2)(4,2)
\end{pspicture}
$$
$$
\begin{pspicture}(0,0)(4.2,4.2)
\psset{xunit=.6,yunit=.6}
\multips(2,1)(1,0){3}{\odisk{.1}}
\multips(1,2)(1,0){5}{\odisk{.1}}
\multips(1,3)(1,0){5}{\odisk{.1}}
\multips(1,4)(1,0){5}{\odisk{.1}}
\multips(2,5)(1,0){3}{\odisk{.1}}
\psline(2,4)(2,5)
\psline(4,4)(4,5)
\psline(2,1)(2,2)
\psline(4,1)(4,2)
\psline(1,3)(2,3)
\psline(4,3)(5,3)
%5
\psline(2,4)(4,4)
\psline(2,3)(3,3)(3,2)(2,2)
\psline(4,2)(4,3)
\end{pspicture}
\ {}
\begin{pspicture}(0,0)(4.2,4.2)
\psset{xunit=.6,yunit=.6}
\multips(2,1)(1,0){3}{\odisk{.1}}
\multips(1,2)(1,0){5}{\odisk{.1}}
\multips(1,3)(1,0){5}{\odisk{.1}}
\multips(1,4)(1,0){5}{\odisk{.1}}
\multips(2,5)(1,0){3}{\odisk{.1}}
\psline(2,4)(2,5)
\psline(4,4)(4,5)
\psline(2,1)(2,2)
\psline(4,1)(4,2)
\psline(1,3)(2,3)
\psline(4,3)(5,3)
%6
\psline(2,4)(2,3)
\psline(2,2)(4,2)
\psline(4,4)(3,4)(3,3)(4,3)
\end{pspicture}
\ {}
\begin{pspicture}(0,0)(4.2,4.2)
\psset{xunit=.6,yunit=.6}
\multips(2,1)(1,0){3}{\odisk{.1}}
\multips(1,2)(1,0){5}{\odisk{.1}}
\multips(1,3)(1,0){5}{\odisk{.1}}
\multips(1,4)(1,0){5}{\odisk{.1}}
\multips(2,5)(1,0){3}{\odisk{.1}}
\psline(2,4)(2,5)
\psline(4,4)(4,5)
\psline(2,1)(2,2)
\psline(4,1)(4,2)
\psline(1,3)(2,3)
\psline(4,3)(5,3)
%7
\psline(2,4)(2,3)
\psline(4,3)(4,2)
\psline(4,4)(3,4)(3,2)(2,2)
\end{pspicture}
$$
\begin{center}
Figure 14: The seven FPL states of order 3.
\end{center}

Leaving aside the behavior at the boundary,
these are states of what physicists call
the fully packed loop (FPL) model
on the square grid (see e.g.~\cite{BBNY}).
I sometimes prefer to call such states
``near 2-factors''
since nearly all of the vertices in these subgraphs
have degree 2;
only the external vertices have smaller degree
(specifically, they alternate between having degree 0
and having degree 1).

If one starts from an external vertex,
there is a unique path that one can follow
using edges in the subgraph;
this path must eventually lead to one of the other external vertices.
In addition to these paths (``open loops''),
the edges of the subgraph can also form closed loops 
(see Figure 15, for example).

Note that these loops (both open and closed)
cannot cross one another.
In particular, the open loops
must join up the $2n$ external edges
in some non-crossing fashion.
If one numbers the vertices of degree 1
in cyclic order from 1 to $2n$,
the FPL state yields a pairing
of odd-indexed external vertices
with even-indexed external vertices.
For instance,
the FPL state shown in Figure 15
links 1 with 12,
2 with 11,
3 with 4,
5 with 6,
7 with 8,
and 9 with 10.
$$
\begin{pspicture}(.4,.4)(5.0,5.0)
\psset{xunit=.6,yunit=.6}
\multips(2,1)(1,0){6}{\odisk{.1}}
\multips(1,2)(1,0){8}{\odisk{.1}}
\multips(1,3)(1,0){8}{\odisk{.1}}
\multips(1,4)(1,0){8}{\odisk{.1}}
\multips(1,5)(1,0){8}{\odisk{.1}}
\multips(1,6)(1,0){8}{\odisk{.1}}
\multips(1,7)(1,0){8}{\odisk{.1}}
\multips(2,8)(1,0){6}{\odisk{.1}}
\psline(1,6)(2,6)(2,8)
\psline(1,4)(2,4)(2,5)(3,5)(3,7)(4,7)(4,8)
\psline(1,2)(2,2)(2,3)(3,3)(3,4)(4,4)(4,2)(3,2)(3,1)
\psline(6,8)(6,7)(5,7)(5,6)(4,6)(4,5)(6,5)(6,6)(7,6)(7,7)(8,7)
\psline(8,5)(7,5)(7,3)(8,3)
\psline(5,1)(5,2)(7,2)(7,1)
\psline(5,3)(6,3)(6,4)(5,4)(5,3)
\rput(2,8.5){1}
\rput(4,8.5){2}
\rput(6,8.5){3}
\rput(8.5,7){4}
\rput(8.5,5){5}
\rput(8.5,3){6}
\rput(7,0.5){7}
\rput(5,0.5){8}
\rput(3,0.5){9}
\rput(0.5,2){10}
\rput(0.5,4){11}
\rput(0.5,6){12}
\end{pspicture}
$$
\begin{center}
Figure 15: A fully packed loop state of order 6.
\end{center}

It has been conjectured, on the strength of numerical evidence,
that the number of ASMs of order $n$
in which the open paths link
1 with 2, 3 with 4, \dots, and $2n-1$ with $2n$
is exactly the total number of ASMs of order $n-1$.

We do not have a proof of this, but curiously, we have a proof
of something else:
that the number of FPL states of order $n$
in which the open paths link
1 with 2, 3 with 4, \dots, and $2n-1$ with $2n$
is equal to the number of FPL states of order $n$
in which the open paths link
1 with $2n$, 2 with 3, 4 with 5, \dots, and $2n-2$ with $2n-1$.
Note that when $n$ is divisible by 4,
the geometries of the two linking-patterns is different,
with respect to the tic-tac-toe graph.
Yet the number of FPL states is the same.

This is a special case of a far more general fact
proved by Wieland~\cite{W}.
For any two non-crossing pairings $\pi$ and $\pi'$
of the numbers 1 through $2n$
(viewed as equally spaced points on a circle),
if $\pi$ and $\pi'$ are conjugate
via a rotation or reflection,
then (if we now treat the numbers 1 through $2n$
as the labels of vertices of degree 1
in the tic-tac-toe graph of order $n$)
the number of FPL states with linking-pattern $\pi$ 
equals the number of FPL states with linking-pattern $\pi'$.
It is as if the tic-tac-toe graph,
in some mystical sense,
had an automorphism sending 1 to 2, 2 to 3, etc.

One might also ask for the number of FPL states of order $n$
in which 1 is linked with 2
(ignoring all the other linking going on).
Here too we have a conjectural answer,
due to David Wilson:
the number of such FPL states 
is just the total number of FPL states of order $n$
multiplied by
$$\frac{3}{2} \frac{n^2+1}{4n^2-1}.$$
This would imply, in particular,
that as $n$ goes to infinity,
the probability that a randomly chosen FPL state
links 1 with 2 
is asymptotically $3/8$.

For a very recent discussion of the FPL model, see~\cite{RS2}.
In this article, Razumov and Stroganov point out that
the FPL model is closely related to a seemingly quite
different lattice model.

It is worth pointing out that these conjectures
are truly native to the FPL incarnation of ASMs;
it is hard to see how they could have arisen from
one of the other models.
So, even though the transformation
between ASMs and FPL states is fairly shallow mathematically,
some interesting questions can arise from it
that might not otherwise have been noticed.
Likewise, the passage between square-ice states
and ASMs is not conceptually deep,
but it made possible the shortest known solution of the ASM problem
by putting the problem into a form
where known methods from the physics literature could be applied.
Hence a good subtitle for this paper might have been
``The non-trivial power of trivial transformations''.

\section{Numerology}
\label{sec:numerology}
As far as I know,
the first manifestation of the sequence
1,2,7,42,429,7436,\dots
occurred in connection with combinatorial objects
called descending plane partitions or DPPs~\cite{An1}.
Another manifestation was totally symmetric
self-complementary plane-partitions (TSSCPPs)~\cite{An2}.
Andrews discovered the proofs of both these formulas.
Indeed, it was Andrews' proof of the 1,2,7,42,\dots formula
for TSSCPPs
that galvanized Zeilberger into tackling the ASM conjecture.
Zeilberger showed that ASMs are equinumerous with TSSCPPs.
However, his proof was not bijective,
and to this day nobody knows of a good bijection
between ASMs of order $n$
and TSSCPPs of order $n$.

Another context in which these numbers arise
is the study of the XXZ model 
in statistical mechanics~\cite{RS1}~\cite{BGN}.

A different context in which numbers related to ASMs have occurred
is certain ``number walls'' investigated by Somos~\cite{So}.
(Number walls are arrays of Hankel determinants,
arranged so as to faciliate calculations of
successively larger ones;
see~\cite{CG} for details.)
In Somos' examples
it is not the sequence 1,2,7,42,\dots that crops up,
but sequences that enumerate various sorts of symmetric ASMs.
Xin~\cite{X} has found a Hankel determinant theorem
that involves the sequence $1,2,7,42,\dots$ itself:
he has shown that for all $n$, the determinant of the $n$-by-$n$ 
matrix whose $i,j$th entry is equal to the coefficient of
$x^{i+j-2}$ in the Taylor expansion of
the generalized Catalan generating function
$\frac{1-(1-9x)^{1/3}}{3x}$~\cite{La}
is equal to
$$3^{n \choose 2}$$
times the number of $n$-by-$n$ alternating-sign matrices.

It would be desirable to have some sort of understanding
of why the number of ASMs of order $n$
(with or without symmetry-constraints)
turns up in these seemingly disparate situations.

\section{Large random ASMs}
\label{sec:large}
Another sort of phenomenon associated with ASMs of order $n$
is their typical ``shape'' when $n$ is large.
I remarked above that the ASMs of order $n$
form a distributive lattice;
consequently, the method of ``coupling from the past''
can be applied~\cite{Pr}
for the purpose of generating 
a random ASM of fixed order
governed by the uniform distribution.
Figure 16 shows a random ASM of order 40,
represented as a gaskets-and-baskets tiling
(where an attempt has been made to give
each of the six tile-types its own distinctive shading).

%\includegraphics{ice40.ps}
%\input{ice40.ps}
\begin{figure}
\begin{center}
\leavevmode
\epsfbox[100 100 350 500]{ice.ps}
\end{center}
%\caption[16]{A random gaskets-and-baskets tiling of order 40.}
%\label{fig-test}
\end{figure}
%\begin{center}
%Figure 16: A random gaskets-and-baskets tiling of order 40.
%\end{center}
%FIX THIS KLUDGE!

Note that the gaskets (which correspond to
the non-zero entries of the ASM)
stay away from the corners.
Computer experiments strongly indicate
that this is typical behavior:
the probability of finding a non-zero entry
close to one of the corners
appears to be quite small.
Another way of expressing this is
in terms of the entries $h_{i,j}$ of the height-function matrix.
Say that a location $(i,j)$ in a particular height-function matrix
of order $n$
is \emph{frozen}
if the height there is equal to either
the maximum possible height 
that any height-function matrix of order $n$ can exhibit at that location
or the minimum possible height 
that any height-function matrix of order $n$ can exhibit at that location.
Then the claim is that a significant portion of the height-function
matrix, concentrated in the four corners,
tends to be frozen.

This is analogous to phenomena that have been observed
for other sorts of combinatorial models.
Indeed, if one adopt a non-uniform distribution
on the set of ASMs of order $n$,
where the probability associated with an ASM
containing exactly $k$ entries equal to $-1$
is proportional to $2^k$,
then it is rigorously known
that the frozen region
tend in probability to a perfect circular disk~\cite{JPS}~\cite{CEP}.
However, it is not known that this holds
when the uniform distribution on ASMs is used.

\section{Back to Dodgson}
\label{sec:dodgson}
I conclude this article by coming full circle
and returning the context in which
ASMs first came to light:
the study of Dodgson's condensation algorithm and its variants.
I will not discuss Dodgson's algorithm per se,
but rather a variation of it invented by Robbins and Rumsey~\cite{RR}.
This modified form of Dodgson condensation
is an algebraic recurrence relation
$$f_{i,j,k+1}=(f_{i+1,j,k}f_{i-1,j,k}+f_{i,j+1,k}f_{i,j-1,k})/f_{i,j,k-1}$$
satisfied by certain functions $f:\Z^3 \rightarrow \R$.
(Note that this equation can be written slightly more symmetrically as
$$f_{i,j,k+1}f_{i,j,k-1}-f_{i+1,j,k}f_{i-1,j,k}-f_{i,j+1,k}f_{i,j-1,k}=0.$$
Physicists and researchers in the field of integrable systems
call this a discrete Hirota equation, 
and have developed a great deal of theory associated with it;
however, the observations I make here
seem to be currently unknown 
outside of a small circle of algebraic combinatorialists.)
If we let $f_{i,j,-1}=x_{i,j}$
and $f_{i,j,0}=y_{i,j}$
for formal indeterminates $x_{i,j},y_{i,j}$
(with $(i,j)$ ranging over $\Z^2$),
then the recurrence relation lets us express
all the $f_{i,j,k}$'s
in terms of the $x_{i,j}$'s and $y_{i,j}$'s,
at least formally.
A priori, one expects each $f_{i,j,k}$ to be
a rational function of the $x$ and $y$ variables;
the surprise (the first of several surprises, in fact)
is that these rational functions are actually Laurent polynomials
(that is, they are polynomials functions of
the $x$ and $y$ variables along with their reciprocals).

This observation seems to have first been made by Mills, Robbins and Rumsey,
who actually considered a more general recurrence
$$f_{i,j,k+1}=(f_{i+1,j,k}f_{i-1,j,k} + 
\lambda f_{i,j+1,k}f_{i,j-1,k})/f_{i,j,k-1}.$$
The case $\lambda=-1$ corresponds to the original Dodgson algorithm,
but Mills et al.\ noticed that the same surprising cancellation occurs
for more general values of $\lambda$,
including the especially nice case $\lambda=1$,
and that one always obtains Laurent polynomials.

It was from studying these Laurent polynomials
that Mills, Robbins and Rumsey were led 
to discover alternating-sign matrices.
Every term in one of these Laurent polynomials
has a coefficient equal to 1 (that is the second surprise),
and is a product of powers of a finite number
of $x$ and $y$ variables.
The third surprise is that all the exponents of the variables
are $+1$, $-1$, and $0$.
The fourth and final surprise is that
these patterns of exponents encode ASMs.
More specifically, the exponents of the $x$ variables
(after a global sign flip)
encode one ASM,
and the exponents of the $y$ variables
encode another.
These two ASMs satisfy a combinatorial relationship 
that the researchers dubbed ``compatibility''.
They showed that the number of compatible pairs of ASMs
is exactly $2^{n(n+1)/2}$.

As it happens, this formula is not hard to verify
as a consequence of the other claims I have made.
If indeed all the coefficients in the Laurent polynomial equal 1,
then one can count the terms
(and thereby count the compatible pairs of ASMs)
just by setting all the $x$ and $y$ variables equal to 1.
But in this case, $f_{i,j,k}$ depends only on $k$ (call it $F_k$),
and the three-dimensional recurrence boils down 
to the one-dimensional recurrence
$$F_{k+1}=(F_k F_k + F_k F_k)/F_{k-1}$$
with initial conditions $F_0=F_1=1$,
which is readily solved.

The terms of these Laurent polynomials 
were originally understood in terms of
compatible pairs of ASMs.
A few years after this work was done,
it turned out that compatible pairs of ASMs
admit a much more geometrical representation,
namely, as tilings of regions called Aztec diamonds
by means of tiles called dominos (1-by-2 and 2-by-1 rectangles).
See~\cite{EKLP} for more details.

I will close by pointing out that a kindred recurrence relation
cries out to be studied, namely
$$f_{i,j,k} =(f_{i-1,j,k}f_{i,j-1,k-1}+f_{i,j-1,k}f_{i-1,j,k-1}
+f_{i,j,k-1}f_{i-1,j-1,k})/f_{i-1,j-1,k-1},$$
with initial conditions
$$f_{i,j,k}=
\left\{ \begin{array}{ll}
x_{i,j,k} & \mbox{if $i+j+k=-1$}, \\
y_{i,j,k} & \mbox{if $i+j+k= 0$}, \\
z_{i,j,k} & \mbox{if $i+j+k=+1$}. 
\end{array}
\right.
$$
Here (just as in the Mills, Robbins, and Rumsey recurrence)
one finds empirically
that each value of $f_{i,j,k}$
is expressible as a Laurent polynomial
in the $x$, $y$, and $z$ variables
(in fact, shortly before this article went to press,
this Laurent property was proved by Fomin and Zelevinsky\cite{FZ});
here too one finds empirically
that each coefficient in these Laurent polynomials
is equal to 1;
and here too one finds that the exponents of the $x$, $y$ and $z$ variables
that occur in the Laurent monomials
are universally bounded
(in this case between $-1$ and $+4$
rather than between $-1$ and $+1$).
If all this is true,
then the exponent-patterns that arise
are some sort of analogue of
compatible pairs of ASMs,
and moreover, we know exactly how many there are:
$3^{\lfloor n^2/4 \rfloor}$.
(This comes from reducing the original three-dimensional recurrence
to a one-dimensional recurrence, as we did before.)
So, assuming that our empirical observations are not leading us astray,
there is some new kind of combinatorial gadget
that governs these Laurent polynomials
(or vice versa!),
and we know exactly how many gadgets of order $n$ there are. 
And it is easy to generate these Laurent polynomials 
(and with them the gadgets)
using {\sc Maple},
e.g.\ with the following short program:
\begin{verbatim}
f := proc (i,j,k)
        if   (i+j+k < 3) then x(i,j,k) else
        simplify(
        ( f(i-1,j,k)*f(i,j-1,k-1)+
          f(i,j-1,k)*f(i-1,j,k-1)+
          f(i,j,k-1)*f(i-1,j-1,k) )
        /f(i-1,j-1,k-1));
        fi; end;
\end{verbatim}
Nonetheless, we do not know what these gadgets are, combinatorially!
They are analogous to pairs of compatible ASMs,
which in turn are equivalent to domino tilings of Aztec diamonds,
so one hopes that the gadgets have some intuitive geometric meaning.
For more information about the properties of these gadgets,
see {\tt http://www.math.wisc.edu/$\sim$propp/cube-recur}.

More late-breaking news: Harvard undergraduates Gabriel Carroll
and David Speyer solved this problem in 2002, as participants
in the Research Experiences in Algebraic Combinatorics at
Harvard program.  More details will at some point become
available through links at the REACH web-site:
\begin{center}
{\tt http://www.math.harvard.edu/$\sim$propp/reach/}.
\end{center}

%\paragraph{Acknowledgements}

\begin{thebibliography}{99}
\bibitem{An1}
G.\ Andrews,
Andrews, George E.
Plane partitions III: The weak Macdonald conjecture,
\emph{Inventiones Math.} {\bf 53} (1979), 193--225.
\bibitem{An2}
G.\ Andrews, Plane partitions V: The T.S.S.C.P. conjecture.
\emph{J.\ Combin.\ Theory Ser.\ A} {\bf 66} (1994), 28--39.
\bibitem{BBNY}
M.T.\ Batchelor, H.W.J.\ Blote, B.\ Nienhuis, and C.M.\ Yung,
Critical behavior of the fully packed loop model on the square lattice,
\emph{J.\ Phys.\ A} {\bf 29} (1996), L399-L404.
\bibitem{BGN}
M.T.\ Batchelor, J.\ de Gier, and B.\ Nienhuis,
The quantum symmetric XXZ chain at Delta=--1/2, alternating sign
matrices and plane partitions;
arXiv:{\tt cond-mat/0101385}.
\bibitem{Ba}
R.J.\ Baxter, \emph{Exactly Solved Models in Statistical Mechanics.}
Academic Press, London, 1982.
\bibitem{Br}
D.M.\ Bressoud,
\emph{Proofs and Confirmations: The Story of the
Alternating Sign Matrix Conjecture.}
Cambridge University, Cambridge, 1999.
\bibitem{BP}
D.\ Bressoud and J.\ Propp,
How the alternating sign matrix conjecture was solved,
\emph{Notices of the AMS} {\bf 46} (1999), 637--646;
{\tt www.ams.org/notices/199906/fea-bressoud.pdf}.
\bibitem{CEP}
H.\ Cohn, N.\ Elkies, and J.\ Propp,
Local statistics for random domino tilings of the Aztec diamond 
Duke Mathematical Journal {\bf 85} (1996), 117--166;
arXiv:{\tt math.CO/0008243}. 
\bibitem{CG}
J.\ Conway and R.\ Guy,
\emph{The Book of Numbers.}
Copernicus, 1996.
\bibitem{E}
T.\ Eisenk\"olbl,
2-enumerations of halved alternating sign matrices;
arXiv:{\tt math.CO/0106038}.
\bibitem{EKLP}
N.\ Elkies, G.\ Kuperberg, M.\ Larsen, and J.\ Propp,
Alternating-sign matrices and domino tilings,
\emph{J.\ Algebraic Combin.} {\bf 1} (1992), 111--132;
{\tt www.math.wisc.edu/$\sim$propp/aztec.ps.gz}.
\bibitem{FZ}
S.\ Fomin and A.\ Zelevinsky,
The Laurent phenomenon; 
arXiv:{\tt math.CO/0104241}.
\bibitem{JPS}
W.\ Jockusch, J.\ Propp, and P.\ Shor,
Random domino tilings and the arctic circle theorem;
arXiv:{\tt math.CO/9801068}.
\bibitem{KBI}
V.E.\ Korepin, N.M.\ Bogoliubov, and A.G.\ Izergin,
\emph{Quantum Inverse Scattering Method and Correlation Functions.}
Cambridge University Press, New York, 1993.
\bibitem{Ku1}
G.\ Kuperberg,
Another proof of the alternating sign matrix conjecture,
{\it Inter.\ Math.\ Res.\ Notes\/} {\bf 1996} (1996), 139--150;
math.CO/9712207.
\bibitem{Ku2}
G.\ Kuperberg, Symmetry classes of alternating-sign matrices 
under one roof; arXiv:{\tt math.CO/0008184}.
\bibitem{La}
W.\ Lang, 
On generalizations of the Stirling number triangles,
\emph{J.\ Integer Sequences} {\bf 3} (2000), 00.2.4.
\bibitem{MRR}
W.H.\ Mills, D.P.\ Robbins, and H.\ Rumsey,
Alternating-sign matrices and descending plane partitions,
\emph{J.\ Combin.\ Theory Ser.\ A} {\bf 34} (1983), 340--359.
\bibitem{Pr}
J. Propp,
Generating random elements of a finite distributive lattice,
\emph{Electron.\ J.\ Combinat.} {\bf 4}:2 (1997), R15.
\bibitem{RS1}
A.V.\ Razumov and Yu.G.\ Stroganov,
Spin chains and combinatorics;
arXiv:{\tt cond-mat/0012141}.
\bibitem{RS2}
A.V.\ Razumov and Yu.G.\ Stroganov,
Combinatorial nature of ground state vector of $O(1)$ loop model;
arXiv:{\tt math.CO/0104216}.
\bibitem{Ro1}
D.P.\ Robbins, 
The story of 1,2,7,42,429,7436,\dots,
\emph{Math.\ Intelligencer} {\bf 13} no.\ 2 (1991), 12--19.
\bibitem{Ro2}
D.P.\ Robbins, 
Symmetry classes of alternating sign matrices;
arXiv:{\tt math.CO/0008045}.
\bibitem{RR}
D.P.\ Robbins and H.\ Rumsey,
Determinants and alternating-sign matrices,
\emph{Advances in Math.} {\bf 62} (1986), 169--184.
\bibitem{So}
M.\ Somos,
{\tt grail.cba.csuohio.edu/$\sim$somos/nwic.html}.
\bibitem{St}
R.\ Stanley, 
Enumerative Combinatorics, vol. 1, 
Wadsworth and Brooks/Cole, Pacific Grove, CA, 1986, xi + 306 pages; 
second printing, Cambridge University Press, Cambridge, 1996. 
\bibitem{T}
O.\ Tsuchiya,
Determinant formula for the six-vertex model with reflecting end;
arXiv:{\tt solv-int/9804010}.
\bibitem{W}
B.\ Wieland,
A large dihedral symmetry of the set of alternating sign matrices;
{\tt www.combinatorics.org/Volume$\_$7/Abstracts/v7i1r37.html},
arXiv:{\tt math.CO/0006234}.
%LOOKS BAD; FIX IN PRESS
\bibitem{X}
G.\ Xin,
private communication.
\bibitem{Y}
B.-Y.\ Yang,
Three enumeration problems concerning Aztec diamonds, 
Ph.D.\ thesis, Department of Mathematics, 
Massachusetts Institute of Technology, Cambridge, Massachusetts, 1991.
\bibitem{Z}
D.\ Zeilberger,
Proof of the alternating sign matrix conjecture,
{\it Electronic J.\ Comb.\/} {\bf 3} (1996), R13;
arXiv:{\tt math.CO/9407211}.
\end{thebibliography}
\end{document}

epsf.tex
%   EPSF.TEX macro file:
%   Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989.
%   Revised by Don Knuth, 3 Jan 1990.
%   Revised by Tomas Rokicki to accept bounding boxes with no
%      space after the colon, 18 Jul 1990.
%
%   TeX macros to include an Encapsulated PostScript graphic.
%   Works by finding the bounding box comment,
%   calculating the correct scale values, and inserting a vbox
%   of the appropriate size at the current position in the TeX document.
%
%   To use with the center environment of LaTeX, preface the \epsffile
%   call with a \leavevmode.  (LaTeX should probably supply this itself
%   for the center environment.)
%
%   To use, simply say
%   \input epsf           % somewhere early on in your TeX file
%   \epsfbox{filename.ps} % where you want to insert a vbox for a figure
%
%   Alternatively, you can type
%
%   \epsfbox[0 0 30 50]{filename.ps} % to supply your own BB
%
%   which will not read in the file, and will instead use the bounding
%   box you specify.
%
%   The effect will be to typeset the figure as a TeX box, at the
%   point of your \epsfbox command. By default, the graphic will have its
%   `natural' width (namely the width of its bounding box, as described
%   in filename.ps). The TeX box will have depth zero.
%
%   You can enlarge or reduce the figure by saying
%     \epsfxsize=<dimen> \epsfbox{filename.ps}
%   (or
%     \epsfysize=<dimen> \epsfbox{filename.ps})
%   instead. Then the width of the TeX box will be \epsfxsize and its
%   height will be scaled proportionately (or the height will be
%   \epsfysize and its width will be scaled proportiontally).  The
%   width (and height) is restored to zero after each use.
%
%   A more general facility for sizing is available by defining the
%   \epsfsize macro.    Normally you can redefine this macro
%   to do almost anything.  The first parameter is the natural x size of
%   the PostScript graphic, the second parameter is the natural y size
%   of the PostScript graphic.  It must return the xsize to use, or 0 if
%   natural scaling is to be used.  Common uses include:
%
%      \epsfxsize  % just leave the old value alone
%      0pt         % use the natural sizes
%      #1          % use the natural sizes
%      \hsize      % scale to full width
%      0.5#1       % scale to 50% of natural size
%      \ifnum#1>\hsize\hsize\else#1\fi  % smaller of natural, hsize
%
%   If you want TeX to report the size of the figure (as a message
%   on your terminal when it processes each figure), say `\epsfverbosetrue'.
%
\newread\epsffilein    % file to \read
\newif\ifepsffileok    % continue looking for the bounding box?
\newif\ifepsfbbfound   % success?
\newif\ifepsfverbose   % report what you're making?
\newdimen\epsfxsize    % horizontal size after scaling
\newdimen\epsfysize    % vertical size after scaling
\newdimen\epsftsize    % horizontal size before scaling
\newdimen\epsfrsize    % vertical size before scaling
\newdimen\epsftmp      % register for arithmetic manipulation
\newdimen\pspoints     % conversion factor
%
\pspoints=1bp          % Adobe points are `big'
\epsfxsize=0pt         % Default value, means `use natural size'
\epsfysize=0pt         % ditto
%
\def\epsfbox#1{\global\def\epsfllx{72}\global\def\epsflly{72}%
   \global\def\epsfurx{540}\global\def\epsfury{720}%
   \def\lbracket{[}\def\testit{#1}\ifx\testit\lbracket
   \let\next=\epsfgetlitbb\else\let\next=\epsfnormal\fi\next{#1}}%
%
\def\epsfgetlitbb#1#2 #3 #4 #5]#6{\epsfgrab #2 #3 #4 #5 .\\%
   \epsfsetgraph{#6}}%
%
\def\epsfnormal#1{\epsfgetbb{#1}\epsfsetgraph{#1}}%
%
\def\epsfgetbb#1{%
%
%   The first thing we need to do is to open the
%   PostScript file, if possible.
%
\openin\epsffilein=#1
\ifeof\epsffilein\errmessage{I couldn't open #1, will ignore it}\else
%
%   Okay, we got it. Now we'll scan lines until we find one that doesn't
%   start with %. We're looking for the bounding box comment.
%
   {\epsffileoktrue \chardef\other=12
    \def\do##1{\catcode`##1=\other}\dospecials \catcode`\ =10
    \loop
       \read\epsffilein to \epsffileline
       \ifeof\epsffilein\epsffileokfalse\else
%
%   We check to see if the first character is a % sign;
%   if not, we stop reading (unless the line was entirely blank);
%   if so, we look further and stop only if the line begins with
%   `%%BoundingBox:'.
%
          \expandafter\epsfaux\epsffileline:. \\%
       \fi
   \ifepsffileok\repeat
   \ifepsfbbfound\else
    \ifepsfverbose\message{No bounding box comment in #1; using defaults}\fi\fi
   }\closein\epsffilein\fi}%
%
%   Now we have to calculate the scale and offset values to use.
%   First we compute the natural sizes.
%
\def\epsfsetgraph#1{%
   \epsfrsize=\epsfury\pspoints
   \advance\epsfrsize by-\epsflly\pspoints
   \epsftsize=\epsfurx\pspoints
   \advance\epsftsize by-\epsfllx\pspoints
%
%   If `epsfxsize' is 0, we default to the natural size of the picture.
%   Otherwise we scale the graph to be \epsfxsize wide.
%
   \epsfxsize\epsfsize\epsftsize\epsfrsize
   \ifnum\epsfxsize=0 \ifnum\epsfysize=0
      \epsfxsize=\epsftsize \epsfysize=\epsfrsize
%
%   We have a sticky problem here:  TeX doesn't do floating point arithmetic!
%   Our goal is to compute y = rx/t. The following loop does this reasonably
%   fast, with an error of at most about 16 sp (about 1/4000 pt).
% 
     \else\epsftmp=\epsftsize \divide\epsftmp\epsfrsize
       \epsfxsize=\epsfysize \multiply\epsfxsize\epsftmp
       \multiply\epsftmp\epsfrsize \advance\epsftsize-\epsftmp
       \epsftmp=\epsfysize
       \loop \advance\epsftsize\epsftsize \divide\epsftmp 2
       \ifnum\epsftmp>0
          \ifnum\epsftsize<\epsfrsize\else
             \advance\epsftsize-\epsfrsize \advance\epsfxsize\epsftmp \fi
       \repeat
     \fi
   \else\epsftmp=\epsfrsize \divide\epsftmp\epsftsize
     \epsfysize=\epsfxsize \multiply\epsfysize\epsftmp   
     \multiply\epsftmp\epsftsize \advance\epsfrsize-\epsftmp
     \epsftmp=\epsfxsize
     \loop \advance\epsfrsize\epsfrsize \divide\epsftmp 2
     \ifnum\epsftmp>0
        \ifnum\epsfrsize<\epsftsize\else
           \advance\epsfrsize-\epsftsize \advance\epsfysize\epsftmp \fi
     \repeat     
   \fi
%
%  Finally, we make the vbox and stick in a \special that dvips can parse.
%
   \ifepsfverbose\message{#1: width=\the\epsfxsize, height=\the\epsfysize}\fi
   \epsftmp=10\epsfxsize \divide\epsftmp\pspoints
   \vbox to\epsfysize{\vfil\hbox to\epsfxsize{%
      \special{PSfile=#1 llx=\epsfllx\space lly=\epsflly\space
          urx=\epsfurx\space ury=\epsfury\space rwi=\number\epsftmp}%
      \hfil}}%
\epsfxsize=0pt\epsfysize=0pt}%

%
%   We still need to define the tricky \epsfaux macro. This requires
%   a couple of magic constants for comparison purposes.
%
{\catcode`\%=12 \global\let\epsfpercent=%\global\def\epsfbblit{%BoundingBox}}%
%
%   So we're ready to check for `%BoundingBox:' and to grab the
%   values if they are found.
%
\long\def\epsfaux#1#2:#3\\{\ifx#1\epsfpercent
   \def\testit{#2}\ifx\testit\epsfbblit
      \epsfgrab #3 . . . \\%
      \epsffileokfalse
      \global\epsfbbfoundtrue
   \fi\else\ifx#1\par\else\epsffileokfalse\fi\fi}%
%
%   Here we grab the values and stuff them in the appropriate definitions.
%
\def\epsfgrab #1 #2 #3 #4 #5\\{%
   \global\def\epsfllx{#1}\ifx\epsfllx\empty
      \epsfgrab #2 #3 #4 #5 .\\\else
   \global\def\epsflly{#2}%
   \global\def\epsfurx{#3}\global\def\epsfury{#4}\fi}%
%
%   We default the epsfsize macro.
%
\def\epsfsize#1#2{\epsfxsize}
%
%   Finally, another definition for compatibility with older macros.
%
\let\epsffile=\epsfbox

pstricks.tex
%% BEGIN: pstricks.tex
%%
%% PostScript macros for Generic TeX: main input file for PSTricks 97.
%% See the PSTricks User's Guide for description.
%% This uses the header file `pstricks.pro'.
%%
\def\fileversion{97 patch 10}
\def\filedate{1999/03/24}
%%
%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN
%% archives in directory macros/latex/base/lppl.txt.
%%
\csname PSTricksLoaded\endcsname
\let\PSTricksLoaded\endinput
\edef\PstAtCode{\the\catcode`\@}
\catcode`\@=11\relax
\expandafter\ifx\csname @latexerr\endcsname\relax
\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
#1\endcsname\relax#2\else#3\fi}
\def\@namedef#1{\expandafter\def\csname #1\endcsname}
\def\@nameuse#1{\csname #1\endcsname}
\def\@eha{%
Your command was ignored.^^J
Type \space I <command> <return> \space to replace
it with another command,^^J
or \space <return> \space to continue without it.}
\def\@spaces{\space\space\space\space}
\def\typeout#1{\immediate\write\@unused{#1}}
\alloc@7\write\chardef\sixt@@n\@unused
\def\@empty{}
\def\@gobble#1{}
\def\@nnil{\@nil}
\def\@ifnextchar#1#2#3{%
\let\@tempe#1\def\@tempa{#2}\def\@tempb{#3}\futurelet\@tempc\@ifnch}
\def\@ifnch{%
\ifx\@tempc\@sptoken
\let\@tempd\@xifnch
\else
\ifx\@tempc\@tempe \let\@tempd\@tempa \else \let\@tempd\@tempb \fi
\fi
\@tempd}
\begingroup
\def\:{\global\let\@sptoken= } \:
\def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@tempc\@ifnch}
\endgroup
\fi
\typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz)}
\def\@pstrickserr#1#2{%
\begingroup
\newlinechar`\^^J
\edef\pst@tempc{#2}%
\expandafter\errhelp\expandafter{\pst@tempc}%
\typeout{%
PSTricks error. \space See User's Guide for further information.^^J
\@spaces\@spaces\@spaces\@spaces
Type \space H <return> \space for immediate help.}%
\errmessage{#1}%
\endgroup}
\def\@ehpa{%
Your command was ignored. Default value substituted.^^J
Type \space <return> \space to procede.}
\def\@ehpb{%
Your command was ignored. Will recover best I can.^^J
Type \space <return> \space to procede.}
\def\@ehpc{%
You better fix this before proceding.^^J
See the PSTricks User's Guide or ask your system administrator for help.^^J
Type \space X <return> \space to quit.}
\def\pst@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb}
\newdimen\pst@dima
\newdimen\pst@dimb
\newdimen\pst@dimc
\newdimen\pst@dimd
\newdimen\pst@dimg
\newdimen\pst@dimh
\newbox\pst@hbox
\newbox\pst@boxg
\newcount\pst@cnta
\newcount\pst@cntb
\newcount\pst@cntc
\newcount\pst@cntd
\newcount\pst@cntg
\newcount\pst@cnth
\newif\if@pst
\newtoks\pst@toks
\newif\if@star
\def\pst@ifstar#1{%
\@ifnextchar*{\@startrue\def\next*{#1}\next}{\@starfalse#1}}
\def\pst@expandafter#1#2{%
\def\next{#1}%
\edef\@tempa{#2}%
\ifx\@tempa\@empty
\@pstrickserr{Unexpected empty argument!}\@ehpb
\def\@tempa{\@empty}%
\fi
\expandafter\next\@tempa}
\def\pst@dimtonum#1#2{\edef#2{\pst@@dimtonum#1}}
\def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1}
{\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}}
\def\pst@pyth#1#2#3{%
\ifdim#1>#2\pst@@pyth#1#2#3\else\pst@@pyth#2#1#3\fi}
\def\pst@@pyth#1#2#3{%
\ifdim4#1>9#2%
#3=#1\advance#3 .2122#2%
\else
#3=.8384#1\advance#3 .5758#2%
\fi}
\def\pst@divide#1#2#3{%
\pst@@divide{#1}{#2}%
\pst@dimtonum\pst@dimg{#3}}
\def\pst@@divide#1#2{%
\pst@dimg=#1\relax
\pst@dimh=#2\relax
\pst@cntg=\pst@dimh
\pst@cnth=67108863
\pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide
\divide\pst@dimg\pst@cntg}
\def\pst@@@divide{%
\ifnum
\ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth
\multiply\pst@dimg\sixt@@n
\else
\divide\pst@cntg\sixt@@n
\fi}
\def\pst@configerr#1{%
\@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc}
% % \begin{macrocode}
\def\pstVerb#1{\pst@configerr\pstVerb}
\def\pstverb#1{\pst@configerr\pstverb}
\def\pstverbscale{\pst@configerr\pstverbscale}
\def\pstrotate{\pst@configerr\pstrotate}
\def\pstheader#1{\pst@configerr\pstheader}
\def\pstdriver{\pst@configerr\pstdriver}
\@ifundefined{pstcustomize}%
{\def\pstcustomize{\endinput\let\pstcustomize\relax}}{}
\input pstricks.con
\newif\ifPSTricks
\PSTrickstrue
\def\PSTricksOff{%
\def\pstheader##1{}%
\def\pstverb##1{}%
\def\pstVerb##1{}%
\PSTricksfalse}
\@ifundefined{pst@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{}
\@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{}
\pstheader{pstricks.pro}
\def\pst@dict{tx@Dict begin }
\def\pst@theheaders{pstricks.pro}
\def\pst@Verb#1{\pstVerb{\pst@dict #1 end}}
\def\tx@Atan{Atan }
\def\tx@Div{Div }
\def\tx@NET{NET }
\def\tx@Pyth{Pyth }
\def\tx@PtoC{PtoC }
\def\tx@PathLength@{PathLength@ }
\def\tx@PathLength{PathLength }
\pst@dimg=\pstunit\relax
\ifdim\pst@dimg=1bp
\def\pst@stp{.996264 dup scale}
\else
\edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale}
\fi
\def\tx@STP{STP }
\def\tx@STV{STV }
\def\pst@number#1{\pst@@dimtonum#1\space}
\def\pst@checknum#1#2{%
\edef\next{#1}%
\ifx\next\@empty
\let\pst@num\z@
\else
\expandafter\pst@@checknum\next..\@nil
\fi
\ifnum\pst@num=\z@
\@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa
\def#2{0 }%
\else
\edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.%
\expandafter\@gobble\the\pst@cnth\space}%
\fi}
\def\pst@@checknum{%
\@ifnextchar-%
{\let\pst@num\tw@\expandafter\pst@@@checknum\@gobble}%
{\let\pst@num\@ne\pst@@@checknum}}
\def\pst@@@checknum#1.#2.#3\@nil{%
\afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil
\afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil}
\def\pst@@@@checknum#1\relax\@nil{%
\ifx\@nil#1\@nil\else\let\pst@num\z@\fi}
\def\pst@getnumii#1 #2 #3\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph}
\def\pst@getnumiii#1 #2 #3 #4\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph
\pst@checknum{#3}\pst@tempi}
\def\pst@getnumiv#1 #2 #3 #4 #5\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph
\pst@checknum{#3}\pst@tempi
\pst@checknum{#4}\pst@tempj}
\def\pst@getdimnum#1 #2 #3\@nil{%
\pssetlength\pst@dimg{#1}%
\pst@checknum{#2}\pst@tempg}
% DG/SR modification begin - Jan. 7, 1998 - Patch 9
% Missing from pstricks.bug 0.93
%\def\pst@getscale#1#2{%
%\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil
%\@psttrue
%\ifdim\pst@tempg\p@=\z@
%\@pstrickserr{Bad scaling argument `#1'}\@ehpa
%\def\pst@tempg{1 }%
%\@pstfalse
%\fi
%\ifdim\pst@temph\p@=\z@
%\if@pst\@pstrickserr{Bad scaling argument `#1'}\@ehpa\fi
%\def\pst@temph{1 }%
%\fi
%\edef#2{\pst@tempg\space \pst@temph\space scale }%
%\ifdim\pst@tempg\p@=\p@ \ifdim\pst@temph\p@=\p@
%\def#2{}%
%\fi\fi}
\def\pst@getscale#1#2{%
\edef\pst@tempg{#1}%
\ifx\pst@tempg\@none
\def#2{}%
\else
\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil
\ifdim\pst@tempg\p@=\z@
\@pstrickserr{Bad scaling argument `#1'}\@ehpa
\def#2{}%
\else
\ifdim\pst@temph\p@=\z@
\@pstrickserr{Bad scaling argument `#1'}\@ehpa
\def#2{}%
\else
\edef#2{\pst@tempg\space \pst@temph\space scale }%
\fi
\fi
\fi}
% DG/SR modification end
\def\pst@getint#1#2{%
\pst@cntg=#1\relax
\edef#2{\the\pst@cntg\space}}
\begingroup
\catcode`\{=12
\catcode`\}=12
\catcode`\[=1
\catcode`\]=2
\gdef\pslbrace[{ ]
\gdef\psrbrace[} ]
\endgroup
\def\@newcolor#1#2{%
\expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}%
\expandafter\edef\csname color@#1\endcsname{#2}%
\ignorespaces}
\def\pst@color#1{%
\def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor}
\def\pst@endcolor{\pstVerb{\pst@currentcolor}}
\def\pst@currentcolor{0 setgray}
\def\altcolormode{%
\def\pst@color##1{%
\pstVerb{gsave ##1}\aftergroup\pst@endcolor}%
\def\pst@endcolor{\pstVerb{\pst@grestore}}}
\def\pst@grestore{%
currentpoint
matrix currentmatrix
currentfont
grestore
setfont
setmatrix
moveto}
\def\pst@usecolor#1{\csname color@#1\endcsname\space}
\def\newgray#1#2{%
\pst@checknum{#2}\pst@tempg
\@newcolor{#1}{\pst@tempg setgray}}
\def\newrgbcolor#1#2{%
\pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}}
\def\newhsbcolor#1#2{%
\pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}}
\def\newcmykcolor#1#2{%
\pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil
\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}}
\newgray{black}{0}
\newgray{darkgray}{.25}
\newgray{gray}{.5}
\newgray{lightgray}{.75}
\newgray{white}{1}
\newrgbcolor{red}{1 0 0}
\newrgbcolor{green}{0 1 0}
\newrgbcolor{blue}{0 0 1}
\newrgbcolor{yellow}{1 1 0}
\newrgbcolor{cyan}{0 1 1}
\newrgbcolor{magenta}{1 0 1}
\def\psset#1{\@psset#1,\@nil\ignorespaces}
\def\@psset#1,{%
\@@psset#1==\@nil
\@ifnextchar\@nil{\@gobble}{\@psset}}
\def\@@psset#1=#2=#3\@nil{%
\@ifundefined{psset@#1}%
{\@pstrickserr{Graphics parameter `#1' not defined.}\@ehpa}%
{\@nameuse{psset@#1}{#2}}}%
\def\psset@style#1{%
\@ifundefined{pscs@#1}%
{\@pstrickserr{Custom style `#1' undefined}\@ehpa}%
{\@nameuse{pscs@#1}}}
\def\newpsstyle#1#2{\@namedef{pscs@#1}{\psset{#2}}}
\def\@none{none}
\def\pst@getcolor#1#2{%
\@ifundefined{color@#1}%
{\@pstrickserr{Color `#1' not defined}\@eha}%
{\edef#2{#1}}}
\newdimen\psunit \psunit 1cm
\newdimen\psxunit \psxunit 1cm
\newdimen\psyunit \psyunit 1cm
\let\psrunit\psunit
\def\pstunit@off{\let\@psunit\ignorespaces\ignorespaces}
\def\pssetlength#1#2{%
\let\@psunit\psunit
\afterassignment\pstunit@off
#1 #2\@psunit}
\def\psaddtolength#1#2{%
\let\@psunit\psunit
\afterassignment\pstunit@off
\advance#1 #2\@psunit}
\def\pssetxlength#1#2{%
\let\@psunit\psxunit
\afterassignment\pstunit@off
#1 #2\@psunit}
\def\pssetylength#1#2{%
\let\@psunit\psyunit
\afterassignment\pstunit@off
#1 #2\@psunit}
\def\psset@unit#1{%
\pssetlength\psunit{#1}%
\psxunit=\psunit
\psyunit=\psunit}
\def\psset@runit#1{\pssetlength\psrunit{#1}}
\def\psset@xunit#1{\pssetxlength\psxunit{#1}}
\def\psset@yunit#1{\pssetylength\psyunit{#1}}
\def\pst@getlength#1#2{%
\pssetlength\pst@dimg{#1}%
\edef#2{\pst@number\pst@dimg}}
\def\pst@@getlength#1#2{%
\pssetlength\pst@dimg{#1}%
\edef#2{\number\pst@dimg sp}}
\def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor}
\def\pst@coor{0 0 }
\def\pst@getcoors#1#2{%
\def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}%
\def\pst@coors{}%
\pst@@getcoors}
\def\pst@@getcoors(#1){%
\pst@@getcoor{#1}%
\edef\pst@coors{\pst@coor\pst@coors}%
\@ifnextchar({\pst@@getcoors}{\pst@aftercoors}}
\def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle}
\def\pst@angle{0 }
\def\cartesian@coor#1,#2,#3\@nil{%
\pssetxlength\pst@dimg{#1}%
\pssetylength\pst@dimh{#2}%
\edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}
\def\NormalCoor{%
\def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}%
\def\pst@@getangle##1{%
\pst@checknum{##1}\pst@angle
\edef\pst@angle{\pst@angle \pst@angleunit}}%
\def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}}
\NormalCoor
\def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}}
\def\@degrees[#1]{%
\pst@checknum{#1}\pst@tempg
\edef\pst@angleunit{360 \pst@tempg div mul }%
\ignorespaces}
\def\radians{\def\pst@angleunit{57.2956 mul }}
\def\pst@angleunit{}
\def\SpecialCoor{%
\def\pst@@getcoor##1{%
\begingroup
\pst@activecoor
\xdef\pst@tempg{##1}%
\endgroup
\expandafter\special@coor\pst@tempg||\@nil}%
\def\pst@@getangle##1{%
\begingroup
\pst@activecoor
\xdef\pst@tempg{##1}%
\endgroup
\expandafter\special@angle\pst@tempg\@empty)\@nil}%
\def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}}
\begingroup
\catcode`\|=13
\catcode`\;=13
\catcode`\!=13
\gdef\pst@activecoor{%
\def|{\string|}%
\def;{\string;}%
\def!{\string!}}
\endgroup
\def\special@coor#1|#2|#3\@nil{%
\ifx#3|\relax
\mixed@coor{#1}{#2}%
\else
\special@@coor#1;;\@nil
\fi}
\def\special@@coor#1{%
\ifcat#1a\relax
\def\next{\node@coor#1}%
\else
\ifx#1[\relax
\def\next{\Node@coor[}%
\else
\ifx#1!\relax
\def\next{\raw@coor}%
\else
\def\next{\special@@@coor#1}%
\fi
\fi
\fi
\next}
\def\special@@@coor#1;#2;#3\@nil{%
\ifx#3;\relax
\polar@coor{#1}{#2}%
\else
\cartesian@coor#1,\relax,\@nil
\fi}
\def\mixed@coor#1#2{%
\begingroup
% DG/SR modification begin - Oct. 27, 1997 - Patch 6
%\specialcoor@ii#1;;\@nil
%\let\pst@tempa\pst@coor
%\specialcoor@ii#2;;\@nil
\special@@coor#1;;\@nil
\let\pst@tempa\pst@coor
\special@@coor#2;;\@nil
% DG/SR modification end
\xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }%
\endgroup
\let\pst@coor\pst@tempg}
\def\polar@coor#1#2{%
\pssetlength\pst@dimg{#1}%
\pst@@getangle{#2}%
\edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}}
\def\raw@coor#1;#2\@nil{%
\edef\pst@coor{%
#1 \pst@number\psyunit mul exch \pst@number\psxunit mul exch }}
\def\node@coor#1\@nil{%
\@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps
\def\pst@coor{0 0 }}
\def\Node@coor{\node@coor}
\def\special@angle#1#2)#3\@nil{%
\ifx!#1\relax
\edef\pst@angle{#2 \pst@angleunit}%
\else
\ifx(#1\relax
\pst@@getcoor{#2}%
\edef\pst@angle{\pst@coor exch \tx@Atan}%
\else
\pst@checknum{#1#2}\pst@angle
\edef\pst@angle{\pst@angle \pst@angleunit}%
\fi
\fi}
\def\Cartesian{%
\def\cartesian@coor##1,##2,##3\@nil{%
\pssetxlength\pst@dimg{##1}%
\pssetylength\pst@dimh{##2}%
\edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}%
\@ifnextchar({\Cartesian@}{}}
\def\Cartesian@(#1,#2){%
\pssetxlength\psxunit{#1}%
\pssetylength\psyunit{#2}%
\ignorespaces}
\def\Polar{%
\def\psput@cartesian{\psput@special}%
\def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}}%
\def\psset@origin#1{%
\pst@@getcoor{#1}%
\edef\psk@origin{\pst@coor \tx@NET }}
\def\psk@origin{}
\newif\ifswapaxes
\def\psset@swapaxes#1{%
\@nameuse{@pst#1}%
\if@pst
\def\psk@swapaxes{-90 rotate -1 1 scale }%
\else
\def\psk@swapaxes{}%
\fi}
\psset@swapaxes{false}
\newif\ifshowpoints
\def\psset@showpoints#1{\@nameuse{showpoints#1}}
\psset@showpoints{false}
\let\pst@setrepeatarrowsflag\relax
\def\psset@border#1{%
\pst@getlength{#1}\psk@border
\pst@setrepeatarrowsflag}
\psset@border{0pt}
\def\psset@bordercolor#1{\pst@getcolor{#1}\psbordercolor}
\psset@bordercolor{white}
\newif\ifpsdoubleline
\def\psset@doubleline#1{%
\@nameuse{psdoubleline#1}%
\pst@setrepeatarrowsflag}
\psset@doubleline{false}
\def\psset@doublesep#1{\def\psdoublesep{#1}}
\psset@doublesep{1.25\pslinewidth}
\def\psset@doublecolor#1{\pst@getcolor{#1}\psdoublecolor}
\psset@doublecolor{white}
\newif\ifpsshadow
\def\psset@shadow#1{%
\@nameuse{psshadow#1}%
\pst@setrepeatarrowsflag}
\psset@shadow{false}
\def\psset@shadowsize#1{\pst@getlength{#1}\psk@shadowsize}
\psset@shadowsize{3pt}
\def\psset@shadowangle#1{\pst@getangle{#1}\psk@shadowangle}
\psset@shadowangle{-45}
\def\psset@shadowcolor#1{\pst@getcolor{#1}\psshadowcolor}
\psset@shadowcolor{darkgray}
\def\pst@repeatarrowsflag{\z@}
\def\pst@setrepeatarrowsflag{%
\edef\pst@repeatarrowsflag{%
\ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else
\ifpsshadow 1\else \z@\fi\fi\fi}}
\def\psls@none{}
\newdimen\pslinewidth
\def\psset@linewidth#1{\pssetlength\pslinewidth{#1}}
\psset@linewidth{.8pt}
\def\psset@linecolor#1{\pst@getcolor{#1}\pslinecolor}
\psset@linecolor{black}
\def\psls@solid{0 setlinecap stroke }
\def\pst@missing{%
\z@
\@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa}
\def\psset@dash#1{%
\pst@expandafter\psset@@dash{#1} {\pst@missing} {\pst@missing} {}\@nil
\edef\psk@dash{\pst@number\pst@dimg \pst@number\pst@dimh}}
\def\psset@@dash#1 #2 #3\@nil{%
\pssetlength\pst@dimg{#1}%
\pssetlength\pst@dimh{#2}}
\psset@dash{5pt 3pt}
\newif\ifpsdashadjust
\def\psset@dashadjust#1{\@nameuse{psdashadjust#1}}
\psset@dashadjust{true}
\def\psls@dashed{%
\ifpsdashadjust
\psk@dash \pst@linetype\space \tx@DashLine
\else
[ \psk@dash ] 0 setdash stroke
\fi}
\def\tx@DashLine{DashLine }
\def\psset@dotsep#1{\pst@getlength{#1}\psk@dotsep}
\psset@dotsep{3pt}
\def\psls@dotted{%
\ifpsdashadjust
\psk@dotsep \pst@linetype\space \tx@DotLine
\else
[ 0 \psk@dotsep CLW add ] 0 setdash 1 setlinecap stroke
\fi}
\def\tx@DotLine{DotLine }
\def\psset@linestyle#1{%
\@ifundefined{psls@#1}%
{\@pstrickserr{Line style `#1' not defined}\@eha}%
{\edef\pslinestyle{#1}}}
\psset@linestyle{solid}
\def\psfs@none{}
\def\psset@fillcolor#1{\pst@getcolor{#1}\psfillcolor}
\psset@fillcolor{white}
\def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor fill}}
\def\psset@hatchwidth#1{\pst@getlength{#1}\psk@hatchwidth}
\psset@hatchwidth{.8pt}
\def\psset@hatchsep#1{\pst@getlength{#1}\psk@hatchsep}
\psset@hatchsep{4pt}
\def\psset@hatchcolor#1{\pst@getcolor{#1}\pshatchcolor}
\psset@hatchcolor{black}
\def\psset@hatchangle#1{\pst@getangle{#1}\psk@hatchangle}
\psset@hatchangle{45}
\def\pst@linefill{%
\psk@hatchangle rotate
\psk@hatchwidth SLW
\pst@usecolor\pshatchcolor
\psk@hatchsep \tx@LineFill}
\def\psfs@vlines{\pst@fill\pst@linefill}
\@namedef{psfs@vlines*}{\psfs@solid \psfs@vlines}
\def\psfs@hlines{\pst@fill{90 rotate \pst@linefill}}
\@namedef{psfs@hlines*}{\psfs@solid \psfs@hlines}
\def\psfs@crosshatch{\psfs@vlines \psfs@hlines}
\@namedef{psfs@crosshatch*}{\psfs@solid \psfs@vlines \psfs@hlines}
\def\tx@LineFill{LineFill }
\def\psset@fillstyle#1{%
\edef\pst@tempg{#1}\def\pst@temph{none}%
\ifx\pst@tempg\pst@temph
\let\psk@fillstyle\relax
\else
\@ifundefined{psfs@#1}%
{\@pstrickserr{Undefined fill style: `#1'}\@eha}%
{\edef\psk@fillstyle{\expandafter\noexpand\csname psfs@#1\endcsname}}%
\fi}
\def\psset@addfillstyle#1{%
\@ifundefined{psfs@#1}%
{\@pstrickserr{Undefined fill style: `#1'}\@eha}%
{\edef\psk@fillstyle{%
\expandafter\noexpand\psk@fillstyle
\expandafter\noexpand\csname psfs@#1\endcsname}}}
\psset@fillstyle{none}
\def\psset@arrows#1{%
\begingroup
\pst@activearrows
\xdef\pst@tempg{#1}%
\endgroup
\expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil
\if@pst\else
\@pstrickserr{Bad arrows specification: #1}\@ehpa
\fi}
\def\psset@@arrows#1-#2\@empty#3\@nil{%
\@psttrue
\def\next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}%
\expandafter\next\pst@arrowtable,#1-#1,\@nil
\@ifundefined{psas@\pst@tempg}%
{\@pstfalse\def\psk@arrowA{}}%
{\let\psk@arrowA\pst@tempg}%
\@ifundefined{psas@#2}%
{\@pstfalse\def\psk@arrowB{}}%
{\def\psk@arrowB{#2}}}
\def\psk@arrowA{}
\def\psk@arrowB{}
\def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-]}
\begingroup
\catcode`\<=13
\catcode`\>=13
\catcode`\|=13
\gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}}
\endgroup
\def\tx@BeginArrow{BeginArrow }
\def\tx@EndArrow{EndArrow }
\def\psset@arrowscale#1{\pst@getscale{#1}\psk@arrowscale}
\psset@arrowscale{1}
\def\psset@arrowsize#1{%
\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
\edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}}
\psset@arrowsize{1.5pt 2}
\def\psset@arrowlength#1{\pst@checknum{#1}\psk@arrowlength}
\psset@arrowlength{1.4}
\def\psset@arrowinset#1{\pst@checknum{#1}\psk@arrowinset}%
\psset@arrowinset{.4}
\def\tx@Arrow{Arrow }
\@namedef{psas@>}{%
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\@namedef{psas@>>}{%
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
0 h T
gsave
newpath
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
CP
grestore
CP newpath moveto
2 copy
L
stroke
moveto}
\@namedef{psas@<}{%
true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\@namedef{psas@<<}{%
true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
CP newpath moveto 0 a neg L stroke 0 h neg T
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\def\psset@tbarsize#1{%
\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
\edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}}
\psset@tbarsize{2pt 5}
\def\tx@Tbar{Tbar }
\@namedef{psas@|}{\psk@tbarsize \tx@Tbar}
\@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar}
\@namedef{psas@>|}{%
\psk@tbarsize \tx@Tbar
0 CLW 2 div T
newpath
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\@namedef{psas@>|*}{%
0 CLW -2 div T
\psk@tbarsize \tx@Tbar
0 CLW 2 div T
newpath
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\edef\pst@arrowtable{\pst@arrowtable,|<*->|*,|<->|}
\def\psset@bracketlength#1{\pst@checknum{#1}\psk@bracketlength}
\psset@bracketlength{.15}
\def\tx@Bracket{Bracket }
\@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket}
\def\psset@rbracketlength#1{\pst@checknum{#1}\psk@rbracketlength}
\psset@rbracketlength{.15}
\def\tx@RoundBracket{RoundBracket }
\@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket}
\def\psas@c{1 \psas@@c}
\def\psas@cc{0 CLW 2 div T 1 \psas@@c}
\def\psas@C{2 \psas@@c}
\def\psas@@c{%
setlinecap
0 0 moveto
0 CLW 2 div L
stroke
0 0 moveto}
\def\psas@{}
\psset@arrows{-}
\def\tx@SD{SD }
\def\tx@EndDot{EndDot }
\def\psas@oo{{\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot}
\def\psas@o{{\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot}
\@namedef{psas@**}{{false} true \psk@dotsize \tx@EndDot}
\@namedef{psas@*}{{false} false \psk@dotsize \tx@EndDot}
\def\pst@par{}
\def\addto@par#1{%
\ifx\pst@par\@empty
\def\pst@par{#1}%
\else
\expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}%
\fi}
\def\addbefore@par#1{%
\ifx\pst@par\@empty
\def\pst@par{#1}%
\else
\toks@{#1}%
\pst@toks\expandafter{\pst@par}%
\edef\pst@par{\the\toks@,\the\pst@toks}%
\fi}
\def\use@par{%
\ifx\pst@par\@empty\else
\expandafter\@psset\pst@par,\@nil
\def\pst@par{}%
\fi}
\def\pst@object#1{%
\pst@ifstar{%
\@ifnextchar[%
{\pst@@object{#1}}%
{\def\pst@par{}\@nameuse{#1@i}}}}
\def\pst@@object#1[#2]{%
\def\pst@par{#2}%
\@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}}
\def\newpsobject#1#2#3{%
\@ifundefined{#2@i}%
{\@pstrickserr{Graphics object `#2' not defined}\@eha}{%
\@namedef{#1}{\pst@object{#1}}%
\@namedef{#1@i}{\addbefore@par{#3}\@nameuse{#2@i}}}%
\ignorespaces}
\def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}}
\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1}
\def\begin@ClosedObj{%
\leavevmode
\pst@killglue
\begingroup
\use@par
\solid@star
\ifpsdoubleline \pst@setdoublesep \fi
\init@pscode}
\def\end@ClosedObj{%
\ifpsshadow \pst@closedshadow \fi
\ifdim\psk@border\p@>\z@ \pst@addborder \fi
\psk@fillstyle
\pst@stroke
\ifpsdoubleline \pst@doublestroke \fi
\ifshowpoints
% DG modification begin - Mar. 4, 1995
%\addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}%
\pst@OpenShowPoints
% DG modification end
\fi
\use@pscode
\endgroup
\ignorespaces}
\def\begin@OpenObj{%
\begin@ClosedObj
\let\pst@linetype\pst@arrowtype
\pst@addarrowdef}
\def\begin@AltOpenObj{%
\begin@ClosedObj
\def\pst@repeatarrowsflag{\z@}%
\def\pst@linetype{0}}
\def\end@OpenObj{%
\ifpsshadow \pst@openshadow \fi
\ifdim\psk@border\p@>\z@ \pst@addborder \fi
\psk@fillstyle
\pst@stroke
\ifpsdoubleline \pst@doublestroke \fi
\ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi
\ifshowpoints \pst@OpenShowPoints \fi
\use@pscode
\endgroup
\ignorespaces}
\def\begin@SpecialObj{%
\leavevmode
\pst@killglue
\begingroup
\use@par
\init@pscode}
\def\end@SpecialObj{%
\use@pscode
\endgroup
\ignorespaces}
\def\pst@code{}%
\def\init@pscode{%
\addto@pscode{%
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor}}
\def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}}
\def\use@pscode{%
\pstverb{%
\pst@dict
\tx@STP
\pst@newpath
\psk@origin
\psk@swapaxes
\pst@code
end}%
\gdef\pst@code{}}
\def\pst@newpath{newpath }
\def\pst@@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@@killglue\fi}
\def\KillGlue{\let\pst@killglue\pst@@killglue}
\def\DontKillGlue{\let\pst@killglue\relax}
\DontKillGlue
\def\solid@star{%
\if@star
\pslinewidth=\z@
\psdoublelinefalse
\def\pslinestyle{none}%
\def\psk@fillstyle{\psfs@solid}%
\let\psfillcolor\pslinecolor
\fi}
\def\pst@setdoublesep{%
\pst@getlength\psdoublesep\psdoublesep
\pslinewidth=2\pslinewidth
\advance\pslinewidth\psdoublesep\p@
\let\pst@setdoublesep\relax}
\def\tx@Shadow{Shadow }
\def\pst@closedshadow{%
\addto@pscode{%
gsave
\psk@shadowsize \psk@shadowangle \tx@PtoC
\tx@Shadow
\pst@usecolor\psshadowcolor
gsave fill grestore
stroke
grestore
gsave
\pst@usecolor\psfillcolor
gsave fill grestore
stroke
grestore}}
\def\pst@openshadow{%
\addto@pscode{%
gsave
\psk@shadowsize \psk@shadowangle \tx@PtoC
\tx@Shadow
\pst@usecolor\psshadowcolor
\ifx\psk@fillstyle\relax\else
gsave fill grestore
\fi
stroke}%
\pst@repeatarrows
\addto@pscode{grestore}
\ifx\psk@fillstyle\relax\else
\addto@pscode{%
gsave
\pst@usecolor\psfillcolor
gsave fill grestore
stroke
grestore}
\fi}
\def\pst@addborder{%
\addto@pscode{%
gsave
\psk@border 2 mul
CLW add SLW
\pst@usecolor\psbordercolor
stroke
grestore}}
\def\pst@stroke{%
\ifx\pslinestyle\@none\else
\addto@pscode{%
gsave
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor
\@nameuse{psls@\pslinestyle}
grestore}%
\fi}
\def\pst@fill#1{\addto@pscode{gsave #1 grestore}}%
\def\pst@doublestroke{%
\addto@pscode{%
gsave
\psdoublesep SLW
\pst@usecolor\psdoublecolor
stroke
grestore}}
\def\pst@arrowtype{%
\ifx\psk@arrowB\@empty 0 \else -2 \fi
\ifx\psk@arrowA\@empty 0 \else -1 \fi
add}
\def\pst@addarrowdef{%
\addto@pscode{%
/ArrowA {
\ifx\psk@arrowA\@empty
\pst@oplineto
\else
\pst@arrowdef{A}
moveto
\fi
} def
/ArrowB {
\ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi
} def}}
\def\pst@arrowdef#1{%
\ifnum\pst@repeatarrowsflag>\z@
/Arrow#1c [ 6 2 roll ] cvx def Arrow#1c
\fi
\tx@BeginArrow
\psk@arrowscale
\@nameuse{psas@\@nameuse{psk@arrow#1}}
\tx@EndArrow}
\def\pst@repeatarrows{%
\addto@pscode{%
gsave
\ifx\psk@arrowA\@empty\else
ArrowAc ArrowA pop pop
\fi
\ifx\psk@arrowB\@empty\else
ArrowBc ArrowB pop pop pop pop
\fi
grestore}}
\def\pst@OpenShowPoints{%
\addto@pscode{%
gsave
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}
newpath
Points aload length 2 div 2 sub cvi /N ED
N 0 ge
{ \ifx\psk@arrowA\@empty
Dot
\else
pop pop
\fi
N { Dot } repeat
\ifx\psk@arrowB\@empty
Dot
\else
pop pop
\fi }
{ N 2 mul { pop } repeat }
ifelse
grestore}}
\def\pscustom{\pst@object{pscustom}}
\long\def\pscustom@i#1{%
\begin@SpecialObj
\solid@star
\let\pst@ifcustom\iftrue
\let\begin@ClosedObj\begin@CustomObj
\let\end@ClosedObj\endgroup
\def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}%
\let\end@OpenObj\endgroup
\let\begin@AltOpenObj\begin@CustomObj
\def\begin@SpecialObj{%
\begingroup
\pst@misplaced{special graphics object}%
\def\addto@pscode####1{}
\let\end@SpecialObj\endgroup}%
\def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
\def\psclip##1{\pst@misplaced\psclip}%
\def\pst@repeatarrowsflag{\z@}%
\let\pst@setrepeatarrowsflag\relax
\showpointsfalse
\let\showpointstrue\relax
\def\pst@linetype{\pslinetype}%
\let\psset@liftpen\psset@@liftpen
\psset@liftpen{\z@}%
\def\pst@cp{/currentpoint load stopped pop }%
\def\pst@oplineto{/lineto load stopped { moveto } if }%
\def\pst@optcp##1##2{%
\ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}%
\let\caddto@pscode\addto@pscode
\def\cuse@par##1{{\use@par##1}}%
\the\pst@customdefs
\setbox\pst@hbox=\hbox{#1}%
\psk@fillstyle
\pst@stroke
\end@SpecialObj}
\def\begin@CustomObj{%
\begingroup
\use@par
\addto@pscode{%
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor}}
\def\pst@oplineto{moveto }
\def\pst@cp{}
\def\pst@optcp#1#2{}
\def\psset@liftpen#1{}
\def\psset@@liftpen#1{%
\ifcase#1\relax
\def\psk@liftpen{\z@}%
\def\pst@cp{/currentpoint load stopped pop }%
\def\pst@oplineto{/lineto load stopped { moveto } if }%
\or
\def\psk@liftpen{1}%
\def\pst@cp{}%
\def\pst@oplineto{/lineto load stopped { moveto } if }%
\or
\def\psk@liftpen{2}%
\def\pst@cp{}%
\def\pst@oplineto{moveto }%
\fi}
\psset@liftpen{0}
\def\psk@liftpen{-1}
\def\psset@linetype#1{%
\pst@getint{#1}\pslinetype
\ifnum\pst@dimg<-3
\@pstrickserr{linetype must be greater than -3}\@ehpa
\def\pslinetype{0}%
\fi}
\psset@linetype{0}
\def\caddto@pscode#1{%
\@pstrickserr{Command can only be used in \string\pscustom}\@ehpa}
\let\cuse@par\caddto@pscode
\def\tx@MSave{%
/msavemtrx
[ tx@Dict /msavemtrx known { msavemtrx aload pop } if CM ]
def }
\def\tx@MRestore{%
tx@Dict /msavemtrx known { length 0 gt } { false } ifelse
{ /msavematrx [ msavematrx aload pop setmatrix ] def }
if }
\newtoks\pst@customdefs
\pst@customdefs{%
\def\newpath{\addto@pscode{newpath}}%
\def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
\def\closepath{\addto@pscode{closepath}}%
\def\gsave{\begingroup\addto@pscode{gsave}}%
\def\grestore{\endgroup\addto@pscode{grestore}}%
% DG/SR modification begin - May 12, 1997 - Patch 2
%\def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
\def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor translate}}%
% DG/SR modification end
\def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}%
\def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}%
\def\msave{\addto@pscode{\tx@MSave}}%
\def\mrestore{\addto@pscode{\tx@MRestore}}%
\def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}%
\def\stroke{\pst@object{stroke}}%
\def\fill{\pst@object{fill}}%
\def\openshadow{\pst@object{openshadow}}%
\def\closedshadow{\pst@object{closedshadow}}%
% DG/SR modification begin - Jan. 7, 1998 - Patch 8
%\def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor tx@Shadow}}%
\def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor \tx@Shadow}}%
% DG/SR modification end
\def\lineto{\pst@onecoor{lineto}}%
\def\rlineto{\pst@onecoor{rlineto}}%
\def\curveto{\pst@threecoor{curveto}}%
\def\rcurveto{\pst@threecoor{rcurveto}}%
\def\code#1{\addto@pscode{#1}}%
\def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}%
\def\rcoor{\pst@getcoors{}{}}%
\def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}%
\def\setcolor#1{%
\@ifundefined{color@#1}{}{\addto@pscode{\use@color{#1}}}}%
\def\arrows#1{{\psset@arrows{#1}\pst@addarrowdef}}%
\let\file\pst@rawfile
} % END \pst@customdefs
\def\closedshadow@i{\cuse@par\pst@closedshadow}
\def\openshadow@i{\cuse@par\pst@openshadow}
\def\stroke@i{\cuse@par\pst@stroke}%
\def\fill@i{\cuse@par\psk@fillstyle}%
\def\pst@onecoor#1(#2){%
\pst@@getcoor{#2}%
\addto@pscode{\pst@coor #1}}
\def\pst@threecoor#1(#2)#3(#4)#5(#6){%
\begingroup
\pst@getcoor{#2}\pst@tempa
\pst@getcoor{#4}\pst@tempb
\pst@getcoor{#6}\pst@tembc
\addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}%
\endgroup}
\def\pst@rawfile#1{%
\begingroup
\def\do##1{\catcode`##1=12\relax}"
\dospecials
\catcode`\%=14
\pst@@rawfile{#1}%
\endgroup}
\def\pst@@rawfile#1{%
\immediate\openin1 #1
\ifeof1
\@pstrickserr{File `#1' not found}\@ehpa
\else
\immediate\read1 to \pst@tempg
\loop
\ifeof1 \@pstfalse\else\@psttrue\fi
\if@pst
\addto@pscode\pst@tempg
\immediate\read1 to \pst@tempg
\repeat
\fi
\immediate\closein1\relax}
\def\tx@NArray{NArray }
\def\tx@NArray{NArray }
\def\tx@Line{Line }
\def\tx@Arcto{Arcto }
\def\tx@CheckClosed{CheckClosed }
\def\tx@Polygon{Polygon }
\def\psset@gangle#1{\pst@getangle{#1}\psk@gangle}
\psset@gangle{0}
\def\tx@Diamond{Diamond }
\def\psdiamond{\pst@object{psdiamond}}
\def\psdiamond@i(#1){%
\@ifnextchar({\psdiamond@ii(#1)}{\psdiamond@ii(0,0)(#1)}}
\def\psdiamond@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@getcoor{#2}\pst@tempb
\addto@pscode{%
\psline@iii
pop
\psk@dimen
\pst@tempb
\psk@gangle
\pst@tempa
\tx@Diamond}%
\def\pst@linetype{4}%
\end@ClosedObj}
\def\tx@Triangle{Triangle }
\def\pstriangle{\pst@object{pstriangle}}
\def\pstriangle@i(#1){%
\@ifnextchar({\pstriangle@ii(#1)}{\pstriangle@ii(0,0)(#1)}}
\def\pstriangle@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@getcoor{#2}\pst@tempb
\addto@pscode{%
\psline@iii
pop
\psk@dimen
\pst@tempb
\psk@gangle
\pst@tempa
\tx@Triangle}%
\def\pst@linetype{2}%
\end@ClosedObj}
\def\tx@CCA{CCA }
\def\tx@CCA{CCA }
\def\tx@CC{CC }
\def\tx@IC{IC }
\def\tx@BOC{BOC }
\def\tx@NC{NC }
\def\tx@EOC{EOC }
\def\tx@BAC{BAC }
\def\tx@NAC{NAC }
\def\tx@EAC{EAC }
\def\tx@OpenCurve{OpenCurve }
\def\tx@AltCurve{AltCurve }
\def\tx@ClosedCurve{ClosedCurve }
\def\psset@curvature#1{%
\edef\pst@tempg{#1 }%
\expandafter\psset@@curvature\pst@tempg * * * \@nil}
\def\psset@@curvature#1 #2 #3 #4\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph
\pst@checknum{#3}\pst@tempi
\edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}}
\psset@curvature{1 .1 0}
\def\pscurve{\pst@object{pscurve}}
\def\pscurve@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\pscurve@ii}}
\def\pscurve@ii{%
\addto@pscode{%
\pst@cp
\psk@curvature\space /c ED /b ED /a ED
\ifshowpoints true \else false \fi
\tx@OpenCurve}%
\end@OpenObj}
\def\psecurve{\pst@object{psecurve}}
\def\psecurve@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\psecurve@ii}}
\def\psecurve@ii{%
\addto@pscode{%
\psk@curvature\space /c ED /b ED /a ED
\ifshowpoints true \else false \fi
\tx@AltCurve}%
\end@OpenObj}
\def\psccurve{\pst@object{psccurve}}
\def\psccurve@i{%
\begin@ClosedObj
\pst@getcoors[\psccurve@ii}
\def\psccurve@ii{%
\addto@pscode{%
\psk@curvature\space /c ED /b ED /a ED
\ifshowpoints true \else false \fi
\tx@ClosedCurve}%
\def\pst@linetype{1}%
\end@ClosedObj}
\def\psset@dotsize#1{%
\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
\edef\psk@@dotsize{\pst@number\pst@dimg}%
\let\psk@@@dotsize\pst@tempg
\edef\psk@dotsize{%
/DS \psk@@dotsize \psk@@@dotsize CLW mul add 2 div def }}
\psset@dotsize{2pt 2}
\def\psset@dotscale#1{%
\pst@getscale{#1}\psk@dotscale
\ifx\psk@dotscale\@empty
\def\psk@xdotscale{1 }%
\def\psk@ydotscale{1 }%
\else
\let\psk@xdotscale\pst@tempg
\let\psk@ydotscale\pst@temph
% DG/SR modification begin - Oct. 17, 1997 - Patch 5
%\fi}
\fi
\pst@getdotsize%
\psset@dotsize{\pst@dimg\space\pst@@dimtonum\pst@dimh}}
%\psset@dotscale{1}
% DG/SR modification end
\def\pst@Getangle#1#2{%
\pst@getangle{#1}\pst@tempg
\def\pst@temph{0. }%
\ifx\pst@tempg\pst@temph
\def#2{}%
\else
\edef#2{\pst@tempg\space rotate }%
\fi}
\def\psset@dotangle#1{%
\pst@getangle{#1}\psk@@dotangle
\ifdim\psk@@dotangle\p@=\z@
\let\psk@dotangle\@empty
\else
% DG/SR modification begin - Aug. 8, 1997 - Patch 4
%\edef\psk@dotangle{\psk@@dotangle rotate }
\edef\psk@dotangle{\psk@@dotangle rotate }%
% DG/SR modification end
\fi}
\psset@dotangle{0}
\def\pst@getdotsize{%
\pst@dimg=\psk@@@dotsize\pslinewidth
\advance\pst@dimg\psk@@dotsize\p@
\pst@dimh=\psk@ydotscale\pst@dimg
\pst@dimg=\psk@xdotscale\pst@dimg
\divide\pst@dimh 2
\divide\pst@dimg 2\relax}
% DG/SR modification begin - Oct. 17, 1997 - Patch 5
\psset@dotscale{1}
% DG/SR modification end
\def\psdot{\pst@object{psdot}}
\def\psdot@i{\@ifnextchar({\psdot@ii}{\psdot@ii(\z@,\z@)}}
\def\psdot@ii(#1){%
\begin@SpecialObj
\pst@@getcoor{#1}%
\addto@pscode{%
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}%
\pst@coor Dot}%
\end@SpecialObj}
\def\psdots{\pst@object{psdots}}
\def\psdots@i{%
\begin@SpecialObj
\pst@getcoors[\psdots@ii}
\def\psdots@ii{%
\addto@pscode{false \tx@NArray \psdots@iii}%
\end@SpecialObj}
\def\psdots@iii{%
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}
newpath
n { transform floor .5 add exch floor .5 add exch itransform Dot } repeat}
% DG: dead code (to suppress until \psset@dotstyle) ? - Aug. 4, 1997
\def\tx@SQ{SQ }
\def\tx@ST{ST }
\def\tx@SP{SP }
\def\pst@gdot#1{/Dot { gsave T \psk@dotangle \psk@dotscale #1 grestore } def }
\@namedef{psds@*}{\pst@gdot{0 0 DS \tx@SD}}
\@namedef{psds@o}{%
/r2 DS CLW sub def
\pst@gdot{0 0 DS \tx@SD \pst@usecolor\psfillcolor 0 0 r2 \tx@SD}}
\@namedef{psds@square*}{%
/r1 DS .886 mul def
\pst@gdot{r1 \tx@SQ}}
\@namedef{psds@square}{%
/r1 DS .886 mul def /r2 r1 CLW sub def
\pst@gdot{r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ}}
\@namedef{psds@triangle*}{%
/y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
\pst@gdot{x1 y1 \tx@ST}}
\@namedef{psds@triangle}{%
/y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
/y2 y1 CLW add def /x2 y2 1.732 mul neg def
\pst@gdot{x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST}}
\@namedef{psds@pentagon*}{%
/r1 DS 1.149 mul def
\pst@gdot{r1 \tx@SP}}
\@namedef{psds@pentagon}{%
DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED
\pst@gdot{r1 \tx@SP \pst@usecolor\psfillcolor r2 \tx@SP}}
\@namedef{psds@+}{%
/DS DS 1.253 mul def
\pst@gdot{DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke}}
\@namedef{psds@|}{%
\psk@tbarsize CLW mul add 2 div /DS ED
\pst@gdot{0 DS moveto 0 DS neg L stroke}}
% DG: end dead code?
\def\psset@dotstyle#1{%
\@ifundefined{psds@#1}%
{\@pstrickserr{Dot style `#1' not defined}\@eha}%
{\edef\psk@dotstyle{#1}}}
\psset@dotstyle{*}
\def\tx@FontDot{FontDot }
\def\newpsfontdot#1[#2]#3#4{%
\@namedef{psds@#1}{%
/#3 \psk@@dotangle [#2] \tx@FontDot
/Dot { moveto #4 show } bind def }}
\def\newpsfontdotH#1[#2]#3#4#5{%
\@namedef{psds@#1}{%
/#3 \psk@@dotangle [#2] \tx@FontDot
/Dot {
moveto
\iftrue
gsave \pst@usecolor\psfillcolor #5 show grestore
\fi
#4 show
} bind def }}
\pstheader{pst-dots.pro}
\newpsfontdot{*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)}
\newpsfontdotH{o}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)}
\newpsfontdotH{Bo}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)}
\newpsfontdotH{triangle}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)}
\newpsfontdotH{Btriangle}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)}
\newpsfontdot{triangle*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)}
\newpsfontdotH{square}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)}
\newpsfontdotH{Bsquare}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)}
\newpsfontdot{square*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)}
\newpsfontdotH{pentagon}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)}
\newpsfontdotH{Bpentagon}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)}
\newpsfontdot{pentagon*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)}
% DG/SR modification begin - Mar. 18, 1997
%\newpsfontdot{diamond*}%
%[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{Symbol}{<E0>}
%\newpsfontdot{diamond}%
%[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{Symbol}{<A8>}
\newpsfontdot{diamond}%
[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{Symbol}{<E0>}
\newpsfontdot{diamond*}%
[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{Symbol}{<A8>}
% DG/SR modification end
\newpsfontdot{oplus}%
[1.44928 0.0 0.0 1.44928 -0.562319 -0.478261]{Symbol}{<C5>}
\newpsfontdot{otimes}%
[1.44928 0.0 0.0 1.44928 -0.562319 -0.475362]{Symbol}{<C4>}
\newpsfontdot{x}%
[1.8 0.0 0.0 1.8 -0.495 -0.4788]{Symbol}{<B4>}
\newpsfontdot{+}%
[2.3 0.0 0.0 2.3 -0.6486 -0.5819]{Times-Roman}{<2B>}
\newpsfontdot{asterisk}%
[2.43309 0.0 0.0 2.43309 -0.609489 -1.14477]{Times-Roman}{<2A>}
\newpsfontdot{B+}%
[2.3 0.0 0.0 2.3 -0.6555 -0.5819]{Times-Bold}{<2B>}
\newpsfontdot{Basterisk}%
[2.29358 0.0 0.0 2.29358 -0.576835 -1.08486]{Times-Bold}{<2A>}
\newpsfontdot{|}%
% DG/SR modification begin - Oct. 27, 1997 - Patch 7
%[1.98413 0.0 0.0 1.98413 -0.258929 -0.712302]{Helvetica}{(|)}
[1.98413 0.0 0.0 1.38 -0.258929 -0.5]{Helvetica}{(|)}
% DG/SR modification end
\newpsfontdot{B|}%
% DG/SR modification begin - Oct. 27, 1997 - Patch 7
%[1.98413 0.0 0.0 1.98413 -0.277778 -0.78302]{Helvetica-Bold}{(|)}
[1.98413 0.0 0.0 1.38 -0.277778 -0.5]{Helvetica-Bold}{(|)}
% DG/SR modification end
\iffalse
\newpsfontdot{*}%
[2.77778 0.0 0.0 2.77778 -0.638889 -0.813889]{Symbol}{<B7>}
\newpsfontdot{o}%
[3.33333 0.0 0.0 3.33333 -0.666667 -1.78167]{Symbol}{<B0>}
\newpsfontdot{Bo}%
[4.69484 0.0 0.0 4.69484 -0.78169 -2.97418]{Times-Bold}{<CA>}
\fi
\newdimen\pslinearc
\def\psset@linearc#1{\pssetlength\pslinearc{#1}}
\psset@linearc{0pt}
\def\psline{\pst@object{psline}}
\def\psline@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\psline@ii}}
\def\psline@ii{%
\addto@pscode{\pst@cp \psline@iii \tx@Line}%
\end@OpenObj}
\def\psline@iii{%
\ifdim\pslinearc>\z@
/r \pst@number\pslinearc def
/Lineto { \tx@Arcto } def
\else
/Lineto /lineto load def
\fi
\ifshowpoints true \else false \fi}
\def\qline(#1)(#2){%
\def\pst@par{}%
\begin@SpecialObj
\def\pst@linetype{0}%
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\addto@pscode{%
\pst@tempa moveto \pst@coor L
\@nameuse{psls@\pslinestyle}}%
\end@SpecialObj}
\def\pspolygon{\pst@object{pspolygon}}
\def\pspolygon@i{%
\begin@ClosedObj
\def\pst@cp{}%
\pst@getcoors[\pspolygon@ii}
\def\pspolygon@ii{%
\addto@pscode{\psline@iii \tx@Polygon}%
\def\pst@linetype{1}%
\end@ClosedObj}
\def\psset@framearc#1{\pst@checknum{#1}\psk@framearc}
\psset@framearc{0}
\def\psset@cornersize#1{%
\pst@expandafter\psset@@cornersize{#1}\@nil}
\def\psset@@cornersize#1#2\@nil{%
\if #1a\relax
\def\psk@cornersize{\pst@number\pslinearc false }%
\else
\def\psk@cornersize{\psk@framearc true }%
\fi}
\psset@cornersize{relative}
\def\tx@Rect{Rect }
\def\tx@OvalFrame{OvalFrame }
\def\tx@Frame{Frame }
\def\psset@dimen#1{%
\pst@expandafter\psset@@dimen{#1}\@nil}
\def\psset@@dimen#1#2\@nil{%
\if #1o\relax
\def\psk@dimen{.5 }%
\else
\if #1m\relax
\def\psk@dimen{0 }%
\else
\if #1i\relax
\def\psk@dimen{-.5 }%
\fi
\fi
\fi}
\psset@dimen{outer}
\def\psframe{\pst@object{psframe}}
\def\psframe@i(#1){%
\@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}}
\def\psframe@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\addto@pscode{\psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame}%
\def\pst@linetype{2}%
\showpointsfalse
\end@ClosedObj}
\def\tx@BezierNArray{BezierNArray }
\def\tx@OpenBezier{OpenBezier }
\def\tx@ClosedBezier{ClosedBezier }
\def\tx@BezierShowPoints{BezierShowPoints }
\def\psbezier{\pst@object{psbezier}}
\def\psbezier@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\psbezier@ii}}
\def\psbezier@ii{%
\addto@pscode{%
% DG/SR modification begin - Apr. 28, 1997 - Patch 1
% \psbezier doesn't work inside \pscustom
%\pst@cp
% DG/SR modification end
\ifshowpoints true \else false \fi
\tx@OpenBezier
\ifshowpoints \tx@BezierShowPoints \fi}%
\end@OpenObj}
\def\pscbezier{\pst@object{pscbezier}}
\def\pscbezier@i{%
\begin@ClosedObj
\pst@getcoors[\pscbezier@ii}
\def\pscbezier@ii{%
\addto@pscode{%
\ifshowpoints true \else false \fi
\tx@ClosedBezier
\ifshowpoints \tx@BezierShowPoints \fi}%
\chardef\pst@linetype=1
\end@ClosedObj}
\def\tx@Parab{Parab }
\def\parabola{\pst@object{parabola}}
\def\parabola@i{\pst@getarrows\parabola@ii}
\def\parabola@ii#1(#2)#3(#4){%
\begin@OpenObj
\pst@getcoor{#2}\pst@tempa
\pst@@getcoor{#4}%
\addto@pscode{\pst@tempa \pst@coor \tx@Parab}%
\end@OpenObj}
\def\psset@gridwidth#1{\pst@getlength{#1}\psk@gridwidth}
\psset@gridwidth{.8pt}
\def\psset@griddots#1{%
\pst@cntg=#1\relax
\edef\psk@griddots{\the\pst@cntg}}
\psset@griddots{0}
\def\psset@gridcolor#1{\pst@getcolor{#1}\psgridcolor}
\psset@gridcolor{black}
\def\psset@subgridwidth#1{\pst@getlength{#1}\psk@subgridwidth}
\psset@subgridwidth{.4pt}
\def\psset@subgridcolor#1{\pst@getcolor{#1}\pssubgridcolor}
\psset@subgridcolor{gray}
\def\psset@subgriddots#1{%
\pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}}
\psset@subgriddots{0}
\def\psset@subgriddiv#1{%
\pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}}
\psset@subgriddiv{5}
\def\psset@gridlabels#1{\pst@getlength{#1}\psk@gridlabels}
\psset@gridlabels{10pt}
\def\psset@gridlabelcolor#1{\pst@getcolor{#1}\psgridlabelcolor}
\psset@gridlabelcolor{black}
\def\tx@Grid{Grid }
\def\psgrid{\pst@object{psgrid}}
\def\psgrid@i{\@ifnextchar(%
{\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}}
\def\psgrid@ii(#1){\@ifnextchar(%
{\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}}
\def\psgrid@iii(#1)(#2){\@ifnextchar(%
{\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}}
\def\psgrid@iv(#1)(#2)(#3){%
\begin@SpecialObj
\pst@getcoor{#1}\pst@tempa
\pst@getcoor{#2}\pst@tempb
\pst@@getcoor{#3}%
\ifnum\psk@subgriddiv>1
\addto@pscode{gsave
\psk@subgridwidth SLW \pst@usecolor\pssubgridcolor
\pst@tempb \pst@coor \pst@tempa
\pst@number\psxunit \pst@number\psyunit
\psk@subgriddiv\space \psk@subgriddots\space
{} 0 \tx@Grid grestore}%
\fi
\addto@pscode{gsave
\psk@gridwidth SLW \pst@usecolor\psgridcolor
\pst@tempb \pst@coor \pst@tempa
\pst@number\psxunit \pst@number\psyunit
1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor }
\psk@gridlabels \tx@Grid grestore}%
\end@SpecialObj}
\newif\ifpsmathbox
\psmathboxtrue
\def\pst@mathflag{\z@}
\newtoks\everypsbox
\let\pst@thisbox\relax
\long\def\pst@makenotverbbox#1#2{%
\edef\pst@mathflag{%
\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
\setbox\pst@hbox=\hbox{%
\ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi
{\pst@thisbox\the\everypsbox#2}%
\ifnum\pst@mathflag>\z@$\fi}%
#1}
\def\pst@makeverbbox#1{%
\def\pst@afterbox{#1}%
\edef\pst@mathflag{%
\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
\afterassignment\pst@beginbox
\setbox\pst@hbox\hbox}
\def\pst@beginbox{%
\ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
\bgroup\aftergroup\pst@endbox
\pst@thisbox
\the\everypsbox}
\def\pst@endbox{%
\ifnum\pst@mathflag>\z@$\fi
\egroup
\pst@afterbox}
\def\pst@makebox{\pst@@makebox}
\def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}}
\def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}}
\psverbboxfalse
\def\pst@longbox{%
\def\pst@makebox{%
\gdef\pst@makebox{\pst@@makebox}%
\pst@makelongbox}}
\def\pst@makelongbox#1{%
\def\pst@afterbox{#1}%
\edef\pst@mathflag{%
\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
\setbox\pst@hbox\hbox\bgroup
\aftergroup\pst@afterbox
\ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
\begingroup
\pst@thisbox
\the\everypsbox}
\def\pst@endlongbox{%
\endgroup
\ifnum\pst@mathflag>\z@$\fi
\egroup}
\def\pslongbox#1#2{%
\@namedef{#1}{\pst@longbox#2}%
\@namedef{end#1}{\pst@endlongbox}}
\newdimen\psframesep
\def\psset@framesep#1{\pssetlength\psframesep{#1}}
\psset@framesep{3pt}
\newif\ifpsboxsep
\def\psset@boxsep#1{\@nameuse{psboxsep#1}}
\psset@boxsep{true}
\def\pst@useboxpar{%
\use@par
\if@star
\let\pslinecolor\psfillcolor
\solid@star
\let\solid@star\relax
\fi
\ifpsdoubleline \pst@setdoublesep \fi}
\def\psframebox{\pst@object{psframebox}}
\def\psframebox@i{\pst@makebox\psframebox@ii}
\def\psframebox@ii{%
\begingroup
\pst@useboxpar
\pst@dima=\pslinewidth
\advance\pst@dima by \psframesep
\pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima
\pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima
\pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima
\setbox\pst@hbox=\hbox{%
\ifpsboxsep\kern\pst@dima\fi
\begin@ClosedObj
\addto@pscode{%
\psk@cornersize
\pst@number\pst@dima neg
\pst@number\pst@dimb neg
\pst@number\pst@dimc
\pst@number\pst@dimd
.5
\tx@Frame}%
\def\pst@linetype{2}%
\showpointsfalse
\end@ClosedObj
\box\pst@hbox
\ifpsboxsep\kern\pst@dima\fi}%
\ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi
\leavevmode\box\pst@hbox
\endgroup}
\def\psdblframebox{\pst@object{psdblframebox}}
\def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i}
\def\psclip#1{%
\leavevmode
\begingroup
\begin@psclip
\begingroup
\def\use@pscode{%
\pstVerb{%
\pst@dict
/mtrxc CM def
CP CP T
\tx@STV
\psk@origin
\psk@swapaxes
newpath
\pst@code
clip
newpath
mtrxc setmatrix
moveto
0 setgray
end}%
\gdef\pst@code{}}%
\def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
\def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
\hbox to\z@{#1}%
\endgroup
\def\endpsclip{%
\end@psclip
\endgroup}%
\ignorespaces}
\def\endpsclip{\pst@misplaced\endpsclip}
\let\begin@psclip\relax
\def\end@psclip{\pstVerb{currentpoint initclip moveto}}
\def\AltClipMode{%
\def\end@psclip{\pstVerb{\pst@grestore}}%
\def\begin@psclip{\pstVerb{gsave}}}
\def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}}
% DG modification begin - Apr. 3, 1997
% From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus)
%\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}}
\def\clipbox@[#1]{\pst@makebox{\clipbox@@{#1}}}
% DG modification end
\def\clipbox@@#1{%
\pssetlength\pst@dimg{#1}%
\leavevmode\hbox{%
\begin@psclip
\pst@Verb{%
CM \tx@STV CP T newpath
/a \pst@number\pst@dimg def
/w \pst@number{\wd\pst@hbox}a add def
/d \pst@number{\dp\pst@hbox}a add neg def
/h \pst@number{\ht\pst@hbox}a add def
a neg d moveto
a neg h L
w h L
w d L
closepath
clip
newpath
0 0 moveto
setmatrix}%
\unhbox\pst@hbox
\end@psclip}}
\def\psshadowbox{\pst@object{psshadowbox}}
\def\psshadowbox@i{\pst@makebox\psshadowbox@ii}
\def\psshadowbox@ii{%
\begingroup
\pst@useboxpar
\psshadowtrue
\psboxseptrue
\def\psk@shadowangle{-45 }%
\setbox\pst@hbox=\hbox{\psframebox@ii}%
\pst@dimh=\psk@shadowsize\p@
\pst@dimh=.7071\pst@dimh
\pst@dimg=\dp\pst@hbox
\advance\pst@dimg\pst@dimh
\dp\pst@hbox=\pst@dimg
\pst@dimg=\wd\pst@hbox
\advance\pst@dimg\pst@dimh
\wd\pst@hbox=\pst@dimg
\leavevmode
\box\pst@hbox
\endgroup}
\def\pscirclebox{\pst@object{pscirclebox}}
\def\pscirclebox@i{\pst@makebox\pscirclebox@ii}
\def\pscirclebox@ii{%
\begingroup
\pst@useboxpar
\setbox\pst@hbox=\hbox{%
\pst@nodehook
\pscirclebox@iii
\box\pst@hbox}%
\ifpsboxsep \pscirclebox@sep \fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\pscirclebox@iii{%
\if@star
\pslinewidth\z@
\pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor
newpath \pscirclebox@iv \tx@SD end}%
\else
\begin@ClosedObj
\def\pst@linetype{4}\showpointsfalse
\addto@pscode{%
\pscirclebox@iv CLW 2 div add 0 360 arc closepath}%
\end@ClosedObj
\fi}
\def\pscirclebox@iv{%
\pst@number{\wd\pst@hbox}2 div
\pst@number{\ht\pst@hbox}\pst@number{\dp\pst@hbox}add 2 div
2 copy \pst@number{\dp\pst@hbox}sub 4 2 roll
\tx@Pyth \pst@number\psframesep add }
\def\pscirclebox@sep{%
\pst@dimb=\ht\pst@hbox
\advance\pst@dimb\dp\pst@hbox
\divide\pst@dimb 2
\pst@dima=.5\wd\pst@hbox
\pst@pyth\pst@dima\pst@dimb\pst@dimc
\advance\pst@dimc\pslinewidth
\advance\pst@dimc\psframesep
\advance\pst@dimb-\pst@dimc
\setbox\pst@hbox=\hbox to2\pst@dimc{%
\hss
\vbox{\kern-\pst@dimb\box\pst@hbox}%
\hss}%
\advance\pst@dimb-\dp\pst@hbox
\dp\pst@hbox=-\pst@dimb}
\let\pst@nodehook\relax
\def\psCirclebox{\pst@object{psCirclebox}}
\def\psCirclebox@i{\pst@makebox\psCirclebox@ii}
\def\psCirclebox@ii{%
\begingroup
\pst@useboxpar
\pst@dima=\ht\pst@hbox
\advance\pst@dima\dp\pst@hbox
\divide\pst@dima\tw@
\pssetlength\pst@dimb\psk@radius
\setbox\pst@hbox=\hbox{%
\pst@nodehook
\pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}%
\box\pst@hbox}%
\ifpsboxsep \psCirclebox@sep \fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\psCirclebox@sep{%
\pst@dimc=\pst@dimb
\advance\pst@dimb-\pst@dima
\advance\pst@dima\pst@dimc
\setbox\pst@hbox=\hbox to\tw@\pst@dimc{%
\hss
\vrule width \z@ depth \pst@dimb height \pst@dima
\box\pst@hbox
\hss}}%
\def\psovalbox{\pst@object{psovalbox}}
\def\psovalbox@i{\pst@makebox{\psovalbox@ii}}
\def\psovalbox@ii{%
\begingroup
\pst@useboxpar
\psovalbox@iii
\ifpsboxsep\psovalbox@sep\fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\psovalbox@iii{%
\psovalbox@iv
\setbox\pst@hbox=\hbox{%
\begin@ClosedObj
\addto@pscode{%
0 360
\pst@number\pst@dimc CLW 2 div sub
\pst@number\pst@dimd CLW 2 div sub
\pst@number\pst@dima
\pst@number\pst@dimb
\tx@Ellipse
closepath}%
\def\pst@linetype{2}%
\end@ClosedObj
\unhbox\pst@hbox}}
\def\psovalbox@iv{%
\pst@dimc=\pslinewidth\advance\pst@dimc\psframesep
\pst@dimd=\ht\pst@hbox\advance\pst@dimd\dp\pst@hbox
\pst@dima=.5\wd\pst@hbox
\pst@dimb=.5\pst@dimd\advance\pst@dimb-\dp\pst@hbox
\pst@dimd=.707\pst@dimd
\advance\pst@dimd\pst@dimc
\advance\pst@dimc.707\wd\pst@hbox}
\def\psovalbox@sep{%
\setbox\pst@hbox\hbox to 2\pst@dimc{\hss\unhbox\pst@hbox\hss}%
\pst@dimg=\pst@dimd
\advance\pst@dimg-\pst@dimb
\dp\pst@hbox=\pst@dimg
\advance\pst@dimd\pst@dimb
\ht\pst@hbox=\pst@dimd}
\def\psdiabox{\pst@object{psdiabox}}
\def\psdiabox@i{\pst@makebox{\psdiabox@ii}}
\def\psdiabox@ii{%
\begingroup
\pst@useboxpar
\psdiabox@iii
\ifpsboxsep\psdiabox@sep\fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\psdiabox@iv{%
\pst@dimg=.707\pslinewidth
\advance\pst@dimg.707\psframesep
\pst@dima=\wd\pst@hbox
\divide\pst@dima 2
\pst@dimc=\pst@dima
\advance\pst@dimc\pst@dimg
\pst@dimd=\ht\pst@hbox
\advance\pst@dimd\dp\pst@hbox
\divide\pst@dimd 2
\pst@dimb=\pst@dimd
\advance\pst@dimb-\dp\pst@hbox
\advance\pst@dimd\pst@dimg}
\def\psdiabox@iii{%
\psdiabox@iv
\setbox\pst@hbox=\hbox{%
\begin@ClosedObj
\addto@pscode{%
\psline@iii
pop
.5
\pst@number\pst@dimc 2 mul \pst@number\pst@dimd 2 mul
0
\pst@number\pst@dima \pst@number\pst@dimb
\tx@Diamond}%
\def\pst@linetype{4}%
\end@ClosedObj
\box\pst@hbox}}
\def\psdiabox@sep{%
\setbox\pst@hbox\hbox to 4\pst@dimc{\hss\unhbox\pst@hbox\hss}%
\multiply\pst@dimd 2
\advance\pst@dimd\pst@dimb
\ht\pst@hbox\pst@dimd
\advance\pst@dimd-2\pst@dimb
\dp\pst@hbox\pst@dimd}
\def\psset@trimode#1{\pst@expandafter\psset@@trimode{#1}\@empty\@empty\@nil}
\def\psset@@trimode#1#2#3\@nil{%
\let\pst@tempg#1\relax
\ifx\pst@tempg*%
\let\psk@@trimode\@empty
\let\pst@tempg#2\relax
\else
\let\psk@@trimode\relax
\fi
\edef\psk@trimode{%
\ifx R\pst@tempg 1 \else\ifx D\pst@tempg 2
\else\ifx L\pst@tempg 3 \else 0 \fi\fi\fi}}
\psset@trimode{U}
\def\pstribox{\pst@object{pstribox}}
\def\pstribox@i{\pst@makebox{\pstribox@ii}}
\def\pstribox@ii{%
\begingroup
\pst@useboxpar
\pstribox@iii
\ifpsboxsep\pstribox@sep\fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\pstribox@iii{%
\pstribox@iv
\setbox\pst@hbox=\hbox{%
\begin@ClosedObj
\addto@pscode{%
\psline@iii
pop
.5
\pst@number\pst@dimc \pst@number\pst@dimd
\ifodd\psk@trimode exch \fi
\psk@trimode -90 mul
\pst@number\pst@dima \pst@number\pst@dimb
\tx@Triangle}%
\def\pst@linetype{2}%
\end@ClosedObj
\box\pst@hbox}}
\def\pstribox@iv{%
\pst@dimh=\pslinewidth
\advance\pst@dimh\psframesep
\pst@dimg=\ht\pst@hbox
\advance\pst@dimg-\dp\pst@hbox
\divide\pst@dimg 2
\edef\pst@tempa{\number\pst@dimg sp}% For use by nodes.
\ifodd\psk@trimode
\pst@dimb\pst@dimg
\else
\pst@dima=\wd\pst@hbox
\divide\pst@dima 2
\fi
\ifcase\psk@trimode
\pst@dimb=-\dp\pst@hbox
\advance\pst@dimb-\pst@dimh
\or
\pst@dima=-\pst@dimh
\or
\pst@dimb=\ht\pst@hbox
\advance\pst@dimb\pst@dimh
\or
\pst@dima=\wd\pst@hbox
\advance\pst@dima\pst@dimh
\fi
\pst@dimd=\dp\pst@hbox
\advance\pst@dimd\ht\pst@hbox
\ifx\psk@@trimode\relax
\pst@dimc=\wd\pst@hbox
\advance\pst@dimc\ifodd\psk@trimode 1.447\else 1.789\fi\pst@dimh
\multiply\pst@dimc 2
\advance\pst@dimd\ifodd\psk@trimode 1.789\else 1.447\fi\pst@dimh
\multiply\pst@dimd 2
\else
\ifodd\psk@trimode
\advance\pst@dimd 1.1547\wd\pst@hbox
\advance\pst@dimd 3.4641\pst@dimh
\pst@dimc=.866\pst@dimd
\else
\advance\pst@dimd .866\wd\pst@hbox %.866=(sqrt(3)/2)
\advance\pst@dimd 3\pst@dimh
\pst@dimc=1.1547\pst@dimd % 1.1547=(2/sqrt(3))
\fi
\fi}
\def\pstribox@sep{%
\ifodd\psk@trimode
\advance\pst@dimb.5\pst@dimd
\ht\pst@hbox=\pst@dimb
\advance\pst@dimd-\pst@dimb
\dp\pst@hbox=\pst@dimd
\else
\setbox\pst@hbox\hbox to \pst@dimc{\hss\unhbox\pst@hbox\hss}%
\global\pst@dimg=.5\pst@dimc
\fi
\ifcase\psk@trimode
\dp\pst@hbox-\pst@dimb
\advance\pst@dimd\pst@dimb
\ht\pst@hbox\pst@dimd
\or
\pst@dimg=.5\wd\pst@hbox
\global\advance\pst@dimg-\pst@dima
\setbox\pst@hbox\hbox to \pst@dimc{\kern-\pst@dima\box\pst@hbox\hss}%
\or
\ht\pst@hbox\pst@dimb
\advance\pst@dimd-\pst@dimb
\dp\pst@hbox\pst@dimd
\or
\pst@dimg=\pst@dimc
\advance\pst@dimg-\pst@dima
\global\advance\pst@dimg.5\wd\pst@hbox
\setbox\pst@hbox\hbox to \pst@dimc{%
\hss\box\pst@hbox\kern\psframesep\kern\pslinewidth}%
\fi}
\def\psset@arcsepA#1{\pst@getlength{#1}\psk@arcsepA}
\def\psset@arcsepB#1{\pst@getlength{#1}\psk@arcsepB}
\def\psset@arcsep#1{%
\psset@arcsepA{#1}\let\psk@arcsepB\psk@arcsepA}
\psset@arcsep{0}
\def\tx@ArcArrow{ArcArrow }
\def\psarc{\pst@object{psarc}}
\def\psarc@i{%
\@ifnextchar({\psarc@iii}{\psarc@ii}}
\def\psarc@ii#1{\addto@par{arrows=#1}%
\@ifnextchar({\psarc@iii}{\psarc@iii(0,0)}}
\def\psarc@iii(#1)#2#3#4{%
\begin@OpenObj
\pst@getangle{#3}\pst@tempa
\pst@getangle{#4}\pst@tempb
\pst@@getcoor{#1}%
\pssetlength\pst@dima{#2}%
\addto@pscode{\psarc@iv \psarc@v}%
\gdef\psarc@type{0}%
\showpointsfalse
\end@OpenObj}
\def\psarc@iv{%
\pst@coor /y ED /x ED
/r \pst@number\pst@dima def
/c 57.2957 r \tx@Div def
/angleA
\pst@tempa
\psk@arcsepA c mul 2 div
\ifcase \psarc@type add \or sub \fi
def
/angleB
\pst@tempb
\psk@arcsepB c mul 2 div
\ifcase \psarc@type sub \or add \fi
def
\ifshowpoints\psarc@showpoints\fi
\ifx\psk@arrowA\@empty
\ifnum\psk@liftpen=2
r angleA \tx@PtoC
y add exch x add exch
moveto
\fi
\fi}
\def\psarc@v{%
x y r
angleA
\ifx\psk@arrowA\@empty\else
{ ArrowA CP }
{ \ifcase\psarc@type add \or sub \fi }
\tx@ArcArrow
\fi
angleB
\ifx\psk@arrowB\@empty\else
{ ArrowB }
{ \ifcase\psarc@type sub \or add \fi }
\tx@ArcArrow
\fi
\ifcase\psarc@type arc \or arcn \fi}
\def\psarc@type{0}
\def\psarc@showpoints{%
gsave
newpath
x y moveto
x y r \pst@tempa \pst@tempb
\ifcase\psarc@type arc \or arcn \fi
closepath
CLW 2 div SLW
[ \psk@dash\space ] 0 setdash stroke
grestore }
\def\psarcn{\pst@object{psarcn}}
\def\psarcn@i{\def\psarc@type{1}\psarc@i}
\def\pscircle{\pst@object{pscircle}}
\def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}}
\def\pscircle@do(#1)#2{%
\if@star
{\use@par\qdisk(#1){#2}}%
\else
\begin@ClosedObj
\pst@@getcoor{#1}%
\pssetlength\pst@dimc{#2}%
\def\pst@linetype{4}%
\addto@pscode{%
\pst@coor
\pst@number\pst@dimc
\psk@dimen CLW mul sub
0 360 arc
closepath}%
\showpointsfalse
\end@ClosedObj
\fi
\ignorespaces}
\def\qdisk(#1)#2{%
\def\pst@par{}%
\begin@SpecialObj
\pst@@getcoor{#1}%
\pssetlength\pst@dimg{#2}%
\addto@pscode{\pst@coor \pst@number\pst@dimg \tx@SD}%
\end@SpecialObj}
\def\psset@radius#1{\pst@@getlength{#1}\psk@radius}
\psset@radius{.25cm}
\def\psCircle{\pst@object{psCircle}}
\def\psCircle@i{\@ifnextchar({\psCircle@ii}{\psCircle@ii(0,0)}}
\def\psCircle@ii(#1){\pscircle@do(#1){\psk@radius}}
\def\pswedge{\pst@object{pswedge}}
\def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}}
\def\pswedge@ii(#1)#2#3#4{%
\begin@ClosedObj
\pssetlength\pst@dimc{#2}
\pst@getangle{#3}\pst@tempa
\pst@getangle{#4}\pst@tempb
\pst@@getcoor{#1}%
\def\pst@linetype{1}%
\addto@pscode{%
\pst@coor
2 copy
moveto
\pst@number\pst@dimc \psk@dimen CLW mul sub % Adjusted radius
\pst@tempa \pst@tempb
arc
closepath}%
\showpointsfalse
\end@ClosedObj}
\def\tx@Ellipse{Ellipse }
\def\psellipse{\pst@object{psellipse}}
\def\psellipse@i(#1){\@ifnextchar(%
{\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}}
\def\psellipse@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\addto@pscode{%
0 360
\pst@coor
\ifdim\psk@dimen\p@=\z@\else
\psk@dimen CLW mul
dup 4 -1 roll sub neg 3 1 roll sub
\fi
\pst@tempa
\tx@Ellipse
closepath}%
\def\pst@linetype{2}%
\end@ClosedObj}
\def\multips{\@ifnextchar({\def\pst@par{}\multips@ii}{\multips@i}}
\def\multips@i#1{\def\pst@par{rot=#1}\multips@ii}
\def\multips@ii(#1){\@ifnextchar({\multips@iii(#1)}{\multips@iii(\z@,\z@)(#1)}}
\long\def\multips@iii(#1)(#2)#3#4{%
\begingroup
\use@par
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\pst@cnta=#3\relax
\init@pscode
\addto@pscode{%
\pst@tempa T \the\pst@cnta\space \pslbrace
gsave \ifx\psk@rot\@empty\else\psk@rot rotate \fi}%
\hbox to\z@{%
\def\init@pscode{%
\addto@pscode{%
gsave
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor}}%
\def\use@pscode{\addto@pscode{grestore}}%
\def\psclip##1{\pst@misplaced\psclip}%
\def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
#4}%
\addto@pscode{grestore \pst@coor T \psrbrace repeat}%
\leavevmode
\use@pscode
\endgroup
\ignorespaces}
\def\scalebox#1{\pst@makebox{\@scalebox{#1}}}
\def\@scalebox#1{%
\begingroup
\pst@getscale{#1}\pst@tempa
\let\pst@tempc\pst@tempg
\let\pst@tempd\pst@temph
\@@scalebox
\endgroup}
\def\@@scalebox{%
\leavevmode
\hbox{%
\ifdim\pst@tempd\p@<\z@
\pst@dimg=\pst@tempd\ht\pst@hbox
\pst@dimh=\pst@tempd\dp\pst@hbox
\dp\pst@hbox=-\pst@dimg
\ht\pst@hbox=-\pst@dimh
\else
\ht\pst@hbox=\pst@tempd\ht\pst@hbox
\dp\pst@hbox=\pst@tempd\dp\pst@hbox
\fi
\pst@dima=\pst@tempc\wd\pst@hbox
\ifdim\pst@dima<\z@\kern-\pst@dima\fi
\pst@Verb{CP CP translate \pst@tempa \tx@NET}%
\hbox to \z@{\box\pst@hbox\hss}%
\pst@Verb{%
CP CP translate
1 \pst@tempc div 1 \pst@tempd div scale
\tx@NET}%
\ifdim\pst@dima>\z@\kern\pst@dima\fi}}
\pslongbox{Scalebox}{\scalebox}
\def\scaleboxto(#1,#2){\pst@makebox{\@scaleboxto(#1,#2)}}
\def\@scaleboxto(#1,#2){%
\begingroup
\pssetlength\pst@dima{#1}%
\pssetlength\pst@dimb{#2}%
\ifdim\pst@dima=\z@\else
\pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc
\edef\pst@tempc{\pst@tempc\space}%
\fi
\ifdim\pst@dimb=\z@
\ifdim\pst@dima=\z@
\@pstrickserr{%
\string\scaleboxto\space dimensions cannot both be zero}\@ehpa
\def\pst@tempa{}%
\def\pst@tempc{1 }%
\def\pst@tempd{1 }%
\else
\let\pst@tempd\pst@tempc
\fi
\else
\pst@dimc=\ht\pst@hbox
\advance\pst@dimc\dp\pst@hbox
\pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd
\edef\pst@tempd{\pst@tempd\space}%
\ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi
\fi
\edef\pst@tempa{\pst@tempc \pst@tempd scale }%
\@@scalebox
\endgroup}
\pslongbox{Scaleboxto}{\scaleboxto}
\def\tx@Rot{Rot }
\def\rotateleft{\pst@makebox{\@rotateleft\pst@hbox}}
\def\@rotateleft#1{%
\leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
\pst@Verb{90 \tx@Rot}
\vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}%
\pst@Verb{-90 \tx@Rot}}}}
\def\rotateright{\pst@makebox{\@rotateright\pst@hbox}}
\def\@rotateright#1{%
\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
\pst@Verb{-90 \tx@Rot}
\vbox to \z@{\hbox to \z@{\hss\box#1}\vss}%
\pst@Verb{90 \tx@Rot}}}}
\def\rotatedown{\pst@makebox{\@rotatedown\pst@hbox}}
\def\@rotatedown#1{%
\hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1%
\pst@Verb{180 \tx@Rot}%
\vbox to \z@{\hbox to \z@{\box#1\hss}\vss}%
\pst@Verb{-180 \tx@Rot}}}}
\pslongbox{Rotateleft}{\rotateleft}
\pslongbox{Rotateright}{\rotateright}
\pslongbox{Rotatedown}{\rotatedown}
\def\pst@starbox{%
\setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}}
\def\pst@@makesmall#1{%
\setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}}
\def\pst@@@makesmall#1{%
\pst@dimh=\psk@xref\wd#1%
\ifx\psk@yref\relax
\pst@dimg=\dp#1%
\else
\pst@dimg=\psk@yref\ht#1%
\advance\pst@dimg\psk@yref\dp#1%
\fi
\setbox#1=\hbox to\z@{%
\kern-\pst@dimh\vbox to\z@{\vss\box#1\kern-\pst@dimg}\hss}}
\def\psset@ref#1{\pst@expandafter\psset@@ref{#1}\@empty,,\@nil}
\def\psset@@ref#1#2,#3,#4\@nil{%
\def\psk@xref{.5}%
\def\psk@yref{.5}%
\let\pst@makesmall\pst@@@makesmall
\ifx\@empty#3\@empty
\@nameuse{getref@#1}%
\@nameuse{getref@#2}%
\else
\pst@checknum{#1#2}\psk@xref
\pst@checknum{#3}\psk@yref
\fi}
\def\getref@c{\let\pst@makesmall\pst@@makesmall}
\def\getref@t{\def\psk@yref{1}}
\def\getref@b{\def\psk@yref{0}}
\def\getref@B{\let\psk@yref\relax}
\def\getref@l{\def\psk@xref{0}}
\def\getref@r{\def\psk@xref{1}}
\psset@ref{c}
\def\psset@rot#1{%
\pst@expandafter{\@ifnextchar*{\psset@@@rot}{\psset@@rot}}{#1}\@nil}
\def\psset@@rot#1\@nil{%
\def\next##1@#1=##2@##3\@nil{%
\ifx\relax##2%
\pst@getangle{#1}\psk@rot
\else
\def\psk@rot{##2}%
\fi}%
\expandafter\next\pst@rottable @#1=\relax @\@nil}
\def\psset@@@rot#1#2\@nil{%
\psset@@rot#2\@nil
\edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\psk@rot add \fi}}
\def\pst@rotlist{mark RAngle /a ED cleartomark a neg }
\def\pst@rottable{%
@0=%
@U=%
@L=90 %
@D=180 %
@R=-90 %
@N=\pst@rotlist
@W=\pst@rotlist 90 add %
@S=\pst@rotlist 180 add %
@E=\pst@rotlist 90 sub }
\psset@rot{0}
\def\tx@RotBegin{RotBegin }
\def\tx@RotEnd{RotEnd }
\def\pst@rotate#1#2{%
\ifx#1\@empty\else
\setbox#2=\hbox{\pst@Verb{#1 \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}%
\fi}
\def\psput@cartesian#1{%
\hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}}
\def\psput@special#1{%
\hbox{%
\pst@Verb{{ \pst@coor } \tx@PutCoor \tx@PutBegin}%
\box#1%
\pst@Verb{\tx@PutEnd}}}
\def\tx@PutCoor{PutCoor }
\def\tx@PutBegin{PutBegin }
\def\tx@PutEnd{PutEnd }
\def\rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\rput@i}{\rput@ii}}}
\def\rput@i[#1]{\addto@par{ref={#1}}\rput@ii}
\def\rput@ii{\@ifnextchar({\rput@iv}{\rput@iii}}
\def\rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\rput@iv}{\rput@iv(\z@,\z@)}}
\def\rput@iv(#1){\pst@killglue\pst@makebox{\rput@v{#1}}}
\def\rput@v#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\pst@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\multirput{%
\def\pst@par{}%
\pst@ifstar{\@ifnextchar[{\multirput@i}{\multirput@ii}}}
\def\multirput@i[#1]{\addto@par{ref={#1}}\multirput@ii}
\def\multirput@ii{\@ifnextchar({\multirput@iv}{\multirput@iii}}
\def\multirput@iii#1{\addto@par{rot={#1}}\multirput@iv}
\def\multirput@iv(#1){%
\@ifnextchar({\multirput@v(#1)}{\multirput@v(\z@,\z@)(#1)}}
\def\multirput@v(#1,#2)(#3,#4)#5{%
\pst@makebox{\multirput@vi(#1,#2)(#3,#4){#5}}}
\def\multirput@vi(#1,#2)(#3,#4)#5{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\pst@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\pssetxlength\pst@dima{#1}%
\pssetylength\pst@dimb{#2}%
\pssetxlength\pst@dimc{#3}%
\pssetylength\pst@dimd{#4}%
\pst@cntg=#5\relax
\pst@cnth=\@ne
\leavevmode
\loop
\vbox to \z@{%
\vss
\hbox to \z@{\kern\pst@dima\copy\pst@hbox\hss}%
\vskip\pst@dimb}%
\ifnum\pst@cntg>\pst@cnth
\advance\pst@dima\pst@dimc
\advance\pst@dimb\pst@dimd
\advance\pst@cnth\@ne
\repeat
\endgroup
\ignorespaces}
\newif\if@fixedradius
\def\cput{\pst@object{cput}}
\def\cput@i{\@fixedradiusfalse\cput@ii}
\def\cput@ii{\pst@killglue\@ifnextchar({\cput@iv}{\cput@iii}}
\def\cput@iii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\cput@iv}{\cput@iv(\z@,\z@)}}
\def\cput@iv(#1){\pst@makebox{\cput@v{#1}}}
\def\cput@v#1{%
\begingroup
\use@par
\setbox\pst@hbox=\hbox{%
\psboxsepfalse
\if@fixedradius\psCirclebox@ii\else\pscirclebox@ii\fi}%
\pst@@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\Cput{\pst@object{Cput}}
\def\Cput@i{\@fixedradiustrue\cput@ii}
\newdimen\pslabelsep
\def\psset@labelsep#1{\pssetlength\pslabelsep{#1}}
\psset@labelsep{5pt}
\def\psset@refangle#1{\pst@expandafter\psset@@refangle{#1}\@nil}
\def\psset@@refangle#1\@nil{%
\def\next##1@#1=##2"##3@##4\@nil{%
\ifx\relax##2%
\pst@getangle{#1}\psk@refangle
\def\psk@uputref{}%
\else
\def\psk@refangle{##2 }%
\def\psk@uputref{##3}%
\fi}%
\expandafter\next\pst@refangletable @#1=\relax"@\@nil}
\def\pst@refangletable{%
@r=0"20%
@u=90"02%
@l=180"10%
@d=-90"01%
@ur=45"22%
@ul=135"12%
@dr=-135"21%
@dl=-45"11}
\psset@refangle{0}
% DG/SR modification begin - Mar. 24, 1999 - Patch 10
%\def\uput{\def\pst@par{}\@ifnextchar[{\uput@ii}{\uput@i}}
\def\uput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\uput@ii}{\uput@i}}} 
% DG/SR modification end
\def\uput@i#1{\addto@par{labelsep=#1}\uput@ii}
\def\uput@ii[#1]{%
\addto@par{refangle={#1}}%
\@ifnextchar({\uput@iv}{\uput@iii}}
\def\uput@iii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\uput@iv}{\uput@iv(\z@,\z@)}}
\def\uput@iv(#1){\pst@killglue\pst@makebox{\uput@v{#1}}}
\def\uput@v#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\uput@vi
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\uput@vi{%
\ifx\psk@uputref\@empty
\uput@vii\tx@UUput{}%
\else
\ifx\psk@rot\@empty
\expandafter\uput@viii\psk@uputref
\else
\uput@vii\tx@UUput{}%
\fi
\fi}
\def\uput@vii#1#2{%
\edef\pst@coor{%
\pst@number\pslabelsep
#2%
\pst@number{\wd\pst@hbox}%
\pst@number{\ht\pst@hbox}%
\pst@number{\dp\pst@hbox}%
\psk@refangle\space \ifx\psk@rot\@empty\else\psk@rot\space sub \fi
\tx@Uput #1}%
\setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}%
\setbox\pst@hbox=\psput@special\pst@hbox
\ifx\psk@rot\@empty\else\pst@rotate\psk@rot\pst@hbox\fi}
\def\uput@viii#1#2{%
\ifnum#1>\z@\ifnum#2>\z@\pslabelsep=.707\pslabelsep\fi\fi
\setbox\pst@hbox=\vbox to\z@{%
\ifnum#2=1 \vskip\pslabelsep\else\vss\fi
\hbox to\z@{%
\ifnum#1=2 \hskip\pslabelsep\else\hss\fi
\box\pst@hbox
\ifnum#1=1 \hskip\pslabelsep\else\hss\fi}%
\ifnum#2=2 \vskip\pslabelsep\else\vss\fi}}
\def\tx@Uput{Uput }
\def\tx@UUput{UUput }
\def\Rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Rput@ii}{\Rput@i}}}
\def\Rput@i#1{\addto@par{labelsep=#1}\Rput@ii}
\def\Rput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Rput@iv}{\Rput@iii}}
\def\Rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\Rput@iv}{\Rput@iv(\z@,\z@)}}
\def\Rput@iv(#1){\pst@killglue\pst@makebox{\Rput@v{#1}}}
\def\Rput@v#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\Rput@vi
\pst@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\Rput@vi{%
\pst@dimg=\dp\pst@hbox
\advance\pst@dimg\pslabelsep
\dp\pst@hbox=\pst@dimg
\pst@dimg=\ht\pst@hbox
\advance\pst@dimg\pslabelsep
\ht\pst@hbox=\pst@dimg
\setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}%
\def\oldpsput{%
\def\pst@par{}\pst@ifstar{\@ifnextchar[{\oldpsput@i}{\oldpsput@ii}}}
\def\oldpsput@i[#1]{\addto@par{ref={#1}}\oldpsput@ii}
\def\oldpsput@ii{\@ifnextchar<{\oldpsput@iii}{\oldpsput@iv}}
\def\oldpsput@iii<#1>{\rput@iii{#1}}
\def\OldPsput{\let\psput\oldpsput}
\def\NewPsput{\let\psput\rput}
\def\pspicture{\begingroup\pst@ifstar\pst@picture}
\def\pst@picture{%
\@ifnextchar[{\pst@@picture}{\pst@@picture[0]}}
\def\pst@@picture[#1]#2(#3,#4){%
\@ifnextchar({\pst@@@picture[#1](#3,#4)}%
{\pst@@@picture[#1](0,0)(#3,#4)}}
\def\pst@@@picture[#1](#2,#3)(#4,#5){%
\pssetxlength\pst@dima{#2}%
\pssetylength\pst@dimb{#3}%
\pssetxlength\pst@dimc{#4}%
\pssetylength\pst@dimd{#5}%
\ifdim\pst@dima>\pst@dimc
\pst@dimg=\pst@dima
\pst@dima=\pst@dimc
\pst@dimc=\pst@dimg
\fi
\ifdim\pst@dimb>\pst@dimd
\pst@dimg=\pst@dimb
\pst@dimb=\pst@dimd
\pst@dimd=\pst@dimg
\fi
\def\pst@tempa{#1}%
\setbox\pst@hbox=\hbox\bgroup
\begingroup\KillGlue
\@ifundefined{@latexerr}{}{\let\unitlength\psunit}%
\edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}\ignorespaces}
\def\pic@coor{(0,0)(0,0)(10,10)}
\def\endpspicture{%
\pst@killglue
\endgroup
\egroup
\ifdim\wd\pst@hbox=\z@\else
%\@pstrickserr{Extraneous space in the pspicture environment}%
%{Type \space <return> \space to procede.}%
\fi
\ht\pst@hbox=\pst@dimd
\dp\pst@hbox=-\pst@dimb
\setbox\pst@hbox=\hbox{%
\kern-\pst@dima
\ifx\pst@tempa\@empty\else
\advance\pst@dimd-\pst@dimb
\pst@dimd=\pst@tempa\pst@dimd
\advance\pst@dimd\pst@dimb
\lower\pst@dimd
\fi
\box\pst@hbox
\kern\pst@dimc}%
\if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi
\leavevmode\box\pst@hbox
\endgroup}
\@namedef{pspicture*}{\pspicture*}
\@namedef{endpspicture*}{\endpspicture}
\def\tx@BeginOL{BeginOL }
\def\tx@InitOL{InitOL }
\def\pst@initoverlay#1{\pst@Verb{\tx@InitOL /TheOL (#1) def}}
\def\AltOverlayMode{%
\def\pst@initoverlay##1{%
\pst@Verb{%
\tx@InitOL
/Visible { initclip } def
/Invisible {
CP newpath OLUnit itransform moveto clip newpath moveto
} def
/TheOL (##1) def}}}
\def\pst@overlay#1{%
\edef\curr@overlay{#1}%
\pst@Verb{(#1) BOL}%
\aftergroup\pst@endoverlay}
\def\pst@endoverlay{%
\pst@Verb{(\curr@overlay) BOL}}
\def\curr@overlay{all}
\newbox\theoverlaybox
\def\overlaybox{%
\global\setbox\theoverlaybox=\hbox\bgroup
\begingroup
\let\psoverlay\pst@overlay
\def\overlaybox{%
\@pstrickserr{Overlays cannot be nested}\@eha}%
\def\putoverlaybox{%
\@pstrickserr{You must end the overlay box
before using \string\putoverlaybox}}%
\psoverlay{main}%
\ignorespaces}
\def\endoverlaybox{\endgroup\egroup}
\def\putoverlaybox#1{%
\hbox{\pst@initoverlay{#1}\copy\theoverlaybox}}
\def\psoverlay{\@pstrickserr{\string\psoverlay\space
can only be used after \string\overlaybox}}
\ifx\pstcustomize\relax \input pstricks.con \fi
\catcode`\@=\PstAtCode\relax
%
\endinput
%%
%% END: pstricks.tex


math0208125.extracted_bib
\begin{thebibliography}{99}
\bibitem{An1}
G.\ Andrews,
Andrews, George E.
Plane partitions III: The weak Macdonald conjecture,
\emph{Inventiones Math.} {\bf 53} (1979), 193--225.
\bibitem{An2}
G.\ Andrews, Plane partitions V: The T.S.S.C.P. conjecture.
\emph{J.\ Combin.\ Theory Ser.\ A} {\bf 66} (1994), 28--39.
\bibitem{BBNY}
M.T.\ Batchelor, H.W.J.\ Blote, B.\ Nienhuis, and C.M.\ Yung,
Critical behavior of the fully packed loop model on the square lattice,
\emph{J.\ Phys.\ A} {\bf 29} (1996), L399-L404.
\bibitem{BGN}
M.T.\ Batchelor, J.\ de Gier, and B.\ Nienhuis,
The quantum symmetric XXZ chain at Delta=--1/2, alternating sign
matrices and plane partitions;
arXiv:{\tt cond-mat/0101385}.
\bibitem{Ba}
R.J.\ Baxter, \emph{Exactly Solved Models in Statistical Mechanics.}
Academic Press, London, 1982.
\bibitem{Br}
D.M.\ Bressoud,
\emph{Proofs and Confirmations: The Story of the
Alternating Sign Matrix Conjecture.}
Cambridge University, Cambridge, 1999.
\bibitem{BP}
D.\ Bressoud and J.\ Propp,
How the alternating sign matrix conjecture was solved,
\emph{Notices of the AMS} {\bf 46} (1999), 637--646;
{\tt www.ams.org/notices/199906/fea-bressoud.pdf}.
\bibitem{CEP}
H.\ Cohn, N.\ Elkies, and J.\ Propp,
Local statistics for random domino tilings of the Aztec diamond 
Duke Mathematical Journal {\bf 85} (1996), 117--166;
arXiv:{\tt math.CO/0008243}. 
\bibitem{CG}
J.\ Conway and R.\ Guy,
\emph{The Book of Numbers.}
Copernicus, 1996.
\bibitem{E}
T.\ Eisenk\"olbl,
2-enumerations of halved alternating sign matrices;
arXiv:{\tt math.CO/0106038}.
\bibitem{EKLP}
N.\ Elkies, G.\ Kuperberg, M.\ Larsen, and J.\ Propp,
Alternating-sign matrices and domino tilings,
\emph{J.\ Algebraic Combin.} {\bf 1} (1992), 111--132;
{\tt www.math.wisc.edu/$\sim$propp/aztec.ps.gz}.
\bibitem{FZ}
S.\ Fomin and A.\ Zelevinsky,
The Laurent phenomenon; 
arXiv:{\tt math.CO/0104241}.
\bibitem{JPS}
W.\ Jockusch, J.\ Propp, and P.\ Shor,
Random domino tilings and the arctic circle theorem;
arXiv:{\tt math.CO/9801068}.
\bibitem{KBI}
V.E.\ Korepin, N.M.\ Bogoliubov, and A.G.\ Izergin,
\emph{Quantum Inverse Scattering Method and Correlation Functions.}
Cambridge University Press, New York, 1993.
\bibitem{Ku1}
G.\ Kuperberg,
Another proof of the alternating sign matrix conjecture,
{\it Inter.\ Math.\ Res.\ Notes\/} {\bf 1996} (1996), 139--150;
math.CO/9712207.
\bibitem{Ku2}
G.\ Kuperberg, Symmetry classes of alternating-sign matrices 
under one roof; arXiv:{\tt math.CO/0008184}.
\bibitem{La}
W.\ Lang, 
On generalizations of the Stirling number triangles,
\emph{J.\ Integer Sequences} {\bf 3} (2000), 00.2.4.
\bibitem{MRR}
W.H.\ Mills, D.P.\ Robbins, and H.\ Rumsey,
Alternating-sign matrices and descending plane partitions,
\emph{J.\ Combin.\ Theory Ser.\ A} {\bf 34} (1983), 340--359.
\bibitem{Pr}
J. Propp,
Generating random elements of a finite distributive lattice,
\emph{Electron.\ J.\ Combinat.} {\bf 4}:2 (1997), R15.
\bibitem{RS1}
A.V.\ Razumov and Yu.G.\ Stroganov,
Spin chains and combinatorics;
arXiv:{\tt cond-mat/0012141}.
\bibitem{RS2}
A.V.\ Razumov and Yu.G.\ Stroganov,
Combinatorial nature of ground state vector of $O(1)$ loop model;
arXiv:{\tt math.CO/0104216}.
\bibitem{Ro1}
D.P.\ Robbins, 
The story of 1,2,7,42,429,7436,\dots,
\emph{Math.\ Intelligencer} {\bf 13} no.\ 2 (1991), 12--19.
\bibitem{Ro2}
D.P.\ Robbins, 
Symmetry classes of alternating sign matrices;
arXiv:{\tt math.CO/0008045}.
\bibitem{RR}
D.P.\ Robbins and H.\ Rumsey,
Determinants and alternating-sign matrices,
\emph{Advances in Math.} {\bf 62} (1986), 169--184.
\bibitem{So}
M.\ Somos,
{\tt grail.cba.csuohio.edu/$\sim$somos/nwic.html}.
\bibitem{St}
R.\ Stanley, 
Enumerative Combinatorics, vol. 1, 
Wadsworth and Brooks/Cole, Pacific Grove, CA, 1986, xi + 306 pages; 
second printing, Cambridge University Press, Cambridge, 1996. 
\bibitem{T}
O.\ Tsuchiya,
Determinant formula for the six-vertex model with reflecting end;
arXiv:{\tt solv-int/9804010}.
\bibitem{W}
B.\ Wieland,
A large dihedral symmetry of the set of alternating sign matrices;
{\tt www.combinatorics.org/Volume$\_$7/Abstracts/v7i1r37.html},
arXiv:{\tt math.CO/0006234}.
%LOOKS BAD; FIX IN PRESS
\bibitem{X}
G.\ Xin,
private communication.
\bibitem{Y}
B.-Y.\ Yang,
Three enumeration problems concerning Aztec diamonds, 
Ph.D.\ thesis, Department of Mathematics, 
Massachusetts Institute of Technology, Cambridge, Massachusetts, 1991.
\bibitem{Z}
D.\ Zeilberger,
Proof of the alternating sign matrix conjecture,
{\it Electronic J.\ Comb.\/} {\bf 3} (1996), R13;
arXiv:{\tt math.CO/9407211}.
\end{thebibliography}