diff --git a/books/bookvol7.1.pamphlet b/books/bookvol7.1.pamphlet index d76b336..9f6e885 100644 --- a/books/bookvol7.1.pamphlet +++ b/books/bookvol7.1.pamphlet @@ -33,38 +33,45 @@ The Blue Bayou image Copyright (c) 2004 Jocelyn Guidry Portions Copyright (c) 2004 Martin Dunstan -Portions Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. +Portions Copyright (c) 1991-2002, +The Numerical ALgorithms Group Ltd. All rights reserved. This book and the Axiom software is licensed as follows: -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are +Redistribution and use in source and binary forms, with or +without modification, are permitted provided that the following +conditions are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - - Neither the name of The Numerical ALgorithms Group Ltd. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + - Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + + - Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + + - Neither the name of The Numerical ALgorithms Group Ltd. + nor the names of its contributors may be used to endorse + or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. \end{verbatim} @@ -200,6 +207,8 @@ November 10, 2003 ((iHy)) \label{releaseNotes} \includegraphics[scale=.5]{ps/v71releasenotes.eps} \index{images!releasenotes} + +Called from ``Root Page'' (RootPage) \ref{RootPage} on page~\pageref{RootPage} \begin{itemize} \item ``Online information'' (onlineInformation) \ref{onlineInformation} on page~\pageref{onlineInformation} @@ -892,7 +901,8 @@ individual .ht files that are of a local nature. All unix commands should be done as macros defined here so we don't have to go hunting when moving between Unix versions. <>= -\newcommand{\newspadclient}[1]{xterm -n "#1" -e \$SPAD/bin/clef \$SPAD/bin/server/spadclient} +\newcommand{\newspadclient}[1] +{xterm -n "#1" -e \$SPAD/bin/clef \$SPAD/bin/server/spadclient} \newcommand{\searchwindow}[2]{\unixwindow{#1}{\$SPAD/lib/htsearch "#2"}} \newcommand{\unixwindow}[2]{\unixlink{#1}{#2}} \newcommand{\menuunixlink}[2]{\item\unixlink{\menuitemstyle{#1}}{#2}} @@ -932,15 +942,21 @@ have to go hunting when moving between Unix versions. \newcommand{\menuwindowlink}[2] {\item\windowlink{\menuitemstyle{#1}}{#2}} % These execute lisp commands in various flavors -\newcommand{\menulispcommand}[2] {\item\lispcommand{\menuitemstyle{#1}}{#2}} -\newcommand{\menulispdownlink}[2]{\item\lispdownlink{\menuitemstyle{#1}}{#2}} -\newcommand{\menulispmemolink}[2]{\item\lispmemolink{\menuitemstyle{#1}}{#2}} -\newcommand{\menulispwindowlink}[2]{\item\lispwindowlink{\menuitemstyle{#1}}{#2}} +\newcommand{\menulispcommand}[2] +{\item\lispcommand{\menuitemstyle{#1}}{#2}} +\newcommand{\menulispdownlink}[2] +{\item\lispdownlink{\menuitemstyle{#1}}{#2}} +\newcommand{\menulispmemolink}[2] +{\item\lispmemolink{\menuitemstyle{#1}}{#2}} +\newcommand{\menulispwindowlink}[2] +{\item\lispwindowlink{\menuitemstyle{#1}}{#2}} % This executes a unix command -\newcommand{\menuunixcmd}[2] {\item\unixcommand{\menuitemstyle{#1}}{#2}} -\newcommand{\searchresultentry}[3]{\tab{3}\item#3\tab{8}\downlink{\menuitemstyle{#1}}{#2}\newline} -\newcommand{\newsearchresultentry}[3]{\tab{3}\item#1\tab{8}\downlink{\menuitemstyle{#2}}{#3}\newline} +\newcommand{\menuunixcmd}[2]{\item\unixcommand{\menuitemstyle{#1}}{#2}} +\newcommand{\searchresultentry}[3] +{\tab{3}\item#3\tab{8}\downlink{\menuitemstyle{#1}}{#2}\newline} +\newcommand{\newsearchresultentry}[3] +{\tab{3}\item#1\tab{8}\downlink{\menuitemstyle{#2}}{#3}\newline} @ \subsection{Bitmaps and bitmap manipulation macros} @@ -963,7 +979,8 @@ have to go hunting when moving between Unix versions. % Including control panel pixmaps for help pages: -\newcommand{\helpbit}[1]{\centerline{\inputpixmap{\env{AXIOM}/doc/hypertex/pixmaps/{#1}}}} +\newcommand{\helpbit}[1] +{\centerline{\inputpixmap{\env{AXIOM}/doc/hypertex/pixmaps/{#1}}}} @ \subsection{HyperDoc button objects} @@ -993,7 +1010,8 @@ have to go hunting when moving between Unix versions. % Macro for downward compatibility (?). -\newcommand{\simplebox}[2]{\inputbox[#1]{#2}{\htbitmap{xbox}}{\htbitmap{xopenbox}}} +\newcommand{\simplebox}[2] +{\inputbox[#1]{#2}{\htbitmap{xbox}}{\htbitmap{xopenbox}}} @ \subsection{HyperDoc graphics macros} @@ -1001,19 +1019,24 @@ have to go hunting when moving between Unix versions. % Including viewport bitmaps within \HyperName pages: \newcommand{\viewport}[1]{\inputimage{{#1}.view/image}} -\newcommand{\axiomViewport}[1]{\inputimage{\env{AXIOM}/doc/viewports/{#1}.view/image}} +\newcommand{\axiomViewport}[1] +{\inputimage{\env{AXIOM}/doc/viewports/{#1}.view/image}} \newcommand{\spadviewport}[1]{\axiomViewport{#1}} % Creating a real live viewport: \newcommand{\viewportbutton}[2]{\unixcommand{#1}{viewalone #2}} -\newcommand{\axiomViewportbutton}[2]{\unixcommand{#1}{viewalone \$AXIOM/doc/viewports/{#2}}} +\newcommand{\axiomViewportbutton}[2] +{\unixcommand{#1}{viewalone \$AXIOM/doc/viewports/{#2}}} \newcommand{\spadviewportbutton}[2]{\axiomViewportbutton{#1}{#2}} % Making active viewport buttons: -\newcommand{\viewportasbutton}[1]{\unixcommand{\inputimage{{#1}.view/image}}{viewalone {#1}}} -\newcommand{\axiomViewportasbutton}[1]{\unixcommand{\inputimage{\env{AXIOM}/doc/viewports/{#1}.view/image}}{viewalone \$AXIOM/doc/viewports/{#1}}} +\newcommand{\viewportasbutton}[1] +{\unixcommand{\inputimage{{#1}.view/image}}{viewalone {#1}}} +\newcommand{\axiomViewportasbutton}[1] +{\unixcommand{\inputimage{\env{AXIOM}/doc/viewports/{#1}.view/image}} +{viewalone \$AXIOM/doc/viewports/{#1}}} \newcommand{\spadviewportasbutton}[1]{\axiomViewportasbutton{#1}} @ @@ -1146,15 +1169,21 @@ have to go hunting when moving between Unix versions. \newcommand{\mathOrSpad}[1]{{\spad{#1}}} \newcommand{\menuspadref}[2]{\menudownlink{#1}{#2Page}} \newcommand{\menuxmpref}[1]{\menudownlink{`#1'}{#1XmpPage}} -\newcommand{\noOutputXtc}[2]{\xtc{#1}{#2}} % comment and then \spadcommand or spadsrc +% comment and then \spadcommand or spadsrc +\newcommand{\noOutputXtc}[2]{\xtc{#1}{#2}} \newcommand{\not=}{\inputbitmap{\htbmdir{}/not=.bitmap}} \newcommand{\notequal}{\inputbitmap{\htbmdir{}/notequal.bitmap}} -\newcommand{\nullXtc}[2]{\xtc{#1}{#2}} % comment and then \spadcommand or spadsrc +% comment and then \spadcommand or spadsrc +\newcommand{\nullXtc}[2]{\xtc{#1}{#2}} \newcommand{\nullspadcommand}[1]{\spadcommand} -\newcommand{\pp}{\newline} % Use this instead of \par for now. -\newcommand{\psXtc}[3]{\xtc{#1}{#2}} % comment and then \spadcommand or spadsrc +% Use this instead of \par for now. +\newcommand{\pp}{\newline} +% comment and then \spadcommand or spadsrc +\newcommand{\psXtc}[3]{\xtc{#1}{#2}} \newcommand{\ref}[1]{(see the graph)} -\newcommand{\showBlurb}[1]{Issue the system command \spadcmd{)show #1} to display the full list of operations defined by \spadtype{#1}.} +\newcommand{\showBlurb}[1] +{Issue the system command \spadcmd{)show #1} to display the full list +of operations defined by \spadtype{#1}.} \newcommand{\smath}[1]{\mathOrSpad{#1}} \newcommand{\spadFileExt}{.spad} \newcommand{\spadkey}[1]{} @@ -1172,7 +1201,8 @@ have to go hunting when moving between Unix versions. \newcommand{\xdefault}[1]{The default value is {\tt "#1"}.} \newcommand{\xmpLine}[2]{{\tt #1}\newline} % have to improve someday \newcommand{\xmpref}[1]{\downlink{`#1'}{#1XmpPage}} -\newcommand{\xtc}[2]{#1 #2} % comment and then \spadcommand or spadsrc +% comment and then \spadcommand or spadsrc +\newcommand{\xtc}[2]{#1 #2} % glossary terms \newcommand{\axiomGloss}[1]{\lispdownlink{#1}{(|htGloss| '|#1|)}} @@ -1187,12 +1217,14 @@ have to go hunting when moving between Unix versions. % constructors \newcommand{\axiomType}[1]{\lispdownlink{#1}{(|spadType| '|#1|)}} \newcommand{\spadtype}[1]{\axiomType{#1}} -\newcommand{\nonLibAxiomType}[1]{{\it #1}} % things that browse can't handle +% things that browse can't handle +\newcommand{\nonLibAxiomType}[1]{{\it #1}} \newcommand{\pspadtype}[1]{\nonLibAxiomType{#1}} -\newcommand{\axiom} [1]{{\tt #1}} % note font +\newcommand{\axiom} [1]{{\tt #1}} % note font \newcommand{\spad} [1]{\axiom{#1}} -\newcommand{\spadvar} [1]{\axiom{#1}} % exists in ++ comments; to be removed +% exists in ++ comments; to be removed +\newcommand{\spadvar} [1]{\axiom{#1}} \newcommand{\s} [1]{\axiom{#1}} \newcommand{\httex}[2]{#1} @@ -1205,14 +1237,14 @@ have to go hunting when moving between Unix versions. % % Example: \spadfunFromX{reverse}{List} prints as reverse! % -% In the "From" versions, the first arg is function name, second is constructor -% where exported. +% In the "From" versions, the first arg is function name, +% second is constructor where exported. % % Use the "op" flavors of "-", "+", "*" etc, otherwise the "fun" flavors -\newcommand{\userfun} [1]{{\bf #1}} % example, non-library function names +\newcommand{\userfun} [1]{{\bf #1}} % example, non-library function names -\newcommand{\fakeAxiomFun}[1]{{\bf #1}} % not really a library function +\newcommand{\fakeAxiomFun}[1]{{\bf #1}} % not really a library function \newcommand{\pspadfun} [1]{\fakeAxiomFun{#1}} \newcommand{\axiomFun} [1]{\lispdownlink{#1}{(|oPage| '|#1|)}} @@ -1269,10 +1301,12 @@ have to go hunting when moving between Unix versions. \newcommand{\dlink}[2]{\downlink{#2}{#1}} \newcommand{\dom}[1]{\lispdownlink{#1}{(|conPage| '|#1|)}} -\newcommand{\example}[1]{\newline\indent{5}\spadcommand{#1}\indent{0}\newline} +\newcommand{\example}[1] +{\newline\indent{5}\spadcommand{#1}\indent{0}\newline} \newcommand{\lisp}[2]{\lispdownlink{#2}{#1}} \newcommand{\spadatt} [1]{{\it #1}} -\newcommand{\indented}[2]{\indentrel{#1}\newline #2\indentrel{-#1}\newline} +\newcommand{\indented}[2] +{\indentrel{#1}\newline #2\indentrel{-#1}\newline} \newcommand{\keyword}[1]{\lispdownlink{#1}{(|htsn| '|#1|)}} \newcommand{\op}[1]{\lispdownlink{#1}{(|htsn| '|#1|)}} \newcommand{\spadignore}[1]{#1} @@ -1290,7 +1324,8 @@ have to go hunting when moving between Unix versions. \newcommand{\hidepaste}{\htbitmap{sup3d}} \newcommand{\spadpaste}[1]{ \newline - \begin{paste}{\pagename Empty \examplenumber}{\pagename Patch \examplenumber} + \begin{paste}{\pagename Empty \examplenumber} +{\pagename Patch \examplenumber} \pastebutton{\pagename Empty \examplenumber}{\showpaste} \tab{5}\spadcommand{#1} \end{paste} @@ -1298,7 +1333,8 @@ have to go hunting when moving between Unix versions. \newcommand{\graphpaste}[1]{ \newline - \begin{paste}{\pagename Empty \examplenumber}{\pagename Patch \examplenumber} + \begin{paste}{\pagename Empty \examplenumber} +{\pagename Patch \examplenumber} \pastebutton{\pagename Empty \examplenumber}{\showpaste} \tab{5}\spadgraph{#1} \end{paste} @@ -1312,6 +1348,7 @@ have to go hunting when moving between Unix versions. @ \section{Special Hyperdoc pages} \subsection{Not Connected to Axiom} +\label{SpadNotConnectedPage} \index{pages!SpadNotConnectedPage!util.ht} \index{util.ht!pages!SpadNotConnectedPage} \index{SpadNotConnectedPage!util.ht!pages} @@ -1327,6 +1364,7 @@ the button you pressed. @ \subsection{Do You Really Want to Exit?} +\label{ProtectedQuitPage} \index{pages!ProtectedQuitPage!util.ht} \index{util.ht!pages!ProtectedQuitPage} \index{ProtectedQuitPage!util.ht!pages} @@ -1343,6 +1381,7 @@ the button you pressed. @ \subsection{Missing Page} +\label{UnknownPage} \index{pages!UnknownPage!util.ht} \index{util.ht!pages!UnknownPage} \index{UnknownPage!util.ht!pages} @@ -1357,6 +1396,7 @@ The page you requested was not found in the \HyperName{} database. @ \subsection{Something is Wrong} +\label{ErrorPage} \index{pages!ErrorPage!util.ht} \index{util.ht!pages!ErrorPage} \index{ErrorPage!util.ht!pages} @@ -1371,6 +1411,7 @@ The page you requested was not found in the \HyperName{} database. @ \subsection{Sorry!} +\label{Unlinked} \index{pages!Unlinked!util.ht} \index{util.ht!pages!Unlinked} \index{Unlinked!util.ht!pages} @@ -1471,6 +1512,9 @@ What would you like to do? \label{RootPageLogo} \includegraphics[scale=.5]{ps/v71rootpagelogo.eps} \index{images!rootpagelogo} + +Called from ``Root Page'' (RootPage) +\ref{RootPage} on page~\pageref{RootPage} \index{pages!RootPageLogo!rootpage.ht} \index{rootpage.ht!pages!RootPageLogo} \index{RootPageLogo!rootpage.ht!pages} @@ -1484,12 +1528,13 @@ BSD license. For further information visit http://axiom.axiom-developer.org \newline Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997 by -the Numerical Algorithms Group Limited, which is also the proprietor of the -trademarks Axiom and the Axiom logo and of the registered -trademarks NAG and the NAG logo. +the Numerical Algorithms Group Limited, which is also the +proprietor of the trademarks Axiom and the Axiom logo and +of the registered trademarks NAG and the NAG logo. \newline -Axiom was originally developed by the Research Division of the International -Business Machines Corporation, Yorktown Heights, New York, USA. +Axiom was originally developed by the Research Division of +the International Business Machines Corporation, Yorktown +Heights, New York, USA. \endscroll \end{page} @@ -1499,6 +1544,9 @@ Business Machines Corporation, Yorktown Heights, New York, USA. \includegraphics[scale=.5]{ps/v71topsettingspage.eps} \index{images!topsettingspage} +Called from ``Root Page'' (RootPage) \ref{RootPage} on +page~\pageref{RootPage} + See ``Commands'' (ugSysCmdPage) \ref{ugSysCmdPage} on page~\pageref{ugSysCmdPage} @@ -1527,6 +1575,9 @@ management and change Axiom system variables. \label{TopExamplePage} \includegraphics[scale=.5]{ps/v71topexamplepage.eps} \index{images!topexamplepage} + +Called from ``Root Page'' (RootPage) \ref{RootPage} on +page~\pageref{RootPage} \begin{itemize} \item ``Graphics'' (GraphicsExamplePage) \ref{GraphicsExamplePage} on page~\pageref{GraphicsExamplePage}. @@ -1571,6 +1622,9 @@ What would you like to see? \label{TopReferencePage} \includegraphics[scale=.5]{ps/v71topreferencepage.eps} \index{images!topreferencepage} + +Called from ``Root Page'' (RootPage) \ref{RootPage} on +page~\pageref{RootPage} \begin{itemize} \item ``this font'' (YouTriedIt) \ref{YouTriedIt} on page~\pageref{YouTriedIt} @@ -1659,16 +1713,19 @@ A glossary of Axiom terms. \begin{scroll} \beginitems -\item\downlink{\menuitemstyle{Essential Introduction to the NAG Foundation Library}}{manpageXXintro} +\item\downlink{\menuitemstyle +{Essential Introduction to the NAG Foundation Library}}{manpageXXintro} \item Foundation Library Chapter Manual Pages \beginitems -\item\downlink{\menuitemstyle{C02}}{manpageXXc02}\tab{8} Zeros of Polynomials +\item\downlink{\menuitemstyle{C02}} +{manpageXXc02}\tab{8} Zeros of Polynomials \indentrel{8}\newline \table{ {\downlink{c02aff}{manpageXXc02aff}} {\downlink{c02agf}{manpageXXc02agf}} }\indentrel{-8} -\item\downlink{\menuitemstyle{C05}}{manpageXXc05}\tab{8} Roots of One or More Transcendental Equations +\item\downlink{\menuitemstyle{C05}} +{manpageXXc05}\tab{8} Roots of One or More Transcendental Equations \indentrel{8}\newline \table{ {\downlink{c05adf}{manpageXXc05adf}} @@ -1676,7 +1733,8 @@ A glossary of Axiom terms. {\downlink{c05pbf}{manpageXXc05pbf}} {\downlink{c05zaf}{manpageXXc05zaf}} }\indentrel{-8} -\item\downlink{\menuitemstyle{C06}}{manpageXXc06}\tab{8} Summation of Series +\item\downlink{\menuitemstyle{C06}} +{manpageXXc06}\tab{8} Summation of Series \indentrel{8}\newline \table{ {\downlink{c06eaf}{manpageXXc06eaf}} @@ -1708,7 +1766,8 @@ A glossary of Axiom terms. {\downlink{d01gaf}{manpageXXd01gaf}} {\downlink{d01gbf}{manpageXXd01gbf}} }\indentrel{-8} -\item\downlink{\menuitemstyle{D02}}{manpageXXd02}\tab{8} Ordinary Differential Equations +\item\downlink{\menuitemstyle{D02}} +{manpageXXd02}\tab{8} Ordinary Differential Equations \indentrel{8}\newline \table{ {\downlink{d02bbf}{manpageXXd02bbf}} @@ -1720,7 +1779,8 @@ A glossary of Axiom terms. {\downlink{d02kef}{manpageXXd02kef}} {\downlink{d02raf}{manpageXXd02raf}} }\indentrel{-8} -\item\downlink{\menuitemstyle{D03}}{manpageXXd03}\tab{8} Partial Differential Equations +\item\downlink{\menuitemstyle{D03}} +{manpageXXd03}\tab{8} Partial Differential Equations \indentrel{8}\newline \table{ {\downlink{d03edf}{manpageXXd03edf}} @@ -1741,7 +1801,8 @@ A glossary of Axiom terms. {\downlink{e01sef}{manpageXXe01sef}} {\downlink{e01sff}{manpageXXe01sff}} }\indentrel{-8} -\item\downlink{\menuitemstyle{E02}}{manpageXXe02}\tab{8} Curve and Surface Fitting +\item\downlink{\menuitemstyle{E02}} +{manpageXXe02}\tab{8} Curve and Surface Fitting \indentrel{8}\newline \table{ {\downlink{e02adf}{manpageXXe02adf}} @@ -1763,7 +1824,8 @@ A glossary of Axiom terms. {\downlink{e02gaf}{manpageXXe02gaf}} {\downlink{e02zaf}{manpageXXe02zaf}} }\indentrel{-8} -\item\downlink{\menuitemstyle{E04}}{manpageXXe04}\tab{8} Minimizing or Maximizing a Function +\item\downlink{\menuitemstyle{E04}} +{manpageXXe04}\tab{8} Minimizing or Maximizing a Function \indentrel{8}\newline \table{ {\downlink{e04dgf}{manpageXXe04dgf}} @@ -1780,7 +1842,8 @@ A glossary of Axiom terms. {\downlink{e04ycf}{manpageXXe04ycf}} }\indentrel{-8} \item\downlink{\menuitemstyle{F}}{manpageXXf}\tab{8} Linear Algebra -\item\downlink{\menuitemstyle{F01}}{manpageXXf01}\tab{8} Matrix Operations, Including Inversion +\item\downlink{\menuitemstyle{F01}} +{manpageXXf01}\tab{8} Matrix Operations, Including Inversion \indentrel{8}\newline \table{ {\downlink{f01brf}{manpageXXf01brf}} @@ -1794,7 +1857,8 @@ A glossary of Axiom terms. {\downlink{f01rdf}{manpageXXf01rdf}} {\downlink{f01ref}{manpageXXf01ref}} }\indentrel{-8} -\item\downlink{\menuitemstyle{F02}}{manpageXXf02}\tab{8} Eigenvalues and Eigenvectors +\item\downlink{\menuitemstyle{F02}} +{manpageXXf02}\tab{8} Eigenvalues and Eigenvectors \indentrel{8}\newline \table{ {\downlink{f02aaf}{manpageXXf02aaf}} @@ -1813,7 +1877,8 @@ A glossary of Axiom terms. {\downlink{f02wef}{manpageXXf02wef}} {\downlink{f02xef}{manpageXXf02xef}} }\indentrel{-8} -\item\downlink{\menuitemstyle{F04}}{manpageXXf04}\tab{8} Simultaneous Linear Equations +\item\downlink{\menuitemstyle{F04}} +{manpageXXf04}\tab{8} Simultaneous Linear Equations \indentrel{8}\newline \table{ {\downlink{f04adf}{manpageXXf04adf}} @@ -1828,7 +1893,8 @@ A glossary of Axiom terms. {\downlink{f04mcf}{manpageXXf04mcf}} {\downlink{f04qaf}{manpageXXf04qaf}} }\indentrel{-8} -\item\downlink{\menuitemstyle{F07}}{manpageXXf07}\tab{8} Linear Equations (LAPACK) +\item\downlink{\menuitemstyle{F07}} +{manpageXXf07}\tab{8} Linear Equations (LAPACK) \indentrel{8}\newline \table{ {\downlink{f07adf}{manpageXXf07adf}} @@ -1836,7 +1902,8 @@ A glossary of Axiom terms. {\downlink{f07fdf}{manpageXXf07fdf}} {\downlink{f07fef}{manpageXXf07fef}} }\indentrel{-8} -\item\downlink{\menuitemstyle{S}}{manpageXXs}\tab{8} Approximations of Special Functions +\item\downlink{\menuitemstyle{S}} +{manpageXXs}\tab{8} Approximations of Special Functions \indentrel{8}\newline \table{ {\downlink{s01eaf}{manpageXXs01eaf}} @@ -1879,10 +1946,13 @@ A glossary of Axiom terms. {\downlink{s21bdf}{manpageXXs21bdf}} }\indentrel{-8} \enditems -\item\downlink{\menuitemstyle{Introduction to NAG On-Line Documentation}}{manpageXXonline} +\item\downlink{\menuitemstyle +{Introduction to NAG On-Line Documentation}}{manpageXXonline} \item\downlink{\menuitemstyle{Keywords in Context}}{manpageXXkwic} -\item\downlink{\menuitemstyle{List of all \naglib{} Routines}}{manpageXXsummary} -\item\downlink{\menuitemstyle{Converting from the Workstation Library}}{manpageXXconvert} +\item\downlink{\menuitemstyle{List of all \naglib{} Routines}} +{manpageXXsummary} +\item\downlink{\menuitemstyle +{Converting from the Workstation Library}}{manpageXXconvert} \enditems \end{scroll} \end{page} @@ -1892,11 +1962,16 @@ A glossary of Axiom terms. @ \subsection{Abstract Algebra} \label{AlgebraPage} +\includegraphics[scale=.5]{ps/v71algebrapage.eps} +\index{images!algebrapage} + +Called from ``Topics'' (TopicPage) \ref{TopicPage} on +page~\pageref{TopicPage} \begin{itemize} -\item NumberTheoryPage \ref{NumberTheoryPage} on -page~pageref{NumberTheoryPage} -\item GroupTheoryPage \ref{GroupTheoryPage} on -page~pageref{GroupTheoryPage} +\item ``Number Theory'' (NumberTheoryPage)\\ +\ref{NumberTheoryPage} on page~pageref{NumberTheoryPage} +\item ``Group Theory'' (GroupTheoryPage)\\ +\ref{GroupTheoryPage} on page~pageref{GroupTheoryPage} \end{itemize} \index{pages!AlgebraPage!algebra.ht} \index{algebra.ht!pages!AlgebraPage} @@ -1925,8 +2000,8 @@ Permutation groups; representation theory. \begin{itemize} \item ugProblemGaloisPage \ref{ugProblemGaloisPage} on page~pageref{ugProblemGaloisPage} -\item IntegerNumberTheoryFunctionsXmpPage -\ref{IntegerNumberTheoryFunctionsXmpPage} on +\item IntegerNumberTheoryFunctionsXmpPage \\ +\ref{IntegerNumberTheoryFunctionsXmpPage} on\\ page~pageref{IntegerNumberTheoryFunctionsXmpPage} \end{itemize} \index{pages!NumberTheoryPage!algebra.ht} @@ -1940,7 +2015,8 @@ facilities. \beginmenu \menulink{Galois Groups}{ugProblemGaloisPage} \newline Computation of Galois groups using factorizations over number fields. -\menulink{Number Theory Functions}{IntegerNumberTheoryFunctionsXmpPage}\newline +\menulink{Number Theory Functions} +{IntegerNumberTheoryFunctionsXmpPage}\newline Some functions of interest to number theorists. \endmenu \endscroll @@ -1967,18 +2043,17 @@ Some functions of interest to number theorists. \begin{page}{AssociationListXmpPage}{AssociationList} \beginscroll -The \spadtype{AssociationList} constructor provides a general structure for -associative storage. -This type provides association lists in which data objects can be saved -according to keys of any type. -For a given association list, specific types must be chosen for the keys and -entries. -You can think of the representation of an association list as a list -of records with key and entry fields. +The \spadtype{AssociationList} constructor provides a general +structure for associative storage. This type provides association +lists in which data objects can be saved according to keys of any +type. For a given association list, specific types must be chosen for +the keys and entries. You can think of the representation of an +association list as a list of records with key and entry fields. -Association lists are a form of table and so most of the operations available -for \spadtype{Table} are also available for \spadtype{AssociationList}. -They can also be viewed as lists and can be manipulated accordingly. +Association lists are a form of table and so most of the operations +available for \spadtype{Table} are also available for +\spadtype{AssociationList}. They can also be viewed as lists and can +be manipulated accordingly. \xtc{ This is a \pspadtype{Record} type with age and gender fields. @@ -2036,856 +2111,16 @@ The second argument is the index of the element to delete. \spadpaste{delete!(al,1) \free{al6}\bound{al7}} } -For more information about tables, see \downlink{`Table'}{TableXmpPage}\ignore{Table}. -For more information about lists, see \downlink{`List'}{ListXmpPage}\ignore{List}. +For more information about tables, +see \downlink{`Table'}{TableXmpPage}\ignore{Table}. +For more information about lists, +see \downlink{`List'}{ListXmpPage}\ignore{List}. \showBlurb{AssociationList} \endscroll \autobuttons \end{page} @ -\section{annaex.ht} -\subsection{Axiom/NAG Expert System} -\label{UXANNA} -\index{pages!UXANNA!annaex.ht} -\index{annaex.ht!pages!UXANNA} -\index{UXANNA!annaex.ht!pages} -<>= -\begin{page}{UXANNA}{Axiom/NAG Expert System} -\centerline{\tt{\inputbitmap{\htbmdir{}/anna_logo.xbm}}\rm} -\newline -\centerline{This expert system chooses, and uses, NAG numerical routines.} -\begin{scroll} -\blankline -\indent{2} -\beginmenu -\menumemolink{Integration}{UXANNAInt} -\blankline -\menumemolink{Ordinary Differential Equations}{UXANNAOde} -\blankline -\menumemolink{Partial Differential Equations}{UXANNAPde} -\blankline -\menumemolink{Optimization}{UXANNAOpt} -\vspace{10} -\menumemolink{About the Axiom/NAG Expert System}{UXANNATxt} -%\unixcommand{(Postscript)}{ghostview \ \htbmdir{}/anna.ps} -%\blankline -%\menumemolink{How to use the NAGLINK}{nagLinkIntroPage} -%\blankline -%\menumemolink{Tutorial}{tutorialIntroPage} -%\blankline -%\item \menulispdownlink{Interpolation}{(|interp1|} -\endmenu -\indent{0} -\end{scroll} -%\unixcommand{Netscape}{netscape \ http:\/\/www.bath.ac.uk\/\~masbjd\/anna.html} -\autobutt{HelpContents} -\end{page} - -@ -\subsection{Integration} -\label{UXANNAInt} -\index{pages!UXANNAInt!annaex.ht} -\index{annaex.ht!pages!UXANNAInt} -\index{UXANNAInt!annaex.ht!pages} -<>= -\begin{page}{UXANNAInt}{Integration} -Welcome to the Integration section of {\tt -\inputbitmap{\htbmdir{}/anna.xbm.tiny}}, the {\em Axiom/NAG Expert -System}. This system chooses, and uses, NAG numerical routines. -\begin{scroll} -\blankline -\indent{2} -\beginmenu -\item \menulispdownlink{Integration}{(|annaInt|)}\space{}\newline -\indent{5} Integrating a function over a finite or infinite range. -\blankline -\item \menulispdownlink{Multiple Integration}{(|annaMInt|)}\space{}\newline -\indent{5} Integrating a multivariate function over a finite space. -The dimensions of the space need to be 2 <= n <= 15. -\blankline -\menudownlink{Examples}{UXANNAIntEx}\space{}\newline -\indent{5} Examples of integration. These examples cover all of the major -methods. Parameters can be changed to investigate the effect -on the choice of method. -\endmenu -\indent{0} -\end{scroll} -\autobutt{MainHelp} -\end{page} - -@ -\subsection{Ordinary Differential Equations} -\label{UXANNAOde} -\index{pages!UXANNAOde!annaex.ht} -\index{annaex.ht!pages!UXANNAOde} -\index{UXANNAOde!annaex.ht!pages} -<>= -\begin{page}{UXANNAOde}{Ordinary Differential Equations} -Welcome to the Ordinary Differential Equations section of {\tt -\inputbitmap{\htbmdir{}/anna.xbm.tiny}}, the -{\em Axiom/NAG Expert System}. -This system chooses, and uses, NAG numerical routines. -\begin{scroll} -\blankline -\blankline -\indent{2} -\beginmenu -\item \menulispdownlink{Ordinary Differential Equations}{(|annaOde|)}\space{}\newline -\indent{5} Finding a solution to an Initial Value Problem of a set of Ordinary Differential Equations. -\blankline -\menudownlink{Examples}{UXANNAOdeEx}\newline -\indent{5} Examples of ODE problems with various features using both stiff -and non-stiff methods. Parameters can be changed to investigate the effect -on the choice of method. -\autobutt{MainHelp} -\endmenu -\indent{0} -\end{scroll} -\end{page} - -@ -\subsection{Optimization} -\label{UXANNAOpt} -\index{pages!UXANNAOpt!annaex.ht} -\index{annaex.ht!pages!UXANNAOpt} -\index{UXANNAOpt!annaex.ht!pages} -<>= -\begin{page}{UXANNAOpt}{Optimization} -Welcome to the Optimization section of {\tt -\inputbitmap{\htbmdir{}/anna.xbm.tiny}}, the {\em Axiom/NAG Expert System}. -This system chooses, and uses, NAG numerical routines. -\begin{scroll} -\blankline -\indent{2} -\beginmenu -\item \menulispdownlink{Optimization of a Single Multivariate Function} -{(|annaOpt|)}\space{}\newline -\indent{6} Finding the minimum of a function in n variables. -\newline -\indent{6} Linear Programming and Quadratic Programming problems. -\blankline -\indent{4} -\beginmenu -\menudownlink{Examples}{UXANNAOptEx}\newline -\indent{8} Examples of optimization problems with various constraint features. -\endmenu -\blankline -\item \menulispdownlink{Optimization of a set of observations of a data set} -{(|annaOpt2|)}\space{}\newline -\indent{6} Least-squares problems. -\newline -\indent{6} Checking the goodness of fit of a least-squares model. -\blankline -\indent{4} -\beginmenu -\menudownlink{Examples}{UXANNAOpt2Ex}\newline -\indent{8} Examples of least squares problems. -\endmenu -\endmenu -\indent{0} -\end{scroll} -\autobutt{MainHelp} -\end{page} - -@ -\subsection{Partial Differential Equations} -\label{UXANNAPde} -\index{pages!UXANNAPde!annaex.ht} -\index{annaex.ht!pages!UXANNAPde} -\index{UXANNAPde!annaex.ht!pages} -<>= -\begin{page}{UXANNAPde}{Partial Differential Equations} -Welcome to the Partial Differential Equations section of {\tt -\inputbitmap{\htbmdir{}/anna.xbm.tiny}}, the -{\em Axiom/NAG Expert System}. -\begin{scroll} -\indent{2} -\beginmenu -\menulispdownlink{Second Order Elliptic Partial Differential Equation}{(|annaPDESolve|)} -\newline -\indent{4} Discretizing the PDE: -\newline -\centerline{\inputbitmap{\htbmdir{}/d03eef.xbm}} -defined on a rectangular region with boundary conditions of the form -\centerline{\inputbitmap{\htbmdir{}/d03eef1.bitmap}} -and solving the resulting -seven-diagonal finite difference equations using a multigrid technique. -\blankline -%\menulispdownlink{Helmholtz Equation in 3-D, Cartesian Coordinates}{(|d03fafVars|)} -%\newline -%\indent{4} Descretizing the PDE: -%\newline -%\centerline{\inputbitmap{\htbmdir{}/d03faf.xbm}} -%and solving the resulting -%seven-diagonal finite difference equations using a method based on the Fast -%Fourier Transform. -\endmenu -\end{scroll} -\autobutt{MainHelp} -\end{page} - -@ -\subsection{Examples Using the Axiom/NAG Expert System} -\label{UXANNAOptEx} -\index{pages!UXANNAOptEx!annaex.ht} -\index{annaex.ht!pages!UXANNAOptEx} -\index{UXANNAOptEx!annaex.ht!pages} -<>= -\begin{page}{UXANNAOptEx}{Examples Using the Axiom/NAG Expert System} -\begin{scroll} -Select any of these examples and you will be presented with a page which -contains active areas for the function and its parameters. -\blankline -These parameters can be altered by selecting the area and replacing the -default parameters by the new values. -\blankline -\beginmenu -\item \menulispdownlink{Example 1: \newline -\indent{2} Minimize the function: -\centerline{\inputbitmap{\htbmdir{}/opt1.xbm}}}{(|annaOptDefaultSolve1|)}\space{} -\blankline -\item \menulispdownlink{Example 2: \newline -\indent{2} Minimize the function: -\centerline{\inputbitmap{\htbmdir{}/opt2.xbm}}}{(|annaOptDefaultSolve2|)}\space{} -\newline \indent{3} With conditions: -\centerline{\inputbitmap{\htbmdir{}/opt2c.xbm}} -\blankline -\item \menulispdownlink{Example 3: \newline -\indent{2} Minimize the function: -\centerline{\inputbitmap{\htbmdir{}/opt3.xbm}}}{(|annaOptDefaultSolve3|)}\space{} -\newline \indent{3} With conditions: -\centerline{\inputbitmap{\htbmdir{}/opt3c1.xbm}} -\centerline{\inputbitmap{\htbmdir{}/opt3c2.xbm}} -\blankline -\item \menulispdownlink{Example 4: \newline -\indent{2} Minimize the function: -\centerline{\inputbitmap{\htbmdir{}/opt4.xbm}} -}{(|annaOptDefaultSolve4|)}\space{} -\newline \indent{3} With conditions: -\centerline{\inputbitmap{\htbmdir{}/opt4c1.xbm}} -\centerline{\inputbitmap{\htbmdir{}/opt4c2.xbm}} -\centerline{\inputbitmap{\htbmdir{}/opt4c3.xbm}} -\blankline -\item \menulispdownlink{Example 5: \newline -\indent{2} Minimize the function: -\centerline{\inputbitmap{\htbmdir{}/opt5.xbm}} -}{(|annaOptDefaultSolve5|)}\space{} -\newline \indent{3} With conditions: -\centerline{\inputbitmap{\htbmdir{}/opt4c1.xbm}} -\centerline{\inputbitmap{\htbmdir{}/opt4c2.xbm}} -\centerline{\inputbitmap{\htbmdir{}/opt4c3.xbm}} -\blankline -\endmenu -\end{scroll} -\autobutt{Mainhelp} -\end{page} - -@ -\subsection{Examples Using the Axiom/NAG Expert System} -\label{UXANNAOpt2Ex} -\index{pages!UXANNAOpt2Ex!annaex.ht} -\index{annaex.ht!pages!UXANNAOpt2Ex} -\index{UXANNAOpt2Ex!annaex.ht!pages} -<>= -\begin{page}{UXANNAOpt2Ex}{Examples Using the Axiom/NAG Expert System} -\begin{scroll} -Select this example and you will be presented with a page which -contains active areas for the function and its parameters. -\blankline -These parameters can be altered by selecting the area and replacing the -default parameters by the new values. -\blankline -\beginmenu -\blankline -\item \menulispdownlink{Example 1: \newline -\indent{2} Calculate a least-squares minimization of the following functions: -\centerline{\inputbitmap{\htbmdir{}/opt61.xbm}} -\centerline{\inputbitmap{\htbmdir{}/opt62.xbm}} -\centerline{\inputbitmap{\htbmdir{}/opt63.xbm}}} -{(|annaOpt2DefaultSolve|)}\space{} -\endmenu -\end{scroll} -\autobutt{MainHelp} -\end{page} - - -@ -\subsection{Examples Using the Axiom/NAG Expert System} -\label{UXANNAIntEx} -\index{pages!UXANNAIntEx!annaex.ht} -\index{annaex.ht!pages!UXANNAIntEx} -\index{UXANNAIntEx!annaex.ht!pages} -<>= -\begin{page}{UXANNAIntEx}{Examples Using the Axiom/NAG Expert System} -\begin{scroll} -Select any of these examples and you will be presented with a page which -contains active areas for the function and its parameters. -\blankline -These parameters can be altered by selecting the area and replacing the -default parameters by the new values. In this way you can investigate the -effect of the new parameters on the choice of method. -\blankline -\beginmenu -\item \menulispdownlink{Example 1: \newline -\centerline{\inputbitmap{\htbmdir{}/int1.xbm}}}{(|annaFoo|)}\space{} -\blankline -\item \menulispdownlink{Example 2: \newline -\centerline{\inputbitmap{\htbmdir{}/int2.xbm}}}{(|annaBar|)}\space{} -\blankline -\item \menulispdownlink{Example 3: \newline -\centerline{\inputbitmap{\htbmdir{}/int3.xbm}}}{(|annaJoe|)}\space{} -\blankline -\item \menulispdownlink{Example 4: \newline -\centerline{\inputbitmap{\htbmdir{}/int4.xbm}}}{(|annaSue|)}\space{} -\blankline -\item \menulispdownlink{Example 5: \newline -\centerline{\inputbitmap{\htbmdir{}/int5.xbm}}}{(|annaAnn|)}\space{} -\blankline -\item \menulispdownlink{Example 6: \newline -\centerline{\inputbitmap{\htbmdir{}/int6.xbm}}}{(|annaBab|)}\space{} -\blankline -\item \menulispdownlink{Example 7: \newline -\centerline{\inputbitmap{\htbmdir{}/int7.xbm}}}{(|annaFnar|)}\space{} -\blankline -\item \menulispdownlink{Example 8: \newline -\centerline{\inputbitmap{\htbmdir{}/int8.xbm}}}{(|annaDan|)}\space{} -\blankline -\item \menulispdownlink{Example 9: \newline -\centerline{\inputbitmap{\htbmdir{}/int9.xbm}}}{(|annaBlah|)}\space{} -\blankline -\item \menulispdownlink{Example 10: \newline -\centerline{\inputbitmap{\htbmdir{}/int10.xbm}}}{(|annaTub|)}\space{} -\blankline -\item \menulispdownlink{Example 11: \newline -\centerline{\inputbitmap{\htbmdir{}/int13.xbm}}}{(|annaRats|)}\space{} -\blankline -\item \menulispdownlink{Example 12: \newline -\centerline{\inputbitmap{\htbmdir{}/int11.xbm}}}{(|annaMInt|)}\space{} -\endmenu -\end{scroll} -\autobutt{MainHelp} -\end{page} - -@ -\subsection{Examples Using the Axiom/NAG Expert System} -\label{UXANNAOdeEx} -\index{pages!UXANNAOdeEx!annaex.ht} -\index{annaex.ht!pages!UXANNAOdeEx} -\index{UXANNAOdeEx!annaex.ht!pages} -<>= -\begin{page}{UXANNAOdeEx}{Examples Using the Axiom/NAG Expert System} -\begin{scroll} -Analyses the function for various attributes, chooses and -then uses a suitable ODE solver to provide a -solution to the system of n ODEs \center{\htbitmap{d02gaf},} -for i = 1,2,...,n. -\blankline -Select either of these examples and you will be presented with a page which -contains active areas for the function and its parameters. -\blankline -These parameters can be altered by selecting the area and replacing the -default parameters by the new values. In this way you can investigate the -effect of the new parameters on the choice of method. -\blankline -\beginmenu -\item \menulispdownlink{Example 1: \tab{12} -\inputbitmap{\htbmdir{}/ode1.xbm}}{(|annaOdeDefaultSolve1|)} -\blankline with initial conditions: \newline -\tab{12}\inputbitmap{\htbmdir{}/y1.xbm} \space{1} and \space{1} -\inputbitmap{\htbmdir{}/x1.xbm} -\blankline -\blankline -\blankline -\item \menulispdownlink{Example 2: \tab{12} -\inputbitmap{\htbmdir{}/ode2.xbm}}{(|annaOdeDefaultSolve2|)} -\blankline with initial conditions: \newline -\tab{12}\inputbitmap{\htbmdir{}/y2.xbm} \space{1} and \space{1} -\inputbitmap{\htbmdir{}/x1.xbm} -\blankline -\blankline -\blankline -\endmenu -\end{scroll} -\autobutt{MainHelp} -\end{page} - -@ -\subsection{About the Axiom/NAG Expert System} -\label{UXANNATxt} -\begin{itemize} -\item UXANNAEx \ref{UXANNAEx} on page~\pageref{UXANNAEx} -\item UXANNAIntro \ref{UXANNAIntro} on page~\pageref{UXANNAIntro} -\item UXANNADec \ref{UXANNADec} on page~\pageref{UXANNADec} -\item UXANNAInfer \ref{UXANNAInfer} on page~\pageref{UXANNAInfer} -\item UXANNAMeas \ref{UXANNAMeas} on page~\pageref{UXANNAMeas} -\end{itemize} -\index{pages!UXANNATxt!annaex.ht} -\index{annaex.ht!pages!UXANNATxt} -\index{UXANNATxt!annaex.ht!pages} -<>= -\begin{page}{UXANNATxt}{About the Axiom/NAG Expert System} -\begin{scroll} -\centerline{\tt\inputbitmap{\htbmdir{}/anna_logo.xbm}\rm} -\vspace{-30}\horizontalline -In applied mathematics, electronic and chemical engineering, the modelling -process can produce a number of mathematical problems which require numerical -solutions for which symbolic methods are either not possible or not obvious. -With the plethora of numerical library routines for the solution of these -problems often the numerical analyst has to answer the question {\em Which -routine to choose?} -\blankline -Some analysis needs to be carried out before the -appropriate routine can be identified i.e. {\em How stiff is this ODE?} and -{\em Is this function continuous?} It may well be the case that more than -one routine is applicable to the problem. So the question may become {\em -Which is likely to be the best?} Such a choice may be critical for both -accuracy and efficiency. -\blankline -An expert system is thus required to make this choice based on the result of -its own analysis of the problem, call the routine and act on the outcome. -This may be to put the answer in a relevant form or react to an apparent -failure of the chosen routine and thus choose and call an alternative. -It should also have sufficient explanation mechanisms to inform on the choice -of routine and the reasons for that choice. -\blankline -\end{scroll} -\downlink{ Examples }{UXANNAEx} -\downlink{ Introduction }{UXANNAIntro} -\downlink{ Decision Agents }{UXANNADec} -\downlink{ Inference Mechanisms }{UXANNAInfer} -\downlink{ Measure Functions }{UXANNAMeas} -\end{page} - -@ -\subsection{Introduction to the Axiom/NAG Expert System} -\label{UXANNAIntro} -\begin{itemize} -\item UXANNADec \ref{UXANNADec} on page~\pageref{UXANNADec} -\item UXANNAInfer \ref{UXANNAInfer} on page~\pageref{UXANNAInfer} -\item UXANNAMeth \ref{UXANNAMeth} on page~\pageref{UXANNAMeth} -\item UXANNAMeas \ref{UXANNAMeas} on page~\pageref{UXANNAMeas} -\end{itemize} -\index{pages!UXANNAIntro!annaex.ht} -\index{annaex.ht!pages!UXANNAIntro} -\index{UXANNAIntro!annaex.ht!pages} -<>= -\begin{page}{UXANNAIntro}{Introduction to the Axiom/NAG Expert System} -\begin{scroll} -\centerline{\tt\inputbitmap{\htbmdir{}/anna_logo.xbm}\rm} -\vspace{-30}\horizontalline -Deciding amongst, and then implementing, several possible approaches to -solving a numerical problem can be daunting for a novice user, or tedious for -an expert. Different attributes of the problem need to be -identified and their possible interactions weighed up before a final decision -about which method to use can be made. -\blankline -The implementation is then largely an -automatic, if laborious, process of writing, compiling and linking usually -Fortran code. The aim is to build an expert system which will use computer -algebra to analyse such features of a problem, inference mechanisms and a -knowledge base to choose a numerical method appropriate to the solution of a -given problem. -\blankline -Any interactive system is constrained by the need to provide a reasonable -response time for the user. Given the complexity of some of the analysis our -system will need to do, it is clear that we should only aim to select a good -method, rather than try to identify the best one available. The overall goal -is to provide a ``black-box'' interface to numerical software which allows -non-experts access to its full potential. It will also provide explanation -mechanisms commensurate with its role as a teaching aid. -\blankline -Given, say, an integration to perform (which may or may not be able to be -handled symbolically), the system should choose and apply an appropriate -method, thus mirroring as closely as possible the way that an experienced -numerical analyst would think so, for example, given an integration to -perform:\newline -{\it \centerline{\inputbitmap{\htbmdir{}/int1.xbm}}} -\newline -the experienced analyst would see that the integral is semi-infinite and -transform it by splitting the range and transforming the integral over {\it -[1,\inputbitmap{\htbmdir{}/infty.xbm}]} into an integral over -{\it [0,1] } using the transformation {\it x -> 1/t}. -A different numerical routine might be used over each -sub-region and the results added to give the final answer. -\blankline -It then requires -the translation of the problem into Fortran code which may be extensive. -Even with this simple example, the process is quite involved. -\blankline -\end{scroll} -\autobuttons -\downlink{ Decision Agents }{UXANNADec} -\downlink{ Inference Mechanisms }{UXANNAInfer} -\downlink{ Method Domains }{UXANNAMeth} -\downlink{ Measure Functions }{UXANNAMeas} -\end{page} - -@ -\subsection{Example using the Axiom/NAG Expert System} -\label{UXANNAEx} -See UXANNAEx2 \ref{UXANNAEx2} on page~\pageref{UXANNAEx2} -\index{pages!UXANNAEx!annaex.ht} -\index{annaex.ht!pages!UXANNAEx} -\index{UXANNAEx!annaex.ht!pages} -<>= -\begin{page}{UXANNAEx}{Example using the Axiom/NAG Expert System} -\begin{scroll} -\xtc{ -{\bf Example 1}: The integral -{\centerline{\inputbitmap{\htbmdir{}/int1.xbm}}} -\newline -is performed as follows: -\blankline -}{} -\xtc{ -}{ -\spadpaste{ans := integrate((exp(-X^3)+exp(-3*X^2))/sqrt(X),0.0..\%plusInfinity)\bound{ans} } -} -\blankline -\xtc{ -It creates a composite structure for which the field containing the result can be -expanded as required.\blankline -}{ -\spadpaste{ans . 'result\free{ans}} -} -\blankline -\xtc{ -}{ -\spadpaste{ans . 'abserr\free{ans}} -} -\blankline -This system has performed the analysis described above, done the necessary -problem transformation, written any necessary Fortran, called two different -numerical routines, and amalgamated their -results. This whole process was transparent to the user. -\end{scroll} -\autobuttons -\downlink{Example 2}{UXANNAEx2} -%\downlink{Decision Agents}{UXANNADec} -\end{page} - -@ -\subsection{Example using the Axiom/NAG Expert System} -\label{UXANNAEx2} -See UXANNAEx3 \ref{UXANNAEx3} on page~\pageref{UXANNAEx3} -\index{pages!UXANNAEx2!annaex.ht} -\index{annaex.ht!pages!UXANNAEx2} -\index{UXANNAEx2!annaex.ht!pages} -<>= -\begin{page}{UXANNAEx2}{Example using the Axiom/NAG Expert System} -\begin{scroll} -\xtc{ -{\bf Example 2}: The ODE -{\centerline{\inputbitmap{\htbmdir{}/ode3.xbm}\space{1}with -\space{1} -{\inputbitmap{\htbmdir{}/y3.xbm}}}} -\newline -could be solved as follows: -\blankline -}{} -\xtc{ -}{ -\spadpaste{ans2 := solve([Y[2],-1001*Y[2]-1000*Y[1]], 0.0, 10.0, -[1.0,-1.0], [2,4,6,8], 1.0e-4)\bound{ans2} } -} -\blankline -\xtc{ -It creates a composite structure for which the field containing the result can be -expanded as required.\blankline -}{ -\spadpaste{ans2 . 'result\free{ans2}} -} -\blankline -\xtc{ -}{ -\spadpaste{ans2 . 'y\free{ans2}} -} -\blankline -\end{scroll} -\autobuttons -\downlink{Example 3}{UXANNAEx3} -%\downlink{Decision Agents}{UXANNADec} -\end{page} - -@ -\subsection{Example using the Axiom/NAG Expert System} -\label{UXANNAEx3} -See UXANNADec \ref{UXANNADec} on page~\pageref{UXANNADec} -\index{pages!UXANNAEx3!annaex.ht} -\index{annaex.ht!pages!UXANNAEx3} -\index{UXANNAEx3!annaex.ht!pages} -<>= -\begin{page}{UXANNAEx3}{Example using the Axiom/NAG Expert System} -\begin{scroll} -\xtc{ -{\bf Example 3}: The function -{\centerline{\inputbitmap{\htbmdir{}/opt2.xbm}}} -with simple bounds -{\centerline{\inputbitmap{\htbmdir{}/opt2c.xbm}}} -\newline -could be minimized as follows: -\blankline -}{} -\xtc{ -}{ -\spadpaste{ans3 := optimize((X[1]+10*X[2])**2 + 5*(X[3]-X[4])**2 + -(X[2]-2*X[3])**4 + 10*(X[1]-X[4])**4, [3,-1,0,1], [1,-2,\%minusInfinity,1], -[3,0,\%plusInfinity,3])\bound{ans3} } -} -\blankline -\xtc{ -It creates a composite structure for which the field containing the minimum can be -expanded as required.\blankline -}{ -\spadpaste{ans3 . objf\free{ans3}} -} -\blankline -\xtc{ -}{ -\spadpaste{ans3 . x\free{ans3}} -} -\blankline -\xtc{ -}{ -\spadpaste{ans3 . attributes\free{ans3}} -} -\blankline -\end{scroll} -\autobuttons -\downlink{Decision Agents}{UXANNADec} -\end{page} - -@ -\subsection{Decision Agents} -\label{UXANNADec} -\begin{itemize} -\item UXANNAInfer \ref{UXANNAInfer} on page~\pageref{UXANNAInfer} -\item UXANNAMeth \ref{UXANNAMeth} on page~\pageref{UXANNAMeth} -\item UXANNAMeas \ref{UXANNAMeas} on page~\pageref{UXANNAMeas} -\item UXANNAAgent \ref{UXANNAAgent} on page~\pageref{UXANNAAgent} -\end{itemize} -\index{pages!UXANNADec!annaex.ht} -\index{annaex.ht!pages!UXANNADec} -\index{UXANNADec!annaex.ht!pages} -<>= -\begin{page}{UXANNADec}{Decision Agents} -\begin{scroll} -\blankline -Some features are either present or absent in a problem. Examples of such -binary decisions include {\em is a matrix symmetric?} and {\em is a -function continuous?} However in practice many questions are about the {\em -degree} to which a problem exhibits a property: {\em how much does a -function oscillate?}, or {\em how stiff are these differential equations?} -\blankline -We have therefore created decision agents of two types, reflecting their -property --- {\em Binary Agents} are Boolean functions returning either true -or false and {\em Intensity Functions} are quantitative and return a range of -different values, either numerical or structured types. The framework we are -developing is able to deal with both these forms of information. -\blankline - -In any given problem area (for example solving ordinary differential -equations, optimization etc.) we have a selection of {\em methods}. These -might be to use a particular NAG routine, or they might involve employing a -higher-level strategy such as transforming the problem into an equivalent, -but easier to solve, form. -\blankline -Associated with every method we define a {\em -measure function} which assesses the suitability of that method to a -particular problem. Each measure function has access to a range of symbolic -{\em agents} which can answer questions about the various properties of the -problem in hand. -\blankline -\end{scroll} -\downlink{ Inference Mechanisms }{UXANNAInfer} -\downlink{ Method Domains }{UXANNAMeth} -\downlink{ Measure Functions }{UXANNAMeas} -\downlink{ Computational Agents }{UXANNAAgent} - -\end{page} - -@ -\subsection{Inference Mechanisms} -\label{UXANNAInfer} -\begin{itemize} -\item UXANNAMeth \ref{UXANNAMeth} on page~\pageref{UXANNAMeth} -\item UXANNAMeas \ref{UXANNAMeas} on page~\pageref{UXANNAMeas} -\item UXANNAAgent \ref{UXANNAAgent} on page~\pageref{UXANNAAgent} -\item UXANNAEx \ref{UXANNAEx} on page~\pageref{UXANNAEx} -\end{itemize} -\index{pages!UXANNAInfer!annaex.ht} -\index{annaex.ht!pages!UXANNAInfer} -\index{UXANNAInfer!annaex.ht!pages} -<>= -\begin{page}{UXANNAInfer}{Inference Mechanisms} -\begin{scroll} -\blankline -The inference machine will take the problem description as provided by the -user and perform an initial analysis to verify its validity. It will -consider, in turn, all of the available methods within its knowledge base -which might solve that problem. In doing so it analyses the input problem to -find out about any attributes that could affect the ability of the methods -under consideration to perform effectively. -\blankline -Some of these -measures may use lazy evaluation in the sense that, if a method already -assessed is believed to be a good candidate, and if evaluating the current -measure will be relatively expensive, then that measure will not be evaluated -unless later evidence shows that the selected method is not, in fact, a -successful strategy, for example if it has failed. -\end{scroll} -\downlink{ Method Domains }{UXANNAMeth} -\downlink{ Measure Functions }{UXANNAMeas} -\downlink{ Computational Agents }{UXANNAAgent} -\downlink{ Examples }{UXANNAEx} -\end{page} - -@ -\subsection{Method Domains} -\label{UXANNAMeth} -\begin{itemize} -\item UXANNAMeas \ref{UXANNAMeas} on page~\pageref{UXANNAMeas} -\item UXANNAAgent \ref{UXANNAAgent} on page~\pageref{UXANNAAgent} -\item UXANNAEx \ref{UXANNAEx} on page~\pageref{UXANNAEx} -\end{itemize} -\index{pages!UXANNAMeth!annaex.ht} -\index{annaex.ht!pages!UXANNAMeth} -\index{UXANNAMeth!annaex.ht!pages} -<>= -\begin{page}{UXANNAMeth}{Method Domains} -\begin{scroll} -\blankline -An Axiom {\em domain} has been created for each method or strategy for -solving the problem. These method domains each implement two functions with -a uniform (method independant) interface. -\blankline {\bf measure:} A function which calculates an estimate of suitability of -this particular method to the problem if there is a possibility that the -method under consideration is more appropriate than one already investigated. -\blankline -If it may be possible to improve on the current favourite method, the function -will call computational agents to analyse the problem for specific features -and calculate the measure from the results these agents return, -using a variation on the Lucks/Gladwell intensity and compatibility -model if conflict between attributes, as investigated by these computational -agents, may be present. -\blankline -{\bf implementation:} A function which may be one of two distinct kinds. -The first kind uses the interface to the NAG Library to call a particular -routine with the required parameters. Some of the parameters may need to be -calculated from the data provided before the external function call. -\blankline -The other kind will apply a ``high level'' strategy to try to solve the -problem e.g.~a transformation of an expression from one that is difficult to -solve to one which is easier, or a splitting of the problem into several more -easily solvable parts. For example, for a solution of the equation above, -since the integral is semi-infinite we might wish to transform the range by, -say, using the mapping {\it y -> 1/x} on the section {\it 1 -< x < \inputbitmap{\htbmdir{}/infty.xbm}}) and -adding the result to the unmapped section {\it 0 < x < 1}. -\blankline -\end{scroll} -\downlink{ Measure Functions }{UXANNAMeas} -\downlink{ Computational Agents }{UXANNAAgent} -\downlink{ Examples }{UXANNAEx} -\end{page} - -@ -\subsection{Measure Functions} -\label{UXANNAMeas} -\begin{itemize} -\item UXANNAAgent \ref{UXANNAAgent} on page~\pageref{UXANNAAgent} -\item UXANNAEx \ref{UXANNAEx} on page~\pageref{UXANNAEx} -\end{itemize} -\index{pages!UXANNAMeas!annaex.ht} -\index{annaex.ht!pages!UXANNAMeas} -\index{UXANNAMeas!annaex.ht!pages} -<>= -\begin{page}{UXANNAMeas}{Measure Functions} -\begin{scroll} -\blankline -Each measure function will estimate the ability of a particular method to -solve a problem. It will consult whichever agents are needed to perform -analysis on the problem in order to calculate the measure. There is a -parameter which would contain the best compatibility -value found so far. -\blankline -However, the interpretation we give to the results of some tests is not -always clear-cut. If a set of tests give -conflicting advice as to the appropriateness of a particular method, it -becomes important to decide not only {\it whether} certain properties are -present but also their {\it degree}. This gives us a basis for estimating the -compatibility of each property. -\blankline -We have taken for our model the system recommended by Lucks and Gladwell -which uses a system of measurement of compatibility allowing for interaction -and conflict between a number of attributes. All of these processes may not -be required if the choice is clear-cut e.g. we have an integral to calculate -which has a particular singularity structure for which one particular method -has been specifically constructed. However, for more difficult cases a -composite picture should be built up to calculate a true measurement. -\blankline -How the compatibility functions interpret the measurements of various -attributes is up to them and may vary between differing methods. It is this -area that takes as its basis the {\it judgement} of Numerical Analysis -`experts' whether that be from the documentation (which may be deficient in -certain respects) or from alternative sources. However, its assessment of -the suitability or otherwise of a particular method is reflected in a single -normalised value facilitating the direct comparison of the suitability of a -number of possible methods. -\blankline -\end{scroll} -\downlink{ Computational Agents }{UXANNAAgent} -\downlink{ Examples }{UXANNAEx} -\end{page} - -@ -\subsection{Computational Agents} -\label{UXANNAAgent} -See UXANNAEx \ref{UXANNAEx} on page~\pageref{UXANNAEx} -\index{pages!UXANNAAgent!annaex.ht} -\index{annaex.ht!pages!UXANNAAgent} -\index{UXANNAAgent!annaex.ht!pages} -<>= -\begin{page}{UXANNAAgent}{Computational Agents} -\begin{scroll} -\blankline -Computational Agents are those program segments which investigate the -attributes of the input function or functions, such as -{\bf stiffnessAndStabilityOfODEIF} -(the {\em IF} indicates that it is an {\em Intensity Function} i.e. one that -returns a normalised real number or a set of normalised real numbers). They -are usually functions or programs written completely in the Axiom -language and implemented using computer algebra. -\blankline -Some agents will be common to more than one problem domain whereas others -will be specific to a single domain. They also vary greatly in their -complexity. It is a fairly simple task to return details about the range of -a function since this information will have been included in the problem -specification. It is a different order of complexity to return details of -its singularity structure. -\blankline -\xtc{ -As an example, here is a call to the computational agent {\bf -singularitiesOf} to obtain the list of singularities of the function -{\it tan x} which are in the range -{\it 0..12\inputbitmap{\htbmdir{}/pi.xbm}}: -\blankline -}{ -} -\xtc{ -}{ -\spadpaste{s := singularitiesOf(tan x,[x],0..12*\%pi)$ESCONT \free{lib3} } -} -\blankline -Each of these computational agents which may be called by a number of method -domains retain their output in a dynamic hash-table, so speeding the process -and retaining efficiency. -\end{scroll} -\downlink{ Examples }{UXANNAEx} -\end{page} - -@ \section{array1.ht} <>= \newcommand{\OneDimensionalArrayXmpTitle}{OneDimensionalArray} @@ -2926,7 +2161,8 @@ operation \spadfun{oneDimensionalArray} to a list. \xtc{ Another approach is to first create \spad{a}, a one-dimensional array of 10 \spad{0}'s. -\spadtype{OneDimensionalArray} has the convenient abbreviation \spadtype{ARRAY1}. +\spadtype{OneDimensionalArray} has the convenient +abbreviation \spadtype{ARRAY1}. }{ \spadpaste{a : ARRAY1 INT := new(10,0)\bound{a}} } @@ -2957,7 +2193,8 @@ Sort the elements in place. \spadpaste{sort! a \bound{a6}\free{a5}} } \xtc{ -Create a new one-dimensional array \spad{b} containing the last 5 elements of \spad{a}. +Create a new one-dimensional array \spad{b} containing the +last 5 elements of \spad{a}. }{ \spadpaste{b := a(6..10)\bound{b}\free{a6}} } @@ -2995,26 +2232,24 @@ page~pageref{OneDimensionalArrayXmpPage} \begin{page}{TwoDimensionalArrayXmpPage}{TwoDimensionalArray} \beginscroll -The \spadtype{TwoDimensionalArray} domain is used for storing data in a -\twodim{} data structure indexed by row and by column. -Such an array is a homogeneous data structure in that all the entries of -the array must belong to the same Axiom domain (although see -\downlink{``\ugTypesAnyNoneTitle''}{ugTypesAnyNonePage} in -Section \ugTypesAnyNoneNumber\ignore{ugTypesAnyNone}). -Each array has a fixed number of rows and columns specified by the user -and arrays are not extensible. -In Axiom, the indexing of two-dimensional arrays is one-based. -This means that both the ``first'' row of an array and the ``first'' -column of an array are given the index \spad{1}. -Thus, the entry in the upper left corner of an array is in position +The \spadtype{TwoDimensionalArray} domain is used for storing data in +a \twodim{} data structure indexed by row and by column. Such an +array is a homogeneous data structure in that all the entries of the +array must belong to the same Axiom domain (although see +\downlink{``\ugTypesAnyNoneTitle''}{ugTypesAnyNonePage} in Section +\ugTypesAnyNoneNumber\ignore{ugTypesAnyNone}). Each array has a fixed +number of rows and columns specified by the user and arrays are not +extensible. In Axiom, the indexing of two-dimensional arrays is +one-based. This means that both the ``first'' row of an array and the +``first'' column of an array are given the index \spad{1}. Thus, the +entry in the upper left corner of an array is in position \spad{(1,1)}. -The operation \spadfunFrom{new}{TwoDimensionalArray} creates -an array with a specified number of rows and columns and fills the components -of that array with a specified entry. -The arguments of this operation specify the number of rows, the number -of columns, and the entry. +The operation \spadfunFrom{new}{TwoDimensionalArray} creates an array +with a specified number of rows and columns and fills the components +of that array with a specified entry. The arguments of this operation +specify the number of rows, the number of columns, and the entry. \xtc{ This creates a five-by-four array of integers, all of whose entries are zero. @@ -3158,1030 +2393,14 @@ For information on related topics, see % @ -\section{aspex.ht} -\subsection{Asp1 Example Code} -\label{Asp1ExampleCode} -\index{pages!Asp1ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp1ExampleCode} -\index{Asp1ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp1ExampleCode}{Asp1 Example Code} -\begin{verbatim} - DOUBLE PRECISION FUNCTION F(X) - DOUBLE PRECISION X - F=DSIN(X) - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp10 Example Code} -\label{Asp10ExampleCode} -\index{pages!Asp10ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp10ExampleCode} -\index{Asp10ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp10ExampleCode}{Asp10 Example Code} -\begin{verbatim} - SUBROUTINE COEFFN(P,Q,DQDL,X,ELAM,JINT) - DOUBLE PRECISION ELAM,P,Q,X,DQDL - INTEGER JINT - P=1.0D0 - Q=((-1.0D0*X**3)+ELAM*X*X-2.0D0)/(X*X) - DQDL=1.0D0 - RETURN - END -\end{verbatim} -\end{page} - - -@ -\subsection{Asp12 Example Code} -\label{Asp12ExampleCode} -\index{pages!Asp12ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp12ExampleCode} -\index{Asp12ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp12ExampleCode}{Asp12 Example Code} -\begin{verbatim} - SUBROUTINE MONIT (MAXIT,IFLAG,ELAM,FINFO) - DOUBLE PRECISION ELAM,FINFO(15) - INTEGER MAXIT,IFLAG - IF(MAXIT.EQ.-1)THEN - PRINT*,"Output from Monit" - ENDIF - PRINT*,MAXIT,IFLAG,ELAM,(FINFO(I),I=1,4) - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp19 Example Code} -\label{Asp19ExampleCode} -\index{pages!Asp19ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp19ExampleCode} -\index{Asp19ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp19ExampleCode}{Asp19 Example Code} -\begin{verbatim} - SUBROUTINE LSFUN2(M,N,XC,FVECC,FJACC,LJC) - DOUBLE PRECISION FVECC(M),FJACC(LJC,N),XC(N) - INTEGER M,N,LJC - INTEGER I,J - DO 25003 I=1,LJC - DO 25004 J=1,N - FJACC(I,J)=0.0D0 -25004 CONTINUE -25003 CONTINUE - FVECC(1)=((XC(1)-0.14D0)*XC(3)+(15.0D0*XC(1)-2.1D0)*XC(2)+1.0D0)/( - &XC(3)+15.0D0*XC(2)) - FVECC(2)=((XC(1)-0.18D0)*XC(3)+(7.0D0*XC(1)-1.26D0)*XC(2)+1.0D0)/( - &XC(3)+7.0D0*XC(2)) - FVECC(3)=((XC(1)-0.22D0)*XC(3)+(4.333333333333333D0*XC(1)-0.953333 - &3333333333D0)*XC(2)+1.0D0)/(XC(3)+4.333333333333333D0*XC(2)) - FVECC(4)=((XC(1)-0.25D0)*XC(3)+(3.0D0*XC(1)-0.75D0)*XC(2)+1.0D0)/( - &XC(3)+3.0D0*XC(2)) - FVECC(5)=((XC(1)-0.29D0)*XC(3)+(2.2D0*XC(1)-0.6379999999999999D0)* - &XC(2)+1.0D0)/(XC(3)+2.2D0*XC(2)) - FVECC(6)=((XC(1)-0.32D0)*XC(3)+(1.666666666666667D0*XC(1)-0.533333 - &3333333333D0)*XC(2)+1.0D0)/(XC(3)+1.666666666666667D0*XC(2)) - FVECC(7)=((XC(1)-0.35D0)*XC(3)+(1.285714285714286D0*XC(1)-0.45D0)* - &XC(2)+1.0D0)/(XC(3)+1.285714285714286D0*XC(2)) - FVECC(8)=((XC(1)-0.39D0)*XC(3)+(XC(1)-0.39D0)*XC(2)+1.0D0)/(XC(3)+ - &XC(2)) - FVECC(9)=((XC(1)-0.37D0)*XC(3)+(XC(1)-0.37D0)*XC(2)+1.285714285714 - &286D0)/(XC(3)+XC(2)) - FVECC(10)=((XC(1)-0.58D0)*XC(3)+(XC(1)-0.58D0)*XC(2)+1.66666666666 - &6667D0)/(XC(3)+XC(2)) - FVECC(11)=((XC(1)-0.73D0)*XC(3)+(XC(1)-0.73D0)*XC(2)+2.2D0)/(XC(3) - &+XC(2)) - FVECC(12)=((XC(1)-0.96D0)*XC(3)+(XC(1)-0.96D0)*XC(2)+3.0D0)/(XC(3) - &+XC(2)) - FVECC(13)=((XC(1)-1.34D0)*XC(3)+(XC(1)-1.34D0)*XC(2)+4.33333333333 - &3333D0)/(XC(3)+XC(2)) - FVECC(14)=((XC(1)-2.1D0)*XC(3)+(XC(1)-2.1D0)*XC(2)+7.0D0)/(XC(3)+X - &C(2)) - FVECC(15)=((XC(1)-4.39D0)*XC(3)+(XC(1)-4.39D0)*XC(2)+15.0D0)/(XC(3 - &)+XC(2)) - FJACC(1,1)=1.0D0 - FJACC(1,2)=-15.0D0/(XC(3)**2+30.0D0*XC(2)*XC(3)+225.0D0*XC(2)**2) - FJACC(1,3)=-1.0D0/(XC(3)**2+30.0D0*XC(2)*XC(3)+225.0D0*XC(2)**2) - FJACC(2,1)=1.0D0 - FJACC(2,2)=-7.0D0/(XC(3)**2+14.0D0*XC(2)*XC(3)+49.0D0*XC(2)**2) - FJACC(2,3)=-1.0D0/(XC(3)**2+14.0D0*XC(2)*XC(3)+49.0D0*XC(2)**2) - FJACC(3,1)=1.0D0 - FJACC(3,2)=((-0.1110223024625157D-15*XC(3))-4.333333333333333D0)/( - &XC(3)**2+8.666666666666666D0*XC(2)*XC(3)+18.77777777777778D0*XC(2) - &**2) - FJACC(3,3)=(0.1110223024625157D-15*XC(2)-1.0D0)/(XC(3)**2+8.666666 - &666666666D0*XC(2)*XC(3)+18.77777777777778D0*XC(2)**2) - FJACC(4,1)=1.0D0 - FJACC(4,2)=-3.0D0/(XC(3)**2+6.0D0*XC(2)*XC(3)+9.0D0*XC(2)**2) - FJACC(4,3)=-1.0D0/(XC(3)**2+6.0D0*XC(2)*XC(3)+9.0D0*XC(2)**2) - FJACC(5,1)=1.0D0 - FJACC(5,2)=((-0.1110223024625157D-15*XC(3))-2.2D0)/(XC(3)**2+4.399 - &999999999999D0*XC(2)*XC(3)+4.839999999999998D0*XC(2)**2) - FJACC(5,3)=(0.1110223024625157D-15*XC(2)-1.0D0)/(XC(3)**2+4.399999 - &999999999D0*XC(2)*XC(3)+4.839999999999998D0*XC(2)**2) - FJACC(6,1)=1.0D0 - FJACC(6,2)=((-0.2220446049250313D-15*XC(3))-1.666666666666667D0)/( - &XC(3)**2+3.333333333333333D0*XC(2)*XC(3)+2.777777777777777D0*XC(2) - &**2) - FJACC(6,3)=(0.2220446049250313D-15*XC(2)-1.0D0)/(XC(3)**2+3.333333 - &333333333D0*XC(2)*XC(3)+2.777777777777777D0*XC(2)**2) - FJACC(7,1)=1.0D0 - FJACC(7,2)=((-0.5551115123125783D-16*XC(3))-1.285714285714286D0)/( - &XC(3)**2+2.571428571428571D0*XC(2)*XC(3)+1.653061224489796D0*XC(2) - &**2) - FJACC(7,3)=(0.5551115123125783D-16*XC(2)-1.0D0)/(XC(3)**2+2.571428 - &571428571D0*XC(2)*XC(3)+1.653061224489796D0*XC(2)**2) - FJACC(8,1)=1.0D0 - FJACC(8,2)=-1.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) - FJACC(8,3)=-1.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) - FJACC(9,1)=1.0D0 - FJACC(9,2)=-1.285714285714286D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)* - &*2) - FJACC(9,3)=-1.285714285714286D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)* - &*2) - FJACC(10,1)=1.0D0 - FJACC(10,2)=-1.666666666666667D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2) - &**2) - FJACC(10,3)=-1.666666666666667D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2) - &**2) - FJACC(11,1)=1.0D0 - FJACC(11,2)=-2.2D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) - FJACC(11,3)=-2.2D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) - FJACC(12,1)=1.0D0 - FJACC(12,2)=-3.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) - FJACC(12,3)=-3.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) - FJACC(13,1)=1.0D0 - FJACC(13,2)=-4.333333333333333D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2) - &**2) - FJACC(13,3)=-4.333333333333333D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2) - &**2) - FJACC(14,1)=1.0D0 - FJACC(14,2)=-7.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) - FJACC(14,3)=-7.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) - FJACC(15,1)=1.0D0 - FJACC(15,2)=-15.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) - FJACC(15,3)=-15.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp20 Example Code} -\label{Asp20ExampleCode} -\index{pages!Asp20ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp20ExampleCode} -\index{Asp20ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp20ExampleCode}{Asp20 Example Code} -\begin{verbatim} - SUBROUTINE QPHESS(N,NROWH,NCOLH,JTHCOL,HESS,X,HX) - DOUBLE PRECISION HX(N),X(N),HESS(NROWH,NCOLH) - INTEGER JTHCOL,N,NROWH,NCOLH - HX(1)=2.0D0*X(1) - HX(2)=2.0D0*X(2) - HX(3)=2.0D0*X(4)+2.0D0*X(3) - HX(4)=2.0D0*X(4)+2.0D0*X(3) - HX(5)=2.0D0*X(5) - HX(6)=(-2.0D0*X(7))+(-2.0D0*X(6)) - HX(7)=(-2.0D0*X(7))+(-2.0D0*X(6)) - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp24 Example Code} -\label{Asp24ExampleCode} -\index{pages!Asp24ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp24ExampleCode} -\index{Asp24ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp24ExampleCode}{Asp24 Example Code} -\begin{verbatim} - SUBROUTINE FUNCT1(N,XC,FC) - DOUBLE PRECISION FC,XC(N) - INTEGER N - FC=10.0D0*XC(4)**4+(-40.0D0*XC(1)*XC(4)**3)+(60.0D0*XC(1)**2+5 - &.0D0)*XC(4)**2+((-10.0D0*XC(3))+(-40.0D0*XC(1)**3))*XC(4)+16.0D0*X - &C(3)**4+(-32.0D0*XC(2)*XC(3)**3)+(24.0D0*XC(2)**2+5.0D0)*XC(3)**2+ - &(-8.0D0*XC(2)**3*XC(3))+XC(2)**4+100.0D0*XC(2)**2+20.0D0*XC(1)*XC( - &2)+10.0D0*XC(1)**4+XC(1)**2 - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp27 Example Code} -\label{Asp27ExampleCode} -\index{pages!Asp27ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp27ExampleCode} -\index{Asp27ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp27ExampleCode}{Asp27 Example Code} -\begin{verbatim} - FUNCTION DOT(IFLAG,N,Z,W,RWORK,LRWORK,IWORK,LIWORK) - DOUBLE PRECISION W(N),Z(N),RWORK(LRWORK) - INTEGER N,LIWORK,IFLAG,LRWORK,IWORK(LIWORK) - DOT=(W(16)+(-0.5D0*W(15)))*Z(16)+((-0.5D0*W(16))+W(15)+(-0.5D0*W(1 - &4)))*Z(15)+((-0.5D0*W(15))+W(14)+(-0.5D0*W(13)))*Z(14)+((-0.5D0*W( - &14))+W(13)+(-0.5D0*W(12)))*Z(13)+((-0.5D0*W(13))+W(12)+(-0.5D0*W(1 - &1)))*Z(12)+((-0.5D0*W(12))+W(11)+(-0.5D0*W(10)))*Z(11)+((-0.5D0*W( - &11))+W(10)+(-0.5D0*W(9)))*Z(10)+((-0.5D0*W(10))+W(9)+(-0.5D0*W(8)) - &)*Z(9)+((-0.5D0*W(9))+W(8)+(-0.5D0*W(7)))*Z(8)+((-0.5D0*W(8))+W(7) - &+(-0.5D0*W(6)))*Z(7)+((-0.5D0*W(7))+W(6)+(-0.5D0*W(5)))*Z(6)+((-0. - &5D0*W(6))+W(5)+(-0.5D0*W(4)))*Z(5)+((-0.5D0*W(5))+W(4)+(-0.5D0*W(3 - &)))*Z(4)+((-0.5D0*W(4))+W(3)+(-0.5D0*W(2)))*Z(3)+((-0.5D0*W(3))+W( - &2)+(-0.5D0*W(1)))*Z(2)+((-0.5D0*W(2))+W(1))*Z(1) - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp28 Example Code} -\label{Asp28ExampleCode} -\index{pages!Asp28ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp28ExampleCode} -\index{Asp28ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp28ExampleCode}{Asp28 Example Code} -\begin{verbatim} - SUBROUTINE IMAGE(IFLAG,N,Z,W,RWORK,LRWORK,IWORK,LIWORK) - DOUBLE PRECISION Z(N),W(N),IWORK(LRWORK),RWORK(LRWORK) - INTEGER N,LIWORK,IFLAG,LRWORK - W(1)=0.01707454969713436D0*Z(16)+0.001747395874954051D0*Z(15)+0.00 - &2106973900813502D0*Z(14)+0.002957434991769087D0*Z(13)+(-0.00700554 - &0882865317D0*Z(12))+(-0.01219194009813166D0*Z(11))+0.0037230647365 - &3087D0*Z(10)+0.04932374658377151D0*Z(9)+(-0.03586220812223305D0*Z( - &8))+(-0.04723268012114625D0*Z(7))+(-0.02434652144032987D0*Z(6))+0. - &2264766947290192D0*Z(5)+(-0.1385343580686922D0*Z(4))+(-0.116530050 - &8238904D0*Z(3))+(-0.2803531651057233D0*Z(2))+1.019463911841327D0*Z - &(1) - W(2)=0.0227345011107737D0*Z(16)+0.008812321197398072D0*Z(15)+0.010 - &94012210519586D0*Z(14)+(-0.01764072463999744D0*Z(13))+(-0.01357136 - &72105995D0*Z(12))+0.00157466157362272D0*Z(11)+0.05258889186338282D - &0*Z(10)+(-0.01981532388243379D0*Z(9))+(-0.06095390688679697D0*Z(8) - &)+(-0.04153119955569051D0*Z(7))+0.2176561076571465D0*Z(6)+(-0.0532 - &5555586632358D0*Z(5))+(-0.1688977368984641D0*Z(4))+(-0.32440166056 - &67343D0*Z(3))+0.9128222941872173D0*Z(2)+(-0.2419652703415429D0*Z(1 - &)) - W(3)=0.03371198197190302D0*Z(16)+0.02021603150122265D0*Z(15)+(-0.0 - &06607305534689702D0*Z(14))+(-0.03032392238968179D0*Z(13))+0.002033 - &305231024948D0*Z(12)+0.05375944956767728D0*Z(11)+(-0.0163213312502 - &9967D0*Z(10))+(-0.05483186562035512D0*Z(9))+(-0.04901428822579872D - &0*Z(8))+0.2091097927887612D0*Z(7)+(-0.05760560341383113D0*Z(6))+(- - &0.1236679206156403D0*Z(5))+(-0.3523683853026259D0*Z(4))+0.88929961 - &32269974D0*Z(3)+(-0.2995429545781457D0*Z(2))+(-0.02986582812574917 - &D0*Z(1)) - W(4)=0.05141563713660119D0*Z(16)+0.005239165960779299D0*Z(15)+(-0. - &01623427735779699D0*Z(14))+(-0.01965809746040371D0*Z(13))+0.054688 - &97337339577D0*Z(12)+(-0.014224695935687D0*Z(11))+(-0.0505181779315 - &6355D0*Z(10))+(-0.04353074206076491D0*Z(9))+0.2012230497530726D0*Z - &(8)+(-0.06630874514535952D0*Z(7))+(-0.1280829963720053D0*Z(6))+(-0 - &.305169742604165D0*Z(5))+0.8600427128450191D0*Z(4)+(-0.32415033802 - &68184D0*Z(3))+(-0.09033531980693314D0*Z(2))+0.09089205517109111D0* - &Z(1) - W(5)=0.04556369767776375D0*Z(16)+(-0.001822737697581869D0*Z(15))+( - &-0.002512226501941856D0*Z(14))+0.02947046460707379D0*Z(13)+(-0.014 - &45079632086177D0*Z(12))+(-0.05034242196614937D0*Z(11))+(-0.0376966 - &3291725935D0*Z(10))+0.2171103102175198D0*Z(9)+(-0.0824949256021352 - &4D0*Z(8))+(-0.1473995209288945D0*Z(7))+(-0.315042193418466D0*Z(6)) - &+0.9591623347824002D0*Z(5)+(-0.3852396953763045D0*Z(4))+(-0.141718 - &5427288274D0*Z(3))+(-0.03423495461011043D0*Z(2))+0.319820917706851 - &6D0*Z(1) - W(6)=0.04015147277405744D0*Z(16)+0.01328585741341559D0*Z(15)+0.048 - &26082005465965D0*Z(14)+(-0.04319641116207706D0*Z(13))+(-0.04931323 - &319055762D0*Z(12))+(-0.03526886317505474D0*Z(11))+0.22295383396730 - &01D0*Z(10)+(-0.07375317649315155D0*Z(9))+(-0.1589391311991561D0*Z( - &8))+(-0.328001910890377D0*Z(7))+0.952576555482747D0*Z(6)+(-0.31583 - &09975786731D0*Z(5))+(-0.1846882042225383D0*Z(4))+(-0.0703762046700 - &4427D0*Z(3))+0.2311852964327382D0*Z(2)+0.04254083491825025D0*Z(1) - W(7)=0.06069778964023718D0*Z(16)+0.06681263884671322D0*Z(15)+(-0.0 - &2113506688615768D0*Z(14))+(-0.083996867458326D0*Z(13))+(-0.0329843 - &8523869648D0*Z(12))+0.2276878326327734D0*Z(11)+(-0.067356038933017 - &95D0*Z(10))+(-0.1559813965382218D0*Z(9))+(-0.3363262957694705D0*Z( - &8))+0.9442791158560948D0*Z(7)+(-0.3199955249404657D0*Z(6))+(-0.136 - &2463839920727D0*Z(5))+(-0.1006185171570586D0*Z(4))+0.2057504515015 - &423D0*Z(3)+(-0.02065879269286707D0*Z(2))+0.03160990266745513D0*Z(1 - &) - W(8)=0.126386868896738D0*Z(16)+0.002563370039476418D0*Z(15)+(-0.05 - &581757739455641D0*Z(14))+(-0.07777893205900685D0*Z(13))+0.23117338 - &45834199D0*Z(12)+(-0.06031581134427592D0*Z(11))+(-0.14805474755869 - &52D0*Z(10))+(-0.3364014128402243D0*Z(9))+0.9364014128402244D0*Z(8) - &+(-0.3269452524413048D0*Z(7))+(-0.1396841886557241D0*Z(6))+(-0.056 - &1733845834199D0*Z(5))+0.1777789320590069D0*Z(4)+(-0.04418242260544 - &359D0*Z(3))+(-0.02756337003947642D0*Z(2))+0.07361313110326199D0*Z( - &1) - W(9)=0.07361313110326199D0*Z(16)+(-0.02756337003947642D0*Z(15))+(- - &0.04418242260544359D0*Z(14))+0.1777789320590069D0*Z(13)+(-0.056173 - &3845834199D0*Z(12))+(-0.1396841886557241D0*Z(11))+(-0.326945252441 - &3048D0*Z(10))+0.9364014128402244D0*Z(9)+(-0.3364014128402243D0*Z(8 - &))+(-0.1480547475586952D0*Z(7))+(-0.06031581134427592D0*Z(6))+0.23 - &11733845834199D0*Z(5)+(-0.07777893205900685D0*Z(4))+(-0.0558175773 - &9455641D0*Z(3))+0.002563370039476418D0*Z(2)+0.126386868896738D0*Z( - &1) - W(10)=0.03160990266745513D0*Z(16)+(-0.02065879269286707D0*Z(15))+0 - &.2057504515015423D0*Z(14)+(-0.1006185171570586D0*Z(13))+(-0.136246 - &3839920727D0*Z(12))+(-0.3199955249404657D0*Z(11))+0.94427911585609 - &48D0*Z(10)+(-0.3363262957694705D0*Z(9))+(-0.1559813965382218D0*Z(8 - &))+(-0.06735603893301795D0*Z(7))+0.2276878326327734D0*Z(6)+(-0.032 - &98438523869648D0*Z(5))+(-0.083996867458326D0*Z(4))+(-0.02113506688 - &615768D0*Z(3))+0.06681263884671322D0*Z(2)+0.06069778964023718D0*Z( - &1) - W(11)=0.04254083491825025D0*Z(16)+0.2311852964327382D0*Z(15)+(-0.0 - &7037620467004427D0*Z(14))+(-0.1846882042225383D0*Z(13))+(-0.315830 - &9975786731D0*Z(12))+0.952576555482747D0*Z(11)+(-0.328001910890377D - &0*Z(10))+(-0.1589391311991561D0*Z(9))+(-0.07375317649315155D0*Z(8) - &)+0.2229538339673001D0*Z(7)+(-0.03526886317505474D0*Z(6))+(-0.0493 - &1323319055762D0*Z(5))+(-0.04319641116207706D0*Z(4))+0.048260820054 - &65965D0*Z(3)+0.01328585741341559D0*Z(2)+0.04015147277405744D0*Z(1) - W(12)=0.3198209177068516D0*Z(16)+(-0.03423495461011043D0*Z(15))+(- - &0.1417185427288274D0*Z(14))+(-0.3852396953763045D0*Z(13))+0.959162 - &3347824002D0*Z(12)+(-0.315042193418466D0*Z(11))+(-0.14739952092889 - &45D0*Z(10))+(-0.08249492560213524D0*Z(9))+0.2171103102175198D0*Z(8 - &)+(-0.03769663291725935D0*Z(7))+(-0.05034242196614937D0*Z(6))+(-0. - &01445079632086177D0*Z(5))+0.02947046460707379D0*Z(4)+(-0.002512226 - &501941856D0*Z(3))+(-0.001822737697581869D0*Z(2))+0.045563697677763 - &75D0*Z(1) - W(13)=0.09089205517109111D0*Z(16)+(-0.09033531980693314D0*Z(15))+( - &-0.3241503380268184D0*Z(14))+0.8600427128450191D0*Z(13)+(-0.305169 - &742604165D0*Z(12))+(-0.1280829963720053D0*Z(11))+(-0.0663087451453 - &5952D0*Z(10))+0.2012230497530726D0*Z(9)+(-0.04353074206076491D0*Z( - &8))+(-0.05051817793156355D0*Z(7))+(-0.014224695935687D0*Z(6))+0.05 - &468897337339577D0*Z(5)+(-0.01965809746040371D0*Z(4))+(-0.016234277 - &35779699D0*Z(3))+0.005239165960779299D0*Z(2)+0.05141563713660119D0 - &*Z(1) - W(14)=(-0.02986582812574917D0*Z(16))+(-0.2995429545781457D0*Z(15)) - &+0.8892996132269974D0*Z(14)+(-0.3523683853026259D0*Z(13))+(-0.1236 - &679206156403D0*Z(12))+(-0.05760560341383113D0*Z(11))+0.20910979278 - &87612D0*Z(10)+(-0.04901428822579872D0*Z(9))+(-0.05483186562035512D - &0*Z(8))+(-0.01632133125029967D0*Z(7))+0.05375944956767728D0*Z(6)+0 - &.002033305231024948D0*Z(5)+(-0.03032392238968179D0*Z(4))+(-0.00660 - &7305534689702D0*Z(3))+0.02021603150122265D0*Z(2)+0.033711981971903 - &02D0*Z(1) - W(15)=(-0.2419652703415429D0*Z(16))+0.9128222941872173D0*Z(15)+(-0 - &.3244016605667343D0*Z(14))+(-0.1688977368984641D0*Z(13))+(-0.05325 - &555586632358D0*Z(12))+0.2176561076571465D0*Z(11)+(-0.0415311995556 - &9051D0*Z(10))+(-0.06095390688679697D0*Z(9))+(-0.01981532388243379D - &0*Z(8))+0.05258889186338282D0*Z(7)+0.00157466157362272D0*Z(6)+(-0. - &0135713672105995D0*Z(5))+(-0.01764072463999744D0*Z(4))+0.010940122 - &10519586D0*Z(3)+0.008812321197398072D0*Z(2)+0.0227345011107737D0*Z - &(1) - W(16)=1.019463911841327D0*Z(16)+(-0.2803531651057233D0*Z(15))+(-0. - &1165300508238904D0*Z(14))+(-0.1385343580686922D0*Z(13))+0.22647669 - &47290192D0*Z(12)+(-0.02434652144032987D0*Z(11))+(-0.04723268012114 - &625D0*Z(10))+(-0.03586220812223305D0*Z(9))+0.04932374658377151D0*Z - &(8)+0.00372306473653087D0*Z(7)+(-0.01219194009813166D0*Z(6))+(-0.0 - &07005540882865317D0*Z(5))+0.002957434991769087D0*Z(4)+0.0021069739 - &00813502D0*Z(3)+0.001747395874954051D0*Z(2)+0.01707454969713436D0* - &Z(1) - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp29 Example Code} -\label{Asp29ExampleCode} -\index{pages!Asp29ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp29ExampleCode} -\index{Asp29ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp29ExampleCode}{Asp29 Example Code} -\begin{verbatim} - SUBROUTINE MONIT(ISTATE,NEXTIT,NEVALS,NEVECS,K,F,D) - DOUBLE PRECISION D(K),F(K) - INTEGER K,NEXTIT,NEVALS,NVECS,ISTATE - CALL F02FJZ(ISTATE,NEXTIT,NEVALS,NEVECS,K,F,D) - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp30 Example Code} -\label{Asp30ExampleCode} -\index{pages!Asp30ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp30ExampleCode} -\index{Asp30ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp30ExampleCode}{Asp30 Example Code} -\begin{verbatim} - SUBROUTINE APROD(MODE,M,N,X,Y,RWORK,LRWORK,IWORK,LIWORK) - DOUBLE PRECISION X(N),Y(M),RWORK(LRWORK) - INTEGER M,N,LIWORK,IFAIL,LRWORK,IWORK(LIWORK),MODE - DOUBLE PRECISION A(5,5) - EXTERNAL F06PAF - A(1,1)=1.0D0 - A(1,2)=0.0D0 - A(1,3)=0.0D0 - A(1,4)=-1.0D0 - A(1,5)=0.0D0 - A(2,1)=0.0D0 - A(2,2)=1.0D0 - A(2,3)=0.0D0 - A(2,4)=0.0D0 - A(2,5)=-1.0D0 - A(3,1)=0.0D0 - A(3,2)=0.0D0 - A(3,3)=1.0D0 - A(3,4)=-1.0D0 - A(3,5)=0.0D0 - A(4,1)=-1.0D0 - A(4,2)=0.0D0 - A(4,3)=-1.0D0 - A(4,4)=4.0D0 - A(4,5)=-1.0D0 - A(5,1)=0.0D0 - A(5,2)=-1.0D0 - A(5,3)=0.0D0 - A(5,4)=-1.0D0 - A(5,5)=4.0D0 - IF(MODE.EQ.1)THEN - CALL F06PAF('N',M,N,1.0D0,A,M,X,1,1.0D0,Y,1) - ELSEIF(MODE.EQ.2)THEN - CALL F06PAF('T',M,N,1.0D0,A,M,Y,1,1.0D0,X,1) - ENDIF - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp31 Example Code} -\label{Asp31ExampleCode} -\index{pages!Asp31ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp31ExampleCode} -\index{Asp31ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp31ExampleCode}{Asp31 Example Code} -\begin{verbatim} - SUBROUTINE PEDERV(X,Y,PW) - DOUBLE PRECISION X,Y(*) - DOUBLE PRECISION PW(3,3) - PW(1,1)=-0.03999999999999999D0 - PW(1,2)=10000.0D0*Y(3) - PW(1,3)=10000.0D0*Y(2) - PW(2,1)=0.03999999999999999D0 - PW(2,2)=(-10000.0D0*Y(3))+(-60000000.0D0*Y(2)) - PW(2,3)=-10000.0D0*Y(2) - PW(3,1)=0.0D0 - PW(3,2)=60000000.0D0*Y(2) - PW(3,3)=0.0D0 - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp33 Example Code} -\label{Asp33ExampleCode} -\index{pages!Asp33ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp33ExampleCode} -\index{Asp33ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp33ExampleCode}{Asp33 Example Code} -\begin{verbatim} - SUBROUTINE REPORT(X,V,JINT) - DOUBLE PRECISION V(3),X - INTEGER JINT - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp34 Example Code} -\label{Asp34ExampleCode} -\index{pages!Asp34ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp34ExampleCode} -\index{Asp34ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp34ExampleCode}{Asp34 Example Code} -\begin{verbatim} - SUBROUTINE MSOLVE(IFLAG,N,X,Y,RWORK,LRWORK,IWORK,LIWORK) - DOUBLE PRECISION RWORK(LRWORK),X(N),Y(N) - INTEGER I,J,N,LIWORK,IFLAG,LRWORK,IWORK(LIWORK) - DOUBLE PRECISION W1(3),W2(3),MS(3,3) - IFLAG=-1 - MS(1,1)=2.0D0 - MS(1,2)=1.0D0 - MS(1,3)=0.0D0 - MS(2,1)=1.0D0 - MS(2,2)=2.0D0 - MS(2,3)=1.0D0 - MS(3,1)=0.0D0 - MS(3,2)=1.0D0 - MS(3,3)=2.0D0 - CALL F04ASF(MS,N,X,N,Y,W1,W2,IFLAG) - IFLAG=-IFLAG - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp35 Example Code} -\label{Asp35ExampleCode} -\index{pages!Asp35ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp35ExampleCode} -\index{Asp35ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp35ExampleCode}{Asp35 Example Code} -\begin{verbatim} - SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) - DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N) - INTEGER LDFJAC,N,IFLAG - IF(IFLAG.EQ.1)THEN - FVEC(1)=(-1.0D0*X(2))+X(1) - FVEC(2)=(-1.0D0*X(3))+2.0D0*X(2) - FVEC(3)=3.0D0*X(3) - ELSEIF(IFLAG.EQ.2)THEN - FJAC(1,1)=1.0D0 - FJAC(1,2)=-1.0D0 - FJAC(1,3)=0.0D0 - FJAC(2,1)=0.0D0 - FJAC(2,2)=2.0D0 - FJAC(2,3)=-1.0D0 - FJAC(3,1)=0.0D0 - FJAC(3,2)=0.0D0 - FJAC(3,3)=3.0D0 - ENDIF - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp4 Example Code} -\label{Asp4ExampleCode} -\index{pages!Asp4ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp4ExampleCode} -\index{Asp4ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp4ExampleCode}{Asp4 Example Code} -\begin{verbatim} - DOUBLE PRECISION FUNCTION FUNCTN(NDIM,X) - DOUBLE PRECISION X(NDIM) - INTEGER NDIM - FUNCTN=(4.0D0*X(1)*X(3)**2*DEXP(2.0D0*X(1)*X(3)))/(X(4)**2+(2.0D0* - &X(2)+2.0D0)*X(4)+X(2)**2+2.0D0*X(2)+1.0D0) - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp41 Example Code} -\label{Asp41ExampleCode} -\index{pages!Asp41ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp41ExampleCode} -\index{Asp41ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp41ExampleCode}{Asp41 Example Code} -\begin{verbatim} - SUBROUTINE FCN(X,EPS,Y,F,N) - DOUBLE PRECISION EPS,F(N),X,Y(N) - INTEGER N - F(1)=Y(2) - F(2)=Y(3) - F(3)=(-1.0D0*Y(1)*Y(3))+2.0D0*EPS*Y(2)**2+(-2.0D0*EPS) - RETURN - END - SUBROUTINE JACOBF(X,EPS,Y,F,N) - DOUBLE PRECISION EPS,F(N,N),X,Y(N) - INTEGER N - F(1,1)=0.0D0 - F(1,2)=1.0D0 - F(1,3)=0.0D0 - F(2,1)=0.0D0 - F(2,2)=0.0D0 - F(2,3)=1.0D0 - F(3,1)=-1.0D0*Y(3) - F(3,2)=4.0D0*EPS*Y(2) - F(3,3)=-1.0D0*Y(1) - RETURN - END - SUBROUTINE JACEPS(X,EPS,Y,F,N) - DOUBLE PRECISION EPS,F(N),X,Y(N) - INTEGER N - F(1)=0.0D0 - F(2)=0.0D0 - F(3)=2.0D0*Y(2)**2-2.0D0 - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp42 Example Code} -\label{Asp42ExampleCode} -\index{pages!Asp42ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp42ExampleCode} -\index{Asp42ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp42ExampleCode}{Asp42 Example Code} -\begin{verbatim} - SUBROUTINE G(EPS,YA,YB,BC,N) - DOUBLE PRECISION EPS,YA(N),YB(N),BC(N) - INTEGER N - BC(1)=YA(1) - BC(2)=YA(2) - BC(3)=YB(2)-1.0D0 - RETURN - END - SUBROUTINE JACOBG(EPS,YA,YB,AJ,BJ,N) - DOUBLE PRECISION EPS,YA(N),AJ(N,N),BJ(N,N),YB(N) - INTEGER N - AJ(1,1)=1.0D0 - AJ(1,2)=0.0D0 - AJ(1,3)=0.0D0 - AJ(2,1)=0.0D0 - AJ(2,2)=1.0D0 - AJ(2,3)=0.0D0 - AJ(3,1)=0.0D0 - AJ(3,2)=0.0D0 - AJ(3,3)=0.0D0 - BJ(1,1)=0.0D0 - BJ(1,2)=0.0D0 - BJ(1,3)=0.0D0 - BJ(2,1)=0.0D0 - BJ(2,2)=0.0D0 - BJ(2,3)=0.0D0 - BJ(3,1)=0.0D0 - BJ(3,2)=1.0D0 - BJ(3,3)=0.0D0 - RETURN - END - SUBROUTINE JACGEP(EPS,YA,YB,BCEP,N) - DOUBLE PRECISION EPS,YA(N),YB(N),BCEP(N) - INTEGER N - BCEP(1)=0.0D0 - BCEP(2)=0.0D0 - BCEP(3)=0.0D0 - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp49 Example Code} -\label{Asp49ExampleCode} -\index{pages!Asp49ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp49ExampleCode} -\index{Asp49ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp49ExampleCode}{Asp49 Example Code} -\begin{verbatim} - SUBROUTINE OBJFUN(MODE,N,X,OBJF,OBJGRD,NSTATE,IUSER,USER) - DOUBLE PRECISION X(N),OBJF,OBJGRD(N),USER(*) - INTEGER N,IUSER(*),MODE,NSTATE - OBJF=X(4)*X(9)+((-1.0D0*X(5))+X(3))*X(8)+((-1.0D0*X(3))+X(1))*X(7) - &+(-1.0D0*X(2)*X(6)) - OBJGRD(1)=X(7) - OBJGRD(2)=-1.0D0*X(6) - OBJGRD(3)=X(8)+(-1.0D0*X(7)) - OBJGRD(4)=X(9) - OBJGRD(5)=-1.0D0*X(8) - OBJGRD(6)=-1.0D0*X(2) - OBJGRD(7)=(-1.0D0*X(3))+X(1) - OBJGRD(8)=(-1.0D0*X(5))+X(3) - OBJGRD(9)=X(4) - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp50 Example Code} -\label{Asp50ExampleCode} -\index{pages!Asp50ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp50ExampleCode} -\index{Asp50ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp50ExampleCode}{Asp50 Example Code} -\begin{verbatim} - SUBROUTINE LSFUN1(M,N,XC,FVECC) - DOUBLE PRECISION FVECC(M),XC(N) - INTEGER I,M,N - FVECC(1)=((XC(1)-2.4D0)*XC(3)+(15.0D0*XC(1)-36.0D0)*XC(2)+1.0D0)/( - &XC(3)+15.0D0*XC(2)) - FVECC(2)=((XC(1)-2.8D0)*XC(3)+(7.0D0*XC(1)-19.6D0)*XC(2)+1.0D0)/(X - &C(3)+7.0D0*XC(2)) - FVECC(3)=((XC(1)-3.2D0)*XC(3)+(4.333333333333333D0*XC(1)-13.866666 - &66666667D0)*XC(2)+1.0D0)/(XC(3)+4.333333333333333D0*XC(2)) - FVECC(4)=((XC(1)-3.5D0)*XC(3)+(3.0D0*XC(1)-10.5D0)*XC(2)+1.0D0)/(X - &C(3)+3.0D0*XC(2)) - FVECC(5)=((XC(1)-3.9D0)*XC(3)+(2.2D0*XC(1)-8.579999999999998D0)*XC - &(2)+1.0D0)/(XC(3)+2.2D0*XC(2)) - FVECC(6)=((XC(1)-4.199999999999999D0)*XC(3)+(1.666666666666667D0*X - &C(1)-7.0D0)*XC(2)+1.0D0)/(XC(3)+1.666666666666667D0*XC(2)) - FVECC(7)=((XC(1)-4.5D0)*XC(3)+(1.285714285714286D0*XC(1)-5.7857142 - &85714286D0)*XC(2)+1.0D0)/(XC(3)+1.285714285714286D0*XC(2)) - FVECC(8)=((XC(1)-4.899999999999999D0)*XC(3)+(XC(1)-4.8999999999999 - &99D0)*XC(2)+1.0D0)/(XC(3)+XC(2)) - FVECC(9)=((XC(1)-4.699999999999999D0)*XC(3)+(XC(1)-4.6999999999999 - &99D0)*XC(2)+1.285714285714286D0)/(XC(3)+XC(2)) - FVECC(10)=((XC(1)-6.8D0)*XC(3)+(XC(1)-6.8D0)*XC(2)+1.6666666666666 - &67D0)/(XC(3)+XC(2)) - FVECC(11)=((XC(1)-8.299999999999999D0)*XC(3)+(XC(1)-8.299999999999 - &999D0)*XC(2)+2.2D0)/(XC(3)+XC(2)) - FVECC(12)=((XC(1)-10.6D0)*XC(3)+(XC(1)-10.6D0)*XC(2)+3.0D0)/(XC(3) - &+XC(2)) - FVECC(13)=((XC(1)-1.34D0)*XC(3)+(XC(1)-1.34D0)*XC(2)+4.33333333333 - &3333D0)/(XC(3)+XC(2)) - FVECC(14)=((XC(1)-2.1D0)*XC(3)+(XC(1)-2.1D0)*XC(2)+7.0D0)/(XC(3)+X - &C(2)) - FVECC(15)=((XC(1)-4.39D0)*XC(3)+(XC(1)-4.39D0)*XC(2)+15.0D0)/(XC(3 - &)+XC(2)) - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp55 Example Code} -\label{Asp55ExampleCode} -\index{pages!Asp55ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp55ExampleCode} -\index{Asp55ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp55ExampleCode}{Asp55 Example Code} -\begin{verbatim} - SUBROUTINE CONFUN(MODE,NCNLN,N,NROWJ,NEEDC,X,C,CJAC,NSTATE,IUSER - &,USER) - DOUBLE PRECISION C(NCNLN),X(N),CJAC(NROWJ,N),USER(*) - INTEGER N,IUSER(*),NEEDC(NCNLN),NROWJ,MODE,NCNLN,NSTATE - IF(NEEDC(1).GT.0)THEN - C(1)=X(6)**2+X(1)**2 - CJAC(1,1)=2.0D0*X(1) - CJAC(1,2)=0.0D0 - CJAC(1,3)=0.0D0 - CJAC(1,4)=0.0D0 - CJAC(1,5)=0.0D0 - CJAC(1,6)=2.0D0*X(6) - ENDIF - IF(NEEDC(2).GT.0)THEN - C(2)=X(2)**2+(-2.0D0*X(1)*X(2))+X(1)**2 - CJAC(2,1)=(-2.0D0*X(2))+2.0D0*X(1) - CJAC(2,2)=2.0D0*X(2)+(-2.0D0*X(1)) - CJAC(2,3)=0.0D0 - CJAC(2,4)=0.0D0 - CJAC(2,5)=0.0D0 - CJAC(2,6)=0.0D0 - ENDIF - IF(NEEDC(3).GT.0)THEN - C(3)=X(3)**2+(-2.0D0*X(1)*X(3))+X(2)**2+X(1)**2 - CJAC(3,1)=(-2.0D0*X(3))+2.0D0*X(1) - CJAC(3,2)=2.0D0*X(2) - CJAC(3,3)=2.0D0*X(3)+(-2.0D0*X(1)) - CJAC(3,4)=0.0D0 - CJAC(3,5)=0.0D0 - CJAC(3,6)=0.0D0 - ENDIF - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp6 Example Code} -\label{Asp6ExampleCode} -\index{pages!Asp6ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp6ExampleCode} -\index{Asp6ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp6ExampleCode}{Asp6 Example Code} -\begin{verbatim} - SUBROUTINE FCN(N,X,FVEC,IFLAG) - DOUBLE PRECISION X(N),FVEC(N) - INTEGER N,IFLAG - FVEC(1)=(-2.0D0*X(2))+(-2.0D0*X(1)**2)+3.0D0*X(1)+1.0D0 - FVEC(2)=(-2.0D0*X(3))+(-2.0D0*X(2)**2)+3.0D0*X(2)+(-1.0D0*X(1))+1. - &0D0 - FVEC(3)=(-2.0D0*X(4))+(-2.0D0*X(3)**2)+3.0D0*X(3)+(-1.0D0*X(2))+1. - &0D0 - FVEC(4)=(-2.0D0*X(5))+(-2.0D0*X(4)**2)+3.0D0*X(4)+(-1.0D0*X(3))+1. - &0D0 - FVEC(5)=(-2.0D0*X(6))+(-2.0D0*X(5)**2)+3.0D0*X(5)+(-1.0D0*X(4))+1. - &0D0 - FVEC(6)=(-2.0D0*X(7))+(-2.0D0*X(6)**2)+3.0D0*X(6)+(-1.0D0*X(5))+1. - &0D0 - FVEC(7)=(-2.0D0*X(8))+(-2.0D0*X(7)**2)+3.0D0*X(7)+(-1.0D0*X(6))+1. - &0D0 - FVEC(8)=(-2.0D0*X(9))+(-2.0D0*X(8)**2)+3.0D0*X(8)+(-1.0D0*X(7))+1. - &0D0 - FVEC(9)=(-2.0D0*X(9)**2)+3.0D0*X(9)+(-1.0D0*X(8))+1.0D0 - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp7 Example Code} -\label{Asp7ExampleCode} -\index{pages!Asp7ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp7ExampleCode} -\index{Asp7ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp7ExampleCode}{Asp7 Example Code} -\begin{verbatim} - SUBROUTINE FCN(X,Z,F) - DOUBLE PRECISION F(*),X,Z(*) - F(1)=DTAN(Z(3)) - F(2)=((-0.03199999999999999D0*DCOS(Z(3))*DTAN(Z(3)))+(-0.02D0*Z(2) - &**2))/(Z(2)*DCOS(Z(3))) - F(3)=-0.03199999999999999D0/(X*Z(2)**2) - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp73 Example Code} -\label{Asp73ExampleCode} -\index{pages!Asp73ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp73ExampleCode} -\index{Asp73ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp73ExampleCode}{Asp73 Example Code} -\begin{verbatim} - SUBROUTINE PDEF(X,Y,ALPHA,BETA,GAMMA,DELTA,EPSOLN,PHI,PSI) - DOUBLE PRECISION ALPHA,EPSOLN,PHI,X,Y,BETA,DELTA,GAMMA,PSI - ALPHA=DSIN(X) - BETA=Y - GAMMA=X*Y - DELTA=DCOS(X)*DSIN(Y) - EPSOLN=Y+X - PHI=X - PSI=Y - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp74 Example Code} -\label{Asp74ExampleCode} -\index{pages!Asp74ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp74ExampleCode} -\index{Asp74ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp74ExampleCode}{Asp74 Example Code} -\begin{verbatim} - SUBROUTINE BNDY(X,Y,A,B,C,IBND) - DOUBLE PRECISION A,B,C,X,Y - INTEGER IBND - IF(IBND.EQ.0)THEN - A=0.0D0 - B=1.0D0 - C=-1.0D0*DSIN(X) - ELSEIF(IBND.EQ.1)THEN - A=1.0D0 - B=0.0D0 - C=DSIN(X)*DSIN(Y) - ELSEIF(IBND.EQ.2)THEN - A=1.0D0 - B=0.0D0 - C=DSIN(X)*DSIN(Y) - ELSEIF(IBND.EQ.3)THEN - A=0.0D0 - B=1.0D0 - C=-1.0D0*DSIN(Y) - ENDIF - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp77 Example Code} -\label{Asp77ExampleCode} -\index{pages!Asp77ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp77ExampleCode} -\index{Asp77ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp77ExampleCode}{Asp77 Example Code} -\begin{verbatim} - SUBROUTINE FCNF(X,F) - DOUBLE PRECISION X - DOUBLE PRECISION F(2,2) - F(1,1)=0.0D0 - F(1,2)=1.0D0 - F(2,1)=0.0D0 - F(2,2)=-10.0D0 - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp78 Example Code} -\label{Asp78ExampleCode} -\index{pages!Asp78ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp78ExampleCode} -\index{Asp78ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp78ExampleCode}{Asp78 Example Code} -\begin{verbatim} - SUBROUTINE FCNG(X,G) - DOUBLE PRECISION G(*),X - G(1)=0.0D0 - G(2)=0.0D0 - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp8 Example Code} -\label{Asp8ExampleCode} -\index{pages!Asp8ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp8ExampleCode} -\index{Asp8ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp8ExampleCode}{Asp8 Example Code} -\begin{verbatim} - SUBROUTINE OUTPUT(XSOL,Y,COUNT,M,N,RESULT,FORWRD) - DOUBLE PRECISION Y(N),RESULT(M,N),XSOL - INTEGER M,N,COUNT - LOGICAL FORWRD - DOUBLE PRECISION X02ALF,POINTS(8) - EXTERNAL X02ALF - INTEGER I - POINTS(1)=1.0D0 - POINTS(2)=2.0D0 - POINTS(3)=3.0D0 - POINTS(4)=4.0D0 - POINTS(5)=5.0D0 - POINTS(6)=6.0D0 - POINTS(7)=7.0D0 - POINTS(8)=8.0D0 - COUNT=COUNT+1 - DO 25001 I=1,N - RESULT(COUNT,I)=Y(I) -25001 CONTINUE - IF(COUNT.EQ.M)THEN - IF(FORWRD)THEN - XSOL=X02ALF() - ELSE - XSOL=-X02ALF() - ENDIF - ELSE - XSOL=POINTS(COUNT) - ENDIF - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp80 Example Code} -\label{Asp80ExampleCode} -\index{pages!Asp80ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp80ExampleCode} -\index{Asp80ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp80ExampleCode}{Asp80 Example Code} -\begin{verbatim} - SUBROUTINE BDYVAL(XL,XR,ELAM,YL,YR) - DOUBLE PRECISION ELAM,XL,YL(3),XR,YR(3) - YL(1)=XL - YL(2)=2.0D0 - YR(1)=1.0D0 - YR(2)=-1.0D0*DSQRT(XR+(-1.0D0*ELAM)) - RETURN - END -\end{verbatim} -\end{page} - -@ -\subsection{Asp9 Example Code} -\label{Asp9ExampleCode} -\index{pages!Asp9ExampleCode!aspex.ht} -\index{aspex.ht!pages!Asp9ExampleCode} -\index{Asp9ExampleCode!aspex.ht!pages} -<>= -\begin{page}{Asp9ExampleCode}{Asp9 Example Code} -\begin{verbatim} - DOUBLE PRECISION FUNCTION G(X,Y) - DOUBLE PRECISION X,Y(*) - G=X+Y(1) - RETURN - END -\end{verbatim} -\end{page} - -@ \section{basic.ht} \subsection{Basic Commands} \label{BasicCommand} \includegraphics[scale=.5]{ps/v71basiccommand.eps} \index{images!basiccommand} +Called from ``Root Page'' (RootPage) \ref{RootPage} on page~\pageref{RootPage} + See Calculus \ref{Calculus} on page~\pageref{Calculus}. The other links on the page call lisp code. @@ -4222,6 +2441,11 @@ The other links on the page call lisp code. @ \subsection{Calculus} \label{Calculus} +\includegraphics[scale=.5]{ps/v71calculus.eps} +\index{images!calculus} + +Called from ``Basic Commands'' \ref{BasicCommand} on +page~\pageref{BasicCommand} \index{pages!Calculus!basic.ht} \index{basic.ht!pages!Calculus} \index{Calculus!basic.ht!pages} @@ -4243,7 +2467,8 @@ The other links on the page call lisp code. What would you like to do? \beginmenu \menulispdownlink{Differentiate}{(|bcDifferentiate|)}\space{} -\menulispdownlink{Do an Indefinite Integral}{(|bcIndefiniteIntegrate|)}\space{} +\menulispdownlink{Do an Indefinite Integral} +{(|bcIndefiniteIntegrate|)}\space{} \menulispdownlink{Do a Definite Integral}{(|bcDefiniteIntegrate|)}\space{} \menulispdownlink{Find a limit}{(|bcLimit|)}\space{} \menulispdownlink{Do a summation}{(|bcSum|)}\space{} @@ -4280,29 +2505,24 @@ the \spadfun{left} and \spadfun{right} branch of every interior node is identical in shape. Balanced binary trees are useful in algebraic computation for -so-called ``divide-and-conquer'' algorithms. -Conceptually, the data for a problem is initially placed at the -root of the tree. -The original data is then split into two subproblems, one for each -subtree. -And so on. -Eventually, the problem is solved at the leaves of the tree. -A solution to the original problem is obtained by some mechanism -that can reassemble the pieces. -In fact, an implementation of the Chinese Remainder Algorithm -using balanced binary trees was first proposed by David Y. Y. -Yun at the IBM T. J. -Watson Research Center in Yorktown Heights, New York, in 1978. -It served as the prototype for polymorphic algorithms in -Axiom. +so-called ``divide-and-conquer'' algorithms. Conceptually, the data +for a problem is initially placed at the root of the tree. The +original data is then split into two subproblems, one for each +subtree. And so on. Eventually, the problem is solved at the leaves +of the tree. A solution to the original problem is obtained by some +mechanism that can reassemble the pieces. In fact, an implementation +of the Chinese Remainder Algorithm using balanced binary trees was +first proposed by David Y. Y. Yun at the IBM T. J. Watson Research +Center in Yorktown Heights, New York, in 1978. It served as the +prototype for polymorphic algorithms in Axiom. In what follows, rather than perform a series of computations with a single expression, the expression is reduced modulo a number of integer primes, a computation is done with modular arithmetic for each prime, and the Chinese Remainder Algorithm is used to obtain the answer to the original problem. -We illustrate this principle with the computation of \texht{$12^2 -= 144$}{12 ** 2 = 144}. +We illustrate this principle with the computation of +\texht{$12^2 = 144$}{12 ** 2 = 144}. \xtc{ A list of moduli. @@ -4382,10 +2602,10 @@ answer for \texht{$12^2$}{12**2}. \subsection{BinaryExpansion} \label{BinaryExpansionXmpPage} \begin{itemize} -\item DecimalExpansionXmpPage \ref{DecimalExpansionXmpPage} on -page~pageref{DecimalExpansionXmpPage} -\item RadixExpansionXmpPage \ref{RadixExpansionXmpPage} on -page~pageref{RadixExpansionXmpPage} +\item DecimalExpansionXmpPage\\ +\ref{DecimalExpansionXmpPage} on page~pageref{DecimalExpansionXmpPage} +\item RadixExpansionXmpPage\\ +\ref{RadixExpansionXmpPage} on page~pageref{RadixExpansionXmpPage} \end{itemize} \index{pages!BinaryExpansionXmpPage!binary.ht} \index{binary.ht!pages!BinaryExpansionXmpPage} @@ -4398,8 +2618,10 @@ All rational numbers have repeating binary expansions. Operations to access the individual bits of a binary expansion can be obtained by converting the value to \spadtype{RadixExpansion(2)}. More examples of expansions are available in -\downlink{`DecimalExpansion'}{DecimalExpansionXmpPage}\ignore{DecimalExpansion}, -\downlink{`HexadecimalExpansion'}{HexadecimalExpansionXmpPage}\ignore{HexadecimalExpansion}, and +\downlink{`DecimalExpansion'}{DecimalExpansionXmpPage} +\ignore{DecimalExpansion}, +\downlink{`HexadecimalExpansion'}{HexadecimalExpansionXmpPage} +\ignore{HexadecimalExpansion}, and \downlink{`RadixExpansion'}{RadixExpansionXmpPage}\ignore{RadixExpansion}. \xtc{ @@ -4450,40 +2672,6 @@ These numbers are bona fide algebraic objects. <>= \begin{page}{BitMaps}{Bit Map Catalog} \beginscroll -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/1x1}} 1x1 -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/2x2}} 2x2 -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/black}} black -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/boxes}} boxes -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/cntr_ptr}} cntr_ptr -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/cntr_ptrmsk}} cntr_ptrmsk -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/cross_weave}} cross_weave -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/dimple1}} dimple1 -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/dimple3}} dimple3 -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/dot}} dot -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/flipped_gray}} flipped_gray -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/gray}} gray -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/gray1}} gray1 -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/gray3}} gray3 -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/icon}} icon -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/left_ptr}} left_ptr -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/left_ptrmsk}} left_ptrmsk -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/light_gray}} light_gray -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/opendot}} opendot -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/opendotMask}} opendotMask -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/right_ptr}} right_ptr -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/right_ptrmsk}} right_ptrmsk -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/root_weave}} root_weave -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/scales}} scales -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/sipb}} sipb -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/star}} star -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/starMask}} starMask -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/stipple}} stipple -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/target}} target -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/tie_fighter}} tie_fighter -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/wide_weave}} wide_weave -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/wierd_size}} wierd_size -%\space{} {\inputbitmap{/usr/include/X11/bitmaps/wingdogs}} wingdogs -%\horizontalline \space{} {\inputbitmap{\htbmdir{}/xfbox.bitmap}} xfbox \space{4} \space{} {\inputbitmap{\htbmdir{}/xfcirc.bitmap}} xfcirc \space{4} \space{} {\inputbitmap{\htbmdir{}/xnobox.bitmap}} Xnobox \space{2} @@ -4564,8 +2752,10 @@ These numbers are bona fide algebraic objects. A basic operator is an object that can be symbolically applied to a list of arguments from a set, the result being a kernel over that set or an expression. -In addition to this section, please see \downlink{`Expression'}{ExpressionXmpPage}\ignore{Expression} -and \downlink{`Kernel'}{KernelXmpPage}\ignore{Kernel} for additional information and examples. +In addition to this section, please see +\downlink{`Expression'}{ExpressionXmpPage}\ignore{Expression} +and \downlink{`Kernel'}{KernelXmpPage}\ignore{Kernel} +for additional information and examples. You create an object of type \axiomType{BasicOperator} by using the \axiomFunFrom{operator}{BasicOperator} operation. @@ -4596,7 +2786,8 @@ To solve the above equation, enter this. }{ \spadpaste{solve(deq, y, x) \free{e1}\free{y}} } -See \downlink{``\ugProblemDEQTitle''}{ugProblemDEQPage} in Section \ugProblemDEQNumber\ignore{ugProblemDEQ} +See \downlink{``\ugProblemDEQTitle''}{ugProblemDEQPage} +in Section \ugProblemDEQNumber\ignore{ugProblemDEQ} for this kind of use of \axiomType{BasicOperator}. Use the single argument form of @@ -4669,7 +2860,8 @@ because the property values are stored as values of type \xtc{ Attach a property by using \axiomFunFrom{setProperty}{BasicOperator}. }{ -\spadpaste{setProperty(y, "use", "unknown function" :: None ) \free{y}\bound{spy}} +\spadpaste{setProperty(y, "use", "unknown function" :: None ) +\free{y}\bound{spy}} } \xtc{ }{ @@ -4709,12 +2901,12 @@ remove a property. <>= \begin{page}{BinarySearchTreeXmpPage}{BinarySearchTree} \beginscroll + \spadtype{BinarySearchTree(R)} is the domain of binary trees with -elements of type \spad{R}, ordered across the nodes of the tree. -A non-empty binary search tree has a value -of type \spad{R}, and \spadfun{right} and \spadfun{left} -binary search subtrees. -If a subtree is empty, it is displayed as a period (``.''). +elements of type \spad{R}, ordered across the nodes of the tree. A +non-empty binary search tree has a value of type \spad{R}, and +\spadfun{right} and \spadfun{left} binary search subtrees. If a +subtree is empty, it is displayed as a period (``.''). \xtc{ Define a list of values to be placed across the tree. @@ -4786,7 +2978,8 @@ Function \userfun{buildFromRoot} builds a binary search tree from a list of elements \spad{ls} and the empty tree \spad{emptybst}. }{ -\spadpaste{buildFromRoot ls == reduce(insertRoot,ls,emptybst)\bound{x2}\free{x1 e}} +\spadpaste{buildFromRoot ls == reduce(insertRoot,ls,emptybst) +\bound{x2}\free{x1 e}} } \xtc{ Apply this to the reverse of the list \spad{lv}. @@ -4885,10 +3078,14 @@ Arithmetic operations are defined on cardinal numbers as follows: If \spad{x = \#X} and \spad{y = \#Y} then \indent{0} -\spad{x+y = \#(X+Y)} \tab{20} cardinality of the disjoint union \newline -\spad{x-y = \#(X-Y)} \tab{20} cardinality of the relative complement \newline -\spad{x*y = \#(X*Y)} \tab{20} cardinality of the Cartesian product \newline -\spad{x**y = \#(X**Y)}\tab{20} cardinality of the set of maps from \spad{Y} to \spad{X} \newline +\spad{x+y = \#(X+Y)} +\tab{20} cardinality of the disjoint union \newline +\spad{x-y = \#(X-Y)} +\tab{20} cardinality of the relative complement \newline +\spad{x*y = \#(X*Y)} +\tab{20} cardinality of the Cartesian product \newline +\spad{x**y = \#(X**Y)} +\tab{20} cardinality of the set of maps from \spad{Y} to \spad{X} \newline \xtc{ Here are some arithmetic examples. @@ -4897,18 +3094,21 @@ Here are some arithmetic examples. } \xtc{ }{ -\spadpaste{[c0*c2, c1*c2, c2*c2, c0*A1, c1*A1, c2*A1, A0*A1] \free{c0,c1,c2,A0,A1}} +\spadpaste{[c0*c2, c1*c2, c2*c2, c0*A1, c1*A1, c2*A1, A0*A1] +\free{c0,c1,c2,A0,A1}} } \xtc{ }{ -\spadpaste{[c2**c0, c2**c1, c2**c2, A1**c0, A1**c1, A1**c2] \free{c0,c1,c2,A1}} +\spadpaste{[c2**c0, c2**c1, c2**c2, A1**c0, A1**c1, A1**c2] +\free{c0,c1,c2,A1}} } \xtc{ Subtraction is a partial operation: it is not defined when subtracting a larger cardinal from a smaller one, nor when subtracting two equal infinite cardinals. }{ -\spadpaste{[c2-c1, c2-c2, c2-c3, A1-c2, A1-A0, A1-A1] \free{c1,c2,c3,A0,A1}} +\spadpaste{[c2-c1, c2-c2, c2-c3, A1-c2, A1-A0, A1-A1] +\free{c1,c2,c3,A0,A1}} } The generalized continuum hypothesis asserts that \begin{verbatim} @@ -4927,7 +3127,8 @@ whether the hypothesis is to be assumed. When the generalized continuum hypothesis is assumed, exponentiation to a transfinite power is allowed. }{ -\spadpaste{[c0**A0, c1**A0, c2**A0, A0**A0, A0**A1, A1**A0, A1**A1] \free{c0,c1,c2,A0,A1,GCH}} +\spadpaste{[c0**A0, c1**A0, c2**A0, A0**A0, A0**A1, A1**A0, A1**A1] +\free{c0,c1,c2,A0,A1,GCH}} } Three commonly encountered cardinal numbers are @@ -5398,7 +3599,9 @@ defined and manipulated efficiently. Character classes can be created by giving either a string or a list of characters. }{ -\spadpaste{cl1 := charClass [char "a", char "e", char "i", char "o", char "u", char "y"] \bound{cl1}} +\spadpaste{cl1 := +charClass [char "a", char "e", char "i", char "o", char "u", char "y"] +\bound{cl1}} } \xtc{ }{ @@ -5771,7 +3974,8 @@ We use Hamilton's notation for \spad{i},\spad{j},\spad{k}. \spadpaste{x * y \free{x y}} } \xtc{ -See \downlink{`Quaternion'}{QuaternionXmpPage}\ignore{Quaternion} for examples of Axiom's constructor +See \downlink{`Quaternion'}{QuaternionXmpPage} +\ignore{Quaternion} for examples of Axiom's constructor implementing quaternions. }{ \spadpaste{y * x \free{x y}} @@ -5845,7 +4049,8 @@ On an \spad{n} space, a grade \spad{p} form has a dual \spad{n-p} form. In particular, in three space the dual of a grade two element identifies \spad{e1*e2->e3, e2*e3->e1, e3*e1->e2}. }{ -\spadpaste{dual2 a == coefficient(a,[2,3]) * i + coefficient(a,[3,1]) * j + coefficient(a,[1,2]) * k \free{i j k}\bound{dual2}} +\spadpaste{dual2 a == coefficient(a,[2,3]) * i + coefficient(a,[3,1]) * +j + coefficient(a,[1,2]) * k \free{i j k}\bound{dual2}} } \xtc{ The vector cross product is then given by this. @@ -5913,11 +4118,15 @@ Verify this identity for particular values of \spad{m,n,r,s}. } \xtc{ }{ -\spadpaste{lhs := reduce(+, [reduce(+, [ g(l,t)*gam(l)*gam(m)*gam(n)*gam(r)*gam(s)*gam(t) for l in 1..4]) for t in 1..4]) \bound{lhs}\free{g gam m n r s}} +\spadpaste{lhs := +reduce(+, [reduce(+, +[ g(l,t)*gam(l)*gam(m)*gam(n)*gam(r)*gam(s)*gam(t) for l in 1..4]) +for t in 1..4]) \bound{lhs}\free{g gam m n r s}} } \xtc{ }{ -\spadpaste{rhs := 2*(gam s * gam m*gam n*gam r + gam r*gam n*gam m*gam s) \bound{rhs}\free{lhs g gam m n r s}} +\spadpaste{rhs := 2*(gam s * gam m*gam n*gam r + gam r*gam n*gam m*gam s) +\bound{rhs}\free{lhs g gam m n r s}} } \endscroll \autobuttons @@ -5983,7 +4192,8 @@ If \spad{R} is a field, you can also divide the complex objects. \spadpaste{a / b \free{a b}\bound{adb}} } \xtc{ -Use a conversion (\downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} in Section \ugTypesConvertNumber\ignore{ugTypesConvert}) to view the last +Use a conversion (\downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} +in Section \ugTypesConvertNumber\ignore{ugTypesConvert}) to view the last object as a fraction of complex integers. }{ \spadpaste{\% :: Fraction Complex Integer \free{adb}} @@ -6766,7 +4976,7 @@ The smallest is DO NOT EDIT! Created by ex2ht. \begin{itemize} \item Menuexdiff \ref{Menuexdiff} on page~\pageref{Menuexdiff} -\item menuexint \ref{menuexint} on page~\pageref{menuexint} +\item Menuexint \ref{Menuexint} on page~\pageref{Menuexint} \item Menuexlap \ref{Menuexlap} on page~\pageref{Menuexlap} \item Menuexlimit \ref{Menuexlimit} on page~\pageref{Menuexlimit} \item Menuexmatrix \ref{Menuexmatrix} on page~\pageref{Menuexmatrix} @@ -7152,8 +5362,8 @@ page~\pageref{ExSumGeneralFunction} page~pageref{BinaryExpansionXmpPage} \item HexadecimalExpansionXmpPage \ref{HexadecimalExpansionXmpPage} on page~pageref{HexadecimalExpansionXmpPage} -\item RadicExpansionPage \ref{RadicExpansionPage} on -page~pageref{RadicExpansionPage} +\item RadixExpansionXmpPage \ref{RadixExpansionXmpPage} on +page~pageref{RadixExpansionXmpPage} \end{itemize} \index{pages!DecimalExpansionXmpPage!decimal.ht} \index{decimal.ht!pages!DecimalExpansionXmpPage} @@ -7555,8 +5765,8 @@ facilities, see \begin{itemize} \item ugIntroVariablesPage \ref{ugIntroVariablesPage} on page~pageref{ugIntroVariablesPage} -\item utTypesConvertPage \ref{utTypesConvertPage} on -page~pageref{utTypesConvertPage} +\item ugTypesConvertPage \ref{ugTypesConvertPage} on +page~pageref{ugTypesConvertPage} \item PolynomialXmpPage \ref{PolynomialXmpPage} on page~pageref{PolynomialXmpPage} \item UnivariatePolynomialXmpPage \ref{UnivariatePolynomialXmpPage} on @@ -9061,11 +7271,11 @@ Here is the {\em twisted cubic curve}: @ \section{expose.ht} -\subsection{TITLE} -\label{TPD} -\index{pages!TPD!expose.ht} -\index{expose.ht!pages!TPD} -\index{TPD!expose.ht!pages} +\subsection{Exposure} +\label{helpExpose} +\index{pages!helpExpose!expose.ht} +\index{expose.ht!pages!helpExpose} +\index{helpExpose!expose.ht!pages} <>= \begin{page}{helpExpose}{Exposure} \beginscroll @@ -9725,10 +7935,10 @@ page~pageref{ugGraphPage} page~pageref{ugProblemNumericPage} \item DoubleFloatXmpPage \ref{DoubleFloatXmpPage} on page~pageref{DoubleFloatXmpPage} -\item ugFloatIntroPage \ref{ugFloatIntroPage} on -page~pageref{ugFloatIntroPage} -\item ugFloatConvertPage \ref{ugFloatConvertPage} on -page~pageref{ugFloatConvertPage} +\item ugxFloatIntroPage \ref{ugxFloatIntroPage} on +page~pageref{ugxFloatIntroPage} +\item ugxFloatConvertPage \ref{ugxFloatConvertPage} on +page~pageref{ugxFloatConvertPage} \item ugxFloatOutputPage \ref{ugxFloatOutputPage} on page~pageref{ugxFloatOutputPage} \item ugxFloatHilbertPage \ref{ugxFloatHilbertPage} on @@ -10905,15 +9115,23 @@ decompositions. \section{function.ht} \subsection{Functions in Axiom} \label{FunctionPage} +\includegraphics[scale=.5]{ps/v71functionpage.eps} +\index{images!functionpage} + +Called from ``Topics'' (TopicPage) \ref{TopicPage} on page~\pageref{TopicPage} \begin{itemize} -\item RationalFunctionPage \ref{RationalFunctionPage} on -page~\pageref{RationalFunctionPage} -\item AlgebraicFunctionPage \ref{AlgebraicFunctionPage} on -page~\pageref{AlgebraicFunctionPage} -\item ElementaryFunctionPage \ref{ElementaryFunctionPage} on -page~\pageref{ElementaryFunctionPage} -\item FunctionSimplificationPage \ref{FunctionSimplificationPage} on -page~\pageref{FunctionSimplificationPage} +\item ``Rational Functions'' (RationalFunctionPage) +\ref{RationalFunctionPage} on page~\pageref{RationalFunctionPage} +\item ``Algebraic Functions'' (AlgebraicFunctionPage) +\ref{AlgebraicFunctionPage} on page~\pageref{AlgebraicFunctionPage} +\item ``Elementary Functions'' (ElementaryFunctionPage) +\ref{ElementaryFunctionPage} on page~\pageref{ElementaryFunctionPage} +\item ``Simplification'' (FunctionSimplificationPage) +\ref{FunctionSimplificationPage} on page~\pageref{FunctionSimplificationPage} +\item ``Pattern Matching'' (ugUserRulesPage) +\ref{ugUserRulesPage} on page~\pageref{ugUserRulesPage} +\item ``Operator Algebra'' (OperatorXmpPage) +\ref{OperatorXmpPage} on page~\pageref{OperatorXmpPage} \end{itemize} \index{pages!FunctionPage!function.ht} \index{function.ht!pages!FunctionPage} @@ -10927,7 +9145,7 @@ You can also define a function by rules or use a built-in function Axiom lets you convert expressions to compiled functions. \beginscroll \beginmenu -\menulink{Rational Functions}{RationatFunctionPage} \tab{22} +\menulink{Rational Functions}{RationalFunctionPage} \tab{22} Quotients of polynomials. \menulink{Algebraic Functions}{AlgebraicFunctionPage} \tab{22} @@ -10955,12 +9173,12 @@ The operator algebra facility. @ \subsection{Rational Functions} -\label{RationatFunctionPage} -\index{pages!RationatFunctionPage!function.ht} -\index{function.ht!pages!RationatFunctionPage} -\index{RationatFunctionPage!function.ht!pages} +\label{RationalFunctionPage} +\index{pages!RationalFunctionPage!function.ht} +\index{function.ht!pages!RationalFunctionPage} +\index{RationalFunctionPage!function.ht!pages} <>= -\begin{page}{RationatFunctionPage}{Rational Functions} +\begin{page}{RationalFunctionPage}{Rational Functions} \beginscroll To create a rational function, just compute the quotient of two polynomials: @@ -12262,16 +10480,22 @@ for glossary entry matching \inputstring{pattern}{24}{*}\end{page} @ \section{graphics.ht} \subsection{Graphics} +\label{GraphicsPage} +\includegraphics[scale=.5]{ps/v71graphicspage.eps} +\index{images!graphicspage} + +Called from ``Topics'' (TopicPage) \ref{TopicPage} on page~\pageref{TopicPage} \begin{itemize} -\item GraphicsExamplePage \ref{GraphicsExamplePage} on -page~\pageref{GraphicsExamplePage} -\item TwoDimensionalGraphicsPage \ref{TwoDimensionalGraphicsPage} on -page~\pageref{TwoDimensionalGraphicsPage} -\item ThreeDimensionalGraphicsPage \ref{ThreeDimensionalGraphicsPage} on +\item ``Examples'' (GraphicsExamplePage) +\ref{GraphicsExamplePage} on page~\pageref{GraphicsExamplePage} +\item ``2D Graphics'' (TwoDimensionalGraphicsPage) +\ref{TwoDimensionalGraphicsPage} on page~\pageref{TwoDimensionalGraphicsPage} +\item ``3D Graphics'' (ThreeDimensionalGraphicsPage) +\ref{ThreeDimensionalGraphicsPage} on page~\pageref{ThreeDimensionalGraphicsPage} -\item ViewportPage \ref{ViewportPage} on page~\pageref{ViewportPage} +\item ``Viewports'' (ViewportPage) +\ref{ViewportPage} on page~\pageref{ViewportPage} \end{itemize} -\label{GraphicsPage} \index{pages!GraphicsPage!graphics.ht} \index{graphics.ht!pages!GraphicsPage} \index{GraphicsPage!graphics.ht!pages} @@ -12868,8 +11092,8 @@ page~\pageref{ParametricCurveGraphicsPage} page~\pageref{PolarGraphicsPage} \item ImplicitCurveGraphicsPage \ref{ImplicitCurveGraphicsPage} on page~\pageref{ImplicitCurveGraphicsPage} -\item ListPoinstsGraphicsPage \ref{ListPoinstsGraphicsPage} on -page~\pageref{ListPoinstsGraphicsPage} +\item ListPointsGraphicsPage \ref{ListPointsGraphicsPage} on +page~\pageref{ListPointsGraphicsPage} \end{itemize} \index{pages!TwoDimensionalGraphicsPage!graphics.ht} \index{graphics.ht!pages!TwoDimensionalGraphicsPage} @@ -13589,12 +11813,12 @@ Apply \spadfun{heapsort} to present elements in order. \subsection{HexadecimalExpansion} \label{HexadecimalExpansionXmpPage} \begin{itemize} -\item DecimalExpansion \ref{DecimalExpansion} on -page~pageref{DecimalExpansion} -\item BinaryExpansion \ref{BinaryExpansion} on -page~pageref{BinaryExpansion} -\item RadixExpansion \ref{RadixExpansion} on -page~pageref{RadixExpansion} +\item DecimalExpansionXmpPage \ref{DecimalExpansionXmpPage} on +page~pageref{DecimalExpansionXmpPage} +\item BinaryExpansionXmpPage \ref{BinaryExpansionXmpPage} on +page~pageref{BinaryExpansionXmpPage} +\item RadixExpansionXmpPage \ref{RadixExpansionXmpPage} on +page~pageref{RadixExpansionXmpPage} \end{itemize} \index{pages!HexadecimalExpansionXmpPage!hexadec.ht} \index{hexadec.ht!pages!HexadecimalExpansionXmpPage} @@ -13653,4164 +11877,6 @@ These numbers are bona fide algebraic objects. \end{page} @ -\section{htxadvpage1.ht} -\subsection{Input Areas} -\label{HTXAdvPage1} -See HTXAdvPage2 \ref{HTXAdvPage2} on page~\pageref{HTXAdvPage2} -\index{pages!HTXAdvPage1!htxadvpage1.ht} -\index{htxadvpage1.ht!pages!HTXAdvPage1} -\index{HTXAdvPage1!htxadvpage1.ht!pages} -<>= -\begin{page}{HTXAdvPage1}{Input areas} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -You have probably seen input areas in other \HyperName{} -pages. They provide {\it dynamic link} capabilities. -Instead of having a choice between certain actions, -they allow you to specify an action on--the--fly. -To use them, you need the following commands: -\beginImportant -\newline -{\tt \\inputstring\{{\it label}\}\{{\it length}\}\{{\it default value}\}} -\newline -{\tt \\stringvalue\{{\it label}\}} -\endImportant - -The first command puts up an input area of the {\it length} -specified. The {\it default value} is placed in it. -The first argument, {\it label} gives a name to the -contents of the input area. -You can refer to those contents by using -the second command. Never place a {\tt \\stringvalue} command -in an "exposed" part of the page. It is only meant -to be used as an argument to an {\it action}. -Here are some examples. - - - - - -\beginImportant -\begin{paste}{HTXAdvPage1xPaste1}{HTXAdvPage1xPatch1} -\pastebutton{HTXAdvPage1xPaste1}{Interpret} -\newline -{\tt Page name \\tab\{16\} } -{\tt \\inputstring\{pagetogo\}\{30\}\{RootPage\}}\newline -{\tt \\newline}\newline -{\tt \\downlink\{GO!\}\{\\stringvalue\{pagetogo\}\}}\newline -\end{paste} -\endImportant - -\beginImportant -\begin{paste}{HTXAdvPage1xPaste2}{HTXAdvPage1xPatch2} -\pastebutton{HTXAdvPage1xPaste2}{Interpret} -\newline -{\tt File to edit \\tab\{16\}}\newline -{\tt \\inputstring\{filetoedit\}\{30\}\{/etc/passwd\}}\newline -{\tt \\newline}\newline -{\tt \\unixcommand\{Ready!\}\{xterm -e vi \\stringvalue\{filetoedit\}\}} -\end{paste} -\endImportant - - -\end{scroll} -\beginmenu -\menulink{Next Page --- Radio boxes}{HTXAdvPage2} -\endmenu - -\end{page} - -@ -\subsection{HTXAdvPage1xPatch1 patch} -\label{HTXAdvPage1xPatch1} -\index{patch!HTXAdvPage1xPatch1!htxadvpage1.ht} -\index{htxadvpage1.ht!patch!HTXAdvPage1xPatch1} -\index{HTXAdvPage1xPatch1!htxadvpage1.ht!patch} -<>= -\begin{patch}{HTXAdvPage1xPatch1} -\begin{paste}{HTXAdvPage1xPaste1A}{HTXAdvPage1xPatch1A} -\pastebutton{HTXAdvPage1xPaste1A}{Source} -\newline -Page name \tab{16} -\inputstring{pagetogo}{30}{RootPage} -\newline -\downlink{GO!}{\stringvalue{pagetogo}} -\end{paste} -\end{patch} - -@ -\subsection{HTXAdvPage1xPatch1A patch} -\label{HTXAdvPage1xPatch1A} -\index{patch!HTXAdvPage1xPatch1A!htxadvpage1.ht} -\index{htxadvpage1.ht!patch!HTXAdvPage1xPatch1A} -\index{HTXAdvPage1xPatch1A!htxadvpage1.ht!patch} -<>= -\begin{patch}{HTXAdvPage1xPatch1A} -\begin{paste}{HTXAdvPage1xPaste1B}{HTXAdvPage1xPatch1} -\pastebutton{HTXAdvPage1xPaste1B}{Interpret} -\newline -{\tt Page name \\tab\{16\} } -{\tt \\inputstring\{pagetogo\}\{30\}\{RootPage\}}\newline -{\tt \\newline}\newline -{\tt \\downlink\{GO!\}\{\\stringvalue\{pagetogo\}\}}\newline -\end{paste} -\end{patch} - -@ -\subsection{HTXAdvPage1xPatch2 patch} -\label{HTXAdvPage1xPatch2} -\index{patch!HTXAdvPage1xPatch2!htxadvpage1.ht} -\index{htxadvpage1.ht!patch!HTXAdvPage1xPatch2} -\index{HTXAdvPage1xPatch2!htxadvpage1.ht!patch} -<>= -\begin{patch}{HTXAdvPage1xPatch2} -\begin{paste}{HTXAdvPage1xPaste2A}{HTXAdvPage1xPatch2A} -\pastebutton{HTXAdvPage1xPaste2A}{Source} -\newline -File to edit \tab{16} -\inputstring{filetoedit}{30}{/etc/passwd} -\newline -\unixcommand{Ready!}{xterm -e vi \stringvalue{filetoedit}} -\end{paste} -\end{patch} - -@ -\subsection{HTXAdvPage1xPatch2A patch} -\label{HTXAdvPage1xPatch2A} -\index{patch!HTXAdvPage1xPatch2A!htxadvpage1.ht} -\index{htxadvpage1.ht!patch!HTXAdvPage1xPatch2A} -\index{HTXAdvPage1xPatch2A!htxadvpage1.ht!patch} -<>= -\begin{patch}{HTXAdvPage1xPatch2A} -\begin{paste}{HTXAdvPage1xPaste2B}{HTXAdvPage1xPatch2} -\pastebutton{HTXAdvPage1xPaste2B}{Interpret} -\newline -{\tt File to edit \\tab\{16\}}\newline -{\tt \\inputstring\{filetoedit\}\{30\}\{/etc/passwd\}}\newline -{\tt \\newline}\newline -{\tt \\unixcommand\{Ready!\}\{xterm -e vi \\stringvalue\{filetoedit\}\}} -\end{paste} -\end{patch} - -@ -\section{htxadvpage2.ht} -\subsection{Radio buttons} -\label{HTXAdvPage2} -See HTXAdvPage3 \ref{HTXAdvPage3} on page~\pageref{HTXAdvPage3} -\index{pages!HTXAdvPage2!htxadvpage2.ht} -\index{htxadvpage2.ht!pages!HTXAdvPage2} -\index{HTXAdvPage2!htxadvpage2.ht!pages} -<>= -\begin{page}{HTXAdvPage2}{Radio buttons} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - - -If you just want to make a multiple-choice -type selection, why not use the {\it radio buttons}. - -You need to use bitmaps for the active areas (the buttons) but -\HyperName{} will keep track of the currently activated button. -You can use this boolean information somewhere else on your page. -The commands to use are: -\beginImportant -\newline -{\tt \\radioboxes\{{\it group name}\}\{{\it bitmap file1}\}\{{\it bitmap file0}\}} -\newline -{\tt \\radiobox[{\it initial state}]\{{\it label}\}\{{\it group name}\}} -\newline -{\tt \\boxvalue\{{\it label}\}} -\endImportant - -The {\tt \\radioboxes} command sets up a group of {\tt \\radiobox} -buttons. The {\it group name} is a label for the group. The filenames -for the bitmaps are specified in {\it bitmap file1} and {\it bitmap file0}. -The first one should denote an activated button and the second -a de-activated one. - -To display each button in a group, use {\tt \\radiobox}. -The {\it initial state} should be either {\tt 1} or {\tt 0} -depending on whether the button should first be displayed as activated or not. -The second {\it label} argument defines the name by which the -current state of the button can be referred to. -The third argument specifies which group this button belongs to. - -The {\tt \\boxvalue} command can then be used in various -actions. The value of it will -be either {\tt t} or {\tt nil}. - -In the example below, we use the {\tt \\htbmfile} macro -defined in {\bf util.ht} so that we do not have to write -the full bitmap file pathnames. - -This is how we set up the group. The {\tt \\radioboxes} command does not display -anything. -Note that these commands cannot be included in a {\it patch}. -This is why we display this time the source and the result -at the same time. -\beginImportant -\newline -{\tt \\radioboxes\{group\}\{\\htbmfile\{pick\}\}\{\\htbmfile\{unpick\}\}}\newline -{\tt \\newline \\table\{}\newline -{\tt \{\\radiobox[1]\{b1\}\{group\}\}}\newline -{\tt \{\\radiobox[0]\{b2\}\{group\}\}}\newline -{\tt \{\\radiobox[0]\{b3\}\{group\}\}\}}\newline -{\tt \\newline}\newline -{\tt \\lispcommand\{lisp\}\{(pprint (list}\newline -{\tt \\boxvalue\{b1\} \\boxvalue\{b2\} \\boxvalue\{b3\}))\}}\newline -{\tt \\newline}\newline -{\tt \\unixcommand\{unix\}\{echo '\\boxvalue\{b1\}}\newline -{\tt \\boxvalue\{b2\} \\boxvalue\{b3\}'\}} -\endImportant -\radioboxes{group}{\htbmfile{pick}}{\htbmfile{unpick}} -\table{ -{\radiobox[1]{b1}{group}} -{\radiobox[0]{b2}{group}} -{\radiobox[0]{b3}{group}}} -\newline -\lispcommand{lisp}{(pprint (list -\boxvalue{b1} \boxvalue{b2} \boxvalue{b3}))} -\newline -\unixcommand{unix}{echo '\boxvalue{b1} -\boxvalue{b2} \boxvalue{b3}'} -\endImportant - - - - -You can only set one radio button at a time. If you want -a non--exclusive selection, try {\tt \\inputbox}. -The syntax for this command is -\beginImportant -\newline -{\tt \\inputbox[{\it initial state}]\{{\it label}\}\{{\it bitmap file1}\}\{{\it bitmap file0}\}} -\endImportant - -There is no group command for these. -\beginImportant -\newline -{\tt \\table\{}\newline -{\tt \{\\inputbox[1]\{c1\}\{\\htbmfile\{pick\}\}\{\\htbmfile\{unpick\}\}\}}\newline -{\tt \{\\inputbox\{c2\}\{\\htbmfile\{pick\}\}\{\\htbmfile\{unpick\}\}\}}\newline -{\tt \{\\inputbox[1]\{c3\}\{\\htbmfile\{pick\}\}\{\\htbmfile\{unpick\}\}\}\}}\newline -{\tt \\newline}\newline -{\tt \\lispcommand\{lisp\}\{(pprint (list}\newline -{\tt \\boxvalue\{c1\} \\boxvalue\{c2\} \\boxvalue\{c3\}))\}}\newline -{\tt \\newline}\newline -{\tt \\unixcommand\{unix\}\{echo }\newline -{\tt '\\boxvalue\{c1\} \\boxvalue\{c2\} \\boxvalue\{c3\}'\}}\newline -\endImportant -\table{ -{\inputbox[1]{c1}{\htbmfile{pick}}{\htbmfile{unpick}}} -{\inputbox{c2}{\htbmfile{pick}}{\htbmfile{unpick}}} -{\inputbox[1]{c3}{\htbmfile{pick}}{\htbmfile{unpick}}}} -\newline -\lispcommand{lisp}{(pprint (list -\boxvalue{c1} \boxvalue{c2} \boxvalue{c3}))} -\newline -\unixcommand{unix}{echo -'\boxvalue{c1} \boxvalue{c2} \boxvalue{c3}'} -\endImportant - - -Note that the {\it initial state} is an -optional argument. If omitted -the button will initially -be deactivated. - -\end{scroll} -\beginmenu -\menulink{Next Page --- Macros}{HTXAdvPage3} -\endmenu - -\end{page} - -@ -\section{htxadvpage3.ht} -\subsection{Macros} -\label{HTXAdvPage3} -See HTXAdvPage4 \ref{HTXAdvPage4} on page~\ref{HTXAdvPage4}p -\index{pages!HTXAdvPage3!htxadvpage3.ht} -\index{htxadvpage3.ht!pages!HTXAdvPage3} -\index{HTXAdvPage3!htxadvpage3.ht!pages} -<>= -\begin{page}{HTXAdvPage3}{Macros} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - - -Sometimes you may find yourself having to -write -almost the same piece of \HyperName{} -text many times. Thankfully, there is a command to ease -the work. -It is the {\tt \\newcommand} command and provides -a macro facility for \HyperName{}. -In this way, you can give a short name to a sequence of \HyperName{} -text and use that name to include the sequence in your pages. -The way this works is the following -\beginImportant -\newline -\centerline{{\tt \\newcommand\{\\{\it name}\}[{\it number of arguments}]\{{\it \HyperName{} text}\}}} -\endImportant -and here is an example from {\bf util.ht} -\beginImportant -\newline -{\tt \\newcommand\{\\axiomSig\}[2]\{\\axiomType\{\#1\} \{\\tt ->\} \\axiomType\{\#2\}\}} -\newline -{\tt \\newcommand\{\\axiomType\}[1]\{\\lispdownlink\{\#1\}\{(|spadType| '|\#1|)\}\}} -\endImportant - -You see that a macro's definition can invoke another. -Don't create a circular definition though! -Notice how the arguments of the macro are used -in the definition. The {\tt \#{\it n}} construct -is the place--holder of the {\it n}'th argument. - -To use the macro, just treat it as an ordinary command. -For instance -\beginImportant -\newline -{\tt \\axiomSig\{Integer\}\{List Integer\}} -\endImportant -displays and acts like this -\beginImportant -\newline -\axiomSig{Integer}{List Integer} -\endImportant - -The best way to familiarise yourself to -macros is to study the macros defined in -\centerline{ -{\bf \env{AXIOM}/doc/hypertex/pages/util.ht} -} -It is highly probable that a good many of them -will prove useful to you. -Clever use of macros will allow you to -create \HyperName{} text that can be -formatted by other programs (such as TeX). -The Axiom User Guide was written -in such a way as to make translation in -\HyperName{} form and TeX form a mechanical process. - - - - -\end{scroll} -\beginmenu -\menulink{Next Page --- Patch and Paste}{HTXAdvPage4} -\endmenu - -\end{page} - -@ -\section{htxadvpage4.ht} -\subsection{Patch and Paste} -\label{HTXAdvPage4} -See HTXAdvPage5 \ref{HTXAdvPage5} on page~\pageref{HTXAdvPage5} -\index{pages!HTXAdvPage4!htxadvpage4.ht} -\index{htxadvpage4.ht!pages!HTXAdvPage4} -\index{HTXAdvPage4!htxadvpage4.ht!pages} -<>= -\begin{page}{HTXAdvPage4}{Patch and Paste} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - - -A powerful \HyperName{} feature is -the ability to {\it replace} -part of a displayed page with another part -when an active area is clicked. The group commands -{\it patch} and {\it paste} offer this facility. -A {\it paste} region can appear anywhere -within a page or a {\it patch}. A {\it patch} region must be defined -outside a page definition. - -We need a few objects to define the {\it paste} -region. These are a {\it name} with which to -refer to it, some way of specifying what it -is to be replaced by and a {\it trigger} for the -replacement. A {\it patch} is how we specify the -second of these objects. -The {\it patch} is generally a sequence of \HyperName{} -text. - -If we want to have the option of returning to the original -(or ,indeed, proceeding to a {\it third} alternative) -we clearly must include a {\it paste} in the {\it patch}. - -Let us start with a simple example. We wish to -have the word {\tt initial} somewhere on the page replaced by the -word {\tt final} at a click of a button. -Let us first define the {\it patch}. It will just contain -the word {\tt final}. Here is a definition of a -patch called {\tt patch1} (note that -the actual definition must be outside this page's definition). -\beginImportant -\newline -{\tt \\begin\{patch\}\{patch1\}} \newline -{\tt final}\newline -{\tt \\end\{patch\}} -\endImportant -We now define a {\it paste} region exactly where we -want the word {\tt initial} to appear. -\beginImportant -\newline -{\tt \\begin\{paste\}\{paste1\}\{patch1\}}\newline -{\tt initial}\newline -{\tt \\end\{paste\}} -\centerline{{\it results in}} -\begin{paste}{paste1}{patch1} -initial -\end{paste} -\endImportant -We have specified first the name of the {\it paste} region -which is {\tt paste1} and then the name of the -replacement {\it patch} which is {\tt patch1}. -Something is missing -- the trigger. -To include a trigger we write -\beginImportant -\newline -{\tt \\pastebutton\{paste1\}\{trigger\} -\centerline{{\it results in}} -\pastebutton{paste1}{trigger} -\endImportant -This new command {\tt \\pastebutton} displays the second argument -as an active area. The first argument specifies the {\it paste} -region it refers to. Clicking on {\tt trigger} above will -replace the word {\tt initial} with the word {\tt final}. - -We can, if we like, include the {\tt \\pastebutton} in the {\it paste} -region. -Let us improve on the situation by providing a way -of going back to the original word {\tt initial} on the page. -The {\it patch} must itself include a {\it paste}. -What will the replacement {\it patch} for this new {\it paste} -be ? Well, we have to define a second {\it patch} -that contains all the stuff in the original {\it paste} -region. Here is the updated {\it patch} for the first replacement. -The {\tt \\MenuDotBitmap} macro is defined in {\bf util.ht}. -It displays a button bitmap. -This time we put the {\tt \\pastebutton} -inside the {\it paste}. -\beginImportant -\newline -{\tt \\begin\{patch\}\{Patch1\}}\newline -{\tt \\begin\{paste\}\{Paste2\}\{Patch2\}}\newline -{\tt \\pastebutton\{Paste2\}\{\\MenuDotBitmap\}}\newline -{\tt final}\newline -{\tt \\end\{paste\}}\newline -{\tt \\end\{patch\}}\newline -\endImportant -and the new {\tt Patch2} {\it patch} -\beginImportant -\newline -{\tt \\begin\{patch\}\{Patch2\}}\newline -{\tt \\begin\{paste\}\{Paste3\}\{Patch1\}}\newline -{\tt \\pastebutton\{Paste3\}\{\\MenuDotBitmap\}}\newline -{\tt initial}\newline -{\tt \\end\{paste\}}\newline -{\tt \\end\{patch\}}\newline -\endImportant - -Remember that these {\it patch} definitons must -occur outside a {\tt \\begin\{page\} - \\end\{page\}} group. -What is left now is to define the starting {\it paste} -region. -\beginImportant -\newline -{\tt \\begin\{paste\}\{Paste1\}\{Patch1\}}\newline -{\tt \\pastebutton\{Paste1\}\{\\MenuDotBitmap\}}\newline -{\tt initial}\newline -{\tt \\end\{paste\}} -\centerline{{\it results in}} -\begin{paste}{Paste1}{Patch1} -\pastebutton{Paste1}{\MenuDotBitmap} -initial -\end{paste} -\endImportant - -Clicking on the button above next to {\tt initial} -will replace the {\tt Paste1} region with -{\tt Patch1}. That {\it patch} -also contains a {\it paste} region ({\tt Paste2}). -Clicking on {\it its} button will put up -{\tt Patch2} which has a {\it paste} region ({\tt Paste3}). -Clicking on {\it its} button will put up {\tt Patch1} -again. In that way, we close the chain of replacements. - - - - -\end{scroll} -\beginmenu -\menulink{Next Page --- Axiom paste-ins}{HTXAdvPage5} -\endmenu - -\end{page} - -@ -\subsection{patch1 patch} -\label{patch1} -\index{patch!patch1!htxadvpage4.ht} -\index{htxadvpage4.ht!patch!patch1} -\index{patch1!htxadvpage4.ht!patch} -<>= -\begin{patch}{patch1} -final -\end{patch} - -@ -\subsection{Patch1 patch} -\label{Patch1} -\index{patch!Patch1!htxadvpage4.ht} -\index{htxadvpage4.ht!patch!Patch1} -\index{Patch1!htxadvpage4.ht!patch} -<>= -\begin{patch}{Patch1} -\begin{paste}{Paste2}{Patch2} -\pastebutton{Paste2}{\MenuDotBitmap} -final -\end{paste} -\end{patch} - -@ -\subsection{Patch2 patch} -\label{Patch2} -\index{patch!Patch2!htxadvpage4.ht} -\index{htxadvpage4.ht!patch!Patch2} -\index{Patch2!htxadvpage4.ht!patch} -<>= -\begin{patch}{Patch2} -\begin{paste}{Paste3}{Patch1} -\pastebutton{Paste3}{\MenuDotBitmap} -initial -\end{paste} -\end{patch} - -@ -\section{htxadvpage5.ht} -\subsection{Axiom paste-ins} -\label{HTXAdvPage5} -See HTXAdvPage6 \ref{HTXAdvPage6} on page~\pageref{HTXAdvPage6} -\index{pages!HTXAdvPage5!htxadvpage5.ht} -\index{htxadvpage5.ht!pages!HTXAdvPage5} -\index{HTXAdvPage5!htxadvpage5.ht!pages} -<>= -\begin{page}{HTXAdvPage5}{Axiom paste-ins} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -The {\it paste} and {\it patch} facility (see \downlink{previous page}{HTXAdvPage4}) -is used to display (or hide) the Axiom output -of an Axiom command ({\tt\\axiomcommand}) -included in a -\HyperName{} page. - -A mechanism has been set up to {\it automatically} generate -these paste-ins. It amounts to replacing an -{\tt \\axiomcommand} by a {\tt \\pastecommand} in the -\HyperName{} page. - -In the case of a \axiomOp{draw} Axiom command -, where the result is to create an interactive viewport, -the appropriate command to use is {\tt \\pastegraph}. -The effect of this is to include (as the output) -the Axiom generated {\it image} of the graph -as an active area. Clicking on it will put up an -interactive viewport. -The {\tt \\pastegraph} command should be used only when -the result of the associated Axiom operation is -to {\it create} an interactive viewport. It is {\it not} necessarily -appropriate for all commands whose result -is a \axiomType{Two{}Dimensional{}Viewport} or \axiomType{Three{}Dimensional{}Viewport}. -The {\tt \\pastecommand} and {\tt \\pastegraph} -are macros defined in {\bf util.ht}. - - - -There is no automatic paste-in generation facility -for Axiom piles (the {\tt \\begin\{axiomsrc\}} command). - - -The automatic paste-in generation mechanism works -by invoking Axiom with a particular option. -\HyperName{} is also started automatically. It reads -the {\tt \\pastecommand} and {\tt \\pastegraph} -commands in all pages in a specified -{\bf somefile.ht} and passes them to -Axiom for evaluation. \HyperName{} -captures the output and writes it out (to a -file called {\bf somefile.pht}) as the body of -some {\it patch} definitions. The commands -encountered are written to a file -{\bf somefile.input} which you can {\tt )read} from an Axiom session. -It also creates directories for the graphics -images encountered. Those files and directories -will be written under the {\it current} directory. -The idea is that you then include the {\it patch} definitions -in {\bf somefile.pht} in your local database using {\bf htadd}. - - -You can try this feature now. Edit a file called, say, {\bf trypaste.ht} -in a directory, say {\bf /tmp}. Put the following \HyperName{} text -in it. -\beginImportant -\newline -{\tt \\begin\{page\}\{TryPaste\}\{Trying out paste-in generation\}}\newline -{\tt \\begin\{scroll\}}\newline -{\tt \\pastecommand\{f z == z**2 \\bound\{f\}\}}\newline -{\tt \\pastegraph\{draw(f,-1..1) \\free\{f\}\}}\newline -{\tt \\pastecommand\{x:= f 3 \\free\{f\}\}}\newline -{\tt \\end\{scroll\}}\newline -{\tt \\end\{page\}}\newline -\endImportant - -From the directory that contains the {\bf trypaste.ht}, -issue -\centerline{ -{\tt htadd -l ./trypaste.ht} -} -You will get the -{\bf ht.db} database file. -Set the environment variable {\tt HTPATH} so that -it points first to your directory and then the system directory. -In the {\bf /bin/csh}, you might use -\centerline{ -{\tt setenv HTPATH /tmp:\$AXIOM/doc/hypertex/pages} -} -Make sure that no {\bf trypaste.input} or {\bf trypaste.pht} -files exist in the directory. -Then issue -\centerline{ -{\tt axiom -paste trypaste.ht} -} - and wait for -Axiom to finish. - -There is a modification you will wish to make to -the {\bf trypaste.pht} file. -This is because the generated \HyperName{} text will assume that -the {\it viewport} data will be located in the -{\it system} directory. -\centerline{{\bf \env{AXIOM}/doc/viewports}} -You may want to place your images in a different directory, -say, {\bf /u/sugar/viewports}. -If so, then change all occurences of -\beginImportant -\newline -{\tt \\env\{AXIOM\}/doc/viewports/} -\centerline{{\it by}} -{\tt /u/sugar/viewports/} -\endImportant -in the file {\bf trypaste.pht}. The last step -is to include the {\it patch} definitions -in {\bf trypaste.pht} to your local database. -Issue -\centerline{ -{\tt htadd -l ./trypaste.pht} -} -to update the database. If you have provided -a link to your pages from the {\tt RootPage} -via the {\tt \\localinfo} macro, you should now -be able to start Axiom or \HyperName{} -and see the computed Axiom output whenever you -click on the buttons to the left of each command. - - - -\end{scroll} -\beginmenu -\menulink{Next Page --- Miscellaneous}{HTXAdvPage6} -\endmenu - -\end{page} - -@ -\section{htxadvpage6.ht} -\subsection{Miscellaneous} -\label{HTXAdvPage6} -See HTXAdvTopPage \ref{HTXAdvTopPage} on page~\pageref{HTXAdvTopPage} -\index{pages!HTXAdvPage6!htxadvpage6.ht} -\index{htxadvpage6.ht!pages!HTXAdvPage6} -\index{HTXAdvPage6!htxadvpage6.ht!pages} -<>= -\begin{page}{HTXAdvPage6}{Miscellaneous} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - - -We present here a few commands that may be of some use -to you. -You may want to know certain parameters so that you can pass -them to one of the action {\tt \\command}s. - -The {\tt \\thispage} command shows the name of the -current page. - -\beginImportant -\begin{paste}{HTXAdvPage6xPaste1}{HTXAdvPage6xPatch1} -\pastebutton{HTXAdvPage6xPaste1}{Interpret} -\newline -{\tt \\thispage}\newline -{\tt \\newline}\newline -{\tt \\lispcommand\{Lisp\}\{(pprint "\\thispage")\}}\newline -\end{paste} -\endImportant - - -The {\tt \\windowid} command shows the X Windows -{\it WindowID} of the current window. - -\beginImportant -\begin{paste}{HTXAdvPage6xPaste2}{HTXAdvPage6xPatch2} -\pastebutton{HTXAdvPage6xPaste2}{Interpret} -\newline -{\tt \\windowid}\newline -{\tt \\newline}\newline -{\tt \\lispcommand\{Lisp\}\{(pprint \\windowid)\}}\newline -\end{paste} -\endImportant - -% \examplenumber not documented - -The {\tt \\env} command gets the value of an environment -variable. It is an error to use {\tt \\env} with an undefined -environment variable. - -\beginImportant -\begin{paste}{HTXAdvPage6xPaste3}{HTXAdvPage6xPatch3} -\pastebutton{HTXAdvPage6xPaste3}{Interpret} -\newline -{\tt \\env\{AXIOM\}} -\end{paste} -\endImportant - - -The {\tt \\nolines} command, if included somewhere -in the page, eliminates the horizontal lines that -delimit the header and footer regions. - - -% \beep not documented - -%\returnbutton{homebutton}{ReturnPage} - -%\upbutton{upbutton}{UpPage} - - -\end{scroll} -\beginmenu -\menulink{Back to Menu}{HTXAdvTopPage} -\endmenu - -\end{page} - -@ -\subsection{HTXAdvPage6xPatch1 patch} -\label{HTXAdvPage6xPatch1} -\index{patch!HTXAdvPage6xPatch1!htxadvpage6.ht} -\index{htxadvpage6.ht!patch!HTXAdvPage6xPatch1} -\index{HTXAdvPage6xPatch1!htxadvpage6.ht!patch} -<>= -\begin{patch}{HTXAdvPage6xPatch1} -\begin{paste}{HTXAdvPage6xPaste1A}{HTXAdvPage6xPatch1A} -\pastebutton{HTXAdvPage6xPaste1A}{Source} -\newline -\thispage -\newline -\lispcommand{Lisp}{(pprint "\thispage")} -\end{paste} -\end{patch} - -@ -\subsection{HTXAdvPage6xPatch1A patch} -\label{HTXAdvPage6xPatch1A} -\index{patch!HTXAdvPage6xPatch1A!htxadvpage6.ht} -\index{htxadvpage6.ht!patch!HTXAdvPage6xPatch1A} -\index{HTXAdvPage6xPatch1A!htxadvpage6.ht!patch} -<>= -\begin{patch}{HTXAdvPage6xPatch1A} -\begin{paste}{HTXAdvPage6xPaste1B}{HTXAdvPage6xPatch1} -\pastebutton{HTXAdvPage6xPaste1B}{Interpret} -\newline -{\tt \\thispage}\newline -{\tt \\newline}\newline -{\tt \\lispcommand\{Lisp\}\{(pprint "\\thispage")\}}\newline -\end{paste} -\end{patch} - -@ -\subsection{HTXAdvPage6xPatch2 patch} -\label{HTXAdvPage6xPatch2} -\index{patch!HTXAdvPage6xPatch2!htxadvpage6.ht} -\index{htxadvpage6.ht!patch!HTXAdvPage6xPatch2} -\index{HTXAdvPage6xPatch2!htxadvpage6.ht!patch} -<>= -\begin{patch}{HTXAdvPage6xPatch2} -\begin{paste}{HTXAdvPage6xPaste2A}{HTXAdvPage6xPatch2A} -\pastebutton{HTXAdvPage6xPaste2A}{Source} -\newline -\windowid -\newline -\lispcommand{Lisp}{(pprint \windowid)} -\end{paste} -\end{patch} - -@ -\subsection{HTXAdvPage6xPatch2A patch} -\label{HTXAdvPage6xPatch2A} -\index{patch!HTXAdvPage6xPatch2A!htxadvpage6.ht} -\index{htxadvpage6.ht!patch!HTXAdvPage6xPatch2A} -\index{HTXAdvPage6xPatch2A!htxadvpage6.ht!patch} -<>= -\begin{patch}{HTXAdvPage6xPatch2A} -\begin{paste}{HTXAdvPage6xPaste2B}{HTXAdvPage6xPatch2} -\pastebutton{HTXAdvPage6xPaste2B}{Interpret} -\newline -{\tt \\windowid}\newline -{\tt \\newline}\newline -{\tt \\lispcommand\{Lisp\}\{(pprint \\windowid)\}}\newline -\end{paste} -\end{patch} - -@ -\subsection{HTXAdvPage6xPatch3 patch} -\label{HTXAdvPage6xPatch3} -\index{patch!HTXAdvPage6xPatch3!htxadvpage6.ht} -\index{htxadvpage6.ht!patch!HTXAdvPage6xPatch3} -\index{HTXAdvPage6xPatch3!htxadvpage6.ht!patch} -<>= -\begin{patch}{HTXAdvPage6xPatch3} -\begin{paste}{HTXAdvPage6xPaste3A}{HTXAdvPage6xPatch3A} -\pastebutton{HTXAdvPage6xPaste3A}{Source} -\newline -\env{AXIOM} -\end{paste} -\end{patch} - -@ -\subsection{HTXAdvPage6xPatch3A patch} -\label{HTXAdvPage6xPatch3A} -\index{patch!HTXAdvPage6xPatch3A!htxadvpage6.ht} -\index{htxadvpage6.ht!patch!HTXAdvPage6xPatch3A} -\index{HTXAdvPage6xPatch3A!htxadvpage6.ht!patch} -<>= -\begin{patch}{HTXAdvPage6xPatch3A} -\begin{paste}{HTXAdvPage6xPaste3B}{HTXAdvPage6xPatch3} -\pastebutton{HTXAdvPage6xPaste3B}{Interpret} -\newline -{\tt \\env\{AXIOM\}}\newline -\end{paste} -\end{patch} - -@ -\section{htxadvtoppage.ht} -\subsection{Advanced features in Hyperdoc} -\label{HTXAdvTopPage} -\begin{itemize} -\item HTXAdvPage1 \ref{HTXAdvPage1} on page~\pageref{HTXAdvPage1} -\item HTXAdvPage2 \ref{HTXAdvPage2} on page~\pageref{HTXAdvPage2} -\item HTXAdvPage3 \ref{HTXAdvPage3} on page~\pageref{HTXAdvPage3} -\item HTXAdvPage4 \ref{HTXAdvPage4} on page~\pageref{HTXAdvPage4} -\item HTXAdvPage5 \ref{HTXAdvPage5} on page~\pageref{HTXAdvPage5} -\item HTXAdvPage6 \ref{HTXAdvPage6} on page~\pageref{HTXAdvPage6} -\end{itemize} -\index{pages!HTXAdvTopPage!htxadvtoppage.ht} -\index{htxadvtoppage.ht!pages!HTXAdvTopPage} -\index{HTXAdvTopPage!htxadvtoppage.ht!pages} -<>= -\begin{page}{HTXAdvTopPage}{Advanced features in Hyperdoc} -\centerline{\fbox{{\tt \thispage}}}\newline -\beginscroll -\beginmenu -\menudownlink{Creating input areas}{HTXAdvPage1} -\menudownlink{Creating radio boxes}{HTXAdvPage2} -\menudownlink{Define new macros }{HTXAdvPage3} -\menudownlink{Using patch and paste}{HTXAdvPage4} -\menudownlink{Generate paste-ins for Axiom commands}{HTXAdvPage5} -\menudownlink{Miscellaneous}{HTXAdvPage6} -\endmenu -\endscroll -\end{page} - -@ -\section{htxformatpage1.ht} -\subsection{Using the special characters} -\label{HTXFormatPage1} -See HTXFormatPage2 \ref{HTXFormatPage2} on page~\pageref{HTXFormatPage2} -\index{pages!HTXFormatPage1!htxformatpage1.ht} -\index{htxformatpage1.ht!pages!HTXFormatPage1} -\index{HTXFormatPage1!htxformatpage1.ht!pages} -<>= -\begin{page}{HTXFormatPage1}{Using the special characters} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -You can display the special characters ({\tt \$ \\ \{ \{ \[ \] \% \#}) -by simply inserting the backslash {\tt \\} character just before any -one of them. So, -\beginImportant -\begin{paste}{HTXFormatPage1xPaste1}{HTXFormatPage1xPatch1} -\pastebutton{HTXFormatPage1xPaste1}{Interpret} -\newline -{\tt the characters \\\$, \\\\, \\\{, \\\}, \\\[, \\\], \\\%, \\\# } -\end{paste} -\endImportant - - -The {\tt \%} character is used in \HyperName{} as a comment marker. -If it is encountered on any line (without being preceded by the {\tt \\} - character, -of course), \HyperName{} will ignore all remaining characters on that line. -\beginImportant -\begin{paste}{HTXFormatPage1xPaste2}{HTXFormatPage1xPatch2} -\pastebutton{HTXFormatPage1xPaste2}{Interpret} -\newline -{\tt the latest figures indicate \% GET THE LATEST FIGURES}\newline -{\tt a steady rise}\indent{0} -\end{paste} -\endImportant - -Earlier versions of \HyperName{} merged the words "indicate" and "a" -into one word in the example above. This no longer occurs. - -%The two lines below are from Release 1.x -%Note that you must leave a space at the beginning of the line after the comment, -%otherwise \HyperName{} would treat "indicate" and "a" as one word. - - -\end{scroll} -\beginmenu -\menulink{Next -- Formatting without commands}{HTXFormatPage2} -\endmenu - -\end{page} - -@ -\subsection{HTXFormatPage1xPatch1 patch} -\label{HTXFormatPage1xPatch1} -\index{patch!HTXFormatPage1xPatch1!htxformatpage1.ht} -\index{htxformatpage1.ht!patch!HTXFormatPage1xPatch1} -\index{HTXFormatPage1xPatch1!htxformatpage1.ht!patch} -<>= -\begin{patch}{HTXFormatPage1xPatch1} -\begin{paste}{HTXFormatPage1xPaste1A}{HTXFormatPage1xPatch1A} -\pastebutton{HTXFormatPage1xPaste1A}{Source} -\newline -the characters \$, \\, \{, \}, \[, \], \%, \# -\end{paste} -\end{patch} -\begin{patch}{HTXFormatPage1xPatch1A} -\begin{paste}{HTXFormatPage1xPaste1B}{HTXFormatPage1xPatch1} -\pastebutton{HTXFormatPage1xPaste1B}{Interpret} -\newline -{\tt the characters \\\$, \\\\, \\\{, \\\}, \\\[, \\\], \\\%, \\\# } -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage1xPatch2 patch} -\label{HTXFormatPage1xPatch2} -\index{patch!HTXFormatPage1xPatch2!htxformatpage1.ht} -\index{htxformatpage1.ht!patch!HTXFormatPage1xPatch2} -\index{HTXFormatPage1xPatch2!htxformatpage1.ht!patch} -<>= -\begin{patch}{HTXFormatPage1xPatch2} -\begin{paste}{HTXFormatPage1xPaste2A}{HTXFormatPage1xPatch2A} -\pastebutton{HTXFormatPage1xPaste2A}{Source} -\newline -the latest figures indicate % GET THE LATEST FIGURES -a steady rise -\end{paste} -\end{patch} -\begin{patch}{HTXFormatPage1xPatch2A} -\begin{paste}{HTXFormatPage1xPaste2B}{HTXFormatPage1xPatch2} -\pastebutton{HTXFormatPage1xPaste2B}{Interpret} -\newline -{\tt the latest figures indicate \% GET THE LATEST FIGURES}\newline -{\tt a steady rise}\indent{0} -\end{paste} -\end{patch} - -@ -\section{htxformatpage2.ht} -\subsection{Formatting without commands} -\label{HTXFormatPage2} -\index{pages!HTXFormatPage2!htxformatpage2.ht} -\index{htxformatpage2.ht!pages!HTXFormatPage2} -\index{HTXFormatPage2!htxformatpage2.ht!pages} -<>= -\begin{page}{HTXFormatPage2}{Formatting without commands} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -\HyperName{} will interpret normal text in a {\em source file} -according to the following rules. \newline -\menuitemstyle{\indentrel{4} -Spaces mark the ends of words. The number of spaces between -words is {\em not} significant, that is, you cannot control word spacing -by inserting or removing extra space characters. -\indentrel{-4}} -\beginImportant -\begin{paste}{HTXFormatPage2xxPaste1}{HTXFormatPage2xPatch1} -\pastebutton{HTXFormatPage2xxPaste1}{Interpret} -\begin{verbatim} -word spacing is not important -\end{verbatim} -\end{paste} -\endImportant -\menuitemstyle{\indentrel{4} -End-of-line characters are not significant. -You can break up lines in the source file as you like. The end-of-line -will be interpreted as a space. -Take advantage of this feature to improve the readability of the -source file. -\indentrel{-4}} -\beginImportant -\begin{paste}{HTXFormatPage2xxPaste2}{HTXFormatPage2xPatch2} -\pastebutton{HTXFormatPage2xxPaste2}{Interpret} -\begin{verbatim} -This is -one -sentence. -\end{verbatim} -\end{paste} -\endImportant -\menuitemstyle{\indentrel{4} -A blank line marks the end of a paragraph. -Leaving more blank lines that necessary has no effect. -\indentrel{-4}} -\beginImportant -\begin{paste}{HTXFormatPage2xxPaste3}{HTXFormatPage2xPatch3} -\pastebutton{HTXFormatPage2xxPaste3}{Interpret} -\begin{verbatim} -some end.% A COMMENT - - -Start a paragraph - -Start another paragraph. -\end{verbatim} -\end{paste} -\endImportant -\menuitemstyle{\indentrel{4} -The two-character combination {\tt \{\}} can be used to indicate -possible breaking of long words. It does not affect the formatting -in any other way. -\indentrel{-4}} -\beginImportant -\begin{paste}{HTXFormatPage2xxPaste4}{HTXFormatPage2xPatch4} -\pastebutton{HTXFormatPage2xxPaste4}{Interpret} -\begin{verbatim} -Generalized{}Multivariate{}Factorize -One{}Dimensional{}Array{}Aggregate -Elementary{}Function{}Definite{}Integration -Elementary{}Functions{}Univariate{}Puiseux{}Series -Finite{}Field{}Cyclic{}Group{}Extension{}ByPolynomial -\end{verbatim} -\end{paste} -\endImportant - - - - -\end{scroll} -\beginmenu -\menulink{Next -- Using different fonts}{HTXFormatPage3} -\endmenu - -\end{page} - -@ -\subsection{HTXFormatPage2xPatch1 patch} -\label{HTXFormatPage2xPatch1} -\index{patch!HTXFormatPage2xPatch1!htxformatpage2.ht} -\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch1} -\index{HTXFormatPage2xPatch1!htxformatpage2.ht!patch} -<>= -\begin{patch}{HTXFormatPage2xPatch1} -\begin{paste}{HTXFormatPage2xxPaste1A}{HTXFormatPage2xPatch1A} -\pastebutton{HTXFormatPage2xxPaste1A}{Source} -\newline -word spacing is not important -\end{paste} -\end{patch} -\begin{patch}{HTXFormatPage2xPatch1A} -\begin{paste}{HTXFormatPage2xxPaste1B}{HTXFormatPage2xPatch1} -\pastebutton{HTXFormatPage2xxPaste1B}{Interpret} -\begin{verbatim} -word spacing is not important -\end{verbatim} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage2xPatch2 patch} -\label{HTXFormatPage2xPatch2} -\index{patch!HTXFormatPage2xPatch2!htxformatpage2.ht} -\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch2} -\index{HTXFormatPage2xPatch2!htxformatpage2.ht!patch} -<>= -\begin{patch}{HTXFormatPage2xPatch2} -\begin{paste}{HTXFormatPage2xxPaste2A}{HTXFormatPage2xPatch2A} -\pastebutton{HTXFormatPage2xxPaste2A}{Source} -\newline -This is -one -sentence. -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage2xPatch2A patch} -\label{HTXFormatPage2xPatch2A} -\index{patch!HTXFormatPage2xPatch2A!htxformatpage2.ht} -\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch2A} -\index{HTXFormatPage2xPatch2A!htxformatpage2.ht!patch} -<>= -\begin{patch}{HTXFormatPage2xPatch2A} -\begin{paste}{HTXFormatPage2xxPaste2B}{HTXFormatPage2xPatch2} -\pastebutton{HTXFormatPage2xxPaste2B}{Interpret} -\begin{verbatim} -This is -one -sentence. -\end{verbatim} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage2xPatch3 patch} -\label{HTXFormatPage2xPatch3} -\index{patch!HTXFormatPage2xPatch3!htxformatpage2.ht} -\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch3} -\index{HTXFormatPage2xPatch3!htxformatpage2.ht!patch} -<>= -\begin{patch}{HTXFormatPage2xPatch3} -\begin{paste}{HTXFormatPage2xxPaste3A}{HTXFormatPage2xPatch3A} -\pastebutton{HTXFormatPage2xxPaste3A}{Source} -\newline -some end.% A COMMENT - - -Start a paragraph. - -Start another paragraph. -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage2xPatch3A patch} -\label{HTXFormatPage2xPatch3A} -\index{patch!HTXFormatPage2xPatch3A!htxformatpage2.ht} -\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch3A} -\index{HTXFormatPage2xPatch3A!htxformatpage2.ht!patch} -<>= -\begin{patch}{HTXFormatPage2xPatch3A} -\begin{paste}{HTXFormatPage2xxPaste3B}{HTXFormatPage2xPatch3} -\pastebutton{HTXFormatPage2xxPaste3B}{Interpret} -\begin{verbatim} -some end.% A COMMENT - - -Start a paragraph - -Start another paragraph. -\end{verbatim} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage2xPatch4 patch} -\label{HTXFormatPage2xPatch4} -\index{patch!HTXFormatPage2xPatch4!htxformatpage2.ht} -\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch4} -\index{HTXFormatPage2xPatch4!htxformatpage2.ht!patch} -<>= -\begin{patch}{HTXFormatPage2xPatch4} -\begin{paste}{HTXFormatPage2xxPaste4A}{HTXFormatPage2xPatch4A} -\pastebutton{HTXFormatPage2xxPaste4A}{Source} -\newline -Generalized{}Multivariate{}Factorize -One{}Dimensional{}Array{}Aggregate -Elementary{}Function{}Definite{}Integration -Elementary{}Functions{}Univariate{}Puiseux{}Series -Finite{}Field{}Cyclic{}Group{}Extension{}ByPolynomial -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage2xPatch4A patch} -\label{HTXFormatPage2xPatch4A} -\index{patch!HTXFormatPage2xPatch4A!htxformatpage2.ht} -\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch4A} -\index{HTXFormatPage2xPatch4A!htxformatpage2.ht!patch} -<>= -\begin{patch}{HTXFormatPage2xPatch4A} -\begin{paste}{HTXFormatPage2xxPaste4B}{HTXFormatPage2xPatch4} -\pastebutton{HTXFormatPage2xxPaste4B}{Interpret} -\begin{verbatim} -Generalized{}Multivariate{}Factorize -One{}Dimensional{}Array{}Aggregate -Elementary{}Function{}Definite{}Integration -Elementary{}Functions{}Univariate{}Puiseux{}Series -Finite{}Field{}Cyclic{}Group{}Extension{}ByPolynomial -\end{verbatim} -\end{paste} -\end{patch} - -@ -\section{htxformatpage3.ht} -\subsection{Using different fonts} -\label{HTXFormatPage3} -\index{pages!HTXFormatPage3!htxformatpage3.ht} -\index{htxformatpage3.ht!pages!HTXFormatPage3} -\index{HTXFormatPage3!htxformatpage3.ht!pages} -<>= -\begin{page}{HTXFormatPage3}{Using different fonts} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -You can use various fonts for the text. \HyperName{} makes -four {\em logical} fonts available to you: a {\em roman} font, an -{\em emphasised} font, a {\em bold} font and a -{\em typewriter} font. The actual font that corresponds to -each logical font is determined by the end user via a -defaults file. The colour for each of these fonts can also -be specified. - -Normal text is displayed with the roman font. -If you want to emphasize some text, use the {\tt \\em} -command in the following way. -\beginImportant -\begin{paste}{HTXFormatPage3xPaste1}{HTXFormatPage3xPatch1} -\pastebutton{HTXFormatPage3xPaste1}{Interpret} -\newline -{\tt this is \{\\em emphasised\} text} -\end{paste} -\endImportant - -Note the use of the braces to enclose command and "arguments". -All font commands are specified in the same way. The {\tt \\em} command -will in fact {\em switch} between roman and emphasised -font every time it is used. -\beginImportant -\begin{paste}{HTXFormatPage3xPaste2}{HTXFormatPage3xPatch2} -\pastebutton{HTXFormatPage3xPaste2}{Interpret} -\newline -{\tt \{\\em this is \{\\em emphasised\} text\}} -\end{paste} -\endImportant - -If you want to be sure that the emphasized font will be used, specify -the {\tt \\it} command. Similarly, you can explicitly select the roman font -with the {\tt \\rm} command. -\beginImportant -\begin{paste}{HTXFormatPage3xPaste3}{HTXFormatPage3xPatch3} -\pastebutton{HTXFormatPage3xPaste3}{Interpret} -\newline -{\tt \{\\em this is \{\\it emphasised\} text and this is \{\\rm roman\}\}} -\end{paste} -\endImportant - - -The bold font is selected with the {\tt \\bf} command and the typewriter -font with the {\tt \\tt} command. All these commands can be applied to -individual characters, words, sentences etc. -\beginImportant -\begin{paste}{HTXFormatPage3xPaste4}{HTXFormatPage3xPatch4} -\pastebutton{HTXFormatPage3xPaste4}{Interpret} -\newline -{\tt \{\\bf U\}\{\\tt g\}\{\\it l\}\{\\rm y\}} -\end{paste} -\endImportant - - -Currently, \HyperName{} does not adjust its internal spacing rules -to each font individually. This means that, for consistent results, -users are encouraged to specify (in the defaults file) -"character-cell" fonts that are not -too small or too large for \HyperName{}. Here is the correspondence -between the above font commands and the defaults names:\newline -\menuitemstyle{RmFont \tab{26} {\tt \\rm} or {\tt \\em} }\newline -\menuitemstyle{BoldFont \tab{26} {\tt \\bf} }\newline -\menuitemstyle{EmphasizeFont \tab{26} {\tt \\it} or {\tt \\em} }\newline -\menuitemstyle{Ttfont \tab{26} {\tt \\tt} }\newline - -\HyperName{} uses two more logical fonts that can be specified by -the end user : AxiomFont and ActiveFont. However, you cannot -explicitly use these fonts in your text. The ActiveFont is automatically -used for active area text and the AxiomFont is reserved for -active Axiom commands. - - - - -\end{scroll} -\beginmenu -\menulink{Next -- Indentation}{HTXFormatPage4} -\endmenu - -\end{page} - -@ -\subsection{HTXFormatPage3xPatch1 patch} -\label{HTXFormatPage3xPatch1} -\index{patch!HTXFormatPage3xPatch1!htxformatpage3.ht} -\index{htxformatpage3.ht!patch!HTXFormatPage3xPatch1} -\index{HTXFormatPage3xPatch1!htxformatpage3.ht!patch} -<>= -\begin{patch}{HTXFormatPage3xPatch1} -\begin{paste}{HTXFormatPage3xPaste1A}{HTXFormatPage3xPatch1A} -\pastebutton{HTXFormatPage3xPaste1A}{Source} -\newline -this is {\em emphasised} text -\end{paste} -\end{patch} -\begin{patch}{HTXFormatPage3xPatch1A} -\begin{paste}{HTXFormatPage3xPaste1B}{HTXFormatPage3xPatch1} -\pastebutton{HTXFormatPage3xPaste1B}{Interpret} -\newline -{\tt this is \{\\em emphasised\} text} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage3xPatch2 patch} -\label{HTXFormatPage3xPatch2} -\index{patch!HTXFormatPage3xPatch2!htxformatpage3.ht} -\index{htxformatpage3.ht!patch!HTXFormatPage3xPatch2} -\index{HTXFormatPage3xPatch2!htxformatpage3.ht!patch} -<>= -\begin{patch}{HTXFormatPage3xPatch2} -\begin{paste}{HTXFormatPage3xPaste2A}{HTXFormatPage3xPatch2A} -\pastebutton{HTXFormatPage3xPaste2A}{Source} -\newline -{\em this is {\em emphasised} text} -\end{paste} -\end{patch} -\begin{patch}{HTXFormatPage3xPatch2A} -\begin{paste}{HTXFormatPage3xPaste2B}{HTXFormatPage3xPatch2} -\pastebutton{HTXFormatPage3xPaste2B}{Interpret} -\newline -{\tt \{\\em this is \{\\em emphasised\} text\}} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage3xPatch3 patch} -\label{HTXFormatPage3xPatch3} -\index{patch!HTXFormatPage3xPatch3!htxformatpage3.ht} -\index{htxformatpage3.ht!patch!HTXFormatPage3xPatch3} -\index{HTXFormatPage3xPatch3!htxformatpage3.ht!patch} -<>= -\begin{patch}{HTXFormatPage3xPatch3} -\begin{paste}{HTXFormatPage3xPaste3A}{HTXFormatPage3xPatch3A} -\pastebutton{HTXFormatPage3xPaste3A}{Source} -\newline -{\em this is {\it emphasised} text and this is {\rm roman}} -\end{paste} -\end{patch} -\begin{patch}{HTXFormatPage3xPatch3A} -\begin{paste}{HTXFormatPage3xPaste3B}{HTXFormatPage3xPatch3} -\pastebutton{HTXFormatPage3xPaste3B}{Interpret} -\newline -{\tt \{\\em this is \{\\it emphasised\} text and this is \{\\rm roman\}\}} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage3xPatch4 patch} -\label{HTXFormatPage3xPatch4} -\index{patch!HTXFormatPage3xPatch4!htxformatpage3.ht} -\index{htxformatpage3.ht!patch!HTXFormatPage3xPatch4} -\index{HTXFormatPage3xPatch4!htxformatpage3.ht!patch} -<>= -\begin{patch}{HTXFormatPage3xPatch4} -\begin{paste}{HTXFormatPage3xPaste4A}{HTXFormatPage3xPatch4A} -\pastebutton{HTXFormatPage3xPaste4A}{Source} -\newline -{\bf U}{\tt g}{\it l}{\rm y} -\end{paste} -\end{patch} -\begin{patch}{HTXFormatPage3xPatch4A} -\begin{paste}{HTXFormatPage3xPaste4B}{HTXFormatPage3xPatch4} -\pastebutton{HTXFormatPage3xPaste4B}{Interpret} -\newline -{\tt \{\\bf U\}\{\\tt g\}\{\\it l\}\{\\rm y\}} -\end{paste} -\end{patch} - -@ -\section{htxformatpage4.ht} -\subsection{Indentation} -\label{HTXFormatPage4} -\index{pages!HTXFormatPage4!htxformatpage4.ht} -\index{htxformatpage4.ht!pages!HTXFormatPage4} -\index{HTXFormatPage4!htxformatpage4.ht!pages} -<>= -\begin{page}{HTXFormatPage4}{Indentation} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -You can control the indentation of lines of text in \HyperName{} with -some useful commands. -Use the command {\tt \\par} to force a new paragraph if you don't want -to use the blank-line rule. The first line of a new paragraph -will normally be indented by a standard small amount. If you -just want to start on a new line, use the {\tt \\newline} -command. -\beginImportant -\begin{paste}{HTXFormatPage4xPaste1}{HTXFormatPage4xPatch1} -\pastebutton{HTXFormatPage4xPaste1}{Interpret} -\newline -{\tt let us start a new line \\newline here } -\end{paste} -\endImportant - -The command {\tt \\indent\{{\it value}\}} will -set the left-page-margin {\it value} characters -to the right of the standard left-page-margin. -The initial (standard) state of a page can be reset by the -{\tt \\indent\{0\}} command. -The first lines of paragraphs will be indented -by the {\it extra} standard amount. The {\tt \\indent\{{\it value}\}} -command does {\em not} force a new line or paragraph. - -You can also use the {\tt \\indentrel\{{\it value}\}} command. -Here, the {\it value} argument is a {\em relative} indentation -which can be positive or negative. -Otherwise, it behaves in the same way as the {\tt \\indent} command. -\beginImportant -\begin{paste}{HTXFormatPage4xPaste2}{HTXFormatPage4xPatch2} -\pastebutton{HTXFormatPage4xPaste2}{Interpret} -\newline -{\tt let us start a new line \\newline \\indent\{10\} here }\newline -{\tt \\newline \\indentrel\{-5\} there}\newline -{\tt \\newline \\indentrel\{-5\} back} -\end{paste} -\endImportant - -The {\tt \\centerline\{{\it some text}\}} command will center its -argument between the current left and right margins. The argument of -the command should not be more than a paragraph of text and should not contain -any commands that change the left margin. The centered text will -start on a new line. -\beginImportant -\begin{paste}{HTXFormatPage4xPaste3}{HTXFormatPage4xPatch3} -\pastebutton{HTXFormatPage4xPaste3}{Interpret} -\newline -{\tt previous text. \\centerline\{This could}\newline -{\tt be some heading.\} Carry on} -\end{paste} -\endImportant - -Placing text in vertically aligned columns is easily done with the -{\tt \\tab\{{\it value}\}} command. The {\tt \\tab} command has the -immediate effect of placing the next word {\it value} characters to -the right of the current left margin. -\beginImportant -\begin{paste}{HTXFormatPage4xPaste4}{HTXFormatPage4xPatch4} -\pastebutton{HTXFormatPage4xPaste4}{Interpret} -\newline -{\tt \\indent\{5\}\\newline}\newline -{\tt Team A \\tab\{17\}Score\\tab\{25\}Team B\\tab\{42\}Score\\newline}\newline -{\tt 012345678901234567890123456789012345678901234567890\\newline}\newline -{\tt Green-Red\\tab\{17\}4\\tab\{25\}Blue-Black\\tab\{42\}6\\newline}\newline -{\tt \\indent\{0\}} -\end{paste} -\endImportant - -If you wish to preserve the indentation of a piece of text -you can use the {\tt verbatim} group command. Simply place -a {\tt \\begin\{verbatim\}} and {\tt \\end\{verbatim\}} around -the text. Note that \HyperName{} commands will -not be interpreted within the {\tt verbatim} group. -\beginImportant -\begin{paste}{HTXFormatPage4xPaste5}{HTXFormatPage4xPatch5} -\pastebutton{HTXFormatPage4xPaste5}{Interpret} -\newline -{\tt \\begin\{verbatim\}} -\begin{verbatim} -This spacing will be preserved - {\bf is} preserved -\end{verbatim} -{\tt \\end\{verbatim\}}\newline -\end{paste} - - - - - - - -\end{scroll} -\beginmenu -\menulink{Next -- Creating Lists and Tables}{HTXFormatPage5} -\endmenu - -\end{page} - -@ -\subsection{HTXFormatPage4xPatch1 patch} -\label{HTXFormatPage4xPatch1} -\index{patch!HTXFormatPage4xPatch1!htxformatpage4.ht} -\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch1} -\index{HTXFormatPage4xPatch1!htxformatpage4.ht!patch} -<>= -\begin{patch}{HTXFormatPage4xPatch1} -\begin{paste}{HTXFormatPage4xPaste1A}{HTXFormatPage4xPatch1A} -\pastebutton{HTXFormatPage4xPaste1A}{Source} -\newline -let us start a new line \newline here -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage4xPatch1A patch} -\label{HTXFormatPage4xPatch1A} -\index{patch!HTXFormatPage4xPatch1A!htxformatpage4.ht} -\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch1A} -\index{HTXFormatPage4xPatch1A!htxformatpage4.ht!patch} -<>= -\begin{patch}{HTXFormatPage4xPatch1A} -\begin{paste}{HTXFormatPage4xPaste1B}{HTXFormatPage4xPatch1} -\pastebutton{HTXFormatPage4xPaste1B}{Interpret} -\newline -{\tt let us start a new line \\newline here } -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage4xPatch2 patch} -\label{HTXFormatPage4xPatch2} -\index{patch!HTXFormatPage4xPatch2!htxformatpage4.ht} -\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch2} -\index{HTXFormatPage4xPatch2!htxformatpage4.ht!patch} -<>= -\begin{patch}{HTXFormatPage4xPatch2} -\begin{paste}{HTXFormatPage4xPaste2A}{HTXFormatPage4xPatch2A} -\pastebutton{HTXFormatPage4xPaste2A}{Source} -\newline -let us start a new line\newline\indent{10} here -\newline\indentrel{-5} there -\newline\indentrel{-5} back -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage4xPatch2A patch} -\label{HTXFormatPage4xPatch2A} -\index{patch!HTXFormatPage4xPatch2A!htxformatpage4.ht} -\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch2A} -\index{HTXFormatPage4xPatch2A!htxformatpage4.ht!patch} -<>= -\begin{patch}{HTXFormatPage4xPatch2A} -\begin{paste}{HTXFormatPage4xPaste2B}{HTXFormatPage4xPatch2} -\pastebutton{HTXFormatPage4xPaste2B}{Interpret} -\newline -{\tt let us start a new line \\newline \\indent\{10\} here }\newline -{\tt \\newline \\indentrel\{-5\} there}\newline -{\tt \\newline \\indentrel\{-5\} back} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage4xPatch3 patch} -\label{HTXFormatPage4xPatch3} -\index{patch!HTXFormatPage4xPatch3!htxformatpage4.ht} -\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch3} -\index{HTXFormatPage4xPatch3!htxformatpage4.ht!patch} -<>= -\begin{patch}{HTXFormatPage4xPatch3} -\begin{paste}{HTXFormatPage4xPaste3A}{HTXFormatPage4xPatch3A} -\pastebutton{HTXFormatPage4xPaste3A}{Source} -\newline -previous text. \centerline{This could -be some heading.} Carry on -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage4xPatch3A patch} -\label{HTXFormatPage4xPatch3A} -\index{patch!HTXFormatPage4xPatch3A!htxformatpage4.ht} -\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch3A} -\index{HTXFormatPage4xPatch3A!htxformatpage4.ht!patch} -<>= -\begin{patch}{HTXFormatPage4xPatch3A} -\begin{paste}{HTXFormatPage4xPaste3B}{HTXFormatPage4xPatch3} -\pastebutton{HTXFormatPage4xPaste3B}{Interpret} -\newline -{\tt previous text. \\centerline\{This could}\newline -{\tt be some heading.\} Carry on} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage4xPatch4 patch} -\label{HTXFormatPage4xPatch4} -\index{patch!HTXFormatPage4xPatch4!htxformatpage4.ht} -\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch4} -\index{HTXFormatPage4xPatch4!htxformatpage4.ht!patch} -<>= -\begin{patch}{HTXFormatPage4xPatch4} -\begin{paste}{HTXFormatPage4xPaste4A}{HTXFormatPage4xPatch4A} -\pastebutton{HTXFormatPage4xPaste4A}{Source} -\newline -\indent{5}\newline -Team A \tab{17}Score\tab{25}Team B\tab{42}Score\newline -012345678901234567890123456789012345678901234567890\newline -Green-Red\tab{17}4\tab{25}Blue-Black\tab{42}6\newline -\indent{0} -\end{paste} -\end{patch} -\begin{patch}{HTXFormatPage4xPatch4A} -\begin{paste}{HTXFormatPage4xPaste4B}{HTXFormatPage4xPatch4} -\pastebutton{HTXFormatPage4xPaste4B}{Interpret} -\newline -{\tt \\indent\{5\}\\newline}\newline -{\tt Team A \\tab\{17\}Score\\tab\{25\}Team B\\tab\{42\}Score\\newline}\newline -{\tt 012345678901234567890123456789012345678901234567890\\newline}\newline -{\tt Green-Red\\tab\{17\}4\\tab\{25\}Blue-Black\\tab\{42\}6\\newline}\newline -{\tt \\indent\{0\}} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage4xPatch5 patch} -\label{HTXFormatPage4xPatch5} -\index{patch!HTXFormatPage4xPatch5!htxformatpage4.ht} -\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch5} -\index{HTXFormatPage4xPatch5!htxformatpage4.ht!patch} -<>= -\begin{patch}{HTXFormatPage4xPatch5} -\begin{paste}{HTXFormatPage4xPaste5A}{HTXFormatPage4xPatch5A} -\pastebutton{HTXFormatPage4xPaste5A}{Source} -\begin{verbatim} -This spacing will be preserved - {\bf is} preserved -\end{verbatim} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage4xPatch5A patch} -\label{HTXFormatPage4xPatch5A} -\index{patch!HTXFormatPage4xPatch5A!htxformatpage4.ht} -\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch5A} -\index{HTXFormatPage4xPatch5A!htxformatpage4.ht!patch} -<>= -\begin{patch}{HTXFormatPage4xPatch5A} -\begin{paste}{HTXFormatPage4xPaste5B}{HTXFormatPage4xPatch5} -\pastebutton{HTXFormatPage4xPaste5B}{Interpret} -\newline -{\tt \\begin\{verbatim\}} -\begin{verbatim} -This spacing will be preserved - {\bf is} preserved -\end{verbatim} -{\tt \\end\{verbatim\}}\newline -\end{paste} -\end{patch} - -@ -\section{htxformatpage5.ht} -\subsection{Creating Lists and Tables} -\label{HTXFormatPage5} -See HTXFormatPage6 \ref{HTXFormatPage6} on page~\pageref{HTXFormatPage6} -\index{pages!HTXFormatPage5!htxformatpage5.ht} -\index{htxformatpage5.ht!pages!HTXFormatPage5} -\index{HTXFormatPage5!htxformatpage5.ht!pages} -<>= -\begin{page}{HTXFormatPage5}{Creating Lists and Tables} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -The {\tt \\begin\{items\} {\rm -} \\end\{items\}} -group command constructs itemized lists. -The {\tt \\item} command separates the items in the list. -The indentation rules for the list group are different from those -of a paragraph. The first line of an item will -normally extend further to the left than the rest of the lines. -Both commands accept {\em optional} arguments. -Optional arguments are enclosed in square brackets ({\tt \[ \]}) rather -than braces. - -The indentation of subsequent lines in an item is determined by the -optional argument {\it some text} in the -{\tt \\begin\{items\}\[{\it some text}\]} -command. The optional argument is {\em not} displayed. Its width is calculated -and used to indent all subsequent lines in the group except from the -first line of each new item. This indentation rule applies to all text -{\em before} the first {\tt \\item} command as well. - -The {\tt \\item\[{\it some text}\]} command specifies the start of a new item. -The {\it some text} optional argument will be displayed in {\em bold} -font at the current left-page-margin. Then, the text following the command -will be displayed in normal fashion with the above indentation rule. -\beginImportant -\begin{paste}{HTXFormatPage5xPaste1}{HTXFormatPage5xPatch1} -\pastebutton{HTXFormatPage5xPaste1}{Interpret} -\newline -{\tt \\indent\{5\}}\newline -{\tt \\begin\{items\}\[how wide am I\]}\newline -{\tt Here we carry on but a \\newline} \newline -{\tt new line will be indented } \newline -{\tt \\item\[how wide am I\] fits nicely. -Here is a \\newline new line in an item.}\newline -{\tt \\item\[again\] to show another item}\newline -{\tt \\item\[\\\\tab\]\\tab\{0\} can be used \\tab\{15\} effectively}\newline -{\tt \\end\{items\}}\newline -{\tt \\indent\{0\}}\newline -\end{paste} -\endImportant - - -Note that the {\tt \\begin\{items\}} command immediately sets the left- -page-margin to a new value. Subsequent -{\tt \\tab} or {\tt \\centerline} commands -refer to this new margin. -Any explicit margin setting commands included -in the group {\em will} have the normal effect. -The {\tt \\par} command does not produce -the standard paragraph indentation within a list group --- it behaves -instead like {\tt \\newline}. - - -You can nest list groups like the following example suggests. -\beginImportant -\begin{paste}{HTXFormatPage5xPaste2}{HTXFormatPage5xPatch2} -\pastebutton{HTXFormatPage5xPaste2}{Interpret} -\newline -{\tt \\begin\{items\}\[quitealot\]}\newline -{\tt A nested list:}\newline -{\tt \\item\[The first\] item of an itemized list is on this line.}\newline -{\tt \\item\[The second\] item of the list starts here. It contains another}\newline -{\tt list nested inside it.}\newline -{\tt \\begin\{items\}\[somuchmore\]}\newline -{\tt \\item \[First\]\\tab\{0\}This is the first item of an enumerated}\newline -{\tt list that is nested within the itemized list.}\newline -{\tt \\item \[Second\]\\tab\{0\}This is the second item of the inner list.}\newline -{\tt \\end\{items\}}\newline -{\tt This is the rest of the second item of the outer list. It}\newline -{\tt is no more interesting than any other part of the item.}\newline -{\tt \\item\[The third\] item of the list.}\newline -{\tt \\end\{items\}}\newline -\end{paste} -\endImportant - -Another facility for presenting lists is the {\tt \\table} command. -The correct syntax for it is : {\tt \\table\{\{{\it item a}\} \{{\it item b}\} {\it ..}\}}. -The items in the braces will be placed in as many aligned columns -as is possible for the current window dimensions or page width. -If one item is particularly long there will probably be only one column -in the table. Here is a table of color names. -\beginImportant -\begin{paste}{HTXFormatPage5xPaste3}{HTXFormatPage5xPatch3} -\pastebutton{HTXFormatPage5xPaste3}{Interpret} -\newline -{\tt -\\table\{ -\{Dark Orchid\} \{Dark Salmon\} \{Dark Sea Green\} \{Dark Slate Blue\} -\{Dark Slate Gray\} \{Dark Turquoise\} \{Dark Violet\} \{Deep Pink\} -\{Deep Sky Blue\} \{Dodger Blue\} \{Floral White\} \{Forest Green\} -\{Ghost White\} \{Hot Pink\} \{Indian Red\} \{Lavender Blush\} -\} -} -\end{paste} -\endImportant - - - - -\end{scroll} -\beginmenu -\menulink{Next -- Boxes and Lines}{HTXFormatPage6} -\endmenu - -\end{page} - -@ -\subsection{HTXFormatPage5xPatch1 patch} -\label{HTXFormatPage5xPatch1} -\index{patch!HTXFormatPage5xPatch1!htxformatpage5.ht} -\index{htxformatpage5.ht!patch!HTXFormatPage5xPatch1} -\index{HTXFormatPage5xPatch1!htxformatpage5.ht!patch} -<>= -\begin{patch}{HTXFormatPage5xPatch1} -\begin{paste}{HTXFormatPage5xPaste1A}{HTXFormatPage5xPatch1A} -\pastebutton{HTXFormatPage5xPaste1A}{Source} -\newline -\indent{5} -\begin{items}[how wide am I] -Here we carry on but a \newline -new line will be indented -\item[how wide am I] fits nicely. Here is a \newline new line in an item. -\item[again] to show another item -\item[\\tab]\tab{0} can be used \tab{15} effectively -\end{items} -\indent{0} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage5xPatch1A patch} -\label{HTXFormatPage5xPatch1A} -\index{patch!HTXFormatPage5xPatch1A!htxformatpage5.ht} -\index{htxformatpage5.ht!patch!HTXFormatPage5xPatch1A} -\index{HTXFormatPage5xPatch1A!htxformatpage5.ht!patch} -<>= -\begin{patch}{HTXFormatPage5xPatch1A} -\begin{paste}{HTXFormatPage5xPaste1B}{HTXFormatPage5xPatch1} -\pastebutton{HTXFormatPage5xPaste1B}{Interpret} -\newline -{\tt \\indent\{5\}}\newline -{\tt \\begin\{items\}\[how wide am I\]}\newline -{\tt Here we carry on but a \\newline} \newline -{\tt new line will be indented } \newline -{\tt \\item\[how wide am I\] fits nicely. Here is a \\newline new line in an item.}\newline -{\tt \\item\[again\] to show another item}\newline -{\tt \\item\[\\\\tab\]\\tab\{0\} can be used \\tab\{15\} effectively}\newline -{\tt \\end\{items\}}\newline -{\tt \\indent\{0\}}\newline -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage5xPatch2 patch} -\label{HTXFormatPage5xPatch2} -\index{patch!HTXFormatPage5xPatch2!htxformatpage5.ht} -\index{htxformatpage5.ht!patch!HTXFormatPage5xPatch2} -\index{HTXFormatPage5xPatch2!htxformatpage5.ht!patch} -<>= -\begin{patch}{HTXFormatPage5xPatch2} -\begin{paste}{HTXFormatPage5xPaste2A}{HTXFormatPage5xPatch2A} -\pastebutton{HTXFormatPage5xPaste2A}{Source} -\newline -\begin{items}[quitealot] -A nested list: -\item[The first] item of an itemized list is on this line. -\item[The second] item of the list starts here. It contains another -list nested inside it. -\begin{items}[somuchmore] -\item [First]\tab{0}This is the first item of the -list that is nested within the itemized list. -\item [Second]\tab{0}This is the second item of the inner list. -\end{items} -This is the rest of the second item of the outer list. It -is no more interesting than any other part of the item. -\item [The third] item of the list. -\end{items} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage5xPatch2A patch} -\label{HTXFormatPage5xPatch2A} -\index{patch!HTXFormatPage5xPatch2A!htxformatpage5.ht} -\index{htxformatpage5.ht!patch!HTXFormatPage5xPatch2A} -\index{HTXFormatPage5xPatch2A!htxformatpage5.ht!patch} -<>= -\begin{patch}{HTXFormatPage5xPatch2A} -\begin{paste}{HTXFormatPage5xPaste2B}{HTXFormatPage5xPatch2} -\pastebutton{HTXFormatPage5xPaste2B}{Interpret} -\newline -{\tt \\begin\{items\}\[quitealot\]}\newline -{\tt A nested list:}\newline -{\tt \\item\[The first\] item of an itemized list is on this line.}\newline -{\tt \\item\[The second\] item of the list starts here. It contains another}\newline -{\tt list nested inside it.}\newline -{\tt \\begin\{items\}\[somuchmore\]}\newline -{\tt \\item \[First\]\\tab\{0\}This is the first item of an enumerated}\newline -{\tt list that is nested within the itemized list.}\newline -{\tt \\item \[Second\]\\tab\{0\}This is the second item of the inner list.}\newline -{\tt \\end\{items\}}\newline -{\tt This is the rest of the second item of the outer list. It}\newline -{\tt is no more interesting than any other part of the item.}\newline -{\tt \\item\[The third\] item of the list.}\newline -{\tt \\end\{items\}}\newline -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage5xPatch3 patch} -\label{HTXFormatPage5xPatch3} -\index{patch!HTXFormatPage5xPatch3!htxformatpage5.ht} -\index{htxformatpage5.ht!patch!HTXFormatPage5xPatch3} -\index{HTXFormatPage5xPatch3!htxformatpage5.ht!patch} -<>= -\begin{patch}{HTXFormatPage5xPatch3} -\begin{paste}{HTXFormatPage5xPaste3A}{HTXFormatPage5xPatch3A} -\pastebutton{HTXFormatPage5xPaste3A}{Source} -\newline -\table{ -{Dark Orchid} {Dark Salmon} {Dark Sea Green} {Dark Slate Blue} {Dark Slate Gray} -{Dark Turquoise} {Dark Violet} {Deep Pink} {Deep Sky Blue} {Dodger Blue} -{Floral White} {Forest Green} {Ghost White} {Hot Pink} {Indian Red} -{Lavender Blush} -} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage5xPatch3A patch} -\label{HTXFormatPage5xPatch3A} -\index{patch!HTXFormatPage5xPatch3A!htxformatpage5.ht} -\index{htxformatpage5.ht!patch!HTXFormatPage5xPatch3A} -\index{HTXFormatPage5xPatch3A!htxformatpage5.ht!patch} -<>= -\begin{patch}{HTXFormatPage5xPatch3A} -\begin{paste}{HTXFormatPage5xPaste3B}{HTXFormatPage5xPatch3} -\pastebutton{HTXFormatPage5xPaste3B}{Interpret} -\newline -{\tt -\\table\{ -\{Dark Orchid\} \{Dark Salmon\} \{Dark Sea Green\} \{Dark Slate Blue\} -\{Dark Slate Gray\} \{Dark Turquoise\} \{Dark Violet\} \{Deep Pink\} -\{Deep Sky Blue\} \{Dodger Blue\} \{Floral White\} \{Forest Green\} -\{Ghost White\} \{Hot Pink\} \{Indian Red\} \{Lavender Blush\} -\} -} -\end{paste} -\end{patch} - -@ -\section{htxformatpage6} -\subsection{Boxes and Lines} -\label{HTXFormatPage6} -\index{pages!HTXFormatPage6!htxformatpage6.ht} -\index{htxformatpage6.ht!pages!HTXFormatPage6} -\index{HTXFormatPage6!htxformatpage6.ht!pages} -<>= -\begin{page}{HTXFormatPage6}{Boxes and Lines} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -The {\tt \\fbox} command can be used to place a box around one or more -words. The argument of the {\tt \\fbox} command is the text that will be -placed in the box. This command should only be used for text that can fit -in one line. - -\beginImportant -\begin{paste}{HTXFormatPage6xPaste1}{HTXFormatPage6xPatch1} -\pastebutton{HTXFormatPage6xPaste1}{Interpret} -\newline -{\tt \\fbox\{Boxed!\}}\newline -\end{paste} -\endImportant - - -Use the {\tt \\horizontalline} command to draw a horizontal line -across the window. This might be useful for added emphasis. - -\beginImportant -\begin{paste}{HTXFormatPage6xPaste2}{HTXFormatPage6xPatch2} -\pastebutton{HTXFormatPage6xPaste2}{Interpret} -\newline -{\tt \\horizontalline}\newline -\end{paste} -\endImportant - -\end{scroll} -\beginmenu -\menulink{Next -- Micro-Spacing}{HTXFormatPage7} -\endmenu - -\end{page} - -@ -\subsection{HTXFormatPage6xPatch1 patch} -\label{HTXFormatPage6xPatch1} -\index{patch!HTXFormatPage6xPatch1!htxformatpage6.ht} -\index{htxformatpage6.ht!patch!HTXFormatPage6xPatch1} -\index{HTXFormatPage6xPatch1!htxformatpage6.ht!patch} -<>= -\begin{patch}{HTXFormatPage6xPatch1} -\begin{paste}{HTXFormatPage6xPaste1A}{HTXFormatPage6xPatch1A} -\pastebutton{HTXFormatPage6xPaste1A}{Source} -\newline -\fbox{Boxed!} -\end{paste} -\end{patch} -\begin{patch}{HTXFormatPage6xPatch1A} -\begin{paste}{HTXFormatPage6xPaste1B}{HTXFormatPage6xPatch1} -\pastebutton{HTXFormatPage6xPaste1B}{Interpret} -\newline -{\tt \\fbox\{Boxed!\}}\newline -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage6xPatch2 patch} -\label{HTXFormatPage6xPatch2} -\index{patch!HTXFormatPage6xPatch2!htxformatpage6.ht} -\index{htxformatpage6.ht!patch!HTXFormatPage6xPatch2} -\index{HTXFormatPage6xPatch2!htxformatpage6.ht!patch} -<>= -\begin{patch}{HTXFormatPage6xPatch2} -\begin{paste}{HTXFormatPage6xPaste2A}{HTXFormatPage6xPatch2A} -\pastebutton{HTXFormatPage6xPaste2A}{Source} -\newline -\horizontalline -\end{paste} -\end{patch} -\begin{patch}{HTXFormatPage6xPatch2A} -\begin{paste}{HTXFormatPage6xPaste2B}{HTXFormatPage6xPatch2} -\pastebutton{HTXFormatPage6xPaste2B}{Interpret} -\newline -{\tt \\horizontalline}\newline -\end{paste} -\end{patch} - -@ -\section{htxformatpage7} -\subsection{Micro-Spacing} -\label{HTXFormatPage7} -\index{pages!HTXFormatPage7!htxformatpage7.ht} -\index{htxformatpage7.ht!pages!HTXFormatPage7} -\index{HTXFormatPage7!htxformatpage7.ht!pages} -<>= -\begin{page}{HTXFormatPage7}{Micro-Spacing} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -There are three commands that one can use to exercise finer control -over the appearance of text on a page: {\tt \\space}, {\tt \\hspace} -and {\tt \\vspace}. - -The {\tt \\space\{{\it value}\}} command accepts an integer argument and simply -changes the position of the next character to the right or to the left. -A negative argument will move the next character to the left and a -positive one to the right. The unit of movement is {\it the width -of a character}. In this way one can overstrike characters to produce -various effects. - -\beginImportant -\begin{paste}{HTXFormatPage7xPaste1}{HTXFormatPage7xPatch1} -\pastebutton{HTXFormatPage7xPaste1}{Interpret} -\newline -{\tt 0\\space\{-1\}\\}\newline -{\tt underlined\\space\{-10\}__________}\newline -\end{paste} -\endImportant - - -The {\tt \\hspace\{{\it value}\}} command -is similar to the {\tt \\space\{{\it value}\}} command. -It also accepts an integer argument and -changes the position of the next character to the right or to the left. -A negative argument will move the next character to the left and a -positive one to the right. The unit of movement is {\it a pixel}. -The {\it value} argument specifies an offset from the default placement -of the character. - -\beginImportant -\begin{paste}{HTXFormatPage7xPaste2}{HTXFormatPage7xPatch2} -\pastebutton{HTXFormatPage7xPaste2}{Interpret} -\newline -{\tt x\\hspace\{-4\}x\\hspace\{-3\}x\\hspace\{-2\}x\\hspace\{-1\}x\%}\newline -{\tt x\\hspace\{1\}x\\hspace\{2\}x\\hspace\{3\}x\\hspace\{4\}x} -\end{paste} -\endImportant - -The {\tt \\vspace\{{\it value}\}} command is similar to the -{\tt \\hspace\{{\it value}\}} command but (as the name suggests) -works in the vertical direction. The unit of movement is {\it a -pixel}. The {\it value} argument specifies an offset from {\it -the next line}. A negative argument moves the next character up -and a positive down. This command can be used for subscripts and -superscripts. One drawback in the use of {\tt \\vspace} is that -it can only work with a particular font at a time. This is -because the inter-line spacing depends on the font being used -and the value of it is needed to get "back" on the line. -In general, the command {\tt \\vspace\{{\it - ils}\}} will -have a null effect when {\it ils} = ( font ascent + font descent + 5 ). -The example below assumes that {\it ils} = 25 e.g. the Rom14 font -on the RISC System/6000. - -\beginImportant -\begin{paste}{HTXFormatPage7xPaste3}{HTXFormatPage7xPatch3} -\pastebutton{HTXFormatPage7xPaste3}{Interpret} -\newline -{\tt CO\\vspace\{-18\}2\\vspace\{-32\} + CaO ->}\newline -{\tt CaCO\\vspace\{-18\}3\\vspace\{-32\}\\newline}\newline -{\tt R\\space\{-1\}~\\vspace\{-18\}æv\\vspace\{-32\}}\newline -{\tt \\hspace\{4\}-\\hspace\{8\}---\\hspace\{-12\}}\newline -{\tt \\vspace\{-32\}1\\space\{-1\}\\vspace\{-7\}2}\newline -{\tt \\vspace\{-36\}\\hspace\{8\}g\\space\{-1\}~}\newline -{\tt \\vspace\{-18\}æv\\vspace\{-32\}\\hspace\{2\}R}\newline -{\tt \\space\{-1\}~ = T\\vspace\{-18\}æv\\vspace\{-32\}}\newline -{\tt \\vspace\{-25\}} -\end{paste} -\endImportant - - -\end{scroll} -\beginmenu -\menulink{Next -- Bitmaps and Images}{HTXFormatPage8} -\endmenu - -\end{page} - -@ -\subsection{HTXFormatPage7xPatch1 patch} -\label{HTXFormatPage7xPatch1} -\index{patch!HTXFormatPage7xPatch1!htxformatpage7.ht} -\index{htxformatpage7.ht!patch!HTXFormatPage7xPatch1} -\index{HTXFormatPage7xPatch1!htxformatpage7.ht!patch} -<>= -\begin{patch}{HTXFormatPage7xPatch1} -\begin{paste}{HTXFormatPage7xPaste1A}{HTXFormatPage7xPatch1A} -\pastebutton{HTXFormatPage7xPaste1A}{Source} -\newline -0\space{-1}\\ -underlined\space{-10}__________ -\end{paste} -\end{patch} -\begin{patch}{HTXFormatPage7xPatch1A} -\begin{paste}{HTXFormatPage7xPaste1B}{HTXFormatPage7xPatch1} -\pastebutton{HTXFormatPage7xPaste1B}{Interpret} -\newline -{\tt 0\\space\{-1\}\\}\newline -{\tt underlined\\space\{-10\}__________}\newline -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage7xPatch2 patch} -\label{HTXFormatPage7xPatch2} -\index{patch!HTXFormatPage7xPatch2!htxformatpage7.ht} -\index{htxformatpage7.ht!patch!HTXFormatPage7xPatch2} -\index{HTXFormatPage7xPatch2!htxformatpage7.ht!patch} -<>= -\begin{patch}{HTXFormatPage7xPatch2} -\begin{paste}{HTXFormatPage7xPaste2A}{HTXFormatPage7xPatch2A} -\pastebutton{HTXFormatPage7xPaste2A}{Source} -\newline -x\hspace{-4}x\hspace{-3}x\hspace{-2}x\hspace{-1}x% -x\hspace{1}x\hspace{2}x\hspace{3}x\hspace{4}x -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage7xPatch2A patch} -\label{HTXFormatPage7xPatch2A} -\index{patch!HTXFormatPage7xPatch2A!htxformatpage7.ht} -\index{htxformatpage7.ht!patch!HTXFormatPage7xPatch2A} -\index{HTXFormatPage7xPatch2A!htxformatpage7.ht!patch} -<>= -\begin{patch}{HTXFormatPage7xPatch2A} -\begin{paste}{HTXFormatPage7xPaste2B}{HTXFormatPage7xPatch2} -\pastebutton{HTXFormatPage7xPaste2B}{Interpret} -\newline -{\tt x\\hspace\{-4\}x\\hspace\{-3\}x\\hspace\{-2\}x\\hspace\{-1\}x\%}\newline -{\tt x\\hspace\{1\}x\\hspace\{2\}x\\hspace\{3\}x\\hspace\{4\}x} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage7xPatch3 patch} -\label{HTXFormatPage7xPatch3} -\index{patch!HTXFormatPage7xPatch3!htxformatpage7.ht} -\index{htxformatpage7.ht!patch!HTXFormatPage7xPatch3} -\index{HTXFormatPage7xPatch3!htxformatpage7.ht!patch} -<>= -\begin{patch}{HTXFormatPage7xPatch3} -\begin{paste}{HTXFormatPage7xPaste3A}{HTXFormatPage7xPatch3A} -\pastebutton{HTXFormatPage7xPaste3A}{Source} -\newline -CO\vspace{-18}2\vspace{-32} + CaO -> -CaCO\vspace{-18}3\vspace{-32}\newline -R\space{-1}~\vspace{-18}æv\vspace{-32} -\hspace{4}-\hspace{8}---\hspace{-12} -\vspace{-32}1\space{-1}\vspace{-7}2 -\vspace{-36}\hspace{8}g\space{-1}~ -\vspace{-18}æv\vspace{-32}\hspace{2}R -\space{-1}~ = T\vspace{-18}æv\vspace{-32} -\vspace{-25} -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage7xPatch3A patch} -\label{HTXFormatPage7xPatch3A} -\index{patch!HTXFormatPage7xPatch3A!htxformatpage7.ht} -\index{htxformatpage7.ht!patch!HTXFormatPage7xPatch3A} -\index{HTXFormatPage7xPatch3A!htxformatpage7.ht!patch} -<>= -\begin{patch}{HTXFormatPage7xPatch3A} -\begin{paste}{HTXFormatPage7xPaste3B}{HTXFormatPage7xPatch3} -\pastebutton{HTXFormatPage7xPaste3B}{Interpret} -\newline -{\tt CO\\vspace\{-18\}2\\vspace\{-32\} + CaO ->}\newline -{\tt CaCO\\vspace\{-18\}3\\vspace\{-32\}\\newline}\newline -{\tt R\\space\{-1\}~\\vspace\{-18\}æv\\vspace\{-32\}}\newline -{\tt \\hspace\{4\}-\\hspace\{8\}---\\hspace\{-12\}}\newline -{\tt \\vspace\{-32\}1\\space\{-1\}\\vspace\{-7\}2}\newline -{\tt \\vspace\{-36\}\\hspace\{8\}g\\space\{-1\}~}\newline -{\tt \\vspace\{-18\}æv\\vspace\{-32\}\\hspace\{2\}R}\newline -{\tt \\space\{-1\}~ = T\\vspace\{-18\}æv\\vspace\{-32\}}\newline -{\tt \\vspace\{-25\}} -\end{paste} -\end{patch} - -@ -\section{htxformatpage8} -\subsection{Bitmaps and Images} -\label{HTXFormatPage8} -\index{pages!HTXFormatPage8!htxformatpage8.ht} -\index{htxformatpage8.ht!pages!HTXFormatPage8} -\index{HTXFormatPage8!htxformatpage8.ht!pages} -<>= -\begin{page}{HTXFormatPage8}{Bitmaps and Images} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -The commands {\tt \\inputbitmap\{{\it filename}\}} -and {\tt \\inputimage\{{\it filename}\}} -allow you to include an X11 bitmap or an -Axiom-generated viewport in a \HyperName{} -page. - -In the case of the {\tt \\inputbitmap} command -the {\it filename} parameter must be the full pathname -of an X11 bitmap file. - -\beginImportant -\begin{paste}{HTXFormatPage8xPaste1}{HTXFormatPage8xPatch1} -\pastebutton{HTXFormatPage8xPaste1}{Interpret} -\newline -{\tt \\inputbitmap\{\env{AXIOM}/doc/hypertex/bitmaps/sup.bitmap\} } -\end{paste} -\endImportant - -The {\it filename} parameter of the {\tt \\inputimage} -command must be the full pathname of a {\it compressed XPM image} file without the name extensions. -\HyperName{} always adds ".xpm.Z" to whatever filename you give and looks for the augmented filename. -Such files can be generated by Axiom command -\axiomOp{write} with the {\tt "image"} or {\tt "pixmap"} -options. - -\beginImportant -\begin{paste}{HTXFormatPage8xPaste2}{HTXFormatPage8xPatch2} -\pastebutton{HTXFormatPage8xPaste2}{Interpret} -\newline -{\tt \\inputimage\{\env{AXIOM}/doc/viewports/ugProblemNumericPage30.view/image\}} -\end{paste} -\endImportant - -Be careful not to break the pathname across lines. - -The {\tt \\inputimage} command will automatically select -the {\it image.xpm} or the {\it image.bm} file for you -based on the capabilities of your X server. - -For your convenience, there are two macros defined -in \centerline{ {\bf \env{AXIOM}{}/doc/hypertex/pages/util.ht}.} -The {\tt \\viewport} macro eliminates the need to specify -the {\tt .view/image} part and the -{\tt \\axiomViewport} macro automatically selects viewport -files in the system directories. The above {\tt \\inputimage} -could have been written -\beginImportant -{\tt \\viewport\{\env{AXIOM}/doc/viewports/ugProblemNumericPage30\}} -\endImportant -or -\beginImportant -{\tt \\axiomViewport\{ugProblemNumericPage30\}} -\endImportant - - - -\end{scroll} -\beginmenu -\menulink{Back to Formatting menu}{HTXFormatTopPage} -\endmenu - -\end{page} - -@ -\subsection{HTXFormatPage8xPatch1 patch} -\label{HTXFormatPage8xPatch1} -\index{patch!HTXFormatPage8xPatch1!htxformatpage8.ht} -\index{htxformatpage8.ht!patch!HTXFormatPage8xPatch1} -\index{HTXFormatPage8xPatch1!htxformatpage8.ht!patch} -<>= -\begin{patch}{HTXFormatPage8xPatch1} -\begin{paste}{HTXFormatPage8xPaste1A}{HTXFormatPage8xPatch1A} -\pastebutton{HTXFormatPage8xPaste1A}{Source} -\newline -\inputbitmap{\env{AXIOM}/doc/hypertex/bitmaps/sup.bitmap} -\end{paste} -\end{patch} -\begin{patch}{HTXFormatPage8xPatch1A} -\begin{paste}{HTXFormatPage8xPaste1B}{HTXFormatPage8xPatch1} -\pastebutton{HTXFormatPage8xPaste1B}{Interpret} -\newline -{\tt \\inputbitmap\{\env{AXIOM}/doc/hypertex/bitmaps/sup.bitmap\} } -\end{paste} -\end{patch} - -@ -\subsection{HTXFormatPage8xPatch2 patch} -\label{HTXFormatPage8xPatch2} -\index{patch!HTXFormatPage8xPatch2!htxformatpage8.ht} -\index{htxformatpage8.ht!patch!HTXFormatPage8xPatch2} -\index{HTXFormatPage8xPatch2!htxformatpage8.ht!patch} -<>= -\begin{patch}{HTXFormatPage8xPatch2} -\begin{paste}{HTXFormatPage8xPaste2A}{HTXFormatPage8xPatch2A} -\pastebutton{HTXFormatPage8xPaste2A}{Source} -\newline -\inputimage{\env{AXIOM}/doc/viewports/ugProblemNumericPage30.view/image} -\end{paste} -\end{patch} -@ -\subsection{HTXFormatPage8xPatch2A patch} -\label{HTXFormatPage8xPatch2A} -\index{patch!HTXFormatPage8xPatch2A!htxformatpage8.ht} -\index{htxformatpage8.ht!patch!HTXFormatPage8xPatch2A} -\index{HTXFormatPage8xPatch2A!htxformatpage8.ht!patch} -<>= -\begin{patch}{HTXFormatPage8xPatch2A} -\begin{paste}{HTXFormatPage8xPaste2B}{HTXFormatPage8xPatch2} -\pastebutton{HTXFormatPage8xPaste2B}{Interpret} -\newline -{\tt \\inputimage\{\env{AXIOM}/doc/viewports/ugProblemNumericPage30.view/image\}} -\end{paste} -\end{patch} - -@ -\section{htxformattoppage.ht} -\subsection{Formatting in Hyperdoc} -\begin{itemize} -\item HTXFormatPage1 \ref{HTXFormatPage1} on page~\pageref{HTXFormatPage1} -\item HTXFormatPage2 \ref{HTXFormatPage2} on page~\pageref{HTXFormatPage2} -\item HTXFormatPage3 \ref{HTXFormatPage3} on page~\pageref{HTXFormatPage3} -\item HTXFormatPage4 \ref{HTXFormatPage4} on page~\pageref{HTXFormatPage4} -\item HTXFormatPage5 \ref{HTXFormatPage5} on page~\pageref{HTXFormatPage5} -\item HTXFormatPage6 \ref{HTXFormatPage6} on page~\pageref{HTXFormatPage6} -\item HTXFormatPage7 \ref{HTXFormatPage7} on page~\pageref{HTXFormatPage7} -\item HTXFormatPage8 \ref{HTXFormatPage8} on page~\pageref{HTXFormatPage8} -\end{itemize} -\label{HTXFormatTopPage} -\index{pages!HTXFormatTopPage!htxformattoppage.ht} -\index{htxformattoppage.ht!pages!HTXFormatTopPage} -\index{HTXFormatTopPage!htxformattoppage.ht!pages} -<>= -\begin{page}{HTXFormatTopPage}{Formatting in Hyperdoc} -\centerline{\fbox{{\tt \thispage}}}\newline - -\HyperName{} offers various facilities for formatting text and images. -You can learn about these facilities by clicking on the topics below. -\begin{scroll} -\beginmenu -\menudownlink{Special Characters}{HTXFormatPage1} -\menudownlink{Formatting without commands}{HTXFormatPage2} -\menudownlink{Using different fonts}{HTXFormatPage3} -\menudownlink{Indentation}{HTXFormatPage4} -\menudownlink{Creating Lists and Tables}{HTXFormatPage5} -\menudownlink{Boxes and Lines}{HTXFormatPage6} -\menudownlink{Micro-Spacing}{HTXFormatPage7} -\menudownlink{Bitmaps and Images}{HTXFormatPage8} -\endmenu -\end{scroll} -\end{page} - - -@ -\section{htxintropage1.ht} -\subsection{What Hyperdoc does} -\label{HTXIntroPage1} -\begin{itemize} -\item HTXIntroPage2 \ref{HTXIntroPage2} on page~\pageref{HTXIntroPage2} -\item ugHyperPage \ref{ugHyperPage} on page~\pageref{ugHyperPage} -\end{itemize} -\index{pages!HTXIntroPage1!htxintropage1.ht} -\index{htxintropage1.ht!pages!HTXIntroPage1} -\index{HTXIntroPage1!htxintropage1.ht!pages} -<>= -\begin{page}{HTXIntroPage1}{What Hyperdoc does} -\centerline{\fbox{{\tt \thispage}}}\newline -\beginscroll - -Take a close look at the objects in the \HyperName{} window you are now reading. -Most of them are text. Resize the window using the window manager -facilities. The text is reformatted to fit the window -border. This action is performed by \HyperName{}. At the simplest -level, it provides a method for {\em formatting} text in a window. -In fact, it can place other things on the window as well, such as -bitmaps or color images. The {\em buttons} you see at either -side at the top of the window are bitmaps. - -Move the cursor so that it rests on one of those buttons. You notice that -the cursor has changed appearance. This indicates that there is an action associated -with the button. This action will be performed when you click the mouse button -over the {\em active area}. If you are familiar with \HyperName{}, you know -that the active area can be words, bitmaps, images or {\em input areas}. In -fact, anything that can be displayed in a \HyperName{} window can be an -active area. - -So, what can the action associated with an active area be? \HyperName{} -allows quite a bit of freedom in defining that action. We will have a close -look at this issue \downlink{later on}{HTXLinkTopPage}. For now, recall -the various actions that you have encountered so far --- executing Axiom -commands, popping up new windows, providing parameters for other active areas, -and replacing or changing the contents of the window. The most common action -is to bring up some \HyperName{} text in the same or a different window. -This lets us create {\em links} between pieces of text and images. A -system with such capability is usually called a {\em hypertext} system. -\HyperName{} is in fact much more. - -\endscroll -\beginmenu -\menulink{Next -- How \HyperName{} does it}{HTXIntroPage2} -\menuwindowlink{Review some features of \HyperName{}}{ugHyperPage} -\endmenu - -\helppage{ugHyperPage} -\end{page} - -@ -\section{htxintropage2.ht} -\subsection{How Hyperdoc does it} -\label{HTXIntroPage2} -See HTXIntroPage3 \ref{HTXIntroPage3} on page~\pageref{HTXIntroPage3} -\index{pages!HTXIntroPage2!htxintropage2.ht} -\index{htxintropage2.ht!pages!HTXIntroPage2} -\index{HTXIntroPage2!htxintropage2.ht!pages} -<>= -\begin{page}{HTXIntroPage2}{How Hyperdoc does it} -{\centerline{\fbox{{\tt \thispage}}}\newline} -\beginscroll - -\HyperName{} can read the {\em hypertext} information from standard text -files. This means that you can create or change this information with any -text editor. Once this information has been entered into the files, a -special program, called {\bf htadd}, scans these files and produces -a database (another file called {\bf ht.db}) of {\em objects} -encountered in the files. \HyperName{} -consults this database when it first starts and so knows where it might -find the definitions of these objects. You can maintain several such -databases on different directories. You indicate which database you -want \HyperName{} to consult by setting an {\em environment variable} -called {\bf HTPATH}. - -In general, hypertext must obviously use some kind of special (that is, -non-textual) marks for all the extra functionality it provides. In -\HyperName{}, these marks are some special characters --- special -in the sense that they are not interpreted as ordinary displayable text. -These characters, however, are part of the standard ASCII set. -There is also a way to display these special characters as text . -The \HyperName{} special characters are : - -\beginImportant -\noindent{\em Special Characters}: {\tt \table{{\$}{\\}{\{}{\}}{\[}{\]}{\%}{\#}}} -\endImportant - - - -\HyperName{} uses the special characters to distinguish between -{\em text} and {\em commands} (by {\em text}, we mean here anything -displayable). The commands are instructions to -\HyperName{} to treat some text in a particular way. Some commands -define special \HyperName{} objects. The most important objects -are {\em pages}, {\em patches}, and {\em macros}. -A {\em page} is a description of the contents of a -\HyperName{} window. A {\em patch} is a portion of a page. -A {\em macro} is a user-defined new \HyperName{} command. -Some commands allow special text {\em formatting} and others -associate some text with an action. - -In order to display anything at all in \HyperName, you must define a -{\em page}. The next section explains how to define a {\em page} and put -some simple text into it. -\endscroll -\beginmenu -\menudownlink{Next -- Define a simple text page}{HTXIntroPage3} -\endmenu - -\end{page} - - -@ -\section{htxintropage3.ht} -\subsection{A simple text page} -\begin{itemize} -\item HTXLinkPage6 \ref{HTXLinkPage6} on page~\pageref{HTXLinkPage6} -\item HTXTryPage \ref{HTXTryPage} on page~\pageref{HTXTryPage} -\item HTXFormatTopPage \ref{HTXFormatTopPage} on -page~\pageref{HTXFormatTopPage} -\end{itemize} -\label{HTXIntroPage3} -\index{pages!HTXIntroPage3!htxintropage3.ht} -\index{htxintropage3.ht!pages!HTXIntroPage3} -\index{HTXIntroPage3!htxintropage3.ht!pages} -<>= -\begin{page}{HTXIntroPage3}{A simple text page} -{\centerline{\fbox{{\tt \thispage}}}\newline} -\begin{scroll} - - -A page is defined by a {\em group} command. Group commands are used to -delimit a group, that is, to declare where a group starts and where it -ends. The proper syntax for a page definition is as follows: -\beginImportant -{\tt \\begin\{page\}\{{\it name}\}\{{\it a title}\}} -\newline -. -\newline -. -\newline -. -\newline -{\tt \\end\{page\}} -\beginImportant - -Note the use of the special characters {\tt \\}, {\tt \{} and {\tt -\}}. The {\tt \\} (backslash) character introduces a command, in this -case, {\tt begin}. The {\tt \{ \}} (braces) delimit the {\em -parameters} to the command. The first parameter (the word {\tt page}) -specifies this as a page definition command. - -The second parameter can be any single unbroken word consisting of -alphanumeric characters only, and specifies the name of the page by which -it can be referred to by other commands. You should choose -this internal name with care so as to avoid potential conflict with -page names that are defined by the Axiom system. This caveat only -applies in the case where you have started \HyperName{} with the Axiom -database --- see \downlink{later on}{HTXLinkPage6}. It is suggested that -the page names you define start with the letters {\tt UX} (standing for -{\tt U}ser e{\tt X}tensions). You can have a look at the Axiom -system database file {\centerline{\bf \env{AXIOM}/doc/hypertex/pages/ht.db} } -which contains the names of all pages, macros and patches used by Axiom. - -The third parameter specifies a title for the page. -The title of a page is the area at the very top -of the window, between the buttons. Virtually anything -that can be put in the main page can also be put in the -title. As an example, {\em this} page's -declaration is like this:\newline -{\tt \\begin\{page\}\{\thispage\}\{A simple text page\}} - -Everything you type between the {\tt \\begin\{page\}} command and the next -{\tt \\end\{page\}} command will become the body of the page. It is -an error to insert another {\tt \\begin\{page\}} between the two, that is, -this group command cannot be nested. - -There is another useful group command that should be mentioned here ---- the {\em scroll} command. It controls the portion of the page that -will be scrollable. \HyperName{} will split a page in three sections: -a {\em header}, a {\em scroll region} and a {\em footer}. \HyperName{} -will always try to keep the header and footer regions visible on the -page; the header at the top and the footer at the bottom. The middle -scroll region will be truncated and a scroll bar will be automatically -provided if the window becomes too small for the whole contents of the -page. Only one scroll region can be defined in a page and the correct -syntax is as follows: -\beginImportant -{\tt \\begin\{scroll\}} -\newline -. -\newline -. -\newline -. -\newline -{\tt \\end\{scroll\}} -\beginImportant - -This group should be placed inside the relevant page group. The text -between the {\tt \\begin\{page\}} and {\tt \\begin\{scroll\}} commands -defines the header region, the text inside the scroll group defines -the scroll region and the text between the {\tt \\end\{scroll\}} and -{\tt \\end\{page\}} commands defines the footer region. It is -important to keep the header and footer areas small. Use them to -display information that might be needed at any time by the user. If -you don't define a scroll region in your page, you may find that a -portion of the page is truncated. - -You are now ready to experiment with a page of your own. If you just -want to display some text on a page, you don't need any other -\HyperName{} commands. Just make sure that the text you type for the -title, header, scroll and footer regions does not contain (for the -moment) any of the \HyperName{} special characters. - -\end{scroll} -\beginmenu -\menuwindowlink{Try out what you learned}{HTXTryPage} -\menudownlink{Next -- Learn how to format text}{HTXFormatTopPage} -\endmenu -\end{page} - - -@ -\section{htxintrotoppage.ht} -\subsection{First Steps} -\begin{itemize} -\item HTXIntroPage1 \ref{HTXIntroPage1} on page~\pageref{HTXIntroPage1} -\item HTXIntroPage2 \ref{HTXIntroPage2} on page~\pageref{HTXIntroPage2} -\item HTXIntroPage3 \ref{HTXIntroPage3} on page~\pageref{HTXIntroPage3} -\end{itemize} -\label{HTXIntroTopPage} -\index{pages!HTXIntroTopPage!htxintrotoppage.ht} -\index{htxintrotoppage.ht!pages!HTXIntroTopPage} -\index{HTXIntroTopPage!htxintrotoppage.ht!pages} -<>= -\begin{page}{HTXIntroTopPage}{First Steps} -\centerline{\fbox{{\tt \thispage}}}\newline -\beginscroll - -\HyperName{} is both a way of presenting information and -a customisable front-end. Axiom uses -it for its own purpose as a front-end and documentation system. -\HyperName{} has special facilities that allow it to interact -very closely with Axiom. The \Browse{} facility, the Basic -Commands section and the ability to execute Axiom commands -by clicking on \HyperName{} text are witness to this. - -These pages will show you the features of \HyperName{} that might -make it appropriate for your own use in, for example, providing -documentation for Axiom code that you write or some other purpose. - -It is recommended that you get familiar with the {\em use} of -\HyperName{} before proceeding. - -\endscroll -\beginmenu -\menudownlink{What \HyperName{} does}{HTXIntroPage1} -\menudownlink{How \HyperName{} does it}{HTXIntroPage2} -\menudownlink{Define a simple text page}{HTXIntroPage3} -\endmenu - -\end{page} - -@ -\section{htxlinkpage1.ht} -\subsection{Linking to a named page} -\label{HTXLinkPage1} -\begin{itemize} -\item HTXLinkTopPage \ref{HTXLinkTopPage} on page~\pageref{HTXLinkTopPage} -\item TestHelpPage \ref{TestHelpPage} on page~\pageref{TestHelpPage} -\item HTXLinkPage2 \ref{HTXLinkPage2} on page~pageref{HTXLinkPage2} -\end{itemize} -\index{pages!HTXLinkPage1!htxlinkpage1.ht} -\index{htxlinkpage1.ht!pages!HTXLinkPage1} -\index{HTXLinkPage1!htxlinkpage1.ht!pages} -<>= -\begin{page}{HTXLinkPage1}{Linking to a named page} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -In \HyperName{}, hypertext links are specified by different -flavors of the {\tt \\link} command. These commands take two -arguments. One argument specifies the active area, that -is, the {\it trigger} of the link. The second argument specifies the -{\it target} of the link, that is, a page. The trigger can be quite arbitrary -\HyperName{} text and can include images or whole paragraphs. The trigger -text will be formatted in the normal fashion but its default font will be -the font specified by the ActiveFont resource. - -The simplest kind of \HyperName{} link is a link to a named page. -Clicking on the trigger will cause the named page to appear in a -\HyperName{} window. -There are three flavors for such a link. -\begin{items}[123456] -\item\menuitemstyle{{\tt \\windowlink\{{\it trigger}\}\{{\it page name}\}}} -\newline -This link command, when activated, will create a new window for the named page. -\newline -There will be no \centerline{\UpBitmap{} or \ReturnBitmap{}} -buttons on the new page. -The new page will have a \centerline{\ExitBitmap{}} button, however. -The original page containing the {\tt \\windowlink} command will be unaffected. -\item\menuitemstyle{{\tt \\downlink\{{\it trigger}\}\{{\it page name}\}} } -\newline This link command, when activated, will cause the -current page to be replaced by the target page -in the same \HyperName{} window. -A \centerline{\UpBitmap{}} button will automatically be placed -on the new page allowing you to get back to the page -containing the {\tt \\downlink} command. -If the current page has a \centerline{\ReturnBitmap{}} button then -the target page will also carry it. The associated -target page of that button will be the same as it is -in the current page. -\item\menuitemstyle{{\tt \\memolink\{{\it trigger}\}\{{\it page name}\}}} -\newline This link command is similar to the {\tt \\downlink} command. -In addition, it will cause a \centerline{\ReturnBitmap{}} -button to be included in -the target page and all pages {\tt \\downlink}ed from it. -This button will act as a -direct link to the page containing the {\tt \\memolink} command allowing -a short-cut to be taken. -\end{items} - -\beginImportant -\begin{paste}{HTXLinkPage1xPaste1}{HTXLinkPage1xPatch1} -\pastebutton{HTXLinkPage1xPaste1}{Interpret} -\newline -{\tt \\windowlink\{windowlink to Actions menu\}\{HTXLinkTopPage\}\\newline}\newline -{\tt \\downlink\{downlink to Actions menu\}\{HTXLinkTopPage\}\\newline}\newline -{\tt \\memolink\{memolink to Actions menu\}\{HTXLinkTopPage\}} -\end{paste} -\endImportant - - -There is a fourth button that can appear at the top of the page -next to the \centerline{\ExitBitmap{}} button. -Its purpose is to provide access to a particular {\it help page} -associated with the current page. -That is the \centerline{\HelpBitmap{}} button. The command to use -is -\centerline{{\tt \\helppage\{{\it help page name}\}}} -The {\tt \\helppage} command {\it must } be placed -just before the {\tt \\end\{page\}} command. -For instance, to get a help button on this page -the following command is used. -\centerline{{\tt {\\helppage\{TestHelpPage\}}}} -Clicking on the help button at the top -will display the {\tt TestHelpPage} page in a new window. - -\end{scroll} -\beginmenu -\menulink{Next -- Standard Pages}{HTXLinkPage2} -\endmenu - -\helppage{TestHelpPage} -\end{page} - -@ -\subsection{HTXLinkPage1xPatch1 patch} -\label{HTXLinkPage1xPatch1} -\index{patch!HTXLinkPage1xPatch1!htxlinkpage1.ht} -\index{htxlinkpage1.ht!patch!HTXLinkPage1xPatch1} -\index{HTXLinkPage1xPatch1!htxlinkpage1.ht!patch} -<>= -\begin{patch}{HTXLinkPage1xPatch1} -\begin{paste}{HTXLinkPage1xPaste1A}{HTXLinkPage1xPatch1A} -\pastebutton{HTXLinkPage1xPaste1A}{Source} -\newline -\windowlink{windowlink to Actions -menu}{HTXLinkTopPage}\newline -\downlink{downlink to Actions menu}{HTXLinkTopPage}\newline -\memolink{memolink to Actions menu}{HTXLinkTopPage} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage1xPatch1A patch} -\label{HTXLinkPage1xPatch1A} -\index{patch!HTXLinkPage1xPatch1A!htxlinkpage1.ht} -\index{htxlinkpage1.ht!patch!HTXLinkPage1xPatch1A} -\index{HTXLinkPage1xPatch1A!htxlinkpage1.ht!patch} -<>= -\begin{patch}{HTXLinkPage1xPatch1A} -\begin{paste}{HTXLinkPage1xPaste1B}{HTXLinkPage1xPatch1} -\pastebutton{HTXLinkPage1xPaste1B}{Interpret} -\newline -{\tt \\windowlink\{windowlink to Actions menu\}\{HTXLinkTopPage\}\\newline}\newline -{\tt \\downlink\{downlink to Actions menu\}\{HTXLinkTopPage\}\\newline}\newline -{\tt \\memolink\{memolink to Actions menu\}\{HTXLinkTopPage\}} -\end{paste} -\end{patch} - -@ -\subsection{Test Help Page} -\label{TestHelpPage} -\index{pages!TestHelpPage!htxlinkpage1.ht} -\index{htxlinkpage1.ht!pages!TestHelpPage} -\index{TestHelpPage!htxlinkpage1.ht!pages} -<>= -\begin{page}{TestHelpPage}{Test Help Page} -\begin{scroll} - -\vspace{100} -\centerline{Is this any help?} -\end{scroll} -\end{page} - -@ -\section{htxlinkpage2.ht} -\subsection{Standard Pages} -\label{HTXLinkPage2} -\begin{itemize} -\item HTXLinkPage6 \ref{HTXLinkPage6} on page~\pageref{HTXLinkPage6} -\item SpadNotConnectedPage \ref{SpadNotConnectedPage} on -page~\pageref{SpadNotConnectedPage} -\item UnknownPage \ref{UnknownPage} on page~\pageref{UnknownPage} -\item ErrorPage \ref{ErrorPage} on page~\pageref{ErrorPage} -\item ProtectedQuitPage \ref{ProtectedQuitPage} on -page~\pageref{ProtectedQuitPage} -\item HTXLinkPage3 \ref{HTXLinkPage3} on page~\pageref{HTXLinkPage3} -\end{itemize} -\index{pages!HTXLinkPage2!htxlinkpage2.ht} -\index{htxlinkpage2.ht!pages!HTXLinkPage2} -\index{HTXLinkPage2!htxlinkpage2.ht!pages} -<>= -\begin{page}{HTXLinkPage2}{Standard Pages} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -You have reached this page after performing -a series of mouse clicks on \HyperName{} -active areas. Each time, a {\tt \\link} -command was activated. Well, how does it all -start? -The answer is that \HyperName{} always puts up -a particular page called {\tt RootPage} when -it starts up. If this page is not found in the database, -\HyperName{} will immediately exit. -It is, of course, desirable that the {\tt RootPage} -contains links to other pages! -It is possible to override -Axiom's choice of {\tt RootPage} and provide your own -to \HyperName{}. This is done in the same way as -you would override any Axiom-defined page and is -discussed in \downlink{How to use your pages with \HyperName{}}{HTXLinkPage6}. - - - -You may have noticed that \HyperName{} -uses some pages when certain events occur. -There is a page that is put up, for instance, -whenever \HyperName{} cannot connect to Axiom. -Another page is put up whenever there is a formatting -error and yet another when a request for an unknown page -is made. Finally, there is a page that prompts -for confirmation when you press the -exit button on the initial page. - - -These pages have standard names and must be provided -in the \HyperName{} page database. -They are already defined in the Axiom system -\HyperName{} page database so that you do not have to -define them yourself. - -Here are the pages required by \HyperName{}. You can click on any of these -to see their contents. Click on their exit buttons when you are finished. - -\beginImportant -\begin{paste}{HTXLinkPage2xPaste1}{HTXLinkPage2xPatch1} -\pastebutton{HTXLinkPage2xPaste1}{Interpret} -\newline -{\tt \\table\{}\newline -{\tt \{\\windowlink\{SpadNotConnectedPage\}\{SpadNotConnectedPage\}\}}\newline -{\tt \{\\windowlink\{UnknownPage\}\{UnknownPage\}\}}\newline -{\tt \{\\windowlink\{ErrorPage\}\{ErrorPage\}\}}\newline -{\tt \{\\windowlink\{ProtectedQuitPage\}\{ProtectedQuitPage\}\}}\newline -{\tt \}}\newline -\end{paste} -\endImportant - - -In addition, \HyperName{} uses certain bitmaps for its buttons. -They are also provided in the Axiom system -bitmap directory and \HyperName{} knows where to find them. - -The bitmap files required by \HyperName{} are the following. -\newline -\tab{7}{\it exit.bitmap}\tab{22} = \tab{25}{\ExitBitmap{}} \newline -\tab{7}{\it help2.bitmap}\tab{22} = \tab{25}{\HelpBitmap{}} \newline -\tab{7}{\it up3.bitmap}\tab{22} = \tab{25}{\UpBitmap{}}\newline -\tab{7}{\it return3.bitmap}\tab{22} = \tab{25}{\ReturnBitmap{}}\newline -\tab{7}{\it noop.bitmap}\tab{22} = \tab{25}{\NoopBitmap{}} - -These files must exist in your current directory if -the {\tt AXIOM} environment variable is not set. -If it is, then \HyperName{} will assume that it points -to the Axiom system directory and will look for -these files in -{\bf \$AXIOM/doc/hypertex/bitmaps}. - - - - -\end{scroll} -\beginmenu -\menulink{Next -- Active Axiom commands}{HTXLinkPage3} -\endmenu - -\end{page} - -@ -\subsection{HTXLinkPage2xPatch1 patch} -\label{HTXLinkPage2xPatch1} -\index{patch!HTXLinkPage2xPatch1!htxlinkpage2.ht} -\index{htxlinkpage2.ht!patch!HTXLinkPage2xPatch1} -\index{HTXLinkPage2xPatch1!htxlinkpage2.ht!patch} -<>= -\begin{patch}{HTXLinkPage2xPatch1} -\begin{paste}{HTXLinkPage2xPaste1A}{HTXLinkPage2xPatch1A} -\pastebutton{HTXLinkPage2xPaste1A}{Source} -\newline -\table{ -{\windowlink{SpadNotConnectedPage}{SpadNotConnectedPage}} -{\windowlink{UnknownPage}{UnknownPage}} -{\windowlink{ErrorPage}{ErrorPage}} -{\windowlink{ProtectedQuitPage}{ProtectedQuitPage}} -} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage2xPatch1A patch} -\label{HTXLinkPage2xPatch1A} -\index{patch!HTXLinkPage2xPatch1A!htxlinkpage2.ht} -\index{htxlinkpage2.ht!patch!HTXLinkPage2xPatch1A} -\index{HTXLinkPage2xPatch1A!htxlinkpage2.ht!patch} -<>= -\begin{patch}{HTXLinkPage2xPatch1A} -\begin{paste}{HTXLinkPage2xPaste1B}{HTXLinkPage2xPatch1} -\pastebutton{HTXLinkPage2xPaste1B}{Interpret} -\newline -{\tt \\table\{}\newline -{\tt \{\\windowlink\{SpadNotConnectedPage\}\{SpadNotConnectedPage\}\}}\newline -{\tt \{\\windowlink\{UnknownPage\}\{UnknownPage\}\}}\newline -{\tt \{\\windowlink\{ErrorPage\}\{ErrorPage\}\}}\newline -{\tt \{\\windowlink\{ProtectedQuitPage\}\{ProtectedQuitPage\}\}}\newline -{\tt \}}\newline -\end{paste} -\end{patch} - -@ -\section{htxlinkpage3.ht} -\subsection{Active Axiom commands} -\label{HTXLinkPage3} -See HTXLinkPage4 \ref{HTXLinkPage4} on page~\pageref{HTXLinkPage4} -\index{pages!HTXLinkPage3!htxlinkpage3.ht.ht} -\index{htxlinkpage3.ht.ht!pages!HTXLinkPage3} -\index{HTXLinkPage3!htxlinkpage3.ht.ht!pages} -<>= -\begin{page}{HTXLinkPage3}{Active Axiom commands} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -This section explains how to include Axiom -commands in your page. The commands we will -introduce are actually {\it macros} that are defined -in -\centerline{{\bf \env{AXIOM}/doc/hypertex/pages/util.ht}} -This means that you can use them only if you include -this file in your \HyperName{} database. - -The first command to learn is -\horizontalline -{\tt \\axiomcommand\{ {\it command }{\tt \ \\free\{}{\it var1 var2 ...}{\tt \}\ \\bound\{}{\it var}{\tt \}\ \}} } -\horizontalline - - -The {\tt \\free\{\}} and {\tt \\bound\{\}} directives are optional. -We will come to them in a minute. The {\it command} above is the -text of the Axiom command. Only single line commands are allowed -here. -This text will be displayed in the reserved AxiomFont logical -font. The area of the text will be active and clicking on it -will attempt to send the command to Axiom for evaluation. -A new Axiom interpreter window (and Axiom frame) -will be created if this was the first Axiom command -activated in the current page. If not, the command will be sent -to the already opened Axiom interpreter window for the current page. -Note that it {\it is} necessary to escape special -\HyperName{} characters with the {\tt '\\'} backslash character. -The exceptions are the characters {\tt \[\]}; they do not -need to be escaped in this context. - -\beginImportant -\begin{paste}{HTXLinkPage3xPaste1}{HTXLinkPage3xPatch1} -\pastebutton{HTXLinkPage3xPaste1}{Interpret} -\newline -{\tt \\axiomcommand\{ l:=brace[1,2,3] ; length:=\\\# l ; m:=[1,2]\}} -\end{paste} -\endImportant - - -The optional {\tt \\free\{\}} and {\tt \\bound\{\}} directives -provide dependency control. The reader of a \HyperName{} -page is not forced to click on the commands in the -order in which in they appear on the page. If the -correct {\tt \\free\{\}} and {\tt \\bound\{\}} -specifications are made, clicking on a command -will result in execution of all those other -commands that should be executed before it. -This will {\it only} happen the first time the command is -clicked. - -So, how are the dependencies specified? -The arguments of the {\tt \\free\{\}} directive must -be space-separated words (labels). The argument of {\tt \\bound\{\}} -must be a single (unique for the page) label. Each label in the {\tt \\free\{\}} list -must exist as an argument to one (and only one) {\tt \\bound\{\}} directive -somewhere in the current page. -When the command is activated, \HyperName{} will look -in the {\tt \\free\{\}} list and check each label. -For each label, it will find the command that specifies that label -in its {\tt \\bound\{\}} directive and -execute it if it has not been already executed. -The order of labels in the {\tt \\free\{\}} directive list -is respected. \HyperName{} will follow all -dependency links recursively. - -Here is an example. -Clicking on the third command will automatically -execute all of them in the correct sequence. -Note that in this case the order of labels in the last -line is immaterial since {\tt v2} explicitly depends on {\tt v1}. - -\beginImportant -\begin{paste}{HTXLinkPage3xPaste2}{HTXLinkPage3xPatch2} -\pastebutton{HTXLinkPage3xPaste2}{Interpret} -\newline -{\tt \\axiomcommand\{a:=1;d:=4 \\bound\{v1\}\}}\newline -{\tt \\newline}\newline -{\tt \\axiomcommand\{b:=a+3 \\free\{v1\} \\bound\{v2\}\}}\newline -{\tt \\newline}\newline -{\tt \\axiomcommand\{c:=b+d \\free\{v1 v2\} \\bound\{v3\}\}}\newline -\end{paste} -\endImportant - -The second command deals with multi-line Axiom -code. This is the command to use for execution of -an Axiom {\it pile}. It is a {\it group} -command. The proper syntax for it is as follows: -\horizontalline -{\tt \\begin\{spadsrc\}\ [\\free\{{\it var1 var2} ...\}\ \\bound\{{\it var}\}]} -\newline -. -\newline -. -\newline -{\tt \\end\{spadsrc\}} -\horizontalline - -Again, the {\tt \\free} and {\tt \\bound} directives are -optional. If they are specified (in exactly the same way -as {\tt \\axiomcommand}), they must be enclosed in -square brackets {\tt []}. -The lines between the {\tt \\begin} and {\tt \\end} -contain the Axiom statements. Indentation -will be respected. \HyperName{} will -actually save this part in a temporary file -and instruct Axiom to read the file -with the {\tt )read} system command. - -Here is an example. The execution of the following -fragment is dependent on the {\tt v3} label. -Make sure that previous commands are active (and -hence the label {\tt v3} is "visible") before -trying to execute it. If the label {\tt v3} -is not seen in the page, \HyperName{} will -print an error message on standard output -and ignore the dependency. - - -\beginImportant -\begin{paste}{HTXLinkPage3xPaste3}{HTXLinkPage3xPatch3} -\pastebutton{HTXLinkPage3xPaste3}{Interpret} -\newline -{\tt \\begin\{spadsrc\}\ [\\free\{v3\}\ \\bound\{v4\}]}\newline -{\tt f\ x\ ==}\newline -{\tt \ \ \ x+c}\newline -{\tt f\ 3}\newline -{\tt \\end\{spadsrc\}} -\end{paste} -\endImportant - -There is, in fact, more that one can do -with Axiom commands. In pages elsewhere -in the system, Axiom commands appear next -to button like this \ \MenuDotBitmap{}. -Clicking on this button, one can see the output -for that command. The output has been -pre-computed and is also stored in -\HyperName{} files. This is done using -{\it patch} and {\it paste}. -It is the same mechanism that -is used to alternatively display -\HyperName{} source and interpreted -result in this and other pages. -It is explained \downlink{later on}{HTXAdvPage5}. - - -\end{scroll} -\beginmenu -\menulink{Next -- Linking to Lisp}{HTXLinkPage4} -\endmenu - -\end{page} - -@ -\subsection{HTXLinkPage3xPatch1 patch} -\label{HTXLinkPage3xPatch1} -\index{patch!HTXLinkPage3xPatch1!htxlinkpage3.ht} -\index{htxlinkpage3.ht!patch!HTXLinkPage3xPatch1} -\index{HTXLinkPage3xPatch1!htxlinkpage3.ht!patch} -<>= -\begin{patch}{HTXLinkPage3xPatch1} -\begin{paste}{HTXLinkPage3xPaste1A}{HTXLinkPage3xPatch1A} -\pastebutton{HTXLinkPage3xPaste1A}{Source} -\newline -\axiomcommand{ l:=brace[1,2,3] ; length:=\# l ; m:=[1,2]} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage3xPatch1A patch} -\label{HTXLinkPage3xPatch1A} -\index{patch!HTXLinkPage3xPatch1A!htxlinkpage3.ht} -\index{htxlinkpage3.ht!patch!HTXLinkPage3xPatch1A} -\index{HTXLinkPage3xPatch1A!htxlinkpage3.ht!patch} -<>= -\begin{patch}{HTXLinkPage3xPatch1A} -\begin{paste}{HTXLinkPage3xPaste1B}{HTXLinkPage3xPatch1} -\pastebutton{HTXLinkPage3xPaste1B}{Interpret} -\newline -{\tt \\axiomcommand\{ l:=brace[1,2,3] ; length:=\\\# l ; m:=[1,2]\}} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage3xPatch2 patch} -\label{HTXLinkPage3xPatch2} -\index{patch!HTXLinkPage3xPatch2!htxlinkpage3.ht} -\index{htxlinkpage3.ht!patch!HTXLinkPage3xPatch2} -\index{HTXLinkPage3xPatch2!htxlinkpage3.ht!patch} -<>= -\begin{patch}{HTXLinkPage3xPatch2} -\begin{paste}{HTXLinkPage3xPaste2A}{HTXLinkPage3xPatch2A} -\pastebutton{HTXLinkPage3xPaste2A}{Source} -\newline -\axiomcommand{a:=1;d:=4 \bound{v1}} -\newline -\axiomcommand{b:=a+3 \free{v1} \bound{v2}} -\newline -\axiomcommand{c:=b+d \free{v1 v2} \bound{v3}} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage3xPatch2A patch} -\label{HTXLinkPage3xPatch2A} -\index{patch!HTXLinkPage3xPatch2A!htxlinkpage3.ht} -\index{htxlinkpage3.ht!patch!HTXLinkPage3xPatch2A} -\index{HTXLinkPage3xPatch2A!htxlinkpage3.ht!patch} -<>= -\begin{patch}{HTXLinkPage3xPatch2A} -\begin{paste}{HTXLinkPage3xPaste2B}{HTXLinkPage3xPatch2} -\pastebutton{HTXLinkPage3xPaste2B}{Interpret} -\newline -{\tt \\axiomcommand\{a:=1;d:=4 \\bound\{v1\}\}}\newline -{\tt \\newline}\newline -{\tt \\axiomcommand\{b:=a+3 \\free\{v1\} \\bound\{v2\}\}}\newline -{\tt \\newline}\newline -{\tt \\axiomcommand\{c:=b+d \\free\{v1 v2\} \\bound\{v3\}\}}\newline -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage3xPatch3 patch} -\label{HTXLinkPage3xPatch3} -\index{patch!HTXLinkPage3xPatch3!htxlinkpage3.ht} -\index{htxlinkpage3.ht!patch!HTXLinkPage3xPatch3} -\index{HTXLinkPage3xPatch3!htxlinkpage3.ht!patch} -<>= -\begin{patch}{HTXLinkPage3xPatch3} -\begin{paste}{HTXLinkPage3xPaste3A}{HTXLinkPage3xPatch3A} -\pastebutton{HTXLinkPage3xPaste3A}{Source} -\newline -\begin{spadsrc} [\free{v3} \bound{v4}] -f x == - x+c -f 3 -\end{spadsrc} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage3xPatch3A patch} -\label{HTXLinkPage3xPatch3A} -\index{patch!HTXLinkPage3xPatch3A!htxlinkpage3.ht} -\index{htxlinkpage3.ht!patch!HTXLinkPage3xPatch3A} -\index{HTXLinkPage3xPatch3A!htxlinkpage3.ht!patch} -<>= -\begin{patch}{HTXLinkPage3xPatch3A} -\begin{paste}{HTXLinkPage3xPaste3B}{HTXLinkPage3xPatch3} -\pastebutton{HTXLinkPage3xPaste3B}{Interpret} -\newline -{\tt \\begin\{spadsrc\}\ [\\free\{v3\}\ \\bound\{v4\}]}\newline -{\tt f\ x\ ==}\newline -{\tt \ \ \ x+c}\newline -{\tt f\ 3}\newline -{\tt \\end\{spadsrc\}} -\end{paste} -\end{patch} - -@ -\section{htxlinkpage4.ht} -\subsection{Linking to Lisp} -\label{HTXLinkPage4} -See HTXLinkPage5 \ref{HTXLinkPage5} on page~\pageref{HTXLinkPage5} -\index{pages!HTXLinkPage4!htxlinkpage4.ht} -\index{htxlinkpage4.ht!pages!HTXLinkPage4} -\index{HTXLinkPage4!htxlinkpage4.ht!pages} -<>= -\begin{page}{HTXLinkPage4}{Linking to Lisp} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -Another feature of the Axiom\hspace{2}--\HyperName{} -link is the ability to execute {\it Lisp} -code at a click of a button. -There are two things one can do. - -The first is to cause the evaluation -of a {\it Lisp} form and ignore (as far as \HyperName{} -is concerned) its value. The evaluation of the function -might have an effect however on your Axiom session. - -The command for this is -\horizontalline -\centerline{ {\tt \\lispcommand\{{\it text}\}\{{\it Lisp form}\}}} -\horizontalline - -Here is an example. We will first define a {\it Lisp} function -and then execute it. Notice that the \HyperName{} -special characters must be escaped (this is on top -of {\it Lisp} escaping conventions). - - -\beginImportant -\begin{paste}{HTXLinkPage4xPaste1}{HTXLinkPage4xPatch1} -\pastebutton{HTXLinkPage4xPaste1}{Interpret} -\newline -{\tt \\lispcommand\{Definition\}\{(defun HTXTESTFUNCTION ()}\newline -{\tt (print "Hello from HyperDoc \\\\\\\\ \\\% \\\{ \\\}"))\}} \newline -{\tt \\newline}\newline -{\tt \\lispcommand\{Execution\}\{(HTXTESTFUNCTION)\}} \newline -\end{paste} -\endImportant - -Your command will be executed as soon as -Axiom completes any computation it might be -carrying out. - - -%\axiomcommand{)lisp (defun f () (pprint "hello"))} -%\lispcommand{f}{(|f|)} - - -The second thing you can do is quite powerful. It allows you -to delegate to a {\it Lisp} function -the {\it dynamic} creation of a page. This is used -in \Browse{} to present -the Axiom Library in a hypertext form. - -The command to use is a lot like the {\tt link} commands -you encountered \downlink{earlier}{HTXLinkPage1} and comes in three flavours. -\centerline{{\tt \\lispwindowlink\{{\it trigger}\}\{{\it Lisp form}\}}} -\centerline{{\tt \\lispdownlink\{{\it trigger}\}\{{\it Lisp form}\}}} -\centerline{{\tt \\lispmemolink\{{\it trigger}\}\{{\it Lisp form}\}}} - -The difference between the three versions is the same as before. -When such a link is activated, \HyperName{} issues the -{\it Lisp form} to Axiom and waits for a full -page definition. An important point to note is that -\HyperName{} does {\it not} use -the value of the {\it Lisp form} but, instead, it -depends on its {\it side-effects}. -What {\it must} happen during evaluation -of the form is enough evaluations of a special {\it Lisp} -function called {\bf issueHT} to define a page. -The argument of {\bf issueHT} is a string -containing \HyperName{} text. Perhaps an example will clarify -matters. - -First we will define a {\it Lisp} function that accepts -a string argument and calls {\bf issueHT} a few times. -The strings that are passed to {\bf issueHT} construct -a \HyperName{} page that would just contain our -original argument centered roughly on the page. -Then we write the {\tt \\lisplink} with a call to -the function. Finally, we execute a {\it Lisp} -command that just pretty--prints the function's definition. - - - -\beginImportant -\begin{paste}{HTXLinkPage4xPaste2}{HTXLinkPage4xPatch2} -\pastebutton{HTXLinkPage4xPaste2}{Interpret} -\newline -{\tt \\lispcommand\{Definition\}\{(defun HTXTESTPAGE (x) (|issueHT|}\newline -{\tt "\\\\\\\\begin\\\{page\\\}\\\{LispTestPage\\\}\\\{Lisp Test Page\\\}}\newline -{\tt \\\\\\\\vspace\\\{150\\\} \\\\\\\\centerline\\\{") (|issueHT| x) (|issueHT|}\newline -{\tt "\\\} \\\\\\\\end\\\{page\\\}" ) ) \}}\newline -{\tt \\newline}\newline -{\tt \\lispwindowlink\{Link to it\}\{(HTXTESTPAGE "Hi there")\}}\newline -{\tt \\newline}\newline -{\tt \\lispcommand\{Show Lisp definition\}\{(pprint (symbol-function 'HTXTESTPAGE))\}}\newline -\end{paste} -\endImportant - -The {\tt '\\\{'} and {\tt '\\\}'} is required to escape -\HyperName{}'s special characters {\tt '\{'} and {\tt '\}'}. -The {\tt '\\\\\\\\'} has the following rationale. -We need to send to \HyperName{} (from {\it Lisp}) the sequence -{\tt \\begin}. But {\tt '\\'} is a special {\it Lisp} -character. Therefore the {\it Lisp} string must be -{\tt '\\\\begin'}. But to specify this -in \HyperName{} we need to escape the two {\tt '\\'}. -Therefore, we write {\tt '\\\\\\\\begin'}. - - -The definition of {\tt HTXTESTPAGE} would have been written in {\it Lisp} -as follows. -\begin{verbatim} -(defun HTXTESTPAGE (X) - (|issueHT| - "\\begin{page}{LispTestPage}{Lisp Test Page} \\vspace{200} \\centerline{") - (|issueHT| X) - (|issueHT| "} \\end{page}")) -\end{verbatim} - - - -You should not execute {\tt HTXTESTPAGE} in the -{\it Lisp} environment manually. It is meant to -be executed {\it only} in response to a -\HyperName{} request. - -Can you pop-up a named page from {\it Lisp} regardless of -user action? Yes --- use {\it Lisp} function {\bf linkToHTPage} -with the page name as a string argument. Click on the -{\tt \\axiomcommand} below. Then, in your Axiom -session, you can repeat it if you like. - -\beginImportant -\begin{paste}{HTXLinkPage4xPaste3}{HTXLinkPage4xPatch3} -\pastebutton{HTXLinkPage4xPaste3}{Interpret} -\newline -{\tt \\axiomcommand\{)lisp (|linkToHTPage| "RootPage")\}} -\end{paste} -\endImportant - -You can also pop-up a {\it dynamic} page regardless of user action. -To do this, make sure you evaluate the {\it Lisp form} -{\bf (|startHTPage| 50)} before using {\bf issueHT}. -The example below requires the {\tt HTXTESTPAGE} function -to be defined in {\it Lisp} so you should make sure -you have executed the command above that defines it. - -\beginImportant -\begin{paste}{HTXLinkPage4xPaste4}{HTXLinkPage4xPatch4} -\pastebutton{HTXLinkPage4xPaste4}{Interpret} -\newline -{\tt \\axiomcommand\{)lisp (progn (|startHTPage| 50)(HTXTESTPAGE "Immediately"))\}} -\end{paste} -\endImportant - -Now, the most important use of this facility -so far has been in the \Browse{} and Basic Commands components of -\HyperName{}. Instead of giving you details of the various -\Browse{} {\it Lisp} functions, a few macros are defined in -\centerline{{\bf \$AXIOM/doc/hypertex/pages/util.ht}} - -The most important defined macros are -\beginImportant -\table{ -{ {\tt \\axiomType\{{\it constructor}\}} } -{ {\tt \\axiomOp\{{\it operation}\}} } -{ {\tt \\axiomOpFrom\{{\it operation }\}\{{\it constructor}\}}} -} -\endImportant - -Here are some examples of their use. -\beginImportant -\begin{paste}{HTXLinkPage4xPaste5}{HTXLinkPage4xPatch5} -\pastebutton{HTXLinkPage4xPaste5}{Interpret} -\newline -{\tt \\axiomType\{Expression Integer\}}\newline -{\tt \newline}\newline -{\tt \\axiomType\{Expression\}}\newline -{\tt \newline}\newline -{\tt \\axiomType\{EXPR\}}\newline -{\tt \newline}\newline -{\tt \\axiomOp\{reduce\}}\newline -{\tt \newline}\newline -{\tt \\axiomOp\{as*\}}\newline -{\tt \newline}\newline -{\tt \\axiomOpFrom\{reduce\}\{Expression\}}\newline -\end{paste} -\endImportant - -The macro {\tt \\axiomType} brings up the \Browse{} -constructor page for the constructor specified. -You can specify a full name, or an abbreviation -or just the top level name. -The macro {\tt \\axiomOp} brings up a list of operations -matching the argument. -The macro {\tt \\axiomOpFrom} shows documentation -about the specified operation whose origin is -constructor. No wildcard in the operation name -or type abbreviation is -allowed here. You should also specify just the top level type. - - - - - - - -\end{scroll} -\beginmenu -\menulink{Next -- Linking to Unix}{HTXLinkPage5} -\endmenu - -\end{page} - -@ -\subsection{HTXLinkPage4xPatch1 patch} -\label{HTXLinkPage4xPatch1} -\index{patch!HTXLinkPage4xPatch1!htxlinkpage4.ht} -\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch1} -\index{HTXLinkPage4xPatch1!htxlinkpage4.ht!patch} -<>= -\begin{patch}{HTXLinkPage4xPatch1} -\begin{paste}{HTXLinkPage4xPaste1A}{HTXLinkPage4xPatch1A} -\pastebutton{HTXLinkPage4xPaste1A}{Source} -\newline -\lispcommand{Definition}{(defun HTXTESTFUNCTION () -(print "Hello from HyperDoc \\\\ \% \{ \}"))} -\newline -\lispcommand{Execution}{(HTXTESTFUNCTION)} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage4xPatch1A patch} -\label{HTXLinkPage4xPatch1A} -\index{patch!HTXLinkPage4xPatch1A!htxlinkpage4.ht} -\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch1A} -\index{HTXLinkPage4xPatch1A!htxlinkpage4.ht!patch} -<>= -\begin{patch}{HTXLinkPage4xPatch1A} -\begin{paste}{HTXLinkPage4xPaste1B}{HTXLinkPage4xPatch1} -\pastebutton{HTXLinkPage4xPaste1B}{Interpret} -\newline -{\tt \\lispcommand\{Definition\}\{(defun HTXTESTFUNCTION () (print "Hello from HyperDoc \\\\\\\\ \\\% \\\{ \\\}"))\}} \newline -{\tt \\newline}\newline -{\tt \\lispcommand\{Execution\}\{(HTXTESTFUNCTION)\}} \newline -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage4xPatch2 patch} -\label{HTXLinkPage4xPatch2} -\index{patch!HTXLinkPage4xPatch2!htxlinkpage4.ht} -\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch2} -\index{HTXLinkPage4xPatch2!htxlinkpage4.ht!patch} -<>= -\begin{patch}{HTXLinkPage4xPatch2} -\begin{paste}{HTXLinkPage4xPaste2A}{HTXLinkPage4xPatch2A} -\pastebutton{HTXLinkPage4xPaste2A}{Source} -\newline -\lispcommand{Definition}{(defun HTXTESTPAGE (x) (|issueHT| -"\\\\begin\{page\}\{LispTestPage\}\{Lisp Test Page\} -\\\\vspace\{150\} \\\\centerline\{") (|issueHT| x) (|issueHT| -"\} \\\\end\{page\}" ) ) } -\newline -\lispwindowlink{Link to it}{(HTXTESTPAGE "Hi there")} -\newline -\lispcommand{Show Lisp definition}{(pprint (symbol-function 'HTXTESTPAGE))} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage4xPatch2A patch} -\label{HTXLinkPage4xPatch2A} -\index{patch!HTXLinkPage4xPatch2A!htxlinkpage4.ht} -\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch2A} -\index{HTXLinkPage4xPatch2A!htxlinkpage4.ht!patch} -<>= -\begin{patch}{HTXLinkPage4xPatch2A} -\begin{paste}{HTXLinkPage4xPaste2B}{HTXLinkPage4xPatch2} -\pastebutton{HTXLinkPage4xPaste2B}{Interpret} -\newline -{\tt \\lispcommand\{Definition\}\{(defun HTXTESTPAGE (x) (|issueHT|}\newline -{\tt "\\\\\\\\begin\\\{page\\\}\\\{LispTestPage\\\}\\\{Lisp Test Page\\\}}\newline -{\tt \\\\\\\\vspace\\\{150\\\} \\\\\\\\centerline\\\{") (|issueHT| x) (|issueHT|}\newline -{\tt "\\\} \\\\\\\\end\\\{page\\\}" ) ) \}}\newline -{\tt \\newline}\newline -{\tt \\lispwindowlink\{Link to it\}\{(HTXTESTPAGE "Hi there")\}}\newline -{\tt \\newline}\newline -{\tt \\lispcommand\{Show Lisp definition\}\{(pprint (symbol-function 'HTXTESTPAGE))\}}\newline -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage4xPatch3 patch} -\label{HTXLinkPage4xPatch3} -\index{patch!HTXLinkPage4xPatch3!htxlinkpage4.ht} -\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch3} -\index{HTXLinkPage4xPatch3!htxlinkpage4.ht!patch} -<>= -\begin{patch}{HTXLinkPage4xPatch3} -\begin{paste}{HTXLinkPage4xPaste3A}{HTXLinkPage4xPatch3A} -\pastebutton{HTXLinkPage4xPaste3A}{Source} -\newline -\axiomcommand{)lisp (|linkToHTPage| "RootPage")} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage4xPatch3A patch} -\label{HTXLinkPage4xPatch3A} -\index{patch!HTXLinkPage4xPatch3A!htxlinkpage4.ht} -\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch3A} -\index{HTXLinkPage4xPatch3A!htxlinkpage4.ht!patch} -<>= -\begin{patch}{HTXLinkPage4xPatch3A} -\begin{paste}{HTXLinkPage4xPaste3B}{HTXLinkPage4xPatch3} -\pastebutton{HTXLinkPage4xPaste3B}{Interpret} -\newline -{\tt \\axiomcommand\{)lisp (|linkToHTPage| "RootPage")\}} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage4xPatch4 patch} -\label{HTXLinkPage4xPatch4} -\index{patch!HTXLinkPage4xPatch4!htxlinkpage4.ht} -\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch4} -\index{HTXLinkPage4xPatch4!htxlinkpage4.ht!patch} -<>= -\begin{patch}{HTXLinkPage4xPatch4} -\begin{paste}{HTXLinkPage4xPaste4A}{HTXLinkPage4xPatch4A} -\pastebutton{HTXLinkPage4xPaste4A}{Source} -\newline -\axiomcommand{)lisp (progn (|startHTPage| 50)(HTXTESTPAGE "Immediately"))} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage4xPatch4A patch} -\label{HTXLinkPage4xPatch4A} -\index{patch!HTXLinkPage4xPatch4A!htxlinkpage4.ht} -\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch4A} -\index{HTXLinkPage4xPatch4A!htxlinkpage4.ht!patch} -<>= -\begin{patch}{HTXLinkPage4xPatch4A} -\begin{paste}{HTXLinkPage4xPaste4B}{HTXLinkPage4xPatch4} -\pastebutton{HTXLinkPage4xPaste4B}{Interpret} -\newline -{\tt \\axiomcommand\{)lisp (progn (|startHTPage| 50)(HTXTESTPAGE "Immediately"))\}} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage4xPatch5 patch} -\label{HTXLinkPage4xPatch5} -\index{patch!HTXLinkPage4xPatch5!htxlinkpage4.ht} -\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch5} -\index{HTXLinkPage4xPatch5!htxlinkpage4.ht!patch} -<>= -\begin{patch}{HTXLinkPage4xPatch5} -\begin{paste}{HTXLinkPage4xPaste5A}{HTXLinkPage4xPatch5A} -\pastebutton{HTXLinkPage4xPaste5A}{Source} -\newline -\axiomType{Expression Integer} -\newline -\axiomType{Expression} -\newline -\axiomType{EXPR} -\newline -\axiomOp{reduce} -\newline -\axiomOp{as*} -\newline -\axiomOpFrom{reduce}{Expression} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage4xPatch5A patch} -\label{HTXLinkPage4xPatch5A} -\index{patch!HTXLinkPage4xPatch5A!htxlinkpage4.ht} -\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch5A} -\index{HTXLinkPage4xPatch5A!htxlinkpage4.ht!patch} -<>= -\begin{patch}{HTXLinkPage4xPatch5A} -\begin{paste}{HTXLinkPage4xPaste5B}{HTXLinkPage4xPatch5} -\pastebutton{HTXLinkPage4xPaste5B}{Interpret} -\newline -{\tt \\axiomType\{Expression Integer\}}\newline -{\tt \newline}\newline -{\tt \\axiomType\{Expression\}}\newline -{\tt \newline}\newline -{\tt \\axiomType\{EXPR\}}\newline -{\tt \newline}\newline -{\tt \\axiomOp\{reduce\}}\newline -{\tt \newline}\newline -{\tt \\axiomOp\{as*\}}\newline -{\tt \newline}\newline -{\tt \\axiomOpFrom\{reduce\}\{Expression\}}\newline -\end{paste} -\end{patch} - -@ -\section{htxlinkpage5.ht} -\subsection{Linking to Unix} -\label{HTXLinkPage5} -\index{pages!HTXLinkPage5!htxlinkpage5.ht} -\index{htxlinkpage5.ht!pages!HTXLinkPage5} -\index{HTXLinkPage5!htxlinkpage5.ht!pages} -<>= -\begin{page}{HTXLinkPage5}{Linking to Unix} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -Let us conclude the tour of \HyperName{} -actions that can be triggered with a click of a button -with two more facilities. These are -\beginImportant -\table{ -{ {\tt \\unixcommand\{{\it trigger text}\}\{{\it unix command}\}}} -{ {\tt \\unixlink\{{\it trigger text}\}\{{\it unix command}\}}} -} -\endImportant - - -The first one, {\tt \\unixcommand}, is very much like -{\tt \\axiomcommand} and {\tt \\lispcommand}. -The trigger text becomes an active area. Clicking on it -will force \HyperName{} to pass the second argument -to the system as a shell command to be executed. -The shell used is {\bf /bin/sh}. -\HyperName{} ignores the output of the command. - - -\beginImportant -\begin{paste}{HTXLinkPage5xPaste1}{HTXLinkPage5xPatch1} -\pastebutton{HTXLinkPage5xPaste1}{Interpret} -\newline -{\tt \\unixcommand\{List \\\$HOME directory\}\{ls \\\$HOME\}}\newline -\end{paste} -\endImportant - -The {\tt \\unixlink} command delegates to a another -program the creation of a dynamic page. When the trigger -text is activated, \HyperName{} will invoke the command -specified in the second argument. It will then start reading -the {\it standard output} of the command until -a complete page has been received. It is important that -a single page and nothing more is written by the command. -This command is essentially a {\tt \\downlink}, i.e. -the new page replaces the current page in the window. -There aren't any other flavours of {\tt \\unixlink}. -A trivial example is to use {\bf cat} on a \HyperName{} -file known to contain just one page. - -\beginImportant -\begin{paste}{HTXLinkPage5xPaste2}{HTXLinkPage5xPatch2} -\pastebutton{HTXLinkPage5xPaste2}{Interpret} -\newline -{\tt \\unixlink\{Some file\}} \newline -{\tt \{cat\\ \\env\{AXIOM\}/doc/hypertex/pages/HTXplay.ht\}} -\end{paste} -\endImportant - - -Two things to notice in the second argument of -{\tt \\unixlink}: You must use a {\it hard space} -{\tt '\\\ '} to preserve the spacing in the command. -Also, the {\tt \\env} command allows you to use -an environment variable in \HyperName{} text. - -With a little ingenuity (and maybe some shell and {\bf awk} scripts !) -, one can use these -facilities to create, say, a point-and-click -directory viewer which allows you to edit -a file by clicking on its name. - -\end{scroll} -\beginmenu -\menulink{Next -- How to use your pages with \HyperName{}}{HTXLinkPage6} -\endmenu - -\end{page} - -@ -\subsection{HTXLinkPage5xPatch1 patch} -\label{HTXLinkPage5xPatch1} -\index{patch!HTXLinkPage5xPatch1!htxlinkpage5.ht} -\index{htxlinkpage5.ht!patch!HTXLinkPage5xPatch1} -\index{HTXLinkPage5xPatch1!htxlinkpage5.ht!patch} -<>= -\begin{patch}{HTXLinkPage5xPatch1} -\begin{paste}{HTXLinkPage5xPaste1A}{HTXLinkPage5xPatch1A} -\pastebutton{HTXLinkPage5xPaste1A}{Source} -\newline -\unixcommand{List \$HOME directory}{ls \$HOME} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage5xPatch1A patch} -\label{HTXLinkPage5xPatch1A} -\index{patch!HTXLinkPage5xPatch1A!htxlinkpage5.ht} -\index{htxlinkpage5.ht!patch!HTXLinkPage5xPatch1A} -\index{HTXLinkPage5xPatch1A!htxlinkpage5.ht!patch} -<>= -\begin{patch}{HTXLinkPage5xPatch1A} -\begin{paste}{HTXLinkPage5xPaste1B}{HTXLinkPage5xPatch1} -\pastebutton{HTXLinkPage5xPaste1B}{Interpret} -\newline -{\tt \\unixcommand\{List \\\$HOME directory\}\{ls \\\$HOME\}}\newline -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage5xPatch2 patch} -\label{HTXLinkPage5xPatch2} -\index{patch!HTXLinkPage5xPatch2!htxlinkpage5.ht} -\index{htxlinkpage5.ht!patch!HTXLinkPage5xPatch2} -\index{HTXLinkPage5xPatch2!htxlinkpage5.ht!patch} -<>= -\begin{patch}{HTXLinkPage5xPatch2} -\begin{paste}{HTXLinkPage5xPaste2A}{HTXLinkPage5xPatch2A} -\pastebutton{HTXLinkPage5xPaste2A}{Source} -\newline -\unixlink{Some file} -{cat\ \env{AXIOM}/doc/hypertex/pages/HTXplay.ht} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage5xPatch2A patch} -\label{HTXLinkPage5xPatch2A} -\index{patch!HTXLinkPage5xPatch2A!htxlinkpage5.ht} -\index{htxlinkpage5.ht!patch!HTXLinkPage5xPatch2A} -\index{HTXLinkPage5xPatch2A!htxlinkpage5.ht!patch} -<>= -\begin{patch}{HTXLinkPage5xPatch2A} -\begin{paste}{HTXLinkPage5xPaste2B}{HTXLinkPage5xPatch2} -\pastebutton{HTXLinkPage5xPaste2B}{Interpret} -\newline -{\tt \\unixlink\{Some file\}} \newline -{\tt \{cat\\ \\env\{AXIOM\}/doc/hypertex/pages/HTXplay.ht\}} -\end{paste} -\end{patch} - -@ -\section{htxlinkpage6.ht} -\subsection{How to use your pages with Hyperdoc} -\label{HTXLinkPage6} -\index{pages!HTXLinkPage6!htxlinkpage6.ht} -\index{htxlinkpage6.ht!pages!HTXLinkPage6} -\index{HTXLinkPage6!htxlinkpage6.ht!pages} -<>= -\begin{page}{HTXLinkPage6}{How to use your pages with Hyperdoc} -\centerline{\fbox{{\tt \thispage}}}\newline -\begin{scroll} - -Let us say that you have written a few \HyperName{} -pages and you would like to incorporate them in the system. -Here is what you should do. - -Put all your files in some directory and make sure that -they all have the {\bf .ht} extension. - -You will need a way of "hooking" into a system--defined -\HyperName{} page. The proper way to do this is to use -the {\tt \\localinfo} macro. The Axiom system -\HyperName{} page database includes, as it should, -a {\tt RootPage}. This is the page that first comes up -when you start \HyperName{}. This page contains -a line like this. -\beginImportant -\newline -{\tt \\localinfo} -\endImportant - -This macro is defined in -\centerline{ {\bf \env{AXIOM}/doc/hypertex/pages/util.ht}} -to be (see \downlink{Macros}{HTXAdvPage3} to learn how to define macros): -\beginImportant -\newline -{\tt \\newcommand\{\\localinfo\}\{\}} -\endImportant -which is an empty definition (the second argument of {\tt \\newcommand}). -The idea then is that you {\it override} this definition of the macro -with your own. -To do that, include a definition like the following in one (possibly the -one that contains your top--level page) of your files. You can -put this definition in its own file if you like. -\beginImportant -\newline -{\tt \\newcommand\{\\localinfo\}\{\\menuwindowlink\{{\it active text}\}} \newline -{\tt \{{\it page name}\} \\tab\{16\}{\it short description}\}} -\endImportant - -If you have a look at the initial \HyperName{} page, you will -probably be able to decipher what this does. The macro -{\tt \\menuwindowlink} is defined (again in {\bf util.ht}) -and is responsible for putting the little square to the left of the -active area. -Specify a word or two for {\it active text}. That will become the -trigger of the {\tt \\link}. Specify the page name of your top--level page -in {\it page name}. Finally, you can give a comment about the topic -under {\it short description}. That will appear to the right of the -{\it active text}. - -The next thing you need to do is to create a {\it local database} -for your files. You will use the {\bf \env{AXIOM}/bin/htadd} program. -This program will create an {\bf ht.db} file that summarises your -definitions and acts as an index. Let us present an example -of its use. Suppose you have two files {\bf user1.ht} and {\bf user2.ht} -in directory {\bf /u/sugar/\HyperName{}}. You should create the {\bf ht.db} -in that same directory. To create the {\bf ht.db} file you issue to -the unix shell: -\beginImportant -\newline -{\tt htadd -f /u/sugar/\HyperName{} /u/sugar/\HyperName{}/user1.ht /u/sugar/\HyperName{}/user2.ht} -\centerline{or ,if you are already in /u/sugar/\HyperName{}} -{\tt htadd -l ./user1.ht ./user2.ht} -\endImportant - - -The options and conventions for {\bf htadd} will be explained below. -To start \HyperName{} with your own pages, you now need to tell -it where to search for {\bf ht.db} files and \HyperName{} {\bf .ht} -files. To do this, define the shell environment variable -{\bf HTPATH}. The value should be a colon {\tt ':'} separated -list of directory full pathnames. -The order of the directories is respected with earlier entries overriding -later ones. Since we want all the Axiom pages but need to override the -{\tt \\localinfo} macro, we should use the value -\centerline{{\bf /u/sugar/\HyperName{}:\env{AXIOM}/doc/hypertex/pages}} -The way that you define environment variables depends on the shell -you are using. In the {\bf /bin/csh}, it would be -\newline -{\bf setenv HTPATH /u/sugar/\HyperName{}:\env{AXIOM}{}/doc{}/hypertex{}/pages} - - - -\beginImportant -\begin{paste}{HTXLinkPage6xPaste1}{HTXLinkPage6xPatch1} -\pastebutton{HTXLinkPage6xPaste1}{Options for {\bf htadd}} -\newline -\end{paste} -\endImportant - - -\beginImportant -\begin{paste}{HTXLinkPage6xPaste2}{HTXLinkPage6xPatch2} -\pastebutton{HTXLinkPage6xPaste2}{Where does \HyperName{} look for files} -\newline -\end{paste} -\endImportant - - - -\end{scroll} -\beginmenu -\menulink{Back to Actions menu}{HTXLinkTopPage} -\endmenu - -\end{page} - -@ -\subsection{HTXLinkPage6xPatch1 patch} -\label{HTXLinkPage6xPatch1} -\index{patch!HTXLinkPage6xPatch1!htxlinkpage6.ht} -\index{htxlinkpage6.ht!patch!HTXLinkPage6xPatch1} -\index{HTXLinkPage6xPatch1!htxlinkpage6.ht!patch} -<>= -\begin{patch}{HTXLinkPage6xPatch1} -\begin{paste}{HTXLinkPage6xPaste1A}{HTXLinkPage6xPatch1A} -\pastebutton{HTXLinkPage6xPaste1A}{Hide} -\newline -Name: - -{\tt htadd - create or modify a \HyperName{} database} -\vspace{} -\newline -Syntax: - -{\tt htadd [ -l | -s | -f\ }{\it path}{\tt ] [ -d | -n ]\ }{\it filename ...} -\vspace{} -\newline -Options:\indentrel{4}\newline -{\tt -l}\tab{8}\indentrel{8} -build {\bf ht.db} database in current working directory. -This is the default behaviour if no {\tt -l}, {\tt -s} or {\tt -f} -is specified. - -\indentrel{-8}\newline -{\tt -s}\tab{8}\indentrel{8} -build {\bf ht.db} database in {\it system} directory. The -system directory is built as follows. If the {\tt AXIOM} -variable is defined, the {\bf \$AXIOM/doc/hypertex/pages} directory -is used. If {\tt AXIOM} is not defined, the -{\bf /usr/local/axiom/doc/hypertex/pages} directory is used. - - -\indentrel{-8}\newline -{\tt -f\ }{\it path}\newline\tab{8}\indentrel{8} -build {\bf ht.db} database in specified {\it path}. - -\indentrel{-8}\newline -{\tt -d}\tab{8}\indentrel{8} -delete the entries in the specified files from {\bf ht.db}. - -\indentrel{-8}\newline -{\tt -n}\tab{8}\indentrel{8} -delete {\bf ht.db} and create a new one using only the files -specified. - -If none of {\tt -n} and {\tt -d} is specified, the {\bf ht.db} -is updated with the entries in the file specified. - - -\indentrel{-8} -\indentrel{-4} -\vspace{}\newline -Filename interpretation : -\indentrel{12}\newline -A full pathname (i.e. anything that has a {\tt '/'} in it) -will be taken do be a completely specified file. -Otherwise, the following interpretation will occur: -If the {\tt HTPATH} variable is defined, the directories -specified in it will be tried in order. If {\tt HTPATH} -is not defined, then, if {\tt AXIOM} is defined, the -{\bf \$AXIOM/doc/hypertex/pages} will be tried, else -the file will be deemed missing and {\bf htadd} will fail. -\indentrel{-12} -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage6xPatch1A patch} -\label{HTXLinkPage6xPatch1A} -\index{patch!HTXLinkPage6xPatch1A!htxlinkpage6.ht} -\index{htxlinkpage6.ht!patch!HTXLinkPage6xPatch1A} -\index{HTXLinkPage6xPatch1A!htxlinkpage6.ht!patch} -<>= -\begin{patch}{HTXLinkPage6xPatch1A} -\begin{paste}{HTXLinkPage6xPaste1B}{HTXLinkPage6xPatch1} -\pastebutton{HTXLinkPage6xPaste1B}{Options for {\bf htadd}} -\newline -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage6xPatch2 patch} -\label{HTXLinkPage6xPatch2} -\index{patch!HTXLinkPage6xPatch2!htxlinkpage6.ht} -\index{htxlinkpage6.ht!patch!HTXLinkPage6xPatch2} -\index{HTXLinkPage6xPatch2!htxlinkpage6.ht!patch} -<>= -\begin{patch}{HTXLinkPage6xPatch2} -\begin{paste}{HTXLinkPage6xPaste2A}{HTXLinkPage6xPatch2A} -\pastebutton{HTXLinkPage6xPaste2A}{Hide} -\indentrel{12}\newline -The \HyperName{} program is -\centerline{{\bf \env{AXIOM}/lib/hypertex}} -If {\tt AXIOM} is defined and {\tt HTPATH} is not -(this is the case when Axiom starts \HyperName{}) -\HyperName{} will look in -\centerline{{\bf \env{AXIOM}/doc/hypertex/pages}} -for the {\bf ht.db} file and all \HyperName{} pages. -If {\tt HTPATH} is defined, it is assumed that -it alone points to the directories to be searched -(the above default will NOT be searched unless -explicitly specified in {\tt HTPATH}). -For each directory in {\tt HTPATH}, the {\bf ht.db} -file, if there, will be read. -Each file listed in {\bf ht.db} will -then be searched for in the complete sequence -of directories in {\tt HTPATH}. Note that -the {\bf ht.db} does not keep full pathnames - of files. -If a {\it page}, {\it macro} or {\it patch} -(specified in some {\bf ht.db}) happens -to be (in a file) in more than one of the directories -specified in {\tt HTPATH}, \HyperName{} -will print a warning and explain which version -in which file is ignored. Generally, earlier -directories in {\tt HTPATH} are preferred over later -ones. -\indentrel{-12}\newline -\end{paste} -\end{patch} - -@ -\subsection{HTXLinkPage6xPatch2A patch} -\label{HTXLinkPage6xPatch2A} -\index{patch!HTXLinkPage6xPatch2A!htxlinkpage6.ht} -\index{htxlinkpage6.ht!patch!HTXLinkPage6xPatch2A} -\index{HTXLinkPage6xPatch2A!htxlinkpage6.ht!patch} -<>= -\begin{patch}{HTXLinkPage6xPatch2A} -\begin{paste}{HTXLinkPage6xPaste2B}{HTXLinkPage6xPatch2} -\pastebutton{HTXLinkPage6xPaste2B}{Where does \HyperName{} look for files}} -\newline -\end{paste} -\end{patch} - -@ -\section{htxlinktoppage.ht} -\subsection{Actions in Hyperdoc} -\label{HTXLinkTopPage} -\begin{itemize} -\item HTXLinkPage1 \ref{HTXLinkPage1} on page~\pageref{HTXLinkPage1} -\item HTXLinkPage2 \ref{HTXLinkPage2} on page~\pageref{HTXLinkPage2} -\item HTXLinkPage3 \ref{HTXLinkPage3} on page~\pageref{HTXLinkPage3} -\item HTXLinkPage4 \ref{HTXLinkPage4} on page~\pageref{HTXLinkPage4} -\item HTXLinkPage5 \ref{HTXLinkPage5} on page~\pageref{HTXLinkPage5} -\item HTXLinkPage6 \ref{HTXLinkPage6} on page~\pageref{HTXLinkPage6} -\end{itemize} -\index{pages!HTXLinkTopPage!htxlinktoppage.ht} -\index{htxlinktoppage.ht!pages!HTXLinkTopPage} -\index{HTXLinkTopPage!htxlinktoppage.ht!pages} -<>= -\begin{page}{HTXLinkTopPage}{Actions in Hyperdoc} -\centerline{\fbox{{\tt \thispage}}}\newline -\HyperName{} offers various types of hypertext links. -You can learn about these facilities by clicking on the topics below. -\begin{scroll} -\beginmenu -\menudownlink{Linking to a named page}{HTXLinkPage1} -\menudownlink{Standard pages}{HTXLinkPage2} -\menudownlink{Active Axiom commands}{HTXLinkPage3} -\menudownlink{Linking to Lisp}{HTXLinkPage4} -\menudownlink{Linking to Unix}{HTXLinkPage5} -\menudownlink{How to use your pages with \HyperName{}}{HTXLinkPage6} -\endmenu -\end{scroll} -\end{page} - -@ -\section{htxtoppage.ht} -\subsection{Extending Hyperdoc} -\label{HTXTopPage} -\begin{itemize} -\item HTXIntroTopPage \ref{HTXIntroTopPage} on page~\pageref{HTXIntroTopPage} -\item HTXFormatTopPage \ref{HTXFormatTopPage} on -page~\pageref{HTXFormatTopPage} -\item HTXLinkTopPage \ref{HTXLinkTopPage} on page~\pageref{HTXLinkTopPage} -\item HTXAdvTopPage \ref{HTXAdvTopPage} on page~\pageref{HTXAdvTopPage} -\item HTXTryPage \ref{HTXTryTopPage} on page~\pageref{HTXTryPage} -\end{itemize} -\index{pages!HTXTopPage!htxtoppage.ht} -\index{htxtoppage.ht!pages!HTXTopPage} -\index{HTXTopPage!htxtoppage.ht!pages} -<>= -\begin{page}{HTXTopPage}{Extending Hyperdoc} -\centerline{\fbox{{\tt \thispage}}}\newline -This is a guide to extending \HyperName{}. You can learn -how to write your own \HyperName{} pages and link them to the -\HyperName{} page database that Axiom uses. -\begin{scroll} -\beginmenu -\menumemolink{Introduction}{HTXIntroTopPage} \tab{20} An easy start. -\menumemolink{Formatting}{HTXFormatTopPage} \tab{20} Learn how to format text. -\menumemolink{Actions}{HTXLinkTopPage} \tab{20} Learn how to define actions. -\menumemolink{Advanced features}{HTXAdvTopPage} \tab{20} More effects. -\menuwindowlink{Try it!}{HTXTryPage} \tab{20} Try out what you learn. -\endmenu -\end{scroll} -\end{page} - -@ -\section{htxtrypage.ht} -\subsection{Try out Hyperdoc} -\label{HTXTryPage} -\index{pages!HTXTryPage!htxtrypage.ht} -\index{htxtrypage.ht!pages!HTXTryPage} -\index{HTXTryPage!htxtrypage.ht!pages} -<>= -\begin{page}{HTXTryPage}{Try out Hyperdoc} -\centerline{\fbox{{\tt \thispage}}}\newline - -This page allows you to quickly experiment with \HyperName{}. -It is a good idea to keep it handy as you learn about various commands. - -\beginscroll - -We are going to use here the \HyperName{} facilities that allow -us to communicate with external programs and files. For more -information see \downlink{later on}{HTXLinkPage5}. -\beginmenu -\item\menuitemstyle{ -In order to use the buttons at the bottom of this page, you must -first specify a name for the file you are going to use to hold -\HyperName{} commands. Edit the input area below to change the -name of the file.} -\item\menuitemstyle{ -If the file you specified does not yet exist, click on the -{\bf Initialize} button below. This action will fill the file -with the minimum of \HyperName{} commands necessary to define a page.} -\item\menuitemstyle{ -If you want to edit the file, just click on the {\bf Edit} button. -This action will pop up a window, and invoke the {\it vi} -editor on the file. Alternatively, use an editor of your choice.} -\item\menuitemstyle{ -Once you have finished making the changes to the file, update it and -click on the {\bf Link} button. \HyperName{} will then read -the file, interpret it as a new page, and display the page on -this window. If you change the file and want to display it again, -just get back to this page and click on {\bf Link} again. } -\endmenu -\endscroll -\beginmenu -{\it Filename: }{\inputstring{filename}{40}{\env{HOME}/HTXplay.ht}} -\menuunixcommand{Initialize}{cp\space{1}\env{AXIOM}/doc/hypertex/pages/HTXplay.ht \stringvalue{filename}} \tab{20} Get a fresh copy from the system. -\menuunixcommand{Edit}{xterm -T "\stringvalue{filename}" -e vi \stringvalue{filename}} \tab{20} Edit the file. -\menuunixwindow{Link}{cat \space{1}\stringvalue{filename}} \tab{20} Link to the page defined in the file. -\endmenu -{\it Important : The file must contain -one and only one page definition and must not contain any macro or patch -definitions.} -\end{page} - -@ -\section{hyperdoc.ht} -\subsection{Creating Hyperdoc Pages} -\label{Hyperdoc} -\begin{itemize} -\item ViewportPage \ref{ViewportPage} on -page~\pageref{ViewportPage} -\item BitMaps \ref{BitMaps} on -page~\pageref{BitMaps} -\item CPHelp \ref{CPHelp} on -page~\pageref{CPHelp} -\end{itemize} -\index{pages!Hyperdoc!hyperdoc.ht} -\index{hyperdoc.ht!pages!Hyperdoc} -\index{Hyperdoc!hyperdoc.ht!pages} -<>= -\begin{page}{Hyperdoc}{Creating Hyperdoc Pages} - -\beginscroll -This document tells how to create \HyperName pages. -To start with, it is rather meager but it will grow with time. -\beginmenu -\menulink{Viewports}{ViewportPage} Including live graphics in documents. -\menulink{Gadjets}{BitMaps} Bitmaps for use in macros. -\menulink{Control Panel Bits}{CPHelp} Development page for help -facility for viewports. yuck. -%\menulink{Test Pages}{TestPage} Some test pages left by J.M. -%\menulink{Paste Pages}{PastePage} Examples of how to use paste in areas. -\endmenu - -\endscroll -\autobuttons -\end{page} - -@ \section{int.ht} <>= \newcommand{\IntegerXmpTitle}{Integer} @@ -17820,25 +11886,25 @@ facility for viewports. yuck. \subsection{Integer} \label{IntegerXmpPage} \begin{itemize} -\item ugIntroNumbersPage \ref{ugIntroNumbersPage} on -page~pageref{ugIntroNumbersPage} -\item IntegerNumberTheoryFunctionsXmpPage +\item ugIntroNumbersPage\\ +\ref{ugIntroNumbersPage} on page~pageref{ugIntroNumbersPage} +\item IntegerNumberTheoryFunctionsXmpPage \\ \ref{IntegerNumberTheoryFunctionsXmpPage} on page~pageref{IntegerNumberTheoryFunctionsXmpPage} -\item DecimalExpansionXmpPage \ref{DecimalExpansionXmpPage} on -page~pageref{DecimalExpansionXmpPage} -\item BinaryExpansionXmpPage \ref{BinaryExpansionXmpPage} on -page~pageref{BinaryExpansionXmpPage} -\item HexadecimalExpansionXmpPage \ref{HexadecimalExpansionXmpPage} on -page~pageref{HexadecimalExpansionXmpPage} -\item RadixExpansionXmpPage \ref{RadixExpansionXmpPage} on -page~pageref{RadixExpansionXmpPage} -\item ugxIntegerBasicPage \ref{ugxIntegerBasicPage} on -page~pageref{ugxIntegerBasicPage} -\item ugxIntegerPrimesPage \ref{ugxIntegerPrimesPage} on -page~pageref{ugxIntegerPrimesPage} -\item ugxIntegerNtPage \ref{ugxIntegerNtPage} on -page~pageref{ugxIntegerNtPage} +\item DecimalExpansionXmpPage \\ +\ref{DecimalExpansionXmpPage} on page~pageref{DecimalExpansionXmpPage} +\item BinaryExpansionXmpPage \\ +\ref{BinaryExpansionXmpPage} on page~pageref{BinaryExpansionXmpPage} +\item HexadecimalExpansionXmpPage \\ +\ref{HexadecimalExpansionXmpPage} on page~pageref{HexadecimalExpansionXmpPage} +\item RadixExpansionXmpPage\\ +\ref{RadixExpansionXmpPage} on page~pageref{RadixExpansionXmpPage} +\item ugxIntegerBasicPage \\ +\ref{ugxIntegerBasicPage} on page~pageref{ugxIntegerBasicPage} +\item ugxIntegerPrimesPage \\ +\ref{ugxIntegerPrimesPage} on page~pageref{ugxIntegerPrimesPage} +\item ugxIntegerNTPage \\ +\ref{ugxIntegerNTPage} on page~pageref{ugxIntegerNTPage} \end{itemize} \index{pages!IntegerXmpPage!int.ht} \index{int.ht!pages!IntegerXmpPage} @@ -19522,7 +13588,7 @@ page~\pageref{FoundationLibraryDocPage} @ \subsection{Use of the Link from HyperDoc} -\label{htx11} +\label{htxl1} \begin{itemize} \item c02 \ref{c02} on page~\pageref{c02} @@ -19553,9 +13619,9 @@ page~\pageref{f07} \item s \ref{s} on page~\pageref{s} \end{itemize} -\index{pages!htx11!link.ht} -\index{link.ht!pages!htx11} -\index{htx11!link.ht!pages} +\index{pages!htxl1!link.ht} +\index{link.ht!pages!htxl1} +\index{htxl1!link.ht!pages} <>= \begin{page}{htxl1}{Use of the Link from HyperDoc} Click on the chapter of routines that you would like to use. @@ -19839,8 +13905,7 @@ technique \subsection{E01 Interpolation} \label{e01} \begin{itemize} -\item manpageXXe01 \ref{manpageXXe01} on -page~\pageref{manpageXXe01} +\item manpageXXe01 \ref{manpageXXe01} on page~\pageref{manpageXXe01} \end{itemize} \index{pages!e01!link.ht} \index{link.ht!pages!e01} @@ -21678,6 +15743,8 @@ Enter search string : \includegraphics[scale=.5]{ps/v71man0page.eps} \index{images!man0page} +Called from ``Root Page'' (RootPage) \ref{RootPage} on page~\pageref{RootPage} + See ``Commands'' (ugSysCmdPage) \ref{ugSysCmdPage} on page~\pageref{ugSysCmdPage} \index{pages!Man0Page!man0.ht} @@ -21693,7 +15760,10 @@ Enter search string (use {\em *} for wild card unless counter-indicated): \beginmenu \menulispmemolink{Constructors} { (|kSearch| '|\stringvalue{pattern}|) } - \tab{15} Search for \lispmemolink{categories}{(|cSearch| '|\stringvalue{pattern}|)}, \lispmemolink{domains}{(|dSearch| '|\stringvalue{pattern}|)}, or \lispmemolink{packages}{(|pSearch| '|\stringvalue{pattern}|)} + \tab{15} Search for +\lispmemolink{categories}{(|cSearch| '|\stringvalue{pattern}|)}, +\lispmemolink{domains}{(|dSearch| '|\stringvalue{pattern}|)}, or +\lispmemolink{packages}{(|pSearch| '|\stringvalue{pattern}|)} \menulispmemolink{Operations} { (|oSearch| '|\stringvalue{pattern}|) } \tab{15} Search for operations. @@ -22652,6 +16722,43641 @@ For more information on related topics, see \end{page} @ +\section{newuser.ht} +\subsection{No More Help :-(} +\label{NoMoreHelpPage} +\index{pages!NoMoreHelpPage!newuser.ht} +\index{newuser.ht!pages!NoMoreHelpPage} +\index{NoMoreHelpPage!newuser.ht!pages} +<>= +\begin{page}{NoMoreHelpPage}{No More Help :-(} +\beginscroll\vspace{2} +\centerline{No additional or specific help information is available.} +\centerline{Click on \ \ExitButton{QuitPage} \ to get back.} +\endscroll +\end{page} + +@ +\subsection{You Tried It!} +\label{YouTriedIt} +\index{pages!YouTriedIt!newuser.ht} +\index{newuser.ht!pages!YouTriedIt} +\index{YouTriedIt!newuser.ht!pages} +<>= +\begin{page}{YouTriedIt}{You Tried It!} +\beginscroll +\upbutton{Click here}{UpPage} to get back. +\endscroll +\end{page} + +% Getting Started + +%% % Now using text from book + +%% % -------------------------------------------------------------------- +%% \begin{page}{GettingStarted}{Getting Started} +%% % -------------------------------------------------------------------- +%% \beginscroll +%% \par +%% \HyperName{} is the gateway to Axiom. +%% It's both an on-line tutorial and an on-line reference. It also enables you +%% to use Axiom simply by using the mouse and filling in templates. +%% \HyperName{} is available to you if you are running Axiom under the +%% X Window System. +%% \par +%% Pages usually have active areas, marked in \downlink{this +%% font.}{YouTriedIt} +%% As you move the mouse pointer to an active area, the pointer changes from a +%% filled dot to an open circle. +%% The active areas are usually linked to other pages. +%% When you click on an active area, you move to the linked page. +%% Try clicking \downlink{here}{YouTriedIt} now. +%% \par +%% Now we suggest that you learn more about other features of +%% \HyperName{} by clicking on an active area in the menu below: +%% % +%% \beginmenu +%% \menumemolink{Headings}{ugHyperHeadingsPage}\tab{15}How to use the headings at the top of the page +%% \menulink{Scroll Bars}{ugHyperScrollPage}\tab{15}All about {\it scroll bars} on \HyperName{} pages +%% \menulink{Input Areas}{ugHyperInputPage}\tab{15}All about {\it input areas} in \HyperName{} +%% \menulink{Buttons}{ugHyperButtonsPage}\tab{15}Learn about {\it radio buttons} and {\it toggles} +%% \menulink{Search Strings}{SearchStrings}\tab{15}Learn about {\it search strings} in \HyperName{} +%% \menulink{Example Pages}{ugHyperExamplePage}\tab{15}How to view or run {\it examples} on \HyperName{} pages +%% \menulink{Settings}{ugHyperResourcesPage}\tab{15}X Window Resources for \HyperName{} +%% \endmenu +%% \endscroll +%% \end{page} + +%% % -------------------------------------------------------------------- +%% \begin{page}{ExamplesIntro}{Axiom Examples} +%% % -------------------------------------------------------------------- +%% \pp +%% \beginscroll +%% Many pages have Axiom examples. +%% Here are two: +%% \spadpaste{a:= x**2 + 1 \bound{a}} \newline +%% \spadpaste{(a - 2)**2 \free{a}} \newline +%% Each example has an active ``button'' along the left margin. +%% When you click on this button the output for the +%% command is ``pasted-in.'' +%% Try it! +%% Click again on the button and you'll see +%% that the pasted-in output disappears. Got the idea? +%% \par +%% Maybe you would like to run an example? +%% To do so, just click on any part of it! +%% When you do, the example line is copied into a new interactive Axiom +%% buffer for this \HyperName{} page. +%% \par +%% Sometimes one example line cannot be run before you run an earlier one. +%% Don't worry---this is all automatic! +%% For instance, the second example line above refers to \spad{a} which is +%% assigned in the first example line. +%% What happens if you first click on the second example line? +%% Axiom first issues the first line (to assign \spad{a}), then the +%% second (to do the computation using \spad{a}). +%% \par +%% The new interactive Axiom buffer will disappear when you leave +%% \HyperName{}. +%% If you want to get rid of it beforehand, +%% use the ``Cancel'' button of the X window manager. +%% \endscroll +%% %\autobutt{HelpHelp} +%% \end{page} + +%% % -------------------------------------------------------------------- +%% \begin{page}{RadioButtons}{Radio Buttons and Toggles} +%% % -------------------------------------------------------------------- +%% \beginscroll +%% \radioboxes{sample}{\htbmfile{pick}}{\htbmfile{unpick}} +%% \par +%% Radio buttons are a group of round buttons like those on car radios: you can +%% select only one. +%% Here are three radio buttons: +%% \centerline{ +%% {\em\radiobox[1]{rone}{sample}\space{}The first one}\space{3} +%% {\em\radiobox[0]{rtwo}{sample}\space{}The second one}\space{3} +%% {\em\radiobox[0]{rthree}{sample}\space{}The third one} +%% } +%% \newline +%% The selected button has an {\it X} in the box. +%% The others which are not selected are open, i.e. they have no {\it X}. +%% To change the selection, move the cursor with the mouse to an +%% alternate radio button and click. Try it now. +%% %\vspace{1}\centerline{To see another kind of button click on:} +%% %\centerline{\box{\downlink{Next Page}{ToggleButton}}} +%% %\endscroll +%% %\autobuttons\end{page} +%% %\begin{page}{ToggleButton}{Toggles} +%% %\beginscroll +%% \vspace{1} +%% \par +%% A toggle is a square button you can either select (it has an {\it X}) or +%% not (it has no {\it X}). +%% Unlike radio buttons, you can set a group of them any way you like. +%% Here are three: +%% \centerline{ +%% {\em\inputbox[1]{one}{\htbmfile{pick}}{\htbmfile{unpick}}\space{}The first one} +%% \space{3} +%% {\em\inputbox[0]{two}{\htbmfile{pick}}{\htbmfile{unpick}}\space{}The second one} +%% \space{3} +%% {\em\inputbox[1]{three}{\htbmfile{pick}}{\htbmfile{unpick}}\space{}The third one} +%% } +%% \newline +%% To change the selections, move the cursor with the mouse +%% to a toggle and click. +%% \endscroll +%% \autobuttons\end{page} + +%% % -------------------------------------------------------------------- +%% \begin{page}{InputAreas}{Input Areas} +%% % -------------------------------------------------------------------- +%% \beginscroll +%% \par Input areas are boxes that you can fill in. +%% Here is one: +%% \centerline{\inputstring{one}{40}{some text}} +%% \newline As you can see, the input area has some initial text {\it some text} +%% followed by an underscore (the character {\it _}). +%% First, make sure that the mouse cursor is +%% on this page. Now type some +%% characters at the keyboard. +%% The characters that you type are now inserted in front of the underscore. +%% You may type as many characters as you like. +%% The input area will grow to accomodate as many characters as you type. +%% Use the {\it Backspace} key to erase +%% characters to the left. +%% Use the keys {\it Insert}, {\it Delete}, {\it Home} and {\it End} +%% to modify what you type. +%% Also try right- and left-arrow keys immediately to the right of the +%% standard keyboard. +%% \vspace{1}\newline\centerline{\box{\downlink{Next Page}{MultipleugHyperInputPage}}} +%% \endscroll +%% \end{page} + + +%% % -------------------------------------------------------------------- +%% \begin{page}{MultipleInputAreas}{Multiple Input Areas} +%% % -------------------------------------------------------------------- +%% \beginscroll +%% Here is a large input area like the one on the last page: +%% \centerline{\inputstring{one}{40}{one}} +%% \newline +%% and here are two smaller ones: +%% \centerline{\inputstring{two}{15}{two}\space{8}\inputstring{three}{7}{three}} +%% Move your mouse cursor to somewhere within this page. +%% Note that only the first input area has an underscore cursor. +%% This means that when you type characters at your keyboard, they +%% will go into this first input area. Try it! +%% \par +%% To type information into another input area, +%% use the {\it Enter} or {\it Tab} key to move from one input area to another. +%% To move in the reverse order, use {\it Shift + Tab}. +%% \par +%% You can also move from one input area to another using your mouse. +%% Notice that each input area is active. Click on one of the areas. +%% As you can see, the underscore cursor now moves to that window. +%% \endscroll +%% \end{page} + +%% % Now using text from the book +%% +%% % -------------------------------------------------------------------- +%% \begin{page}{ScrollBars}{Using Scroll Bars} +%% % -------------------------------------------------------------------- +%% When all of the text does not fit within a window, part of the window +%% is like a ``looking glass'' you can +%% move up and down over the length of the text. +%% The text seen by the looking glass has a {\it scroll bar} +%% down its right side. +%% The {\it scroll bar} allows you to move this looking glass. +%% It also tells you the position of the looking glass +%% relative to the whole text. +%% \beginscroll +%% \par +%% The part of this \HyperName{} window beginning with this line has a +%% {\it scroll bar} along its right side. +%% Move the cursor with the mouse to the scroll bar. +%% Now move the cursor to the `down-arrow' at the +%% bottom of the scroll bar and click. See that the looking glass moves +%% down one line. Do it again and again. Each time you click, the +%% looking glass moves down one line. +%% \par +%% Now move the mouse to the 'up-arrow' at the top of the scroll +%% bar and click. The looking glass moves up one line each time you click. +%% \par +%% Next move the mouse to any position along the middle of the +%% scroll bar and click. +%% This will attempt to move the top of the looking glass to the point where you +%% click. +%% However, you cannot make the looking glass to go off the bottom edge. +%% For this example page, the looking glass region is approximately +%% half of the whole region. So the lowest point you can +%% set top of the looking glass is halfway down. +%% Get the idea? +%% \par +%% Want to use the keyboard instead of the mouse? +%% Then use the {\it Page Up} and {\it Page Down} keys on your +%% keyboard. They move the visible part of the region up and down +%% one page each time you type them. Try them! +%% \par +%% If a page does not have an input area, you can also use the {\it Home} +%% and up and down arrow keys to move the visible part of the region. +%% The {\it Home} key moves the region to the very top of the page. +%% The up and down arrow keys move the region up and down one line, +%% respectively. +%% (If a page does have an input area, these three keys operate on the +%% input area.) +%% \endscroll +%% \autobuttons\end{page} + + +%% % -------------------------------------------------------------------- +%% \begin{page}{StartingButtonHelp}{Know These Buttons} +%% % -------------------------------------------------------------------- +%% \beginscroll +%% Most pages have a standard set of buttons at the top of the page. +%% \newline +%% This is what they mean: +%% \par \ExitBitmap \space{} {\it Exit} from \HyperName{} +%% \par \HelpBitmap \space{} Get {\it Help} +%% \par \ReturnBitmap \space{} {\it Jump back} to main page +%% \par \UpBitmap \space{} {\it Go back} one page +%% \newline +%% \pp +%% The {\it Help} button shows you pages that can give you additional +%% information. You can always +%% click on {\it Help} while you're +%% exploring. +%% You can always make forays into new topics. +%% \HyperName{} remembers where you came from. +%% Don't worry about how to get back. Just click on either the ``up arrow'' +%% or the ``HOME'' button. Now click on the ``up arrow'' to go back one page. +%% \endscroll +%% \autobutt{DummyHelp}\end{page} + +%% % -------------------------------------------------------------------- +%% \begin{page}{StartingMenuHelp}{Menus} +%% % -------------------------------------------------------------------- +%% \pp +%% \beginscroll +%% A `menu' is a list of topics. Each topic has at least one active area. +%% Clicking on the active area marked {\it Menus} is how you got here. +%% \horizontalline +%% Here is another menu to practice on: +%% \newline +%% \beginmenu +%% %\menulink{Riddle}{RiddlePage} +%% % A classic riddle. +%% %\menulink{\HyperName{}}{WhatIsHyperName} +%% % What is \HyperName{} +%% \menulink{Buttons}{ButtonHelp} +%% Buttons in \HyperName{}. +%% \endmenu +%% \endscroll +%% \autobuttons\end{page} + + +@ +\section{none.ht} +<>= +\newcommand{\NoneXmpTitle}{None} +\newcommand{\NoneXmpNumber}{9.55} + +@ +\subsection{None} +\label{NoneXmpPage} +\index{pages!NoneXmpPage!none.ht} +\index{none.ht!pages!NoneXmpPage} +\index{NoneXmpPage!none.ht!pages} +<>= +\begin{page}{NoneXmpPage}{None} +\beginscroll +The \spadtype{None} domain is not very useful for interactive +work but it is provided nevertheless for completeness of the +Axiom type system. +\xtc{ +Probably the only place you will ever see it is if you enter an +empty list with no type information. +}{ +\spadpaste{[]} +} +\xtc{ +Such an empty list can be converted into an empty list +of any other type. +}{ +\spadpaste{[] :: List Float} +} +\xtc{ +If you wish to produce an empty list of a particular +type directly, such as \spadtype{List NonNegativeInteger}, do it this way. +}{ +\spadpaste{[]\$List(NonNegativeInteger)} +} +\endscroll +\autobuttons +\end{page} + +@ +\section{numbers.ht} +\subsection{Axiom Number Types} +\label{NumberPage} +\includegraphics[scale=.5]{ps/v71numberpage.eps} +\index{images!numberpage} + +Called from ``Topics'' (TopicPage) \ref{TopicPage} on page~\pageref{TopicPage} +\begin{itemize} +\item ``Integers'' (IntegerPage) \ref{IntegerPage} on +page~\pageref{IntegerPage} +\item ``Fractions'' (FractionPage) \ref{FractionPage} on +page~\pageref{FractionPage} +\item ``Machine Floats'' (DoubleFloatXmpPage) \ref{DoubleFloatXmpPage} on +page~\pageref{DoubleFloatXmpPage} +\item ``Real Numbers'' (FloatXmpPage) \ref{FloatXmpPage} on +page~\pageref{FloatXmpPage} +\item ``Complex Numbers'' (ComplexXmpPage) \ref{ComplexXmpPage} on +page~\pageref{ComplexXmpPage} +\item ``Finite Fields'' (ugProblemFinitePage) \ref{ugProblemFinitePage} on +page~\pageref{ugProblemFinitePage} +\item ``Numeric Functions'' (ugProblemNumericPage) +\ref{ugProblemNumericPage} on +page~\pageref{ugProblemNumericPage} +\item ``Cardinal Numbers'' (CardinalNumberXmpPage) +\ref{CardinalNumberXmpPage} on +page~\pageref{CardinalNumberXmpPage} +\item ``Machine-sized Integers'' (SingleIntegerXmpPage) +\ref{SingleIntegerXmpPage} on +page~\pageref{SingleIntegerXmpPage} +\item ``Roman Numerals'' (RomanNumeralXmpPage) \ref{RomanNumeralXmpPage} on +page~\pageref{RomanNumeralXmpPage} +\item ``Continued Fractions'' (ContinuedFractionXmpPage) +\ref{ContinuedFractionXmpPage} on +page~\pageref{ContinuedFractionXmpPage} +\item ``Partial Fractions'' (PartialFractionXmpPage) +\ref{PartialFractionXmpPage} on +page~\pageref{PartialFractionXmpPage} +\item ``Quaternions'' (QuaternionXmpPage) \ref{QuaternionXmpPage} on +page~\pageref{QuaternionXmpPage} +\item ``Octonions'' (OctonionXmpPage) \ref{OctonionXmpPage} on +page~\pageref{OctonionXmpPage} +\item ``Repeating Decimals'' (DecimalExpansionXmpPage) +\ref{DecimalExpansionXmpPage} on +page~\pageref{DecimalExpansionXmpPage} +\item ``Repeating Binary Expansions'' (BinaryExpansionXmpPage) +\ref{BinaryExpansionXmpPage} on +page~\pageref{BinaryExpansionXmpPage} +\item ``Repeating Hexadecimal Expansions'' (HexadecimalExpansionXmpPage) +\ref{HexadecimalExpansionXmpPage} on +page~\pageref{HexadecimalExpansionXmpPage} +\item ``Expansions in other Bases '' (RadixExpansionXmpPage) +\ref{RadixExpansionXmpPage} on page~\pageref{RadixExpansionXmpPage} +\end{itemize} +\index{pages!NumberPage!numbers.ht} +\index{numbers.ht!pages!NumberPage} +\index{NumberPage!numbers.ht!pages} +<>= +\begin{page}{NumberPage}{Axiom Number Types} +\beginscroll +The following types of numbers are among those available in Axiom. +\beginmenu + +\menulink{Integers}{IntegerPage}\tab{16} +Arithmetic with arbitrarily large integers. + +\menulink{Fractions}{FractionPage} \tab{16} +Rational numbers and general fractions. + +\menulink{Machine Floats}{DoubleFloatXmpPage} \tab{16} +Fixed precision machine floating-point. + +\menulink{Real Numbers}{FloatXmpPage} \tab{16} +Arbitrary precision decimal arithmetic. + +\menulink{Complex Numbers}{ComplexXmpPage} \tab{16} +Complex numbers in general. + +\menulink{Finite Fields}{ugProblemFinitePage} \tab{16} +Arithmetic in characteristic \spad{p}. +\endmenu +\horizontalline\newline +Additional Topics +\beginmenu + +\menulink{Numeric Functions}{ugProblemNumericPage} +\menulink{Cardinal Numbers}{CardinalNumberXmpPage} +\menulink{Machine-sized Integers}{SingleIntegerXmpPage} +\menulink{Roman Numerals}{RomanNumeralXmpPage} +\menulink{Continued Fractions}{ContinuedFractionXmpPage} +\menulink{Partial Fractions}{PartialFractionXmpPage} +\menulink{Quaternions}{QuaternionXmpPage} +\menulink{Octonions}{OctonionXmpPage} +\menulink{Repeating Decimals}{DecimalExpansionXmpPage} +\menulink{Repeating Binary Expansions}{BinaryExpansionXmpPage} +\menulink{Repeating Hexadecimal Expansions}{HexadecimalExpansionXmpPage} +\menulink{Expansions in other Bases}{RadixExpansionXmpPage} + +\endmenu + +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Fraction} +\label{FractionPage} +\begin{itemize} +\item RationalNumberPage \ref{RationalNumberPage} on +page~pageref{RationalNumberPage} +\item FractionXmpPage \ref{FractionXmpPage} on +page~pageref{FractionXmpPage} +\end{itemize} +\index{pages!FractionPage!numbers.ht} +\index{numbers.ht!pages!FractionPage} +\index{FractionPage!numbers.ht!pages} +<>= +\begin{page}{FractionPage}{Fractions} + +\beginscroll +Axiom handles fractions in many different contexts +and will automatically simplify fractions whenever possible. +Here are some examples: +\spadpaste{1/4 - 1/5} +\spadpaste{f := (x**2 + 1)/(x - 1) \bound{f}} +\spadpaste{g := (x**2 - 3*x + 2)/(x + 2) \bound{g}} +\spadpaste{f * g \free{f g}} +\endscroll +Additional Topics: +\beginmenu + +\menulink{Rational Numbers}{RationalNumberPage} \tab{18} +Quotients of integers + +\menulink{Quotient Fields}{FractionXmpPage} \tab{18} +Quotients over an arbitrary integral domain + +%\menulink{Localizations}{LocalizationPage} \tab{18} +%Fractions in the most general setting +\endmenu +\autobuttons +\end{page} + +@ +\subsection{Rational Number} +\label{RationalNumberPage} +\index{pages!RationalNumberPage!numbers.ht} +\index{numbers.ht!pages!RationalNumberPage} +\index{RationalNumberPage!numbers.ht!pages} +<>= +\begin{page}{RationalNumberPage}{Rational Numbers} +\beginscroll +Like integers, rational numbers can be arbitrarily large. +For example: +\spadpaste{61657 ** 10 / 999983 ** 12} +Rational numbers will not be converted to decimals unless you explicitly +ask Axiom to do so. +To convert a rational number to a decimal, use the function +\spadfun{numeric}. +Here's an example: +\spadpaste{x := 104348/33215 \bound{x}} +\spadpaste{numeric x \free{x}} +You can find the numerator and denominator of rational numbers using +the functions \spadfun{numer} and \spadfun{denom}, respectively. +\spadpaste{numer(x) \free{x}} +\spadpaste{denom(x) \free{x}} +To factor the numerator and denominator of a fraction, use the following +command: +\spadpaste{factor(numer x) / factor(denom x) \free{x}} +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Integers} +\label{IntegerPage} +\begin{itemize} +\item IntegerXmpPage \ref{IntegerXmpPage} on +page~pageref{IntegerXmpPage} +\item ugxIntegerPrimesPage \ref{ugxIntegerPrimesPage} on +page~pageref{ugxIntegerPrimesPage} +\item IntegerNumberTheoryFunctionsXmpPage +\ref{IntegerNumberTheoryFunctionsXmpPage} on +page~pageref{IntegerNumberTheoryFunctionsXmpPage} +\item IntegerExamplePage \ref{IntegerExamplePage} on +page~pageref{IntegerExamplePage} +\item IntegerProblemPage \ref{IntegerProblemPage} on +page~pageref{IntegerProblemPage} +\end{itemize} +\index{pages!IntegerPage!numbers.ht} +\index{numbers.ht!pages!IntegerPage} +\index{IntegerPage!numbers.ht!pages} +<>= +\begin{page}{IntegerPage}{Integers} +\beginscroll +In Axiom, integers can be as large as you like. +Try the following examples: +\spadpaste{x := factorial(200) \bound{x}} +\spadpaste{y := 2**90 - 1 \bound{y}} +Of course, you can now do arithmetic as usual on these (very) +large integers: +\spadpaste{x + y \free{x y}} +\spadpaste{x - y \free{x y}} +\spadpaste{x * y \free{x y}} +Axiom can factor integers, but numbers with small prime factors +\spadpaste{factor(x) \free{x}} +will factor more rapidly than numbers with large prime factors. +\spadpaste{factor(y) \free{y}} +\horizontalline +Additional Topics +\beginmenu + +\menulink{General Info}{IntegerXmpPage} \tab{16} +General information and examples of integers. + +\menulink{Factorization}{ugxIntegerPrimesPage} \tab{16} +Primes and factorization. + +\menulink{Functions}{IntegerNumberTheoryFunctionsXmpPage} \tab{16} +Number theoretic functions. + +\menulink{Examples}{IntegerExamplePage} \tab{16} +Examples from number theory. + +\menulink{Problems}{IntegerProblemPage} \tab{16} +Problems from number theory. + +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Integer Examples} +\label{IntegerExamplePage} +\begin{itemize} +\item IntegerExampleProofPage \ref{IntegerExampleProofPage} on +page~pageref{IntegerExampleProofPage} +\end{itemize} +\index{pages!IntegerExamplePage!numbers.ht} +\index{numbers.ht!pages!IntegerExamplePage} +\index{IntegerExamplePage!numbers.ht!pages} +<>= +\begin{page}{IntegerExamplePage}{Integer Examples} +\beginscroll +One can show that if an integer of the form 2**k + 1 is prime, then +k must be a power of 2. +\downlink{Proof}{IntegerExampleProofPage} +\par +Pierre Fermat conjectured that every integer of the forn 2**(2**n) + 1 +is prime. +Let's look for a counterexample. +First define a function: +\spadpaste{f: NNI -> INT \bound{f1}} +\spadpaste{f(n) == 2**(2**n) + 1 \bound{f} \free{f1}} +Now try commands like: +\spadpaste{factor f(1) \free{f}} +\spadpaste{factor f(2) \free{f}} +until you find an integer of this form which is composite. +You can also try the following command: +\spadpaste{for n in 1..6 repeat output factor f(n) \free{f}} +Obviously, Fermat didn't have access to Axiom! +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Integer Example Proof} +\label{IntegerExampleProofPage} +\index{pages!IntegerExampleProofPage!numbers.ht} +\index{numbers.ht!pages!IntegerExampleProofPage} +\index{IntegerExampleProofPage!numbers.ht!pages} +<>= +\begin{page}{IntegerExampleProofPage}{Integer Example Proof} +\beginscroll +Proposition. If 2**k + 1 is prime, then k is a power of 2. +\newline +Proof. Suppose that k = m * n with m > 1 odd. Then +% +\centerline{2**n = -1 (mod (2**n + 1))} +\centerline{2**(n * m) = (-1)**m = -1 (mod (2**n + 1))} +\centerline{2**k + 1 = 0 (mod (2**n + 1))} +% +Therefore, 2**k + 1 is divisible by 2**n + 1. +Now 1 < 2**n + 1 and since m > 1, 2**n + 1 < 2**k + 1. +Hence, 2**k + 1 has a non-trivial factor. +\newline +QED +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Integer Problems} +\label{IntegerProblemPage} +\begin{itemize} +\item IntegerProblemProofPage \ref{IntegerProblemProofPage} on +page~pageref{IntegerProblemProofPage} +\item IntegerProblemAnswerPage1 \ref{IntegerProblemAnswerPage1} on +page~pageref{IntegerProblemAnswerPage1} +\item IntegerProblemAnswerPage2 \ref{IntegerProblemAnswerPage2} on +page~pageref{IntegerProblemAnswerPage2} +\end{itemize} +\index{pages!IntegerProblemPage!numbers.ht} +\index{numbers.ht!pages!IntegerProblemPage} +\index{IntegerProblemPage!numbers.ht!pages} +<>= +\begin{page}{IntegerProblemPage}{Integer Problems} +\beginscroll +One can show that if an integer of the form 2**k - 1 is prime, then +k must be prime. +\downlink{Proof}{IntegerProblemProofPage} +\newline +Problem \#1: Find the smallest prime p such that \spad{2**p - 1} is not prime. +\downlink{Answer}{IntegerProblemAnswerPage1} +\newline +Problem \#2: Find the smallest positive integer \spad{n} such that +\spad{n**2 - n + 41} isn't prime. +\downlink{Answer}{IntegerProblemAnswerPage2} +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Integer Problem Proof} +\label{IntegerProblemProofPage} +\index{pages!IntegerProblemProofPage!numbers.ht} +\index{numbers.ht!pages!IntegerProblemProofPage} +\index{IntegerProblemProofPage!numbers.ht!pages} +<>= +\begin{page}{IntegerProblemProofPage}{Integer Problem Proof} +\beginscroll +Proposition. If \spad{2**k - 1} is prime, then \spad{k} is prime. +\newline +Proof. Suppose that k = m * n is a non-trivial factorization. +Then +% +\centerline{2**m = 1 (mod (2**m - 1))} +\centerline{2**(m * n) = 1 (mod (2**m - 1))} +\newline +and 2**m - 1 is a non-trivial factor of 2**k - 1. +\newline +QED +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Solution to Problem \#1} +\label{IntegerProblemAnswerPage1} +\index{pages!IntegerProblemAnswerPage1!numbers.ht} +\index{numbers.ht!pages!IntegerProblemAnswerPage1} +\index{IntegerProblemAnswerPage1!numbers.ht!pages} +<>= +\begin{page}{IntegerProblemAnswerPage1}{Solution to Problem \#1} +\beginscroll +Problem \#1: Find the smallest prime p such that \spad{2**p - 1} +is not prime. +\newline +First, define a function: +\spadpaste{f: NNI -> INT \bound{f1}} +\spadpaste{f(n) == 2**n - 1 \bound{f} \free{f1}} +You can try factoring f(p) as p ranges through the set of primes. +For example, +\spadpaste{factor f(7) \free{f}} +This gets tedious after a while, so let's use Axiom's stream +facility. (A stream is essentially an infinite sequence.) +\newline +First, we create a stream consisting of the positive integers: +\spadpaste{ints := [n for n in 1..] \bound{ints}} +Now, we create a stream consisting of the primes: +\spadpaste{primes := [x for x in ints | prime? x] \bound{primes} \free{ints}} +Here's the 25th prime: +\spadpaste{primes.25 \free{primes}} +Next, create the stream of numbers of the form 2**p - 1 with p prime: +\spadpaste{numbers := [f(n) for n in primes] \bound{numbers} \free{primes f}} +Finally, form +the stream of factorizations of the elements of \spad{numbers}: +\spadpaste{factors := [factor n for n in numbers] \bound{factors} +\free{numbers}} +You can see that the fifth number in the stream (2047 = 23*89) +is the first one that has a non-trivial factorization. +Since 2**11 = 2048, the solution to the problem is 11. +\newline +Here's another way to see that 2047 is the first number in the stream that +is composite: +\spadpaste{nums := [x for x in numbers | not prime? x] \bound{nums} +\free{numbers}} +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Solution to Problem \#2} +\label{IntegerProblemAnswerPage2} +\index{pages!IntegerProblemAnswerPage2!numbers.ht} +\index{numbers.ht!pages!IntegerProblemAnswerPage2} +\index{IntegerProblemAnswerPage2!numbers.ht!pages} +<>= +\begin{page}{IntegerProblemAnswerPage2}{Solution to Problem \#2} +\beginscroll +Problem \#2: Find the smallest positive integer n such that +\spad{n**2 - n + 41} is not prime. +\newline +When n = 41, n**2 - n + 41 = 41**2, which certainly isn't prime. +Let's see if any smaller integer works. +Here are the first 40 values: +\spadpaste{numbers := [n**2 - n + 41 for n in 0..40] \bound{numbers}} +Now have Axiom factor the numbers on this list: +\spadpaste{[factor n for n in numbers] \free{numbers}} +You can see that 41 is the smallest positive integer n such that +n**n - n + 41 is not prime. +\endscroll +\autobuttons +\end{page} + +@ +\section{oct.ht} +<>= +\newcommand{\OctonionXmpTitle}{Octonion} +\newcommand{\OctonionXmpNumber}{9.56} + +@ +\subsection{Octonion} +\label{OctonionXmpPage} +See QuaternionXmpPage \ref{QuaternionXmpPage} on +page~\pageref{QuaternionXmpPage} +\index{pages!OctonionXmpPage!oct.ht} +\index{oct.ht!pages!OctonionXmpPage} +\index{OctonionXmpPage!oct.ht!pages} +<>= +\begin{page}{OctonionXmpPage}{Octonion} +\beginscroll + +The Octonions, also called the Cayley-Dixon algebra, defined over a +commutative ring are an eight-dimensional non-associative algebra. +Their construction from quaternions is similar to the construction +of quaternions from complex numbers +(see \downlink{`Quaternion'}{QuaternionXmpPage}\ignore{Quaternion}). +% +\xtc{ +As \spadtype{Octonion} creates an eight-dimensional algebra, you have to +give eight components to construct an octonion. +}{ +\spadpaste{oci1 := octon(1,2,3,4,5,6,7,8) \bound{oci1}} +} +\xtc{ +}{ +\spadpaste{oci2 := octon(7,2,3,-4,5,6,-7,0) \bound{oci2}} +} +% +% +\xtc{ +Or you can use two quaternions to create an octonion. +}{ +\spadpaste{oci3 := octon(quatern(-7,-12,3,-10), quatern(5,6,9,0)) \bound{oci3}} +} +% +% +\xtc{ +You can easily demonstrate the non-associativity of multiplication. +}{ +\spadpaste{(oci1 * oci2) * oci3 - oci1 * (oci2 * oci3) \free{oci1 oci2 oci3}} +} +% +As with the quaternions, we have a real part, the imaginary +parts \spad{i}, \spad{j}, \spad{k}, and four +additional imaginary parts \spad{E}, \spad{I}, \spad{J} and \spad{K}. +These parts correspond to the canonical basis +\spad{(1,i,j,k,E,I,J,K)}. +\xtc{ +For each basis element there is a component operation to extract +the coefficient of the basis element for a given octonion. +%\spadfunFrom{real}{Octonion}, +%\spadfunFrom{imagi}{Octonion}, +%\spadfunFrom{imagj}{Octonion}, +%\spadfunFrom{imagk}{Octonion}, +%\spadfunFrom{imagE}{Octonion}, +%\spadfunFrom{imagI}{Octonion}, +%\spadfunFrom{imagJ}{Octonion}, and +%\spadfunFrom{imagK}{Octonion}. +}{ +\spadpaste{[real oci1, imagi oci1, imagj oci1, imagk oci1, imagE oci1, imagI oci1, imagJ oci1, imagK oci1] \free{oci1}} +} +% +A basis with respect to the +quaternions is given by \spad{(1,E)}. +However, you might ask, what then are the commuting rules? +To answer this, we create some generic elements. +% +\xtc{ +We do this in Axiom +by simply changing the ground ring from \spadtype{Integer} to +\spadtype{Polynomial Integer}. +}{ +\spadpaste{q : Quaternion Polynomial Integer := quatern(q1, qi, qj, qk) \bound{q}} +} +\xtc{ +}{ +\spadpaste{E : Octonion Polynomial Integer:= octon(0,0,0,0,1,0,0,0) \bound{E}} +} +% +\xtc{ +Note that quaternions are automatically converted to octonions in the +obvious way. +}{ +\spadpaste{q * E \free{q E}} +} +\xtc{ +}{ +\spadpaste{E * q \free{E q}} +} +\xtc{ +}{ +\spadpaste{q * 1\$(Octonion Polynomial Integer) \free{q}} +} +\xtc{ +}{ +\spadpaste{1\$(Octonion Polynomial Integer) * q \free{q}} +} +\xtc{ +Finally, we check that the \spadfunFrom{norm}{Octonion}, +defined as the sum of the squares of the coefficients, +is a multiplicative map. +}{ +\spadpaste{o : Octonion Polynomial Integer := octon(o1, oi, oj, ok, oE, oI, oJ, oK) \bound{o}} +} +\xtc{ +}{ +\spadpaste{norm o \free{o}} +} +\xtc{ +}{ +\spadpaste{p : Octonion Polynomial Integer := octon(p1, pi, pj, pk, pE, pI, pJ, pK) \bound{p}} +} +\xtc{ +Since the result is \spad{0}, the norm is multiplicative. +}{ +\spadpaste{norm(o*p)-norm(p)*norm(p)\free{o p} } +} +\showBlurb{Octonion} +\endscroll +\autobuttons +\end{page} + +@ +\section{odpol.ht} +<>= +\newcommand{\OrderlyDifferentialPolynomialXmpTitle} +{OrderlyDifferentialPolynomial} +\newcommand{\OrderlyDifferentialPolynomialXmpNumber}{9.60} + +@ +\subsection{OrderlyDifferentialPolynomial} +\label{OrderlyDifferentialPolynomialXmpPage} +\index{pages!OrderlyDifferentialPolynomialXmpPage!odpol.ht} +\index{odpol.ht!pages!OrderlyDifferentialPolynomialXmpPage} +\index{OrderlyDifferentialPolynomialXmpPage!odpol.ht!pages} +<>= +\begin{page}{OrderlyDifferentialPolynomialXmpPage} +{OrderlyDifferentialPolynomial} +\beginscroll + +Many systems of differential equations may be transformed to equivalent +systems of ordinary differential equations where the equations are +expressed polynomially in terms of the unknown functions. +In Axiom, the domain constructors +\spadtype{OrderlyDifferentialPolynomial} +(abbreviated \spadtype{ODPOL}) and +\spadtype{SequentialDifferentialPolynomial} (abbreviation +\spadtype{SDPOL}) implement two domains of ordinary differential +polynomials over any differential ring. +In the simplest case, this differential ring is usually either the ring of +integers, or the field of rational numbers. +However, Axiom can handle ordinary differential polynomials over a +field of rational functions in a single indeterminate. + +The two domains \spadtype{ODPOL} and \spadtype{SDPOL} are almost +identical, the only difference being the choice of a different ranking, +which is an ordering of the derivatives of the indeterminates. +The first domain uses an orderly ranking, that is, derivatives of higher +order are ranked higher, and derivatives of the same order are ranked +alphabetically. +The second domain uses a sequential ranking, where derivatives are ordered +first alphabetically by the differential indeterminates, and then by +order. +A more general domain constructor, +\spadtype{DifferentialSparseMultivariatePolynomial} (abbreviation +\spadtype{DSMP}) allows both a user-provided list of differential +indeterminates as well as a user-defined ranking. +We shall illustrate \spadtype{ODPOL(FRAC INT)}, which constructs a domain +of ordinary differential polynomials in an arbitrary number of +differential indeterminates with rational numbers as coefficients. +\xtc{ +}{ +\spadpaste{dpol:= ODPOL(FRAC INT) \bound{dpol}} +} + +\xtc{ +A differential indeterminate \spad{w} may be viewed as an infinite +sequence of algebraic indeterminates, which are the derivatives of +\spad{w}. +To facilitate referencing these, Axiom provides the operation +\spadfunFrom{makeVariable}{OrderlyDifferentialPolynomial} to convert an +element of type \spadtype{Symbol} to a map from the natural numbers to the +differential polynomial ring. +}{ +\spadpaste{w := makeVariable('w)\$dpol \free{dpol}\bound{w}} +} +\xtc{ +}{ +\spadpaste{z := makeVariable('z)\$dpol \free{dpol}\bound{z}} +} +\xtc{ +The fifth derivative of \spad{w} can be obtained by applying the map +\spad{w} to the number \spad{5.} +Note that the order of differentiation is given as a subscript (except +when the order is 0). +}{ +\spadpaste{w.5 \free{w}} +} +\xtc{ +}{ +\spadpaste{w 0 \free{w}} +} +\xtc{ +The first five derivatives of \spad{z} can be generated by a list. +}{ +\spadpaste{[z.i for i in 1..5] \free{z}} +} +\xtc{ +The usual arithmetic can be used to form a differential polynomial from +the derivatives. +}{ +\spadpaste{f:= w.4 - w.1 * w.1 * z.3 \free{w}\free{z}\bound{f}} +} +\xtc{ +}{ +\spadpaste{g:=(z.1)**3 * (z.2)**2 - w.2 \free{z}\free{w}\bound{g}} +} +\xtc{ +The operation \spadfunFrom{D}{OrderlyDifferentialPolynomial} +computes the derivative of any differential polynomial. +}{ +\spadpaste{D(f) \free{f}} +} +\xtc{ +The same operation can compute higher derivatives, like the +fourth derivative. +}{ +\spadpaste{D(f,4) \free{f}} +} +\xtc{ +The operation \spadfunFrom{makeVariable}{OrderlyDifferentialPolynomial} +creates a map to facilitate referencing the derivatives of \spad{f}, +similar to the map \spad{w}. +}{ +\spadpaste{df:=makeVariable(f)\$dpol \free{f}\bound{df}} +} +\xtc{ +The fourth derivative of f may be referenced easily. +}{ +\spadpaste{df.4 \free{df}} +} +\xtc{ +The operation \spadfunFrom{order}{OrderlyDifferentialPolynomial} +returns the order of a differential polynomial, or the order +in a specified differential indeterminate. +}{ +\spadpaste{order(g) \free{g}} +} +\xtc{ +}{ +\spadpaste{order(g, 'w) \free{g}} +} +\xtc{ +The operation +\spadfunFrom{differentialVariables}{OrderlyDifferentialPolynomial} returns +a list of differential indeterminates occurring in a differential +polynomial. +}{ +\spadpaste{differentialVariables(g) \free{g}} +} +\xtc{ +The operation \spadfunFrom{degree}{OrderlyDifferentialPolynomial} returns +the degree, or the degree in the differential indeterminate specified. +}{ +\spadpaste{degree(g) \free{g}} +} +\xtc{ +}{ +\spadpaste{degree(g, 'w) \free{g}} +} +\xtc{ +The operation \spadfunFrom{weights}{OrderlyDifferentialPolynomial} returns +a list of weights of differential monomials appearing in differential +polynomial, or a list of weights in a specified differential +indeterminate. +}{ +\spadpaste{weights(g) \free{g}} +} +\xtc{ +}{ +\spadpaste{weights(g,'w) \free{g}} +} +\xtc{ +The operation \spadfunFrom{weight}{OrderlyDifferentialPolynomial} returns +the maximum weight of all differential monomials appearing in the +differential polynomial. +}{ +\spadpaste{weight(g) \free{g}} +} +\xtc{ +A differential polynomial is {\em isobaric} if the weights of all +differential monomials appearing in it are equal. +}{ +\spadpaste{isobaric?(g) \free{g}} +} +\xtc{ +To substitute {\em differentially}, use +\spadfunFrom{eval}{OrderlyDifferentialPolynomial}. +Note that we must coerce \spad{'w} to \spadtype{Symbol}, since in +\spadtype{ODPOL}, differential indeterminates belong to the domain +\spadtype{Symbol}. +Compare this result to the next, which substitutes {\em algebraically} (no +substitution is done since \spad{w.0} does not appear in \spad{g}). +}{ +\spadpaste{eval(g,['w::Symbol],[f]) \free{f}\free{g}} +} +\xtc{ +}{ +\spadpaste{eval(g,variables(w.0),[f]) \free{f}\free{g}} +} +\xtc{ +Since \spadtype{OrderlyDifferentialPolynomial} belongs to +\spadtype{PolynomialCategory}, all the operations defined in the latter +category, or in packages for the latter category, are available. +}{ +\spadpaste{monomials(g) \free{g}} +} +\xtc{ +}{ +\spadpaste{variables(g) \free{g}} +} +\xtc{ +}{ +\spadpaste{gcd(f,g) \free{f}\free{g}} +} +\xtc{ +}{ +\spadpaste{groebner([f,g]) \free{f}\free{g}} +} +\xtc{ +The next three operations are essential for elimination procedures in +differential polynomial rings. +The operation \spadfunFrom{leader}{OrderlyDifferentialPolynomial} returns +the leader of a differential polynomial, which is the highest ranked +derivative of the differential indeterminates that occurs. +}{ +\spadpaste{lg:=leader(g) \free{g}\bound{lg}} +} +\xtc{ +The operation \spadfunFrom{separant}{OrderlyDifferentialPolynomial} returns +the separant of a differential polynomial, which is the partial derivative +with respect to the leader. +}{ +\spadpaste{sg:=separant(g) \free{g}\bound{sg}} +} +\xtc{ +The operation \spadfunFrom{initial}{OrderlyDifferentialPolynomial} returns +the initial, which is the leading coefficient when the given differential +polynomial is expressed as a polynomial in the leader. +}{ +\spadpaste{ig:=initial(g) \free{g}\bound{ig}} +} +\xtc{ +Using these three operations, it is possible to reduce \spad{f} modulo the +differential ideal generated by \spad{g}. +The general scheme is to first reduce the order, then reduce the degree in +the leader. +First, eliminate \spad{z.3} using the derivative of \spad{g}. +}{ +\spadpaste{g1 := D g \free{g}\bound{g1}} +} +\xtc{ +Find its leader. +}{ +\spadpaste{lg1:= leader g1 \free{g1}\bound{lg1}} +} +\xtc{ +Differentiate \spad{f} partially with respect to this leader. +}{ +\spadpaste{pdf:=D(f, lg1) \free{f}\free{lg1}\bound{pdf}} +} +\xtc{ +Compute the partial remainder of \spad{f} with respect to \spad{g}. +}{ +\spadpaste{prf:=sg * f- pdf * g1 \free{f}\free{sg}\free{pdf}\free{g1}\bound{prf}} +} +\xtc{ +Note that high powers of \spad{lg} still appear in \spad{prf}. +Compute the leading coefficient of \spad{prf} +as a polynomial in the leader of \spad{g}. +}{ +\spadpaste{lcf:=leadingCoefficient univariate(prf, lg) \free{prf}\free{lg}\bound{lcf}} +} +\xtc{ +Finally, continue eliminating the high powers of \spad{lg} appearing in +\spad{prf} to obtain the (pseudo) remainder of \spad{f} modulo \spad{g} +and its derivatives. +}{ +\spadpaste{ig * prf - lcf * g * lg \free{ig}\free{prf}\free{lcf}\free{g}\free{lg}} +} +\showBlurb{OrderlyDifferentialPolyomial} +\showBlurb{SequentialDifferentialPolynomial} +\endscroll +\autobuttons +\end{page} + +@ +\section{op.ht} +<>= +\newcommand{\OperatorXmpTitle}{Operator} +\newcommand{\OperatorXmpNumber}{9.58} + +@ +\subsection{Operator} +\label{OperatorXmpPage} +\index{pages!OperatorXmpPage!alist.ht} +\index{alist.ht!pages!OperatorXmpPage} +\index{OperatorXmpPage!alist.ht!pages} +<>= +\begin{page}{OperatorXmpPage}{Operator} +\beginscroll +Given any ring \spad{R}, the ring of the \spadtype{Integer}-linear operators +over \spad{R} is called \spadtype{Operator(R)}. +To create an operator over \spad{R}, first create a basic operator using the +operation \spadfun{operator}, and then convert it to \spadtype{Operator(R)} +for the \spad{R} you want. +% +\xtc{ +We choose \spad{R} to be the two by two matrices over the integers. +}{ +\spadpaste{R := SQMATRIX(2, INT)\bound{r}} +} +\xtc{ +Create the operator \spad{tilde} on \spad{R}. +}{ +\spadpaste{t := operator("tilde") :: OP(R) \free{r}\bound{t}} +} +% +Since \spadtype{Operator} is unexposed we must either package-call operations +from it, or expose it explicitly. For convenience we will do the latter. +% +\noOutputXtc{ +Expose \spad{Operator}. +}{ +\spadpaste{)set expose add constructor Operator \free{t}\bound{expose}} +} +% +To attach an evaluation function (from \spad{R} to \spad{R}) to an +operator over \spad{R}, use \spad{evaluate(op, f)} where \spad{op} +is an operator over \spad{R} and \spad{f} is a function \spad{R -> +R}. +This needs to be done only once when the operator is defined. +Note that \spad{f} must be \spadtype{Integer}-linear (that is, +\spad{f(ax+y) = a f(x) + f(y)} for any integer \spad{a}, and any +\spad{x} and \spad{y} in \spad{R}). +% +\xtc{ +We now attach the transpose map to the above operator \spad{t}. +}{ +\spadpaste{evaluate(t, m +-> transpose m)\free{expose}\free{t}\bound{evt}} +} +% +Operators can be manipulated formally as in any ring: \spadop{+} is the +pointwise addition and \spadop{*} is composition. +Any element \spad{x} of \spad{R} can be converted to an operator +\subscriptText{\tt op}{\tt x} +over \spad{R}, and the evaluation function of +\subscriptText{\tt op}{\tt x} +is left-multiplication by \spad{x}. +% +\xtc{ +Multiplying on the +left by this matrix swaps the two rows. +}{ +\spadpaste{s : R := matrix [[0, 1], [1, 0]]\bound{s}} +} +% +\xtc{ +Can you guess what is the action of the following operator? +}{ +\spadpaste{rho := t * s\free{evt s}\bound{rho}} +} +% +% +\xtc{ +Hint: applying \spad{rho} four times gives the identity, so +\spad{rho**4-1} should return 0 when applied to any two by two matrix. +}{ +\spadpaste{z := rho**4 - 1\free{rho}\bound{z}} +} +% +% +\xtc{ +Now check with this matrix. +}{ +\spadpaste{m:R := matrix [[1, 2], [3, 4]]\bound{m}} +} +\xtc{ +}{ +\spadpaste{z m\free{z m}} +} +% +% +\xtc{ +As you have probably guessed by now, \spad{rho} acts on matrices +by rotating the elements clockwise. +}{ +\spadpaste{rho m\free{rho m}} +} +\xtc{ +}{ +\spadpaste{rho rho m\free{rho m}} +} +\xtc{ +}{ +\spadpaste{(rho**3) m\free{rho m}} +} +% +% +\xtc{ +Do the swapping of rows and transposition commute? +We can check by computing their bracket. +}{ +\spadpaste{b := t * s - s * t\free{s evt}\bound{b}} +} +% +% +\xtc{ +Now apply it to \spad{m}. +}{ +\spadpaste{b m \free{b m}} +} +% + +Next we demonstrate how to define a differential operator +on a polynomial ring. +\xtc{ +This is the recursive definition of the \spad{n}-th Legendre polynomial. +}{ +\begin{spadsrc}[\bound{l}] +L n == + n = 0 => 1 + n = 1 => x + (2*n-1)/n * x * L(n-1) - (n-1)/n * L(n-2) +\end{spadsrc} +} +\xtc{ +Create the differential operator \texht{$d \over {dx}$}{\spad{d/dx}} on +polynomials in \spad{x} over the rational numbers. +}{ +\spadpaste{dx := operator("D") :: OP(POLY FRAC INT) \bound{dx}} +} +\xtc{ +Now attach the map to it. +}{ +\spadpaste{evaluate(dx, p +-> D(p, 'x)) \free{dx}\bound{edx}} +} +\xtc{ +This is the differential equation satisfied by the \spad{n}-th +Legendre polynomial. +}{ +\spadpaste{E n == (1 - x**2) * dx**2 - 2 * x * dx + n*(n+1) \free{edx}\bound{E}} +} +\xtc{ +Now we verify this for \spad{n = 15}. +Here is the polynomial. +}{ +\spadpaste{L 15 \free{L}} +} +\xtc{ +Here is the operator. +}{ +\spadpaste{E 15 \free{E}} +} +\xtc{ +Here is the evaluation. +}{ +\spadpaste{(E 15)(L 15) \free{L E}} +} +\endscroll +\autobuttons +\end{page} + +@ +\section{ovar.ht} +<>= +\newcommand{\OrderedVariableListXmpTitle}{OrderedVariableList} +\newcommand{\OrderedVariableListXmpNumber}{9.59} + +@ +\subsection{OrderedVariableList} +\label{OrderedVariableListXmpPage} +\index{pages!OrderedVariableListXmpPage!ovar.ht} +\index{ovar.ht!pages!OrderedVariableListXmpPage} +\index{OrderedVariableListXmpPage!ovar.ht!pages} +<>= +\begin{page}{OrderedVariableListXmpPage}{OrderedVariableList} +\beginscroll + +The domain \spadtype{OrderedVariableList} provides symbols +which are restricted to a particular list and have a definite +ordering. Those two features are specified by a \spadtype{List Symbol} +object that is the argument to the domain. +\xtc{ +This is a sample ordering of three symbols. +}{ +\spadpaste{ls:List Symbol:=['x,'a,'z] \bound{ls}} +} +\xtc{ +Let's build the domain +}{ +\spadpaste{Z:=OVAR ls \bound{Z} \free{ls}} +} +\xtc{ +How many variables does it have? +}{ +\spadpaste{size()$Z \free{Z}} +} +\xtc{ +They are (in the imposed order) +}{ +\spadpaste{lv:=[index(i::PI)$Z for i in 1..size()$Z] \bound{lv}\free{Z}} +} +\xtc{ +Check that the ordering is right +}{ +\spadpaste{sorted?(>,lv) \free{lv}} +} +\endscroll +\autobuttons +\end{page} + +@ +\section{perman.ht} +<>= +\newcommand{\PermanentXmpTitle}{Permanent} +\newcommand{\PermanentXmpNumber}{9.62} + +@ +\subsection{Permanent} +\label{PermanentXmpPage} +\index{pages!PermanentXmpPage!perman.ht} +\index{perman.ht!pages!PermanentXmpPage} +\index{PermanentXmpPage!perman.ht!pages} +<>= +\begin{page}{PermanentXmpPage}{Permanent} +\beginscroll +The package \spadtype{Permanent} provides the function +\spadfunFrom{permanent}{Permanent} for square matrices. +The \spadfunFrom{permanent}{Permanent} of a square matrix can be computed +in the same way as the determinant by expansion of minors except that for +the permanent the sign for each element is \spad{1}, rather than being +\spad{1} if the row plus column indices is positive and \spad{-1} +otherwise. +This function is much more difficult to compute efficiently than the +\spadfunFrom{determinant}{Matrix}. +An example of the use of \spadfunFrom{permanent}{Permanent} is the +calculation of the \eth{\spad{n}} derangement number, defined to be the number +of different possibilities for \spad{n} couples to dance but never with +their own spouse. +\xtc{ +Consider an \spad{n} by \spad{n} matrix with entries +\spad{0} on the diagonal and +\spad{1} elsewhere. +Think of the rows as one-half of each couple (for example, the males) and the +columns the other half. +The permanent of such a matrix gives the desired derangement number. +}{ +\begin{spadsrc}[\bound{kn}] +kn n == + r : MATRIX INT := new(n,n,1) + for i in 1..n repeat + r.i.i := 0 + r +\end{spadsrc} +} +\xtc{ +Here are some derangement numbers, which you see grow quite fast. +}{ +\spadpaste{permanent(kn(5) :: SQMATRIX(5,INT)) \free{kn}} +} +\xtc{ +}{ +\spadpaste{[permanent(kn(n) :: SQMATRIX(n,INT)) for n in 1..13] \free{kn}} +} +\endscroll +\autobuttons +\end{page} + +@ +\section{pfr.ht} +<>= +\newcommand{\PartialFractionXmpTitle}{PartialFraction} +\newcommand{\PartialFractionXmpNumber}{9.61} + +@ +\subsection{PartialFraction} +\label{PartialFractionXmpPage} +See FullPartialFractionExpansionXmpPage +\ref{FullPartialFractionExpansionXmpPage} on +page~\pageref{FullPartialFractionExpansionXmpPage} +\index{pages!PartialFractionXmpPage!pfr.ht} +\index{pfr.ht!pages!PartialFractionXmpPage} +\index{PartialFractionXmpPage!pfr.ht!pages} +<>= +\begin{page}{PartialFractionXmpPage}{PartialFraction} +\beginscroll + +A {\it partial fraction} is a decomposition of a quotient into +a sum +of quotients where the denominators of the summands are powers of +primes.\footnote{Most people first encounter partial fractions when they +are learning integral calculus. +For a technical discussion of partial fractions, see, for example, Lang's {\it +Algebra.}} For example, the rational number \spad{1/6} is decomposed into +\spad{1/2 -1/3}. +You can compute partial fractions of quotients of objects from domains +belonging to the category \spadtype{EuclideanDomain}. +For example, \spadtype{Integer}, \spadtype{Complex Integer}, and +\spadtype{UnivariatePolynomial(x, Fraction Integer)} all belong to +\spadtype{EuclideanDomain}. +In the examples following, we demonstrate how to decompose quotients of +each of these kinds of object into partial fractions. +Issue the system command +\spadcmd{)show PartialFraction} +to display the full list of operations defined by \spadtype{PartialFraction}. + +It is necessary that we know how to factor the denominator when we want to +compute a partial fraction. +Although the interpreter can often do this automatically, it may be +necessary for you to include a call to \spadfun{factor}. +In these examples, it is not necessary to factor the +denominators explicitly. +% +\xtc{ +The main operation for computing partial fractions is called +\spadfunFrom{partialFraction}{PartialFraction} and we use this to +compute a decomposition of \spad{1 / 10!}. +The first argument to \spadfunFrom{partialFraction}{PartialFraction} is +the numerator of the quotient and the second argument is the factored +denominator. +}{ +\spadpaste{partialFraction(1,factorial 10) \bound{prev1}} +} +\xtc{ +Since the denominators are powers of primes, it may be possible +to expand the numerators further with respect to those primes. Use the +operation \spadfunFrom{padicFraction}{PartialFraction} to do this. +}{ +\spadpaste{f := padicFraction(\%) \free{prev1}\bound{f}} +} +% +% +\xtc{ +The operation \spadfunFrom{compactFraction}{PartialFraction} returns an +expanded fraction into the usual form. +The compacted version is used internally for computational efficiency. +}{ +\spadpaste{compactFraction(f) \free{f}} +} +% +\xtc{ +You can add, subtract, multiply +and divide partial fractions. In addition, you can extract the parts +of the decomposition. +\spadfunFrom{numberOfFractionalTerms}{PartialFraction} computes +the number of terms in the fractional part. +This does not include the whole part of the fraction, +which you get by calling \spadfunFrom{wholePart}{PartialFraction}. +In this example, the whole part is just \spad{0}. +}{ +\spadpaste{numberOfFractionalTerms(f) \free{f}} +} +\xtc{ +The operation +\spadfunFrom{nthFractionalTerm}{PartialFraction} returns the individual terms in the +decomposition. +Notice that the object returned is a partial fraction itself. +\spadfunFrom{firstNumer}{PartialFraction} and +\spadfunFrom{firstDenom}{PartialFraction} extract the numerator and +denominator of the first term of the fraction. +}{ +\spadpaste{nthFractionalTerm(f,3) \free{f}} +} +% + +% +\xtc{ +Given two gaussian integers (see \downlink{`Complex'}{ComplexXmpPage}\ignore{Complex}), you can +decompose their quotient into a partial fraction. +}{ +\spadpaste{partialFraction(1,- 13 + 14 * \%i) \bound{prev2}} +} +% +\xtc{ +To convert back to a quotient, simply use a conversion. +}{ +\spadpaste{\% :: Fraction Complex Integer \free{prev2}} +} + +To conclude this section, we compute the decomposition of +\texht{\narrowDisplay{1 \over {{(x + 1)}{(x + 2)}^2{(x + 3)}^3{(x + 4)}^4}}}{ +\begin{verbatim} + 1 + ------------------------------- + 2 3 4 + (x + 1)(x + 2) (x + 3) (x + 4) +\end{verbatim} +} +The polynomials in this object have type +\spadtype{UnivariatePolynomial(x, Fraction Integer)}. +% +\xtc{ +We use the \spadfunFrom{primeFactor}{Factored} operation (see +\downlink{`Factored'}{FactoredXmpPage}\ignore{Factored}) to create the denominator in factored form directly. +}{ +\spadpaste{u : FR UP(x, FRAC INT) := reduce(*,[primeFactor(x+i,i) for i in 1..4]) \bound{u}} +} +% +% +\xtc{ +These are the compact and expanded partial fractions for the quotient. +}{ +\spadpaste{partialFraction(1,u) \free{u}\bound{prev3}} +} +\xtc{ +}{ +\spadpaste{padicFraction \% \free{prev3}} +} + +All see \downlink{`FullPartialFractionExpansion'}{FullPartialFractionExpansionXmpPage}\ignore{FullPartialFractionExpansion} for examples of +factor-free conversion of quotients to full partial fractions. +\endscroll +\autobuttons +\end{page} + +@ +\section{poly.ht} +\subsection{Polynomials} +\label{PolynomialPage} +\includegraphics[scale=.5]{ps/v71polynomialpage.eps} +\index{images!polynomialpage} + +Called from ``Topics'' (TopicPage) \ref{TopicPage} on page~\pageref{TopicPage} +\begin{itemize} +\item ``Basic Functions'' (PolynomialBasicPage) \ref{PolynomialBasicPage} on +page~\pageref{PolynomialBasicPage} +\item ``Substitutions'' (PolynomialSubstitutionPage) +\ref{PolynomialSubstitutionPage} on +page~\pageref{PolynomialSubstitutionPage} +\item ``Factorizations'' (ugProblemFactorPage) \ref{ugProblemFactorPage} on +page~\pageref{ugProblemFactorPage} +\item ``GCDs and Friends'' (PolynomialGCDPage) \ref{PolynomialGCDPage} on +page~\pageref{PolynomialGCDPage} +\item ``Roots'' (PolynomialRootPage) \ref{PolynomialRootPage} on +page~\pageref{PolynomialRootPage} +\item ``Specific Types'' (PolynomialTypesPage) \ref{PolynomialTypesPage} on +page~\pageref{PolynomialTypesPage} +\end{itemize} +\index{pages!PolynomialPage!poly.ht} +\index{poly.ht!pages!PolynomialPage} +\index{PolynomialPage!poly.ht!pages} +<>= +\begin{page}{PolynomialPage}{Polynomials} +\beginscroll +\beginmenu +\menulink{Basic Functions}{PolynomialBasicPage} \tab{18} +Create and manipulate polynomials. +\menulink{Substitutions}{PolynomialSubstitutionPage} \tab{18} +Evaluate polynomials. +\menulink{Factorization}{ugProblemFactorPage} \tab{18} +Factor in different contexts. +\menulink{GCDs and Friends}{PolynomialGCDPage} \tab{18} +Greatest common divisors etc.. +\menulink{Roots}{PolynomialRootPage}\tab{18} +Work with and solve for roots. +\menulink{Specific Types}{PolynomialTypesPage}\tab{18} +More specific information. +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +\subsection{The Specific Polynomial Types} +\label{PolynomialTypesPage} +\index{pages!PolynomialTypesPage!poly.ht} +\index{poly.ht!pages!PolynomialTypesPage} +\index{PolynomialTypesPage!poly.ht!pages} +<>= +\begin{page}{PolynomialTypesPage}{The Specific Polynomial Types} +\beginscroll +\beginmenu +\menulink{Polynomial}{PolynomialXmpPage} \newline +The general type. +\menulink{UnivariatePolynomial}{UnivariatePolynomialXmpPage} \newline +One variable polynomials. +\menulink{MultivariatePolynomial}{MultivariatePolynomialXmpPage} \newline +Multiple variable polynomials, recursive structure. +\menulink{DistributedMultivariatePolynomial}{DistributedMultivariatePolynomialXmpPage} +\newline +Multiple variable polynomials, non-recursive structure. +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Basic Operations On Polynomials} +\label{PolynomialBasicPage} +\index{pages!PolynomialBasicPage!poly.ht} +\index{poly.ht!pages!PolynomialBasicPage} +\index{PolynomialBasicPage!poly.ht!pages} +<>= +\begin{page}{PolynomialBasicPage}{Basic Operations On Polynomials} +\beginscroll +You create +polynomials using the usual operations of \spadopFrom{+}{Polynomial}, +\spadopFrom{-}{Polynomial}, \spadopFrom{*}{Polynomial} +(for multiplication), and \spadopFrom{**}{Polynomial} (for exponentiation). +Here are two examples: \newline +\spadpaste{p := a*x**2 + b*x*y + c*y**2 \bound{p}} +\spadpaste{q := 13*x**2 + 3*z \bound{q}} +These operations can also be used to combine polynomials. +Try the following: +\spadpaste{p + q \free{p q}} +\spadpaste{p - 3*q \free{p q}} +\spadpaste{p**2 + p*q \free{p q}} +\spadpaste{r := (p + q)**2 \bound{r} \free{p q}} +As you can see from the above examples, the variables are ordered +by defaults \spad{z > y > x > c > b > a}, +that is, \spad{z} is the main variable, then +\spad{y} and so on in reverse alphabetical order. +You can redefine this +ordering (for display purposes only) with the \spadfun{setVariableOrder} +command. +For example, the following +makes \spad{a} the main variable, then \spad{b}, and so on: +\spadpaste{setVariableOrder [a,b,c,x,y,z] \bound{vord}} +Now compare the way polynomials are displayed: +\spadpaste{p \free{p vord}} +\spadpaste{q \free{q vord}} +\spadpaste{r \free{r vord}} +To return to the system's default ordering, +use \spadfun{resetVariableOrder}. +\spadpaste{resetVariableOrder() \bound{rvord}} +\spadpaste{p \free{p rvord}} +Polynomial coefficients can be pulled out +using the function \spadfun{coefficient}. \newline +For example: +\spadpaste{coefficient(q,x,2) \free{q}} +will give you the coefficient of \spad{x**2} in the polynomial \spad{q}. +\newline +Try these commands: +\spadpaste{coefficient(r,x,3) \free{r}} +\spadpaste{c := coefficient(r,z,1) \free{r} \bound{c}} +\spadpaste{coefficient(c,x,2) \free{c}} +Coefficients of monomials can be obtained as follows: +\spadpaste{coefficient(q**2, [x,z], [2,1]) \free{q}} +This will return the coefficient of x**2 * z in the polynomial q**2. +Also, +\spadpaste{coefficient(r, [x,y], [2,2]) \free{r}} +will return the coefficient of \spad{x**2 * y**2} +in the polynomial \spad{r(x,y)}. +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Polynomial Evaluation and Substitution} +\label{PolynomialSubstitutionPage} +\index{pages!PolynomialSubstitutionPage!poly.ht} +\index{poly.ht!pages!PolynomialSubstitutionPage} +\index{PolynomialSubstitutionPage!poly.ht!pages} +<>= +\begin{page}{PolynomialSubstitutionPage} +{Polynomial Evaluation and Substitution} +\beginscroll +The function \spadfun{eval} is used to substitute values into polynomials. +Here's an example of how to use it: +\spadpaste{p := x**2 + y**2 \bound{p}} +\spadpaste{eval(p,x=5) \free{p}} +\newline +This example would give you the value of the polynomial \spad{p} at 5. +You can also substitute into polynomials with +several variables. First, specify the polynomial, then give +a list of bindings of the form \spad{variable = value}. For example: +\spadpaste{eval(p,[x = a + b,y = c + d]) \free{p}} +Here \spad{x} was replaced by \spad{a + b}, +and \spad{y} was replaced by \spad{c + d}. +Here's another example: +\spadpaste{q := x**3 + 5*x - y**4 \bound{q}} +\spadpaste{eval(q,[x=y,y=x]) \free{q}} +Substitution is done ``in parallel.'' +That is, Axiom takes +\spad{q(x,y)} and returns \spad{q(y,x)}. +\newline +You can also substitute numerical values for some or all of the +variables: +\spadpaste{px := eval(p, y = sin(2.0)) \bound{px} \free{p}} +\spadpaste{eval(px, x = cos(2.0)) \free{px}} +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Greatest Common Divisors, Resultants, and Discriminants} +\label{PolynomialGCDPage} +\index{pages!PolynomialGCDPage!poly.ht} +\index{poly.ht!pages!PolynomialGCDPage} +\index{PolynomialGCDPage!poly.ht!pages} +<>= +\begin{page}{PolynomialGCDPage} +{Greatest Common Divisors, Resultants, and Discriminants} +\beginscroll +You can compute the greatest common divisor of two polynomials using the +function \spadfun{gcd}. +Here's an example: +\spadpaste{p := 3*x**8 + 2*x**7 + 6*x**2 + 7*x + 2 \bound{p}} +\spadpaste{q := 2*x**13 + 9*x**7 + 2*x**6 + 10*x + 5 \bound{q}} +\spadpaste{gcd(p,q) \free{p q}} +You could +also see that \spad{p} and \spad{q} have a factor in common by using the +function \spadfun{resultant}: +\spadpaste{resultant(p,q,x) \free{p q}} +The resultant of two polynomials vanishes precisely when they have a +factor in common. +(In the example above +we specified the variable with +which we wanted to compute the resultant because the +polynomials could have involved variables other than x.) +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Roots of Polynomials} +\label{PolynomialRootPage} +\index{pages!PolynomialRootPage!poly.ht} +\index{poly.ht!pages!PolynomialRootPage} +\index{PolynomialRootPage!poly.ht!pages} +<>= +\begin{page}{PolynomialRootPage}{Roots of Polynomials} +\beginscroll +\beginmenu +\menulink{Using a Single Root of a Polynomial}{ugxProblemSymRootOnePage} +\newline +Working with a single root of a polynomial. +\menulink{Using All Roots of a Polynomial}{ugxProblemSymRootAllPage} +\newline +Working with all the roots of a polynomial. +\menulink{Solution of a Single Polynomial Equation}{ugxProblemOnePolPage} +\newline +Finding the roots of one polynomial. +\menulink{Solution of Systems of Polynomial Equations}{ugxProblemPolSysPage} +\newline +Finding the roots of a system of polynomials. +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +\section{poly1.ht} +<>= +\newcommand{\PolynomialXmpTitle}{Polynomial} +\newcommand{\PolynomialXmpNumber}{9.63} + +@ +\subsection{Polynomial} +\label{PolynomialXmpPage} +\begin{itemize} +\item DistributedMultivariatePolynomialXmpPage \ref{DistributedMultivariatePolynomialXmpPage} on +page~pageref{DistributedMultivariatePolynomialXmpPage} +\item MultivariatePolynomialXmpPage \ref{MultivariatePolynomialXmpPage} on +page~pageref{MultivariatePolynomialXmpPage} +\item UnivariatePolynomialXmpPage \ref{UnivariatePolynomialXmpPage} on +page~pageref{UnivariatePolynomialXmpPage} +\item FactoredXmpPage \ref{FactoredXmpPage} on +page~pageref{FactoredXmpPage} +\item ugProblemFactorPage \ref{ugProblemFactorPage} on +page~pageref{ugProblemFactorPage} +\end{itemize} +\index{pages!PolynomialXmpPage!poly1.ht} +\index{poly1.ht!pages!PolynomialXmpPage} +\index{PolynomialXmpPage!poly1.ht!pages} +<>= +\begin{page}{PolynomialXmpPage}{Polynomial} +\beginscroll + +The domain constructor \spadtype{Polynomial} (abbreviation: \spadtype{POLY}) +provides polynomials with an arbitrary number of unspecified +variables. + +\xtc{ +It is used to create the default polynomial domains +in Axiom. +Here the coefficients are integers. +}{ +\spadpaste{x + 1} +} +\xtc{ +Here the coefficients have type \spadtype{Float}. +}{ +\spadpaste{z - 2.3} +} +\xtc{ +And here we have a polynomial in two variables with coefficients which +have type \spadtype{Fraction Integer}. +}{ +\spadpaste{y**2 - z + 3/4} +} + +The representation of objects of domains created by \spadtype{Polynomial} +is that of recursive univariate polynomials.\footnote{The term +\spad{univariate} means ``one variable.'' \spad{multivariate} means +``possibly more than one variable.''} +\xtc{ +This recursive structure is sometimes obvious from the display of +a polynomial. +}{ +\spadpaste{y **2 + x*y + y \bound{prev}} +} +In this example, you see that the polynomial is stored as a polynomial in +\spad{y} with coefficients that are polynomials in \spad{x} with integer +coefficients. +In fact, you really don't need to worry about the representation unless +you are working on an advanced application where it is critical. +The polynomial types created from +\spadtype{DistributedMultivariatePolynomial} and +\spadtype{NewDistributedMultivariatePolynomial} (discussed in +\downlink{`DistributedMultivariatePolynomial'} +{DistributedMultivariatePolynomialXmpPage} +\ignore{DistributedMultivariatePolynomial}) are stored and displayed in a +non-recursive manner. +\xtc{ +You see a ``flat'' display of the above +polynomial by converting to one of those types. +}{ +\spadpaste{\% :: DMP([y,x],INT) \free{prev}} +} + +We will demonstrate many of the polynomial facilities by using two +polynomials with integer coefficients. +\xtc{ +By default, the interpreter expands polynomial expressions, even if they +are written in a factored format. +}{ +\spadpaste{p := (y-1)**2 * x * z \bound{p}} +} +\xtc{ +See \downlink{`Factored'}{FactoredXmpPage}\ignore{Factored} to see +how to create objects in factored form directly. +}{ +\spadpaste{q := (y-1) * x * (z+5) \bound{q}} +} +\xtc{ +The fully factored form can be recovered by using +\spadfunFrom{factor}{Polynomial}. +}{ +\spadpaste{factor(q) \free{q}} +} +This is the same name used for the operation to factor integers. +Such reuse of names is called \spadglos{overloading} and makes it much easier +to think of solving problems in general ways. +Axiom facilities for factoring polynomials created with +\spadtype{Polynomial} are currently restricted to +the integer and rational number coefficient cases. +There are more complete facilities for factoring univariate polynomials: +see \downlink{``\ugProblemFactorTitle''}{ugProblemFactorPage} +in Section \ugProblemFactorNumber\ignore{ugProblemFactor}. + +\xtc{ +The standard arithmetic operations are available for polynomials. +}{ +\spadpaste{p - q**2\free{p q}} +} +\xtc{ +The operation \spadfunFrom{gcd}{Polynomial} is used to compute the +greatest common divisor of two polynomials. +}{ +\spadpaste{gcd(p,q) \free{p q}\bound{prev4}} +} +\xtc{ +In the case of \spad{p} and \spad{q}, the gcd is obvious from their +definitions. +We factor the gcd to show this relationship better. +}{ +\spadpaste{factor \% \free{prev4}} +} +\xtc{ +The least common multiple is computed by using \spadfunFrom{lcm}{Polynomial}. +}{ +\spadpaste{lcm(p,q) \free{p q}} +} +\xtc{ +Use \spadfunFrom{content}{Polynomial} to compute the +greatest common divisor of the +coefficients of the polynomial. +}{ +\spadpaste{content p \free{p}} +} + +Many of the operations on polynomials require you to specify a variable. +For example, \spadfunFrom{resultant}{Polynomial} requires you to give the +variable in which the polynomials should be expressed. +\xtc{ +This computes the resultant of the values of \spad{p} and +\spad{q}, considering them as polynomials in the variable \spad{z}. +They do not share a root when thought of as polynomials in \spad{z}. +}{ +\spadpaste{resultant(p,q,z) \free{p q}} +} +\xtc{ +This value is \spad{0} because as polynomials in \spad{x} the polynomials +have a common root. +}{ +\spadpaste{resultant(p,q,x) \free{p}\free{q}} +} +The data type used for the variables created by \spadtype{Polynomial} is +\spadtype{Symbol}. +As mentioned above, the representation used by \spadtype{Polynomial} is +recursive and so there is a main variable for nonconstant polynomials. +\xtc{ +The operation \spadfunFrom{mainVariable}{Polynomial} returns this +variable. +The return type is actually a union of \spadtype{Symbol} and +\spad{"failed"}. +}{ +\spadpaste{mainVariable p \free{p}} +} +\xtc{ +The latter branch of the union is be used if the polynomial has no +variables, that is, is a constant. +}{ +\spadpaste{mainVariable(1 :: POLY INT)} +} +\xtc{ +You can also use the predicate \spadfunFrom{ground?}{Polynomial} to test +whether a polynomial is in fact a member of its ground ring. +}{ +\spadpaste{ground? p \free{p}} +} +\xtc{ +}{ +\spadpaste{ground?(1 :: POLY INT)} +} +\xtc{ +The complete list of variables actually used in a particular polynomial is +returned by \spadfunFrom{variables}{Polynomial}. +For constant polynomials, this list is empty. +}{ +\spadpaste{variables p \free{p}} +} + +\xtc{ +The \spadfunFrom{degree}{Polynomial} operation returns the +degree of a polynomial in a specific variable. +}{ +\spadpaste{degree(p,x) \free{p}} +} +\xtc{ +}{ +\spadpaste{degree(p,y) \free{p}} +} +\xtc{ +}{ +\spadpaste{degree(p,z) \free{p}} +} +\xtc{ +If you give a list of variables for the second argument, a list +of the degrees in those variables is returned. +}{ +\spadpaste{degree(p,[x,y,z]) \free{p}} +} +\xtc{ +The minimum degree of a variable in a polynomial is computed using +\spadfunFrom{minimumDegree}{Polynomial}. +}{ +\spadpaste{minimumDegree(p,z) \free{p}} +} +\xtc{ +The total degree of a polynomial is returned by +\spadfunFrom{totalDegree}{Polynomial}. +}{ +\spadpaste{totalDegree p \free{p}} +} + +\xtc{ +It is often convenient to think of a polynomial as a leading monomial plus +the remaining terms. +}{ +\spadpaste{leadingMonomial p \free{p}} +} +\xtc{ +The \spadfunFrom{reductum}{Polynomial} operation returns a polynomial +consisting of the sum of the monomials after the first. +}{ +\spadpaste{reductum p \free{p}} +} +\xtc{ +These have the obvious relationship that the original polynomial +is equal to the leading monomial plus the reductum. +}{ +\spadpaste{p - leadingMonomial p - reductum p \free{p}} +} +\xtc{ +The value returned by \spadfunFrom{leadingMonomial}{Polynomial} includes +the coefficient of that term. +This is extracted by using +\spadfunFrom{leadingCoefficient}{Polynomial} on the original polynomial. +}{ +\spadpaste{leadingCoefficient p \free{p}} +} +\xtc{ +The operation \spadfunFrom{eval}{Polynomial} is used to substitute a value +for a variable in a polynomial. +}{ +\spadpaste{p \free{p}} +} +\xtc{ +This value may be another variable, a constant or a polynomial. +}{ +\spadpaste{eval(p,x,w) \free{p}} +} +\xtc{ +}{ +\spadpaste{eval(p,x,1) \free{p}} +} +\xtc{ +Actually, all the things being substituted are just polynomials, +some more trivial than others. +}{ +\spadpaste{eval(p,x,y**2 - 1) \free{p}} +} + +\xtc{ +Derivatives are computed using the \spadfunFrom{D}{Polynomial} +operation. +}{ +\spadpaste{D(p,x) \free{p}} +} +\xtc{ +The first argument is the polynomial and the second is the variable. +}{ +\spadpaste{D(p,y) \free{p}} +} +\xtc{ +Even if the polynomial has only one variable, you must specify it. +}{ +\spadpaste{D(p,z) \free{p}} +} + +Integration of polynomials is similar and the +\spadfunFrom{integrate}{Polynomial} operation is used. + +\xtc{ +Integration requires that the coefficients support division. +Consequently, +Axiom converts polynomials over the integers to polynomials over +the rational numbers before integrating them. +}{ +\spadpaste{integrate(p,y) \free{p}} +} + +It is not possible, in general, to divide two polynomials. +In our example using polynomials over the integers, the operation +\spadfunFrom{monicDivide}{Polynomial} divides a polynomial by a monic +polynomial (that is, a polynomial with leading coefficient equal to 1). +The result is a record of the quotient and remainder of the +division. +\xtc{ +You must specify the variable in which to express the polynomial. +}{ +\spadpaste{qr := monicDivide(p,x+1,x) \free{p}\bound{qr}} +} +\xtc{ +The selectors of the components of the record are +\spad{quotient} and \spad{remainder}. +Issue this to extract the remainder. +}{ +\spadpaste{qr.remainder \free{qr}} +} +\xtc{ +Now that we can extract the components, we can demonstrate the +relationship among them and the arguments to our original expression +\spad{qr := monicDivide(p,x+1,x)}. +}{ +\spadpaste{p - ((x+1) * qr.quotient + qr.remainder) \free{p}\free{qr}} +} + +\xtc{ +If the \spadopFrom{/}{Fraction} operator is used with polynomials, a +fraction object is created. +In this example, the result is an object of type \spadtype{Fraction +Polynomial Integer}. +}{ +\spadpaste{p/q \free{p}\free{q}} +} +\xtc{ +If you use rational numbers as polynomial coefficients, the +resulting object is of type \spadtype{Polynomial Fraction Integer}. +}{ +\spadpaste{(2/3) * x**2 - y + 4/5 \bound{prev1}} +} +\xtc{ +This can be converted to a fraction of polynomials and back again, if +required. +}{ +\spadpaste{\% :: FRAC POLY INT \free{prev1}\bound{prev2}} +} +\xtc{ +}{ +\spadpaste{\% :: POLY FRAC INT \free{prev2}\bound{prev3}} +} +\xtc{ +To convert the coefficients to floating point, +map the \spadfun{numeric} operation on the coefficients of the polynomial. +}{ +\spadpaste{map(numeric,\%) \free{prev3}} +} + +For more information on related topics, see +\downlink{`UnivariatePolynomial'}{UnivariatePolynomialXmpPage}\ignore{UnivariatePolynomial}, +\downlink{`MultivariatePolynomial'}{MultivariatePolynomialXmpPage}\ignore{MultivariatePolynomial}, and +\downlink{`DistributedMultivariatePolynomial'}{DistributedMultivariatePolynomialXmpPage}\ignore{DistributedMultivariatePolynomial}. +You can also issue the system command +\spadcmd{)show Polynomial} +to display the full list of operations defined by +\spadtype{Polynomial}. +\endscroll +\autobuttons +\end{page} + +@ +\section{quat.ht} +<>= +\newcommand{\QuaternionXmpTitle}{Quaternion} +\newcommand{\QuaternionXmpNumber}{9.64} + +@ +\subsection{Quaternion} +\label{QuaternionXmpPage} +\index{pages!QuaternionXmpPage!quat.ht} +\index{quat.ht!pages!QuaternionXmpPage} +\index{QuaternionXmpPage!quat.ht!pages} +<>= +\begin{page}{QuaternionXmpPage}{Quaternion} +% ===================================================================== +\beginscroll +The domain constructor \spadtype{Quaternion} implements quaternions over +commutative rings. +For information on related topics, see +%\menuxmpref{CliffordAlgebra} +\downlink{`Complex'}{ComplexXmpPage}\ignore{Complex} and +\downlink{`Octonion'}{OctonionXmpPage}\ignore{Octonion}. +You can also issue the system command +\spadcmd{)show Quaternion} +to display the full list of operations defined by +\spadtype{Quaternion}. + +\xtc{ +The basic operation for creating quaternions is +\spadfunFrom{quatern}{Quaternion}. +This is a quaternion over the rational numbers. +}{ +\spadpaste{q := quatern(2/11,-8,3/4,1) \bound{q}} +} +\xtc{ +The four arguments are the real part, the \spad{i} imaginary part, the +\spad{j} imaginary part, and the \spad{k} imaginary part, respectively. +}{ +\spadpaste{[real q, imagI q, imagJ q, imagK q] \free{q}} +} +\xtc{ +Because \spad{q} is over the rationals (and nonzero), you can invert it. +}{ +\spadpaste{inv q \free{q}} +} +\xtc{ +The usual arithmetic (ring) operations are available +}{ +\spadpaste{q**6 \free{q}} +} +\xtc{ +}{ +\spadpaste{r := quatern(-2,3,23/9,-89); q + r \bound{r}\free{q}} +} +% +\xtc{ +In general, multiplication is not commutative. +}{ +\spadpaste{q * r - r * q\free{q r}} +} +\xtc{ +There are no predefined constants for the imaginary \spad{i, j}, +and \spad{k} parts, but you can easily define them. +}{ +\spadpaste{i:=quatern(0,1,0,0); j:=quatern(0,0,1,0); k:=quatern(0,0,0,1) \bound{i j k}} +} +\xtc{ +These satisfy the normal identities. +}{ +\spadpaste{[i*i, j*j, k*k, i*j, j*k, k*i, q*i] \free{i j k q}} +} +\xtc{ +The norm is the quaternion times its conjugate. +}{ +\spadpaste{norm q \free{q}} +} +\xtc{ +}{ +\spadpaste{conjugate q \free{q} \bound{prev}} +} +\xtc{ +}{ +\spadpaste{q * \% \free{q prev}} +} +\endscroll +\autobuttons +\end{page} + +@ +\section{radix.ht} +<>= +\newcommand{\RadixExpansionXmpTitle}{RadixExpansion} +\newcommand{\RadixExpansionXmpNumber}{9.65} + +@ +\subsection{RadixExpansion} +\label{RadixExpansionXmpPage} +\begin{itemize} +\item HexadecimalExpansionXmpPage \ref{HexadecimalExpansionXmpPage} on +page~pageref{HexadecimalExpansionXmpPage} +\item DecimalExpansionXmpPage \ref{DecimalExpansionXmpPage} on +page~pageref{DecimalExpansionXmpPage} +\item BinaryExpansionXmpPage \ref{BinaryExpansionXmpPage} on +page~pageref{BinaryExpansionXmpPage} +\end{itemize} +\index{pages!RadixExpansionXmpPage!radix.ht} +\index{radix.ht!pages!RadixExpansionXmpPage} +\index{RadixExpansionXmpPage!radix.ht!pages} +<>= +\begin{page}{RadixExpansionXmpPage}{RadixExpansion} +\beginscroll + +It possible to expand numbers in general bases. + +\labelSpace{2pc} +\xtc{ +Here we expand \spad{111} in base \spad{5}. +This means +\texht{$10^2+10^1+10^0 = 4 \cdot 5^2+2 \cdot 5^1 + 5^0.$}{% +\spad{10**2+10**1+10**0 = 4*5**2+2*5**1+5**0.}} +}{ +\spadpaste{111::RadixExpansion(5)} +} + +\xtc{ +You can expand fractions to form repeating expansions. +}{ +\spadpaste{(5/24)::RadixExpansion(2)} +} +\xtc{ +}{ +\spadpaste{(5/24)::RadixExpansion(3)} +} +\xtc{ +}{ +\spadpaste{(5/24)::RadixExpansion(8)} +} +\xtc{ +}{ +\spadpaste{(5/24)::RadixExpansion(10)} +} +\xtc{ +For bases from 11 to 36 the letters A through Z are used. +}{ +\spadpaste{(5/24)::RadixExpansion(12)} +} +\xtc{ +}{ +\spadpaste{(5/24)::RadixExpansion(16)} +} +\xtc{ +}{ +\spadpaste{(5/24)::RadixExpansion(36)} +} +\xtc{ +For bases greater than 36, the ragits are separated by blanks. +}{ +\spadpaste{(5/24)::RadixExpansion(38)} +} +\xtc{ +The \spadtype{RadixExpansion} type provides operations to obtain the +individual ragits. +Here is a rational number in base \spad{8}. +}{ +\spadpaste{a := (76543/210)::RadixExpansion(8) \bound{a}} +} +\xtc{ +The operation \spadfunFrom{wholeRagits}{RadixExpansion} returns a list of the +ragits for the integral part of the number. +}{ +\spadpaste{w := wholeRagits a \free{a}\bound{w}} +} +\xtc{ +The operations \spadfunFrom{prefixRagits}{RadixExpansion} and \spadfunFrom{cycleRagits}{RadixExpansion} +return lists of the initial and repeating ragits in the +fractional part of the number. +}{ +\spadpaste{f0 := prefixRagits a \free{a}\bound{f0}} +} +\xtc{ +}{ +\spadpaste{f1 := cycleRagits a \free{a}\bound{f1}} +} +\xtc{ +You can construct any radix expansion by giving the +whole, prefix and cycle parts. +The declaration is necessary to let Axiom +know the base of the ragits. +}{ +\spadpaste{u:RadixExpansion(8):=wholeRadix(w)+fractRadix(f0,f1) \free{w f0 f1}\bound{u}} +} +\xtc{ +If there is no repeating part, then the list \spad{[0]} should be used. +}{ +\spadpaste{v: RadixExpansion(12) := fractRadix([1,2,3,11], [0]) \bound{v}} +} +\xtc{ +If you are not interested in the repeating nature of the expansion, +an infinite stream of ragits can be obtained using +\spadfunFrom{fractRagits}{RadixExpansion}. +}{ +\spadpaste{fractRagits(u) \free{u}} +} +\xtc{ +Of course, it's possible to recover the fraction representation: +}{ +\spadpaste{a :: Fraction(Integer) \free{a}} +} + +\showBlurb{RadixExpansion} +More examples of expansions are available in +\downlink{`DecimalExpansion'}{DecimalExpansionXmpPage}\ignore{DecimalExpansion}, +\downlink{`BinaryExpansion'}{BinaryExpansionXmpPage}\ignore{BinaryExpansion}, and +\downlink{`HexadecimalExpansion'}{HexadecimalExpansionXmpPage}\ignore{HexadecimalExpansion}. +\endscroll +\autobuttons +\end{page} +% + +@ +\section{reclos.ht} +<>= +\newcommand{\RealClosureXmpTitle}{RealClosure} +\newcommand{\RealClosureXmpNumber}{9.66} + +@ +\subsection{RealClosure} +\label{RealClosureXmpPage} +\index{pages!RealClosureXmpPage!reclos.ht} +\index{reclos.ht!pages!RealClosureXmpPage} +\index{RealClosureXmpPage!reclos.ht!pages} +<>= +\begin{page}{RealClosureXmpPage}{RealClosure} +\beginscroll + +The Real Closure 1.0 package provided by +Renaud Rioboo (Renaud.Rioboo@lip6.fr) consists of different +packages, categories and domains : + +\begin{items} +\item The package \axiomType{RealPolynomialUtilitiesPackage} which needs +a \axiomType{Field} {\em F} and a +\axiomType{UnivariatePolynomialCategory} domain with coefficients in {\em F}. +It computes some +simple functions such as Sturm and Sylvester sequences +(\axiomOpFrom{sturmSequence}{RealPolynomialUtilitiesPackage}, +\axiomOpFrom{sylvesterSequence}{RealPolynomialUtilitiesPackage}). + +\item The category \axiomType{RealRootCharacterizationCategory} provides +abstract +functions to work with "real roots" of univariate polynomials. These +resemble variables with some functionality needed to compute important +operations. + +\item The category \axiomType{RealClosedField} provides common operations +available over +real closed fiels. These include finding all the roots of a univariate +polynomial, taking square (and higher) roots, ... + +\item The domain \axiomType{RightOpenIntervalRootCharacterization} is the +main code that +provides the functionality of \axiomType{RealRootCharacterizationCategory} +for the case +of archimedean fields. Abstract roots are encoded with a left closed right +open interval containing the root together with a defining polynomial for the +root. + +\item The \axiomType{RealClosure} domain is the end-user code. It provides +usual arithmetic +with real algebraic numbers, along with the functionality of a real closed +field. It also provides functions to approximate a real algebraic number by an +element of the base field. This approximation may either be absolute +(\axiomOpFrom{approximate}{RealClosure}) or relative +(\axiomOpFrom{relativeApprox}{RealClosure}). + + +\end{items} + +\centerline{CAVEATS} + +Since real algebraic expressions are stored as depending on "real roots" which +are managed like variables, there is an ordering on these. This ordering is +dynamical in the sense that any new algebraic takes precedence over older +ones. In particular every creation function raises a new "real root". This has +the effect that when you type something like +\spad{sqrt(2) + sqrt(2)} you have two +new variables which happen to be equal. To avoid this name the expression such +as in \spad{s2 := sqrt(2) ; s2 + s2} + +Also note that computing times depend strongly on the ordering you implicitly +provide. Please provide algebraics in the order +which seems most natural to you. + +\centerline{LIMITATIONS} + +This packages uses +algorithms which are published in [1] and [2] which are based on field +arithmetics, in particular for polynomial gcd related algorithms. This can be +quite slow for high degree polynomials and subresultants methods usually work +best. Beta versions of the package try to use these techniques in a better +way and work significantly faster. These are mostly based on unpublished +algorithms and cannot be distributed. Please contact the author if you have a +particular problem to solve or want to use these versions. + +Be aware that approximations behave as post-processing and that all +computations are done exactly. They can thus be quite time consuming when +depending on several "real roots". + +\centerline{REFERENCES} + + +[1] R. Rioboo : Real Algebraic Closure of an ordered Field : Implementation + in Axiom. + In proceedings of the ISSAC'92 Conference, Berkeley 1992 pp. 206-215. + +[2] Z. Ligatsikas, R. Rioboo, M. F. Roy : Generic computation of the real + closure of an ordered field. + In Mathematics and Computers in Simulation Volume 42, Issue 4-6, + November 1996. + +\centerline{EXAMPLES} +\xtc{ +We shall work with the real closure of the ordered field of +rational numbers. +}{ +\spadpaste{Ran := RECLOS(FRAC INT) \bound{Ran}} +} +\xtc{ +Some simple signs for square roots, these correspond to an extension +of degree 16 of the rational numbers. Examples provided by J. Abbot. +}{ +\spadpaste{fourSquares(a:Ran,b:Ran,c:Ran,d:Ran):Ran == sqrt(a)+sqrt(b) - sqrt(c)-sqrt(d) \free{Ran} \bound{fs}} +} +\xtc{ +These produce values very close to zero. +}{ +\spadpaste{squareDiff1 := fourSquares(73,548,60,586) \free{fs}\bound{sd1}} +} +\xtc{ +}{ +\spadpaste{recip(squareDiff1)\free{sd1}} +} +\xtc{ +}{ +\spadpaste{sign(squareDiff1)\free{sd1}} +} +\xtc{ +}{ +\spadpaste{squareDiff2 := fourSquares(165,778,86,990) \free{fs}\bound{sd2}} +} +\xtc{ +}{ +\spadpaste{recip(squareDiff2)\free{sd2}} +} +\xtc{ +}{ +\spadpaste{sign(squareDiff2)\free{sd2}} +} +\xtc{ +}{ +\spadpaste{squareDiff3 := fourSquares(217,708,226,692) \free{fs}\bound{sd3}} +} +\xtc{ +}{ +\spadpaste{recip(squareDiff3)\free{sd3}} +} +\xtc{ +}{ +\spadpaste{sign(squareDiff3)\free{sd3}} +} +\xtc{ +}{ +\spadpaste{squareDiff4 := fourSquares(155,836,162,820) \free{fs}\bound{sd4}} +} +\xtc{ +}{ +\spadpaste{recip(squareDiff4)\free{sd4}} +} +\xtc{ +}{ +\spadpaste{sign(squareDiff4)\free{sd4}} +} +\xtc{ +}{ +\spadpaste{squareDiff5 := fourSquares(591,772,552,818) \free{fs}\bound{sd5}} +} +\xtc{ +}{ +\spadpaste{recip(squareDiff5)\free{sd5}} +} +\xtc{ +}{ +\spadpaste{sign(squareDiff5)\free{sd5}} +} +\xtc{ +}{ +\spadpaste{squareDiff6 := fourSquares(434,1053,412,1088) \free{fs}\bound{sd6}} +} +\xtc{ +}{ +\spadpaste{recip(squareDiff6)\free{sd6}} +} +\xtc{ +}{ +\spadpaste{sign(squareDiff6)\free{sd6}} +} +\xtc{ +}{ +\spadpaste{squareDiff7 := fourSquares(514,1049,446,1152) \free{fs}\bound{sd7}} +} +\xtc{ +}{ +\spadpaste{recip(squareDiff7)\free{sd7}} +} +\xtc{ +}{ +\spadpaste{sign(squareDiff7)\free{sd7}} +} +\xtc{ +}{ +\spadpaste{squareDiff8 := fourSquares(190,1751,208,1698) \free{fs}\bound{sd8}} +} +\xtc{ +}{ +\spadpaste{recip(squareDiff8)\free{sd8}} +} +\xtc{ +}{ +\spadpaste{sign(squareDiff8)\free{sd8}} +} +\xtc{ +This should give three digits of precision +}{ +\spadpaste{relativeApprox(squareDiff8,10**(-3))::Float \free{sd8}} +} +\xtc{ +The sum of these 4 roots is 0 +}{ +\spadpaste{l := allRootsOf((x**2-2)**2-2)$Ran \free{Ran} \bound{l}} +} +\xtc{ +Check that they are all roots of the same polynomial +}{ +\spadpaste{removeDuplicates map(mainDefiningPolynomial,l) \free{l}} +} +\xtc{ +We can see at a glance that they are separate roots +}{ +\spadpaste{map(mainCharacterization,l) \free{l}} +} +\xtc{ +Check the sum and product +}{ +\spadpaste{[reduce(+,l),reduce(*,l)-2] \free{l}} +} +\xtc{ +A more complicated test that involve an extension of degree 256. +This is a way of checking nested radical identities. +}{ +\spadpaste{(s2, s5, s10) := (sqrt(2)$Ran, sqrt(5)$Ran, sqrt(10)$Ran) \free{Ran}\bound{s2}\bound{s5}\bound{s10}} +} +\xtc{ +}{ +\spadpaste{eq1:=sqrt(s10+3)*sqrt(s5+2) - sqrt(s10-3)*sqrt(s5-2) = sqrt(10*s2+10) \free{s2}\free{s5}\free{s10}\bound{eq1}} +} +\xtc{ +}{ +\spadpaste{eq1::Boolean \free{eq1}} +} +\xtc{ +}{ +\spadpaste{eq2:=sqrt(s5+2)*sqrt(s2+1) - sqrt(s5-2)*sqrt(s2-1) = sqrt(2*s10+2)\free{s2}\free{s5}\free{s10}\bound{eq2}} +} +\xtc{ +}{ +\spadpaste{eq2::Boolean \free{eq2}} +} +\xtc{ +Some more examples from J. M. Arnaudies +}{ +\spadpaste{s3 := sqrt(3)$Ran \free{Ran}\bound{s3}} +} +\xtc{ +}{ +\spadpaste{s7:= sqrt(7)$Ran \free{Ran}\bound{s7}} +} +\xtc{ +}{ +\spadpaste{e1 := sqrt(2*s7-3*s3,3) \free{s7} \free{s3} \bound{e1}} +} +\xtc{ +}{ +\spadpaste{e2 := sqrt(2*s7+3*s3,3) \free{s7} \free{s3} \bound{e2}} +} +\xtc{ +This should be null +}{ +\spadpaste{e2-e1-s3 \free{e2} \free{e1} \free{s3}} +} +\xtc{ +A quartic polynomial +}{ +\spadpaste{pol : UP(x,Ran) := x**4+(7/3)*x**2+30*x-(100/3) \free{Ran} \bound{pol}} +} +\xtc{ +Add some cubic roots +}{ +\spadpaste{r1 := sqrt(7633)$Ran \free{Ran}\bound{r1}} +} +\xtc{ +}{ +\spadpaste{alpha := sqrt(5*r1-436,3)/3 \free{r1} \bound{alpha}} +} +\xtc{ +}{ +\spadpaste{beta := -sqrt(5*r1+436,3)/3 \free{r1} \bound{beta}} +} +\xtc{ +this should be null +}{ +\spadpaste{pol.(alpha+beta-1/3) \free{pol} \free{alpha} \free{beta}} +} +\xtc{ +A quintic polynomial +}{ +\spadpaste{qol : UP(x,Ran) := x**5+10*x**3+20*x+22 \free{Ran}\bound{qol}} +} +\xtc{ +Add some cubic roots +}{ +\spadpaste{r2 := sqrt(153)$Ran \free{Ran}\bound{r2}} +} +\xtc{ +}{ +\spadpaste{alpha2 := sqrt(r2-11,5) \free{r2}\bound{alpha2}} +} +\xtc{ +}{ +\spadpaste{beta2 := -sqrt(r2+11,5) \free{r2}\bound{beta2}} +} +\xtc{ +this should be null +}{ +\spadpaste{qol(alpha2+beta2) \free{qol}\free{alpha2}\free{beta2}} +} +\xtc{ +Finally, some examples from the book Computer Algebra by +Davenport, Siret and Tournier (page 77). +The last one is due to Ramanujan. +}{ +\spadpaste{dst1:=sqrt(9+4*s2)=1+2*s2 \free{s2}\bound{dst1}} +} +\xtc{ +}{ +\spadpaste{dst1::Boolean \free{dst1}} +} +\xtc{ +}{ +\spadpaste{s6:Ran:=sqrt 6 \free{Ran}\bound{s6}} +} +\xtc{ +}{ +\spadpaste{dst2:=sqrt(5+2*s6)+sqrt(5-2*s6) = 2*s3 \free{s6}\free{s3}\bound{dst2}} +} +\xtc{ +}{ +\spadpaste{dst2::Boolean \free{dst2}} +} +\xtc{ +}{ +\spadpaste{s29:Ran:=sqrt 29 \free{Ran}\bound{s29}} +} +\xtc{ +}{ +\spadpaste{dst4:=sqrt(16-2*s29+2*sqrt(55-10*s29)) = sqrt(22+2*s5)-sqrt(11+2*s29)+s5 \free{s29}\free{s5}\bound{dst4}} +} +\xtc{ +}{ +\spadpaste{dst4::Boolean \free{dst4}} +} +\xtc{ +}{ +\spadpaste{dst6:=sqrt((112+70*s2)+(46+34*s2)*s5) = (5+4*s2)+(3+s2)*s5 \free{s2}\free{s5}\bound{dst6}} +} +\xtc{ +}{ +\spadpaste{dst6::Boolean \free{dst6}} +} +\xtc{ +}{ +\spadpaste{f3:Ran:=sqrt(3,5) \free{Ran}\bound{f3}} +} +\xtc{ +}{ +\spadpaste{f25:Ran:=sqrt(1/25,5) \free{Ran}\bound{f25}} +} +\xtc{ +}{ +\spadpaste{f32:Ran:=sqrt(32/5,5) \free{Ran}\bound{f32}} +} +\xtc{ +}{ +\spadpaste{f27:Ran:=sqrt(27/5,5) \free{Ran}\bound{f27}} +} +\xtc{ +}{ +\spadpaste{dst5:=sqrt((f32-f27,3)) = f25*(1+f3-f3**2)\free{f32}\free{f27}\free{f25}\free{f3}\bound{dst5}} +} +\xtc{ +}{ +\spadpaste{dst5::Boolean \free{dst5}} +} + +\endscroll +\autobuttons +\end{page} + +@ +\section{record.ht} +\subsection{Domain {\bf Record(a:A,...,b:B)}} +\label{DomainRecord} +\index{pages!DomainRecord!record.ht} +\index{record.ht!pages!DomainRecord} +\index{DomainRecord!record.ht!pages} +<>= +\begin{page}{DomainRecord}{Domain {\em Record(a:A,...,b:B)}} +\beginscroll +{\em Record} takes any number of selector-domain pairs as arguments: +\indentrel{2} +\newline \spad{a}, a selector, an element of domain \spadtype{Symbol} +\newline \spad{A}, a domain of category \spadtype{SetCategory} +\newline\tab{10}... +\newline \spad{b}, a selector, an element of domain \spadtype{Symbol} +\newline \spad{B}, a domain of category \spadtype{SetCategory} +\indentrel{-2}\newline +This constructor is a primitive in Axiom. +\newline +\beginmenu +\item\menulispdownlink{Description}{(|dbSpecialDescription| '|Record|)}\tab{15}General description +\item\menulispdownlink{Operations}{(|dbSpecialOperations| '|Record|)}\tab{15}All exported operations of {\em Record(a:A,b:B)} +%\item\menudownlink{Examples} {RecordExamples} \tab{15}Examples illustrating use +%\item\menudownlink{Exports} {RecordExports} \tab{15}Explicit categories and operations +\endmenu +\vspace{1}\newline +The selectors {\em a,...,b} of a \spad{Record} type must be distinct. +\endscroll\end{page} + +@ +\subsection{Domain Constructor {\bf Record}} +\label{RecordDescription} +\index{pages!RecordDescription!record.ht} +\index{record.ht!pages!RecordDescription} +\index{RecordDescription!record.ht!pages} +<>= +\begin{page}{RecordDescription}{Domain Constructor {\em Record}} +\beginscroll +\newline\menuitemstyle{}\tab{2}Record({\em a:A},{\em b:B}) +\newline\tab{2}{\em Arguments:}\indent{17}\tab{-2} +{\em a}, a selector, an element of domain \spadtype{Symbol} +\newline\tab{-2} +{\em A}, a domain of category \spadtype{SetCategory} +\newline\tab{10}... +\newline\tab{-2} +{\em b}, a selector, an element of domain \spadtype{Symbol} +\newline\tab{-2} +{\em B}, a domain of category \spadtype{SetCategory} +\indent{0}\newline\tab{2}{\em Returns:}\indent{15}\tab{0} +a record object with component objects of type {\em A},...,{\em B} with +correponding selectors {\em a},...,{\em b} +as described below. +\indent{0}\newline\tab{2}{\em Description:}\indent{15}\tab{0} +{\em Record(a:A,b:B)} is used to create the class of pairs of objects made +up of a value of type {\em A} selected by the symbol {\em a} and +a value of type {\em B} selected by the symbol {\em b}. +In general, the {\em Record} constructor can take any number of arguments and thus can +be used to create aggregates of +heterogeneous components of arbitrary size selectable by name. +{\em Record} is a primitive domain of Axiom which cannot be +defined in the Axiom language. +\endscroll +\end{page} + + +@ +\section{regset.ht} +<>= +\newcommand{\RegularTriangularSetXmpTitle}{RegularTriangularSet} +\newcommand{\RegularTriangularSetXmpNumber}{9.67} + +@ +\subsection{RegularTriangularSet} +\label{RegularTriangularSetXmpPage} +\index{pages!RegularTriangularSetXmpPage!regset.ht} +\index{regset.ht!pages!RegularTriangularSetXmpPage} +\index{RegularTriangularSetXmpPage!regset.ht!pages} +<>= +\begin{page}{RegularTriangularSetXmpPage}{RegularTriangularSet} +\beginscroll +The \spadtype{RegularTriangularSet} domain constructor implements +regular triangular sets. +These particular triangular sets were introduced by M. Kalkbrener (1991) +in his PhD Thesis under the name regular chains. +Regular chains and their related concepts are presented in +the paper "On the Theories of Triangular sets" By P. Aubry, D. Lazard +and M. Moreno Maza (to appear in the Journal of Symbolic Computation). +The \spadtype{RegularTriangularSet} +constructor also provides a new method (by the third author) +for solving polynomial system by means of regular chains. +This method has two ways of solving. +One has the same specifications as Kalkbrener's algorithm (1991) +and the other is closer to Lazard's method (Discr. App. Math, 1991). +Moreover, this new method removes redundant component from the +decompositions when this is not {\em too expensive}. +This is always the case with square-free regular chains. +So if you want to obtain decompositions without redundant components +just use the \spadtype{SquareFreeRegularTriangularSet} domain constructor +or the \spadtype{LazardSetSolvingPackage} package constructor. +See also the \spadtype{LexTriangularPackage} and +\spadtype{ZeroDimensionalSolvePackage} for the case of +algebraic systems with a finite number of (complex) solutions. + +One of the main features of regular triangular sets is that they +naturally define towers of simple extensions of a field. +This allows to perform with multivariate polynomials the +same kind of operations as one can do in an \spadtype{EuclideanDomain}. + +The \spadtype{RegularTriangularSet} constructor takes four arguments. +The first one, {\bf R}, is the coefficient ring of the polynomials; +it must belong to the category \spadtype{GcdDomain}. +The second one, {\bf E}, is the exponent monoid of the polynomials; +it must belong to the category \spadtype{OrderedAbelianMonoidSup}. +the third one, {\bf V}, is the ordered set of variables; +it must belong to the category \spadtype{OrderedSet}. +The last one is the polynomial ring; +it must belong to the category \spadtype{RecursivePolynomialCategory(R,E,V)}. +The abbreviation for \spadtype{RegularTriangularSet} is +\spadtype{REGSET}. +See also the constructor \spadtype{RegularChain} which only takes +two arguments, the coefficient ring and the ordered set of variables; +in that case, polynomials are necessarily built with the +\spadtype{NewSparseMultivariatePolynomial} domain constructor. + +We shall explain now how to use the constructor \spadtype{REGSET} +and how to read the decomposition of a polynomial system by means +of regular sets. + +Let us give some examples. +We start with an easy one (Donati-Traverso) +in order to understand the two ways of +solving polynomial systems provided by the \spadtype{REGSET} constructor. +\xtc{ +Define the coefficient ring. +}{ +\spadpaste{R := Integer \bound{R}} +} +\xtc{ +Define the list of variables, +}{ +\spadpaste{ls : List Symbol := [x,y,z,t] \bound{ls}} +} +\xtc{ +and make it an ordered set; +}{ +\spadpaste{V := OVAR(ls) \free{ls} \bound{V}} +} +\xtc{ +then define the exponent monoid. +}{ +\spadpaste{E := IndexedExponents V \free{V} \bound{E}} +} +\xtc{ +Define the polynomial ring. +}{ +\spadpaste{P := NSMP(R, V) \free{R} \free{V} \bound{P}} +} +\xtc{ +Let the variables be polynomial. +}{ +\spadpaste{x: P := 'x \free{P} \bound{x}} +} +\xtc{ +}{ +\spadpaste{y: P := 'y \free{P} \bound{y}} +} +\xtc{ +}{ +\spadpaste{z: P := 'z \free{P} \bound{z}} +} +\xtc{ +}{ +\spadpaste{t: P := 't \free{P} \bound{t}} +} +\xtc{ +Now call the \spadtype{RegularTriangularSet} domain constructor. +}{ +\spadpaste{T := REGSET(R,E,V,P) \free{R} \free{E} \free{V} \free{P} \bound{T} } +} +\xtc{ +Define a polynomial system. +}{ +\spadpaste{p1 := x ** 31 - x ** 6 - x - y \free{x} \free{y} \bound{p1}} +} +\xtc{ +}{ +\spadpaste{p2 := x ** 8 - z \free{x} \free{z} \bound{p2}} +} +\xtc{ +}{ +\spadpaste{p3 := x ** 10 - t \free{x} \free{t} \bound{p3}} +} +\xtc{ +}{ +\spadpaste{lp := [p1, p2, p3] \free{p1} \free{p2} \free{p3} \bound{lp}} +} +\xtc{ +First of all, let us solve this system in the sense of Kalkbrener. +}{ +\spadpaste{zeroSetSplit(lp)$T \free{lp} \free{T}} +} +\xtc{ +And now in the sense of Lazard (or Wu and other authors). +}{ +\spadpaste{lts := zeroSetSplit(lp,false)$T \free{lp} \free{T} \bound{lts}} +} + +We can see that the first decomposition is a subset of the second. +So how can both be correct ? + +Recall first that polynomials from a domain of the category +\spadtype{RecursivePolynomialCategory} are regarded +as univariate polynomials in their main variable. +For instance the second polynomial in the first set +of each decomposition has main variable {\bf y} +and its initial (i.e. its leading coefficient w.r.t. its main +variable) is {\bf t z}. + +Now let us explain how to read the second decomposition. +Note that the non-constant initials of the first set are +\texht{$t^4-t$}{{\bf t^4 - t}} and \texht{$t z$}{{\bf t z}}. +Then the solutions described by this first set are the common +zeros of its polynomials that do not cancel the polynomials +\texht{$t^4-t$}{{\bf t^4 - t}} and \texht{$ty z$}{{\bf t z}}. +Now the solutions of the input system {\bf lp} satisfying +these equations are described by the second and the third +sets of the decomposition. +Thus, in some sense, they can be considered as degenerated +solutions. +The solutions given by the first set are called the generic +points of the system; they give the general form of the +solutions. +The first decomposition only provides these generic points. +This latter decomposition is useful when they are many degenerated +solutions (which is sometimes hard to compute) and when +one is only interested in general informations, like +the dimension of the input system. + +\xtc{ +We can get the dimensions of each component +of a decomposition as follows. +}{ +\spadpaste{[coHeight(ts) for ts in lts] \free{lts}} +} + +Thus the first set has dimension one. +Indeed {\bf t} can take any value, except {\bf 0} +or any third root of {\bf 1}, whereas {\bf z} +is completely determined from {\bf t}, +{\bf y} is given by {\bf z} and {\bf t}, +and finally {\bf x} is given by the other three variables. +In the second and the third sets of the second decomposition +the four variables are completely determined and thus +these sets have dimension zero. + +We give now the precise specifications of each decomposition. +This assume some mathematical knowledge. +However, for the non-expert user, the above explanations will +be sufficient to understand the other features of the +\spadtype{RSEGSET} constructor. + +The input system {\bf lp} is decomposed in the sense +of Kalkbrener as finitely many regular sets {\bf T1,...,Ts} +such that the radical ideal generated by {\bf lp} +is the intersection of the radicals of the +saturated ideals of {\bf T1,...,Ts}. +In other words, the affine variety associated with {\bf lp} +is the union of the closures (w.r.t. Zarisky topology) +of the regular-zeros sets of {\bf T1,...,Ts}. + +{\bf N. B.} The prime ideals associated with the +radical of the saturated ideal of +a regular triangular set have all the same dimension; +moreover these prime ideals can be given by characteristic +sets with the same main variables. +Thus a decomposition in the sense of Kalkbrener +is unmixed dimensional. +Then it can be viewed as a {\em lazy} +decomposition into prime ideals (some of these +prime ideals being merged into unmixed dimensional ideals). + +Now we explain the other way of solving by means of regular +triangular sets. +The input system {\bf lp} is decomposed in the sense +of Lazard as finitely many regular triangular sets {\bf T1,...,Ts} +such that the affine variety associated with {\bf lp} +is the union of the regular-zeros sets of {\bf T1,...,Ts}. +Thus a decomposition in the sense of Lazard is also +a decomposition in the sense of Kalkbrener; the converse +is false as we have seen before. + +When the input system has a finite number of solutions, +both ways of solving provide similar decompositions as +we shall see with this second example (Caprasse). + + +\xtc{ +Define a polynomial system. +}{ +\spadpaste{f1 := y**2*z+2*x*y*t-2*x-z \free{z} \free{x} \free{y} \free{t} \bound{f1}} +} +\xtc{ +}{ +\spadpaste{f2 := -x**3*z+ 4*x*y**2*z+ 4*x**2*y*t+ 2*y**3*t+ 4*x**2- 10*y**2+ 4*x*z- 10*y*t+ 2 \free{z} \free{x} \free{y} \free{t} \bound{f2}} +} +\xtc{ +}{ +\spadpaste{f3 := 2*y*z*t+x*t**2-x-2*z \free{z} \free{x} \free{y} \free{t} \bound{f3}} +} +\xtc{ +}{ +\spadpaste{f4 := -x*z**3+ 4*y*z**2*t+ 4*x*z*t**2+ 2*y*t**3+ 4*x*z+ 4*z**2-10*y*t- 10*t**2+2 \free{z} \free{x} \free{y} \free{t} \bound{f4}} +} +\xtc{ +}{ +\spadpaste{lf := [f1, f2, f3, f4] \free{f1} \free{f2} \free{f3} \free{f4} \bound{lf}} +} + +\xtc{ +First of all, let us solve this system in the sense of Kalkbrener. +}{ +\spadpaste{zeroSetSplit(lf)$T \free{lf} \free{T}} +} +\xtc{ +And now in the sense of Lazard (or Wu and other authors). +}{ +\spadpaste{lts2 := zeroSetSplit(lf,false)$T \free{lf} \free{T} \bound{lts2}} +} + +Up to the ordering of the components, both decompositions are identical. + +\xtc{ +Let us check that each component has a finite number of solutions. +}{ +\spadpaste{[coHeight(ts) for ts in lts2] \free{lts2}} +} + +\xtc{ +Let us count the degrees of each component, +}{ +\spadpaste{degrees := [degree(ts) for ts in lts2] \free{lts2} \bound{degrees}} +} +\xtc{ +and compute their sum. +}{ +\spadpaste{reduce(+,degrees) \free{degrees}} +} + +We study now the options of the \spadfun{zeroSetSplit} operation. +As we have seen yet, there is an optional second argument +which is a boolean value. If this value is true (this +is the default) then the decomposition is computed +in the sense of Kalkbrener, otherwise it is computed +in the sense of Lazard. + +There is a second boolean optional argument that +can be used (in that case the first optional +argument must be present). +This second option allows you to get some information +during the computations. + +Therefore, we need to understand a little what is +going on during the computations. +An important feature of the algorithm is that +the intermediate computations are managed in some sense +like the processes of a Unix system. +Indeed, each intermediate computation may generate +other intermediate computations and the management +of all these computations is a crucial task for +the efficiency. +Thus any intermediate computation may be suspended, +killed or resumed, depending on algebraic considerations +that determine priorities for these processes. +The goal is of course to go as fast as possible +towards the final decomposition which means to avoid +as much as possible unnecessary computations. + +To follow the computations, one needs to set to +\spad{true} the second argument. +Then a lot of numbers and letters are displayed. +Between a \spad{[} and a \spad{]} one has +the state of the processes at a given time. +Just after \spad{[} one can see the number of +processes. +Then each process is represented by two numbers +between \spad{<} and \spad{>}. +A process consists of a list of polynomial {\bf ps} +and a triangular set {\bf ts}; its goal is to compute +the common zeros of {\bf ps} that belong to the +regular-zeros set of {\bf ts}. +After the processes, the number between pipes +gives the total number of polynomials +in all the sets \spad{ps}. +Finally, the number between braces gives the number +of components of a decomposition that are already +computed. This number may decrease. + +Let us take a third example (Czapor-Geddes-Wang) to see how these +informations are displayed. + +\xtc{ +Define a polynomial system. +}{ +\spadpaste{u : R := 2 \free{R} \bound{u}} +} +\xtc{ +}{ +\spadpaste{q1 := 2*(u-1)**2+ 2*(x-z*x+z**2)+ y**2*(x-1)**2- 2*u*x+ 2*y*t*(1-x)*(x-z)+ 2*u*z*t*(t-y)+ u**2*t**2*(1-2*z)+ 2*u*t**2*(z-x)+ 2*u*t*y*(z-1)+ 2*u*z*x*(y+1)+ (u**2-2*u)*z**2*t**2+ 2*u**2*z**2+ 4*u*(1-u)*z+ t**2*(z-x)**2 \free{z} \free{x} \free{y} \free{t} \free{u} \bound{q1}} +} +\xtc{ +}{ +\spadpaste{q2 := t*(2*z+1)*(x-z)+ y*(z+2)*(1-x)+ u*(u-2)*t+ u*(1-2*u)*z*t+ u*y*(x+u-z*x-1)+ u*(u+1)*z**2*t \free{z} \free{x} \free{y} \free{t} \free{u} \bound{q2}} +} +\xtc{ +}{ +\spadpaste{q3 := -u**2*(z-1)**2+ 2*z*(z-x)-2*(x-1) \free{z} \free{x} \free{y} \free{t} \free{u} \bound{q3}} +} +\xtc{ +}{ +\spadpaste{q4 := u**2+4*(z-x**2)+3*y**2*(x-1)**2- 3*t**2*(z-x)**2 +3*u**2*t**2*(z-1)**2+u**2*z*(z-2)+6*u*t*y*(z+x+z*x-1) \free{z} \free{x} \free{y} \free{t} \free{u} \bound{q4}} +} +\xtc{ +}{ +\spadpaste{lq := [q1, q2, q3, q4] \free{q1} \free{q2} \free{q3} \free{q4} \bound{lq}} +} + + +\xtc{ +Let us try the information option. +N.B. The timing should be between 1 and 10 minutes, depending on your machine. +}{ +\spadpaste{zeroSetSplit(lq,true,true)$T \free{lq} \free{T}} +} + +Between a sequence of processes, thus between a \spad{]} and a \spad{[} +you can see capital letters \spad{W, G, I} and lower case letters +\spad{i, w}. Each time a capital letter appears a non-trivial computation +has be performed and its result is put in a hash-table. +Each time a lower case letter appears a needed result has been +found in an hash-table. +The use of these hash-tables generally speed up the computations. +However, on very large systems, it may happen that these hash-tables +become too big to be handle by your Axiom configuration. +Then in these exceptional cases, you may prefer getting a result +(even if it takes a long time) than getting nothing. +Hence you need to know how to prevent the \spadtype{RSEGSET} constructor +from using these hash-tables. +In that case you will be using the \spadfun{zeroSetSplit} with five arguments. +The first one is the input system {\bf lp} as above. +The second one is a boolean value \spad{hash?} which is \spad{true} +iff you want to use hash-tables. +The third one is boolean value \spad{clos?} which is \spad{true} +iff you want to solve your system in the sense of Kalkbrener, +the other way remaining that of Lazard. +The fourth argument is boolean value \spad{info?} which is \spad{true} +iff you want to display information during the computations. +The last one is boolean value \spad{prep?} which is \spad{true} +iff you want to use some heuristics that are performed on the +input system before starting the real algorithm. +The value of this flag is \spad{true} when you are using \spadfun{zeroSetSplit} +with less than five arguments. +Note that there is no available signature for \spadfun{zeroSetSplit} with +four arguments. + +We finish this section by some remarks about both ways of +solving, in the sense of Kalkbrener or in the sense of Lazard. +For problems with a finite number of solutions, there are +theoretically equivalent and the resulting decompositions +are identical, up to the ordering of the components. +However, when solving in the sense of Lazard, the algorithm +behaves differently. +In that case, it becomes more incremental than in the sense +of Kalkbrener. That means the polynomials of the input system +are considered one after another whereas in the sense of Kalkbrener +the input system is treated more globally. + +This makes an important difference in positive dimension. +Indeed when solving in the sense of Kalkbrener, the +{\em Primeidealkettensatz} of Krull is used. +That means any regular triangular containing more polynomials +than the input system can be deleted. +This is not possible when solving in the sense of Lazard. +This explains why Kalkbrener's decompositions +usually contain less components than those of Lazard. +However, it may happen with some examples that the incremental process +(that cannot be used when solving in the sense of Kalkbrener) +provide a more efficient way of solving than the global one +even if the {\em Primeidealkettensatz} is used. +Thus just try both, with the various options, before concluding +that you cannot solve your favorite system with \spadfun{zeroSetSplit}. +There exist more options at the development level that are not +currently available in this public version. +So you are welcome to contact {\em marc@nag.co.uk} for more +information and help. + +\endscroll +\autobuttons +\end{page} + +@ +\section{roman.ht} +<>= +\newcommand{\RomanNumeralXmpTitle}{RomanNumeral} +\newcommand{\RomanNumeralXmpNumber}{9.68} + +@ +\subsection{RomanNumeral} +\label{RomanNumeralXmpPage} +\index{pages!RomanNumeralXmpPage!roman.ht} +\index{roman.ht!pages!RomanNumeralXmpPage} +\index{RomanNumeralXmpPage!roman.ht!pages} +<>= +\begin{page}{RomanNumeralXmpPage}{RomanNumeral} +\beginscroll + +The Roman numeral package was added to Axiom in MCMLXXXVI +for use in denoting higher order derivatives. + +\xtc{ +For example, let \spad{f} be a symbolic operator. +}{ +\spadpaste{f := operator 'f \bound{f}} +} +\xtc{ +This is the seventh derivative of \spad{f} with respect to \spad{x}. +}{ +\spadpaste{D(f x,x,7) \free{f}} +} +\xtc{ +You can have integers printed as Roman numerals by declaring variables to +be of type \spadtype{RomanNumeral} (abbreviation \spadtype{ROMAN}). +}{ +\spadpaste{a := roman(1978 - 1965) \bound{a}} +} + +This package now has a small but devoted group of followers that claim +this domain has shown its efficacy in many other contexts. +They claim that Roman numerals are every bit as useful as ordinary +integers. +\xtc{ +In a sense, they are correct, because Roman numerals form a ring and you +can therefore construct polynomials with Roman numeral coefficients, +matrices over Roman numerals, etc.. +}{ +\spadpaste{x : UTS(ROMAN,'x,0) := x \bound{x}} +} +\xtc{ +Was Fibonacci Italian or ROMAN? +}{ +\spadpaste{recip(1 - x - x**2) \free{x}} +} +\xtc{ +You can also construct fractions with Roman numeral numerators and +denominators, as this matrix Hilberticus illustrates. +}{ +\spadpaste{m : MATRIX FRAC ROMAN \bound{m}} +} +\xtc{ +}{ +\spadpaste{m := matrix [[1/(i + j) for i in 1..3] for j in 1..3] \free{m} \bound{m1}} +} +\xtc{ +Note that the inverse of the matrix has integral \spadtype{ROMAN} entries. +}{ +\spadpaste{inverse m \free{m1}} +} +\xtc{ +Unfortunately, the spoil-sports say that the fun stops when +the numbers get big---mostly +because the Romans didn't establish conventions about representing +very large numbers. +}{ +\spadpaste{y := factorial 10 \bound{y}} +} +\xtc{ +You work it out! +}{ +\spadpaste{roman y \free{y}} +} +Issue the system command +\spadcmd{)show RomanNumeral} +to display the full list of operations defined by +\spadtype{RomanNumeral}. +\endscroll +\autobuttons +\end{page} + +@ +\section{seg.ht} +<>= +\newcommand{\SegmentXmpTitle}{Segment} +\newcommand{\SegmentXmpNumber}{9.69} + +@ +\subsection{Segment} +\label{SegmentXmpPage} +\begin{itemize} +\item SegmentBindingXmpPage \ref{SegmentBindingXmpPage} on +page~pageref{SegmentBindingXmpPage} +\item UniversalSegmentXmpPage \ref{UniversalSegmentXmpPage} on +page~pageref{UniversalSegmentXmpPage} +\end{itemize} +\index{pages!SegmentXmpPage!seg.ht} +\index{seg.ht!pages!SegmentXmpPage} +\index{SegmentXmpPage!seg.ht!pages} +<>= +\begin{page}{SegmentXmpPage}{Segment} +\beginscroll + +The \spadtype{Segment} domain provides a generalized interval type. + +\labelSpace{2pc} +\xtc{ +Segments are created using the \spadSyntax{..} construct +by indicating the (included) end points. +}{ +\spadpaste{s := 3..10 \bound{s}} +} +\xtc{ +The first end point is called the \spadfunFrom{lo}{Segment} +and the second is called \spadfunFrom{hi}{Segment}. +}{ +\spadpaste{lo s \free{s}} +} +\xtc{ +These names are used even though the end points might belong to an +unordered set. +}{ +\spadpaste{hi s \free{s}} +} + +\xtc{ +In addition to the end points, each segment has an integer ``increment.'' +An increment can be specified using the ``\spad{by}'' construct. +\spadkey{by} +}{ +\spadpaste{t := 10..3 by -2 \bound{t}} +} +\xtc{ +This part can be obtained using the \spadfunFrom{incr}{Segment} function. +}{ +\spadpaste{incr s \free{s}} +} +\xtc{ +Unless otherwise specified, the increment is \spad{1}. +}{ +\spadpaste{incr t \free{t}} +} + +\xtc{ +A single value can be converted to a segment with equal end points. +This happens if segments and single values are mixed in a list. +}{ +\spadpaste{l := [1..3, 5, 9, 15..11 by -1] \bound{l}} +} + +\xtc{ +If the underlying type is an ordered ring, it is possible to perform +additional operations. +The \spadfunFrom{expand}{Segment} operation creates a list of +points in a segment. +}{ +\spadpaste{expand s \free{s}} +} +\xtc{ +If \spad{k > 0}, then \spad{expand(l..h by k)} creates the list +\spad{[l, l+k, ..., lN]} where \spad{lN <= h < lN+k}. +If \spad{k < 0}, then \spad{lN >= h > lN+k}. +}{ +\spadpaste{expand t \free{t}} +} + +\xtc{ +It is also possible to expand a list of segments. This is equivalent +to appending lists obtained by expanding each segment individually. +}{ +\spadpaste{expand l \free{l}} +} + +For more information on related topics, see +\downlink{`SegmentBinding'}{SegmentBindingXmpPage}\ignore{SegmentBinding} and +\downlink{`UniversalSegment'}{UniversalSegmentXmpPage} +\ignore{UniversalSegment}. +% +\showBlurb{Segment} +\endscroll +\autobuttons +\end{page} + +@ +\section{segbind.ht} +<>= +\newcommand{\SegmentBindingXmpTitle}{SegmentBinding} +\newcommand{\SegmentBindingXmpNumber}{9.70} + +@ +\subsection{SegmentBinding} +\label{SegmentBindingXmpPage} +\begin{itemize} +\item SegmentXmpPage \ref{SegmentXmpPage} on +page~pageref{SegmentXmpPage} +\item UniversalSegmentXmpPage \ref{UniversalSegmentXmpPage} on +page~pageref{UniversalSegmentXmpPage} +\end{itemize} +\index{pages!SegmentBindingXmpPage!segbind.ht} +\index{segbind.ht!pages!SegmentBindingXmpPage} +\index{SegmentBindingXmpPage!segbind.ht!pages} +<>= +\begin{page}{SegmentBindingXmpPage}{SegmentBinding} +\beginscroll + +The \spadtype{SegmentBinding} type is used +to indicate a range for a named symbol. + +\labelSpace{2pc} +\xtc{ +First give the symbol, then an \spadSyntax{=} and finally a +segment of values. +}{ +\spadpaste{x = a..b} +} +\xtc{ +This is used to provide a convenient +syntax for arguments to certain operations. +}{ +\spadpaste{sum(i**2, i = 0..n)} +} +\graphpaste{draw(x**2, x = -2..2)} + +\xtc{ +The left-hand side must be of type \spadtype{Symbol} but the +right-hand side can be a segment over any type. +}{ +\spadpaste{sb := y = 1/2..3/2 \bound{sb}} +} +\xtc{ +The left- and right-hand sides can be obtained using the +\spadfunFrom{variable}{SegmentBinding} and +\spadfunFrom{segment}{SegmentBinding} operations. +}{ +\spadpaste{variable(sb) \free{sb}} +} +\xtc{ +}{ +\spadpaste{segment(sb) \free{sb}} +} + +For more information on related topics, see +\downlink{`Segment'}{SegmentXmpPage}\ignore{Segment} and +\downlink{`UniversalSegment'}{UniversalSegmentXmpPage} +\ignore{UniversalSegment}. +% +\showBlurb{SegmentBinding} +\endscroll +\autobuttons +\end{page} +% + +@ +\section{set.ht} +<>= +\newcommand{\SetXmpTitle}{Set} +\newcommand{\SetXmpNumber}{9.71} + +@ +\subsection{Set} +\label{SetXmpPage} +See ListXmpPage \ref{ListXmpPage} on page~\pageref{ListXmpPage} +\index{pages!SetXmpPage!set.ht} +\index{set.ht!pages!SetXmpPage} +\index{SetXmpPage!set.ht!pages} +<>= +\begin{page}{SetXmpPage}{Set} +\beginscroll + +The \spadtype{Set} domain allows one to represent explicit finite +sets of values. +These are similar to lists, but duplicate elements are not allowed. +\xtc{ +Sets can be created by giving a fixed set of values \ldots +}{ +\spadpaste{s := set [x**2-1, y**2-1, z**2-1] \bound{s}} +} +\xtc{ +or by using a collect form, just as for lists. +In either case, the set is formed from a finite collection of values. +}{ +\spadpaste{t := set [x**i - i+1 for i in 2..10 | prime? i] \bound{t}} +} + +\xtc{ +The basic operations on sets are +\spadfunFrom{intersect}{Set}, \spadfunFrom{union}{Set}, +\spadfunFrom{difference}{Set}, +and \spadfunFrom{symmetricDifference}{Set}. +}{ +\spadpaste{i := intersect(s,t) \free{s t}\bound{i}} +} +\xtc{ +}{ +\spadpaste{u := union(s,t) \free{s t}\bound{u}} +} +\xtc{ +The set \spad{difference(s,t)} contains those members of \spad{s} which +are not in \spad{t}. +}{ +\spadpaste{difference(s,t) \free{s t}} +} +\xtc{ +The set \spad{symmetricDifference(s,t)} contains those elements which are +in \spad{s} or \spad{t} but not in both. +}{ +\spadpaste{symmetricDifference(s,t) \free{s t}} +} + +\xtc{ +Set membership is tested using the \spadfunFrom{member?}{Set} operation. +}{ +\spadpaste{member?(y, s) \free{s}} +} +\xtc{ +}{ +\spadpaste{member?((y+1)*(y-1), s) \free{s}} +} +\xtc{ +The \spadfunFrom{subset?}{Set} function determines whether one set is a subset +of another. +}{ +\spadpaste{subset?(i, s) \free{i s}} +} +\xtc{ +}{ +\spadpaste{subset?(u, s) \free{u s}} +} + +\xtc{ +When the base type is finite, the absolute complement of a set is +defined. +This finds the set of all multiplicative generators of +\spadtype{PrimeField 11}---the integers mod \spad{11.} +}{ +\spadpaste{gs := set [g for i in 1..11 | primitive?(g := i::PF 11)] \bound{gs}} +} +\xtc{ +The following values are not generators. +}{ +\spadpaste{complement gs \free{gs}} +} + +Often the members of a set are computed individually; in addition, +values can be inserted or removed from a set over the course of a +computation. +\xtc{ +There are two ways to do this: +}{ +\spadpaste{a := set [i**2 for i in 1..5] \bound{a}} +} +\xtc{ +One is to view a set as a data structure and to apply updating operations. +}{ +\spadpaste{insert!(32, a) \free{a}\bound{ainsert}} +} +\xtc{ +}{ +\spadpaste{remove!(25, a) \free{a}\bound{aremove}} +} +\xtc{ +}{ +\spadpaste{a \free{aremove ainsert}} +} +\xtc{ +The other way is to view a set as a mathematical entity and to +create new sets from old. +}{ +\spadpaste{b := b0 := set [i**2 for i in 1..5] \bound{b}} +} +\xtc{ +}{ +\spadpaste{b := union(b, {32}) \free{b}\bound{binsert}} +} +\xtc{ +}{ +\spadpaste{b := difference(b, {25}) \free{binsert}\bound{bremove}} +} +\xtc{ +}{ +\spadpaste{b0 \free{bremove}} +} + +For more information about lists, see +\downlink{`List'}{ListXmpPage}\ignore{List}. +\showBlurb{Set} +\endscroll +\autobuttons +\end{page} +% + +@ +\section{sint.ht} +<>= +\newcommand{\SingleIntegerXmpTitle}{SingleInteger} +\newcommand{\SingleIntegerXmpNumber}{9.72} + +@ +\subsection{SingleInteger} +\label{SingleIntegerXmpPage} +\begin{itemize} +\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on +page~pageref{ugTypesDeclarePage} +\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on +page~pageref{ugTypesPkgCallPage} +\item ugBrowsePage \ref{ugBrowsePage} on +page~pageref{ugBrowsePage} +\end{itemize} +\index{pages!SingleIntegerXmpPage!sint.ht} +\index{sint.ht!pages!SingleIntegerXmpPage} +\index{SingleIntegerXmpPage!sint.ht!pages} +<>= +\begin{page}{SingleIntegerXmpPage}{SingleInteger} +\beginscroll + +The \axiomType{SingleInteger} domain is intended to provide support +in Axiom for machine integer arithmetic. +It is generally much faster than (bignum) \axiomType{Integer} arithmetic +but suffers from a limited range of values. +Since Axiom can be implemented on top of various +dialects of Lisp, the actual representation of small integers +may not correspond exactly to the host machines integer representation. + +In the CCL implementation of Axiom (Release 2.1 onwards) the underlying +representation of \axiomType{SingleInteger} +is the same as \axiomType{Integer}. +The underlying Lisp primitives treat machine-word sized computations +specially. + +\xtc{ +You can discover the minimum and maximum values in your implementation +by using \spadfunFrom{min}{SingleInteger} and \spadfunFrom{max}{SingleInteger}. +}{ +\spadpaste{min()\$SingleInteger} +} +\xtc{ +}{ +\spadpaste{max()\$SingleInteger} +} +\xtc{ +To avoid confusion with \axiomType{Integer}, which is the default +type for integers, you usually need to work with declared variables +(\downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} +in Section \ugTypesDeclareNumber\ignore{ugTypesDeclare}) \ldots +}{ +\spadpaste{a := 1234 :: SingleInteger \bound{a}} +} +\xtc{ +or use package calling +(\downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} +in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall}). +}{ +\spadpaste{b := 124\$SingleInteger \bound{b}} +} +\xtc{ +You can add, multiply and subtract \axiomType{SingleInteger} objects, +and ask for the greatest common divisor (\spadfun{gcd}). +}{ +\spadpaste{gcd(a,b) \free{a}\free{b}} +} +\xtc{ +The least common multiple (\spadfun{lcm}) is also available. +}{ +\spadpaste{lcm(a,b) \free{a}\free{b}} +} + +\xtc{ +Operations \spadfunFrom{mulmod}{SingleInteger}, +\spadfunFrom{addmod}{SingleInteger}, +\spadfunFrom{submod}{SingleInteger}, and +\spadfunFrom{invmod}{SingleInteger} are similar---they provide +arithmetic modulo a given small integer. +Here is \spad{5 * 6 {\tt mod} 13}. +}{ +\spadpaste{mulmod(5,6,13)\$SingleInteger} +} +\xtc{ +To reduce a small integer modulo a prime, use +\spadfunFrom{positiveRemainder}{SingleInteger}. +}{ +\spadpaste{positiveRemainder(37,13)\$SingleInteger} +} +\xtc{ +Operations +\spadfunFrom{And}{SingleInteger}, +\spadfunFrom{Or}{SingleInteger}, +\spadfunFrom{xor}{SingleInteger}, +and \spadfunFrom{Not}{SingleInteger} +provide bit level operations on small integers. +}{ +\spadpaste{And(3,4)\$SingleInteger} +} +\xtc{ +Use +\spad{shift(int,numToShift)} to shift bits, where +\spad{i} is shifted left if \spad{numToShift} is positive, right +if negative. +}{ +\spadpaste{shift(1,4)\$SingleInteger} +} +\xtc{ +}{ +\spadpaste{shift(31,-1)\$SingleInteger} +} + +Many other operations are available for small integers, including +many of those provided for \axiomType{Integer}. +To see the other operations, use the Browse \HyperName{} facility +(\downlink{``\ugBrowseTitle''}{ugBrowsePage} in Section +\ugBrowseNumber\ignore{ugBrowse}). +\showBlurb{SingleInteger}. +\endscroll +\autobuttons +\end{page} + +@ +\section{sqmatrix.ht} +<>= +\newcommand{\SquareMatrixXmpTitle}{SquareMatrix} +\newcommand{\SquareMatrixXmpNumber}{9.74} + +@ +\subsection{SquareMatrix} +\label{SquareMatrixXmpPage} +\begin{itemize} +\item MatrixXmpPage \ref{MatrixXmpPage} on +page~pageref{MatrixXmpPage} +\item ugTypesWritingModesPage \ref{ugTypesWritingModesPage} on +page~pageref{ugTypesWritingModesPage} +\item ugTypesExposePage \ref{ugTypesExposePage} on +page~pageref{ugTypesExposePage} +\end{itemize} +\index{pages!SquareMatrixXmpPage!sqmatrix.ht} +\index{sqmatrix.ht!pages!SquareMatrixXmpPage} +\index{SquareMatrixXmpPage!sqmatrix.ht!pages} +<>= +\begin{page}{SquareMatrixXmpPage}{SquareMatrix} +\beginscroll + +The top level matrix type in Axiom is \spadtype{Matrix} +(see \downlink{`Matrix'}{MatrixXmpPage}\ignore{Matrix}), which +provides basic arithmetic and linear algebra functions. +However, since the matrices can be of any size it is not true that any pair +can be added or multiplied. +Thus \spadtype{Matrix} has little algebraic structure. + +Sometimes you want to use matrices as coefficients for polynomials +or in other algebraic contexts. In this case, \spadtype{SquareMatrix} +should be used. The domain \spadtype{SquareMatrix(n,R)} gives the ring of +\spad{n} by \spad{n} square matrices over \spad{R}. + +\xtc{ +Since \spadtype{SquareMatrix} is not normally exposed at the top level, +you must expose it before it can be used. +}{ +\spadpaste{)set expose add constructor SquareMatrix \bound{SQ}} +} +\xtc{ +Once \spad{SQMATRIX} has been exposed, +values can be created using the \spadfunFrom{squareMatrix}{SquareMatrix} +function. +}{ +\spadpaste{m := squareMatrix [[1,-\%i],[\%i,4]] \bound{m}\free{SQ}} +} +\xtc{ +The usual arithmetic operations are available. +}{ +\spadpaste{m*m - m \free{m}} +} +\xtc{ +Square matrices can be used where ring elements are required. +For example, here is a matrix with matrix entries. +}{ +\spadpaste{mm := squareMatrix [[m, 1], [1-m, m**2]] \free{m}\bound{mm}} +} +\xtc{ +Or you can construct a polynomial with square matrix coefficients. +}{ +\spadpaste{p := (x + m)**2 \free{m}\bound{p}} +} +\xtc{ +This value can be converted to a square matrix with polynomial coefficients. +}{ +\spadpaste{p::SquareMatrix(2, ?) \free{p}} +} + +For more information on related topics, see +\downlink{``\ugTypesWritingModesTitle''}{ugTypesWritingModesPage} +in Section \ugTypesWritingModesNumber\ignore{ugTypesWritingModes}, +\downlink{``\ugTypesExposeTitle''}{ugTypesExposePage} +in Section \ugTypesExposeNumber\ignore{ugTypesExpose}, and +\downlink{`Matrix'}{MatrixXmpPage}\ignore{Matrix}. +\showBlurb{SquareMatrix} +\endscroll +\autobuttons +\end{page} + +@ +\section{sregset.ht} +<>= +\newcommand{\SquareFreeRegularTriangularSetXmpTitle}{SquareFreeRegularTriangularSet} +\newcommand{\SquareFreeRegularTriangularSetXmpNumber}{9.75} + +@ +\subsection{SquareFreeRegularTriangularSet} +\label{SquareFreeRegularTriangularSetXmpPage} +\index{pages!SquareFreeRegularTriangularSetXmpPage!sregset.ht} +\index{sregset.ht!pages!SquareFreeRegularTriangularSetXmpPage} +\index{SquareFreeRegularTriangularSetXmpPage!sregset.ht!pages} +<>= +\begin{page}{SquareFreeRegularTriangularSetXmpPage} +{SquareFreeRegularTriangularSet} +\beginscroll +The \spadtype{SquareFreeRegularTriangularSet} domain constructor implements +square-free regular triangular sets. +See the \spadtype{RegularTriangularSet} domain constructor +for general regular triangular sets. +Let {\em T} be a regular triangular set consisting of polynomials +{\em t1, ..., tm} ordered by increasing main variables. +The regular triangular set {\em T} is square-free if {\em T} +is empty or if {\em t1, ..., tm-1} is square-free and if +the polynomial {\em tm} is square-free as +a univariate polynomial with coefficients in the tower +of simple extensions associated with {\em t1, ..., tm-1}. + +The main interest of square-free regular triangular sets +is that their associated towers of simple extensions +are product of fields. +Consequently, the saturated ideal of a square-free regular triangular set +is radical. +This property simplifies some of the operations related +to regular triangular sets. +However, building square-free regular triangular sets +is generally more expensive than building +general regular triangular sets. + +As the \spadtype{RegularTriangularSet} domain constructor, +the \spadtype{SquareFreeRegularTriangularSet} +domain constructor also implements +a method for solving polynomial systems by means of regular triangular sets. +This is in fact the same method with some adaptations to take into +account the fact that the computed regular chains are square-free. +Note that it is also possible to pass from a decomposition +into general regular triangular sets to a decomposition into +square-free regular triangular sets. +This conversion is used internally by the +\spadtype{LazardSetSolvingPackage} package constructor. + +{\bf N.B.} When solving polynomial systems with the +\spadtype{SquareFreeRegularTriangularSet} domain constructor +or the \spadtype{LazardSetSolvingPackage} package constructor, +decompositions have no redundant components. +See also \spadtype{LexTriangularPackage} and +\spadtype{ZeroDimensionalSolvePackage} for the case of +algebraic systems with a finite number of (complex) solutions. + +We shall explain now how to use the constructor +\spadtype{SquareFreeRegularTriangularSet}. + +This constructor takes four arguments. +The first one, {\bf R}, is the coefficient ring of the polynomials; +it must belong to the category \spadtype{GcdDomain}. +The second one, {\bf E}, is the exponent monoid of the polynomials; +it must belong to the category \spadtype{OrderedAbelianMonoidSup}. +the third one, {\bf V}, is the ordered set of variables; +it must belong to the category \spadtype{OrderedSet}. +The last one is the polynomial ring; +it must belong to the category \spadtype{RecursivePolynomialCategory(R,E,V)}. +The abbreviation for \spadtype{SquareFreeRegularTriangularSet} is +\spadtype{SREGSET}. + +Note that the way of understanding triangular decompositions +is detailed in the example of the \spadtype{RegularTriangularSet} +constructor. + +\xtc{ +Let us illustrate the use of this constructor +with one example (Donati-Traverso). +Define the coefficient ring. +}{ +\spadpaste{R := Integer \bound{R}} +} +\xtc{ +Define the list of variables, +}{ +\spadpaste{ls : List Symbol := [x,y,z,t] \bound{ls}} +} +\xtc{ +and make it an ordered set; +}{ +\spadpaste{V := OVAR(ls) \free{ls} \bound{V}} +} +\xtc{ +then define the exponent monoid. +}{ +\spadpaste{E := IndexedExponents V \free{V} \bound{E}} +} +\xtc{ +Define the polynomial ring. +}{ +\spadpaste{P := NSMP(R, V) \free{R} \free{V} \bound{P}} +} +\xtc{ +Let the variables be polynomial. +}{ +\spadpaste{x: P := 'x \free{P} \bound{x}} +} +\xtc{ +}{ +\spadpaste{y: P := 'y \free{P} \bound{y}} +} +\xtc{ +}{ +\spadpaste{z: P := 'z \free{P} \bound{z}} +} +\xtc{ +}{ +\spadpaste{t: P := 't \free{P} \bound{t}} +} +\xtc{ +Now call the \spadtype{SquareFreeRegularTriangularSet} domain constructor. +}{ +\spadpaste{ST := SREGSET(R,E,V,P) \free{R} \free{E} \free{V} \free{P} \bound{ST} } +} +\xtc{ +Define a polynomial system. +}{ +\spadpaste{p1 := x ** 31 - x ** 6 - x - y \free{x} \free{y} \bound{p1}} +} +\xtc{ +}{ +\spadpaste{p2 := x ** 8 - z \free{x} \free{z} \bound{p2}} +} +\xtc{ +}{ +\spadpaste{p3 := x ** 10 - t \free{x} \free{t} \bound{p3}} +} +\xtc{ +}{ +\spadpaste{lp := [p1, p2, p3] \free{p1} \free{p2} \free{p3} \bound{lp}} +} + +\xtc{ +First of all, let us solve this system in the sense of Kalkbrener. +}{ +\spadpaste{zeroSetSplit(lp)$ST \free{lp} \free{ST}} +} +\xtc{ +And now in the sense of Lazard (or Wu and other authors). +}{ +\spadpaste{zeroSetSplit(lp,false)$ST \free{lp} \free{ST} \bound{lts}} +} + +Now to see the difference with the \spadtype{RegularTriangularSet} domain constructor, +\xtc{ +we define: +}{ +\spadpaste{T := REGSET(R,E,V,P) \free{R} \free{E} \free{V} \free{P} \bound{T} } +} +\xtc{ +and compute: +}{ +\spadpaste{lts := zeroSetSplit(lp,false)$T \free{lp} \free{T} \bound{lts}} +} +If you look at the second set in both decompositions in the sense of Lazard, +you will see that the polynomial with main variable {\bf y} is not the same. + +Let us understand what has happened. +\xtc{ +We define: +}{ +\spadpaste{ts := lts.2 \free{lts} \bound{ts}} +} +\xtc{ +}{ +\spadpaste{pol := select(ts,'y)$T \free{ts} \free{y} \free{T} \bound{pol}} +} +\xtc{ +}{ +\spadpaste{tower := collectUnder(ts,'y)$T \free{ts} \free{y} \free{T} \bound{tower}} +} +\xtc{ +}{ +\spadpaste{pack := RegularTriangularSetGcdPackage(R,E,V,P,T) \free{R} \free{E} \free{V} \free{P} \free{T} \bound{pack}} +} +\xtc{ +Then we compute: +}{ +\spadpaste{toseSquareFreePart(pol,tower)$pack \free{pol} \free{tower} \free{pack}} +} +\endscroll +\autobuttons +\end{page} + +@ +\section{stbl.ht} +<>= +\newcommand{\SparseTableXmpTitle}{SparseTable} +\newcommand{\SparseTableXmpNumber}{9.73} + +@ +\subsection{SparseTable} +\label{SparseTableXmpPage} +\begin{itemize} +\item TableXmpPage \ref{TableXmpPage} on +page~pageref{TableXmpPage} +\item GeneralSparseTableXmpPage \ref{GeneralSparseTableXmpPage} on +page~pageref{GeneralSparseTableXmpPage} +\end{itemize} +\index{pages!SparseTableXmpPage!stbl.ht} +\index{stbl.ht!pages!SparseTableXmpPage} +\index{SparseTableXmpPage!stbl.ht!pages} +<>= +\begin{page}{SparseTableXmpPage}{SparseTable} +\beginscroll +% +The \spadtype{SparseTable} domain provides a general purpose +table type with default entries. +\xtc{ +Here we create a table to save strings under integer keys. +The value \spad{"Try again!"} is returned if no other value has been +stored for a key. +}{ +\spadpaste{t: SparseTable(Integer, String, "Try again!") := table() \bound{t}} +} +\xtc{ +Entries can be stored in the table. +}{ +\spadpaste{t.3 := "Number three" \free{t}\bound{t1}} +} +\xtc{ +}{ +\spadpaste{t.4 := "Number four" \free{t}\bound{t2}} +} +\xtc{ +These values can be retrieved as usual, but if a look up fails +the default entry will be returned. +}{ +\spadpaste{t.3 \free{t1}} +} +\xtc{ +}{ +\spadpaste{t.2 \free{t}} +} +\xtc{ +To see which values are explicitly stored, the +\spadfunFrom{keys}{SparseTable} and \spadfunFrom{entries}{SparseTable} +functions can be used. +}{ +\spadpaste{keys t \free{t1 t2}} +} +\xtc{ +}{ +\spadpaste{entries t \free{t1 t2}} +} +If a specific table representation +is required, the \spadtype{GeneralSparseTable} constructor should be used. +The domain \spadtype{SparseTable(K, E, dflt)} is equivalent to +\spadtype{GeneralSparseTable(K,E, Table(K,E), dflt)}. +For more information, see +\downlink{`Table'}{TableXmpPage}\ignore{Table} and +\downlink{`GeneralSparseTable'}{GeneralSparseTableXmpPage} +\ignore{GeneralSparseTable}. +\showBlurb{SparseTable} +\endscroll +\autobuttons +\end{page} + +@ +\section{stream.ht} +<>= +\newcommand{\StreamXmpTitle}{Stream} +\newcommand{\StreamXmpNumber}{9.76} + +@ +\subsection{Stream} +\label{StreamXmpPage} +\begin{itemize} +\item ugLangItsPage \ref{ugLangItsPage} on +page~pageref{ugLangItsPage} +\item ugProblemSeriesPage \ref{ugProblemSeriesPage} on +page~pageref{ugProblemSeriesPage} +\item ContinuedFractionXmpPage \ref{ContinuedFractionXmpPage} on +page~pageref{ContinuedFractionXmpPage} +\item ListXmpPage \ref{ListXmpPage} on +page~pageref{ListXmpPage} +\end{itemize} +\index{pages!StreamXmpPage!stream.ht} +\index{stream.ht!pages!StreamXmpPage} +\index{StreamXmpPage!stream.ht!pages} +<>= +\begin{page}{StreamXmpPage}{Stream} +\beginscroll + +A \spadtype{Stream} object is represented as a list whose +last element contains the +wherewithal to create the next element, should it ever be required. +\xtc{ +Let \spad{ints} be the infinite stream of non-negative integers. +}{ +\spadpaste{ints := [i for i in 0..] \bound{ints}} +} +By default, ten stream elements are calculated. +This number may be changed to something else by the system command +\spadcmd{)set streams calculate}. +For the display purposes of this book, we have chosen a smaller value. +\xtc{ +More generally, you can construct a stream by specifying its initial +value and a function which, when given an element, creates the next element. +}{ +\spadpaste{f : List INT -> List INT \bound{fdec}} +} +\xtc{ +}{ +\spadpaste{f x == [x.1 + x.2, x.1] \bound{f}\free{fdec}} +} +\xtc{ +}{ +\spadpaste{fibs := [i.2 for i in [generate(f,[1,1])]] \bound{fibs}\free{f}} +} +\xtc{ +You can create the stream of odd non-negative integers by either filtering +them from the integers, or by evaluating an expression for each integer. +}{ +\spadpaste{[i for i in ints | odd? i] \free{ints}} +} +\xtc{ +}{ +\spadpaste{odds := [2*i+1 for i in ints]\bound{odds}\free{ints}} +} +\xtc{ +You can accumulate the initial segments of a stream using the +\spadfunFrom{scan}{StreamFunctions2} operation. +}{ +\spadpaste{scan(0,+,odds) \free{odds}} +} +\xtc{ +The corresponding elements of +two or more streams can be combined in this way. +}{ +\spadpaste{[i*j for i in ints for j in odds]\free{ints} \free{odds}} +} +\xtc{ +}{ +\spadpaste{map(*,ints,odds)\free{ints odds}} +} +\xtc{ +Many operations similar to those applicable to lists are available for +streams. +}{ +\spadpaste{first ints \free{ints}} +} +\xtc{ +}{ +\spadpaste{rest ints \free{ints}} +} +\xtc{ +}{ +\spadpaste{fibs 20 \free{fibs}} +} +The packages \spadtype{StreamFunctions1}, +\spadtype{StreamFunctions2} and +\spadtype{StreamFunctions3} export some useful stream manipulation +operations. +For more information, see +\downlink{``\ugLangItsTitle''}{ugLangItsPage} in Section +\ugLangItsNumber\ignore{ugLangIts}, +\downlink{``\ugProblemSeriesTitle''}{ugProblemSeriesPage} +in Section \ugProblemSeriesNumber\ignore{ugProblemSeries}, +\downlink{`ContinuedFraction'}{ContinuedFractionXmpPage} +\ignore{ContinuedFraction}, and +\downlink{`List'}{ListXmpPage}\ignore{List}. +% +\showBlurb{Stream} +\endscroll +\autobuttons +\end{page} + +@ +\section{string.ht} +<>= +\newcommand{\StringXmpTitle}{String} +\newcommand{\StringXmpNumber}{9.77} + +@ +\subsection{String} +\label{StringXmpPage} +\begin{itemize} +\item CharacterXmpPage \ref{CharacterXmpPage} on +page~pageref{CharacterXmpPage} +\item CharacterClassXmpPage \ref{CharacterClassXmpPage} on +page~pageref{CharacterClassXmpPage} +\end{itemize} +\index{pages!StringXmpPage!string.ht} +\index{string.ht!pages!StringXmpPage} +\index{StringXmpPage!string.ht!pages} +<>= +\begin{page}{StringXmpPage}{String} +\beginscroll + +The type \spadtype{String} provides character strings. Character +strings provide all the operations for a one-dimensional array of +characters, plus additional operations for manipulating text. For +more information on related topics, see +\downlink{`Character'}{CharacterXmpPage}\ignore{Character} and +\downlink{`CharacterClass'}{CharacterClassXmpPage}\ignore{CharacterClass}. +You can also issue the system command \spadcmd{)show String} to +display the full list of operations defined by \spadtype{String}. + +\xtc{ +String values can be created using double quotes. +}{ +\spadpaste{hello := "Hello, I'm Axiom!" \bound{hello}} +} +\xtc{ +Note, however, that double quotes and underscores must be preceded by +an extra underscore. +}{ +\spadpaste{said := "Jane said, _"Look!_"" \bound{said}} +} +\xtc{ +}{ +\spadpaste{saw := "She saw exactly one underscore: __." \bound{saw}} +} +\xtc{ +It is also possible to use \spadfunFrom{new}{String} to create a string of any size +filled with a given character. +Since there are many \spadfun{new} functions +it is necessary to indicate the desired type. +}{ +\spadpaste{gasp: String := new(32, char "x") \bound{gasp}} +} +\xtc{ +The length of a string is given by \spadopFrom{\#}{List}. +}{ +\spadpaste{\#gasp \free{gasp}} +} +\xtc{ +Indexing operations allow characters to be extracted or replaced in strings. +For any string \spad{s}, indices lie in the range \spad{1..\#s}. +}{ +\spadpaste{hello.2 \free{hello}} +} +\xtc{ +Indexing is really just the application of a string to a subscript, +so any application syntax works. +}{ +\spadpaste{hello 2 \free{hello}} +} +\xtc{ +}{ +\spadpaste{hello(2) \free{hello}} +} +\xtc{ +If it is important not to modify a given string, it should be copied +before any updating operations are used. +}{ +\spadpaste{hullo := copy hello \free{hello}\bound{hullo0}} +} +\xtc{ +}{ +\spadpaste{hullo.2 := char "u"; [hello, hullo] \free{hullo0 hello}\bound{hullo}} +} + +\xtc{ +Operations are provided to split and join strings. +The \spadfunFrom{concat}{String} operation allows several strings to be joined +together. +}{ +\spadpaste{saidsaw := concat ["alpha","---","omega"] \bound{saidsaw}} +} +\xtc{ +There is a version of \spadfunFrom{concat}{String} that works with +two strings. +}{ +\spadpaste{concat("hello ","goodbye")} +} +\xtc{ +Juxtaposition can also be used to concatenate strings. +}{ +\spadpaste{"This " "is " "several " "strings " "concatenated."} +} +\xtc{ +Substrings are obtained by giving an index range. +}{ +\spadpaste{hello(1..5) \free{hello}} +} +\xtc{ +}{ +\spadpaste{hello(8..) \free{hello}} +} +\xtc{ +A string can be split into several substrings by giving a separation character +or character class. +}{ +\spadpaste{split(hello, char " ") \free{hello}} +} +\xtc{ +}{ +\spadpaste{other := complement alphanumeric(); \bound{other}} +} +\xtc{ +}{ +\spadpaste{split(saidsaw, other) \free{saidsaw other}} +} +\xtc{ +Unwanted characters can be trimmed from the beginning or end of a string +using the operations \spadfunFrom{trim}{String}, \spadfunFrom{leftTrim}{String} +and \spadfunFrom{rightTrim}{String}. +}{ +\spadpaste{trim ("\#\# ++ relax ++ \#\#", char "\#")} +} +\xtc{ +Each of these functions takes a string and a second argument to specify +the characters to be discarded. +}{ +\spadpaste{trim ("\#\# ++ relax ++ \#\#", other) \free{other}} +} +\xtc{ +The second argument can be given +either as a single character or as a character class. +}{ +\spadpaste{leftTrim ("\#\# ++ relax ++ \#\#", other) \free{other}} +} +\xtc{ +}{ +\spadpaste{rightTrim("\#\# ++ relax ++ \#\#", other) \free{other}} +} + +\xtc{ +Strings can be changed to upper case or lower case using the operations +\spadfunFrom{upperCase}{String}, \spadfunFromX{upperCase}{String}, +\spadfunFrom{lowerCase}{String} and +\spadfunFromX{lowerCase}{String}. +}{ +\spadpaste{upperCase hello \free{hello}} +} +\xtc{ +The versions with the exclamation mark +change the original string, while the others produce a copy. +}{ +\spadpaste{lowerCase hello \free{hello}} +} + +\xtc{ +Some basic string matching is provided. +The function \spadfunFrom{prefix?}{String} +tests whether one string is an initial prefix of another. +}{ +\spadpaste{prefix?("He", "Hello")} +} +\xtc{ +}{ +\spadpaste{prefix?("Her", "Hello")} +} +\xtc{ +A similar function, \spadfunFrom{suffix?}{String}, tests for suffixes. +}{ +\spadpaste{suffix?("", "Hello")} +} +\xtc{ +}{ +\spadpaste{suffix?("LO", "Hello")} +} +\xtc{ +The function \spadfunFrom{substring?}{String} tests for a substring +given a starting +position. +}{ +\spadpaste{substring?("ll", "Hello", 3)} +} +\xtc{ +}{ +\spadpaste{substring?("ll", "Hello", 4)} +} + +\xtc{ +A number of \spadfunFrom{position}{String} functions locate things in strings. +If the first argument to position is a string, then \spad{position(s,t,i)} +finds the location of \spad{s} as a substring of \spad{t} starting the +search at position \spad{i}. +}{ +\spadpaste{n := position("nd", "underground", 1) \bound{n}} +} +\xtc{ +}{ +\spadpaste{n := position("nd", "underground", n+1) \free{n} \bound{n1}} +} +\xtc{ +If \spad{s} is not found, then \spad{0} is returned (\spad{minIndex(s)-1} +in \spadtype{IndexedString}). +}{ +\spadpaste{n := position("nd", "underground", n+1) \free{n1}\bound{n2}} +} +\xtc{ +To search for a specific character or a member of a character class, +a different first argument is used. +}{ +\spadpaste{position(char "d", "underground", 1)} +} +\xtc{ +}{ +\spadpaste{position(hexDigit(), "underground", 1)} +} + +\endscroll +\autobuttons +\end{page} + +@ +\section{strtbl.ht} +<>= +\newcommand{\StringTableXmpTitle}{StringTable} +\newcommand{\StringTableXmpNumber}{9.78} + +@ +\subsection{StringTable} +\label{StringTableXmpPage} +See TableXmpPage \ref{TableXmpPage} on page~\pageref{TableXmpPage} +\index{pages!StringTableXmpPage!strtbl.ht} +\index{strtbl.ht!pages!StringTableXmpPage} +\index{StringTableXmpPage!strtbl.ht!pages} +<>= +\begin{page}{StringTableXmpPage}{StringTable} +\beginscroll +% +This domain provides a table type in which the keys are known to +be strings so special techniques can be used. +Other than performance, the type \spadtype{StringTable(S)} should +behave exactly the same way as \spadtype{Table(String,S)}. +See \downlink{`Table'}{TableXmpPage}\ignore{Table} +for general information about tables. +\showBlurb{StringTable} + +\xtc{ +This creates a new table whose keys are strings. +}{ +\spadpaste{t: StringTable(Integer) := table() \bound{t}} +} +\xtc{ +The value associated with each string key is the number of +characters in the string. +}{ +\begin{spadsrc}[\free{t}\bound{h}] +for s in split("My name is Ian Watt.",char " ") + repeat + t.s := #s +\end{spadsrc} +} +\xtc{ +}{ +\spadpaste{for key in keys t repeat output [key, t.key] \free{t h}} +} +\endscroll +\autobuttons +\end{page} +% + +@ +\section{symbol.ht} +<>= +\newcommand{\SymbolXmpTitle}{Symbol} +\newcommand{\SymbolXmpNumber}{9.79} + +@ +\subsection{Symbol} +\label{SymbolXmpPage} +\index{pages!SymbolXmpPage!symbol.ht} +\index{symbol.ht!pages!SymbolXmpPage} +\index{SymbolXmpPage!symbol.ht!pages} +<>= +\begin{page}{SymbolXmpPage}{Symbol} +\beginscroll + +Symbols are one of the basic types manipulated by Axiom. +The \spadtype{Symbol} domain provides ways to create +symbols of many varieties. +\showBlurb{Symbol} + +\xtc{ +The simplest way to create a symbol is to ``single quote'' an identifier. +}{ +\spadpaste{X: Symbol := 'x \bound{X}} +} +\xtc{ +This gives the symbol even if \spad{x} has been assigned a value. +If \spad{x} has not been assigned a value, then it is possible to omit +the quote. +}{ +\spadpaste{XX: Symbol := x} +} +\xtc{ +Declarations must be used when working +with symbols, because otherwise the interpreter tries to place +values in a more specialized type \spadtype{Variable}. +}{ +\spadpaste{A := 'a} +} +\xtc{ +}{ +\spadpaste{B := b} +} +\xtc{ +The normal way of entering polynomials uses this fact. +}{ +\spadpaste{x**2 + 1} +} + +\xtc{ +Another convenient way to create symbols is to convert a string. +This is useful when the name is to be constructed by a program. +}{ +\spadpaste{"Hello"::Symbol} +} +\xtc{ +Sometimes it is necessary to generate new unique symbols, for example, to +name constants of integration. +The expression \spad{new()} generates a symbol starting with \spad{\%}. +}{ +\spadpaste{new()\$Symbol} +} +\xtc{ +Successive calls to \spadfunFrom{new}{Symbol} produce different symbols. +}{ +\spadpaste{new()\$Symbol} +} +\xtc{ +The expression \spad{new("s")} produces a symbol starting with \spad{\%s}. +}{ +\spadpaste{new("xyz")\$Symbol} +} + +\xtc{ +A symbol can be adorned in various ways. +The most basic thing is applying a symbol to a list +of subscripts. +}{ +\spadpaste{X[i,j] \free{X}} +} + +\xtc{ +Somewhat less pretty is to attach subscripts, superscripts or arguments. +}{ +\spadpaste{U := subscript(u, [1,2,1,2]) \bound{U}} +} +\xtc{ +}{ +\spadpaste{V := superscript(v, [n]) \bound{V}} +} +\xtc{ +}{ +\spadpaste{P := argscript(p, [t]) \bound{P}} +} + +\xtc{ +It is possible to test whether a symbol has scripts using the +\spadfunFrom{scripted?}{Symbol} test. +}{ +\spadpaste{scripted? U \free{U}} +} +\xtc{ +}{ +\spadpaste{scripted? X \free{X}} +} +\xtc{ +If a symbol is not scripted, then it may be converted to a string. +}{ +\spadpaste{string X \free{X}} +} +\xtc{ +The basic parts can always be extracted using the +\spadfunFrom{name}{Symbol} and \spadfunFrom{scripts}{Symbol} operations. +}{ +\spadpaste{name U \free{U}} +} +\xtc{ +}{ +\spadpaste{scripts U \free{U}} +} +\xtc{ +}{ +\spadpaste{name X \free{X}} +} +\xtc{ +}{ +\spadpaste{scripts X \free{X}} +} + +\xtc{ +The most general form is obtained using the \spadfunFrom{script}{Symbol} +operation. +This operation takes an argument which is a list containing, in this order, +lists of subscripts, superscripts, presuperscripts, presubscripts and +arguments to a symbol. +}{ +\spadpaste{M := script(Mammoth, [[i,j],[k,l],[0,1],[2],[u,v,w]]) \bound{M}} +} +\xtc{ +}{ +\spadpaste{scripts M \free{M}} +} +\xtc{ +If trailing lists of scripts are omitted, they are assumed to be empty. +}{ +\spadpaste{N := script(Nut, [[i,j],[k,l],[0,1]]) \bound{N}} +} +\xtc{ +}{ +\spadpaste{scripts N \free{N}} +} +\endscroll +\autobuttons +\end{page} + +@ +\section{table.ht} +<>= +\newcommand{\TableXmpTitle}{Table} +\newcommand{\TableXmpNumber}{9.80} + +@ +\subsection{Table} +\label{TableXmpPage} +\begin{itemize} +\item AssociationListXmpPage \ref{AssociationListXmpPage} on +page~pageref{AssociationListXmpPage} +\item EqTableXmpPage \ref{EqTableXmpPage} on +page~pageref{EqTableXmpPage} +\item StringTableXmpPage \ref{StringTableXmpPage} on +page~pageref{StringTableXmpPage} +\item SparseTableXmpPage \ref{SparseTableXmpPage} on +page~pageref{SparseTableXmpPage} +\item KeyedAccessFileXmpPage \ref{KeyedAccessFileXmpPage} on +page~pageref{KeyedAccessFileXmpPage} +\end{itemize} +\index{pages!TableXmpPage!table.ht} +\index{table.ht!pages!TableXmpPage} +\index{TableXmpPage!table.ht!pages} +<>= +\begin{page}{TableXmpPage}{Table} +\beginscroll + +The \spadtype{Table} constructor provides a general structure +for associative storage. +This type provides hash tables in which data objects +can be saved according to keys of any type. +For a given table, specific types must be chosen for the keys and entries. + +\xtc{ +In this example the keys to the table are polynomials with +integer coefficients. +The entries in the table are strings. +}{ +\spadpaste{t: Table(Polynomial Integer, String) := table() \bound{t}} +} +\xtc{ +To save an entry in the table, the \spadfunFrom{setelt}{Table} operation is used. +This can be called directly, giving the table a key and an entry. +}{ +\spadpaste{setelt(t, x**2 - 1, "Easy to factor") \bound{p1}\free{t}} +} +\xtc{ +Alternatively, you can use assignment syntax. +}{ +\spadpaste{t(x**3 + 1) := "Harder to factor" \bound{p2}\free{p1}} +} +\xtc{ +}{ +\spadpaste{t(x) := "The easiest to factor" \bound{p3}\free{p2}} +} +\xtc{ +Entries are retrieved from the table by calling the +\spadfunFrom{elt}{Table} operation. +}{ +\spadpaste{elt(t, x) \free{p3}} +} +\xtc{ +This operation is called when a table is ``applied'' to a key using +this or the following syntax. +}{ +\spadpaste{t.x \free{p3}} +} +\xtc{ +}{ +\spadpaste{t x \free{p3}} +} +\xtc{ +Parentheses are used only for grouping. They are needed if the key is +an infixed expression. +}{ +\spadpaste{t.(x**2 - 1) \free{p3}} +} +\xtc{ +Note that the \spadfunFrom{elt}{Table} operation is used only when the +key is known to be in the table---otherwise an error is generated. +}{ +\spadpaste{t (x**3 + 1) \free{p3}} +} + +\xtc{ +You can get a list of all the keys to a table using the +\spadfunFrom{keys}{Table} operation. +}{ +\spadpaste{keys t \free{p3}} +} +\xtc{ +If you wish to test whether a key is in a table, the +\spadfunFrom{search}{Table} operation is used. +This operation returns either an entry or \spad{"failed"}. +}{ +\spadpaste{search(x, t) \free{p3}} +} +\xtc{ +}{ +\spadpaste{search(x**2, t) \free{p3}} +} +\xtc{ +The return type is a union so the success of the search can be tested +using \spad{case}. +\spadkey{case} +}{ +\spadpaste{search(x**2, t) case "failed" \free{p3}} +} +\xtc{ +The \spadfunFromX{remove}{Table} operation is used to delete values from a +table. +}{ +\spadpaste{remove!(x**2-1, t) \free{p3} \bound{p4}} +} +\xtc{ +If an entry exists under the key, then it is returned. Otherwise +\spadfunFromX{remove}{Table} returns \spad{"failed"}. +}{ +\spadpaste{remove!(x-1, t) \free{p4}\bound{p5}} +} + +\xtc{ +The number of key-entry pairs can be found using the +\spadfunFrom{\#}{Table} operation. +}{ +\spadpaste{\#t \free{p5}} +} +\xtc{ +Just as \spadfunFrom{keys}{Table} returns a list of keys to the table, a +list of all the entries can be obtained using the +\spadfunFrom{members}{Table} operation. +}{ +\spadpaste{members t \free{p5}} +} +\xtc{ +A number of useful operations take functions and map them on to the +table to compute the result. Here we count the entries which +have \spad{"Hard"} as a prefix. +}{ +\spadpaste{count(s: String +-> prefix?("Hard", s), t) \free{p5}} +} + +Other table types are provided to support various needs. +\indent{4} +\beginitems +\item[-] \spadtype{AssociationList} gives a list with a table view. +This allows new entries to be appended onto the front of the list +to cover up old entries. +This is useful when table entries need to be stacked or when +frequent list traversals are required. +See +\downlink{`AssociationList'}{AssociationListXmpPage}\ignore{AssociationList} +for more information. +\item[-] \spadtype{EqTable} gives tables in which keys are considered +equal only when they are in fact the same instance of a structure. +See \downlink{`EqTable'}{EqTableXmpPage}\ignore{EqTable} for more information. +\item[-] \spadtype{StringTable} should be used when the keys are known to +be strings. +See \downlink{`StringTable'}{StringTableXmpPage}\ignore{StringTable} +for more information. +\item[-] \spadtype{SparseTable} provides tables with default +entries, so +lookup never fails. The \spadtype{GeneralSparseTable} constructor +can be used to make any table type behave this way. +See \downlink{`SparseTable'}{SparseTableXmpPage}\ignore{SparseTable} +for more information. +\item[-] \spadtype{KeyedAccessFile} allows values to be saved in a file, +accessed as a table. +See +\downlink{`KeyedAccessFile'}{KeyedAccessFileXmpPage}\ignore{KeyedAccessFile} +for more information. +\enditems +\indent{0} +% +\showBlurb{Table} +\endscroll +\autobuttons +\end{page} + +@ +\section{textfile.ht} +<>= +\newcommand{\TextFileXmpTitle}{TextFile} +\newcommand{\TextFileXmpNumber}{9.81} + +@ +\subsection{TextFile} +\label{TextFileXmpPage} +\begin{itemize} +\item FileXmpPage \ref{FileXmpPage} on +page~pageref{FileXmpPage} +\item KeyedAccessFileXmpPage \ref{KeyedAccessFileXmpPage} on +page~pageref{KeyedAccessFileXmpPage} +\item LibraryXmpPage \ref{LibraryXmpPage} on +page~pageref{LibraryXmpPage} +\end{itemize} +\index{pages!TextFileXmpPage!textfile.ht} +\index{textfile.ht!pages!TextFileXmpPage} +\index{TextFileXmpPage!textfile.ht!pages} +<>= +\begin{page}{TextFileXmpPage}{TextFile} +\beginscroll + +The domain \spadtype{TextFile} allows Axiom to read and write +character data and exchange text with other programs. +This type behaves in Axiom much like a \spadtype{File} of strings, +with additional operations to cause new lines. +We give an example of how to produce an upper case copy of a file. +\xtc{ +This is the file from which we read the text. +}{ +\spadpaste{f1: TextFile := open("/etc/group", "input") \bound{f1}} +} +\xtc{ +This is the file to which we read the text. +}{ +\spadpaste{f2: TextFile := open("/tmp/MOTD", "output") \bound{f2}} +} +\xtc{ +Entire lines are handled using the \spadfunFromX{readLine}{TextFile} and +\spadfunFromX{writeLine}{TextFile} operations. +}{ +\spadpaste{l := readLine! f1 \free{f1}\bound{l}} +} +\xtc{ +}{ +\spadpaste{writeLine!(f2, upperCase l) \free{f2 l}} +} +\xtc{ +Use the +\spadfunFrom{endOfFile?}{TextFile} operation to check if you have +reached the end of the file. +}{ +\begin{spadsrc}[\free{f1 f2}\bound{Copied}] +while not endOfFile? f1 repeat + s := readLine! f1 + writeLine!(f2, upperCase s) +\end{spadsrc} +} +\xtc{ +The file \spad{f1} is exhausted and should be closed. +}{ +\spadpaste{close! f1 \free{Copied}\bound{closed1}} +} + +\xtc{ +It is sometimes useful to write lines a bit at a time. +The \spadfunFromX{write}{TextFile} operation allows this. +}{ +\spadpaste{write!(f2, "-The-") \free{Copied}\bound{tthhee}} +} +\xtc{ +}{ +\spadpaste{write!(f2, "-End-") \free{tthhee}\bound{eenndd}} +} +\xtc{ +This ends the line. +This is done in a machine-dependent manner. +}{ +\spadpaste{writeLine! f2 \free{eenndd}\bound{LastLine}} +} +\xtc{ +}{ +\spadpaste{close! f2 \free{LastLine}\bound{closed2}} +} +\noOutputXtc{ +Finally, clean up. +}{ +\spadpaste{)system rm /tmp/MOTD \free{closed2}} +} + +For more information on related topics, see +\downlink{`File'}{FileXmpPage}\ignore{File}, +\downlink{`KeyedAccessFile'}{KeyedAccessFileXmpPage}\ignore{KeyedAccessFile}, and +\downlink{`Library'}{LibraryXmpPage}\ignore{Library}. +\showBlurb{TextFile} +\endscroll +\autobuttons +\end{page} +% + +@ +\section{topics.ht} +\subsection{Axiom Topics} +\label{TopicPage} +\includegraphics[scale=.5]{ps/v71topics.eps} +\index{images!topics} + +Called from ``Root Page'' (RootPage) \ref{RootPage} on page~\pageref{RootPage} +\begin{itemize} +\item ``Numbers'' (NumberPage) \ref{NumberPage} on page~\pageref{NumberPage} +\item ``Polynomials'' (PolynomialPage) +\ref{PolynomialPage} on page~\pageref{PolynomialPage} +\item ``Functions'' (FunctionPage) +\ref{FunctionPage} on page~\pageref{FunctionPage} +\item ``Solving Equations'' (EquationPage) +\ref{EquationPage} on page~\pageref{EquationPage} +\item ``Calculus'' (CalculusPage) +\ref{CalculusPage} on page~\pageref{CalculusPage} +\item ``Linear Algebra'' (LinAlgPage) +\ref{LinAlgPage} on page~\pageref{LinAlgPage} +\item ``Graphics'' (GraphicsPage) +\ref{GraphicsPage} on page~\pageref{GraphicsPage} +\item ``Algebra'' (AlgebraPage) +\ref{AlgebraPage} on page~\pageref{AlgebraPage} +\end{itemize} +\index{pages!TopicPage!topics.ht} +\index{topics.ht!pages!TopicPage} +\index{TopicPage!topics.ht!pages} +<>= +\begin{page}{TopicPage}{Axiom Topics} +\beginscroll +Select a topic below: % or +%\lispmemolink{search}{(|htTutorialSearch| '|\stringvalue{pattern}|))} +%for string (use {\em *} for wild card): +%\newline\inputstring{pattern}{58}{} +\beginmenu +\menumemolink{Numbers}{NumberPage}\tab{18} +A look at different types of numbers + +\menumemolink{Polynomials}{PolynomialPage}\tab{18} +Polynomials in Axiom +% +\menumemolink{Functions}{FunctionPage}\tab{18} +Built-in and user-defined functions +% +\menumemolink{Solving Equations}{EquationPage}\tab{18} +Facilities for solving equations +% +\menumemolink{Calculus}{CalculusPage}\tab{18} +Using Axiom to do calculus +% +\menumemolink{Linear Algebra}{LinAlgPage}\tab{18} +Axiom's linear algebra facilities +% +\menumemolink{Graphics}{GraphicsPage}\tab{18} +Axiom's graphics facilities +% +\menumemolink{Algebra}{AlgebraPage}\tab{18} +Axiom's abstract algebra facilities +% +\endmenu +\endscroll +\end{page} + +@ +\subsection{Solving Equations} +\label{EquationPage} +\includegraphics[scale=.5]{ps/v71equationpage.eps} +\index{images!equationpage} + +Called from ``Topics'' (TopicPage) \ref{TopicPage} on page~\pageref{TopicPage} +\begin{itemize} +\item ``Solution of Systems of Linear Equations''\\ +(ugxProblemLinSysPage) \ref{ugxProblemLinSysPage} on +page~\pageref{ugxProblemLinSysPage} +\item ``Solution of a Single Polynomial Equation''\\ +(ugxProblemOnePolPage) \ref{ugxProblemOnePolPage} on +page~\pageref{ugxProblemOnePolPage} +\item ``Solution of Systems of Polynomial Equations''\\ +(ugxProblemPolSysPage) \ref{ugxProblemPolSysPage} on +page~\pageref{ugxProblemPolSysPage} +\item ``Solution of Differential Equations''\\ +(ugProblemDEQPage) \ref{ugProblemDEQPage} on +page~\pageref{ugProblemDEQPage} +\end{itemize} +\index{pages!EquationPage!topics.ht} +\index{topics.ht!pages!EquationPage} +\index{EquationPage!topics.ht!pages} +<>= +\begin{page}{EquationPage}{Solving Equations} +\beginscroll +Axiom lets you solve equations of various types: +\beginmenu + \menulink{Solution of Systems of Linear Equations}{ugxProblemLinSysPage} + \newline Solve systems of linear equations. + \menulink{Solution of a Single Polynomial Equation}{ugxProblemOnePolPage} + \newline Find roots of polynomials. + \menulink{Solution of Systems of Polynomial Equations}{ugxProblemPolSysPage} + \newline Solve systems of polynomial equations. + \menulink{Solution of Differential Equations}{ugProblemDEQPage} + \newline Closed form and series solutions of differential equations. +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Linear Algebra} +\label{LinAlgPage} +\includegraphics[scale=.5]{ps/v71linalgpage.eps} +\index{images!linalgpage} + +Called from ``Topics'' (TopicPage) \ref{TopicPage} on page~\pageref{TopicPage} +\begin{itemize} +\item ``Introduction'' (ugIntroTwoDimPage) +\ref{ugIntroTwoDimPage} on page~\pageref{ugIntroTwoDimPage} +\item ``Creating Matrices'' (ugxMatrixCreatePage) +\ref{ugxMatrixCreatePage} on page~\pageref{ugxMatrixCreatePage} +\item ``Operations on Matrices'' (ugxMatrixOpsPage) +\ref{ugxMatrixOpsPage} on page~\pageref{ugxMatrixOpsPage} +\item ``Eigenvalues and Eigenvectors'' (ugProblemEigenPage) +\ref{ugProblemEigenPage} on page~\pageref{ugProblemEigenPage} +\item ``Example: Determinant of a Hilbert Matrix'' (ugxFloatHilbertPage) +\ref{ugxFloatHilbertPage} on page~\pageref{ugxFloatHilbertPage} +\item ``Computing the Permanent'' (PermanentXmpPage) +\ref{PermanentXmpPage} on page~\pageref{PermanentXmpPage} +\item ``Working with Vectors'' (VectorXmpPage) +\ref{VectorXmpPage} on page~\pageref{VectorXmpPage} +\item ``Working with Square Matrices'' (SquareMatrixXmpPage) +\ref{SquareMatrixXmpPage} on page~\pageref{SquareMatrixXmpPage} +\item ``Working with One-dimensional Arrays'' (OneDimensionalArrayXmpPage) +\ref{OneDimensionalArrayXmpPage} on page~\pageref{OneDimensionalArrayXmpPage} +\item ``Working with Two-dimensional Arrays'' (TwoDimensionalArrayXmpPage) +\ref{TwoDimensionalArrayXmpPage} on page~\pageref{TwoDimensionalArrayXmpPage} +\item ``Conversion (Polynomials of Matrices)'' (ugTypesConvertPage) +\ref{ugTypesConvertPage} on page~\pageref{ugTypesConvertPage} +\end{itemize} +\index{pages!LinAlgPage!topics.ht} +\index{topics.ht!pages!LinAlgPage} +\index{LinAlgPage!topics.ht!pages} +<>= +\begin{page}{LinAlgPage}{Linear Algebra} +\beginscroll +\beginmenu + +\menulink{Introduction}{ugIntroTwoDimPage}\newline + +Create and manipulate matrices. +Work with the entries of a matrix. +Perform matrix arithmetic. + +\menulink{Creating Matrices}{ugxMatrixCreatePage} \newline + +Create matrices from scratch and from other matrices. + +\menulink{Operations on Matrices}{ugxMatrixOpsPage} \newline + +Algebraic manipulations with matrices. +Compute the inverse, determinant and trace of a matrix. +Find the rank, nullspace and row echelon form of a matrix. + +\menulink{Eigenvalues and Eigenvectors}{ugProblemEigenPage} \newline + +How to compute eigenvalues and eigenvectors. +\endmenu +\horizontalline\newline +Additional Topics: +\beginmenu +\menulink{Example: Determinant of a Hilbert Matrix}{ugxFloatHilbertPage} +\menulink{Computing the Permanent}{PermanentXmpPage} +\menulink{Working with Vectors}{VectorXmpPage} +\menulink{Working with Square Matrices}{SquareMatrixXmpPage} +\menulink{Working with One-Dimensional Arrays}{OneDimensionalArrayXmpPage} +\menulink{Working with Two-Dimensional Arrays}{TwoDimensionalArrayXmpPage} +\menulink{Conversion (Polynomials of Matrices)}{ugTypesConvertPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +\subsection{Calculus} +\label{CalculusPage} +\includegraphics[scale=.5]{ps/v71calculuspage.eps} +\index{images!calculuspage} + +Called from ``Topics'' (TopicPage) \ref{TopicPage} on page~\pageref{TopicPage} +\begin{itemize} +\item ``Limits'' (ugProblemLimitsPage) \ref{ugProblemLimitsPage} on +page~\pageref{ugProblemLimitsPage} +\item ``Derivatives'' (ugIntroCalcDerivPage) \ref{ugIntroCalcDerivPage} on +page~\pageref{ugIntroCalcDerivPage} +\item ``Integrals'' (ugIntroIntegratePage) \ref{ugIntroIntegratePage} on +page~\pageref{ugIntroIntegratePage} +\item ``More Integrals'' (ugProblemIntegrationPage) +\ref{ugProblemIntegrationPage} on +page~\pageref{ugProblemIntegrationPage} +\item ``Laplace'' (ugProblemLaplacePage) \ref{ugProblemLaplacePage} on +page~\pageref{ugProblemLaplacePage} +\item ``Series'' (ugProblemSeriesPage)n \ref{ugProblemSeriesPage} on +page~\pageref{ugProblemSeriesPage} +\item ``Differential Eqns'' (ugProblemDEQPage) \ref{ugProblemDEQPage} on +page~\pageref{ugProblemDEQPage} +\end{itemize} +\index{pages!CalculusPage!topics.ht} +\index{topics.ht!pages!CalculusPage} +\index{CalculusPage!topics.ht!pages} +<>= +\begin{page}{CalculusPage}{Calculus} +\beginscroll +\beginmenu +\menulink{Limits}{ugProblemLimitsPage} \tab{17} +Compute limits of functional expressions. +\menulink{Derivatives}{ugIntroCalcDerivPage}\tab{17} +Compute derivatives and partial derivatives. +\menulink{Integrals}{ugIntroIntegratePage}\tab{17} +Introduction to Axiom's symbolic integrator. +\menulink{More Integrals}{ugProblemIntegrationPage}\tab{17} +More information about symbolic integration. +\menulink{Laplace}{ugProblemLaplacePage}\tab{17} +Computing Laplace transforms. +\menulink{Series}{ugProblemSeriesPage}\tab{17} +Compute series expansions of expressions. +\menulink{Differential Eqns}{ugProblemDEQPage}\tab{17} +Solve differential equations. +\endmenu +\endscroll +\autobuttons \end{page} + +@ +\section{type.ht} +@ +\subsection{Category {\bf Type}} +\label{CategoryType} +\index{pages!CategoryType!type.ht} +\index{type.ht!pages!CategoryType} +\index{CategoryType!type.ht!pages} +<>= +\begin{page}{CategoryType}{Category {\em Type}} +\beginscroll +{\em Type} is a primitive category in Axiom, +one which is an ancestor of all Axiom categories. + +{\em Type} is the root of Axiom's category hierarchy, +a category with no properties (exported operations +and attributes) of which all other categories are descendants. +Two important children of {\em Type} are +\spadtype{SetCategory}, the category of all algebraic domains, +and \spadtype{Aggregate}, the category of all data structures. +\endscroll + +@ +\section{union.ht} +\subsection{Domain {\bf Union(a:A,...,b:B)}} +\label{DomainUnion} +\index{pages!DomainUnion!union.ht} +\index{union.ht!pages!DomainUnion} +\index{DomainUnion!union.ht!pages} +<>= +\begin{page}{DomainUnion}{Domain {\em Union(a:A,...,b:B)}} +\beginscroll +{\em Union} takes any number of "tag"-domain pairs of arguments: +\indentrel{2} +\newline \spad{a}, a tag, an element of domain \spadtype{Symbol} +\newline \spad{A}, a domain of category \spadtype{SetCategory} +\newline\tab{10}... +\newline \spad{b}, a tag, an element of domain \spadtype{Symbol} +\newline \spad{B}, a domain of category \spadtype{SetCategory} +\indentrel{-2}\newline +This constructor is a primitive in Axiom. +\newline +\beginmenu +\item\menulispdownlink{Description}{(|dbSpecialDescription| '|Union|)) }\tab{15}General description +\item\menulispdownlink{Operations}{(|dbSpecialOperations| '|Union|)}\tab{15}All exported operations of \spad{Union(a:A,b:B)} +%\item\menudownlink{Examples} {UnionExamples} \tab{15}Examples illustrating use +\item\menulispdownlink{Exports}{(|dbSpecialExports| '|Union|)}\tab{15}Explicit categories and operations +\endmenu +\vspace{1}\newline +In this tagged \spad{Union}, tags \spad{a,...,b} must be distinct. +\newline +For an alternate "untagged" form of \spad{Union}, see \downlink{Union(A,B)}{UntaggedUnion}. +\endscroll\end{page} + +@ +\subsection{Domain Constructor {\bf Union}} +\label{UnionDescription} +\index{pages!UnionDescription!union.ht} +\index{union.ht!pages!UnionDescription} +\index{UnionDescription!union.ht!pages} +<>= +\begin{page}{UnionDescription}{Domain Constructor {\em Union}} +\beginscroll +\newline\menuitemstyle{}\tab{2}Union({\em a:A},{\em b:B}) +\newline\tab{2}{\em Arguments:}\indent{17}\tab{-2} +{\em a}, a tag, an element of domain \spadtype{Symbol} +\newline\tab{-2} +{\em A}, a domain of category \spadtype{SetCategory} +\newline\tab{-2} +{\em b}, a tag, an element of domain \spadtype{Symbol} +\newline\tab{-2} +{\em B}, a domain of category \spadtype{SetCategory} +\indent{0}\newline\tab{2}{\em Returns:}\indent{17}\tab{-2} +the "union of {\em A} and {\em B}" as described below. +\indent{0}\newline\tab{2}{\em Description:}\indent{15}\tab{0} +{\em Union(a:A,b:B)} denotes the class of objects +which are either members of domain {\em A} or of domain {\em B}. +The symbols {\em a} and {\em b} are called "tags" and +are used to identify the two "branches" +of the union. +The {\em Union} constructor can take any number of arguments and +has an alternate form without {\em tags}. +This tagged {\em Union} type is necessary, for example, to disambiguate +two branches of a union where {\em A} and {\em B} denote the same type. +{\em Union} is a primitive domain of Axiom which cannot be +defined in the Axiom language. +\endscroll\end{page} + +@ +\subsection{Domain {\bf Union(A,...,B)}} +\label{UntaggedUnion} +\index{pages!UntaggedUnion!union.ht} +\index{union.ht!pages!UntaggedUnion} +\index{UntaggedUnion!union.ht!pages} +<>= +\begin{page}{UntaggedUnion}{Domain {\em Union(A,...,B)}} +\beginscroll +{\em Union} takes any number of domain arguments: +\indentrel{2} +\newline \spad{A}, a domain of category \spadtype{SetCategory} +\newline\tab{10}... +\newline \spad{B}, a domain of category \spadtype{SetCategory} +\indentrel{-2}\newline +\spad{Union} is a primitive constructor in Axiom. +\newline +\beginmenu +\item\menulispdownlink{Description}{(|dbSpecialDescription| '|UntaggedUnion|)) }\tab{15}General description +\item\menulispdownlink{Operations}{(|dbSpecialOperations| '|UntaggedUnion|)}\tab{15}All exported operations of \spad{Union(A,B)} +%\item\menudownlink{Examples} {UTUnionExamples} \tab{15}Examples illustrating use +%\item\menudownlink{Exports} {UTUnionExports} \tab{15}Explicit categories and operations +\endmenu +\vspace{1}\newline +In this untagged form of \spad{Union}, domains \spad{A,...,B} must be distinct. +\endscroll\end{page} + +@ +\subsection{Domain Constructor {\bf Union}} +\label{UTUnionDescription} +\index{pages!UTUnionDescription!union.ht} +\index{union.ht!pages!UTUnionDescription} +\index{UTUnionDescription!union.ht!pages} +<>= +\begin{page}{UTUnionDescription}{Domain Constructor {\em Union}} +\beginscroll +\newline\menuitemstyle{}\tab{2}Union({\em A},{\em B}) +\newline\tab{2}{\em Arguments:}\indent{17}\tab{-2} +{\em A}, a domain of category \spadtype{SetCategory} +\newline\tab{-2} +{\em B}, a domain of category \spadtype{SetCategory} +\indent{0}\newline\tab{2}{\em Returns:}\indent{17}\tab{-2} +the "union of {\em A} and {\em B}" as described below. +\indent{0}\newline\tab{2}{\em Description:}\indent{15}\tab{0} +{\em Union(A,B)} denotes the class of objects which are +which are either members of domain {\em A} or of domain {\em B}. +The {\em Union} constructor can take any number of arguments and +has an alternate form using {\em tags}. +{\em Union} is a primitive domain of Axiom which cannot be +defined in the Axiom language. +\endscroll\end{page} + + +@ +\section{uniseg.ht} +<>= +\newcommand{\UniversalSegmentXmpTitle}{UniversalSegment} +\newcommand{\UniversalSegmentXmpNumber}{9.84} + +@ +\subsection{UniversalSegment} +\label{UniversalSegmentXmpPage} +\begin{itemize} +\item SegmentXmpPage \ref{SegmentXmpPage} on +page~pageref{SegmentXmpPage} +\item SegmentBindingXmpPage \ref{SegmentBindingXmpPage} on +page~pageref{SegmentBindingXmpPage} +\item ListXmpPage \ref{ListXmpPage} on +page~pageref{ListXmpPage} +\item StreamXmpPage \ref{StreamXmpPage} on +page~pageref{StreamXmpPage} +\end{itemize} +\index{pages!UniversalSegmentXmpPage!uniseg.ht} +\index{uniseg.ht!pages!UniversalSegmentXmpPage} +\index{UniversalSegmentXmpPage!uniseg.ht!pages} +<>= +\begin{page}{UniversalSegmentXmpPage}{UniversalSegment} +\beginscroll + +The \spadtype{UniversalSegment} domain generalizes \spadtype{Segment} +by allowing segments without a ``hi'' end point. +\xtc{ +}{ +\spadpaste{pints := 1.. \bound{pints}} +} +\xtc{ +}{ +\spadpaste{nevens := (0..) by -2 \bound{nevens}} +} +\xtc{ +Values of type \spadtype{Segment} are automatically converted to +type \spadtype{UniversalSegment} when appropriate. +}{ +\spadpaste{useg: UniversalSegment(Integer) := 3..10 \bound{useg}} +} +\xtc{ +The operation \spadfunFrom{hasHi}{UniversalSegment} is used to test +whether a segment has a \spad{hi} end point. +}{ +\spadpaste{hasHi pints \free{pints}} +} +\xtc{ +}{ +\spadpaste{hasHi nevens \free{nevens}} +} +\xtc{ +}{ +\spadpaste{hasHi useg \free{useg}} +} +\xtc{ +All operations available on type \spadtype{Segment} apply to +\spadtype{UniversalSegment}, with the proviso that expansions produce +streams rather than lists. +This is to accommodate infinite expansions. +}{ +\spadpaste{expand pints \free{pints}} +} +\xtc{ +}{ +\spadpaste{expand nevens \free{nevens}} +} +\xtc{ +}{ +\spadpaste{expand [1, 3, 10..15, 100..]} +} + +For more information on related topics, see +\downlink{`Segment'}{SegmentXmpPage}\ignore{Segment}, +\downlink{`SegmentBinding'}{SegmentBindingXmpPage}\ignore{SegmentBinding}, +\downlink{`List'}{ListXmpPage}\ignore{List}, and +\downlink{`Stream'}{StreamXmpPage}\ignore{Stream}. +\showBlurb{UniversalSegment} +\endscroll +\autobuttons +\end{page} +% + +@ +\section{up.ht} +<>= +\newcommand{\UnivariatePolynomialXmpTitle}{UnivariatePolynomial} +\newcommand{\UnivariatePolynomialXmpNumber}{9.83} + +@ +\subsection{UnivariatePolynomial} +\label{UnivariatePolynomialXmpPage} +\begin{itemize} +\item ugProblemFactorPage \ref{ugProblemFactorPage} on +page~pageref{ugProblemFactorPage} +\item ugIntroVariablesPage \ref{ugIntroVariablesPage} on +page~pageref{ugIntroVariablesPage} +\item ugTypesConvertPage \ref{ugTypesConvertPage} on +page~pageref{ugTypesConvertPage} +\item PolynomialXmpPage \ref{PolynomialXmpPage} on +page~pageref{PolynomialXmpPage} +\item MultivariatePolynomialXmpPage \ref{MultivariatePolynomialXmpPage} on +page~pageref{MultivariatePolynomialXmpPage} +\item DistributedMultivariatePolynomialXmpPage \ref{DistributedMultivariatePolynomialXmpPage} on +page~pageref{DistributedMultivariatePolynomialXmpPage} +\end{itemize} +\index{pages!UnivariatePolynomialXmpPage!up.ht} +\index{up.ht!pages!UnivariatePolynomialXmpPage} +\index{UnivariatePolynomialXmpPage!up.ht!pages} +<>= +\begin{page}{UnivariatePolynomialXmpPage}{UnivariatePolynomial} +\beginscroll + +The domain constructor \spadtype{UnivariatePolynomial} +(abbreviated \spadtype{UP}) +creates domains of univariate polynomials in a specified variable. +For example, the domain +\spadtype{UP(a1,POLY FRAC INT)} provides polynomials in the single variable +\spad{a1} whose coefficients are general polynomials with rational +number coefficients. + +\beginImportant +\noindent {\bf Restriction:} +\texht{\begin{quotation}\noindent}{\newline\indent{5}} +Axiom does not allow you to create types where +\spadtype{UnivariatePolynomial} is contained in the coefficient type of +\spadtype{Polynomial}. Therefore, +\spadtype{UP(x,POLY INT)} is legal but \spadtype{POLY UP(x,INT)} is not. +\texht{\end{quotation}}{\indent{0}} +\endImportant + +\xtc{ +\spadtype{UP(x,INT)} is the domain of polynomials in the single +variable \spad{x} with integer coefficients. +}{ +\spadpaste{(p,q) : UP(x,INT) \bound{pdec}\bound{qdec}} +} +\xtc{ +}{ +\spadpaste{p := (3*x-1)**2 * (2*x + 8) \free{pdec}\bound{p}} +} +\xtc{ +}{ +\spadpaste{q := (1 - 6*x + 9*x**2)**2 \free{qdec}\bound{q}} +} +\xtc{ +The usual arithmetic operations are available for univariate +polynomials. +}{ +\spadpaste{p**2 + p*q \free{p q}} +} +\xtc{ +The operation \spadfunFrom{leadingCoefficient}{UnivariatePolynomial} +extracts the coefficient of the term of highest degree. +}{ +\spadpaste{leadingCoefficient p \free{p}} +} +\xtc{ +The operation \spadfunFrom{degree}{UnivariatePolynomial} returns +the degree of the polynomial. +Since the polynomial has only one variable, the variable is not supplied +to operations like \spadfunFrom{degree}{UnivariatePolynomial}. +}{ +\spadpaste{degree p \free{p}} +} +\xtc{ +The reductum of the polynomial, the polynomial obtained by +subtracting the term of highest order, is returned by +\spadfunFrom{reductum}{UnivariatePolynomial}. +}{ +\spadpaste{reductum p \free{p}} +} +\xtc{ +The operation \spadfunFrom{gcd}{UnivariatePolynomial} computes the +greatest common divisor of two polynomials. +}{ +\spadpaste{gcd(p,q) \free{p q}} +} +\xtc{ +The operation \spadfunFrom{lcm}{UnivariatePolynomial} computes the +least common multiple. +}{ +\spadpaste{lcm(p,q) \free{p q}} +} +\xtc{ +The operation \spadfunFrom{resultant}{UnivariatePolynomial} +computes the resultant of two univariate polynomials. +In the case of \spad{p} and \spad{q}, the resultant is \spad{0} because they +share a common root. +}{ +\spadpaste{resultant(p,q) \free{p q}} +} +\xtc{ +To compute the derivative of a univariate polynomial with respect to its +variable, use \spadfunFrom{D}{UnivariatePolynomial}. +}{ +\spadpaste{D p \free{p}} +} +\xtc{ +Univariate polynomials can also be used as if they were functions. +To evaluate a univariate polynomial at some point, apply +the polynomial to the point. +}{ +\spadpaste{p(2) \free{p}} +} +\xtc{ +The same syntax is used for composing two univariate polynomials, i.e. +substituting one polynomial for the variable in another. +This substitutes \spad{q} for the variable in \spad{p}. +}{ +\spadpaste{p(q) \free{p q}} +} +\xtc{ +This substitutes \spad{p} for the variable in \spad{q}. +}{ +\spadpaste{q(p) \free{p q}} +} +\xtc{ +To obtain a list of coefficients of the polynomial, use +\spadfunFrom{coefficients}{UnivariatePolynomial}. +}{ +\spadpaste{l := coefficients p \free{p}\bound{l}} +} +\xtc{ +From this you can use \spadfunFrom{gcd}{UnivariatePolynomial} +and \spadfunFrom{reduce}{List} +to compute the content of the polynomial. +}{ +\spadpaste{reduce(gcd,l) \free{l}} +} +\xtc{ +Alternatively (and more easily), +you can just call \spadfunFrom{content}{UnivariatePolynomial}. +}{ +\spadpaste{content p \free{p}} +} + +Note that the operation \spadfunFrom{coefficients}{UnivariatePolynomial} +omits the zero coefficients from the list. +Sometimes it is useful to convert a univariate polynomial +to a vector whose \eth{\spad{i }} position contains the degree \spad{i-1} +coefficient of the polynomial. +\xtc{ +}{ +\spadpaste{ux := (x**4+2*x+3)::UP(x,INT) \bound{ux}} +} +\xtc{ +To get a complete vector of coefficients, use the operation +\spadfunFrom{vectorise}{UnivariatePolynomial}, which takes a +univariate polynomial and an integer denoting the length of the +desired vector. +}{ +\spadpaste{vectorise(ux,5) \free{ux}} +} + +It is common to want to do something to every term of a polynomial, +creating a new polynomial in the process. +\xtc{ +This is a function for iterating across the terms of a polynomial, +squaring each term. +}{ +\begin{spadsrc}[\bound{squareTerms}] +squareTerms(p) == + reduce(+,[t**2 for t in monomials p]) +\end{spadsrc} +} +\xtc{ +Recall what \spad{p} looked like. +}{ +\spadpaste{p \free{p}} +} +\xtc{ +We can demonstrate \userfun{squareTerms} on \spad{p}. +}{ +\spadpaste{squareTerms p \free{p}\free{squareTerms}} +} + +When the coefficients of the univariate polynomial belong to a +field,\footnote{For example, when the coefficients are rational +numbers, as opposed to integers. The important property of +a field is that non-zero elements can be divided and produce +another element. The quotient of the integers 2 and 3 is not +another integer.} +it is possible to compute quotients and remainders. +\xtc{ +}{ +\spadpaste{(r,s) : UP(a1,FRAC INT) \bound{rdec}\bound{sdec}} +} +\xtc{ +}{ +\spadpaste{r := a1**2 - 2/3 \free{rdec}\bound{r}} +} +\xtc{ +}{ +\spadpaste{s := a1 + 4 \free{sdec}\bound{s}} +} +\xtc{ +When the coefficients are rational numbers or rational expressions, the +operation \spadfunFrom{quo}{UnivariatePolynomial} computes the quotient +of two polynomials. +}{ +\spadpaste{r quo s \free{r s}} +} +\xtc{ +The operation +\spadfunFrom{rem}{UnivariatePolynomial} computes the remainder. +}{ +\spadpaste{r rem s \free{r s}} +} +\xtc{ +The operation \spadfunFrom{divide}{UnivariatePolynomial} can be used to +return a record of both components. +}{ +\spadpaste{d := divide(r, s) \free{r s}\bound{d}} +} +\xtc{ +Now we check the arithmetic! +}{ +\spadpaste{r - (d.quotient * s + d.remainder) \free{r s d}} +} +\xtc{ +It is also possible to integrate univariate polynomials when the +coefficients belong to a field. +}{ +\spadpaste{integrate r \free{r}} +} +\xtc{ +}{ +\spadpaste{integrate s \free{s}} +} + +One application of univariate polynomials is to see expressions in terms +of a specific variable. +% +\xtc{ +We start with a polynomial in \spad{a1} whose coefficients +are quotients of polynomials in \spad{b1} and \spad{b2}. +}{ +\spadpaste{t : UP(a1,FRAC POLY INT) \bound{tdec}} +} +\xtc{ +Since in this case we are not talking about using multivariate +polynomials in only two variables, we use \spadtype{Polynomial}. +We also use \spadtype{Fraction} because we want fractions. +}{ +\spadpaste{t := a1**2 - a1/b2 + (b1**2-b1)/(b2+3) \free{tdec}\bound{t}} +} +\xtc{ +We push all the variables into a single quotient of polynomials. +}{ +\spadpaste{u : FRAC POLY INT := t \bound{u}\free{t}} +} +\xtc{ +Alternatively, we can view this as a polynomial in the variable +This is a {\it mode-directed} conversion: you indicate +as much of the structure as you care about and let Axiom +decide on the full type and how to do the transformation. +}{ +\spadpaste{u :: UP(b1,?) \free{u}} +} + +See \downlink{``\ugProblemFactorTitle''}{ugProblemFactorPage} in +Section \ugProblemFactorNumber\ignore{ugProblemFactor} +for a discussion of the factorization facilities +in Axiom for univariate polynomials. +For more information on related topics, see +\downlink{``\ugIntroVariablesTitle''}{ugIntroVariablesPage} in +Section \ugIntroVariablesNumber\ignore{ugIntroVariables}, +\downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} in +Section \ugTypesConvertNumber\ignore{ugTypesConvert}, +\downlink{`Polynomial'}{PolynomialXmpPage}\ignore{Polynomial}, +\downlink{`MultivariatePolynomial'}{MultivariatePolynomialXmpPage} +\ignore{MultivariatePolynomial}, and +\downlink{`DistributedMultivariatePolynomial'} +{DistributedMultivariatePolynomialXmpPage} +\ignore{DistributedMultivariatePolynomial}. +% +\showBlurb{UnivariatePolynomial} +\endscroll +\autobuttons +\end{page} + +@ +\section{vector.ht} +<>= +\newcommand{\VectorXmpTitle}{Vector} +\newcommand{\VectorXmpNumber}{9.85} + +@ +\subsection{Vector} +\label{VectorXmpPage} +\begin{itemize} +\item OneDimensionalArrayXmpPage \ref{OneDimensionalArrayXmpPage} on +page~pageref{OneDimensionalArrayXmpPage} +\item ListXmpPage \ref{ListXmpPage} on +page~pageref{ListXmpPage} +\item MatrixXmpPage \ref{MatrixXmpPage} on +page~pageref{MatrixXmpPage} +\item OneDimensionalArrayXmpPage \ref{OneDimensionalArrayXmpPage} on +page~pageref{OneDimensionalArrayXmpPage} +\item SetXmpPage \ref{SetXmpPage} on +page~pageref{SetXmpPage} +\item TableXmpPage \ref{TableXmpPage} on +page~pageref{TableXmpPage} +\item TwoDimensionalArrayXmpPage \ref{TwoDimensionalArrayXmpPage} on +page~pageref{TwoDimensionalArrayXmpPage} +\end{itemize} +\index{pages!VectorXmpPage!vector.ht} +\index{vector.ht!pages!VectorXmpPage} +\index{VectorXmpPage!vector.ht!pages} +<>= +\begin{page}{VectorXmpPage}{Vector} +\beginscroll + +The \spadtype{Vector} domain is used for storing data in a one-dimensional +indexed data structure. +A vector is a homogeneous data structure in that all the components of the +vector must belong to the same Axiom domain. +Each vector has a fixed length specified by the user; vectors are not +extensible. +This domain is similar to the \spadtype{OneDimensionalArray} domain, +except that when the components of a \spadtype{Vector} belong to a +\spadtype{Ring}, arithmetic operations are provided. +For more examples of operations that are defined for both +\spadtype{Vector} and \spadtype{OneDimensionalArray}, see +\downlink{`OneDimensionalArray'}{OneDimensionalArrayXmpPage} +\ignore{OneDimensionalArray}. + +As with the \spadtype{OneDimensionalArray} domain, a \spadtype{Vector} can +be created by calling the operation \spadfunFrom{new}{Vector}, its components +can be accessed by calling the operations \spadfunFrom{elt}{Vector} and +\spadfunFrom{qelt}{Vector}, and its components can be reset by calling the +operations \spadfunFrom{setelt}{Vector} and +\spadfunFromX{qsetelt}{Vector}. +\xtc{ +This creates a vector of integers of length +\spad{5} all of whose components are \spad{12}. +}{ +\spadpaste{u : VECTOR INT := new(5,12) \bound{u}} +} +\xtc{ +This is how you create a vector from a list of its components. +}{ +\spadpaste{v : VECTOR INT := vector([1,2,3,4,5]) \bound{v}} +} + +\xtc{ +Indexing for vectors begins at \spad{1}. +The last element has index equal to the length of the vector, +which is computed by \spadopFrom{\#}{Vector}. +}{ +\spadpaste{\#(v) \free{v}} +} +\xtc{ +This is the standard way to use \spadfunFrom{elt}{Vector} to extract an +element. +Functionally, it is the same as if you had typed \spad{elt(v,2)}. +}{ +\spadpaste{v.2 \free{v}} +} +\xtc{ +This is the standard way to use \spadfunFrom{setelt}{Vector} to change an +element. +It is the same as if you had typed \spad{setelt(v,3,99)}. +}{ +\spadpaste{v.3 := 99 \free{v}\bound{vdelta}} +} +\xtc{ +Now look at \spad{v} to see the change. +You can +use \spadfunFrom{qelt}{Vector} and \spadfunFromX{qsetelt}{Vector} (instead +of \spadfunFrom{elt}{Vector} and \spadfunFrom{setelt}{Vector}, +respectively) but {\it only} when you know that the index is within the valid +range. +}{ +\spadpaste{v \free{vdelta}} +} + +\xtc{ +When the components belong to a \spadtype{Ring}, Axiom +provides arithmetic operations for \spadtype{Vector}. +These include left and right scalar multiplication. +}{ +\spadpaste{5 * v \free{vdelta}} +} +\xtc{ +}{ +\spadpaste{v * 7 \free{vdelta}} +} +\xtc{ +}{ +\spadpaste{w : VECTOR INT := vector([2,3,4,5,6]) \bound{w}} +} +\xtc{ +Addition and subtraction are also available. +}{ +\spadpaste{v + w \free{vdelta w}} +} +\xtc{ +Of course, when adding or subtracting, the two vectors must have the same +length or an error message is displayed. +}{ +\spadpaste{v - w \free{vdelta w}} +} + +For more information about other aggregate domains, +see the following: +\downlink{`List'}{ListXmpPage}\ignore{List}, +\downlink{`Matrix'}{MatrixXmpPage}\ignore{Matrix}, +\downlink{`OneDimensionalArray'}{OneDimensionalArrayXmpPage}\ignore{OneDimensionalArray}, +\downlink{`Set'}{SetXmpPage}\ignore{Set}, +\downlink{`Table'}{TableXmpPage}\ignore{Table}, and +\downlink{`TwoDimensionalArray'}{TwoDimensionalArrayXmpPage}\ignore{TwoDimensionalArray}. +Issue the system command \spadcmd{)show Vector} +to display the full list of operations defined by +\spadtype{Vector}. + +\endscroll +\autobuttons +\end{page} +% + +@ +\section{void.ht} +<>= +\newcommand{\VoidXmpTitle}{Void} +\newcommand{\VoidXmpNumber}{9.86} + +@ +\subsection{Void} +\label{VoidXmpPage} +\index{pages!VoidXmpPage!void.ht} +\index{void.ht!pages!VoidXmpPage} +\index{VoidXmpPage!void.ht!pages} +<>= +\begin{page}{VoidXmpPage}{Void} +\beginscroll + +When an expression is not in a value context, it is given type \spadtype{Void}. +For example, in the expression +\begin{verbatim} +r := (a; b; if c then d else e; f) +\end{verbatim} +values are used only from the subexpressions \spad{c} and \spad{f}: all +others are thrown away. +The subexpressions \spad{a}, \spad{b}, \spad{d} and \spad{e} +are evaluated for side-effects only and have type \spadtype{Void}. +There is a unique value of type \spadtype{Void}. + +\xtc{ +You will most often see results of type \spadtype{Void} when you +declare a variable. +}{ +\spadpaste{a : Integer} +} +\noOutputXtc{ +Usually no output is displayed for \spadtype{Void} results. +You can force the display of a rather ugly object by issuing +\spadcmd{)set message void on}. +}{ +\spadpaste{)set message void on} +} +\xtc{ +}{ +\spadpaste{b : Fraction Integer} +} +\noOutputXtc{ +}{ +\spadpaste{)set message void off} +} +\xtc{ +All values can be converted to type \spadtype{Void}. +}{ +\spadpaste{3::Void \bound{prev}} +} +\xtc{ +Once a value has been converted to \spadtype{Void}, it cannot be recovered. +}{ +\spadpaste{\% :: PositiveInteger \free{prev}} +} +\endscroll +\autobuttons +\end{page} + +@ +\section{wutset.ht} +<>= +\newcommand{\WuWenTsunTriangularSetXmpTitle}{WuWenTsunTriangularSet} +\newcommand{\WuWenTsunTriangularSetXmpNumber}{9.87} + +@ +\subsection{WuWenTsunTriangularSet} +\label{WuWenTsunTriangularSetXmpPage} +\index{pages!WuWenTsunTriangularSetXmpPage!wutset.ht} +\index{wutset.ht!pages!WuWenTsunTriangularSetXmpPage} +\index{WuWenTsunTriangularSetXmpPage!wutset.ht!pages} +<>= +\begin{page}{WuWenTsunTriangularSetXmpPage}{WuWenTsunTriangularSet} +\beginscroll +The \spadtype{WuWenTsunTriangularSet} domain constructor implements +the characteristic set method of Wu Wen Tsun. +This algorithm computes a list of triangular sets from a list +of polynomials such that the algebraic variety defined by the +given list of polynomials decomposes into the union of the regular-zero sets +of the computed triangular sets. +The constructor takes four arguments. +The first one, {\bf R}, is the coefficient ring of the polynomials; +it must belong to the category \spadtype{IntegralDomain}. +The second one, {\bf E}, is the exponent monoid of the polynomials; +it must belong to the category \spadtype{OrderedAbelianMonoidSup}. +The third one, {\bf V}, is the ordered set of variables; +it must belong to the category \spadtype{OrderedSet}. +The last one is the polynomial ring; +it must belong to the category \spadtype{RecursivePolynomialCategory(R,E,V)}. +The abbreviation for \spadtype{WuWenTsunTriangularSet} is +\spadtype{WUTSET}. + +Let us illustrate the facilities by an example. + +\xtc{ +Define the coefficient ring. +}{ +\spadpaste{R := Integer \bound{R}} +} +\xtc{ +Define the list of variables, +}{ +\spadpaste{ls : List Symbol := [x,y,z,t] \bound{ls}} +} +\xtc{ +and make it an ordered set; +}{ +\spadpaste{V := OVAR(ls) \free{ls} \bound{V}} +} +\xtc{ +then define the exponent monoid. +}{ +\spadpaste{E := IndexedExponents V \free{V} \bound{E}} +} +\xtc{ +Define the polynomial ring. +}{ +\spadpaste{P := NSMP(R, V) \free{R} \free{V} \bound{P}} +} +\xtc{ +Let the variables be polynomial. +}{ +\spadpaste{x: P := 'x \free{P} \bound{x}} +} +\xtc{ +}{ +\spadpaste{y: P := 'y \free{P} \bound{y}} +} +\xtc{ +}{ +\spadpaste{z: P := 'z \free{P} \bound{z}} +} +\xtc{ +}{ +\spadpaste{t: P := 't \free{P} \bound{t}} +} +\xtc{ +Now call the \spadtype{WuWenTsunTriangularSet} domain constructor. +}{ +\spadpaste{T := WUTSET(R,E,V,P) \free{R} \free{E} \free{V} \free{P} \bound{T} } +} +\xtc{ +Define a polynomial system. +}{ +\spadpaste{p1 := x ** 31 - x ** 6 - x - y \free{x} \free{y} \bound{p1}} +} +\xtc{ +}{ +\spadpaste{p2 := x ** 8 - z \free{x} \free{z} \bound{p2}} +} +\xtc{ +}{ +\spadpaste{p3 := x ** 10 - t \free{x} \free{t} \bound{p3}} +} +\xtc{ +}{ +\spadpaste{lp := [p1, p2, p3] \free{p1} \free{p2} \free{p3} \bound{lp}} +} +\xtc{ +Compute a characteristic set of the system. +}{ +\spadpaste{characteristicSet(lp)$T \free{lp} \free{T}} +} +\xtc{ +Solve the system. +}{ +\spadpaste{zeroSetSplit(lp)$T \free{lp} \free{T}} +} + + +The \spadtype{RegularTriangularSet} and +\spadtype{SquareFreeRegularTriangularSet} domain constructors, +and the \spadtype{LazardSetSolvingPackage}, +\spadtype{SquareFreeRegularTriangularSet} +and \spadtype{ZeroDimensionalSolvePackage} package constructors +also provide operations to compute triangular +decompositions of algebraic varieties. +These five constructor use a special kind of +characteristic sets, called regular triangular sets. +These special characteristic sets have better +properties than the general ones. +Regular triangular sets and their related concepts are presented in +the paper "On the Theories of Triangular sets" By P. Aubry, D. Lazard +and M. Moreno Maza (to appear in the Journal of Symbolic Computation). +The decomposition algorithm (due to the third author) available in the +four above constructors provide generally better timings than +the characteristic set method. +In fact, the \spadtype{WUTSET} constructor remains interesting +for the purpose of manipulating characteristic sets whereas +the other constructors are more convenient for solving polynomial systems. + +Note that the way of understanding triangular decompositions +is detailed in the example of the \spadtype{RegularTriangularSet} +constructor. +\endscroll +\autobuttons +\end{page} + +@ +\section{xmpexp.ht} +<>= +\newcommand{\ExamplesExposedTitle}{Some Examples of Domains and Packages} +\newcommand{\ExamplesExposedNumber}{9.} + +@ +\subsection{Some Examples of Domains and Packages} +\label{ExamplesExposedPage} +\begin{itemize} +\item AssociationListXmpPage \ref{AssociationListXmpPage} on +page~pageref{AssociationListXmpPage} +\item BalancedBinaryTreeXmpPage \ref{BalancedBinaryTreeXmpPage} on +page~pageref{BalancedBinaryTreeXmpPage} +\item BasicOperatorXmpPage \ref{BasicOperatorXmpPage} on +page~pageref{BasicOperatorXmpPage} +\item BinaryExpansionXmpPage \ref{BinaryExpansionXmpPage} on +page~pageref{BinaryExpansionXmpPage} +\item BinarySearchTreeXmpPage \ref{BinarySearchTreeXmpPage} on +page~pageref{BinarySearchTreeXmpPage} +\item CardinalNumberXmpPage \ref{CardinalNumberXmpPage} on +page~pageref{CardinalNumberXmpPage} +\item CartesianTensorXmpPage \ref{CartesianTensorXmpPage} on +page~pageref{CartesianTensorXmpPage} +\item CharacterXmpPage \ref{CharacterXmpPage} on +page~pageref{CharacterXmpPage} +\item CharacterClassXmpPage \ref{CharacterClassXmpPage} on +page~pageref{CharacterClassXmpPage} +\item CliffordAlgebraXmpPage \ref{CliffordAlgebraXmpPage} on +page~pageref{CliffordAlgebraXmpPage} +\item ComplexXmpPage \ref{ComplexXmpPage} on +page~pageref{ComplexXmpPage} +\item ContinuedFractionXmpPage \ref{ContinuedFractionXmpPage} on +page~pageref{ContinuedFractionXmpPage} +\item CycleIndicatorsXmpPage \ref{CycleIndicatorsXmpPage} on +page~pageref{CycleIndicatorsXmpPage} +\item DeRhamComplexXmpPage \ref{DeRhamComplexXmpPage} on +page~pageref{DeRhamComplexXmpPage} +\item DecimalExpansionXmpPage \ref{DecimalExpansionXmpPage} on +page~pageref{DecimalExpansionXmpPage} +\item DistributedMultivariatePolynomialXmpPage +\ref{DistributedMultivariatePolynomialXmpPage} on +page~pageref{DistributedMultivariatePolynomialXmpPage} +\item DoubleFloatXmpPage \ref{DoubleFloatXmpPage} on +page~pageref{DoubleFloatXmpPage} +\item EqTableXmpPage \ref{EqTableXmpPage} on +page~pageref{EqTableXmpPage} +\item EquationXmpPage \ref{EquationXmpPage} on +page~pageref{EquationXmpPage} +\item ExitXmpPage \ref{ExitXmpPage} on +page~pageref{ExitXmpPage} +\item ExpressionXmpPage \ref{ExpressionXmpPage} on +page~pageref{ExpressionXmpPage} +\item FactoredXmpPage \ref{FactoredXmpPage} on +page~pageref{FactoredXmpPage} +\item FactoredFunctionsTwoXmpPage \ref{FactoredFunctionsTwoXmpPage} on +page~pageref{FactoredFunctionsTwoXmpPage} +\item FileXmpPage \ref{FileXmpPage} on +page~pageref{FileXmpPage} +\item FileNameXmpPage \ref{FileNameXmpPage} on +page~pageref{FileNameXmpPage} +\item FlexibleArrayXmpPage \ref{FlexibleArrayXmpPage} on +page~pageref{FlexibleArrayXmpPage} +\item FloatXmpPage \ref{FloatXmpPage} on +page~pageref{FloatXmpPage} +\item FractionXmpPage \ref{FractionXmpPage} on +page~pageref{FractionXmpPage} +\item FullPartialFractionExpansionXmpPage +\ref{FullPartialFractionExpansionXmpPage} on +page~pageref{FullPartialFractionExpansionXmpPage} +\item GeneralSparseTableXmpPage \ref{GeneralSparseTableXmpPage} on +page~pageref{GeneralSparseTableXmpPage} +\item GroebnerFactorizationPackageXmpPage +\ref{GroebnerFactorizationPackageXmpPage} on +page~pageref{GroebnerFactorizationPackageXmpPage} +\item HeapXmpPage \ref{HeapXmpPage} on +page~pageref{HeapXmpPage} +\item HexadecimalExpansionXmpPage \ref{HexadecimalExpansionXmpPage} on +page~pageref{HexadecimalExpansionXmpPage} +\item IntegerXmpPage \ref{IntegerXmpPage} on +page~pageref{IntegerXmpPage} +\item IntegerLinearDependenceXmpPage \ref{IntegerLinearDependenceXmpPage} on +page~pageref{IntegerLinearDependenceXmpPage} +\item IntegerNumberTheoryFunctionsXmpPage +\ref{IntegerNumberTheoryFunctionsXmpPage} on +page~pageref{IntegerNumberTheoryFunctionsXmpPage} +\item KernelXmpPage \ref{KernelXmpPage} on +page~pageref{KernelXmpPage} +\item KeyedAccessFileXmpPage \ref{KeyedAccessFileXmpPage} on +page~pageref{KeyedAccessFileXmpPage} +\item LexTriangularPackageXmpPage \ref{LexTriangularPackageXmpPage} on +page~pageref{LexTriangularPackageXmpPage} +\item LazardSetSolvingPackageXmpPage \ref{LazardSetSolvingPackageXmpPage} on +page~pageref{LazardSetSolvingPackageXmpPage} +\item LibraryXmpPage \ref{LibraryXmpPage} on +page~pageref{LibraryXmpPage} +\item LieExponentialsXmpPage \ref{LieExponentialsXmpPage} on +page~pageref{LieExponentialsXmpPage} +\item LiePolynomialXmpPage \ref{LiePolynomialXmpPage} on +page~pageref{LiePolynomialXmpPage} +\item LinearOrdinaryDifferentialOperatorXmpPage +\ref{LinearOrdinaryDifferentialOperatorXmpPage} on +page~pageref{LinearOrdinaryDifferentialOperatorXmpPage} +\item LinearOrdinaryDifferentialOperatorOneXmpPage +\ref{LinearOrdinaryDifferentialOperatorOneXmpPage} on +page~pageref{LinearOrdinaryDifferentialOperatorOneXmpPage} +\item LinearOrdinaryDifferentialOperatorTwoXmpPage +\ref{LinearOrdinaryDifferentialOperatorTwoXmpPage} on +page~pageref{LinearOrdinaryDifferentialOperatorTwoXmpPage} +\item ListXmpPage \ref{ListXmpPage} on +page~pageref{ListXmpPage} +\item LyndonWordXmpPage \ref{LyndonWordXmpPage} on +page~pageref{LyndonWordXmpPage} +\item MagmaXmpPage \ref{MagmaXmpPage} on +page~pageref{MagmaXmpPage} +\item MakeFunctionXmpPage \ref{MakeFunctionXmpPage} on +page~pageref{MakeFunctionXmpPage} +\item MappingPackageOneXmpPage \ref{MappingPackageOneXmpPage} on +page~pageref{MappingPackageOneXmpPage} +\item MatrixXmpPage \ref{MatrixXmpPage} on +page~pageref{MatrixXmpPage} +\item MultiSetXmpPage \ref{MultiSetXmpPage} on +page~pageref{MultiSetXmpPage} +\item MultivariatePolynomialXmpPage \ref{MultivariatePolynomialXmpPage} on +page~pageref{MultivariatePolynomialXmpPage} +\item NoneXmpPage \ref{NoneXmpPage} on +page~pageref{NoneXmpPage} +\item OctonionXmpPage \ref{OctonionXmpPage} on +page~pageref{OctonionXmpPage} +\item OneDimensionalArrayXmpPage \ref{OneDimensionalArrayXmpPage} on +page~pageref{OneDimensionalArrayXmpPage} +\item OperatorXmpPage \ref{OperatorXmpPage} on +page~pageref{OperatorXmpPage} +\item OrderedVariableListXmpPage \ref{OrderedVariableListXmpPage} on +page~pageref{OrderedVariableListXmpPage} +\item OrderlyDifferentialPolynomialXmpPage +\ref{OrderlyDifferentialPolynomialXmpPage} on +page~pageref{OrderlyDifferentialPolynomialXmpPage} +\item PartialFractionXmpPage \ref{PartialFractionXmpPage} on +page~pageref{PartialFractionXmpPage} +\item PermanentXmpPage \ref{PermanentXmpPage} on +page~pageref{PermanentXmpPage} +\item PolynomialXmpPage \ref{PolynomialXmpPage} on +page~pageref{PolynomialXmpPage} +\item QuaternionXmpPage \ref{QuaternionXmpPage} on +page~pageref{QuaternionXmpPage} +\item RadixExpansionXmpPage \ref{RadixExpansionXmpPage} on +page~pageref{RadixExpansionXmpPage} +\item RealClosureXmpPage \ref{RealClosureXmpPage} on +page~pageref{RealClosureXmpPage} +\item RegularTriangularSetXmpPage \ref{RegularTriangularSetXmpPage} on +page~pageref{RegularTriangularSetXmpPage} +\item RomanNumeralXmpPage \ref{RomanNumeralXmpPage} on +page~pageref{RomanNumeralXmpPage} +\item SegmentXmpPage \ref{SegmentXmpPage} on +page~pageref{SegmentXmpPage} +\item SegmentBindingXmpPage \ref{SegmentBindingXmpPage} on +page~pageref{SegmentBindingXmpPage} +\item SetXmpPage \ref{SetXmpPage} on +page~pageref{SetXmpPage} +\item SingleIntegerXmpPage \ref{SingleIntegerXmpPage} on +page~pageref{SingleIntegerXmpPage} +\item SparseTableXmpPage \ref{SparseTableXmpPage} on +page~pageref{SparseTableXmpPage} +\item SquareMatrixXmpPage \ref{SquareMatrixXmpPage} on +page~pageref{SquareMatrixXmpPage} +\item SquareFreeRegularTriangularSetXmpPage +\ref{SquareFreeRegularTriangularSetXmpPage} on +page~pageref{SquareFreeRegularTriangularSetXmpPage} +\item StreamXmpPage \ref{StreamXmpPage} on +page~pageref{StreamXmpPage} +\item StringXmpPage \ref{StringXmpPage} on +page~pageref{StringXmpPage} +\item StringTableXmpPage \ref{StringTableXmpPage} on +page~pageref{StringTableXmpPage} +\item SymbolXmpPage \ref{SymbolXmpPage} on +page~pageref{SymbolXmpPage} +\item TableXmpPage \ref{TableXmpPage} on +page~pageref{TableXmpPage} +\item TextFileXmpPage \ref{TextFileXmpPage} on +page~pageref{TextFileXmpPage} +\item TwoDimensionalArrayXmpPage \ref{TwoDimensionalArrayXmpPage} on +page~pageref{TwoDimensionalArrayXmpPage} +\item UnivariatePolynomialXmpPage \ref{UnivariatePolynomialXmpPage} on +page~pageref{UnivariatePolynomialXmpPage} +\item UniversalSegmentXmpPage \ref{UniversalSegmentXmpPage} on +page~pageref{UniversalSegmentXmpPage} +\item VectorXmpPage \ref{VectorXmpPage} on +page~pageref{VectorXmpPage} +\item VoidXmpPage \ref{VoidXmpPage} on +page~pageref{VoidXmpPage} +\item WuWenTsunTriangularSetXmpPage \ref{WuWenTsunTriangularSetXmpPage} on +page~pageref{WuWenTsunTriangularSetXmpPage} +\item XPBWPolynomialXmpPage \ref{XPBWPolynomialXmpPage} on +page~pageref{XPBWPolynomialXmpPage} +\item XPolynomialXmpPage \ref{XPolynomialXmpPage} on +page~pageref{XPolynomialXmpPage} +\item XPolynomialRingXmpPage \ref{XPolynomialRingXmpPage} on +page~pageref{XPolynomialRingXmpPage} +\item ZeroDimensionalSolvePackageXmpPage +\ref{ZeroDimensionalSolvePackageXmpPage} on +page~pageref{ZeroDimensionalSolvePackageXmpPage} +\end{itemize} +\index{pages!ExamplesExposedPage!xmpexp.ht} +\index{xmpexp.ht!pages!ExamplesExposedPage} +\index{ExamplesExposedPage!xmpexp.ht!pages} +<>= +\begin{page}{ExamplesExposedPage}{Some Examples of Domains and Packages} +This is a menu of examples of some domains and packages. +Click on any item below to see that section. +\beginscroll +\table{ +{ \downlink{AssociationList}{AssociationListXmpPage} } +{ \downlink{BalancedBinaryTree}{BalancedBinaryTreeXmpPage} } +{ \downlink{BasicOperator}{BasicOperatorXmpPage} } +{ \downlink{BinaryExpansion}{BinaryExpansionXmpPage} } +{ \downlink{BinarySearchTree}{BinarySearchTreeXmpPage} } +{ \downlink{CardinalNumber}{CardinalNumberXmpPage} } +{ \downlink{CartesianTensor}{CartesianTensorXmpPage} } +{ \downlink{Character}{CharacterXmpPage} } +{ \downlink{CharacterClass}{CharacterClassXmpPage} } +{ \downlink{CliffordAlgebra}{CliffordAlgebraXmpPage} } +{ \downlink{Complex}{ComplexXmpPage} } +{ \downlink{ContinuedFraction}{ContinuedFractionXmpPage} } +{ \downlink{CycleIndicators}{CycleIndicatorsXmpPage} } +{ \downlink{DeRhamComplex}{DeRhamComplexXmpPage} } +{ \downlink{DecimalExpansion}{DecimalExpansionXmpPage} } +{ \downlink{DistributedMultivariatePolynomial}{DistributedMultivariatePolynomialXmpPage} } +{ \downlink{DoubleFloat}{DoubleFloatXmpPage} } +{ \downlink{EqTable}{EqTableXmpPage} } +{ \downlink{Equation}{EquationXmpPage} } +{ \downlink{Exit}{ExitXmpPage} } +{ \downlink{Expression}{ExpressionXmpPage} } +{ \downlink{Factored}{FactoredXmpPage} } +{ \downlink{FactoredFunctions2}{FactoredFunctionsTwoXmpPage} } +{ \downlink{File}{FileXmpPage} } +{ \downlink{FileName}{FileNameXmpPage} } +{ \downlink{FlexibleArray}{FlexibleArrayXmpPage} } +{ \downlink{Float}{FloatXmpPage} } +{ \downlink{Fraction}{FractionXmpPage} } +{ \downlink{FullPartialFractionExpansion}{FullPartialFractionExpansionXmpPage} } +{ \downlink{GeneralSparseTable}{GeneralSparseTableXmpPage} } +{ \downlink{GroebnerFactorizationPackage}{GroebnerFactorizationPackageXmpPage} } +{ \downlink{Heap}{HeapXmpPage} } +{ \downlink{HexadecimalExpansion}{HexadecimalExpansionXmpPage} } +{ \downlink{Integer}{IntegerXmpPage} } +{ \downlink{IntegerLinearDependence}{IntegerLinearDependenceXmpPage} } +{ \downlink{IntegerNumberTheoryFunctions}{IntegerNumberTheoryFunctionsXmpPage} } +{ \downlink{Kernel}{KernelXmpPage} } +{ \downlink{KeyedAccessFile}{KeyedAccessFileXmpPage} } +{ \downlink{LexTriangularPackage}{LexTriangularPackageXmpPage} } +{ \downlink{LazardSetSolvingPackage}{LazardSetSolvingPackageXmpPage} } +{ \downlink{Library}{LibraryXmpPage} } +{ \downlink{LieExponentials}{LieExponentialsXmpPage} } +{ \downlink{LiePolynomial}{LiePolynomialXmpPage} } +{ \downlink{LinearOrdinaryDifferentialOperator}{LinearOrdinaryDifferentialOperatorXmpPage} } +{ \downlink{LinearOrdinaryDifferentialOperator1}{LinearOrdinaryDifferentialOperatorOneXmpPage} } +{ \downlink{LinearOrdinaryDifferentialOperator2}{LinearOrdinaryDifferentialOperatorTwoXmpPage} } +{ \downlink{List}{ListXmpPage} } +{ \downlink{LyndonWord}{LyndonWordXmpPage} } +{ \downlink{Magma}{MagmaXmpPage} } +{ \downlink{MakeFunction}{MakeFunctionXmpPage} } +{ \downlink{MappingPackage1}{MappingPackageOneXmpPage} } +{ \downlink{Matrix}{MatrixXmpPage} } +{ \downlink{MultiSet}{MultiSetXmpPage} } +{ \downlink{MultivariatePolynomial}{MultivariatePolynomialXmpPage} } +{ \downlink{None}{NoneXmpPage} } +{ \downlink{Octonion}{OctonionXmpPage} } +{ \downlink{OneDimensionalArray}{OneDimensionalArrayXmpPage} } +{ \downlink{Operator}{OperatorXmpPage} } +{ \downlink{OrderedVariableList}{OrderedVariableListXmpPage} } +{ \downlink{OrderlyDifferentialPolynomial}{OrderlyDifferentialPolynomialXmpPage} } +{ \downlink{PartialFraction}{PartialFractionXmpPage} } +{ \downlink{Permanent}{PermanentXmpPage} } +{ \downlink{Polynomial}{PolynomialXmpPage} } +{ \downlink{Quaternion}{QuaternionXmpPage} } +{ \downlink{RadixExpansion}{RadixExpansionXmpPage} } +{ \downlink{RealClosure}{RealClosureXmpPage} } +{ \downlink{RegularTriangularSet}{RegularTriangularSetXmpPage} } +{ \downlink{RomanNumeral}{RomanNumeralXmpPage} } +{ \downlink{Segment}{SegmentXmpPage} } +{ \downlink{SegmentBinding}{SegmentBindingXmpPage} } +{ \downlink{Set}{SetXmpPage} } +{ \downlink{SingleInteger}{SingleIntegerXmpPage} } +{ \downlink{SparseTable}{SparseTableXmpPage} } +{ \downlink{SquareMatrix}{SquareMatrixXmpPage} } +{ \downlink{SquareFreeRegularTriangularSet}{SquareFreeRegularTriangularSetXmpPage} } +{ \downlink{Stream}{StreamXmpPage} } +{ \downlink{String}{StringXmpPage} } +{ \downlink{StringTable}{StringTableXmpPage} } +{ \downlink{Symbol}{SymbolXmpPage} } +{ \downlink{Table}{TableXmpPage} } +{ \downlink{TextFile}{TextFileXmpPage} } +{ \downlink{TwoDimensionalArray}{TwoDimensionalArrayXmpPage} } +{ \downlink{UnivariatePolynomial}{UnivariatePolynomialXmpPage} } +{ \downlink{UniversalSegment}{UniversalSegmentXmpPage} } +{ \downlink{Vector}{VectorXmpPage} } +{ \downlink{Void}{VoidXmpPage} } +{ \downlink{WuWenTsunTriangularSet}{WuWenTsunTriangularSetXmpPage} } +{ \downlink{XPBWPolynomial}{XPBWPolynomialXmpPage} } +{ \downlink{XPolynomial}{XPolynomialXmpPage} } +{ \downlink{XPolynomialRing}{XPolynomialRingXmpPage} } +{ \downlink{ZeroDimensionalSolvePackage}{ZeroDimensionalSolvePackageXmpPage} } +} +\endscroll +\autobuttons +\end{page} + +@ +\section{xpbwpoly.ht} +<>= +\newcommand{\XPBWPolynomialXmpTitle}{XPBWPolynomial} +\newcommand{\XPBWPolynomialXmpNumber}{9.88} + +@ +\subsection{XPBWPolynomial} +\label{XPBWPolynomialXmpPage} +\index{pages!XPBWPolynomialXmpPage!xpbwpoly.ht} +\index{xpbwpoly.ht!pages!XPBWPolynomialXmpPage} +\index{XPBWPolynomialXmpPage!xpbwpoly.ht!pages} +<>= +\begin{page}{XPBWPolynomialXmpPage}{XPBWPolynomial} +\beginscroll +Initialisations +\xtc{ +}{ +\spadpaste{a:Symbol := 'a \bound{a}} +} +\xtc{ +}{ +\spadpaste{b:Symbol := 'b \bound{b}} +} +\xtc{ +}{ +\spadpaste{RN := Fraction(Integer) \bound{RN}} +} +\xtc{ +}{ +\spadpaste{word := OrderedFreeMonoid Symbol \bound{word}} +} +\xtc{ +}{ +\spadpaste{lword := LyndonWord(Symbol) \bound{lword}} +} +\xtc{ +}{ +\spadpaste{base := PoincareBirkhoffWittLyndonBasis Symbol \bound{base}} +} +\xtc{ +}{ +\spadpaste{dpoly := XDistributedPolynomial(Symbol, RN) \bound{dpoly} \free{RN}} +} +\xtc{ +}{ +\spadpaste{rpoly := XRecursivePolynomial(Symbol, RN) \bound{rpoly} \free{RN}} +} +\xtc{ +}{ +\spadpaste{lpoly := LiePolynomial(Symbol, RN) \bound{lpoly} \free{RN}} +} +\xtc{ +}{ +\spadpaste{poly := XPBWPolynomial(Symbol, RN) \bound{poly} \free{RN}} +} +\xtc{ +}{ +\spadpaste{liste : List lword := LyndonWordsList([a,b], 6) \bound{liste} \free{lword a b }} +} + +Let's make some polynomials +\xtc{ +}{ +\spadpaste{0$poly \free{poly}} +} +\xtc{ +}{ +\spadpaste{1$poly \free{poly}} +} +\xtc{ +}{ +\spadpaste{p : poly := a \free{a poly} \bound{p}} +} +\xtc{ +}{ +\spadpaste{q : poly := b \free{b poly} \bound{q}} +} +\xtc{ +}{ +\spadpaste{pq: poly := p*q \free{p q poly} \bound{pq}} +} +\xtc{ +Coerce to distributed polynomial +}{ +\spadpaste{pq :: dpoly \free{pq dpoly}} +} + +Check some polynomial operations +\xtc{ +}{ +\spadpaste{mirror pq \free{pq}} +} +\xtc{ +}{ +\spadpaste{ListOfTerms pq \free{pq}} +} +\xtc{ +}{ +\spadpaste{reductum pq \free{pq}} +} +\xtc{ +}{ +\spadpaste{leadingMonomial pq \free{pq}} +} +\xtc{ +}{ +\spadpaste{coefficients pq \free{pq}} +} +\xtc{ +}{ +\spadpaste{leadingTerm pq \free{pq}} +} +\xtc{ +}{ +\spadpaste{degree pq \free{pq}} +} +\xtc{ +}{ +\spadpaste{pq4:=exp(pq,4) \bound{pq4} \free{pq}} +} +\xtc{ +}{ +\spadpaste{log(pq4,4) - pq \free{pq4 pq} } +} + +Calculations with verification in \axiomType{XDistributedPolynomial}. +\xtc{ +}{ +\spadpaste{lp1 :lpoly := LiePoly liste.10 \free{liste lpoly} \bound{lp1}} +} +\xtc{ +}{ +\spadpaste{lp2 :lpoly := LiePoly liste.11 \free{liste lpoly} \bound{lp2}} +} +\xtc{ +}{ +\spadpaste{lp :lpoly := [lp1, lp2] \free{lp1 lp2 lpoly} \bound{lp}} +} +\xtc{ +}{ +\spadpaste{lpd1: dpoly := lp1 \free{lp1 dpoly} \bound{lpd1}} +} +\xtc{ +}{ +\spadpaste{lpd2: dpoly := lp2 \free{lp2 dpoly} \bound{lpd2}} +} +\xtc{ +}{ +\spadpaste{lpd : dpoly := lpd1 * lpd2 - lpd2 * lpd1 \free{dpoly lpd1 lpd2} \bound{lpd}} +} +\xtc{ +}{ +\spadpaste{lp :: dpoly - lpd \free{lpd dpoly lp}} +} + +Calculations with verification in \axiomType{XRecursivePolynomial}. +\xtc{ +}{ +\spadpaste{p := 3 * lp \free{lp} \bound{pp}} +} +\xtc{ +}{ +\spadpaste{q := lp1 \free{lp1} \bound{qq}} +} +\xtc{ +}{ +\spadpaste{pq:= p * q \free{pp qq} \bound{pqpq}} +} +\xtc{ +}{ +\spadpaste{pr:rpoly := p :: rpoly \free{rpoly pp} \bound{pr}} +} +\xtc{ +}{ +\spadpaste{qr:rpoly := q :: rpoly \free{rpoly qq} \bound{qr}} +} +\xtc{ +}{ +\spadpaste{pq :: rpoly - pr*qr \free{pr qr rpoly pqpq} } +} +\endscroll +\autobuttons +\end{page} + +@ +\section{xpoly.ht} +<>= +\newcommand{\XPolynomialXmpTitle}{XPolynomial} +\newcommand{\XPolynomialXmpNumber}{9.89} + +@ +\subsection{XPolynomial} +\label{XPolynomialXmpPage} +\index{pages!XPolynomialXmpPage!xpoly.ht.ht} +\index{xpoly.ht.ht!pages!XPolynomialXmpPage} +\index{XPolynomialXmpPage!xpoly.ht.ht!pages} +<>= +\begin{page}{XPolynomialXmpPage}{XPolynomial} +\beginscroll +The \spadtype{XPolynomial} domain constructor implements +multivariate polynomials +whose set of variables is \spadtype{Symbol}. +These variables do not commute. +The only parameter of this construtor is +the coefficient ring which may be non-commutative. +However, coefficients and variables commute. +The representation of the polynomials is recursive. +The abbreviation for \spadtype{XPolynomial} is \spadtype{XPOLY}. + +Other constructors like \spadtype{XPolynomialRing}, +\spadtype{XRecursivePolynomial} +\spadtype{XDistributedPolynomial}, +\spadtype{LiePolynomial} and +\spadtype{XPBWPolynomial} +implement multivariate polynomials +in non-commutative variables. + +We illustrate now some of the facilities of the \spadtype{XPOLY} domain constructor. + + +\xtc{ +Define a polynomial ring over the integers. +}{ +\spadpaste{poly := XPolynomial(Integer) \bound{poly}} +} + +\xtc{ +Define a first polynomial, +}{ +\spadpaste{pr: poly := 2*x + 3*y-5 \free{poly} \bound{pr}} +} + + +\xtc{ +and a second one. +}{ +\spadpaste{pr2: poly := pr*pr \free{poly} \bound{pr2}} +} + +\xtc{ +Rewrite {\bf pr} in a distributive way, +}{ +\spadpaste{pd := expand pr \free{pr} \bound{pd}} +} + +\xtc{ +compute its square, +}{ +\spadpaste{pd2 := pd*pd \free{pd} \bound{pd2}} +} + +\xtc{ +and checks that: +}{ +\spadpaste{expand(pr2) - pd2 \free{pr2} \free{pd2}} +} + + +\xtc{ +We define: +}{ +\spadpaste{qr := pr**3 \free{pr} \bound{qr}} +} + +\xtc{ +and: +}{ +\spadpaste{qd := pd**3 \free{pd} \bound{qd}} +} + +\xtc{ +We truncate {\bf qd} at degree {\bf 3}: +}{ +\spadpaste{ trunc(qd,2) \free{qd}} +} + +\xtc{ +The same for {\bf qr}: +}{ +\spadpaste{trunc(qr,2) \free{qr}} +} + +\xtc{ +We define: +}{ +\spadpaste{Word := OrderedFreeMonoid Symbol \bound{Word}} +} + +\xtc{ +and: +}{ +\spadpaste{w: Word := x*y**2 \free{Word} \bound{w}} +} + +\xtc{ +The we can compute the right-quotient of {\bf qr} by {\bf r}: +}{ +\spadpaste{rquo(qr,w) \free{qr} \free{w}} +} + +\xtc{ +and the shuffle-product of {\bf pr} by {\bf r}: +}{ +\spadpaste{sh(pr,w::poly) \free{pr} \free{w}} +} +\endscroll +\autobuttons +\end{page} + +@ +\section{xpr.ht} +<>= +\newcommand{\XPolynomialRingXmpTitle}{XPolynomialRing} +\newcommand{\XPolynomialRingXmpNumber}{9.90} + +@ +\subsection{XPolynomialRing} +\label{XPolynomialRingXmpPage} +\index{pages!XPolynomialRingXmpPage!xpr.ht} +\index{xpr.ht!pages!XPolynomialRingXmpPage} +\index{XPolynomialRingXmpPage!xpr.ht!pages} +<>= +\begin{page}{XPolynomialRingXmpPage}{XPolynomialRing} +\beginscroll +The \spadtype{XPolynomialRing} domain constructor implements +generalized polynomials with coefficients from an arbitrary \spadtype{Ring} +(not necessarily commutative) and whose exponents are +words from an arbitrary \spadtype{OrderedMonoid} +(not necessarily commutative too). +Thus these polynomials are (finite) linear combinations of words. + +This constructor takes two arguments. +The first one is a \spadtype{Ring} +and the second is an \spadtype{OrderedMonoid}. +The abbreviation for \spadtype{XPolynomialRing} is \spadtype{XPR}. + +Other constructors like \spadtype{XPolynomial}, +\spadtype{XRecursivePolynomial} +\spadtype{XDistributedPolynomial}, +\spadtype{LiePolynomial} and +\spadtype{XPBWPolynomial} +implement multivariate polynomials +in non-commutative variables. + +We illustrate now some of the facilities of the \spadtype{XPR} domain constructor. + +\xtc{ +Define the free ordered monoid generated by the symbols. +}{ +\spadpaste{Word := OrderedFreeMonoid(Symbol) \bound{Word}} +} + +\xtc{ +Define the linear combinations of these words with integer coefficients. +}{ +\spadpaste{poly:= XPR(Integer,Word) \free{Word} \bound{poly}} +} + + +\xtc{ +Then we define a first element from {\bf poly}. +}{ +\spadpaste{p:poly := 2 * x - 3 * y + 1 \free{poly} \bound{p}} +} + +\xtc{ +And a second one. +}{ +\spadpaste{q:poly := 2 * x + 1 \free{poly} \bound{q}} +} + + +\xtc{ +We compute their sum, +}{ +\spadpaste{p + q \free{p}\free{q} } +} + +\xtc{ +their product, +}{ +\spadpaste{p * q \free{p}\free{q} } +} + +\xtc{ +and see that variables do not commute. +}{ +\spadpaste{(p +q)^2 -p^2 -q^2 - 2*p*q \free{p}\free{q} } +} + + + +\xtc{ +Now we define a ring of square matrices, +}{ +\spadpaste{M := SquareMatrix(2,Fraction Integer) \bound{M}} +} + +\xtc{ +and the linear combinations of words with these matrices as coefficients. +}{ +\spadpaste{poly1:= XPR(M,Word) \free{Word} \free{M} \bound{poly1}} +} + + +\xtc{ +Define a first matrix, +}{ +\spadpaste{m1:M := matrix [[i*j**2 for i in 1..2] for j in 1..2] \free{M} \bound{m1}} +} + +\xtc{ +a second one, +}{ +\spadpaste{m2:M := m1 - 5/4 \free{M} \free{m1} \bound{m2}} +} + +\xtc{ +and a third one. +}{ +\spadpaste{m3: M := m2**2 \free{M} \free{m2} \bound{m3}} +} + +\xtc{ +Define a polynomial, +}{ +\spadpaste{pm:poly1 := m1*x + m2*y + m3*z - 2/3 \free{poly1} \free{m1} \free{m2} \free{m3} \bound{pm}} +} + + +\xtc{ +a second one, +}{ +\spadpaste{qm:poly1 := pm - m1*x \free{m1} \free{pm} \bound{qm}} +} + +\xtc{ +and the following power. +}{ +\spadpaste{qm**3 \bound{qm}} +} + +\endscroll +\autobuttons +\end{page} + +@ +\section{zdsolve.ht} +<>= +\newcommand{\ZeroDimensionalSolvePackageXmpTitle}{ZeroDimensionalSolvePackage} +\newcommand{\ZeroDimensionalSolvePackageXmpNumber}{9.91} + +@ +\subsection{ZeroDimensionalSolvePackage} +\label{ZeroDimensionalSolvePackageXmpPage} +\index{pages!ZeroDimensionalSolvePackageXmpPage!zdsolve.ht} +\index{zdsolve.ht!pages!ZeroDimensionalSolvePackageXmpPage} +\index{ZeroDimensionalSolvePackageXmpPage!zdsolve.ht!pages} +<>= +\begin{page}{ZeroDimensionalSolvePackageXmpPage}{ZeroDimensionalSolvePackage} +\beginscroll +The \spadtype{ZeroDimensionalSolvePackage} package constructor +provides operations for computing symbolically the complex or real roots of +zero-dimensional algebraic systems. + +The package provides {\bf no} multiplicity information (i.e. some returned +roots may be double or higher) but only distinct roots are returned. + +Complex roots are given by means of univariate representations +of irreducible regular chains. +These representations are computed by the +\axiomOpFrom{univariateSolve}{ZeroDimensionalSolvePackage} +operation (by calling the +\spadtype{InternalRationalUnivariateRepresentationPackage} +package constructor which does the job). + +Real roots are given by means of tuples +of coordinates lying in the \spadtype{RealClosure} of the coefficient ring. +They are computed by the \axiomOpFrom{realSolve}{ZeroDimensionalSolvePackage} +and \axiomOpFrom{positiveSolve}{ZeroDimensionalSolvePackage} operations. +The former computes all the solutions of the input system with real coordinates +whereas the later concentrate +on the solutions with (strictly) positive coordinates. +In both cases, the computations +are performed by the \spadtype{RealClosure} constructor. + +Both computations of complex roots +and real roots rely on triangular decompositions. +These decompositions can be computed in two different ways. +First, by a applying the \axiomOpFrom{zeroSetSplit}{RegularTriangularSet} +operation from the \spadtype{REGSET} domain constructor. +In that case, no Groebner bases are computed. +This strategy is used by default. +Secondly, by applying the \axiomOpFrom{zeroSetSplit}{LexTriangularPackage} +from \spadtype{LEXTRIPK}. +To use this later strategy with the operations +\axiomOpFrom{univariateSolve}{ZeroDimensionalSolvePackage}, +\axiomOpFrom{realSolve}{ZeroDimensionalSolvePackage} +and \axiomOpFrom{positiveSolve}{ZeroDimensionalSolvePackage} +one just needs to use an extra boolean argument. + +Note that the way of understanding triangular decompositions +is detailed in the example of the \spadtype{RegularTriangularSet} +constructor. + +The \spadtype{ZeroDimensionalSolvePackage} constructor takes three arguments. +The first one {\bf R} is the coefficient ring; +it must belong to the categories +\spadtype{OrderedRing}, \spadtype{EuclideanDomain}, +\spadtype{CharacteristicZero} +and \spadtype{RealConstant}. +This means essentially that {\bf R} is \spadtype{Integer} or +\spadtype{Fraction(Integer)}. +The second argument {\bf ls} is the list of variables involved +in the systems to solve. +The third one MUST BE {\bf concat(ls,s)} where +{\bf s} is an additional symbol used for the univariate representations. +The abbreviation for \spadtype{ZeroDimensionalSolvePackage} is +\spadtype{ZDSOLVE}. + +We illustrate now how to use the constructor \spadtype{ZDSOLVE} +by two examples: the {\em Arnborg and Lazard} system and the +{\em L-3} system (Aubry and Moreno Maza). +Note that the use of this package is also demonstrated in the example +of the \spadtype{LexTriangularPackage} constructor. + +\xtc{ +Define the coefficient ring. +}{ +\spadpaste{R := Integer \bound{R}} +} + +\xtc{ +Define the lists of variables: +}{ +\spadpaste{ls : List Symbol := [x,y,z,t] \bound{ls}} +} + +\xtc{ +and: +}{ +\spadpaste{ls2 : List Symbol := [x,y,z,t,new()$Symbol] \bound{ls2}} +} + +\xtc{ +Call the package: +}{ +\spadpaste{pack := ZDSOLVE(R,ls,ls2) \free{ls} \free{ls2} \free{R} \bound{pack}} +} + +\xtc{ +Define a polynomial system (Arnborg-Lazard) +}{ +\spadpaste{p1 := x**2*y*z + x*y**2*z + x*y*z**2 + x*y*z + x*y + x*z + y*z \bound{p1}} +} +\xtc{ +}{ +\spadpaste{p2 := x**2*y**2*z + x*y**2*z**2 + x**2*y*z + x*y*z + y*z + x + z \bound{p2}} +} +\xtc{ +}{ +\spadpaste{p3 := x**2*y**2*z**2 + x**2*y**2*z + x*y**2*z + x*y*z + x*z + z + 1 \bound{p3}} +} +\xtc{ +}{ +\spadpaste{lp := [p1, p2, p3] \free{p1} \free{p2} \free{p3} \bound{lp}} +} +Note that these polynomials do not involve the variable {\bf t}; +we will use it in the second example. + +\xtc{ +First compute a decomposition into regular chains +(i.e. regular triangular sets). +}{ +\spadpaste{triangSolve(lp)$pack \free{lp} \free{pack}} +} + +We can see easily from this decomposition (consisting of a single +regular chain) that the input system has 20 complex roots. + +\xtc{ +Then we compute a univariate representation of this regular chain. +}{ +\spadpaste{univariateSolve(lp)$pack \free{lp} \free{pack}} +} + +We see that the zeros of our regular chain are split into three components. +This is due to the use of univariate polynomial factorization. + +Each of these components consist of two parts. +The first one is an irreducible univariate polynomial {\bf p(?)} which defines +a simple algebraic extension of the field of fractions of {\bf R}. +The second one consists of multivariate polynomials {\bf pol1(x,\%A)}, +{\bf pol2(y,\%A)} and {\bf pol3(z,\%A)}. +Each of these polynomials involve two variables: one is an indeterminate +{\bf x}, {\bf y} or {\bf z} +of the input system {\bf lp} and the +other is {\bf \%A} which represents any root of {\bf p(?)}. +Recall that this {\bf \%A} is the last element of the third parameter of +\spadtype{ZDSOLVE}. +Thus any complex root {\bf ?} of {\bf p(?)} +leads to a solution of the input system {\bf lp} +by replacing {\bf \%A} by this {\bf ?} in {\bf pol1(x,\%A)}, +{\bf pol2(y,\%A)} and {\bf pol3(z,\%A)}. +Note that the polynomials {\bf pol1(x,\%A)}, +{\bf pol2(y,\%A)} and {\bf pol3(z,\%A)} have degree one +w.r.t. {\bf x}, {\bf y} or {\bf z} respectively. +This is always the case for all univariate representations. +Hence the operation {\bf univariateSolve} replaces a +system of multivariate polynomials by a list of univariate +polynomials, what justifies its name. +Another example of univariate representations illustrates +the \spadtype{LexTriangularPackage} package constructor. + +\xtc{ +We now compute the solutions with real coordinates: +}{ +\spadpaste{lr := realSolve(lp)$pack \free{lp} \free{pack} \bound{lr}} +} + +\xtc{ +The number of real solutions for the input system is: +}{ +\spadpaste{\# lr \free{lr}} +} + +Each of these real solutions is given by a +list of elements in \spadtype{RealClosure(R)}. +In these 8 lists, the first element is a value of {\bf z}, +the second of {\bf y} and the last of {\bf x}. +This is logical since by setting the list of variables of the package +to {\bf [x,y,z,t]} we mean that the elimination ordering on the +variables is {\bf t < z < y < x }. +Note that each system treated by the \spadtype{ZDSOLVE} package constructor +needs only to be zero-dimensional w.r.t. the variables involved in the system it-self +and not necessarily w.r.t. all the variables used to define the package. + +\xtc{ +We can approximate these real numbers as follows. +This computation takes between 30 sec. and 5 min, depending on your machine. +}{ +\spadpaste{[[approximate(r,1/1000000) for r in point] for point in lr] \free{lr}} +} + +\xtc{ +We can also concentrate on the solutions with real (strictly) positive coordinates: +}{ +\spadpaste{lpr := positiveSolve(lp)$pack \free{lp} \free{pack} \bound{lpr}} +} + +Thus we have checked that the input system has no solution with strictly positive coordinates. + + +\xtc{ +Let us define another polynomial system ({\em L-3}). +}{ +\spadpaste{f0 := x**3 + y + z + t- 1 \bound{f0}} +} +\xtc{ +}{ +\spadpaste{f1 := x + y**3 + z + t -1 \bound{f1}} +} +\xtc{ +}{ +\spadpaste{f2 := x + y + z**3 + t-1 \bound{f2}} +} +\xtc{ +}{ +\spadpaste{f3 := x + y + z + t**3 -1 \bound{f3}} +} +\xtc{ +}{ +\spadpaste{lf := [f0, f1, f2, f3] \free{f0} \free{f1} \free{f2} \free{f3} \bound{lf}} +} + + +\xtc{ +First compute a decomposition into regular chains +(i.e. regular triangular sets). +}{ +\spadpaste{lts := triangSolve(lf)$pack \free{lf} \free{pack} \bound{lts}} +} + + +\xtc{ +Then we compute a univariate representation. +}{ +\spadpaste{univariateSolve(lf)$pack \free{lf} \free{pack}} +} + +Note that this computation is made from the input system {\bf lf}. +\xtc{ +However it is possible to reuse a pre-computed regular chain as follows: +}{ +\spadpaste{ts := lts.1 \free{lts} \bound{ts}} +} +\xtc{ +}{ +\spadpaste{univariateSolve(ts)$pack \free{ts} \free{pack}} +} +\xtc{ +}{ +\spadpaste{realSolve(ts)$pack \free{ts} \free{pack}} +} + +\xtc{ +We compute now the full set of points with real coordinates: +}{ +\spadpaste{lr2 := realSolve(lf)$pack \free{lf} \free{pack} \bound{lr2}} +} + + +\xtc{ +The number of real solutions for the input system is: +}{ +\spadpaste{\#lr2 \free{lr2}} +} +Another example of computation of real solutions illustrates +the \spadtype{LexTriangularPackage} package constructor. + +\xtc{ +We concentrate now on the solutions with real (strictly) positive coordinates: +}{ +\spadpaste{lpr2 := positiveSolve(lf)$pack \free{lf} \free{pack} \bound{lpr2}} +} + +\xtc{ +Finally, we approximate the coordinates of this point with 20 exact digits: +}{ +\spadpaste{[approximate(r,1/10**21)::Float for r in lpr2.1] \free{lpr2}} +} +\endscroll +\autobuttons +\end{page} + +@ +\section{zlindep.ht} +<>= +\newcommand{\IntegerLinearDependenceXmpTitle}{IntegerLinearDependence} +\newcommand{\IntegerLinearDependenceXmpNumber}{9.35} + +@ +\subsection{IntegerLinearDependence} +\label{IntegerLinearDependenceXmpPage} +\index{pages!IntegerLinearDependenceXmpPage!zlindep.ht} +\index{zlindep.ht!pages!IntegerLinearDependenceXmpPage} +\index{IntegerLinearDependenceXmpPage!zlindep.ht!pages} +<>= +\begin{page}{IntegerLinearDependenceXmpPage}{IntegerLinearDependence} +\beginscroll + +The elements \texht{$v_1, \dots,v_n$}{\spad{v1,...,vn}} +of a module \spad{M} over a ring \spad{R} are +said to be {\it linearly dependent over \spad{R}} if there exist +\texht{$c_1,\dots,c_n$}{\spad{c1, ..., cn}} in \spad{R}, +not all \smath{0}, +such that +\texht{$c_1 v_1 + \dots c_n v_n = 0$}{\spad{c1*v1 + ... + cn*vn = 0}}. +If such \texht{$c_i$}{\spad{ci}}'s exist, +they form what is called a {\it linear dependence +relation over \spad{R}} for the \texht{$v_i$}{\spad{vi}}'s. + +The package \spadtype{IntegerLinearDependence} provides functions +for testing whether some elements of a module over the integers are +linearly dependent over the integers, and to find the linear +dependence relations, if any. +% +\xtc{ +Consider the domain of two by two square matrices with integer entries. +}{ +\spadpaste{M := SQMATRIX(2,INT) \bound{M}} +} +% +% +\xtc{ +Now create three such matrices. +}{ +\spadpaste{m1: M := squareMatrix matrix [[1, 2], [0, -1]] \free{M}\bound{m1}} +} +\xtc{ +}{ +\spadpaste{m2: M := squareMatrix matrix [[2, 3], [1, -2]] \free{M}\bound{m2}} +} +\xtc{ +}{ +\spadpaste{m3: M := squareMatrix matrix [[3, 4], [2, -3]] \free{M}\bound{m3}} +} +% +% +\xtc{ +This tells you whether \spad{m1}, \spad{m2} and \spad{m3} are linearly +dependent over the integers. +}{ +\spadpaste{linearlyDependentOverZ? vector [m1, m2, m3] \free{m1 m2 m3}} +} +% +% +\xtc{ +Since they are linearly dependent, you can ask for the dependence +relation. +}{ +\spadpaste{c := linearDependenceOverZ vector [m1, m2, m3] \free{m1 m2 m3}\bound{c}} +} +% +% +\xtc{ +This means that the following linear combination should be \spad{0}. +}{ +\spadpaste{c.1 * m1 + c.2 * m2 + c.3 * m3 \free{c m1 m2 m3}} +} +% +When a given set of elements are linearly dependent over \spad{R}, this +also means that at least one of them can be rewritten as a linear +combination of the others with coefficients in the quotient field of +\spad{R}. +% +\xtc{ +To express a given element in terms of other elements, use the operation +\spadfunFrom{solveLinearlyOverQ}{IntegerLinearDependence}. +}{ +\spadpaste{solveLinearlyOverQ(vector [m1, m3], m2) \free{m1 m2 m3}} +} +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Pages (ug.ht)} +DO NOT MODIFY THIS FILE BY HAND !! Created by chapmenu.awk. +\section{Users Guide} +\label{UsersGuidePage} +\begin{itemize} +\item ugWhatsNewTwoTwoPage \ref{ugWhatsNewTwoTwoPage} on +page~\pageref{ugWhatsNewTwoTwoPage} +\item ugIntroPage \ref{ugIntroPage} on page~\pageref{ugIntroPage} +\item ugTypesPage \ref{ugTypesPage} on page~\pageref{ugTypesPage} +\item ugHyperPage \ref{ugHyperPage} on page~\pageref{ugHyperPage} +\item ugInOutPage \ref{ugInOutPage} on page~\pageref{ugInOutPage} +\item ugLangPage \ref{ugLangPage} on page~\pageref{ugLangPage} +\item ugUserPage \ref{ugUserPage} on page~\pageref{ugUserPage} +\item ugGraphPage \ref{ugGraphPage} on page~\pageref{ugGraphPage} +\item ugProblemPage \ref{ugProblemPage} on page~\pageref{ugProblemPage} +\item ExamplesExposedPage \ref{ExamplesExposedPage} on +page~\pageref{ExamplesExposedPage} +\item ugIntProgPage \ref{ugIntProgPage} on page~\pageref{ugIntProgPage} +\item ugPackagesPage \ref{ugPackagesPage} on page~\pageref{ugPackagesPage} +\item ugCategoriesPage \ref{ugCategoriesPage} on +page~\pageref{ugCategoriesPage} +\item ugDomainsPage \ref{ugDomainsPage} on page~\pageref{ugDomainsPage} +\item ugBrowsePage \ref{ugBrowsePage} on page~\pageref{ugBrowsePage} +\item ugWhatsNewPage \ref{ugWhatsNewPage} on page~\pageref{ugWhatsNewPage} +\item ugSysCmdPage \ref{ugSysCmdPage} on page~\pageref{ugSysCmdPage} +\item ugAppGraphicsPage \ref{ugAppGraphicsPage} on +page~\pageref{ugAppGraphicsPage} +\end{itemize} +\index{pages!UsersGuidePage!ug.ht} +\index{ug.ht!pages!UsersGuidePage} +\index{UsersGuidePage!ug.ht!pages} +<>= +\begin{page}{UsersGuidePage}{Users Guide} +This is the table of contents for the Users Guide. +Click on any item below to see that section. +\beginscroll +\indent{3} +\beginmenu +\menudownlink{{0. What's New in Axiom Version 2.2}}{ugWhatsNewTwoTwoPage} +\endmenu +\indent{0} +Part I. Basic Features of Axiom +\indent{3} +\beginmenu +\menudownlink{{1. An Overview of Axiom}}{ugIntroPage} +\menudownlink{{2. Using Types and Modes}}{ugTypesPage} +\menudownlink{{3. Using \HyperName{}}}{ugHyperPage} +\menudownlink{{4. Input Files and Output Styles}}{ugInOutPage} +\menudownlink{{5. Introduction to the Axiom Interactive Language}}{ugLangPage} +\menudownlink{{6. User-Defined Functions, Macros and Rules}}{ugUserPage} +\menudownlink{{7. Graphics}}{ugGraphPage} +\endmenu +\indent{0} +Part II. Advanced Problem Solving and Examples +\indent{3} +\beginmenu +\menudownlink{{8. Advanced Problem Solving}}{ugProblemPage} +\menudownlink{{9. Some Examples for Domains and Packages}}{ExamplesExposedPage} +\endmenu +\indent{0} +Part III. Advanced Programming in Axiom +\indent{3} +\beginmenu +\menudownlink{{10. Interactive Programming}}{ugIntProgPage} +\menudownlink{{11. Packages}}{ugPackagesPage} +\menudownlink{{12. Categories}}{ugCategoriesPage} +\menudownlink{{13. Domains}}{ugDomainsPage} +\menudownlink{{14. Browse}}{ugBrowsePage} +\menudownlink{{15. What's New in Axiom Version 2.0}}{ugWhatsNewPage} +\endmenu +\indent{0} +Appendices. +\indent{3} +\beginmenu +\menudownlink{{A. Axiom System Commands}}{ugSysCmdPage} +\menudownlink{{F. Programs for Axiom Images}}{ugAppGraphicsPage} +\menudownlink{{G. Glossary}}{GlossaryPage} +\endmenu +\indent{0} +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 0 (ug00.ht)} +<>= +\newcommand{\ugWhatsNewTwoTwoTitle}{What's New in Axiom Version 2.2} +\newcommand{\ugWhatsNewTwoTwoNumber}{0.} + +@ +\section{What's New in Axiom Version 2.2} +\label{ugWhatsNewTwoTwoPage} +\begin{itemize} +\item ugTwoTwoAldorPage \ref{ugTwoTwoAldorPage} on +page~\pageref{ugTwoTwoAldorPage} +\item ugTwoTwoPolynomialsPage \ref{ugTwoTwoPolynomialsPage} on +page~\pageref{ugTwoTwoPolynomialsPage} +\item ugTwoTwoHyperdocPage \ref{ugTwoTwoHyperdocPage} on +page~\pageref{ugTwoTwoHyperdocPage} +\item ugTwoTwoNAGLinkPage \ref{ugTwoTwoNAGLinkPage} on +page~\pageref{ugTwoTwoNAGLinkPage} +\item ugTwoTwoCCLPage \ref{ugTwoTwoCCLPage} on +page~\pageref{ugTwoTwoCCLPage} +\end{itemize} +\index{pages!ugWhatsNewTwoTwoPage!ug00.ht} +\index{ug00.ht!pages!ugWhatsNewTwoTwoPage} +\index{ugWhatsNewTwoTwoPage!ug00.ht!pages} +<>= +\begin{page}{ugWhatsNewTwoTwoPage}{0. What's New in Axiom Version 2.2} +\beginscroll + +\beginmenu + \menudownlink{{0.1. \axiomxl{} compiler - Enhancements and Additions}} +{ugTwoTwoAldorPage} + \menudownlink{{0.2. New polynomial domains and algorithms}} +{ugTwoTwoPolynomialsPage} + \menudownlink{{0.3. Enhancements to HyperDoc and Graphics}} +{ugTwoTwoHyperdocPage} + \menudownlink{{0.4. Enhancements to NAGLink}}{ugTwoTwoNAGLinkPage} + \menudownlink{{0.5. Enhancements to the Lisp system}}{ugTwoTwoCCLPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTwoTwoAldorTitle}{\axiomxl{} compiler - Enhancements and Additions} +\newcommand{\ugTwoTwoAldorNumber}{0.1.} + +@ +\section{Aldor compiler - Enhancements and Additions} +\label{ugTwoTwoAldorPage} +\index{pages!ugTwoTwoAldorPage!ug00.ht} +\index{ug00.ht!pages!ugTwoTwoAldorPage} +\index{ugTwoTwoAldorPage!ug00.ht!pages} +<>= +\begin{page}{ugTwoTwoAldorPage}{0.1. \axiomxl{} compiler - Enhancements and Additions} +\beginscroll + +Numerous bug fixes and improvements have been implemented in version 1.1.12 +of \axiomxl{} which is included in this release. You may also notice the name +{\it Aldor} being used when referring to \axiomxl{}. + +The format of {\bf .ao} files has changed somewhat so you need +to recompile your {\bf .as} source files. + +An updated User's Guide is included for on-line use. We provide +TeX {\bf .dvi} format (including hyper-references), Acrobat {\bf .pdf} +format, PostScript {\bf .ps} format and plain ASCII {bf .txt}. +An up-to-date {\bf .dvi} +viewer should be able to allow you to follow the cross-references. +These files can be found in +{\bf \env{AXIOM}/compiler/doc/axlugII.*}. + +An exception mechanism has been implemented. You can now throw and +catch exceptions which are fully-fledged domains that can carry information. +See Chapter 31 in the on-line guide for details. + +Support for linking with Fortran-77 code has been added. You can call +Fortran-77 code from {\it Aldor} and vice-versa. See Chapter 32 +in the on-line guide for details. + +The \spad{ref} keyword has been added. You must use \spad{_ref} to +enable use as an identifier. + +A generic configurable C compiler and linker driver i{\bf unicl} has been +implemented. You can now select C compiler and linker options with +greater ease and you can give names to specific configurations. +See Chapter 28 in the on-line guide for details. + +There is now support for accessing IEEE floating-point rounding modes +and exception flags. You must ensure however that your C compiler +and linker will respect the IEEE standard by enabling the appropriate +options through {\bf unicl}. +See BasicIeeeControlPackage (26.7) in the on-line guide. + +Special runtime libraries ({\bf libfoam-gmp.a}) have been prepared to enable +a drop-in replacement of Aldor's big-integer arithmetic with the GNU gmp +big-integer library. The executable script {\bf axiomxl.gmp} (in the same place +as {\bf axiomxl}) expects the {\bf GmpDir} environment variable to be set +to the directory where a compiled GNU gmp library resides ({\bf libgmp.a}) and +arranges for the appropriate libraries to be linked in when generating +a stand-alone executable. + +The language-defined type TrailingArray has been introduced. See +TrailingArray (13.7) in the on-line guide. + +The supplied library {\bf libaxllib.al}, supporting stand-alone programs, +has been updated. Automatically +generated documentation can be found in Chapters 25 and 26 of the on-line +guide. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTwoTwoPolynomialsTitle}{New polynomial domains and algorithms} +\newcommand{\ugTwoTwoPolynomialsNumber}{0.2.} + +@ +\section{New polynomial domains and algorithms} +\label{ugTwoTwoPolynomialsPage} +\index{pages!ugTwoTwoPolynomialsPage!ug00.ht} +\index{ug00.ht!pages!ugTwoTwoPolynomialsPage} +\index{ugTwoTwoPolynomialsPage!ug00.ht!pages} +<>= +\begin{page}{ugTwoTwoPolynomialsPage}{0.2. New polynomial domains and algorithms} +\beginscroll + +Univariate polynomial factorisation over the integers has been +enhanced by updates to the \spadtype{GaloisGroupFactorizer} type +and friends from Frederic Lehobey (Frederic.Lehobey@lifl.fr, University of +Lille I, France). + +The package constructor \spadtype{PseudoRemainderSequence} +provides efficient algorithms by Lionel Ducos +(Lionel.Ducos@mathlabo.univ-poitiers.fr, University of Poitiers, France) +for computing sub-resultants. +This leads to a speed up in many places in Axiom where +sub-resultants are computed (polynomial system solving, +algebraic factorization, integration). + +Based on this package, the domain constructor +\spadtype{NewSparseUnivariatePolynomial} +extends the constructor \spadtype{SparseUnivariatePolynomial}. +In a similar way, the \spadtype{NewSparseMultivariatePolynomial} extends +the constructor \spadtype{SparseUnivariatePolynomial}; +it also provides some additional operations related +to polynomial system solving by means of triangular sets. + +Several domain constructors implement +regular triangular sets (or regular chains). +Among them \spadtype{RegularTriangularSet} +and \spadtype{SquareFreeRegularTriangularSet}. +They also implement an algorithm by Marc Moreno Maza (marc@nag.co.uk, NAG) +for computing triangular decompositions of polynomial systems. +This method is refined in the package \spadtype{LazardSetSolvingPackage} +in order to produce decompositions by means of Lazard triangular sets. +For the case of polynomial systems with finitely many solutions, +these decompositions can also be computed by +the package \spadtype{LexTriangularPackage}. + +The domain constructor \spadtype{RealClosure} by Renaud Rioboo +(Renaud.Rioboo@lip6.fr, University of Paris 6, France) +provides the real closure of an ordered field. +The implementation is based on interval arithmetic. +Moreover, the design of this constructor and its related +packages allows an easy use of other codings for real algebraic numbers. + +Based on triangular decompositions and the \spadtype{RealClosure} constructor, +the package \spadtype{ZeroDimensionalSolvePackage} +provides operations for computing symbolically the real or complex roots +of polynomial systems with finitely many solutions. + +Polynomial arithmetic with non-commutative variables +has been improved too by a contribution of Michel Petitot +(Michel.Petitot@lifl.fr, University of Lille I, France). +The domain constructors \spadtype{XRecursivePolynomial} +and \spadtype{XDistributedPolynomial} provide +recursive and distributed representations for these polynomials. +They are the non-commutative equivalents for +the \spadtype{SparseMultivariatePolynomial} +and \spadtype{DistributedMultivariatePolynomial} constructors. +The constructor \spadtype{LiePolynomial} implement Lie +polynomials in the Lyndon basis. +The constructor \spadtype{XPBWPolynomial} manage polynomials +with non-commutative variables in +the \texht{Poincar\'e}{Poincare\space{-1}'}-Birkhoff-Witt basis from the Lyndon basis. +This allows to compute in the Lie Group associated with a +free nilpotent Lie algebra by using the \spadtype{LieExponentials} +domain constructor. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTwoTwoHyperdocTitle}{Enhancements to HyperDoc and Graphics} +\newcommand{\ugTwoTwoHyperdocNumber}{0.3.} + +@ +\section{Enhancements to HyperDoc and Graphics} +\label{ugTwoTwoHyperdocPage} +\index{pages!ugTwoTwoHyperdocPage!ug00.ht} +\index{ug00.ht!pages!ugTwoTwoHyperdocPage} +\index{ugTwoTwoHyperdocPage!ug00.ht!pages} +<>= +\begin{page}{ugTwoTwoHyperdocPage}{0.3. Enhancements to HyperDoc and Graphics} +\beginscroll + +From this version of Axiom onwards, the pixmap format used to save graphics +images in color and to display them in HyperDoc has been changed to the +industry-standard XPM format. See {\tt ftp://koala.inria.fr/pub/xpm}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTwoTwoNAGLinkTitle}{Enhancements to NAGLink} +\newcommand{\ugTwoTwoNAGLinkNumber}{0.4.} + +@ +\section{Enhancements to NAGLink} +\label{ugTwoTwoNAGLinkPage} +\index{pages!ugTwoTwoNAGLinkPage!ug00.ht} +\index{ug00.ht!pages!ugTwoTwoNAGLinkPage} +\index{ugTwoTwoNAGLinkPage!ug00.ht!pages} +<>= +\begin{page}{ugTwoTwoNAGLinkPage}{0.4. Enhancements to NAGLink} +\beginscroll + +This version of Axiom incorporates the Axiom/NAG Numerical Analyst (ANNA) +software developed in the University of Bath. ANNA is an expert system which +uses Axiom algebra functionality in choosing the most appropriate NAG Fortran Library +routine for a particular problem. Documentation is provided on-line on the main HyperDoc page. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTwoTwoCCLTitle}{Enhancements to the Lisp system} +\newcommand{\ugTwoTwoCCLNumber}{0.5.} + +@ +\section{Enhancements to the Lisp system} +\label{ugTwoTwoCCLPage} +\index{pages!ugTwoTwoCCLPage!ug00.ht} +\index{ug00.ht!pages!ugTwoTwoCCLPage} +\index{ugTwoTwoCCLPage!ug00.ht!pages} +<>= +\begin{page}{ugTwoTwoCCLPage}{0.5. Enhancements to the Lisp system} +\beginscroll + +In this version of Axiom, certain Library operations have been +accelerated by converting their Lisp implementations into kernel +operations implemented directly in C. Here is a list of the +accelerated operations. The given names encode the abbreviated type +the operation comes from, the name of the operation and, in the case +of exported functions, an encoded signature and numerical index. + +\begin{verbatim} +|A1AGG-;=;2AB;28| +|A1AGG-;copy;2A;19| +|A1AGG-;sort!;M2A;2| +|ABELGRP-;*;Nni2S;3| +|ABELGRP-;-;3S;1| +|ABELMON-;*;Pi2S;2| +|ABELMON-;zero?;SB;1| +|AGG-;empty?;SB;3| +|AGG-;size?;SNniB;6| +|ALIST;keys;$L;6| +|ALIST;search;Key$U;15| +|ARR2CAT-;copy;2S;10| +|BOP;<;2$B;29| +|BOP;=;2$B;27| +|BOP;has?;$SB;9| +|BOP;is?;$SB;1| +|BOP;name;$S;2| +|BOP;properties;$Al;3| +|BOP;property;$SU;7| +|BOP;weight;$Nni;28| +|COMPCAT-;*;R2S;18| +|COMPCAT-;-;2S;17| +|COMPCAT-;=;2SB;15| +|COMPCAT-;exquo;SRU;46| +|COMPCAT-;recip;SU;48| +|COMPCAT-;rem;3S;53| +|COMPCAT-;unitNormal;SR;49| +|COMPLEX;*;3$;10| +|COMPLEX;+;3$;9| +|COMPLEX;coerce;R$;5| +|COMPLEX;exquo;2$U;11| +|COMPLEX;one?;$B;4| +|COMPLEX;zero?;$B;3| +|DIRPROD;<;2$B;18| +|DIRPROD;subtractIfCan;2$U;14| +|ELAGG-;removeDuplicates;2A;12| +|ELTAGG-;qelt;SDomIm;1| +|ELTAGG-;qsetelt!;SDom2Im;2| +|EUCDOM-;gcd;3S;5| +|EUCDOM-;unitNormalizeIdealElt| +|EXPR;*;3$;11| +|EXPR;+;3$;12| +|EXPR;-;2$;8| +|EXPR;/;3$;14| +|EXPR;=;2$B;21| +|EXPR;algkernels!0| +|EXPR;algkernels| +|EXPR;coerce;I$;10| +|EXPR;coerce;Smp$;24| +|EXPR;commonk0| +|EXPR;commonk| +|EXPR;denom;$Smp;23| +|EXPR;numer;$Smp;22| +|EXPR;reduc| +|EXPR;zero?;$B;7| +|FACUTIL;lowerPolynomial;SupSup;1| +|FAMR-;coefficients;SL;4| +|FAMR-;ground;SR;2| +|FFP;*;3$;21| +|FFP;+;3$;22| +|FFP;-;3$;23| +|FFP;=;2$B;24| +|FIELD-;/;3S;11| +|FIELD-;inv;2S;4| +|FLAGG-;sort!;2A;8| +|FLAGG-;sort;M2A;6| +|FLASORT;QuickSort| +|FLASORT;partition| +|FLASORT;quickSort;M2V;1| +|FM;*;R2$;1| +|FRAC;*;3$;18| +|FRAC;*;I2$;19| +|FRAC;+;3$;16| +|FRAC;=;2$B;22| +|FRAC;cancelGcd| +|FRAC;coerce;S$;1| +|FRAC;normalize| +|FRAC;one?;$B;23| +|FRAC;recip;$U;13| +|FRAC;zero?;$B;2| +|FSAGG-;brace;LA;3| +|GDMP;univariate;$OvlSup;21| +|HDP;<;2$B;1| +|IARRAY1;#;$Nni;1| +|IARRAY1;elt;$IS;16| +|IARRAY1;fill!;$S$;2| +|IARRAY1;map;M3$;8| +|IARRAY1;maxIndex;$I;13| +|IARRAY1;minIndex;$I;3| +|IARRAY1;new;NniS$;5| +|IARRAY1;qelt;$IS;14| +|IARRAY1;qsetelt!;$I2S;15| +|IARRAY1;setelt;$I2S;17| +|IDPAM;+;3$;4| +|IDPAM;map;M2$;7| +|IDPAM;monomial;AS$;6| +|IDPO;=;2$B;1| +|IFARRAY;#;$Nni;4| +|IFARRAY;concat!;$S$;21| +|IFARRAY;elt;$IS;17| +|IFARRAY;empty;$;3| +|IFARRAY;growAndFill| +|IFARRAY;growWith| +|IFARRAY;maxIndex;$I;6| +|IFARRAY;minIndex;$I;7| +|IFARRAY;new;NniS$;8| +|IFARRAY;removeDuplicates!;2$;30| +|IFARRAY;setelt;$I2S;18| +|IIARRAY2;elt;$2IR;11| +|IIARRAY2;empty?;$B;1| +|IIARRAY2;maxColIndex;$I;7| +|IIARRAY2;maxRowIndex;$I;6| +|IIARRAY2;minColIndex;$I;5| +|IIARRAY2;minRowIndex;$I;4| +|IIARRAY2;ncols;$Nni;9| +|IIARRAY2;nrows;$Nni;8| +|IIARRAY2;qelt;$2IR;10| +|IIARRAY2;qsetelt!;$2I2R;12| +|ILIST;concat!;3$;25| +|ILIST;copy;2$;20| +|ILIST;empty;$;6| +|ILIST;first;$S;4| +|ILIST;member?;S$B;24| +|ILIST;mergeSort| +|ILIST;minIndex;$I;18| +|ILIST;removeDuplicates!;2$;26| +|ILIST;rest;$Nni$;19| +|ILIST;sort!;M2$;27| +|ILIST;split!;$I$;29| +|IMATLIN;rowEchelon;2M;3| +|INS-;symmetricRemainder;3S;27| +|INT;exquo;2$U;44| +|INT;one?;$B;2| +|INT;positiveRemainder;3$;23| +|INT;unitNormal;$R;47| +|INTDOM-;unitCanonical;2S;2| +|ISTRING;<;2$B;6| +|KDAGG-;key?;KeySB;1| +|KERNEL;<;2$B;14| +|KERNEL;=;2$B;13| +|KERNEL;B2Z| +|KERNEL;argument;$L;6| +|KERNEL;operator;$Bo;5| +|KERNEL;position;$Nni;7| +|KERNEL;triage| +|LO;-;2$;3| +|LO;=;2$B;4| +|LSAGG-;<;2AB;25| +|LSAGG-;reduce;MA2S;16| +|LSAGG-;select!;M2A;5| +|MATCAT-;*;3S;29| +|MATCAT-;*;S2Col;32| +|MDDFACT;reduction!0| +|MDDFACT;reduction| +|MODRING;reduce;RMod$;6| +|MODRING;zero?;$B;10| +|MONOID-;one?;SB;2| +|NNI;subtractIfCan;2$U;3| +|NSMP;mvar;$VarSet;5| +|OVAR;<;2$B;10| +|PERMGRP;inv| +|PERMGRP;orbitWithSvc| +|PERMGRP;testIdentity| +|PERMGRP;times| +|PGCD;better| +|PGCD;gcd;3P;15| +|PGCD;gcdTermList| +|POLYCATQ;variables;FL;5| +|PR;*;3$;20| +|PR;addm!| +|PR;coerce;R$;12| +|PR;degree;$E;4| +|PR;leadingCoefficient;$R;6| +|PR;reductum;2$;8| +|PRIMARR;#;$Nni;1| +|PRIMARR;fill!;$S$;9| +|PRIMARR;new;NniS$;4| +|PRTITION;<;2$B;5| +|REPSQ;expt;SPiS;1| +|RING-;coerce;IS;1| +|SAE;*;3$;15| +|SAE;+;3$;13| +|SAE;-;2$;14| +|SAE;=;2$B;12| +|SAE;reduce;UP$;11| +|SCACHE;enterInCache;SMS;5| +|SET;construct;L$;19| +|SET;empty;$;4| +|SGROUP-;**;SPiS;1| +|SINT;zero?;$B;33| +|SMP;*;3$;29| +|SMP;*;R2$;25| +|SMP;+;3$;26| +|SMP;-;2$;23| +|SMP;=;2$B;28| +|SMP;coerce;R$;20| +|SMP;coerce;VarSet$;7| +|SMP;exquo;2$U;35| +|SMP;exquo;2$U;36| +|SMP;gcd;3$;41| +|SMP;gcd;3$;44| +|SMP;gcd;3$;48| +|SMP;gcd;3$;51| +|SMP;ground?;$B;15| +|SMP;leadingCoefficient;$R;73| +|SMP;mainVariable;$U;59| +|SMP;one?;$B;4| +|SMP;retract;$R;55| +|SMP;unitNormal;$R;31| +|SMP;variables;$L;58| +|SMP;zero?;$B;3| +|STAGG-;c2| +|STAGG-;concat;3A;7| +|STAGG-;elt;AIS;5| +|STAGG-;first;ANniA;3| +|STREAM2;map;MSS;2| +|STREAM2;mapp!0| +|STREAM2;mapp| +|STREAM;empty;$;33| +|STREAM;lazyEval| +|STREAM;setfrst!| +|STREAM;setrst!| +|STTAYLOR;+;3S;2| +|SUP;exquo;2$U;19| +|SUP;exquo;2$U;20| +|SUP;fmecg;$NniR2$;21| +|SUP;ground?;$B;3| +|SUP;monicDivide;2$R;28| +|URAGG-;tail;2A;16| +|ZMOD;*;3$;30| +|ZMOD;+;3$;32| +|ZMOD;-;2$;36| +|ZMOD;-;3$;33| +\end{verbatim} +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 1 (ug01.ht)} +<>= +\newcommand{\ugIntroTitle}{An Overview of Axiom} +\newcommand{\ugIntroNumber}{1.} + +@ +\section{An Overview of Axiom} +\label{ugIntroPage} +\begin{itemize} +\item ugIntroTypoPage \ref{ugIntroTypoPage} on +page~\pageref{ugIntroTypoPage} +\item ugIntroStartPage \ref{ugIntroStartPage} on +page~\pageref{ugIntroStartPage} +\item ugIntroTypoPage \ref{ugIntroTypoPage} on +page~\pageref{ugIntroTypoPage} +\item ugIntroExpressionsPage \ref{ugIntroExpressionsPage} on +page~\pageref{ugIntroExpressionsPage} +\item ugIntroGraphicsPage \ref{ugIntroGraphicsPage} on +page~\pageref{ugIntroGraphicsPage} +\item ugIntroNumbersPage \ref{ugIntroNumbersPage} on +page~\pageref{ugIntroNumbersPage} +\item ugIntroCollectPage \ref{ugIntroCollectPage} on +page~\pageref{ugIntroCollectPage} +\item ugIntroTwoDimPage \ref{ugIntroTwoDimPage} on +page~\pageref{ugIntroTwoDimPage} +\item ugIntroYouPage \ref{ugIntroYouPage} on +page~\pageref{ugIntroYouPage} +\item ugIntroVariablesPage \ref{ugIntroVariablesPage} on +page~\pageref{ugIntroVariablesPage} +\item ugIntroCalcLimitsPage \ref{ugIntroCalcLimitsPage} on +page~\pageref{ugIntroCalcLimitsPage} +\item ugIntroSeriesPage \ref{ugIntroSeriesPage} on +page~\pageref{ugIntroSeriesPage} +\item ugIntroCalcDerivPage \ref{ugIntroCalcDerivPage} on +page~\pageref{ugIntroCalcDerivPage} +\item ugIntroIntegratePage \ref{ugIntroIntegratePage} on +page~\pageref{ugIntroIntegratePage} +\item ugIntroDiffEqnsPage \ref{ugIntroDiffEqnsPage} on +page~\pageref{ugIntroDiffEqnsPage} +\item ugIntroSolutionPage \ref{ugIntroSolutionPage} on +page~\pageref{ugIntroSolutionPage} +\item ugIntroSysCmmandsPage \ref{ugIntroSysCmmandsPage} on +page~\pageref{ugIntroSysCmmandsPage} +\end{itemize} +\index{pages!ugIntroPage!ug01.ht} +\index{ug01.ht!pages!ugIntroPage} +\index{ugIntroPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroPage}{1. An Overview of Axiom} + +\beginscroll + +Welcome to the Axiom environment for interactive computation +and problem solving. +Consider this chapter a brief, whirlwind tour of the Axiom +world. +We introduce you to Axiom's graphics and the Axiom +language. +Then we give a sampling of the large variety of facilities +in the Axiom system, ranging from the various kinds of +numbers, to data types (like lists, arrays, and sets) and +mathematical objects (like matrices, integrals, and differential +equations). +We conclude with the discussion of system commands and an +interactive ``undo.'' + +Before embarking on the tour, we need to brief those readers +working interactively with Axiom on some details. +Others can skip right immediately to +\downlink{``\ugIntroTypoTitle''}{ugIntroTypoPage} in +Section \ugIntroTypoNumber\ignore{ugIntroTypo}. + +\beginmenu + \menudownlink{{1.1. Starting Up and Winding Down}}{ugIntroStartPage} + \menudownlink{{1.2. Typographic Conventions}}{ugIntroTypoPage} + \menudownlink{{1.3. The Axiom Language}}{ugIntroExpressionsPage} + \menudownlink{{1.4. Graphics}}{ugIntroGraphicsPage} + \menudownlink{{1.5. Numbers}}{ugIntroNumbersPage} + \menudownlink{{1.6. Data Structures}}{ugIntroCollectPage} + \menudownlink{{1.7. Expanding to Higher Dimensions}}{ugIntroTwoDimPage} + \menudownlink{{1.8. Writing Your Own Functions}}{ugIntroYouPage} + \menudownlink{{1.9. Polynomials}}{ugIntroVariablesPage} + \menudownlink{{1.10. Limits}}{ugIntroCalcLimitsPage} + \menudownlink{{1.11. Series}}{ugIntroSeriesPage} + \menudownlink{{1.12. Derivatives}}{ugIntroCalcDerivPage} + \menudownlink{{1.13. Integration}}{ugIntroIntegratePage} + \menudownlink{{1.14. Differential Equations}}{ugIntroDiffEqnsPage} + \menudownlink{{1.15. Solution of Equations}}{ugIntroSolutionPage} + \menudownlink{{1.16. System Commands}}{ugIntroSysCmmandsPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroStartTitle}{Starting Up and Winding Down} +\newcommand{\ugIntroStartNumber}{1.1.} + +@ +\section{Starting Up and Winding Down} +\label{ugIntroStartPage} +\begin{itemize} +\item ugHyperPage \ref{ugHyperPage} on +page~\pageref{ugHyperPage} +\item ugSysCmdPage \ref{ugSysCmdPage} on +page~\pageref{ugSysCmdPage} +\item ugAvailCLEFPage \ref{ugAvailCLEFPage} on +page~\pageref{ugAvailCLEFPage} +\end{itemize} +\index{pages!ugIntroStartPage!ug01.ht} +\index{ug01.ht!pages!ugIntroStartPage} +\index{ugIntroStartPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroStartPage}{1.1. Starting Up and Winding Down} +\beginscroll + +You need to know how to start the Axiom system and how to stop it. +We assume that Axiom has been correctly installed on your +machine (as described in another Axiom document). + +To begin using Axiom, issue the command {\bf axiom} to the +operating system shell. +There is a brief pause, some start-up messages, and then one +or more windows appear. + +If you are not running Axiom under the X Window System, there is +only one window (the console). +At the lower left of the screen there is a prompt that +looks like +\begin{verbatim} +(1) -> +\end{verbatim} +%%--> do you want to talk about equation numbers on the right, etc. +When you want to enter input to Axiom, you do so on the same line +after the prompt. +The ``1'' in ``(1)'' is the computation step number and is incremented +after you enter Axiom statements. +Note, however, that a system command +such as \spadsys{)clear all} +may change the step number in other ways. +We talk about step numbers more when we discuss system commands +and the workspace history facility. + +If you are running Axiom under the X Window System, there may be two +windows: the console window (as just described) and the \HyperName{} +main menu. +\HyperName{} is a multiple-window hypertext system that lets you +view Axiom documentation and examples on-line, +execute Axiom expressions, and generate graphics. +If you are in a graphical windowing environment, +it is usually started automatically when Axiom begins. +If it is not running, issue \spadsys{)hd} to start it. +We discuss the basics of \HyperName{} in +\downlink{``\ugHyperTitle''}{ugHyperPage} in Chapter +\ugHyperNumber\ignore{ugHyper}. + +To interrupt an Axiom computation, hold down the +\texht{\fbox{\bf Ctrl}}{{\bf Ctrl}} (control) key and press +\texht{\fbox{\bf c}}{{\bf c}}. +This brings you back to the Axiom prompt. + +\beginImportant +To exit from Axiom, move to the console window, +type \spadsys{)quit} +at the input prompt and press the \texht{\fbox{\bf Enter}}{{\bf Enter}} key. +You will probably be prompted with the following message: +\centerline{{Please enter {\bf y} or {\bf yes} if you really want to leave the }} +\centerline{{interactive environment and return to the operating system}} +You should respond {\bf yes}, for example, to exit Axiom. +\endImportant + +We are purposely vague in describing exactly what your screen +looks like or what messages Axiom displays. +Axiom runs on a number of different machines, operating +systems and window environments, and these differences all affect +the physical look of the system. +You can also change the way that Axiom behaves via +\spadgloss{system commands} described later in this chapter and in +\downlink{``\ugSysCmdTitle''}{ugSysCmdPage} +in Appendix \ugSysCmdNumber\ignore{ugSysCmd}. +System commands are special commands, like \spadcmd{)set}, that begin +with a closing parenthesis and are used to change your +environment. +For example, you can set a system variable so that you are not +prompted for confirmation when you want to leave Axiom. + +\beginmenu + \menudownlink{{1.1.1. \Clef{}}}{ugAvailCLEFPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugAvailCLEFTitle}{\Clef{}} +\newcommand{\ugAvailCLEFNumber}{1.1.1.} + +@ +\section{Clef} +\label{ugAvailCLEFPage} +\index{pages!ugAvailCLEFPage!ug01.ht} +\index{ug01.ht!pages!ugAvailCLEFPage} +\index{ugAvailCLEFPage!ug01.ht!pages} +<>= +\begin{page}{ugAvailCLEFPage}{1.1.1. \Clef{}} +\beginscroll +% +If you are using Axiom under the X Window System, the +\Clef{} command line editor is probably available and installed. +With this editor you can recall previous lines with the up and +down arrow keys\texht{ (\fbox{$\uparrow$} and +\fbox{$\downarrow$})}{}. +To move forward and backward on a line, use the right and +left arrows\texht{ (\fbox{$\rightarrow$} and +\fbox{$\leftarrow$})}{}. +You can use the +\texht{\fbox{\bf Insert}}{{\bf Insert}} +key to toggle insert mode on or off. +When you are in insert mode, +the cursor appears as a large block and if you type +anything, the characters are inserted into the line without +deleting the previous ones. + +If you press the +\texht{\fbox{\bf Home}}{{\bf Home}} +key, the cursor moves to the beginning of the line and if you press the +\texht{\fbox{\bf End}}{{\bf End}} +key, the cursor moves to the end of the line. +Pressing +\texht{\fbox{\bf Ctrl}--\fbox{\bf End}}{{\bf Ctrl-End}} +deletes all the text from the cursor to the end of the line. + +\Clef{} also provides Axiom operation name completion for +a limited set of operations. +If you enter a few letters and then press the +\texht{\fbox{\bf Tab}}{{\bf Tab}} key, +\Clef{} tries to use those letters as the prefix of an Axiom +operation name. +If a name appears and it is not what you want, press +\texht{\fbox{\bf Tab}}{{\bf Tab}} again +to see another name. + +You are ready to begin your journey into the world of Axiom. +Proceed to the first stop. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroTypoTitle}{Typographic Conventions} +\newcommand{\ugIntroTypoNumber}{1.2.} + +@ +\section{Typographic Conventions} +\label{ugIntroTypoPage} +\index{pages!ugIntroTypoPage!ug01.ht} +\index{ug01.ht!pages!ugIntroTypoPage} +\index{ugIntroTypoPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroTypoPage}{1.2. Typographic Conventions} +\beginscroll + +In this book we have followed these typographical conventions: +\indent{4} +\beginitems +% +\item[-] Categories, domains and packages are displayed in +\texht{a sans-serif typeface:}{this font:} +\axiomType{Ring}, \axiomType{Integer}, \axiomType{DiophantineSolutionPackage}. +% +\item[-] Prefix operators, infix operators, and punctuation symbols in the Axiom +language are displayed in the text like this: +\axiomOp{+}, \axiomSyntax{\$}, \axiomSyntax{+->}. +% +\item[-] Axiom expressions or expression fragments are displayed in +\texht{a mon\-o\-space typeface:}{this font:} +\axiom{inc(x) == x + 1}. +% +\item[-] For clarity of presentation, \TeX{} is often +used to format expressions\texht{: $g(x)=x^2+1.$}{.} +% +\item[-] Function names and \HyperName{} button names +are displayed in the text in +\texht{a bold typeface:}{this font:} +\axiomFun{factor}, \axiomFun{integrate}, {\bf Lighting}. +% +\item[-] Italics are used for emphasis and for words defined in the +glossary: \spadgloss{category}. +\enditems +\indent{0} + +This book contains over 2500 examples of Axiom input and output. +All examples were run though Axiom and their output was +created in \texht{\TeX{}}{TeX} form for this book by the Axiom +\axiomType{TexFormat} package. +We have deleted system messages from the example output if those +messages are not important for the discussions in which the examples +appear. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroExpressionsTitle}{The Axiom Language} +\newcommand{\ugIntroExpressionsNumber}{1.3.} + +@ +\section{The Axiom Language} +\label{ugIntroExpressionsPage} +\begin{itemize} +\item ugIntroArithmeticPage \ref{ugIntroArithmeticPage} on +page~\pageref{ugIntroArithmeticPage} +\item ugIntroPreviousPage \ref{ugIntroPreviousPage} on +page~\pageref{ugIntroPreviousPage} +\item ugIntroTypesPage \ref{ugIntroTypesPage} on +page~\pageref{ugIntroTypesPage} +\item ugIntroAssignPage \ref{ugIntroAssignPage} on +page~\pageref{ugIntroAssignPage} +\item ugIntroConversionPage \ref{ugIntroConversionPage} on +page~\pageref{ugIntroConversionPage} +\item ugIntroCallFunPage \ref{ugIntroCallFunPage} on +page~\pageref{ugIntroCallFunPage} +\item ugIntroMacrosPage \ref{ugIntroMacrosPage} on +page~\pageref{ugIntroMacrosPage} +\item ugIntroLongPage \ref{ugIntroLongPage} on +page~\pageref{ugIntroLongPage} +\item ugIntroCommentsPage \ref{ugIntroCommentsPage} on +page~\pageref{ugIntroCommentsPage} +\end{itemize} +\index{pages!ugIntroExpressionsPage!ug01.ht} +\index{ug01.ht!pages!ugIntroExpressionsPage} +\index{ugIntroExpressionsPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroExpressionsPage}{1.3. The Axiom Language} +\beginscroll +% + +The Axiom language is a rich language for performing +interactive computations and for building components of the +Axiom library. +Here we present only some basic aspects of the language that you +need to know for the rest of this chapter. +Our discussion here is intentionally informal, with details +unveiled on an ``as needed'' basis. +For more information on a particular construct, we suggest you +consult the index at the back of the book. + +\beginmenu + \menudownlink{{1.3.1. Arithmetic Expressions}}{ugIntroArithmeticPage} + \menudownlink{{1.3.2. Previous Results}}{ugIntroPreviousPage} + \menudownlink{{1.3.3. Some Types}}{ugIntroTypesPage} + \menudownlink{{1.3.4. Symbols, Variables, Assignments, and Declarations}}{ugIntroAssignPage} + \menudownlink{{1.3.5. Conversion}}{ugIntroConversionPage} + \menudownlink{{1.3.6. Calling Functions}}{ugIntroCallFunPage} + \menudownlink{{1.3.7. Some Predefined Macros}}{ugIntroMacrosPage} + \menudownlink{{1.3.8. Long Lines}}{ugIntroLongPage} + \menudownlink{{1.3.9. Comments}}{ugIntroCommentsPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroArithmeticTitle}{Arithmetic Expressions} +\newcommand{\ugIntroArithmeticNumber}{1.3.1.} + +@ +\section{Arithmetic Expressions} +\label{ugIntroArithmeticPage} +\index{pages!ugIntroArithmeticPage!ug01.ht} +\index{ug01.ht!pages!ugIntroArithmeticPage} +\index{ugIntroArithmeticPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroArithmeticPage}{1.3.1. Arithmetic Expressions} +\beginscroll + +For arithmetic expressions, use the \spadop{+} and \spadop{-} +\spadglossSee{operators}{operator} as in mathematics. +Use \spadop{*} for multiplication, and \spadop{**} for +exponentiation. +To create a fraction, use \spadop{/}. +When an expression contains several operators, those of highest +\spadgloss{precedence} are evaluated first. +For arithmetic operators, \spadop{**} has highest precedence, +\spadop{*} and \spadop{/} have the next highest +precedence, and \spadop{+} and \spadop{-} have the lowest +precedence. + +\xtc{ +Axiom puts implicit parentheses around operations of higher +precedence, and groups those of equal precedence from left to right. +}{ +\spadpaste{1 + 2 - 3 / 4 * 3 ** 2 - 1} +} +\xtc{ +The above expression is equivalent to this. +}{ +\spadpaste{((1 + 2) - ((3 / 4) * (3 ** 2))) - 1} +} +\xtc{ +If an expression contains subexpressions enclosed in parentheses, +the parenthesized subexpressions are evaluated first (from left to +right, from inside out). +}{ +\spadpaste{1 + 2 - 3/ (4 * 3 ** (2 - 1))} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroPreviousTitle}{Previous Results} +\newcommand{\ugIntroPreviousNumber}{1.3.2.} + +@ +\section{Previous Results} +\label{ugIntroPreviousPage} +\index{pages!ugIntroPreviousPage!ug01.ht} +\index{ug01.ht!pages!ugIntroPreviousPage} +\index{ugIntroPreviousPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroPreviousPage}{1.3.2. Previous Results} +\beginscroll + +Use the percent sign (\axiomSyntax{\%}) to refer to the last +result. +Also, use \axiomSyntax{\%\%} to refer to previous results. +\axiom{\%\%(-1)} is equivalent to \axiomSyntax{\%}, +\axiom{\%\%(-2)} returns the next to the last result, and so on. +\axiom{\%\%(1)} returns the result from step number 1, +\axiom{\%\%(2)} returns the result from step number 2, and so on. +\axiom{\%\%(0)} is not defined. + +\xtc{ +This is ten to the tenth power. +}{ +\spadpaste{10 ** 10 \bound{prev}} +} +\xtc{ +This is the last result minus one. +}{ +\spadpaste{\% - 1 \free{prev}\bound{prev1}} +} +\xtc{ +This is the last result. +}{ +\spadpaste{\%\%(-1) \free{prev1}\bound{prev2}} +} +\xtc{ +This is the result from step number 1. +}{ +\spadpaste{\%\%(1) \free{prev2}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroTypesTitle}{Some Types} +\newcommand{\ugIntroTypesNumber}{1.3.3.} + +@ +\section{Some Types} +\label{ugIntroTypesPage} +\begin{itemize} +\item ugTypesPage \ref{ugTypesPage} on +page~\pageref{ugTypesPage} +\end{itemize} +\index{pages!ugIntroTypesPage!ug01.ht} +\index{ug01.ht!pages!ugIntroTypesPage} +\index{ugIntroTypesPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroTypesPage}{1.3.3. Some Types} +\beginscroll + +Everything in Axiom has a type. +The type determines what operations you can perform on an object and +how the object can be used. +An entire chapter of this book (\downlink{``\ugTypesTitle''}{ugTypesPage} +in Chapter \ugTypesNumber\ignore{ugTypes}) is dedicated to +the interactive use of types. +Several of the final chapters discuss how types are built and how +they are organized in the Axiom library. + +\xtc{ +Positive integers are given type \spadtype{PositiveInteger}. +}{ +\spadpaste{8} +} +\xtc{ +Negative ones are given type \spadtype{Integer}. +This fine distinction is helpful to the +Axiom interpreter. +}{ +\spadpaste{-8} +} +\xtc{ +Here a positive integer exponent gives a polynomial result. +}{ +\spadpaste{x**8} +} +\xtc{ +Here a negative integer exponent produces a fraction. +}{ +\spadpaste{x**(-8)} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroAssignTitle}{Symbols, Variables, Assignments, and Declarations} +\newcommand{\ugIntroAssignNumber}{1.3.4.} + +@ +\section{Symbols, Variables, Assignments, and Declarations} +\label{ugIntroAssignPage} +\begin{itemize} +\item ugLangAssignPage \ref{ugLangAssignPage} on +page~\pageref{ugLangAssignPage} +\end{itemize} +\index{pages!ugIntroAssignPage!ug01.ht} +\index{ug01.ht!pages!ugIntroAssignPage} +\index{ugIntroAssignPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroAssignPage} +{1.3.4. Symbols, Variables, Assignments, and Declarations} +\beginscroll + +A \spadgloss{symbol} is a literal used for the input of things like +the ``variables'' in polynomials and power series. + +\labelSpace{2pc} +\xtc{ +We use the three symbols \axiom{x}, \axiom{y}, and \axiom{z} in +entering this polynomial. +}{ +\spadpaste{(x - y*z)**2} +} +A symbol has a name beginning with an uppercase or lowercase alphabetic +character, \axiomSyntax{\%}, or \axiomSyntax{!}. +Successive characters (if any) can be any of the above, digits, or +\axiomSyntax{?}. +Case is distinguished: the symbol \axiom{points} is different +from the symbol \axiom{Points}. + +A symbol can also be used in Axiom as a \spadgloss{variable}. +A variable refers to a value. +To \spadglossSee{assign}{assignment} +a value to a variable, +the operator \axiomSyntax{:=} +is used.\footnote{Axiom actually has two forms of assignment: +{\it immediate} assignment, as discussed here, +and {\it delayed assignment}. See +\downlink{``\ugLangAssignTitle''}{ugLangAssignPage} +in Section \ugLangAssignNumber\ignore{ugLangAssign} for details.} +A variable initially has no restrictions on the kinds of +values to which it can refer. + +\xtc{ +This assignment gives the value \axiom{4} (an integer) to +a variable named \axiom{x}. +}{ +\spadpaste{x := 4} +} +\xtc{ +This gives the value \axiom{z + 3/5} (a polynomial) to \axiom{x}. +}{ +\spadpaste{x := z + 3/5} +} +\xtc{ +To restrict the types of objects that can be assigned to a variable, +use a \spadgloss{declaration} +}{ +\spadpaste{y : Integer \bound{y}} +} +\xtc{ +After a variable is declared to be of some type, only values +of that type can be assigned to that variable. +}{ +\spadpaste{y := 89\bound{y1}\free{y}} +} +\xtc{ +The declaration for \axiom{y} forces values assigned to \axiom{y} to +be converted to integer values. +}{ +\spadpaste{y := sin \%pi} +} +\xtc{ +If no such conversion is possible, +Axiom refuses to assign a value to \axiom{y}. +}{ +\spadpaste{y := 2/3} +} +\xtc{ +A type declaration can also be given together with an assignment. +The declaration can assist Axiom in choosing the correct +operations to apply. +}{ +\spadpaste{f : Float := 2/3} +} + +Any number of expressions can be given on input line. +Just separate them by semicolons. +Only the result of evaluating the last expression is displayed. + +\xtc{ +These two expressions have the same effect as +the previous single expression. +}{ +\spadpaste{f : Float; f := 2/3 \bound{fff}} +} + +The type of a symbol is either \axiomType{Symbol} +or \axiomType{Variable({\it name})} where {\it name} is the name +of the symbol. + +\xtc{ +By default, the interpreter +gives this symbol the type \axiomType{Variable(q)}. +}{ +\spadpaste{q} +} +\xtc{ +When multiple symbols are involved, \axiomType{Symbol} is used. +}{ +\spadpaste{[q, r]} +} + +\xtc{ +What happens when you try to use a symbol that is the name of a variable? +}{ +\spadpaste{f \free{fff}} +} +\xtc{ +Use a single quote (\axiomSyntax{'}) before +the name to get the symbol. +}{ +\spadpaste{'f} +} + +Quoting a name creates a symbol by +preventing evaluation of the name as a variable. +Experience will teach you when you are most likely going to need to use +a quote. +We try to point out the location of such trouble spots. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroConversionTitle}{Conversion} +\newcommand{\ugIntroConversionNumber}{1.3.5.} + +@ +\section{Conversion} +\label{ugIntroConversionPage} +\begin{itemize} +\item ugTypesConvertPage \ref{ugTypesConvertPage} on +page~\pageref{ugTypesConvertPage} +\end{itemize} +\index{pages!ugIntroConversionPage!ug01.ht} +\index{ug01.ht!pages!ugIntroConversionPage} +\index{ugIntroConversionPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroConversionPage}{1.3.5. Conversion} +\beginscroll + +Objects of one type can usually be ``converted'' to objects of several +other types. +To \spadglossSee{convert}{conversion} +an object to a new type, use the \axiomSyntax{::} infix +operator.\footnote{Conversion is discussed in detail in +\downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} +in Section \ugTypesConvertNumber\ignore{ugTypesConvert}.} +For example, to display an object, it is necessary to +convert the object to type \spadtype{OutputForm}. + +\xtc{ +This produces a polynomial with rational number coefficients. +}{ +\spadpaste{p := r**2 + 2/3 \bound{p}} +} +\xtc{ +Create a quotient of polynomials with integer coefficients +by using \axiomSyntax{::}. +}{ +\spadpaste{p :: Fraction Polynomial Integer \free{p}} +} + +Some conversions can be performed automatically when +Axiom tries to evaluate your input. +Others conversions must be explicitly requested. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroCallFunTitle}{Calling Functions} +\newcommand{\ugIntroCallFunNumber}{1.3.6.} + +@ +\section{Calling Functions} +\label{ugIntroCallFunPage} +\index{pages!ugIntroCallFunPage!ug01.ht} +\index{ug01.ht!pages!ugIntroCallFunPage} +\index{ugIntroCallFunPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroCallFunPage}{1.3.6. Calling Functions} +\beginscroll + +As we saw earlier, when you want to add or subtract two values, +you place the arithmetic operator \spadop{+} +or \spadop{-} between the two +\spadglossSee{arguments}{argument} denoting the values. +To use most other Axiom operations, however, you use another syntax: +write the name +of the operation first, then an open parenthesis, then each of the +arguments separated by commas, and, finally, a closing parenthesis. +If the operation takes only one argument and the argument is a number +or a symbol, you can omit the parentheses. + +\xtc{ +This calls the operation \axiomFun{factor} with the single +integer argument \axiom{120}. +}{ +\spadpaste{factor(120)} +} +\xtc{ +This is a call to \axiomFun{divide} with the two integer arguments +\axiom{125} and \axiom{7}. +}{ +\spadpaste{divide(125,7)} +} +\xtc{ +This calls \axiomFun{quatern} with four floating-point arguments. +}{ +\spadpaste{quatern(3.4,5.6,2.9,0.1)} +} +\xtc{ +This is the same as \axiom{factorial(10)}. +}{ +\spadpaste{factorial 10} +} + +An operations that returns a \spadtype{Boolean} value (that is, +\spad{true} or \spad{false}) frequently has a name suffixed with +a question mark (``?''). For example, the \spadfun{even?} +operation returns \spad{true} if its integer argument is an even +number, \spad{false} otherwise. + +An operation that can be destructive on one or more arguments +usually has a name ending in a exclamation point (``!''). +This actually means that it is {\it allowed} to update its +arguments but it is not {\it required} to do so. For example, +the underlying representation of a collection type may not allow +the very last element to removed and so an empty object may be +returned instead. Therefore, it is important that you use the +object returned by the operation and not rely on a physical +change having occurred within the object. Usually, destructive +operations are provided for efficiency reasons. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroMacrosTitle}{Some Predefined Macros} +\newcommand{\ugIntroMacrosNumber}{1.3.7.} + +@ +\section{Some Predefined Macros} +\label{ugIntroMacrosPage} +\begin{itemize} +\item ugUserMacrosPage \ref{ugUserMacrosPage} on +page~\pageref{ugUserMacrosPage} +\end{itemize} +\index{pages!ugIntroMacrosPage!ug01.ht} +\index{ug01.ht!pages!ugIntroMacrosPage} +\index{ugIntroMacrosPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroMacrosPage}{1.3.7. Some Predefined Macros} +\beginscroll + +Axiom provides several \spadglossSee{macros}{macro} +for your convenience.\footnote{See +\downlink{``\ugUserMacrosTitle''}{ugUserMacrosPage} +in Section \ugUserMacrosNumber\ignore{ugUserMacros} +for a discussion on how to write your own macros.} +Macros are names +(or forms) that expand to larger expressions for commonly used values. + +\texht{ +\centerline{{\begin{tabular}{ll}}} +\centerline{{\spadgloss{\%i} & The square root of -1. }} +\centerline{{\spadgloss{\%e} & The base of the natural logarithm. }} +\centerline{{\spadgloss{\%pi} & $\pi$. }} +\centerline{{\spadgloss{\%infinity} & $\infty$. }} +\centerline{{\spadgloss{\%plusInfinity} & $+\infty$. }} +\centerline{{\spadgloss{\%minusInfinity} & $-\infty$.}} +\centerline{{\end{tabular}}} +}{ +\indent{0} +\beginitems +\item[\axiomSyntax{\%i}] \tab{17} The square root of -1. +\item[\axiomSyntax{\%e}] \tab{17} The base of the natural logarithm. +\item[\axiomSyntax{\%pi}] \tab{17} Pi. +\item[\axiomSyntax{\%infinity}] \tab{17} Infinity. +\item[\axiomSyntax{\%plusInfinity}] \tab{17} Plus infinity. +\item[\axiomSyntax{\%minusInfinity}] \tab{17} Minus infinity. +\enditems +\indent{0} +} + +%To display all the macros (along with anything you have +%defined in the workspace), issue the system command \spadsys{)display all}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroLongTitle}{Long Lines} +\newcommand{\ugIntroLongNumber}{1.3.8.} + +@ +\section{Long Lines} +\label{ugIntroLongPage} +\begin{itemize} +\item ugInOutInPage \ref{ugInOutInPage} on +page~\pageref{ugInOutInPage} +\item ugLangBlocksPage \ref{ugLangBlocksPage} on +page~\pageref{ugLangBlocksPage} +\end{itemize} +\index{pages!ugIntroLongPage!ug01.ht} +\index{ug01.ht!pages!ugIntroLongPage} +\index{ugIntroLongPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroLongPage}{1.3.8. Long Lines} +\beginscroll + +When you enter Axiom expressions from your keyboard, there +will be times when they are too long to fit on one line. +Axiom does not care how long your lines are, so you can let +them continue from the right margin to the left side of the +next line. + +Alternatively, you may want to enter several shorter lines and +have Axiom glue them together. +To get this glue, put an underscore (\_) at the end of +each line you wish to continue. +\begin{verbatim} +2_ ++_ +3 +\end{verbatim} +is the same as if you had entered +\begin{verbatim} +2+3 +\end{verbatim} + +If you are putting your Axiom statements in an input file +(see \downlink{``\ugInOutInTitle''}{ugInOutInPage} +in Section \ugInOutInNumber\ignore{ugInOutIn}), +you can use indentation to indicate the structure of your program. +(see \downlink{``\ugLangBlocksTitle''}{ugLangBlocksPage} +in Section \ugLangBlocksNumber\ignore{ugLangBlocks}). + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroCommentsTitle}{Comments} +\newcommand{\ugIntroCommentsNumber}{1.3.9.} + +@ +\section{Comments} +\label{ugIntroCommentsPage} +\index{pages!ugIntroCommentsPage!ug01.ht} +\index{ug01.ht!pages!ugIntroCommentsPage} +\index{ugIntroCommentsPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroCommentsPage}{1.3.9. Comments} +\beginscroll + +Comment statements begin with two consecutive hyphens or two +consecutive plus signs and continue until the end of the line. + +\xtc{ +The comment beginning with {\tt --} is ignored by Axiom. +}{ +\spadpaste{2 + 3 -- this is rather simple, no?} +} + +There is no way to write long multi-line comments +other than starting each line with \axiomSyntax{--} or +\axiomSyntax{++}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroGraphicsTitle}{Graphics} +\newcommand{\ugIntroGraphicsNumber}{1.4.} + +@ +\section{Graphics} +\label{ugIntroGraphicsPage} +\begin{itemize} +\item ugProblemNumericPage \ref{ugProblemNumericPage} on +page~\pageref{ugProblemNumericPage} +\item ugAppGraphicsPage \ref{ugAppGraphicsPage} on +page~\pageref{ugAppGraphicsPage} +\item ugGraphPage \ref{ugGraphPage} on +page~\pageref{ugGraphPage} +\end{itemize} +\index{pages!ugIntroGraphicsPage!ug01.ht} +\index{ug01.ht!pages!ugIntroGraphicsPage} +\index{ugIntroGraphicsPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroGraphicsPage}{1.4. Graphics} +\beginscroll +% + +Axiom has a two- and three-dimensional drawing and rendering +package that allows you to draw, shade, color, rotate, translate, map, +clip, scale and combine graphic output of Axiom computations. +The graphics interface is capable of plotting functions of one or more +variables and plotting parametric surfaces. +Once the graphics figure appears in a window, +move your mouse to the window and click. +A control panel appears immediately and allows you to +interactively transform the object. + +\psXtc{ +This is an example of Axiom's two-dimensional plotting. +From the 2D Control Panel you can rescale the plot, turn axes and units +on and off and save the image, among other things. +This PostScript image was produced by clicking on the +\texht{\fbox{\bf PS}}{{\bf PS}} 2D Control Panel button. +}{ +\graphpaste{draw(cos(5*t/8), t=0..16*\%pi, coordinates==polar)} +}{ +\epsffile[72 72 300 300]{../ps/rose-1.ps} +} + +\psXtc{ +This is an example of Axiom's three-dimensional plotting. +It is a monochrome graph of the complex arctangent +function. +The image displayed was rotated and had the ``shade'' and ``outline'' +display options set from the 3D Control Panel. +The PostScript output was produced by clicking on the +\texht{\fbox{\bf save}}{{\bf save}} 3D Control Panel button and then +clicking on the \texht{\fbox{\bf PS}}{{\bf PS}} button. +See \downlink{``\ugProblemNumericTitle''}{ugProblemNumericPage} +in Section \ugProblemNumericNumber\ignore{ugProblemNumeric} for +more details and examples +of Axiom's numeric and graphics capabilities. +}{ +\graphpaste{draw((x,y) +-> real atan complex(x,y), -\%pi..\%pi, -\%pi..\%pi, colorFunction == (x,y) +-> argument atan complex(x,y))} +}{ +\epsffile[72 72 285 285]{../ps/atan-1.ps} +} + +An exhibit of \Gallery{} is given in the +center section of this book. +For a description of the commands and programs that +produced these figures, see +\downlink{``\ugAppGraphicsTitle''}{ugAppGraphicsPage} +in Appendix \ugAppGraphicsNumber\ignore{ugAppGraphics}. +PostScript +output is available so that Axiom images can be +printed.\footnote{PostScript is a trademark of Adobe Systems Incorporated, +registered in the United States.} +See \downlink{``\ugGraphTitle''}{ugGraphPage} +in Chapter \ugGraphNumber\ignore{ugGraph} for +more examples and details about using +Axiom's graphics facilities. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroNumbersTitle}{Numbers} +\newcommand{\ugIntroNumbersNumber}{1.5.} + +@ +\section{Numbers} +\label{ugIntroNumbersPage} +\begin{itemize} +\item FloatXmpPage \ref{FloatXmpPage} on +page~\pageref{FloatXmpPage} +\item DoubleFloatXmpPage \ref{DoubleFloatXmpPage} on +page~\pageref{DoubleFloatXmpPage} +\item ComplexXmpPage \ref{ComplexXmpPage} on +page~\pageref{ComplexXmpPage} +\item DecimalExpansionXmpPage \ref{DecimalExpansionXmpPage} on +page~\pageref{DecimalExpansionXmpPage} +\item ContinuedFractionXmpPage \ref{ContinuedFractionXmpPage} on +page~\pageref{ContinuedFractionXmpPage} +\item PartialFractionXmpPage \ref{PartialFractionXmpPage} on +page~\pageref{PartialFractionXmpPage} +\item RadixExpansionXmpPage \ref{RadixExpansionXmpPage} on +page~\pageref{RadixExpansionXmpPage} +\item ugxProblemFinitePrimePage \ref{ugxProblemFinitePrimePage} on +page~\pageref{ugxProblemFinitePrimePage} +\end{itemize} +\index{pages!ugIntroNumbersPage!ug01.ht} +\index{ug01.ht!pages!ugIntroNumbersPage} +\index{ugIntroNumbersPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroNumbersPage}{1.5. Numbers} +\beginscroll +% + +Axiom distinguishes very carefully between different kinds +of numbers, how they are represented and what their properties +are. +Here are a sampling of some of these kinds of numbers and some +things you can do with them. + +\xtc{ +Integer arithmetic is always exact. +}{ +\spadpaste{11**13 * 13**11 * 17**7 - 19**5 * 23**3} +} +\xtc{ +Integers can be represented in factored form. +}{ +\spadpaste{factor 643238070748569023720594412551704344145570763243 \bound{ex1}} +} +\xtc{ +Results stay factored when you do arithmetic. +Note that the \axiom{12} is automatically factored for you. +}{ +\spadpaste{\% * 12 \free{ex1}} +} +\xtc{ +Integers can also be displayed to bases other than 10. +This is an integer in base 11. +}{ +\spadpaste{radix(25937424601,11)} +} +\xtc{ +Roman numerals are also available for those special occasions. +}{ +\spadpaste{roman(1992)} +} +\xtc{ +Rational number arithmetic is also exact. +}{ +\spadpaste{r := 10 + 9/2 + 8/3 + 7/4 + 6/5 + 5/6 + 4/7 + 3/8 + 2/9\bound{r}} +} +\xtc{ +To factor fractions, you have to +map \axiomFun{factor} onto the numerator and denominator. +}{ +\spadpaste{map(factor,r) \free{r}} +} +\xtc{ +Type \spadtype{SingleInteger} refers to machine word-length +integers. +In English, this expression means ``\axiom{11} as a small +integer''. +}{ +\spadpaste{11@SingleInteger} +} +\xtc{ +Machine double-precision floating-point numbers are also +available for numeric and graphical +applications. +}{ +\spadpaste{123.21@DoubleFloat} +} + +The normal floating-point type in Axiom, \spadtype{Float}, +is a software implementation of floating-point numbers in which +the exponent and the mantissa may have any number of +digits.\footnote{See +\downlink{`Float'}{FloatXmpPage}\ignore{Float} and +\downlink{`DoubleFloat'}{DoubleFloatXmpPage}\ignore{DoubleFloat} for +additional information on floating-point types.} +The types \spadtype{Complex(Float)} and +\spadtype{Complex(DoubleFloat)} are the corresponding software +implementations of complex floating-point numbers. + +\xtc{ +This is a floating-point approximation to about twenty digits. +The \axiomSyntax{::} +is used here to change from one kind of object +(here, a rational number) to another (a floating-point number). +}{ +\spadpaste{r :: Float \free{r}} +} +\xtc{ +Use \spadfunFrom{digits}{Float} to change the number of digits in +the representation. +This operation returns the previous value so you can reset it +later. +}{ +\spadpaste{digits(22) \bound{fewerdigits}} +} +\xtc{ +To \axiom{22} digits of precision, the number +\texht{$e^{\pi {\sqrt {163.0}}}$}{\axiom{exp(\%pi * sqrt 163.0)}} +appears to be an integer. +}{ +\spadpaste{exp(\%pi * sqrt 163.0) \free{fewerdigits}} +} +\xtc{ +Increase the precision to forty digits and try again. +}{ +\spadpaste{digits(40); exp(\%pi * sqrt 163.0) \free{moredigits}} +} +\xtc{ +Here are complex numbers with rational numbers as real and +imaginary parts. +}{ +\spadpaste{(2/3 + \%i)**3 \bound{gaussint}} +} +\xtc{ +The standard operations on complex numbers are available. +}{ +\spadpaste{conjugate \% \free{gaussint}} +} +\xtc{ +You can factor complex integers. +}{ +\spadpaste{factor(89 - 23 * \%i)} +} +\xtc{ +Complex numbers with floating point parts are also available. +}{ +\spadpaste{exp(\%pi/4.0 * \%i)} +} +%%--> These are not numbers: +%\xtc{ +%The real and imaginary parts can be symbolic. +%}{ +%\spadcommand{complex(u,v) \bound{cuv}} +%} +%\xtc{ +%Of course, you can do complex arithmetic with these also. +%See \downlink{`Complex'}{ComplexXmpPage}\ignore{Complex} +for more information. +%}{ +%\spadcommand{\% ** 2 \free{cuv}} +%} +\xtc{ +Every rational number has an exact representation as a +repeating decimal expansion +(see \downlink{`DecimalExpansion'}{DecimalExpansionXmpPage} +\ignore{DecimalExpansion}). +}{ +\spadpaste{decimal(1/352)} +} +\xtc{ +A rational number can also be expressed as a continued fraction (see +\downlink{`ContinuedFraction'}{ContinuedFractionXmpPage} +\ignore{ContinuedFraction}). +}{ +\spadpaste{continuedFraction(6543/210)} +} +\xtc{ +Also, partial fractions can be used and can be displayed in a +compact \ldots +}{ +\spadpaste{partialFraction(1,factorial(10)) \bound{partfrac}} +} +\xtc{ +or expanded format (see +\downlink{`PartialFraction'}{PartialFractionXmpPage}\ignore{PartialFraction}). +}{ +\spadpaste{padicFraction(\%) \free{partfrac}} +} +\xtc{ +Like integers, bases (radices) other than ten can be used for rational +numbers (see +\downlink{`RadixExpansion'}{RadixExpansionXmpPage}\ignore{RadixExpansion}). +Here we use base eight. +}{ +\spadpaste{radix(4/7, 8)\bound{rad}} +} +\xtc{ +Of course, there are complex versions of these as well. +Axiom decides to make the result a complex rational number. +}{ +\spadpaste{\% + 2/3*\%i\free{rad}} +} +\xtc{ +You can also use Axiom to manipulate fractional powers. +}{ +\spadpaste{(5 + sqrt 63 + sqrt 847)**(1/3)} +} +\xtc{ +You can also compute with integers modulo a prime. +}{ +\spadpaste{x : PrimeField 7 := 5 \bound{x}} +} +\xtc{ +Arithmetic is then done modulo \mathOrSpad{7}. +}{ +\spadpaste{x**3 \free{x}} +} +\xtc{ +Since \mathOrSpad{7} is prime, you can invert nonzero values. +}{ +\spadpaste{1/x \free{x}} +} +\xtc{ +You can also compute modulo an integer that is not a prime. +}{ +\spadpaste{y : IntegerMod 6 := 5 \bound{y}} +} +\xtc{ +All of the usual arithmetic operations are available. +}{ +\spadpaste{y**3 \free{y}} +} +\xtc{ +Inversion is not available if the modulus is not a prime +number. +Modular arithmetic and prime fields are discussed in +\downlink{``\ugxProblemFinitePrimeTitle''}{ugxProblemFinitePrimePage} +in Section \ugxProblemFinitePrimeNumber\ignore{ugxProblemFinitePrime}. +}{ +\spadpaste{1/y \free{y}} +} +\xtc{ +This defines \axiom{a} to be an algebraic number, that is, +a root of a polynomial equation. +}{ +\spadpaste{a := rootOf(a**5 + a**3 + a**2 + 3,a) \bound{a}} +} +\xtc{ +Computations with \axiom{a} are reduced according +to the polynomial equation. +}{ +\spadpaste{(a + 1)**10\free{a}} +} +\xtc{ +Define \axiom{b} to be an algebraic number involving \axiom{a}. +}{ +\spadpaste{b := rootOf(b**4 + a,b) \bound{b}\free{a}} +} +\xtc{ +Do some arithmetic. +}{ +\spadpaste{2/(b - 1) \free{b}\bound{check}} +} +\xtc{ +To expand and simplify this, call \axiomFun{ratDenom} +to rationalize the denominator. +}{ +\spadpaste{ratDenom(\%) \free{check}\bound{check1}} +} +\xtc{ +If we do this, we should get \axiom{b}. +}{ +\spadpaste{2/\%+1 \free{check1}\bound{check2}} +} +\xtc{ +But we need to rationalize the denominator again. +}{ +\spadpaste{ratDenom(\%) \free{check2}} +} +\xtc{ +Types \spadtype{Quaternion} and \spadtype{Octonion} are also available. +Multiplication of quaternions is non-commutative, as expected. +}{ +\spadpaste{q:=quatern(1,2,3,4)*quatern(5,6,7,8) - quatern(5,6,7,8)*quatern(1,2,3,4)} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroCollectTitle}{Data Structures} +\newcommand{\ugIntroCollectNumber}{1.6.} + +@ +\section{Data Structures} +\label{ugIntroCollectPage} +\begin{itemize} +\item ListXmpPage \ref{ListXmpPage} on +page~\pageref{ListXmpPage} +\item ugLangItsPage \ref{ugLangItsPage} on +page~\pageref{ugLangItsPage} +\item StreamXmpPage \ref{StreamXmpPage} on +page~\pageref{StreamXmpPage} +\item ugLangItsPage \ref{ugLangItsPage} on +page~\pageref{ugLangItsPage} +\item OneDimensionalArrayXmpPage \ref{OneDimensionalArrayXmpPage} on +page~\pageref{OneDimensionalArrayXmpPage} +\item FlexibleArrayXmpPage \ref{FlexibleArrayXmpPage} on +page~\pageref{FlexibleArrayXmpPage} +\item HeapXmpPage \ref{HeapXmpPage} on +page~\pageref{HeapXmpPage} +\item BinarySearchTreeXmpPage \ref{BinarySearchTreeXmpPage} on +page~\pageref{BinarySearchTreeXmpPage} +\item BalancedBinaryTreeXmpPage \ref{BalancedBinaryTreeXmpPage} on +page~\pageref{BalancedBinaryTreeXmpPage} +\item SetXmpPage \ref{SetXmpPage} on +page~\pageref{SetXmpPage} +\item MultiSetXmpPage \ref{MultiSetXmpPage} on +page~\pageref{MultiSetXmpPage} +\item AssociationListXmpPage \ref{AssociationListXmpPage} on +page~\pageref{AssociationListXmpPage} +\item KeyedAccessFileXmpPage \ref{KeyedAccessFileXmpPage} on +page~\pageref{KeyedAccessFileXmpPage} +\item LibraryXmpPage \ref{LibraryXmpPage} on +page~\pageref{LibraryXmpPage} +\item SparseTableXmpPage \ref{SparseTableXmpPage} on +page~\pageref{SparseTableXmpPage} +\item StringTableXmpPage \ref{StringTableXmpPage} on +page~\pageref{StringTableXmpPage} +\item TableXmpPage \ref{TableXmpPage} on +page~\pageref{TableXmpPage} +\item ugTypesRecordsPage \ref{ugTypesRecordsPage} on +page~\pageref{ugTypesRecordsPage} +\item ugTypesUnionsPage \ref{ugTypesUnionsPage} on +page~\pageref{ugTypesUnionsPage} +\item ugDomainsPage \ref{ugDomainsPage} on +page~\pageref{ugDomainsPage} +\end{itemize} +\index{pages!ugIntroCollectPage!ug01.ht} +\index{ug01.ht!pages!ugIntroCollectPage} +\index{ugIntroCollectPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroCollectPage}{1.6. Data Structures} +\beginscroll +% + +Axiom has a large variety of data structures available. +Many data structures are particularly useful for interactive +computation and others are useful for building applications. +The data structures of Axiom are organized into +\spadglossSee{category hierarchies}{hierarchy} as shown on +the inside back cover. + +A \spadgloss{list} is the most commonly used data structure in +Axiom for holding objects all of the same +type.\footnote{Lists are discussed in +\downlink{`List'}{ListXmpPage}\ignore{List} and in +\downlink{``\ugLangItsTitle''}{ugLangItsPage} +in Section \ugLangItsNumber\ignore{ugLangIts}.} +The name {\it list} is short for ``linked-list of nodes.'' Each +node consists of a value (\spadfunFrom{first}{List}) and a link +(\spadfunFrom{rest}{List}) that +\spadglossSee{points}{pointer} to the next node, or to a +distinguished value denoting the empty list. +To get to, say, the third element, Axiom starts at the front +of the list, then traverses across two links to the third node. + +\xtc{ +Write a list of elements using +square brackets with commas separating the elements. +}{ +\spadpaste{u := [1,-7,11] \bound{u}} +} +\xtc{ +This is the value at the third node. +Alternatively, you can say \axiom{u.3}. +}{ +\spadpaste{first rest rest u\free{u}} +} + +Many operations are defined on lists, such as: +\axiomFun{empty?}, to test that a list has no elements; +\axiomFun{cons}\axiom{(x,l)}, to create a new list with +\axiomFun{first} element \axiom{x} and \axiomFun{rest} \axiom{l}; +\axiomFun{reverse}, to create a new list with elements in reverse +order; and \axiomFun{sort}, to arrange elements in order. + +An important point about lists is that they are ``mutable'': their +constituent elements and links can be changed ``in place.'' +To do this, use any of the operations whose names end with the +character \axiomSyntax{!}. + +\xtc{ +The operation \spadfunFromX{concat}{List}\axiom{(u,v)} +replaces the last link of the list +\axiom{u} to point to some other list \axiom{v}. +Since \axiom{u} refers to the original list, +this change is seen by \axiom{u}. +}{ +\spadpaste{concat!(u,[9,1,3,-4]); u\free{u}\bound{u1}} +} +\xtc{ +A {\it cyclic list} is a list with a ``cycle'': +a link pointing back to an earlier node of the list. +To create a cycle, first get a node somewhere down +the list. +}{ +\spadpaste{lastnode := rest(u,3)\free{u1}\bound{u2}} +} +\xtc{ +Use \spadfunFromX{setrest}{List} to +change the link emanating from that node to point back to an +earlier part of the list. +}{ +\spadpaste{setrest!(lastnode,rest(u,2)); u\free{u2}} +} + +A \spadgloss{stream} +is a structure that (potentially) has an infinite number of +distinct elements.\footnote{Streams are discussed in +\downlink{`Stream'}{StreamXmpPage}\ignore{Stream} and in +\downlink{``\ugLangItsTitle''}{ugLangItsPage} +in Section \ugLangItsNumber\ignore{ugLangIts}.} +Think of a stream as an ``infinite list'' where elements are +computed successively. + +\xtc{ +Create an infinite stream of factored integers. +Only a certain number of initial elements are computed +and displayed. +}{ +\spadpaste{[factor(i) for i in 2.. by 2] \bound{stream1}} +} +\xtc{ +Axiom represents streams by a collection of already-computed +elements together with a function to compute the next element +``on demand.'' +Asking for the \eth{\axiom{n}} element causes elements \axiom{1} through +\axiom{n} to be evaluated. +}{ +\spadpaste{\%.36 \free{stream1}} +} + +Streams can also be finite or cyclic. +They are implemented by a linked list structure similar to lists +and have many of the same operations. +For example, \axiomFun{first} and \axiomFun{rest} are used to access +elements and successive nodes of a stream. +%%> reverse and sort do not exist for streams +%%Don't try to reverse or sort a stream: the +%%operation will generally run forever! + +A \spadgloss{one-dimensional array} is another data structure used +to hold objects of the same type.\footnote{See +\downlink{`OneDimensionalArray'}{OneDimensionalArrayXmpPage} +\ignore{OneDimensionalArray} for +details.} +Unlike lists, one-dimensional arrays are inflexible---they are +implemented using a fixed block of storage. +Their advantage is that they give quick and equal access time to +any element. + +\xtc{ +A simple way to create a one-dimensional array is to apply the +operation \axiomFun{oneDimensionalArray} to a list of elements. +}{ +\spadpaste{a := oneDimensionalArray [1, -7, 3, 3/2]\bound{a}} +} +\xtc{ +One-dimensional arrays are also mutable: +you can change their constituent elements ``in place.'' +}{ +\spadpaste{a.3 := 11; a\bound{a1}\free{a}} +} +\xtc{ +However, one-dimensional arrays are not flexible structures. +You cannot destructively \spadfunX{concat} them together. +}{ +\spadpaste{concat!(a,oneDimensionalArray [1,-2])\free{a1}} +} + +Examples of datatypes similar to \spadtype{OneDimensionalArray} +are: \spadtype{Vector} (vectors are mathematical structures +implemented by one-dimensional arrays), \spadtype{String} (arrays +of ``characters,'' represented by byte vectors), and +\spadtype{Bits} (represented by ``bit vectors''). + +\xtc{ +A vector of 32 bits, +each representing the \spadtype{Boolean} value \axiom{true}. +}{ +\spadpaste{bits(32,true)} +} + +A \spadgloss{flexible array} is a cross between a list +and a one-dimensional array.\footnote{See +\downlink{`FlexibleArray'}{FlexibleArrayXmpPage}\ignore{FlexibleArray} for +details.} +Like a one-dimensional array, a flexible array occupies a fixed +block of storage. +Its block of storage, however, has room to expand! +When it gets full, it grows (a new, larger block of storage is +allocated); when it has too much room, it contracts. + +\xtc{ +Create a flexible array of three elements. +}{ +\spadpaste{f := flexibleArray [2, 7, -5]\bound{f}} +} +\xtc{ +Insert some elements between the second and third elements. +}{ +\spadpaste{insert!(flexibleArray [11, -3],f,2)\free{f}} +} + +Flexible arrays are used to implement ``heaps.'' A +\spadgloss{heap} is an example of a data structure called a +\spadgloss{priority queue}, where elements are ordered with +respect to one another.\footnote{See +\downlink{`Heap'}{HeapXmpPage}\ignore{Heap} for more details. +Heaps are also examples of data structures called +\spadglossSee{bags}{bag}. +Other bag data structures are \spadtype{Stack}, \spadtype{Queue}, +and \spadtype{Dequeue}.} +A heap is organized +so as to optimize insertion and extraction of maximum elements. +The \spadfunX{extract} operation +returns the maximum element of the heap, after destructively +removing that element and +reorganizing the heap +so that the next maximum element is ready to be delivered. + +\xtc{ +An easy way to create a heap is to apply the +operation \spadfun{heap} to a list of values. +}{ +\spadpaste{h := heap [-4,7,11,3,4,-7]\bound{h}} +} +\xtc{ +This loop extracts elements one-at-a-time from \spad{h} +until the heap is exhausted, returning the elements +as a list in the order they were extracted. +}{ +\spadpaste{[extract!(h) while not empty?(h)]\free{h}} +} + +A \spadgloss{binary tree} is a ``tree'' with at most two branches +per node: it is either empty, or else is a node consisting of a +value, and a left and right subtree (again, binary trees).\footnote{Example of binary tree types are +\spadtype{BinarySearchTree} (see +\downlink{`BinarySearchTree'}{BinarySearchTreeXmpPage} +\ignore{BinarySearchTree}, +\spadtype{PendantTree}, \spadtype{TournamentTree}, +and \spadtype{BalancedBinaryTree} (see +\downlink{`BalancedBinaryTree'}{BalancedBinaryTreeXmpPage} +\ignore{BalancedBinaryTree}).} + +\xtc{ +A {\it binary search tree} is a binary tree such that, +for each node, the value of the node is +greater than all values (if any) in the left subtree, +and less than or equal all values (if any) in the right subtree. +}{ +\spadpaste{binarySearchTree [5,3,2,9,4,7,11]} +} + +\xtc{ +A {\it balanced binary tree} is useful for doing modular computations. +Given a list \axiom{lm} of moduli, +\axiomFun{modTree}\axiom{(a,lm)} produces a balanced binary +tree with the values \texht{$a \bmod m$}{a {\tt mod} m} +at its leaves. +}{ +\spadpaste{modTree(8,[2,3,5,7])} +} + +A \spadgloss{set} is a collection of elements where duplication +and order is irrelevant.\footnote{See +\downlink{`Set'}{SetXmpPage}\ignore{Set} for more +details.} +Sets are always finite and have no corresponding +structure like streams for infinite collections. + +\xtc{ +%Create sets using braces (\axiomSyntax{\{} and \axiomSyntax{\}}) +%rather than brackets. +}{ +\spadpaste{fs := set[1/3,4/5,-1/3,4/5] \bound{fs}} +} + +A \spadgloss{multiset} +is a set that keeps track of the number +of duplicate values.\footnote{See +\downlink{`MultiSet'}{MultiSetXmpPage}\ignore{MultiSet} for details.} +\xtc{ +For all the primes \axiom{p} between 2 and 1000, find the +distribution of \texht{$p \bmod 5$}{p mod 5}. +}{ +\spadpaste{multiset [x rem 5 for x in primes(2,1000)]} +} + +A \spadgloss{table} +is conceptually a set of ``key--value'' pairs and +is a generalization of a multiset.\footnote{For examples of tables, see +\spadtype{AssociationList} ( +\downlink{`AssociationList'}{AssociationListXmpPage}\ignore{AssociationList}), +\spadtype{HashTable}, +\spadtype{KeyedAccessFile} ( +\downlink{`KeyedAccessFile'}{KeyedAccessFileXmpPage}\ignore{KeyedAccessFile}), +\spadtype{Library} (\downlink{`Library'}{LibraryXmpPage}\ignore{Library}), +\spadtype{SparseTable} ( +\downlink{`SparseTable'}{SparseTableXmpPage}\ignore{SparseTable}), +\spadtype{StringTable} ( +\downlink{`StringTable'}{StringTableXmpPage}\ignore{StringTable}), +and \spadtype{Table} (\downlink{`Table'}{TableXmpPage}\ignore{Table}).} +The domain \spadtype{Table(Key, Entry)} provides a general-purpose +type for tables with {\it values} of type \axiom{Entry} indexed +by {\it keys} of type \axiom{Key}. + +\xtc{ +Compute the above distribution of primes using tables. +First, let \axiom{t} denote an empty table of keys and values, +each of type \spadtype{Integer}. +}{ +\spadpaste{t : Table(Integer,Integer) := empty()\bound{t}} +} + +We define a function \userfun{howMany} to return the number +of values of a given modulus \axiom{k} seen so far. +It calls \axiomFun{search}\axiom{(k,t)} which returns the number of +values stored under the key \axiom{k} in table \axiom{t}, or +\axiom{"failed"} if no such value is yet stored in \axiom{t} under +\axiom{k}. + +\xtc{ +In English, this says ``Define \axiom{howMany(k)} as follows. +First, let \smath{n} be the value of \axiomFun{search}\smath{(k,t)}. +Then, if \smath{n} has the value \smath{"failed"}, return the value +\smath{1}; otherwise return \smath{n + 1}.'' +}{ +\spadpaste{howMany(k) == (n:=search(k,t); n case "failed" => 1; n+1)\bound{how}} +} +\xtc{ +Run through the primes to create the table, then print the table. +The expression \axiom{t.m := howMany(m)} updates the value in table \axiom{t} +stored under key \axiom{m}. +}{ +\spadpaste{for p in primes(2,1000) repeat (m:= p rem 5; t.m:= howMany(m)); t\free{how t}} +} + +A {\it record} +is an example of an inhomogeneous collection +of objects.\footnote{See +\downlink{``\ugTypesRecordsTitle''}{ugTypesRecordsPage} +in Section \ugTypesRecordsNumber\ignore{ugTypesRecords} for details.} +A record consists of a set of named {\it selectors} that +can be used to access its components. + +\xtc{ +Declare that \axiom{daniel} can only be +assigned a record with two prescribed fields. +}{ +\spadpaste{daniel : Record(age : Integer, salary : Float) \bound{danieldec}} +} +\xtc{ +Give \axiom{daniel} a value, using square brackets to enclose the values of +the fields. +}{ +\spadpaste{daniel := [28, 32005.12] \free{danieldec}\bound{daniel}} +} +\xtc{ +Give \axiom{daniel} a raise. +}{ +\spadpaste{daniel.salary := 35000; daniel \free{daniel}} +} + +A {\it union} +is a data structure used when objects +have multiple types.\footnote{See +\downlink{``\ugTypesUnionsTitle''}{ugTypesUnionsPage} +in Section \ugTypesUnionsNumber\ignore{ugTypesUnions} for details.} + +\xtc{ +Let \axiom{dog} be either an integer or a string value. +}{ +\spadpaste{dog: Union(licenseNumber: Integer, name: String)\bound{xint}} +} +\xtc{ +Give \axiom{dog} a name. +}{ +\spadpaste{dog := "Whisper"\free{xint}} +} + +All told, there are over forty different data structures in +Axiom. +Using the domain constructors described in +\downlink{``\ugDomainsTitle''}{ugDomainsPage} +in Chapter \ugDomainsNumber\ignore{ugDomains}, you +can add your own data structure or extend an existing one. +Choosing the right data structure for your application may be the key +to obtaining good performance. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroTwoDimTitle}{Expanding to Higher Dimensions} +\newcommand{\ugIntroTwoDimNumber}{1.7.} + +@ +\section{Expanding to Higher Dimensions} +\label{ugIntroTwoDimPage} +\begin{itemize} +\item TwoDimensionalArrayXmpPage \ref{TwoDimensionalArrayXmpPage} on +page~\pageref{TwoDimensionalArrayXmpPage} +\item MatrixXmpPage \ref{MatrixXmpPage} on +page~\pageref{MatrixXmpPage} +\item PermanentXmpPage \ref{PermanentXmpPage} on +page~\pageref{PermanentXmpPage} +\item SquareMatrixXmpPage \ref{SquareMatrixXmpPage} on +page~\pageref{SquareMatrixXmpPage} +\item VectorXmpPage \ref{VectorXmpPage} on +page~\pageref{VectorXmpPage} +\item ugProblemEigenPage \ref{ugProblemEigenPage} on +page~\pageref{ugProblemEigenPage} +\item ugProblemLinPolEqnPage \ref{ugProblemLinPolEqnPage} on +page~\pageref{ugProblemLinPolEqnPage} +\item ugLangItsPage \ref{ugLangItsPage} on +page~\pageref{ugLangItsPage} +\end{itemize} +\index{pages!ugIntroTwoDimPage!ug01.ht} +\index{ug01.ht!pages!ugIntroTwoDimPage} +\index{ugIntroTwoDimPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroTwoDimPage}{1.7. Expanding to Higher Dimensions} +\beginscroll +% + +To get higher dimensional aggregates, you can create one-dimensional +aggregates with elements that are themselves +aggregates, for example, lists of lists, one-dimensional arrays of +lists of multisets, and so on. +For applications requiring two-dimensional homogeneous aggregates, +you will likely find {\it two-dimensional arrays} +and {\it matrices} most useful. + +The entries in \spadtype{TwoDimensionalArray} and +\spadtype{Matrix} objects +are all the same type, except that those for +\spadtype{Matrix} must belong to a \spadtype{Ring}. +You create and access elements in roughly the same way. +Since matrices have an understood algebraic structure, certain algebraic +operations are available for matrices but not for arrays. +Because of this, we limit our discussion here to +\spadtype{Matrix}, that can be regarded as an extension of +\spadtype{TwoDimensionalArray}.\footnote{See +\downlink{`TwoDimensionalArray'}{TwoDimensionalArrayXmpPage} +\ignore{TwoDimensionalArray} for more information about arrays. +For more information about Axiom's linear algebra +facilities, see \downlink{`Matrix'}{MatrixXmpPage}\ignore{Matrix}, +\downlink{`Permanent'}{PermanentXmpPage}\ignore{Permanent}, +\downlink{`SquareMatrix'}{SquareMatrixXmpPage}\ignore{SquareMatrix}, +\downlink{`Vector'}{VectorXmpPage}\ignore{Vector}, +\downlink{``\ugProblemEigenTitle''}{ugProblemEigenPage} +in Section \ugProblemEigenNumber\ignore{ugProblemEigen} +\texht{(computation of eigenvalues and +eigenvectors)}{}, and +\downlink{``\ugProblemLinPolEqnTitle''}{ugProblemLinPolEqnPage} +in Section \ugProblemLinPolEqnNumber\ignore{ugProblemLinPolEqn}\ +texht{(solution of linear and +polynomial equations)}{}.} + +\xtc{ +You can create a matrix from a list of lists, +where each of the inner lists represents a row of the matrix. +}{ +\spadpaste{m := matrix([[1,2], [3,4]]) \bound{m}} +} +\xtc{ +The ``collections'' construct (see +\downlink{``\ugLangItsTitle''}{ugLangItsPage} +in Section \ugLangItsNumber\ignore{ugLangIts}) is +useful for creating matrices whose entries are given by formulas. +}{ +\spadpaste{matrix([[1/(i + j - x) for i in 1..4] for j in 1..4]) \bound{hilb}} +} +\xtc{ +Let \axiom{vm} denote the three by three Vandermonde matrix. +}{ +\spadpaste{vm := matrix [[1,1,1], [x,y,z], [x*x,y*y,z*z]] \bound{vm}} +} +\xtc{ +Use this syntax to extract an entry in the matrix. +}{ +\spadpaste{vm(3,3) \free{vm}} +} +\xtc{ +You can also pull out a \axiomFun{row} or a \axiom{column}. +}{ +\spadpaste{column(vm,2) \free{vm}} +} +\xtc{ +You can do arithmetic. +}{ +\spadpaste{vm * vm \free{vm}} +} +\xtc{ +You can perform operations such as +\axiomFun{transpose}, \axiomFun{trace}, and \axiomFun{determinant}. +}{ +\spadpaste{factor determinant vm \free{vm}\bound{d}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroYouTitle}{Writing Your Own Functions} +\newcommand{\ugIntroYouNumber}{1.8.} + +@ +\section{Writing Your Own Functions} +\label{ugIntroYouPage} +\begin{itemize} +\item ugUserPage \ref{ugUserPage} on +page~\pageref{ugUserPage} +\item ugInOutInPage \ref{ugInOutInPage} on +page~\pageref{ugInOutInPage} +\end{itemize} +\index{pages!ugIntroYouPage!ug01.ht} +\index{ug01.ht!pages!ugIntroYouPage} +\index{ugIntroYouPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroYouPage}{1.8. Writing Your Own Functions} +\beginscroll +% + +Axiom provides you with a very large library of predefined +operations and objects to compute with. +You can use the Axiom library of constructors to create new +objects dynamically of quite arbitrary complexity. +For example, you can make lists of matrices of fractions of +polynomials with complex floating point numbers as coefficients. +Moreover, the library provides a wealth of operations that allow +you to create and manipulate these objects. + +For many applications, +you need to interact with the interpreter and write some +Axiom programs to tackle your application. +Axiom allows you to write functions interactively, +thereby effectively extending the system library. +Here we give a few simple examples, leaving the details to +\downlink{``\ugUserTitle''}{ugUserPage} in +Chapter \ugUserNumber\ignore{ugUser}. + +We begin by looking at several ways that you can define the +``factorial'' function in Axiom. +The first way is to give a +piece-wise definition of the function. +This method is best for a general recurrence +relation since the pieces are gathered together and compiled into +an efficient iterative function. +Furthermore, enough previously computed values are automatically +saved so that a subsequent call to the function can pick up from +where it left off. + +\xtc{ +Define the value of \userfun{fact} at \axiom{0}. +}{ +\spadpaste{fact(0) == 1 \bound{fact}} +} +\xtc{ +Define the value of \axiom{fact(n)} for general \axiom{n}. +}{ +\spadpaste{fact(n) == n*fact(n-1)\bound{facta}\free{fact}} +} +\xtc{ +Ask for the value at \axiom{50}. +The resulting function created by Axiom +computes the value by iteration. +}{ +\spadpaste{fact(50) \free{facta}} +} +\xtc{ +A second definition uses an \axiom{if-then-else} and recursion. +}{ +\spadpaste{fac(n) == if n < 3 then n else n * fac(n - 1) \bound{fac}} +} +\xtc{ +This function is less efficient than the previous version since +each iteration involves a recursive function call. +}{ +\spadpaste{fac(50) \free{fac}} +} +\xtc{ +A third version directly uses iteration. +}{ +\spadpaste{fa(n) == (a := 1; for i in 2..n repeat a := a*i; a) \bound{fa}} +} +\xtc{ +This is the least space-consumptive version. +}{ +\spadpaste{fa(50) \free{fa}} +} +\xtc{ +A final version appears to construct a large list and then reduces over +it with multiplication. +}{ +\spadpaste{f(n) == reduce(*,[i for i in 2..n]) \bound{f}} +} +\xtc{ +In fact, the resulting computation is optimized into an efficient +iteration loop equivalent to that of the third version. +}{ +\spadpaste{f(50) \free{f}} +} +\xtc{ +The library version uses an algorithm that is different from the four +above because it highly optimizes the recurrence relation definition of +\axiomFun{factorial}. +}{ +\spadpaste{factorial(50)} +} + +You are not limited to one-line functions in Axiom. +If you place your function definitions in {\bf .input} files +(see \downlink{``\ugInOutInTitle''}{ugInOutInPage} +in Section \ugInOutInNumber\ignore{ugInOutIn}), you can have +multi-line functions that use indentation for grouping. + +Given \axiom{n} elements, \axiomFun{diagonalMatrix} creates an +\axiom{n} by \axiom{n} matrix with those elements down the diagonal. +This function uses a permutation matrix +that interchanges the \axiom{i}th and \axiom{j}th rows of a matrix +by which it is right-multiplied. + +\xtc{ +This function definition shows a style of definition that can be used +in {\bf .input} files. +Indentation is used to create \spadglossSee{blocks}{block}\texht{\/}{}: +sequences of expressions that are evaluated in sequence except as +modified by control statements such as \axiom{if-then-else} and \axiom{return}. +}{ +\begin{spadsrc}[\bound{permMat}] +permMat(n, i, j) == + m := diagonalMatrix + [(if i = k or j = k then 0 else 1) + for k in 1..n] + m(i,j) := 1 + m(j,i) := 1 + m +\end{spadsrc} +} +\xtc{ +This creates a four by four matrix that interchanges the second and third +rows. +}{ +\spadpaste{p := permMat(4,2,3) \free{permMat}\bound{p}} +} +\xtc{ +Create an example matrix to permute. +}{ +\spadpaste{m := matrix [[4*i + j for j in 1..4] for i in 0..3]\bound{m}} +} +\xtc{ +Interchange the second and third rows of m. +}{ +\spadpaste{permMat(4,2,3) * m \free{p m}} +} + +A function can also be passed as an argument to another function, +which then applies the function or passes it off to some other +function that does. +You often have to declare the type of a function that has +functional arguments. + +\xtc{ +This declares \userfun{t} to be a two-argument function that +returns a \spadtype{Float}. +The first argument is a function that takes one \spadtype{Float} +argument and returns a \spadtype{Float}. +}{ +\spadpaste{t : (Float -> Float, Float) -> Float \bound{tdecl}} +} +\xtc{ +This is the definition of \userfun{t}. +}{ +\spadpaste{t(fun, x) == fun(x)**2 + sin(x)**2 \free{tdecl}\bound{t}} +} +\xtc{ +We have not defined a \axiomFun{cos} in the workspace. The one from the +Axiom library will do. +}{ +\spadpaste{t(cos, 5.2058) \free{t}} +} +\xtc{ +Here we define our own (user-defined) function. +}{ +\spadpaste{cosinv(y) == cos(1/y) \bound{cosinv}} +} +\xtc{ +Pass this function as an argument to \userfun{t}. +}{ +\spadpaste{t(cosinv, 5.2058) \free{t}\free{cosinv}} +} + +Axiom also has pattern matching capabilities for +simplification +of expressions and for defining new functions by rules. +For example, suppose that you want to apply regularly a transformation +that groups together products of radicals: +\texht{$$\sqrt{a}\:\sqrt{b} \mapsto \sqrt{ab}, \quad +(\forall a)(\forall b)$$}{\axiom{sqrt(a) * sqrt(b) by sqrt(a*b)} for any \axiom{a} and \axiom{b}} +Note that such a transformation is not generally correct. +Axiom never uses it automatically. + +\xtc{ +Give this rule the name \userfun{groupSqrt}. +}{ +\spadpaste{groupSqrt := rule(sqrt(a) * sqrt(b) == sqrt(a*b)) \bound{g}} +} +\xtc{ +Here is a test expression. +}{ +\spadpaste{a := (sqrt(x) + sqrt(y) + sqrt(z))**4 \bound{sxy}} +} +\xtc{ +The rule +\userfun{groupSqrt} successfully simplifies the expression. +}{ +\spadpaste{groupSqrt a \free{sxy} \free{g}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroVariablesTitle}{Polynomials} +\newcommand{\ugIntroVariablesNumber}{1.9.} + +@ +\section{Polynomials} +\label{ugIntroVariablesPage} +\index{pages!ugIntroVariablesPage!ug01.ht} +\index{ug01.ht!pages!ugIntroVariablesPage} +\index{ugIntroVariablesPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroVariablesPage}{1.9. Polynomials} +\beginscroll +% + +Polynomials are the commonly used algebraic types in symbolic +computation. +Interactive users of Axiom generally only see one type +of polynomial: \spadtype{Polynomial(R)}. +This type represents polynomials in any number of unspecified +variables over a particular coefficient domain \axiom{R}. +This type represents its coefficients +\spadglossSee{sparsely}{sparse}: only terms with non-zero +coefficients are represented. + +In building applications, many other kinds of polynomial +representations are useful. +Polynomials may have one variable or multiple variables, the +variables can be named or unnamed, the coefficients can be stored +sparsely or densely. +So-called ``distributed multivariate polynomials'' store +polynomials as coefficients paired with vectors of exponents. +This type is particularly efficient for use in algorithms for +solving systems of non-linear polynomial equations. + +\xtc{ +The polynomial constructor most familiar to the interactive user +is \spadtype{Polynomial}. +}{ +\spadpaste{(x**2 - x*y**3 +3*y)**2} +} +\xtc{ +If you wish to restrict the variables used, +\spadtype{UnivariatePolynomial} +provides polynomials in one variable. +}{ +\spadpaste{p: UP(x,INT) := (3*x-1)**2 * (2*x + 8)} +} +\xtc{ +The constructor +\spadtype{MultivariatePolynomial} provides polynomials in one or more +specified variables. +}{ +\spadpaste{m: MPOLY([x,y],INT) := (x**2-x*y**3+3*y)**2 \bound{m}} +} +\xtc{ +You can change the way the polynomial appears by modifying the variable +ordering in the explicit list. +}{ +\spadpaste{m :: MPOLY([y,x],INT) \free{m}} +} +\xtc{ +The constructor +\spadtype{DistributedMultivariatePolynomial} provides +polynomials in one or more specified variables with the monomials +ordered lexicographically. +}{ +\spadpaste{m :: DMP([y,x],INT) \free{m}} +} +\xtc{ +The constructor +\spadtype{HomogeneousDistributedMultivariatePolynomial} is similar except that +the monomials are ordered by total order refined by reverse +lexicographic order. +}{ +\spadpaste{m :: HDMP([y,x],INT) \free{m}} +} + +More generally, the domain constructor +\spadtype{GeneralDistributedMultivariatePolynomial} allows the +user to provide an arbitrary predicate to define his own term ordering. +These last three constructors are typically used in +\texht{Gr\"{o}bner}{Groebner} basis +applications and when a flat (that is, non-recursive) display is +wanted and the term ordering is critical for controlling the computation. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroCalcLimitsTitle}{Limits} +\newcommand{\ugIntroCalcLimitsNumber}{1.10.} + +@ +\section{Limits} +\label{ugIntroCalcLimitsPage} +\begin{itemize} +\item ugProblemLimitsPage \ref{ugProblemLimitsPage} on +page~\pageref{ugProblemLimitsPage} +\end{itemize} +\index{pages!ugIntroCalcLimitsPage!ug01.ht} +\index{ug01.ht!pages!ugIntroCalcLimitsPage} +\index{ugIntroCalcLimitsPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroCalcLimitsPage}{1.10. Limits} +\beginscroll +% + +Axiom's \axiomFun{limit} function is usually used to +evaluate limits of quotients where the numerator and denominator +both tend to zero or both tend to infinity. +To find the limit of an expression \axiom{f} as a real variable +\axiom{x} tends to a limit value \axiom{a}, enter \axiom{limit(f, x=a)}. +Use \axiomFun{complexLimit} if the variable is complex. +Additional information and examples of limits are in +\downlink{``\ugProblemLimitsTitle''}{ugProblemLimitsPage} +in Section \ugProblemLimitsNumber\ignore{ugProblemLimits}. + +\xtc{ +You can take limits of functions with parameters. +}{ +\spadpaste{g := csc(a*x) / csch(b*x) \bound{g}} +} +\xtc{ +As you can see, the limit is expressed in terms of the parameters. +}{ +\spadpaste{limit(g,x=0) \free{g}} +} +% +\xtc{ +A variable may also approach plus or minus infinity: +}{ +\spadpaste{h := (1 + k/x)**x \bound{h}} +} +\xtc{ +\texht{Use \axiom{\%plusInfinity} and \axiom{\%minusInfinity} to +denote $\infty$ and $-\infty$.}{} +}{ +\spadpaste{limit(h,x=\%plusInfinity) \free{h}} +} +\xtc{ +A function can be defined on both sides of a particular value, but +may tend to different limits as its variable approaches that value from the +left and from the right. +}{ +\spadpaste{limit(sqrt(y**2)/y,y = 0)} +} +\xtc{ +As \axiom{x} approaches \axiom{0} along the real axis, \axiom{exp(-1/x**2)} +tends to \axiom{0}. +}{ +\spadpaste{limit(exp(-1/x**2),x = 0)} +} +\xtc{ +However, if \axiom{x} is allowed to approach \axiom{0} along any path in the +complex plane, the limiting value of \axiom{exp(-1/x**2)} depends on the +path taken because the function has an essential singularity at \axiom{x=0}. +This is reflected in the error message returned by the function. +}{ +\spadpaste{complexLimit(exp(-1/x**2),x = 0)} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroSeriesTitle}{Series} +\newcommand{\ugIntroSeriesNumber}{1.11.} + +@ +\section{Series} +\label{ugIntroSeriesPage} +\begin{itemize} +\item ugProblemSeriesPage \ref{ugProblemSeriesPage} on +page~\pageref{ugProblemSeriesPage} +\end{itemize} +\index{pages!ugIntroSeriesPage!ug01.ht} +\index{ug01.ht!pages!ugIntroSeriesPage} +\index{ugIntroSeriesPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroSeriesPage}{1.11. Series} +\beginscroll +% + +Axiom also provides power series. +By default, Axiom tries to compute and display the first ten elements +of a series. +Use \spadsys{)set streams calculate} to change the default value +to something else. +For the purposes of this book, we have used this system command to display +fewer than ten terms. +For more information about working with series, see +\downlink{``\ugProblemSeriesTitle''}{ugProblemSeriesPage} +in Section \ugProblemSeriesNumber\ignore{ugProblemSeries}. + +\xtc{ +You can convert a functional expression to a power series by using the +operation \axiomFun{series}. +In this example, +\axiom{sin(a*x)} is expanded in powers of \axiom{(x - 0)}, +that is, in powers of \axiom{x}. +}{ +\spadpaste{series(sin(a*x),x = 0)} +} +\xtc{ +This expression expands +\axiom{sin(a*x)} in powers of \axiom{(x - \%pi/4)}. +}{ +\spadpaste{series(sin(a*x),x = \%pi/4)} +} +\xtc{ +Axiom provides +{\it Puiseux series:} +series with rational number exponents. +The first argument to \axiomFun{series} is an in-place function that +computes the \eth{\axiom{n}} coefficient. +(Recall that +the \axiomSyntax{+->} is an infix operator meaning ``maps to.'') +}{ +\spadpaste{series(n +-> (-1)**((3*n - 4)/6)/factorial(n - 1/3),x = 0,4/3..,2)} +} +\xtc{ +Once you have created a power series, you can perform arithmetic operations +on that series. +We compute the Taylor expansion of \axiom{1/(1-x)}. +}{ +\spadpaste{f := series(1/(1-x),x = 0) \bound{f}} +} +\xtc{ +Compute the square of the series. +}{ +\spadpaste{f ** 2 \free{f}} +} +\xtc{ +The usual elementary functions +(\axiomFun{log}, \axiomFun{exp}, trigonometric functions, and so on) +are defined for power series. +}{ +\spadpaste{f := series(1/(1-x),x = 0) \bound{f1}} +} +\xtc{ +}{ +\spadpaste{g := log(f) \free{f1}\bound{g}} +} +\xtc{ +}{ +\spadpaste{exp(g) \free{g}} +} +\xtc{ +Here is a way to obtain numerical approximations of +\axiom{e} from the Taylor series expansion of \axiom{exp(x)}. +First create the desired Taylor expansion. +}{ +\spadpaste{f := taylor(exp(x)) \bound{f2}} +} +\xtc{ +Evaluate the series at the value \axiom{1.0}. +As you see, you get a sequence of partial sums. +}{ +\spadpaste{eval(f,1.0) \free{f2}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroCalcDerivTitle}{Derivatives} +\newcommand{\ugIntroCalcDerivNumber}{1.12.} + +@ +\section{Derivatives} +\label{ugIntroCalcDerivPage} +\index{pages!ugIntroCalcDerivPage!ug01.ht} +\index{ug01.ht!pages!ugIntroCalcDerivPage} +\index{ugIntroCalcDerivPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroCalcDerivPage}{1.12. Derivatives} +\beginscroll +% +Use the Axiom function \axiomFun{D} to differentiate an +expression. + +\texht{\vskip 2pc}{} +\xtc{ +To find the derivative of an expression \axiom{f} with respect to a +variable \axiom{x}, enter \axiom{D(f, x)}. +}{ +\spadpaste{f := exp exp x \bound{f}} +} +\xtc{ +}{ +\spadpaste{D(f, x) \free{f}} +} +\xtc{ +An optional third argument \axiom{n} in \axiomFun{D} asks +Axiom for the \eth{\axiom{n}} derivative of \axiom{f}. +This finds the fourth derivative of \axiom{f} with respect to \axiom{x}. +}{ +\spadpaste{D(f, x, 4) \free{f}} +} +\xtc{ +You can also compute partial derivatives by specifying the order of +differentiation. +}{ +\spadpaste{g := sin(x**2 + y) \bound{g}} +} +\xtc{ +}{ +\spadpaste{D(g, y) \free{g}} +} +\xtc{ +}{ +\spadpaste{D(g, [y, y, x, x]) \free{g}} +} + +Axiom can manipulate the derivatives (partial and iterated) of +expressions involving formal operators. +All the dependencies must be explicit. +\xtc{ +This returns \axiom{0} since \axiom{F} (so far) +does not explicitly depend on \axiom{x}. +}{ +\spadpaste{D(F,x)} +} +Suppose that we have \axiom{F} a function of \axiom{x}, +\axiom{y}, and \axiom{z}, where \axiom{x} and \axiom{y} are themselves +functions of \axiom{z}. +\xtc{ +Start by declaring that \axiom{F}, \axiom{x}, and \axiom{y} +are operators. +}{ +\spadpaste{F := operator 'F; x := operator 'x; y := operator 'y\bound{F x y}} +} +\xtc{ +You can use \axiom{F}, \axiom{x}, and \axiom{y} in expressions. +}{ +\spadpaste{a := F(x z, y z, z**2) + x y(z+1) \bound{a}\free{F}\free{x}\free{y}} +} +\xtc{ +Differentiate formally with respect to \axiom{z}. +The formal derivatives appearing in \axiom{dadz} are not just formal symbols, +but do represent the derivatives of \axiom{x}, \axiom{y}, and \axiom{F}. +}{ +\spadpaste{dadz := D(a, z)\bound{da}\free{a}} +} +\xtc{ +You can evaluate the above for particular functional +values of \axiom{F}, \axiom{x}, and \axiom{y}. +If \axiom{x(z)} is \axiom{exp(z)} and \axiom{y(z)} is \axiom{log(z+1)}, then +this evaluates \axiom{dadz}. +}{ +\spadpaste{eval(eval(dadz, 'x, z +-> exp z), 'y, z +-> log(z+1))\free{da}} +} +\xtc{ +You obtain the same result by first evaluating \axiom{a} and +then differentiating. +}{ +\spadpaste{eval(eval(a, 'x, z +-> exp z), 'y, z +-> log(z+1)) \free{a}\bound{eva}} +} +\xtc{ +}{ +\spadpaste{D(\%, z)\free{eva}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroIntegrateTitle}{Integration} +\newcommand{\ugIntroIntegrateNumber}{1.13.} + +@ +\section{Integration} +\label{ugIntroIntegratePage} +\begin{itemize} +\item ugProblemIntegrationPage \ref{ugProblemIntegrationPage} on +page~\pageref{ugProblemIntegrationPage} +\end{itemize} +\index{pages!ugIntroIntegratePage!ug01.ht} +\index{ug01.ht!pages!ugIntroIntegratePage} +\index{ugIntroIntegratePage!ug01.ht!pages} +<>= +\begin{page}{ugIntroIntegratePage}{1.13. Integration} +\beginscroll +% + +Axiom has extensive library facilities for integration. + +The first example is the integration of a fraction with +denominator that factors into a quadratic and a quartic +irreducible polynomial. +The usual partial fraction approach used by most other computer +algebra systems either fails or introduces expensive unneeded +algebraic numbers. + +\xtc{ +We use a factorization-free algorithm. +}{ +\spadpaste{integrate((x**2+2*x+1)/((x+1)**6+1),x)} +} + +When real parameters are present, the form of the integral can depend on +the signs of some expressions. + +\xtc{ +Rather than query the user or make sign assumptions, Axiom returns +all possible answers. +}{ +\spadpaste{integrate(1/(x**2 + a),x)} +} + +The \axiomFun{integrate} operation generally assumes that all +parameters are real. +The only exception is when the integrand has complex valued +quantities. + +\xtc{ +If the parameter is complex instead of real, then the notion of sign is +undefined and there is a unique answer. +You can request this answer by ``prepending'' the word ``complex'' to the +command name: +}{ +\spadpaste{complexIntegrate(1/(x**2 + a),x)} +} + +The following two examples illustrate the limitations of +table-based approaches. +The two integrands are very similar, but the answer to one of them +requires the addition of two new algebraic numbers. + +\xtc{ +This one is the easy one. +The next one looks very similar +but the answer is much more complicated. +}{ +\spadpaste{integrate(x**3 / (a+b*x)**(1/3),x)} +} +\xtc{ +Only an algorithmic approach +is guaranteed to find what new constants must be added in order to +find a solution. +}{ +\spadpaste{integrate(1 / (x**3 * (a+b*x)**(1/3)),x)} +} + +Some computer algebra systems use heuristics or table-driven +approaches to integration. +When these systems cannot determine the answer to an integration +problem, they reply ``I don't know.'' Axiom uses a +algorithm for integration. +that conclusively proves that an integral cannot be expressed in +terms of elementary functions. + +\xtc{ +When Axiom returns an integral sign, it has proved +that no answer exists as an elementary function. +}{ +\spadpaste{integrate(log(1 + sqrt(a*x + b)) / x,x)} +} +Axiom can handle complicated mixed functions much beyond what you +can find in tables. +\xtc{ +Whenever possible, Axiom tries to express the answer using the functions +present in the integrand. +}{ +\spadpaste{integrate((sinh(1+sqrt(x+b))+2*sqrt(x+b)) / (sqrt(x+b) * (x + cosh(1+sqrt(x + b)))), x)} +} +\xtc{ +A strong structure-checking algorithm in Axiom finds hidden algebraic +relationships between functions. +}{ +\spadpaste{integrate(tan(atan(x)/3),x)} +} +\noindent +%%--> Bob---> please make these formulas in this section smaller. +The discovery of this algebraic relationship is necessary for correct +integration of this function. +Here are the details: +\indent{4} +\beginitems +\item[1. ] +If \texht{$x=\tan t$}{\axiom{x=tan(t)}} and +\texht{$g=\tan (t/3)$}{\axiom{g=tan(t/3)}} then the following +algebraic relation is true: +\texht{$${g^3-3xg^2-3g+x=0}$$}{\centerline{\axiom{g**3 - 3*x*g**2 - 3*g + x = 0}}} +\item[2. ] +Integrate \axiom{g} using this algebraic relation; this produces: +\texht{$${% +{(24g^2 - 8)\log(3g^2 - 1) + (81x^2 + 24)g^2 + 72xg - 27x^2 - 16} +\over{54g^2 - 18}}$$}{\centerline{\axiom{(24g**2 - 8)log(3g**2 - 1) + +(81x**2 + 24)g**2 + 72xg - 27x**2 - 16/ (54g**2 - 18)}}} +\item[3. ] +Rationalize the denominator, producing: +\texht{\narrowDisplay{{8\log(3g^2-1) - 3g^2 + 18xg + 16} \over +{18}}}{\centerline{\axiom{(8*log(3*g**2-1) - 3*g**2 + 18*x*g + 16)/18}}} +Replace \axiom{g} by the initial definition +\texht{$g = \tan(\arctan(x)/3)$}{\axiom{g = tan(arctan(x)/3)}} +to produce the final result. +\enditems +\indent{0} + +\xtc{ +This is an example of a mixed function where +the algebraic layer is over the transcendental one. +}{ +\spadpaste{integrate((x + 1) / (x*(x + log x) ** (3/2)), x)} +} +\xtc{ +While incomplete for non-elementary functions, Axiom can +handle some of them. +}{ +\spadpaste{integrate(exp(-x**2) * erf(x) / (erf(x)**3 - erf(x)**2 - erf(x) + 1),x)} +} + +More examples of Axiom's integration capabilities are discussed in +\downlink{``\ugProblemIntegrationTitle''}{ugProblemIntegrationPage} +in Section \ugProblemIntegrationNumber\ignore{ugProblemIntegration}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroDiffEqnsTitle}{Differential Equations} +\newcommand{\ugIntroDiffEqnsNumber}{1.14.} + +@ +\section{Differential Equations} +\label{ugIntroDiffEqnsPage} +\index{pages!ugIntroDiffEqnsPage!ug01.ht} +\index{ug01.ht!pages!ugIntroDiffEqnsPage} +\index{ugIntroDiffEqnsPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroDiffEqnsPage}{1.14. Differential Equations} +\beginscroll +% +The general approach used in integration also carries over to the +solution of linear differential equations. + +\labelSpace{2pc} +\xtc{ +Let's solve some differential equations. +Let \axiom{y} be the unknown function in terms of \axiom{x}. +}{ +\spadpaste{y := operator 'y \bound{y}} +} +\xtc{ +Here we solve a third order equation with polynomial coefficients. +}{ +\spadpaste{deq := x**3 * D(y x, x, 3) + x**2 * D(y x, x, 2) - 2 * x * D(y x, x) + 2 * y x = 2 * x**4 \bound{e3}\free{y}} +} +\xtc{ +}{ +\spadpaste{solve(deq, y, x) \free{e3}\free{y}} +} +\xtc{ +Here we find all the algebraic function solutions of the equation. +}{ +\spadpaste{deq := (x**2 + 1) * D(y x, x, 2) + 3 * x * D(y x, x) + y x = 0 \bound{e5}\free{y}} +} +\xtc{ +}{ +\spadpaste{solve(deq, y, x) \free{e5}\free{y}} +} + +Coefficients of differential equations can come from arbitrary +constant fields. +For example, coefficients can contain algebraic numbers. + +\xtc{ +This example has solutions +whose logarithmic derivative is an algebraic function of +degree two. +}{ +\spadpaste{eq := 2*x**3 * D(y x,x,2) + 3*x**2 * D(y x,x) - 2 * y x\bound{eq}\free{y}} +} +\xtc{ +}{ +\spadpaste{solve(eq,y,x).basis\free{eq}} +} + +\xtc{ +Here's another differential equation to solve. +}{ +\spadpaste{deq := D(y x, x) = y(x) / (x + y(x) * log y x) \bound{deqi}\free{y}} +} +\xtc{ +}{ +\spadpaste{solve(deq, y, x) \free{deqi y}} +} + +Rather than attempting to get a closed form solution of +a differential equation, you instead might want to find an +approximate solution in the form of a series. + +\xtc{ +Let's solve a system of nonlinear first order equations and get a +solution in power series. +Tell Axiom that \axiom{x} is also an operator. +}{ +\spadpaste{x := operator 'x\bound{x}} +} +\xtc{ +Here are the two equations forming our system. +}{ +\spadpaste{eq1 := D(x(t), t) = 1 + x(t)**2\free{x}\free{y}\bound{eq1}} +} +\xtc{ +}{ +\spadpaste{eq2 := D(y(t), t) = x(t) * y(t)\free{x}\free{y}\bound{eq2}} +} +\xtc{ +We can solve the system around \axiom{t = 0} with the initial conditions +\axiom{x(0) = 0} and \axiom{y(0) = 1}. +Notice that since we give the unknowns in the +order \axiom{[x, y]}, the answer is a list of two series in the order +\axiom{[series for x(t), series for y(t)]}. +}{ +\spadpaste{seriesSolve([eq2, eq1], [x, y], t = 0, [y(0) = 1, x(0) = 0])\free{x}\free{y}\free{eq1}\free{eq2}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroSolutionTitle}{Solution of Equations} +\newcommand{\ugIntroSolutionNumber}{1.15.} + +@ +\section{Solution of Equations} +\label{ugIntroSolutionPage} +\index{pages!ugIntroSolutionPage!ug01.ht} +\index{ug01.ht!pages!ugIntroSolutionPage} +\index{ugIntroSolutionPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroSolutionPage}{1.15. Solution of Equations} +\beginscroll +% + +Axiom also has state-of-the-art algorithms for the solution +of systems of polynomial equations. +When the number of equations and unknowns is the same, and you +have no symbolic coefficients, you can use \spadfun{solve} for +real roots and \spadfun{complexSolve} for complex roots. +In each case, you tell Axiom how accurate you want your +result to be. +All operations in the \spadfun{solve} family return answers in +the form of a list of solution sets, where each solution set is a +list of equations. + +\xtc{ +A system of two equations involving a symbolic +parameter \axiom{t}. +}{ +\spadpaste{S(t) == [x**2-2*y**2 - t,x*y-y-5*x + 5]\bound{S1}} +} +\xtc{ +Find the real roots of \spad{S(19)} with +rational arithmetic, correct to within \smath{1/10^{20}}. +}{ +\spadpaste{solve(S(19),1/10**20)\free{S1}} +} +\xtc{ +Find the complex roots of \spad{S(19)} with floating +point coefficients to \spad{20} digits accuracy in the mantissa. +}{ +\spadpaste{complexSolve(S(19),10.e-20)\free{S1}} +} +\xtc{ +If a system of equations has symbolic coefficients and you want +a solution in radicals, try \spadfun{radicalSolve}. +}{ +\spadpaste{radicalSolve(S(a),[x,y])\free{S1}} +} +For systems of equations with symbolic coefficients, you can +apply \spadfun{solve}, listing the variables that you want +Axiom to solve for. +For polynomial equations, a solution cannot usually be expressed +solely in terms of the other variables. +Instead, the solution is presented as a ``triangular'' system of +equations, where each polynomial has coefficients involving +only the succeeding variables. This is analogous to converting a linear system +of equations to ``triangular form''. +\xtc{ +A system of three equations in five variables. +}{ +\spadpaste{eqns := [x**2 - y + z,x**2*z + x**4 - b*y, y**2 *z - a - b*x]\bound{e}} +} +\xtc{ +Solve the system for unknowns \smath{[x,y,z]}, +reducing the solution to triangular form. +}{ +\spadpaste{solve(eqns,[x,y,z])\free{e}} +} +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntroSysCmmandsTitle}{System Commands} +\newcommand{\ugIntroSysCmmandsNumber}{1.16.} + +@ +\section{System Commands} +\label{ugIntroSysCmmandsPage} +\begin{itemize} +\item ugSysCmdPage \ref{ugSysCmdPage} on +page~\pageref{ugSysCmdPage} +\end{itemize} +\index{pages!ugIntroSysCmmandsPage!ug01.ht} +\index{ug01.ht!pages!ugIntroSysCmmandsPage} +\index{ugIntroSysCmmandsPage!ug01.ht!pages} +<>= +\begin{page}{ugIntroSysCmmandsPage}{1.16. System Commands} +\beginscroll +% + +We conclude our tour of Axiom with a brief discussion +of \spadgloss{system commands}. +System commands are special statements that start with a +closing parenthesis (\axiomSyntax{)}). They are used to control or +display your Axiom environment, start the \HyperName{} +system, issue operating system commands and leave Axiom. +For example, \spadsys{)system} is used +to issue commands to the operating system from Axiom. +Here is a brief description of some of these commands. +For more information on specific commands, see +\downlink{``\ugSysCmdTitle''}{ugSysCmdPage} +in Appendix \ugSysCmdNumber\ignore{ugSysCmd}. + +Perhaps the most important user command is the \spadsys{)clear all} +command that initializes your environment. +Every section and subsection in this book has an invisible +\spadsys{)clear all} that is read prior to the examples given in +the section. +\spadsys{)clear all} gives you a fresh, empty environment with no +user variables defined and the step number reset to \axiom{1}. +The \spadsys{)clear} command can also be used to selectively clear +values and properties of system variables. + +Another useful system command is \spadsys{)read}. +A preferred way to develop an application in Axiom is to put +your interactive commands into a file, say {\bf my.input} file. +To get Axiom to read this file, you use the system command +\spadsys{)read my.input}. +If you need to make changes to your approach or definitions, go +into your favorite editor, change {\bf my.input}, then +\spadsys{)read my.input} again. + +Other system commands include: \spadsys{)history}, to display +previous input and/or output lines; \spadsys{)display}, to display +properties and values of workspace variables; and \spadsys{)what}. + +\xtc{ +Issue \spadsys{)what} to get a list of Axiom objects that +contain a given substring in their name. +}{ +\spadpaste{)what operations integrate} +} + +%\head{subsection}{Undo}{ugIntroUndo} + +A useful system command is \spadcmd{)undo}. +Sometimes while computing interactively with Axiom, you make +a mistake and enter an incorrect definition or assignment. +Or perhaps you +need to try one of several alternative approaches, one after +another, to find the best way to approach an application. +For this, you will find the \spadgloss{undo} facility of +Axiom helpful. + +System command \spadsys{)undo n} means ``undo back to step \axiom{n}''; it +restores the values of user variables to those that existed +immediately after input expression \axiom{n} was evaluated. +Similarly, \spadsys{)undo -n} undoes changes caused by the last +\axiom{n} input expressions. +Once you have done an \spadsys{)undo}, +you can continue on from there, or make a change and +{\bf redo} all your input expressions from the point +of the \spadsys{)undo} forward. +The \spadsys{)undo} is completely general: it changes the environment +like any user expression. +Thus you can \spadsys{)undo} any previous undo. + +Here is a sample dialogue between user and Axiom. +\xtc{ +``Let me define +two mutually dependent functions \axiom{f} and \axiom{g} piece-wise.'' +}{ +\spadpaste{f(0) == 1; g(0) == 1\bound{u1}} +} +\xtc{ +``Here is the general term for \axiom{f}.'' +}{ +\spadpaste{f(n) == e/2*f(n-1) - x*g(n-1)\bound{u2}\free{u1}} +} +\xtc{ +``And here is the general term for \axiom{g}.'' +}{ +\spadpaste{g(n) == -x*f(n-1) + d/3*g(n-1)\bound{u3}\free{u2}} +} +\xtc{ +``What is value of \axiom{f(3)}?'' +}{ +\spadpaste{f(3)\bound{u4}\free{u3}} +} +\noOutputXtc{ +``Hmm, I think I want to define \axiom{f} differently. +Undo to the environment right after I defined \axiom{f}.'' +}{ +\spadpaste{)undo 2\bound{u5}\free{u4}} +} +\xtc{ +``Here is how I think I want \axiom{f} to be defined instead.'' +}{ +\spadpaste{f(n) == d/3*f(n-1) - x*g(n-1)\bound{u6}\free{u5}} +} +\noOutputXtc{ +Redo the computation from expression \axiom{3} forward. +}{ +\spadpaste{)undo )redo\bound{u7}\free{u6}} +} +\noOutputXtc{ +``I want my old definition of +\axiom{f} after all. Undo the undo and restore +the environment to that immediately after \axiom{(4)}.'' +}{ +\spadpaste{)undo 4\bound{u8}\free{u7}} +} +\xtc{ +``Check that the value of \axiom{f(3)} is restored.'' +}{ +\spadpaste{f(3)\bound{u9}\free{u8}} +} + +After you have gone off on several tangents, then backtracked to +previous points in your conversation using \spadsys{)undo}, you +might want to save all the ``correct'' input commands you issued, +disregarding those undone. +The system command \spadsys{)history )write mynew.input} writes a +clean straight-line program onto the file {\bf mynew.input} on +your disk. + +This concludes your tour of Axiom. +To disembark, issue the system command \spadsys{)quit} to leave Axiom +and return to the operating system. +\endscroll +\autobuttons +\end{page} +% +@ +\chapter{Users Guide Chapter 2 (ug02.ht)} +<>= +\newcommand{\ugTypesTitle}{Using Types and Modes} +\newcommand{\ugTypesNumber}{2.} + +@ +\section{Using Types and Modes} +\label{ugTypesPage} +\begin{itemize} +\item ugTypesBasicPage \ref{ugTypesBasicPage} on +page~\pageref{ugTypesBasicPage} +\item ugTypesWritingPage \ref{ugTypesWritingPage} on +page~\pageref{ugTypesWritingPage} +\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on +page~\pageref{ugTypesDeclarePage} +\item ugTypesRecordsPage \ref{ugTypesRecordsPage} on +page~\pageref{ugTypesRecordsPage} +\item ugTypesUnionsPage \ref{ugTypesUnionsPage} on +page~\pageref{ugTypesUnionsPage} +\item ugTypesAnyNonePage \ref{ugTypesAnyNonePage} on +page~\pageref{ugTypesAnyNonePage} +\item ugTypesConvertPage \ref{ugTypesConvertPage} on +page~\pageref{ugTypesConvertPage} +\item ugTypesSubdomainsPage \ref{ugTypesSubdomainsPage} on +page~\pageref{ugTypesSubdomainsPage} +\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on +page~\pageref{ugTypesPkgCallPage} +\item ugTypesResolvePage \ref{ugTypesResolvePage} on +page~\pageref{ugTypesResolvePage} +\item ugTypesExposePage \ref{ugTypesExposePage} on +page~\pageref{ugTypesExposePage} +\item ugAvailSnoopPage \ref{ugAvailSnoopPage} on +page~\pageref{ugAvailSnoopPage} +\end{itemize} +\index{pages!ugTypesPage!ug02.ht} +\index{ug02.ht!pages!ugTypesPage} +\index{ugTypesPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesPage}{2. Using Types and Modes} +\beginscroll + +In this chapter we look at the key notion of \spadgloss{type} and its +generalization \spadgloss{mode}. +We show that every Axiom object has a type that +determines what you can do with the object. +In particular, we explain how to use types to call specific functions +from particular parts of the library and how types and modes can be used +to create new objects from old. +We also look at \pspadtype{Record} and \pspadtype{Union} types and +the special type \axiomType{Any}. +Finally, we give you an idea of how Axiom manipulates types and +modes internally to resolve ambiguities. + +\beginmenu + \menudownlink{{2.1. The Basic Idea}}{ugTypesBasicPage} + \menudownlink{{2.2. Writing Types and Modes}}{ugTypesWritingPage} + \menudownlink{{2.3. Declarations}}{ugTypesDeclarePage} + \menudownlink{{2.4. Records}}{ugTypesRecordsPage} + \menudownlink{{2.5. Unions}}{ugTypesUnionsPage} + \menudownlink{{2.6. The ``Any'' Domain}}{ugTypesAnyNonePage} + \menudownlink{{2.7. Conversion}}{ugTypesConvertPage} + \menudownlink{{2.8. Subdomains Again}}{ugTypesSubdomainsPage} + \menudownlink{{2.9. Package Calling and Target Types}}{ugTypesPkgCallPage} + \menudownlink{{2.10. Resolving Types}}{ugTypesResolvePage} + \menudownlink{{2.11. Exposing Domains and Packages}}{ugTypesExposePage} + \menudownlink{{2.12. Commands for Snooping}}{ugAvailSnoopPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesBasicTitle}{The Basic Idea} +\newcommand{\ugTypesBasicNumber}{2.1.} + +@ +\section{The Basic Idea} +\label{ugTypesBasicPage} +\begin{itemize} +\item ugTypesBasicDomainConsPage \ref{ugTypesBasicDomainConsPage} on +page~\pageref{ugTypesBasicDomainConsPage} +\end{itemize} +\index{pages!ugTypesBasicPage!ug02.ht} +\index{ug02.ht!pages!ugTypesBasicPage} +\index{ugTypesBasicPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesBasicPage}{2.1. The Basic Idea} +\beginscroll + +The Axiom world deals with many kinds of objects. +There are mathematical objects such as numbers and polynomials, +data structure objects such as lists and arrays, and graphics +objects such as points and graphic images. +Functions are objects too. + +Axiom organizes objects using the notion of \spadglossSee{domain of +computation}{domain}, or simply \spadgloss{domain}. +Each domain denotes a class of objects. +The class of objects it denotes is usually given by the name of the +domain: \axiomType{Integer} for the integers, \axiomType{Float} for +floating-point numbers, and so on. +The convention is that the first letter of a domain name is capitalized. +Similarly, the domain \axiomType{Polynomial(Integer)} denotes ``polynomials +with integer coefficients.'' +Also, \axiomType{Matrix(Float)} denotes ``matrices with floating-point +entries.'' + +Every basic Axiom object belongs to a unique domain. +The integer \axiom{3} belongs to the domain \axiomType{Integer} and +the polynomial \axiom{x + 3} belongs to the domain +\axiomType{Polynomial(Integer)}. +The domain of an object is also called its \spadgloss{type}. +Thus we speak of ``the type \axiomType{Integer}'' +and ``the type \axiomType{Polynomial(Integer)}.'' + +\xtc{ +After an Axiom computation, the type is displayed toward the +right-hand side of the page (or screen). +}{ +\spadpaste{-3} +} +\xtc{ +Here we create a rational number but it looks like the last result. +The type however tells you it is different. +You cannot identify the type of an object by how Axiom +displays the object. +}{ +\spadpaste{-3/1} +} +\xtc{ +When a computation produces a result of a simpler type, Axiom leaves +the type unsimplified. +Thus no information is lost. +}{ +\spadpaste{x + 3 - x \bound{three}} +} +\xtc{ +This seldom matters since Axiom retracts the answer to the +simpler type if it is necessary. +}{ +\spadpaste{factorial(\%) \free{three}} +} +\xtc{ +When you issue a positive number, the type \axiomType{PositiveInteger} is +printed. +Surely, \axiom{3} also has type \axiomType{Integer}! +The curious reader may now have two questions. +First, is the type of an object not unique? +Second, how is \axiomType{PositiveInteger} related to \axiomType{Integer}? +Read on! +}{ +\spadpaste{3} +} + +Any domain can be refined to a \spadgloss{subdomain} by a membership +\spadgloss{predicate}.\footnote{A predicate is a function that, +when applied to an object of the domain, returns either +\axiom{true} or \axiom{false}.} +For example, the domain \axiomType{Integer} can be refined to the +subdomain \axiomType{PositiveInteger}, the set of integers +\axiom{x} such that \axiom{x > 0}, by giving the Axiom +predicate \axiom{x +-> x > 0}. +Similarly, Axiom can define subdomains such as ``the +subdomain of diagonal matrices,'' ``the subdomain of lists of length +two,'' ``the subdomain of monic irreducible polynomials in +\axiom{x},'' and so on. +Trivially, any domain is a subdomain of itself. + +While an object belongs to a unique domain, it can belong to any +number of subdomains. +Any subdomain of the domain of an object can be used as the +{\it type} of that object. +The type of \axiom{3} is indeed both \axiomType{Integer} and +\axiomType{PositiveInteger} as well as any other subdomain of +integer whose predicate is satisfied, such as ``the prime +integers,'' ``the odd positive integers between 3 and 17,'' and so +on. + +\beginmenu + \menudownlink{{2.1.1. Domain Constructors}}{ugTypesBasicDomainConsPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesBasicDomainConsTitle}{Domain Constructors} +\newcommand{\ugTypesBasicDomainConsNumber}{2.1.1.} + +@ +\section{Domain Constructors} +\label{ugTypesBasicDomainConsPage} +\begin{itemize} +\item ugCategoriesPage \ref{ugCategoriesPage} on +page~\pageref{ugCategoriesPage} +\item ugTypesConvertPage \ref{ugTypesConvertPage} on +page~\pageref{ugTypesConvertPage} +\end{itemize} +\index{pages!ugTypesBasicDomainConsPage!ug02.ht} +\index{ug02.ht!pages!ugTypesBasicDomainConsPage} +\index{ugTypesBasicDomainConsPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesBasicDomainConsPage}{2.1.1. Domain Constructors} +\beginscroll + +In Axiom, domains are objects. +You can create them, pass them to functions, and, as we'll see later, test +them for certain properties. + +In Axiom, you ask for a value of a function by applying its name +to a set of arguments. + +\xtc{ +To ask for ``the factorial of 7'' you enter this expression to +Axiom. +This applies the function \axiom{factorial} to the value \axiom{7} +to compute the result. +}{ +\spadpaste{factorial(7)} +} +\xtc{ +Enter the type \axiomType{Polynomial (Integer)} as an expression to +Axiom. +This looks much like a function call as well. +It is! +The result is appropriately stated to be of type +\axiomType{Domain}, which +according to our usual convention, denotes the class of all domains. +}{ +\spadpaste{Polynomial(Integer)} +} + +The most basic operation involving domains is that of building a new +domain from a given one. +To create the domain of ``polynomials over the integers,'' Axiom +applies the function \axiomType{Polynomial} to the domain +\axiomType{Integer}. +A function like \axiomType{Polynomial} is called a \spadgloss{domain +constructor} or, +more simply, a +\spadgloss{constructor}. +A domain constructor is a function that creates a domain. +An argument to a domain constructor can be another domain or, in general, +an arbitrary kind of object. +\axiomType{Polynomial} takes a single domain argument while +\axiomType{SquareMatrix} takes a positive integer as an argument +to give its dimension and +a domain argument to give the type of its components. + +What kinds of domains can you use as the argument to +\axiomType{Polynomial} or \axiomType{SquareMatrix} or +\axiomType{List}? +Well, the first two are mathematical in nature. +You want to be able to perform algebraic operations like +\axiomOp{+} and \axiomOp{*} on polynomials and square matrices, +and operations such as \axiomFun{determinant} on square matrices. +So you want to allow polynomials of integers {\it and} polynomials +of square matrices with complex number coefficients and, in +general, anything that ``makes sense.'' At the same time, you +don't want Axiom to be able to build nonsense domains such +as ``polynomials of strings!'' + +In contrast to algebraic structures, data structures can hold any +kind of object. +Operations on lists such as \axiomFunFrom{insert}{List}, +\axiomFunFrom{delete}{List}, and \axiomFunFrom{concat}{List} just +manipulate the list itself without changing or operating on its +elements. +Thus you can build \axiomType{List} over almost any datatype, +including itself. +\xtc{ +Create a complicated algebraic domain. +}{ +\spadpaste{List (List (Matrix (Polynomial (Complex (Fraction (Integer))))))} +} +\xtc{ +Try to create a meaningless domain. +}{ +\spadpaste{Polynomial(String)} +} +Evidently from our last example, Axiom has some mechanism +that tells what a constructor can use as an argument. +This brings us to the notion of \spadgloss{category}. +As domains are objects, they too have a domain. +The domain of a domain is a category. +A category is simply a type whose members are domains. + +A common algebraic category is \axiomType{Ring}, the class of all domains +that are ``rings.'' +A ring is an algebraic structure with constants \axiom{0} and \axiom{1} and +operations \axiomOpFrom{+}{Ring}, \axiomOpFrom{-}{Ring}, and +\axiomOpFrom{*}{Ring}. +These operations are assumed ``closed'' with respect to the domain, +meaning that they take two objects of the domain and produce a result +object also in the domain. +The operations are understood to satisfy certain ``axioms,'' certain +mathematical principles providing the algebraic foundation for rings. +For example, the {\it additive inverse axiom} for rings states: +\centerline{{Every element \axiom{x} has an additive inverse \axiom{y} such}} +\centerline{{that \axiom{x + y = 0}.}} +The prototypical example of a domain that is a ring is the integers. +Keep them in mind whenever we mention \axiomType{Ring}. + +Many algebraic domain constructors such as \axiomType{Complex}, +\axiomType{Polynomial}, \axiomType{Fraction}, take rings as +arguments and return rings as values. +You can use the infix operator ``\axiom{has}'' +\spadkey{has} +to ask a domain if it belongs to a particular category. + +\xtc{ +All numerical types are rings. +Domain constructor \axiomType{Polynomial} builds ``the ring of polynomials +over any other ring.'' +}{ +\spadpaste{Polynomial(Integer) has Ring} +} +\xtc{ +Constructor \axiomType{List} never produces a ring. +}{ +\spadpaste{List(Integer) has Ring} +} +\xtc{ +The constructor \axiomType{Matrix(R)} builds ``the domain of all matrices +over the ring \axiom{R}.'' This domain is never a ring since the operations +\axiomSyntax{+}, \axiomSyntax{-}, and \axiomSyntax{*} on matrices of arbitrary +shapes are undefined. +}{ +\spadpaste{Matrix(Integer) has Ring} +} +\xtc{ +Thus you can never build polynomials over matrices. +}{ +\spadpaste{Polynomial(Matrix(Integer))} +} +\xtc{ +Use \axiomType{SquareMatrix(n,R)} instead. +For any positive integer \axiom{n}, it builds ``the ring of \axiom{n} by +\axiom{n} matrices over \axiom{R}.'' +}{ +\spadpaste{Polynomial(SquareMatrix(7,Complex(Integer)))} +} + +Another common category is \axiomType{Field}, the class of all fields. +A field is a ring with additional operations. +For example, a field has commutative multiplication and +a closed operation \axiomOpFrom{/}{Field} for the +division of two elements. +\axiomType{Integer} is not a field since, for example, \axiom{3/2} does not +have an integer result. +The prototypical example of a field is the rational numbers, that is, the +domain \axiomType{Fraction(Integer)}. +In general, the constructor \axiomType{Fraction} takes a ring as an +argument and returns a field.\footnote{Actually, +the argument domain must have some additional +properties so as to belong to category \axiomType{IntegralDomain}.} +Other domain constructors, such as \axiomType{Complex}, build fields only if +their argument domain is a field. + +\xtc{ +The complex integers (often called the ``Gaussian integers'') do not form +a field. +}{ +\spadpaste{Complex(Integer) has Field} +} +\xtc{ +But fractions of complex integers do. +}{ +\spadpaste{Fraction(Complex(Integer)) has Field} +} +\xtc{ +The algebraically equivalent domain of complex rational numbers is a field +since domain constructor \axiomType{Complex} produces a field whenever its +argument is a field. +}{ +\spadpaste{Complex(Fraction(Integer)) has Field} +} + +The most basic category is \axiomType{Type}. +It denotes the class of all domains and +subdomains.\footnote{\axiomType{Type} does not denote the class of +all types. +The type of all categories is \axiomType{Category}. +The type of \axiomType{Type} itself is undefined.} +Domain constructor \axiomType{List} is able to build ``lists of +elements from domain \axiom{D}'' for arbitrary \axiom{D} simply by +requiring that \axiom{D} belong to category \axiomType{Type}. + +Now, you may ask, what exactly is a category? +Like domains, categories can be defined in the Axiom language. +A category is defined by three components: +% +\indent{4} +\beginitems +\item[1. ] a name (for example, \axiomType{Ring}), +used to refer to the class of domains that the category represents; +\item[2. ] a set of operations, used to refer to the operations that +the domains of this class support +(for example, \axiomOp{+}, \axiomOp{-}, and \axiomOp{*} for rings); and +\item[3. ] an optional list of other categories that this category extends. +\enditems +\indent{0} +% +This last component is a new idea. +And it is key to the design of Axiom! +Because categories can extend one another, they form hierarchies. +\texht{Detailed charts showing the category hierarchies in Axiom are +displayed in the endpages of this book. +There you see that all categories are extensions of \axiomType{Type} and that +\axiomType{Field} is an extension of \axiomType{Ring}.}{} + +The operations supported by the domains of a category are called the +\spadglossSee{exports}{export} of that category because these are the +operations made available for system-wide use. +The exports of a domain of a given category are not only the ones +explicitly mentioned by the category. +Since a category extends other categories, the operations of these other +categories---and all categories these other categories extend---are also +exported by the domains. + +For example, polynomial domains belong to \axiomType{PolynomialCategory}. +This category explicitly mentions some twenty-nine +operations on polynomials, but it +extends eleven other categories (including \axiomType{Ring}). +As a result, the current system has over one hundred operations on polynomials. + +If a domain belongs to a category that extends, say, \axiomType{Ring}, it +is convenient to say that the domain exports \axiomType{Ring}. +The name of the category thus provides a convenient shorthand for the list +of operations exported by the category. +Rather than listing operations such as \axiomOpFrom{+}{Ring} and +\axiomOpFrom{*}{Ring} of \axiomType{Ring} each time they are needed, the +definition of a type simply asserts that it exports category +\axiomType{Ring}. + +The category name, however, is more than a shorthand. +The name \axiomType{Ring}, in fact, implies that the operations exported by +rings are required to satisfy a set of ``axioms'' associated with the name +\axiomType{Ring}.\footnote{This subtle +but important feature distinguishes Axiom from +other abstract datatype designs.} + +Why is it not correct to assume that some type is a ring if it exports all +of the operations of \axiomType{Ring}? +Here is why. +Some languages such as {\bf APL} +denote the \axiomType{Boolean} constants \axiom{true} and +\axiom{false} by the integers \axiom{1} and \axiom{0} +respectively, then use \axiomOp{+} and \axiomOp{*} to denote the +logical operators \axiomFun{or} and \axiomFun{and}. +But with these definitions +\axiomType{Boolean} is not a ring since the additive inverse +axiom is violated.\footnote{There is no inverse element \axiom{a} +such that \axiom{1 + a = 0}, or, in the usual terms: \axiom{true +or a = false}.} +This alternative definition of \axiomType{Boolean} can be easily +and correctly implemented in Axiom, since +\axiomType{Boolean} simply does not assert that it is of category +\axiomType{Ring}. +This prevents the system from building meaningless domains such as +\axiomType{Polynomial(Boolean)} and then wrongfully applying +algorithms that presume that the ring axioms hold. + + +Enough on categories. To learn more about them, see +\downlink{``\ugCategoriesTitle''}{ugCategoriesPage} +in Chapter \ugCategoriesNumber\ignore{ugCategories}. +We now return to our discussion of domains. + +Domains \spadgloss{export} a set of operations to make them +available for system-wide use. +\axiomType{Integer}, for example, exports the operations +\axiomOpFrom{+}{Integer} and \axiomOpFrom{=}{Integer} given by +the \spadglossSee{signatures}{signature} +\axiomOpFrom{+}{Integer}: \spadsig{(Integer,Integer)}{Integer} and +\axiomOpFrom{=}{Integer}: \spadsig{(Integer,Integer)}{Boolean}, +respectively. +Each of these operations takes two \axiomType{Integer} arguments. +The \axiomOpFrom{+}{Integer} operation also returns an \axiomType{Integer} but +\axiomOpFrom{=}{Integer} returns a \axiomType{Boolean}: \axiom{true} or +\axiom{false}. +The operations exported by a domain usually manipulate objects of +the domain---but not always. + +The operations of a domain may actually take as arguments, and return as +values, objects from any domain. +For example, \axiomType{Fraction (Integer)} exports the operations +\axiomOpFrom{/}{Fraction}: \spadsig{(Integer,Integer)}{Fraction(Integer)} +and \axiomFunFrom{characteristic}{Fraction}: +\spadsig{}{NonNegativeInteger}. + +Suppose all operations of a domain take as arguments and return +as values, only objects from {\it other} domains. +This kind of domain +is what Axiom calls a \spadgloss{package}. + +A package does not designate a class of objects at all. +Rather, a package is just a collection of operations. +Actually the bulk of the Axiom library of algorithms consists +of packages. +The facilities for factorization; integration; solution of linear, +polynomial, and differential equations; computation of limits; and so +on, are all defined in packages. +Domains needed by algorithms can be passed to a package as arguments or +used by name if they are not ``variable.'' +Packages are useful for defining operations that convert objects of one +type to another, particularly when these types have different +parameterizations. +As an example, the package \axiomType{PolynomialFunction2(R,S)} defines +operations that convert polynomials over a domain \axiom{R} to polynomials +over \axiom{S}. +To convert an object from \axiomType{Polynomial(Integer)} to +\axiomType{Polynomial(Float)}, Axiom builds the package +\axiomType{PolynomialFunctions2(Integer,Float)} in order to create the +required conversion function. +(This happens ``behind the scenes'' for you: see +\downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} +in Section \ugTypesConvertNumber\ignore{ugTypesConvert} +for details on how to convert objects.) + +Axiom categories, domains and packages and all their contained +functions are written in the Axiom programming language and have +been compiled into machine code. +This is what comprises the Axiom \spadgloss{library}. +In the rest of this book we show you how to use these domains and +their functions and how to write your own functions. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesWritingTitle}{Writing Types and Modes} +\newcommand{\ugTypesWritingNumber}{2.2.} + +@ +\section{Writing Types and Modes} +\label{ugTypesWritingPage} +\begin{itemize} +\item ugTypesBasicPage \ref{ugTypesBasicPage} on +page~\pageref{ugTypesBasicPage} +\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on +page~\pageref{ugTypesDeclarePage} +\item ugTypesConvertPage \ref{ugTypesConvertPage} on +page~\pageref{ugTypesConvertPage} +\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on +page~\pageref{ugTypesPkgCallPage} +\item ugTypesWritingZeroPage \ref{ugTypesWritingZeroPage} on +page~\pageref{ugTypesWritingZeroPage} +\item ugTypesWritingOnePage \ref{ugTypesWritingOnePage} on +page~\pageref{ugTypesWritingOnePage} +\item ugTypesWritingMorePage \ref{ugTypesWritingMorePage} on +page~\pageref{ugTypesWritingMorePage} +\item ugTypesWritingModesPage \ref{ugTypesWritingModesPage} on +page~\pageref{ugTypesWritingModesPage} +\item ugTypesWritingAbbrPage \ref{ugTypesWritingAbbrPage} on +page~\pageref{ugTypesWritingAbbrPage} +\end{itemize} +\index{pages!ugTypesWritingPage!ug02.ht} +\index{ug02.ht!pages!ugTypesWritingPage} +\index{ugTypesWritingPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesWritingPage}{2.2. Writing Types and Modes} +\beginscroll +% + +We have already seen in \texht{the last +section}{\downlink{``\ugTypesBasicTitle''}{ugTypesBasicPage} +in Section \ugTypesBasicNumber\ignore{ugTypesBasic}} several examples of types. +Most of these examples had either no arguments (for example, +\axiomType{Integer}) or one argument (for example, +\axiomType{Polynomial (Integer)}). +In this section we give details about writing arbitrary types. +We then define \spadglossSee{modes}{mode} and discuss how to write +them. +We conclude the section with a discussion on constructor +abbreviations. + +\xtc{ +When might you need to write a type or mode? +You need to do so when you declare variables. +}{ +\spadpaste{a : PositiveInteger} +} +\xtc{ +You need to do so when you declare functions +(\downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} +in Section \ugTypesDeclareNumber\ignore{ugTypesDeclare}), +}{ +\spadpaste{f : Integer -> String} +} +\xtc{ +You need to do so when you convert an object from one type to another +(\downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} +in Section \ugTypesConvertNumber\ignore{ugTypesConvert}). +}{ +\spadpaste{factor(2 :: Complex(Integer))} +} +\xtc{ +}{ +\spadpaste{(2 = 3)\$Integer} +} +\xtc{ +You need to do so when you give computation target type information +(\downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} +in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall}). +}{ +\spadpaste{(2 = 3)@Boolean} +} + +\beginmenu + \menudownlink{{2.2.1. Types with No Arguments}}{ugTypesWritingZeroPage} + \menudownlink{{2.2.2. Types with One Argument}}{ugTypesWritingOnePage} + \menudownlink{{2.2.3. Types with More Than One Argument}} +{ugTypesWritingMorePage} + \menudownlink{{2.2.4. Modes}}{ugTypesWritingModesPage} + \menudownlink{{2.2.5. Abbreviations}}{ugTypesWritingAbbrPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesWritingZeroTitle}{Types with No Arguments} +\newcommand{\ugTypesWritingZeroNumber}{2.2.1.} + +@ +\section{Types with No Arguments} +\label{ugTypesWritingZeroPage} +\index{pages!ugTypesWritingZeroPage!ug02.ht} +\index{ug02.ht!pages!ugTypesWritingZeroPage} +\index{ugTypesWritingZeroPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesWritingZeroPage}{2.2.1. Types with No Arguments} +\beginscroll + +A constructor with no arguments can be written either +with or without +trailing opening and closing parentheses (\axiomSyntax{()}). +\texht{ +\centerline{{\begin{tabular}{ccc}}} +\centerline{{\axiomType{Boolean()} is the same as \axiomType{Boolean} & \quad &}} +\centerline{{\axiomType{Integer()} is the same as \axiomType{Integer} }} +\centerline{{\axiomType{String()} is the same as \axiomType{String} & \quad &}} +\centerline{{\axiomType{Void()} is the same as \axiomType{Void} }} +\centerline{{\end{tabular}}} +}{ +\centerline{{\axiomType{Boolean()} is the same as \axiomType{Boolean} }} +\centerline{{\axiomType{Integer()} is the same as \axiomType{Integer} }} +\centerline{{\axiomType{String()} is the same as \axiomType{String} }} +\centerline{{\axiomType{Void()} is the same as \axiomType{Void} }} +and so on. +} +It is customary to omit the parentheses. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesWritingOneTitle}{Types with One Argument} +\newcommand{\ugTypesWritingOneNumber}{2.2.2.} + +@ +\section{Types with One Argument} +\label{ugTypesWritingOnePage} +\begin{itemize} +\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on +page~\pageref{ugTypesPkgCallPage} +\end{itemize} +\index{pages!ugTypesWritingOnePage!ug02.ht} +\index{ug02.ht!pages!ugTypesWritingOnePage} +\index{ugTypesWritingOnePage!ug02.ht!pages} +<>= +\begin{page}{ugTypesWritingOnePage}{2.2.2. Types with One Argument} +\beginscroll + +A constructor with one argument can frequently be +written with no +parentheses. +Types nest from right to left so that \axiomType{Complex Fraction +Polynomial Integer} is the same as +\axiomType{Complex (Fraction (Polynomial (Integer)))}. +You need to use parentheses to force the application of a constructor +to the correct argument, but you need not use any more than is +necessary to remove ambiguities. + +Here are some guidelines for using parentheses (they are possibly slightly +more restrictive than they need to be). +\xtc{ +If the argument is an expression like \axiom{2 + 3} +then you must enclose the argument in parentheses. +}{ +\spadpaste{e : PrimeField(2 + 3)} +} +% +\xtc{ +If the type is to be used with package calling +then you must enclose the argument in parentheses. +}{ +\spadpaste{content(2)\$Polynomial(Integer)} +} +\xtc{ +Alternatively, you can write the type without parentheses +then enclose the whole type expression with parentheses. +}{ +\spadpaste{content(2)\$(Polynomial Complex Fraction Integer)} +} +\xtc{ +If you supply computation target type information +(\downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} +in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall}) +then you should enclose the argument in parentheses. +}{ +\spadpaste{(2/3)@Fraction(Polynomial(Integer))} +} +% +\xtc{ +If the type itself has parentheses around it and we are +not in the case of the first example above, +then the parentheses can usually be omitted. +}{ +\spadpaste{(2/3)@Fraction(Polynomial Integer)} +} +% +\xtc{ +If the type is used in a declaration and the argument is a single-word +type, integer or symbol, +then the parentheses can usually be omitted. +}{ +\spadpaste{(d,f,g) : Complex Polynomial Integer} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesWritingMoreTitle}{Types with More Than One Argument} +\newcommand{\ugTypesWritingMoreNumber}{2.2.3.} + +@ +\section{Types with More Than One Argument} +\label{ugTypesWritingMorePage} +\index{pages!ugTypesWritingMorePage!ug02.ht} +\index{ug02.ht!pages!ugTypesWritingMorePage} +\index{ugTypesWritingMorePage!ug02.ht!pages} +<>= +\begin{page}{ugTypesWritingMorePage}{2.2.3. Types with More Than One Argument} +\beginscroll + +If a constructor +has more than +one argument, you must use parentheses. +Some examples are +\centerline{{\axiomType{UnivariatePolynomial(x, Float)} }} +\centerline{{\axiomType{MultivariatePolynomial([z,w,r], Complex Float)} }} +\centerline{{\axiomType{SquareMatrix(3, Integer)} }} +\centerline{{\axiomType{FactoredFunctions2(Integer,Fraction Integer)}}} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesWritingModesTitle}{Modes} +\newcommand{\ugTypesWritingModesNumber}{2.2.4.} + +@ +\section{Modes} +\label{ugTypesWritingModesPage} +\begin{itemize} +\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on +page~\pageref{ugTypesDeclarePage} +\item ugTypesConvertPage \ref{ugTypesConvertPage} on +page~\pageref{ugTypesConvertPage} +\end{itemize} +\index{pages!ugTypesWritingModesPage!ug02.ht} +\index{ug02.ht!pages!ugTypesWritingModesPage} +\index{ugTypesWritingModesPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesWritingModesPage}{2.2.4. Modes} +\beginscroll + +A \spadgloss{mode} is a type that possibly is a +question mark (\axiomSyntax{?}) or contains one in an argument +position. +For example, the following are all modes. +\texht{ +\centerline{{\begin{tabular}{ccc}}} +\centerline{{\axiomType{?} & \quad &}} +\centerline{{\axiomType{Polynomial ?} }} +\centerline{{\axiomType{Matrix Polynomial ?} & \quad &}} +\centerline{{\axiomType{SquareMatrix(3,?)} }} +\centerline{{\axiomType{Integer} & \quad &}} +\centerline{{\axiomType{OneDimensionalArray(Float)}}} +\centerline{{\end{tabular}}} +}{ +\centerline{{\axiomType{?} }} +\centerline{{\axiomType{Polynomial ?} }} +\centerline{{\axiomType{Matrix Polynomial ?} }} +\centerline{{\axiomType{SquareMatrix(3,?)} }} +\centerline{{\axiomType{Integer} }} +\centerline{{\axiomType{OneDimensionalArray(Float)}}} +} +As is evident from these examples, a mode is a type with a +part that is not specified (indicated by a question mark). +Only one \axiomSyntax{?} is allowed per mode and it must appear in the +most deeply nested argument that is a type. Thus +\nonLibAxiomType{?(Integer)}, +\nonLibAxiomType{Matrix(? (Polynomial))}, +\nonLibAxiomType{SquareMatrix(?, Integer)} and +\nonLibAxiomType{SquareMatrix(?, ?)} are all invalid. +The question mark must take the place of a domain, not data (for example, +the integer that is the dimension of a square matrix). +This rules out, for example, the two \axiomType{SquareMatrix} +expressions. + +Modes can be used for declarations +(\downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} +in Section \ugTypesDeclareNumber\ignore{ugTypesDeclare}) +and conversions +(\downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} +in Section \ugTypesConvertNumber\ignore{ugTypesConvert}). +However, you cannot use a mode for package calling or giving target +type information. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesWritingAbbrTitle}{Abbreviations} +\newcommand{\ugTypesWritingAbbrNumber}{2.2.5.} + +@ +\section{Abbreviations} +\label{ugTypesWritingAbbrPage} +\begin{itemize} +\item ugSysCmdwhatPage \ref{ugSysCmdwhatPage} on +page~\pageref{ugSysCmdwhatPage} +\end{itemize} +\index{pages!ugTypesWritingAbbrPage!ug02.ht} +\index{ug02.ht!pages!ugTypesWritingAbbrPage} +\index{ugTypesWritingAbbrPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesWritingAbbrPage}{2.2.5. Abbreviations} +\beginscroll + +Every constructor has an abbreviation that +you can freely +substitute for the constructor name. +In some cases, the abbreviation is nothing more than the +capitalized version of the constructor name. + +\beginImportant +Aside from allowing types to be written more concisely, +abbreviations are used by Axiom to name various system +files for constructors (such as library filenames, test input +files and example files). +Here are some common abbreviations. +\texht{}{\table{ +{\axiomType{COMPLEX} abbreviates \axiomType{Complex} } +{\axiomType{DFLOAT} abbreviates \axiomType{DoubleFloat} } +{\axiomType{EXPR} abbreviates \axiomType{Expression} } +{\axiomType{FLOAT} abbreviates \axiomType{Float} } +{\axiomType{FRAC} abbreviates \axiomType{Fraction} } +{\axiomType{INT} abbreviates \axiomType{Integer} } +{\axiomType{MATRIX} abbreviates \axiomType{Matrix} } +{\axiomType{NNI} abbreviates \axiomType{NonNegativeInteger} } +{\axiomType{PI} abbreviates \axiomType{PositiveInteger} } +{\axiomType{POLY} abbreviates \axiomType{Polynomial} } +{\axiomType{STRING} abbreviates \axiomType{String} } +{\axiomType{UP} abbreviates \axiomType{UnivariatePolynomial} } +}} +\endImportant + +You can combine both full constructor names and abbreviations +in a type expression. +Here are some types using abbreviations. +\centerline{{\axiomType{POLY INT} is the same as +\axiomType{Polynomial(INT)} }} +\centerline{{\axiomType{POLY(Integer)} is the same +as \axiomType{Polynomial(Integer)} }} +\centerline{{\axiomType{POLY(Integer)} is the same +as \axiomType{Polynomial(INT)} }} +\centerline{{\axiomType{FRAC(COMPLEX(INT))} is the +same as \axiomType{Fraction Complex Integer} }} +\centerline{{\axiomType{FRAC(COMPLEX(INT))} is the +same as \axiomType{FRAC(Complex Integer)} }} + +There are several ways of finding the names of constructors and +their abbreviations. +For a specific constructor, use \spadcmd{)abbreviation query}. +You can also use the \spadcmd{)what} system command to see the names +and abbreviations of constructors. +For more information about \spadcmd{)what}, see +\downlink{``\ugSysCmdwhatTitle''}{ugSysCmdwhatPage} +in Section \ugSysCmdwhatNumber\ignore{ugSysCmdwhat}. +\xtc{ +\spadcmd{)abbreviation query} can be +abbreviated (no pun intended) to \spadcmd{)abb q}. +}{ +\spadpaste{)abb q Integer} +} +\xtc{ +The \spadcmd{)abbreviation query} command lists +the constructor name if you give the abbreviation. +Issue \spadcmd{)abb q} if you want to see the names and abbreviations +of all Axiom constructors. +}{ +\spadpaste{)abb q DMP} +} +\xtc{ +Issue this to see all packages whose names contain the string ``ode''. +}{ +\spadpaste{)what packages ode} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesDeclareTitle}{Declarations} +\newcommand{\ugTypesDeclareNumber}{2.3.} + +@ +\section{Declarations} +\label{ugTypesDeclarePage} +\begin{itemize} +\item ugLangAssignPage \ref{ugLangAssignPage} on +page~\pageref{ugLangAssignPage} +\item ugUserDeclarePage \ref{ugUserDeclarePage} on +page~\pageref{ugUserDeclarePage} +\item ugTypesConvertPageugIntroAssignPage \ref{ugTypesConvertPageugIntroAssignPage} on +page~\pageref{ugTypesConvertPageugIntroAssignPage} +\end{itemize} +\index{pages!ugTypesDeclarePage!ug02.ht} +\index{ug02.ht!pages!ugTypesDeclarePage} +\index{ugTypesDeclarePage!ug02.ht!pages} +<>= +\begin{page}{ugTypesDeclarePage}{2.3. Declarations} +\beginscroll +% +A \spadgloss{declaration} is an expression used +to restrict the type of values that can be assigned to variables. +A colon (\axiomSyntax{:}) is always used after a variable or +list of variables to be declared. + +\beginImportant +For a single variable, the syntax for declaration is +\centerline{{{\it variableName \axiom{:} typeOrMode}}} +For multiple variables, the syntax is +\centerline{{{\tt (\subscriptIt{variableName}{1}, \subscriptIt{variableName}{2}, \ldots \subscriptIt{variableName}{N}): {\it typeOrMode}}}} +\endImportant + +You can always combine a declaration with an assignment. +When you do, it is equivalent to first giving a declaration statement, +then giving an assignment. +For more information on assignment, see +\downlink{``\ugIntroAssignTitle''}{ugIntroAssignPage} +in Section \ugIntroAssignNumber\ignore{ugIntroAssign} and +\downlink{``\ugLangAssignTitle''}{ugLangAssignPage} +in Section \ugLangAssignNumber\ignore{ugLangAssign}. +To see how to declare your own functions, see +\downlink{``\ugUserDeclareTitle''}{ugUserDeclarePage} +in Section \ugUserDeclareNumber\ignore{ugUserDeclare}. + +\xtc{ +This declares one variable to have a type. +}{ +\spadpaste{a : Integer \bound{a}} +} +\xtc{ +This declares several variables to have a type. +}{ +\spadpaste{(b,c) : Integer \bound{b c}} +} +\xtc{ +\axiom{a, b} and \axiom{c} can only hold integer values. +}{ +\spadpaste{a := 45 \free{a}} +} +\xtc{ +If a value cannot be converted to a declared type, +an error message is displayed. +}{ +\spadpaste{b := 4/5 \free{b}} +} +\xtc{ +This declares a variable with a mode. +}{ +\spadpaste{n : Complex ? \bound{n}} +} +\xtc{ +This declares several variables with a mode. +}{ +\spadpaste{(p,q,r) : Matrix Polynomial ? \bound{p q r}} +} +\xtc{ +This complex object has integer real and imaginary parts. +}{ +\spadpaste{n := -36 + 9 * \%i \free{n}} +} +\xtc{ +This complex object has fractional symbolic real and imaginary parts. +}{ +\spadpaste{n := complex(4/(x + y),y/x) \free{n}} +} +\xtc{ +This matrix has entries that are polynomials with integer +coefficients. +}{ +\spadpaste{p := [[1,2],[3,4],[5,6]] \free{p}} +} +\xtc{ +This matrix has a single entry that is a polynomial with +rational number coefficients. +}{ +\spadpaste{q := [[x - 2/3]] \free{q}} +} +\xtc{ +This matrix has entries that are polynomials with complex integer +coefficients. +}{ +\spadpaste{r := [[1-\%i*x,7*y+4*\%i]] \free{r}} +} +% +\xtc{ +Note the difference between this and the next example. +This is a complex object with polynomial real and imaginary parts. +}{ +\spadpaste{f : COMPLEX POLY ? := (x + y*\%i)**2} +} +\xtc{ +This is a polynomial with complex integer coefficients. +The objects are convertible from one to the other. +See \downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} +in Section \ugTypesConvertNumber\ignore{ugTypesConvert} for more information. +}{ +\spadpaste{g : POLY COMPLEX ? := (x + y*\%i)**2} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesRecordsTitle}{Records} +\newcommand{\ugTypesRecordsNumber}{2.4.} + +@ +\section{Records} +\label{ugTypesRecordsPage} +\index{pages!ugTypesRecordsPage!ug02.ht} +\index{ug02.ht!pages!ugTypesRecordsPage} +\index{ugTypesRecordsPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesRecordsPage}{2.4. Records} +\beginscroll +% +A \pspadtype{Record} is an object composed of one or more other objects, +each of which is referenced +with +a \spadgloss{selector}. +Components can all belong to the same type or each can have a different type. + +\beginImportant +The syntax for writing a \pspadtype{Record} type is +\centerline{{{\tt Record(\subscriptIt{selector}{1}:\subscriptIt{type}{1}, \subscriptIt{selector}{2}:\subscriptIt{type}{2}, \ldots, \subscriptIt{selector}{N}:\subscriptIt{type}{N})}}} +You must be careful if a selector has the same name as a variable in the +workspace. +If this occurs, precede the selector name by a single +quote. +\endImportant + +Record components are implicitly ordered. +All the components of a record can +be set at once by assigning the record a +bracketed \spadgloss{tuple} of values of the proper length +(for example, \axiom{r : Record(a: Integer, b: String) := [1, "two"]}). +To access a component of a record \axiom{r}, +write the name \axiom{r}, followed by a period, followed by a selector. + +% +\xtc{ +The object returned by this computation is a record with two components: a +\axiom{quotient} part and a \axiom{remainder} part. +}{ +\spadpaste{u := divide(5,2) \bound{u}} +} +% +\xtc{ +This is the quotient part. +}{ +\spadpaste{u.quotient \free{u}} +} +\xtc{ +This is the remainder part. +}{ +\spadpaste{u.remainder \free{u}} +} +% +\xtc{ +You can use selector expressions on the left-hand side of an assignment +to change destructively the components of a record. +}{ +\spadpaste{u.quotient := 8978 \free{u}\bound{u1}} +} +\xtc{ +The selected component \axiom{quotient} has the value \axiom{8978}, +which is what is returned by the assignment. +Check that the value of \axiom{u} was modified. +}{ +\spadpaste{u \free{u}\free{u1}} +} +\xtc{ +Selectors are evaluated. +Thus you can use variables that evaluate to selectors instead of the +selectors themselves. +}{ +\spadpaste{s := 'quotient \bound{s}} +} +\xtc{ +Be careful! +A selector could have the same name as a variable in the workspace. +If this occurs, precede the selector name by a single quote, as in +\axiom{u.'quotient}. +}{ +\spadpaste{divide(5,2).s \free{s}} +} +\xtc{ +Here we declare that the value of \axiom{bd} +has two components: a string, +to be accessed via \axiom{name}, and an integer, +to be accessed via \axiom{birthdayMonth}. +}{ +\spadpaste{bd : Record(name : String, birthdayMonth : Integer) \bound{bddec}} +} +\xtc{ +You must initially set the value of the entire \pspadtype{Record} +at once. +}{ +\spadpaste{bd := ["Judith", 3] \free{bddec}\bound{bd}} +} +\xtc{ +Once set, you can change any of the individual components. +}{ +\spadpaste{bd.name := "Katie" \free{bd}} +} +\xtc{ +Records may be nested and the selector names can be shared at +different levels. +}{ +\spadpaste{r : Record(a : Record(b: Integer, c: Integer), b: Integer) \bound{rdec}} +} +\xtc{ +The record \axiom{r} has a \axiom{b} selector at two different levels. +Here is an initial value for \axiom{r}. +}{ +\spadpaste{r := [[1,2],3] \bound{r}\free{rdec}} +} +\xtc{ +This extracts the \axiom{b} component from the \axiom{a} component of \axiom{r}. +}{ +\spadpaste{r.a.b \free{r}} +} +\xtc{ +This extracts the \axiom{b} component from \axiom{r}. +}{ +\spadpaste{r.b \free{r}} +} +% +\xtc{ +You can also use spaces or parentheses to refer to \pspadtype{Record} +components. +This is the same as \axiom{r.a}. +}{ +\spadpaste{r(a) \free{r}} +} +\xtc{ +This is the same as \axiom{r.b}. +}{ +\spadpaste{r b \free{r}} +} +\xtc{ +This is the same as \axiom{r.b := 10}. +}{ +\spadpaste{r(b) := 10 \free{r}\bound{r1}} +} +\xtc{ +Look at \axiom{r} to make sure it was modified. +}{ +\spadpaste{r \free{r1}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesUnionsTitle}{Unions} +\newcommand{\ugTypesUnionsNumber}{2.5.} + +@ +\section{Unions} +\label{ugTypesUnionsPage} +\begin{itemize} +\item ugTypesUnionsWOSelPage \ref{ugTypesUnionsWOSelPage} on +page~\pageref{ugTypesUnionsWOSelPage} +\item ugTypesUnionsWSelPage \ref{ugTypesUnionsWSelPage} on +page~\pageref{ugTypesUnionsWSelPage} +\end{itemize} +\index{pages!ugTypesUnionsPage!ug02.ht} +\index{ug02.ht!pages!ugTypesUnionsPage} +\index{ugTypesUnionsPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesUnionsPage}{2.5. Unions} +\beginscroll +% +Type \pspadtype{Union} is used for objects that +can be of any of a specific finite set of types. +Two versions of unions are available, +one with selectors (like records) and one without. + +\beginmenu + \menudownlink{{2.5.1. Unions Without Selectors}}{ugTypesUnionsWOSelPage} + \menudownlink{{2.5.2. Unions With Selectors}}{ugTypesUnionsWSelPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesUnionsWOSelTitle}{Unions Without Selectors} +\newcommand{\ugTypesUnionsWOSelNumber}{2.5.1.} + +@ +\section{Unions Without Selectors} +\label{ugTypesUnionsWOSelPage} +\index{pages!ugTypesUnionsWOSelPage!ug02.ht} +\index{ug02.ht!pages!ugTypesUnionsWOSelPage} +\index{ugTypesUnionsWOSelPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesUnionsWOSelPage}{2.5.1. Unions Without Selectors} +\beginscroll + +The declaration \axiom{x : Union(Integer, String, Float)} +states that \axiom{x} can have values that are integers, +strings or ``big'' floats. +If, for example, the \pspadtype{Union} object is an integer, the object is +said to belong to the \axiomType{Integer} {\it branch} +of the \pspadtype{Union}.\footnote{ +Note that we are being a bit careless with the language here. +Technically, the type of \axiom{x} is always +\pspadtype{Union(Integer, String, Float)}. +If it belongs to the \axiomType{Integer} branch, \axiom{x} +may be converted to an object of type \axiomType{Integer}.} + +\beginImportant +The syntax for writing a \pspadtype{Union} type without selectors is +\centerline{{{\tt Union(\subscriptIt{type}{1}, \subscriptIt{type}{2}, \ldots, \subscriptIt{type}{N})}}} +The types in a union without selectors must be distinct. +\endImportant + +It is possible to create unions like +\pspadtype{Union(Integer, PositiveInteger)} but they are +difficult to work with because of the overlap in the branch +types. +See below for the rules Axiom uses for converting something +into a union object. + +The \axiom{case} infix +\spadkey{case} +operator returns a \axiomType{Boolean} +and can be used to determine the branch in which an object lies. + +\xtc{ +This function displays a message stating in which +branch of the \pspadtype{Union} the object (defined as \axiom{x} +above) lies. +}{ +\begin{spadsrc}[\bound{sayBranch}] +sayBranch(x : Union(Integer,String,Float)) : Void == + output + x case Integer => "Integer branch" + x case String => "String branch" + "Float branch" +\end{spadsrc} +} +% +\xtc{ +This tries \userfun{sayBranch} with an integer. +}{ +\spadpaste{sayBranch 1 \free{sayBranch}} +} +\xtc{ +This tries \userfun{sayBranch} with a string. +}{ +\spadpaste{sayBranch "hello" \free{sayBranch}} +} +\xtc{ +This tries \userfun{sayBranch} with a floating-point number. +}{ +\spadpaste{sayBranch 2.718281828 \free{sayBranch}} +} +% + +There are two things of interest about this particular +example to which we would like to draw your attention. +\indent{4} +\beginitems +% +\item[1. ] Axiom normally converts a result to the target value +before passing it to the function. +If we left the declaration information out of this function definition +then the \axiom{sayBranch} call would have been attempted with an +\axiomType{Integer} rather than a \pspadtype{Union}, and an error would have +resulted. +% +\item[2. ] The types in a \pspadtype{Union} are searched in the order given. +So if the type were given as + +\noindent +{\small\axiom{sayBranch(x: Union(String,Integer,Float,Any)): Void}} + +\noindent +then the result would have been ``String branch'' because there +is a conversion from \axiomType{Integer} to \axiomType{String}. +\enditems +\indent{0} + +Sometimes \pspadtype{Union} types can have extremely +long names. +Axiom therefore abbreviates the names of unions by printing +the type of the branch first within the \pspadtype{Union} and then +eliding the remaining types with an ellipsis (\axiomSyntax{...}). + +\xtc{ +Here the \axiomType{Integer} branch is displayed first. +Use \axiomSyntax{::} to create a \pspadtype{Union} object from an object. +}{ +\spadpaste{78 :: Union(Integer,String)} +} +\xtc{ +Here the \axiomType{String} branch is displayed first. +}{ +\spadpaste{s := "string" :: Union(Integer,String) \bound{s}} +} +\xtc{ +Use \axiom{typeOf} to see the full and actual \pspadtype{Union} type. +\spadkey{typeOf} +}{ +\spadpaste{typeOf s} +} +\xtc{ +A common operation that returns a union is \axiomFunFrom{exquo}{Integer} +which returns the ``exact quotient'' if the quotient is exact,... +}{ +\spadpaste{three := exquo(6,2) \bound{three}} +} +\xtc{ +and \axiom{"failed"} if the quotient is not exact. +}{ +\spadpaste{exquo(5,2)} +} +\xtc{ +A union with a \axiom{"failed"} is frequently used to indicate the failure +or lack of applicability of an object. +As another example, assign an integer a variable \axiom{r} declared to be a +rational number. +}{ +\spadpaste{r: FRAC INT := 3 \bound{r}\bound{rdec}} +} +\xtc{ +The operation \axiomFunFrom{retractIfCan}{Fraction} tries to retract the +fraction to the underlying domain \axiomType{Integer}. +It produces a union object. +Here it succeeds. +}{ +\spadpaste{retractIfCan(r) \free{r}} +} +\xtc{ +Assign it a rational number. +}{ +\spadpaste{r := 3/2 \bound{r1}\free{rdec}} +} +\xtc{ +Here the retraction fails. +}{ +\spadpaste{retractIfCan(r) \free{r1}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesUnionsWSelTitle}{Unions With Selectors} +\newcommand{\ugTypesUnionsWSelNumber}{2.5.2.} + +@ +\section{Unions With Selectors} +\label{ugTypesUnionsWSelPage} +\begin{itemize} +\item ugTypesRecordsPage \ref{ugTypesRecordsPage} on +page~\pageref{ugTypesRecordsPage} +\item ugTypesUnionsWOSelPage \ref{ugTypesUnionsWOSelPage} on +page~\pageref{ugTypesUnionsWOSelPage} +\end{itemize} +\index{pages!ugTypesUnionsWSelPage!ug02.ht} +\index{ug02.ht!pages!ugTypesUnionsWSelPage} +\index{ugTypesUnionsWSelPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesUnionsWSelPage}{2.5.2. Unions With Selectors} +\beginscroll + +Like records ( +\downlink{``\ugTypesRecordsTitle''}{ugTypesRecordsPage} +in Section \ugTypesRecordsNumber\ignore{ugTypesRecords}), +you can write \pspadtype{Union} types +with selectors. + +\beginImportant +The syntax for writing a \pspadtype{Union} type with selectors is +\centerline{{{\tt Union(\subscriptIt{selector}{1}:\subscriptIt{type}{1}, \subscriptIt{selector}{2}:\subscriptIt{type}{2}, \ldots, \subscriptIt{selector}{N}:\subscriptIt{type}{N})}}} +You must be careful if a selector has the same name as a variable in the +workspace. +If this occurs, precede the selector name by a single +quote. +It is an error to use a selector that does not correspond to the branch of +the \pspadtype{Union} in which the element actually lies. +\endImportant + +Be sure to understand the difference between records and unions +with selectors. +Records can have more than one component and the selectors are +used to refer to the components. +Unions always have one component but the type of that one +component can vary. +An object of type \pspadtype{Record(a: Integer, b: Float, c: +String)} contains an integer {\it and} a float {\it and} a +string. +An object of type \pspadtype{Union(a: Integer, b: Float, c: +String)} contains an integer {\it or} a float {\it or} a +string. + +Here is a version of the \userfun{sayBranch} function (cf. +\downlink{``\ugTypesUnionsWOSelTitle''}{ugTypesUnionsWOSelPage} +in Section \ugTypesUnionsWOSelNumber\ignore{ugTypesUnionsWOSel}) +that works with a union with selectors. +It displays a message stating in which branch of the \pspadtype{Union} the +object lies. +\begin{verbatim} +sayBranch(x:Union(i:Integer,s:String,f:Float)):Void== + output + x case i => "Integer branch" + x case s => "String branch" + "Float branch" +\end{verbatim} +Note that \axiom{case} uses the selector name as its right-hand argument. +\spadkey{case} +If you accidentally use the branch type on the right-hand side of +\axiom{case}, \axiom{false} will be returned. + +\xtc{ +Declare variable \axiom{u} to have a union type with selectors. +}{ +\spadpaste{u : Union(i : Integer, s : String) \bound{undec}} +} +\xtc{ +Give an initial value to \axiom{u}. +}{ +\spadpaste{u := "good morning" \bound{u}\free{undec}} +} +\xtc{ +Use \axiom{case} to determine in which +branch of a \pspadtype{Union} an object lies. +}{ +\spadpaste{u case i \free{u}} +} +\xtc{ +}{ +\spadpaste{u case s \free{u}} +} +\xtc{ +To access the element in a particular branch, use the selector. +}{ +\spadpaste{u.s \free{u}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesAnyNoneTitle}{The ``Any'' Domain} +\newcommand{\ugTypesAnyNoneNumber}{2.6.} + +@ +\section{The ``Any'' Domain} +\label{ugTypesAnyNonePage} +\index{pages!ugTypesAnyNonePage!ug02.ht} +\index{ug02.ht!pages!ugTypesAnyNonePage} +\index{ugTypesAnyNonePage!ug02.ht!pages} +<>= +\begin{page}{ugTypesAnyNonePage}{2.6. The ``Any'' Domain} +\beginscroll + +With the exception of objects of type \pspadtype{Record}, all Axiom +data structures are homogenous, that is, they hold objects all of the same +type. +If you need to get around this, you can use type \axiomType{Any}. +Using \axiomType{Any}, for example, you can create lists whose +elements are integers, rational numbers, strings, and even other lists. + +\xtc{ +Declare \axiom{u} to have type \axiomType{Any}. +}{ +\spadpaste{u: Any\bound{uany}} +} +\xtc{ +Assign a list of mixed type values to \axiom{u} +}{ +\spadpaste{u := [1, 7.2, 3/2, x**2, "wally"]\free{uany}\bound{u}} +} +\xtc{ +When we ask for the elements, Axiom displays these types. +}{ +\spadpaste{u.1 \free{u}} +} +\xtc{ +Actually, these objects belong to \axiomType{Any} but Axiom +automatically converts them to their natural types for you. +}{ +\spadpaste{u.3 \free{u}} +} +\xtc{ +Since type \axiomType{Any} can be anything, +it can only belong to type \axiomType{Type}. +Therefore it cannot be used in algebraic domains. +}{ +\spadpaste{v : Matrix(Any)} +} + +Perhaps you are wondering how Axiom internally represents +objects of type \axiomType{Any}. +An object of type \axiomType{Any} consists not only a data part +representing its normal value, but also a type part (a {\it badge}) giving +its type. +For example, the value \axiom{1} of type \axiomType{PositiveInteger} as an +object of type \axiomType{Any} internally looks like +\axiom{[1,\axiomType{PositiveInteger()}]}. + +%When should you use \axiomType{Any} instead of a \pspadtype{Union} type? +%Can you plan ahead? +%For a \pspadtype{Union}, you must know in advance exactly which types you +%are +%\index{union!vs. Any@{vs. \protect\nonLibAxiomType{Any}}} +%going to allow. +%For \axiomType{Any}, anything that comes along can be accommodated. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesConvertTitle}{Conversion} +\newcommand{\ugTypesConvertNumber}{2.7.} + +@ +\section{Conversion} +\label{ugTypesConvertPage} +\begin{itemize} +\item ugTypesBasicPage \ref{ugTypesBasicPage} on +page~\pageref{ugTypesBasicPage} +\end{itemize} +\index{pages!ugTypesConvertPage!ug02.ht} +\index{ug02.ht!pages!ugTypesConvertPage} +\index{ugTypesConvertPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesConvertPage}{2.7. Conversion} +\beginscroll +% +\beginImportant +\spadglossSee{Conversion}{conversion} +is the process of changing an object of one type +into an object of another type. +The syntax for conversion is: +\centerline{{{\it object} {\tt ::} {\it newType}}} +\endImportant + +\xtc{ +By default, \axiom{3} has the type \axiomType{PositiveInteger}. +}{ +\spadpaste{3} +} +\xtc{ +We can change this into an object of type \axiomType{Fraction Integer} +by using \axiomSyntax{::}. +}{ +\spadpaste{3 :: Fraction Integer} +} + +A \spadgloss{coercion} is a special kind of conversion that Axiom is +allowed to do automatically when you enter an expression. +Coercions are usually somewhat safer than more general conversions. +The Axiom library contains operations called +\axiomFun{coerce} and \axiomFun{convert}. +Only the \axiomFun{coerce} operations can be used by the +interpreter to change an object into an object of another type unless +you explicitly use a \axiomSyntax{::}. + +By now you will be quite familiar with what types and modes look like. +It is useful to think of a type or mode as a pattern +for what you want the result to be. +\xtc{ +Let's start with a square matrix of polynomials with complex rational number +coefficients. +}{ +\spadpaste{m : SquareMatrix(2,POLY COMPLEX FRAC INT) \bound{mdec}} +} +\xtc{ +}{ +\spadpaste{m := matrix [[x-3/4*\%i,z*y**2+1/2],[3/7*\%i*y**4 - x,12-\%i*9/5]] \bound{m}\free{mdec}} +} +\xtc{ +We first want to interchange the \axiomType{Complex} and +\axiomType{Fraction} layers. +We do the conversion by doing the interchange in the type expression. +}{ +\spadpaste{m1 := m :: SquareMatrix(2,POLY FRAC COMPLEX INT) \free{m}\bound{m1}} +} +\xtc{ +Interchange the \axiomType{Polynomial} and the +\axiomType{Fraction} levels. +}{ +\spadpaste{m2 := m1 :: SquareMatrix(2,FRAC POLY COMPLEX INT) \free{m1}\bound{m2}} +} +\xtc{ +Interchange the \axiomType{Polynomial} and the +\axiomType{Complex} levels. +}{ +\spadpaste{m3 := m2 :: SquareMatrix(2,FRAC COMPLEX POLY INT) \free{m2}\bound{m3}} +} + +All the entries have changed types, although in comparing the +last two results only the entry in the lower left corner looks different. +We did all the intermediate steps to show you what Axiom can do. + +\xtc{ +In fact, we could have combined all these into one conversion. +}{ +\spadpaste{m :: SquareMatrix(2,FRAC COMPLEX POLY INT) \free{m}} +} + +There are times when Axiom is not be able to do the conversion +in one step. +You may need to break up the transformation into several conversions +in order to get an object of the desired type. + +We cannot move either \axiomType{Fraction} or \axiomType{Complex} +above (or to the left of, depending on how you look at it) +\axiomType{SquareMatrix} because each of these levels requires that its +argument type have commutative multiplication, whereas +\axiomType{SquareMatrix} does not.\footnote{\axiomType{Fraction} requires +that its argument belong to the category \axiomType{IntegralDomain} and +\axiomType{Complex} requires that its argument belong to +\axiomType{CommutativeRing}. See +\downlink{``\ugTypesBasicTitle''}{ugTypesBasicPage} +in Section \ugTypesBasicNumber\ignore{ugTypesBasic} +for a brief discussion of categories.} +The \axiomType{Integer} level did not move anywhere +because it does not allow any arguments. +We also did not move the \axiomType{SquareMatrix} part anywhere, but +we could have. +\xtc{ +Recall that \axiom{m} looks like this. +}{ +\spadpaste{m \free{m}} +} +\xtc{ +If we want a polynomial with matrix coefficients rather than a matrix +with polynomial entries, we can just do the conversion. +}{ +\spadpaste{m :: POLY SquareMatrix(2,COMPLEX FRAC INT) \free{m}} +} +\xtc{ +We have not yet used modes for any conversions. +Modes are a great shorthand for indicating the type of the +object you want. +Instead of using the long type expression in the +last example, we could have simply said this. +}{ +\spadpaste{m :: POLY ? \free{m}} +} +\xtc{ +We can also indicate more structure if we want the entries +of the matrices to be fractions. +}{ +\spadpaste{m :: POLY SquareMatrix(2,FRAC ?) \free{m}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesSubdomainsTitle}{Subdomains Again} +\newcommand{\ugTypesSubdomainsNumber}{2.8.} + +@ +\section{Subdomains Again} +\label{ugTypesSubdomainsPage} +\index{pages!ugTypesSubdomainsPage!ug02.ht} +\index{ug02.ht!pages!ugTypesSubdomainsPage} +\index{ugTypesSubdomainsPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesSubdomainsPage}{2.8. Subdomains Again} +\beginscroll + +A \spadgloss{subdomain} \axiom{S} of a domain \axiom{D} is a domain +consisting of +\indent{4} +\beginitems +\item[1. ] those elements of \axiom{D} that satisfy some +\spadgloss{predicate} (that is, a test that returns \axiom{true} or +\axiom{false}) and +\item[2. ] a subset of the operations of \axiom{D}. +\enditems +\indent{0} +Every domain is a subdomain of itself, trivially satisfying the +membership test: \axiom{true}. + +Currently, there are only two system-defined subdomains in Axiom that receive +substantial use. +\axiomType{PositiveInteger} and +\axiomType{NonNegativeInteger} are subdomains of \axiomType{Integer}. +An element \axiom{x} of \axiomType{NonNegativeInteger} is an integer +that is greater than or equal to zero, that is, satisfies +\axiom{x >= 0.} +An element \axiom{x} of \axiomType{PositiveInteger} is a nonnegative integer +that is, in fact, greater than zero, that is, satisfies \axiom{x > 0.} +Not all operations from \axiomType{Integer} are available for these +subdomains. +For example, negation and subtraction are not provided since the subdomains +are not closed under those operations. +When you use an integer in an expression, Axiom assigns to it the +type that is the most specific subdomain whose predicate is satisfied. +\xtc{ +This is a positive integer. +}{ +\spadpaste{5} +} +\xtc{ +This is a nonnegative integer. +}{ +\spadpaste{0} +} +\xtc{ +This is neither of the above. +}{ +\spadpaste{-5} +} +\xtc{ +Furthermore, unless you are assigning an integer to a declared variable +or using a conversion, any integer result has as type the most +specific subdomain. +}{ +\spadpaste{(-2) - (-3)} +} +\xtc{ +}{ +\spadpaste{0 :: Integer} +} +\xtc{ +}{ +\spadpaste{x : NonNegativeInteger := 5} +} + +When necessary, Axiom converts an integer object into one belonging +to a less specific subdomain. +For example, in \axiom{3-2}, the arguments to \axiomOpFrom{-}{Integer} are both +elements of \axiomType{PositiveInteger}, but this type does not provide +a subtraction operation. +Neither does \axiomType{NonNegativeInteger}, so \axiom{3} and \axiom{2} +are viewed as elements of \axiomType{Integer}, where their difference +can be calculated. +The result is \axiom{1}, which Axiom then automatically assigns +the type \axiomType{PositiveInteger}. + +\xtc{ +Certain operations are very sensitive to the subdomains to which their +arguments belong. +This is an element of \axiomType{PositiveInteger}. +}{ +\spadpaste{2 ** 2} +} +\xtc{ +This is an element of \axiomType{Fraction Integer}. +}{ +\spadpaste{2 ** (-2)} +} +\xtc{ +It makes sense then that this +is a list of elements of \axiomType{PositiveInteger}. +}{ +\spadpaste{[10**i for i in 2..5]} +} +What should the type of \axiom{[10**(i-1) for i in 2..5]} be? +On one hand, \axiom{i-1} is always an integer greater than zero +as \axiom{i} ranges from \axiom{2} to \axiom{5} and so \axiom{10**i} +is also always a positive integer. +On the other, \axiom{i-1} is a very simple function of \axiom{i}. +Axiom does not try to analyze every such function over the +index's range of values to determine whether it is always positive +or nowhere negative. +For an arbitrary Axiom function, this analysis is not possible. + +\xtc{ +So, to be consistent no such analysis is done and we get this. +}{ +\spadpaste{[10**(i-1) for i in 2..5]} +} +\xtc{ +To get a list of elements of \axiomType{PositiveInteger} instead, you +have two choices. +You can use a conversion. +}{ +\spadpaste{[10**((i-1) :: PI) for i in 2..5]} +} +\xtc{ +Or you can use \axiom{pretend}. +\spadkey{pretend} +}{ +\spadpaste{[10**((i-1) pretend PI) for i in 2..5]} +} + +The operation \axiom{pretend} is used to defeat the Axiom +type system. +The expression \axiom{object pretend D} means ``make a new object +(without copying) of type \axiom{D} from \axiom{object}.'' +If \axiom{object} were an integer and you told Axiom +to pretend it was a list, you would probably see a message about a +fatal error being caught and memory possibly being damaged. +Lists do not have the same internal representation as integers! + +You use \axiom{pretend} at your peril. + +\xtc{ +Use \axiom{pretend} with great care! +Axiom trusts you that the value is of the specified type. +}{ +\spadpaste{(2/3) pretend Complex Integer} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesPkgCallTitle}{Package Calling and Target Types} +\newcommand{\ugTypesPkgCallNumber}{2.9.} + +@ +\section{Package Calling and Target Types} +\label{ugTypesPkgCallPage} +\begin{itemize} +\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on +page~\pageref{ugTypesDeclarePage} +\item ugUserUsePage \ref{ugUserUsePage} on +page~\pageref{ugUserUsePage} +\end{itemize} +\index{pages!ugTypesPkgCallPage!ug02.ht} +\index{ug02.ht!pages!ugTypesPkgCallPage} +\index{ugTypesPkgCallPage!ug02.ht!pages} +<>= +\begin{page}{ugTypesPkgCallPage}{2.9. Package Calling and Target Types} +\beginscroll + +Axiom works hard to figure out what you mean by an +expression without your having to qualify it with type +information. +Nevertheless, there are times when you need to help it along by +providing hints (or even orders!) to get Axiom to do what +you want. + +We saw in \downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} +in Section \ugTypesDeclareNumber\ignore{ugTypesDeclare} that +declarations using types +and modes control the type of the results produced. +For example, we can either produce a complex object with +polynomial real and imaginary parts or a polynomial with complex +integer coefficients, depending on the declaration. + +\spadglossSee{Package calling}{package call} is how you tell +Axiom to use a particular function from a particular part of +the library. + +\xtc{ +Use the \axiomOpFrom{/}{Fraction} from \axiomType{Fraction Integer} +to create a fraction of two integers. +}{ +\spadpaste{2/3} +} +\xtc{ +If we wanted a floating point number, we can say ``use the +\axiomOpFrom{/}{Float} in \axiomType{Float}.'' +}{ +\spadpaste{(2/3)\$Float} +} +\xtc{ +Perhaps we actually wanted a fraction of complex integers. +}{ +\spadpaste{(2/3)\$Fraction(Complex Integer)} +} + +In each case, Axiom used the indicated operations, sometimes +first needing to convert the two integers into objects of an +appropriate type. +In these examples, \axiomOpFrom{/}{Fraction} is written as an +infix operator. + +\beginImportant +To use package calling with an infix operator, use the +following syntax: +\centerline{{{\tt ( \subscriptIt{arg}{1} {\it op} \subscriptIt{arg}{1} )\${\it type} }}} +\endImportant + +We used, for example, \axiom{(2/3)\$Float}. +The expression \axiom{2 + 3 + 4} is equivalent to \axiom{(2+3) + 4.} +Therefore in the expression +\axiom{(2 + 3 + 4)\$Float} the second +\axiomOp{+} comes from the \axiomType{Float} domain. +Can you guess whether the first \axiomOp{+} comes from +\axiomType{Integer} or \axiomType{Float}?\footnote{\axiomType{Float}, +because the package call causes Axiom to convert +\axiom{(2 + 3)} and \axiom{4} to type \axiomType{Float}. +Before the sum is converted, it is given a target type (see below) of +\axiomType{Float} by Axiom and then evaluated. +The target type causes the \axiomOp{+} from \axiomType{Float} to be used.} + +\beginImportant +For an operator written before its arguments, you must use +parentheses around the arguments (even if there is only one), +and follow the closing parenthesis by a \axiomSyntax{\$} +and then the type. +\centerline{{{\tt {\it fun} ( \subscriptIt{arg}{1}, \subscriptIt{arg}{1}, \ldots, \subscriptIt{arg}{N} )\${\it type}}}} +\endImportant + +For example, to call the ``minimum'' function from \axiomType{DoubleFloat} +on two integers, you could write \axiom{min(4,89)\$DoubleFloat}. +Another use of package calling is to tell Axiom to use a library +function rather than a function you defined. +We discuss this in \downlink{``\ugUserUseTitle''}{ugUserUsePage} +in Section \ugUserUseNumber\ignore{ugUserUse}. + +Sometimes rather than specifying where an operation comes from, you just +want to say what type the result should be. +We say that you provide +a +\spadglossSee{target type}{target} for the expression. +Instead of using a \axiomSyntax{\$}, use a \axiomSyntax{@} to specify +the requested target type. +Otherwise, the syntax is the same. +Note that giving a target type is not the same as explicitly doing a +conversion. +The first says ``try to pick operations so that the result has +such-and-such a type.'' +The second says ``compute the result and then convert to an object of +such-and-such a type.'' + +\xtc{ +Sometimes it makes sense, as in this expression, +to say ``choose the operations in this expression so that +the final result is a \axiomType{Float}.'' +}{ +\spadpaste{(2/3)@Float} +} + +Here we used \axiomSyntax{@} to say that the target type of the +left-hand side was \axiomType{Float}. +In this simple case, there was no real difference +between using \axiomSyntax{\$} and \axiomSyntax{@}. +You can see the difference if you try the following. +\xtc{ +This says to try to choose \axiomOp{+} so that the result is +a string. +Axiom cannot do this. +}{ +\spadpaste{(2 + 3)@String} +} +\xtc{ +This says to get the \axiomOp{+} from \axiomType{String} and apply +it to the two integers. +Axiom also cannot do this because there is no \axiomOp{+} +exported by \axiomType{String}. +}{ +\spadpaste{(2 + 3)\$String} +} +(By the way, the operation \axiomFunFrom{concat}{String} or juxtaposition +is used to concatenate two strings.) + +When we have more than one operation in an expression, the +difference is even more evident. +The following two expressions show that Axiom uses the +target type to create different objects. +The \axiomOp{+}, \axiomOp{*} and \axiomOp{**} operations are all +chosen so that an object of the correct final type is created. + +\xtc{ +This says that the operations should be chosen so +that the result is a \axiomType{Complex} object. +}{ +\spadpaste{((x + y * \%i)**2)@(Complex Polynomial Integer)} +} +\xtc{ +This says that the operations should be chosen so +that the result is a \axiomType{Polynomial} object. +}{ +\spadpaste{((x + y * \%i)**2)@(Polynomial Complex Integer)} +} +\xtc{ +What do you think might happen if we left off all +target type and package call information in this last example? +}{ +\spadpaste{(x + y * \%i)**2 \bound{prevC}} +} +\xtc{ +We can convert it to \axiomType{Complex} as an afterthought. +But this is more work than just saying making what we want in the first +place. +}{ +\spadpaste{\% :: Complex ? \free{prevC}} +} + +Finally, another use of package calling is to qualify fully an +operation that is passed as an argument to a function. + +\xtc{ +Start with a small matrix of integers. +}{ +\spadpaste{h := matrix [[8,6],[-4,9]] \bound{h}} +} +% +\xtc{ +We want to produce a new matrix that has for entries the multiplicative +inverses of the entries of \axiom{h}. +One way to do this is by calling +\axiomFunFrom{map}{MatrixCategoryFunctions2} with the +\axiomFunFrom{inv}{Fraction} function from \axiomType{Fraction (Integer)}. +}{ +\spadpaste{map(inv\$Fraction(Integer),h) \free{h}} +} +\xtc{ +We could have been a bit less verbose and used abbreviations. +}{ +\spadpaste{map(inv\$FRAC(INT),h) \free{h}\bound{h1}} +} +% +\xtc{ +As it turns out, Axiom is smart enough to know what we mean +anyway. +We can just say this. +}{ +\spadpaste{map(inv,h) \free{h}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesResolveTitle}{Resolving Types} +\newcommand{\ugTypesResolveNumber}{2.10.} + +@ +\section{Resolving Types} +\label{ugTypesResolvePage} +\index{pages!ugTypesResolvePage!ug02.ht} +\index{ug02.ht!pages!ugTypesResolvePage} +\index{ugTypesResolvePage!ug02.ht!pages} +<>= +\begin{page}{ugTypesResolvePage}{2.10. Resolving Types} +\beginscroll + +In this section we briefly describe an internal process by which +Axiom determines a type to which two objects of possibly +different types can be converted. +We do this to give you further insight into how Axiom takes +your input, analyzes it, and produces a result. + +What happens when you enter \axiom{x + 1} to Axiom? +Let's look at what you get from the two terms of this expression. + +\xtc{ +This is a symbolic object whose type indicates the name. +}{ +\spadpaste{x} +} +\xtc{ +This is a positive integer. +}{ +\spadpaste{1} +} + +There are no operations in \axiomType{PositiveInteger} that add +positive integers to objects of type \axiomType{Variable(x)} nor +are there any in \axiomType{Variable(x)}. +Before it can add the two parts, Axiom must come up with +a common type to which both \axiom{x} and \axiom{1} can be +converted. +We say that Axiom must {\it resolve} the two types +into a common type. +In this example, the common type is \axiomType{Polynomial(Integer)}. + +\xtc{ +Once this is determined, both parts are converted into polynomials, +and the addition operation from \axiomType{Polynomial(Integer)} is used to +get the answer. +}{ +\spadpaste{x + 1} +} +\xtc{ +Axiom can always resolve two types: if nothing resembling +the original types can be found, then \axiomType{Any} is be used. +This is fine and useful in some cases. +}{ +\spadpaste{["string",3.14159]} +} +\xtc{ +In other cases objects of type \axiomType{Any} can't be used +by the operations you specified. +}{ +\spadpaste{"string" + 3.14159} +} +Although this example was contrived, your expressions may need +to be qualified slightly to help Axiom resolve the +types involved. +You may need to declare a few variables, do some package calling, +provide some target type information or do some explicit +conversions. + +We suggest that you just enter the expression you want evaluated and +see what Axiom does. +We think you will be impressed with its ability to ``do what I +mean.'' +If Axiom is still being obtuse, give it some hints. +As you work with Axiom, you will learn where it needs a +little help to analyze quickly and perform your computations. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugTypesExposeTitle}{Exposing Domains and Packages} +\newcommand{\ugTypesExposeNumber}{2.11.} + +@ +\section{Exposing Domains and Packages} +\label{ugTypesExposePage} +\begin{itemize} +\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on +page~\pageref{ugTypesPkgCallPage} +\item ugUserTrianglePage \ref{ugUserTrianglePage} on +page~\pageref{ugUserTrianglePage} +\item ugSysCmdframePage \ref{ugSysCmdframePage} on +page~\pageref{ugSysCmdframePage} +\end{itemize} +\index{pages!ugTypesExposePage!ug02.ht} +\index{ug02.ht!pages!ugTypesExposePage} +\index{ugTypesExposePage!ug02.ht!pages} +<>= +\begin{page}{ugTypesExposePage}{2.11. Exposing Domains and Packages} +\beginscroll + +In this section we discuss how Axiom makes some operations +available to you while hiding others that are meant to be used by +developers or only in rare cases. +If you are a new user of Axiom, it is likely that everything +you need is available by default and you may want +to skip over this section on first reading. + +Every +domain and package in the Axiom library +is +either +\spadglossSee{exposed}{expose} (meaning that you can use its +operations without doing +anything special) or it is {\it hidden} (meaning you have to either +package call +(see \downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} +in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall}) +the operations it contains or explicitly expose it to use the +operations). +The initial exposure status for a constructor is set in the +file {\bf exposed.lsp} (see the {\it Installer's Note} +for Axiom +if you need to know the location of this file). +Constructors are collected together in +{\it exposure groups}. +Categories are all in the exposure group ``categories'' and the +bulk of the basic set of packages and domains that are exposed +are in the exposure group ``basic.'' +Here is an abbreviated sample of the file (without the Lisp parentheses): +\begin{verbatim} +basic + AlgebraicNumber AN + AlgebraGivenByStructuralConstants ALGSC + Any ANY + AnyFunctions1 ANY1 + BinaryExpansion BINARY + Boolean BOOLEAN + CardinalNumber CARD + CartesianTensor CARTEN + Character CHAR + CharacterClass CCLASS + CliffordAlgebra CLIF + Color COLOR + Complex COMPLEX + ContinuedFraction CONTFRAC + DecimalExpansion DECIMAL + ... +\end{verbatim} +\begin{verbatim} +categories + AbelianGroup ABELGRP + AbelianMonoid ABELMON + AbelianMonoidRing AMR + AbelianSemiGroup ABELSG + Aggregate AGG + Algebra ALGEBRA + AlgebraicallyClosedField ACF + AlgebraicallyClosedFunctionSpace ACFS + ArcHyperbolicFunctionCategory AHYP + ... +\end{verbatim} +For each constructor in a group, the full name and the abbreviation +is given. +There are other groups in {\bf exposed.lsp} but initially only the +constructors in exposure groups ``basic'' ``categories'' ``naglink'' +and ``anna'' are exposed. + +As an interactive user of Axiom, you do not need to modify +this file. +Instead, use \spadcmd{)set expose} to expose, hide or query the exposure +status of an individual constructor or exposure group. +The reason for having exposure groups is to be able to expose or hide +multiple constructors with a single command. +For example, you might group together into exposure group ``quantum'' a +number of domains and packages useful for quantum mechanical computations. +These probably should not be available to every user, but you want an easy +way to make the whole collection visible to Axiom when it is looking +for operations to apply. + +If you wanted to hide all the basic constructors available by default, you +would issue \spadcmd{)set expose drop group basic}. +If, however, you discover that you have hidden all the basic constructors, +you should issue \spadcmd{)set expose add group basic} to restore your +default environment. + +It is more likely that you would want to expose or hide individual +constructors. +In \downlink{``\ugUserTriangleTitle''}{ugUserTrianglePage} +in Section \ugUserTriangleNumber\ignore{ugUserTriangle} we +use several operations from +\axiomType{OutputForm}, a domain usually hidden. +To avoid package calling every operation from \axiomType{OutputForm}, we +expose the domain and let Axiom conclude that those operations should +be used. +Use \spadcmd{)set expose add constructor} and \spadcmd{)set expose drop +constructor} to expose and hide a constructor, respectively. +You should use the constructor name, not the abbreviation. +The \spadcmd{)set expose} command guides you through these options. + +If you expose a previously hidden constructor, Axiom +exhibits new behavior (that was your intention) though you might not +expect the results that you get. +\axiomType{OutputForm} is, in fact, one of the worst offenders in this +regard. +This domain is meant to be used by other domains for creating a +structure that Axiom knows how to display. +It has functions like \axiomOpFrom{+}{OutputForm} that form output +representations rather than do mathematical calculations. +Because of the order in which Axiom looks at constructors +when it is deciding what operation to apply, \axiomType{OutputForm} +might be used instead of what you expect. +\xtc{ +This is a polynomial. +}{ +\spadpaste{x + x} +} +\xtc{ +Expose \axiomType{OutputForm}. +}{ +\spadpaste{)set expose add constructor OutputForm \bound{setexposeadd}} +} +\xtc{ +This is what we get when \axiomType{OutputForm} is automatically +available. +}{ +\spadpaste{x + x \free{setexposeadd}} +} +\xtc{ +Hide \axiomType{OutputForm} so we don't run into problems +with any later examples! +}{ +\spadpaste{)set expose drop constructor OutputForm \bound{setexposedrop}} +} + +Finally, exposure is done on a frame-by-frame basis. +A \spadgloss{frame} (see +\downlink{``\ugSysCmdframeTitle''}{ugSysCmdframePage} +in Section \ugSysCmdframeNumber\ignore{ugSysCmdframe}) +is one of possibly several +logical Axiom workspaces within a physical one, each having +its own environment (for example, variables and function definitions). +If you have several Axiom workspace windows on your screen, they +are all different frames, automatically created for you by \HyperName{}. +Frames can be manually created, made active and destroyed by the +\spadcmd{)frame} system command. +They do not share exposure information, so you need to use +\spadcmd{)set expose} in each one to add or drop constructors from view. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugAvailSnoopTitle}{Commands for Snooping} +\newcommand{\ugAvailSnoopNumber}{2.12.} + +@ +\section{Commands for Snooping} +\label{ugAvailSnoopPage} +\begin{itemize} +\item ugBrowsePage \ref{ugBrowsePage} on +page~\pageref{ugBrowsePage} +\item ComplexXmpPage \ref{ComplexXmpPage} on +page~\pageref{ComplexXmpPage} +\item ugUserDeclarePage \ref{ugUserDeclarePage} on +page~\pageref{ugUserDeclarePage} +\end{itemize} +\index{pages!ugAvailSnoopPage!ug02.ht} +\index{ug02.ht!pages!ugAvailSnoopPage} +\index{ugAvailSnoopPage!ug02.ht!pages} +<>= +\begin{page}{ugAvailSnoopPage}{2.12. Commands for Snooping} +\beginscroll + +To conclude this chapter, we introduce you to some system commands +that you can use for getting more information about domains, +packages, categories, and operations. +The most powerful Axiom facility for getting information about +constructors and operations is the \Browse{} component of \HyperName{}. +This is discussed in \downlink{``\ugBrowseTitle''}{ugBrowsePage} +in Chapter \ugBrowseNumber\ignore{ugBrowse}. + +Use the \spadsys{)what} system command to see lists of system objects +whose name contain a particular substring (uppercase or lowercase is +not significant). + +\xtc{ +Issue this to see a list of all operations with +``{\tt complex}'' in their names. +}{ +\spadpaste{)what operation complex} +} +\xtc{ +If you want to see all domains with ``{\tt matrix}'' in their names, issue +this. +}{ +\spadpaste{)what domain matrix} +} +\xtc{ +Similarly, if you wish to see all packages whose names contain +``{\tt gauss}'', enter this. +}{ +\spadpaste{)what package gauss} +} +\xtc{ +This command shows all +the operations that \axiomType{Any} provides. +Wherever \axiomSyntax{\$} appears, it means ``\axiomType{Any}''. +}{ +\spadpaste{)show Any} +} +\xtc{ +This displays all operations with the name \axiomFun{complex}. +}{ +\spadpaste{)display operation complex} +} +Let's analyze this output. +\xtc{ +First we find out what some of the abbreviations mean. +}{ +\spadpaste{)abbreviation query COMPCAT} +} +\xtc{ +}{ +\spadpaste{)abbreviation query COMRING} +} + +So if \axiom{D1} is a commutative ring (such as the integers or +floats) and \axiom{D} belongs to \axiomType{ComplexCategory +D1}, then there is an operation called \axiomFun{complex} that +takes two elements of \axiom{D1} and creates an element of +\axiom{D}. +The primary example of a constructor implementing domains +belonging to \axiomType{ComplexCategory} is \axiomType{Complex}. +See \downlink{`Complex'}{ComplexXmpPage}\ignore{Complex} +for more information on that and see +\downlink{``\ugUserDeclareTitle''}{ugUserDeclarePage} in +Section \ugUserDeclareNumber\ignore{ugUserDeclare} +for more information on function types. +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 3 (ug03.ht)} +<>= +\newcommand{\ugHyperTitle}{Using \HyperName{}} +\newcommand{\ugHyperNumber}{3.} + +@ +\section{Using \HyperName{}} +\label{ugHyperPage} +\begin{itemize} +\item YouTriedIt \ref{YouTriedIt} on +page~\pageref{YouTriedIt} +\item ugHyperHeadingsPage \ref{ugHyperHeadingsPage} on +page~\pageref{ugHyperHeadingsPage} +\item ugHyperKeysPage \ref{ugHyperKeysPage} on +page~\pageref{ugHyperKeysPage} +\item ugHyperScrollPage \ref{ugHyperScrollPage} on +page~\pageref{ugHyperScrollPage} +\item ugHyperInputPage \ref{ugHyperInputPage} on +page~\pageref{ugHyperInputPage} +\item ugHyperButtonsPage \ref{ugHyperButtonsPage} on +page~\pageref{ugHyperButtonsPage} +\item ugHyperSearchPage \ref{ugHyperSearchPage} on +page~\pageref{ugHyperSearchPage} +\item ugHyperExamplePage \ref{ugHyperExamplePage} on +page~\pageref{ugHyperExamplePage} +\item ugHyperResourcesPage \ref{ugHyperResourcesPage} on +page~\pageref{ugHyperResourcesPage} +\end{itemize} +\index{pages!ugHyperPage!ug03.ht} +\index{ug03.ht!pages!ugHyperPage} +\index{ugHyperPage!ug03.ht!pages} +<>= +\begin{page}{ugHyperPage}{3. Using \HyperName{}} +\beginscroll + + +\HyperName{} is the gateway to Axiom. +It's both an on-line tutorial and an on-line reference manual. +It also enables you to use Axiom simply by using the mouse and +filling in templates. +\HyperName{} is available to you if you are running Axiom under the +X Window System. + +Pages usually have active areas, marked in +\texht{{\bf this font} (bold face).}{\downlink{this font.}{YouTriedIt}} +As you move the mouse pointer to an active area, the pointer changes from +a filled dot to an open circle. +The active areas are usually linked to other pages. +When you click on an active area, you move to the linked page. +\texht{}{Try clicking \downlink{here}{YouTriedIt} now.} + +We suggest that you learn more about other features of +\HyperName{} by clicking on an active area in the menu below. + +\beginmenu + \menudownlink{{3.1. Headings}}{ugHyperHeadingsPage} + \menudownlink{{3.2. Key Definitions}}{ugHyperKeysPage} + \menudownlink{{3.3. Scroll Bars}}{ugHyperScrollPage} + \menudownlink{{3.4. Input Areas}}{ugHyperInputPage} + \menudownlink{{3.5. Radio Buttons and Toggles}}{ugHyperButtonsPage} + \menudownlink{{3.6. Search Strings}}{ugHyperSearchPage} + \menudownlink{{3.7. Example Pages}}{ugHyperExamplePage} + \menudownlink{{3.8. X Window Resources for \HyperName{}}}{ugHyperResourcesPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugHyperHeadingsTitle}{Headings} +\newcommand{\ugHyperHeadingsNumber}{3.1.} + +@ +\section{Headings} +\label{ugHyperHeadingsPage} +\index{pages!ugHyperHeadingsPage!ug03.ht} +\index{ug03.ht!pages!ugHyperHeadingsPage} +\index{ugHyperHeadingsPage!ug03.ht!pages} +<>= +\begin{page}{ugHyperHeadingsPage}{3.1. Headings} +\beginscroll +% +Most pages have a standard set of buttons at the top of the page. +This is what they mean: + +\indent{0} +\beginitems +\item[\StdHelpButton{}] Click on this to get help. +The button only appears if there is specific help for the page you are +viewing. +You can get {\it general} help for \HyperName{} by clicking the help +button on the home page. + +\item[\UpButton{}] Click here to go back one page. +By clicking on this button repeatedly, you can go back several pages and +then take off in a new direction. + +\item[\ReturnButton{}] Go back to the home page, that is, +the page on which you started. +Use \HyperName{} to explore, to make forays into new topics. +Don't worry about how to get back. +\HyperName{} remembers where you came from. +Just click on this button to return. + +\item[\StdExitButton{}] From the root window (the one that is displayed when +you start the system) this button leaves the \HyperName{} program, and it +must be restarted if you want to use it again. +From any other \HyperName{} window, it just makes that one window go away. +You {\it must} use this button to get rid of a window. +If you use the window manager ``Close'' button, then all of \HyperName{} +goes away. +\enditems +\indent{0} +% +The buttons are not displayed if they are not applicable to the page +you are viewing. +For example, there is no \ReturnButton{} button on the top-level menu. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugHyperKeysTitle}{Key Definitions} +\newcommand{\ugHyperKeysNumber}{3.2.} + +@ +\section{Key Definitions} +\label{ugHyperKeysPage} +\begin{itemize} +\item ugHyperScrollPage \ref{ugHyperScrollPage} on +page~\pageref{ugHyperScrollPage} +\item ugHyperInputPage \ref{ugHyperInputPage} on +page~\pageref{ugHyperInputPage} +\end{itemize} +\index{pages!ugHyperKeysPage!ug03.ht} +\index{ug03.ht!pages!ugHyperKeysPage} +\index{ugHyperKeysPage!ug03.ht!pages} +<>= +\begin{page}{ugHyperKeysPage}{3.2. Key Definitions} +\beginscroll + +The following keyboard definitions are in effect throughout +\HyperName{}. +See \downlink{``\ugHyperScrollTitle''}{ugHyperScrollPage} +in Section \ugHyperScrollNumber\ignore{ugHyperScroll} and +\downlink{``\ugHyperInputTitle''}{ugHyperInputPage} +in Section \ugHyperInputNumber\ignore{ugHyperInput} +for some contextual key definitions. +% +\indent{0} +\beginitems +\item[F1] Display the main help page. +\item[F3] Same as \StdExitButton{}, makes the window go away if you are +not at the top-level window or quits the \HyperName{} facility if you are +at the top-level. +\item[F5] Rereads the \HyperName{} database, if necessary (for system +developers). +\item[F9] Displays this information about key definitions. +\item[F12] Same as {\bf F3}. +\item[Up Arrow] Scroll up one line. +\item[Down Arrow] Scroll down one line. +\item[Page Up] Scroll up one page. +\item[Page Down] Scroll down one page. +\enditems +\indent{0} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugHyperScrollTitle}{Scroll Bars} +\newcommand{\ugHyperScrollNumber}{3.3.} + +@ +\section{Scroll Bars} +\label{ugHyperScrollPage} +\begin{itemize} +\item ugHyperInputPage \ref{ugHyperInputPage} on +page~\pageref{ugHyperInputPage} +\end{itemize} +\index{pages!ugHyperScrollPage!ug03.ht} +\index{ug03.ht!pages!ugHyperScrollPage} +\index{ugHyperScrollPage!ug03.ht!pages} +<>= +\begin{page}{ugHyperScrollPage}{3.3. Scroll Bars} +\beginscroll +% + +Whenever there is too much text to fit on a page, a {\it scroll +bar} automatically appears along the right side. + +With a scroll bar, your page becomes an aperture, that is, a +window into a larger amount of text than can be displayed at one +time. +The scroll bar lets you move up and down in the text to see +different parts. +It also shows where the aperture is relative to the whole text. +The aperture is indicated by a strip on the scroll bar. + +Move the cursor with the mouse to the ``down-arrow'' at the bottom +of the scroll bar and click. +See that the aperture moves down one line. +Do it several times. +Each time you click, the aperture moves down one line. +Move the mouse to the ``up-arrow'' at the top of the scroll bar and +click. +The aperture moves up one line each time you click. + +Next move the mouse to any position along the middle of the scroll bar and +click. +\HyperName{} attempts to move the top of the aperture to this point in +the text. + +You cannot make the aperture go off the bottom edge. +When the aperture is about half the size of text, the lowest you can move +the aperture is halfway down. + +To move up or down one screen at a time, use the +\texht{\fbox{\bf PageUp}}{{\bf PageUp}} and \texht{\fbox{\bf PageDown}}{{\bf +PageDown}} keys on your keyboard. +They move the visible part of the region up and down one page each time you +press them. + +If the \HyperName{} page does not contain an input area +(see \downlink{``\ugHyperInputTitle''}{ugHyperInputPage} +in Section \ugHyperInputNumber\ignore{ugHyperInput}), you can also use the +\texht{\fbox{\bf Home}}{{\bf Home}} and +\texht{\fbox{$\uparrow$}}{up} and +\texht{\fbox{$\downarrow$}}{down} arrow keys to navigate. +When you press the \texht{\fbox{\bf Home}}{{\bf Home}} key, +the screen is positioned at the very top of the page. +Use the \texht{\fbox{$\uparrow$}}{up} and +\texht{\fbox{$\downarrow$}}{down} arrow keys to move the screen up +and down one line at a time, respectively. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugHyperInputTitle}{Input Areas} +\newcommand{\ugHyperInputNumber}{3.4.} + +@ +\section{Input Areas} +\label{ugHyperInputPage} +\index{pages!ugHyperInputPage!ug03.ht} +\index{ug03.ht!pages!ugHyperInputPage} +\index{ugHyperInputPage!ug03.ht!pages} +<>= +\begin{page}{ugHyperInputPage}{3.4. Input Areas} +\beginscroll +% +Input areas are boxes where you can put data. +Here is one: +\centerline{\inputstring{one}{40}{some text}} +\newline As you can see, the input area has some initial text {\it some text} +followed by an underscore cursor (the character {\it _}). + +To enter characters, first +move your mouse cursor to somewhere within the \HyperName{} page. +Characters that you type are inserted in front of the underscore. +This means that when you type characters at your keyboard, they +go into this first input area. + +The input area grows to accommodate as many characters as you type. +Use the \texht{\fbox{\bf Backspace}}{{\bf Backspace}} +key to erase characters to the left. +To modify what you type, use the right-arrow \texht{\fbox{$\rightarrow$}}{} +and left-arrow keys \texht{\fbox{$\leftarrow$}}{} and the +keys \texht{\fbox{\bf Insert}}{{\bf Insert}}, +\texht{\fbox{\bf Delete}}{{\bf Delete}}, +\texht{\fbox{\bf Home}}{{\bf Home}} and +\texht{\fbox{\bf End}}{{\bf End}}. +These keys are found immediately on the right of the standard IBM keyboard. + +If you press the +\texht{\fbox{\bf Home}}{{\bf Home}} +key, the cursor moves to the beginning of the line and if you press the +\texht{\fbox{\bf End}}{{\bf End}} +key, the cursor moves to the end of the line. +Pressing +\texht{\fbox{\bf Ctrl}--\fbox{\bf End}}{{\bf Ctrl-End}} +deletes all the text from the cursor to the end of the line. + +A page may have more than one input area. +Only one input area has an underscore cursor. +When you first see apage, the top-most input area contains the +cursor. +To type information into another input area, +use the \texht{\fbox{\bf Enter}}{{\bf Enter}} or +\texht{\fbox{\bf Tab}}{{\bf Tab}} key to move +from one input area to another. +To move in the reverse order, use +\texht{\fbox{\bf Shift}--\fbox{\bf Tab}}{{\bf Shift-Tab}}. + +You can also move from one input area to another using your mouse. +Notice that each input area is active. Click on one of the areas. +As you can see, the underscore cursor moves to that window. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugHyperButtonsTitle}{Radio Buttons and Toggles} +\newcommand{\ugHyperButtonsNumber}{3.5.} + +@ +\section{Radio Buttons and Toggles} +\label{ugHyperButtonsPage} +\index{pages!ugHyperButtonsPage!ug03.ht} +\index{ug03.ht!pages!ugHyperButtonsPage} +\index{ugHyperButtonsPage!ug03.ht!pages} +<>= +\begin{page}{ugHyperButtonsPage}{3.5. Radio Buttons and Toggles} +\beginscroll +% +Some pages have {\it radio buttons} and {\it toggles}. +Radio buttons are a group of buttons like those on car radios: you can +select only one at a time. +\radioboxes{sample}{\htbmfile{pick}}{\htbmfile{unpick}} +Here are three radio buttons: +\centerline{ +{\em\radiobox[1]{rone}{sample}\space{}\ First one}\space{3} +{\em\radiobox[0]{rtwo}{sample}\space{}\ Second one}\space{3} +{\em\radiobox[0]{rthree}{sample}\space{}\ Third one} +} +\newline +Once you have selected a button, it appears to be inverted and +contains a checkmark. +To change the selection, move the cursor with the mouse to a different radio +button and click. +\texht{}{Try it now.} + +A toggle is an independent button that displays some on/off +state. +When ``on'', the button appears to be inverted and +contains a checkmark. +When ``off'', the button is raised. +% +Unlike radio buttons, you can set a group of them any way you like. +Here are three: +\centerline{ +{\em\inputbox[1]{one}{\htbmfile{pick}}{\htbmfile{unpick}}\space{}\ First one} +\space{3} +{\em\inputbox[0]{two}{\htbmfile{pick}}{\htbmfile{unpick}}\space{}\ Second one} +\space{3} +{\em\inputbox[1]{three}{\htbmfile{pick}}{\htbmfile{unpick}}\space{}\ Third one} +} +\newline +To change toggle the selection, move the cursor with the mouse +to the button and click. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugHyperSearchTitle}{Search Strings} +\newcommand{\ugHyperSearchNumber}{3.6.} + +@ +\section{Search Strings} +\label{ugHyperSearchPage} +\begin{itemize} +\item ugLogicalSearchesPage \ref{ugLogicalSearchesPage} on +page~\pageref{ugLogicalSearchesPage} +\end{itemize} +\index{pages!ugHyperSearchPage!ug03.ht} +\index{ug03.ht!pages!ugHyperSearchPage} +\index{ugHyperSearchPage!ug03.ht!pages} +<>= +\begin{page}{ugHyperSearchPage}{3.6. Search Strings} +\beginscroll +% +A {\it search string} is used for searching some database. +To learn about search strings, we suggest that +you bring up the \HyperName{} glossary. +To do this from the top-level page of \HyperName{}: +\indent{4} +\beginitems +\item[1. ] Click on \windowlink{Reference}{TopReferencePage}, +bringing up the Axiom Reference page. +\item[2. ] Click on \windowlink{Glossary}{GlossaryPage}, bringing up the glossary. +\texht{}{(You can also just click on the word ``Glossary'' in the +last sentence.)} +\enditems +\indent{0} +Once you get the window containing the glossary, move it so that +it and this window are both visible. + +The glossary has an input area at its bottom. +We review the various kinds of search strings +you can enter to search the glossary. + +The simplest search string is a word, for example, {\tt operation}. +A word only matches an entry having exactly that spelling. +Enter the word {\tt operation} into the input area above then click on +{\bf Search}. +As you can see, {\tt operation} matches only one entry, namely with {\tt +operation} itself. + +Normally matching is insensitive to whether the alphabetic characters of your +search string are in uppercase or lowercase. +Thus {\tt operation} and {\tt OperAtion} both have the same effect. +%If you prefer that matching be case-sensitive, issue the command +%\spadsys{set HHyperName mixedCase} command to the interpreter. + +You will very often want to use the wildcard \spadSyntax{*} in your search +string so as to match multiple entries in the list. +The search key \spadSyntax{*} matches every entry in the list. +You can also use \spadSyntax{*} anywhere within a search string to match an +arbitrary substring. +Try {\tt cat*} for example: +enter {\tt cat*} into the input area and click on {\bf Search}. +This matches several entries. + +You use any number of wildcards in a search string as long as they are +not adjacent. +Try search strings such as {\tt *dom*}. +As you see, this search string matches {\tt domain}, {\tt domain +constructor}, {\tt subdomain}, and so on. + +\beginmenu + \menudownlink{{3.6.1. Logical Searches}}{ugLogicalSearchesPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLogicalSearchesTitle}{Logical Searches} +\newcommand{\ugLogicalSearchesNumber}{3.6.1.} + +@ +\section{Logical Searches} +\label{ugLogicalSearchesPage} +\index{pages!ugLogicalSearchesPage!ug03.ht} +\index{ug03.ht!pages!ugLogicalSearchesPage} +\index{ugLogicalSearchesPage!ug03.ht!pages} +<>= +\begin{page}{ugLogicalSearchesPage}{3.6.1. Logical Searches} +\beginscroll + +For more complicated searches, you can use +\spadSyntax{and}, \spadSyntax{or}, and \spadSyntax{not} +with basic search strings; +write logical expressions using these three operators just as +in the Axiom language. +For example, {\tt domain or package} matches the two +entries {\tt domain} and {\tt package}. +Similarly, {\tt dom* and *con*} matches {\tt domain constructor} +and others. +Also {\tt not *a*} matches every entry that does not contain +the letter {\tt a} somewhere. + +Use parentheses for grouping. +For example, {\tt dom* and (not *con*)} +matches {\tt domain} but not {\tt domain constructor}. + +There is no limit to how complex your logical expression can be. +For example, +\centerline{{{\tt a* or b* or c* or d* or e* and (not *a*)}}} +is a valid expression. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugHyperExampleTitle}{Example Pages} +\newcommand{\ugHyperExampleNumber}{3.7.} + +@ +\section{Example Pages} +\label{ugHyperExamplePage} +\index{pages!ugHyperExamplePage!ug03.ht} +\index{ug03.ht!pages!ugHyperExamplePage} +\index{ugHyperExamplePage!ug03.ht!pages} +<>= +\begin{page}{ugHyperExamplePage}{3.7. Example Pages} +\beginscroll +% +Many pages have Axiom example commands. +% +Here are two: +\spadpaste{a:= x**2 + 1 \bound{a}} +\spadpaste{(a - 2)**2 \free{a}} +% +Each command has an active ``button'' along the left margin. +When you click on this button, the output for the command is +``pasted-in.'' +Click again on the button and you see that the pasted-in output +disappears. + +Maybe you would like to run an example? +To do so, just click on any part of its text! +When you do, the example line is copied into a new interactive +Axiom buffer for this \HyperName{} page. + +Sometimes one example line cannot be run before you run an earlier one. +Don't worry---\HyperName{} automatically runs all the necessary +lines in the right order! +For instance, the second example line above refers to \spad{a} which is +assigned in the first example line. +What happens if you first click on the second example line? +Axiom first issues the first line (to assign \spad{a}), then the +second (to do the computation using \spad{a}). + +The new interactive Axiom buffer disappears when you leave +\HyperName{}. +If you want to get rid of it beforehand, +use the {\bf Cancel} button of the X Window manager +or issue the Axiom system command \spadsys{)close.} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugHyperResourcesTitle}{X Window Resources for \HyperName{}} +\newcommand{\ugHyperResourcesNumber}{3.8.} + +@ +\section{X Window Resources for \HyperName{}} +\label{ugHyperResourcesPage} +\index{pages!ugHyperResourcesPage!ug03.ht} +\index{ug03.ht!pages!ugHyperResourcesPage} +\index{ugHyperResourcesPage!ug03.ht!pages} +<>= +\begin{page}{ugHyperResourcesPage}{3.8. X Window Resources for \HyperName{}} +\beginscroll +% +You can control the appearance of \HyperName{} while running under Version 11 +of the X Window System by placing the following resources +in the file {\bf .Xdefaults} in your home directory. +In what follows, {\it font} is any valid X11 font name +(for example, {\tt Rom14}) and {\it color} is any valid X11 color +specification (for example, {\tt NavyBlue}). +For more information about fonts and colors, refer to the +X Window documentation for your system. +\indent{0} +\beginitems +\item[{\tt Axiom.hyperdoc.RmFont:} {\it font}] \ \newline +This is the standard text font. \xdefault{Rom14} +\item[{\tt Axiom.hyperdoc.RmColor:} {\it color}] \ \newline +This is the standard text color. \xdefault{black} +\item[{\tt Axiom.hyperdoc.ActiveFont:} {\it font}] \ \newline +This is the font used for \HyperName{} link buttons. \xdefault{Bld14} +\item[{\tt Axiom.hyperdoc.ActiveColor:} {\it color}] \ \newline +This is the color used for \HyperName{} link buttons. \xdefault{black} +\item[{\tt Axiom.hyperdoc.AxiomFont:} {\it font}] \ \newline +This is the font used for active Axiom commands.\footnote{ +This was called {\tt Axiom.hyperdoc.SpadFont} in early versions +of Axiom.} +\xdefault{Bld14} +\item[{\tt Axiom.hyperdoc.AxiomColor:} {\it color}] \ \newline +This is the color used for active Axiom commands.\footnote{ +This was called {\tt Axiom.hyperdoc.SpadColor} in early versions +of Axiom.} +\xdefault{black} +\item[{\tt Axiom.hyperdoc.BoldFont:} {\it font}] \ \newline +This is the font used for bold face. \xdefault{Bld14} +\item[{\tt Axiom.hyperdoc.BoldColor:} {\it color}] \ \newline +This is the color used for bold face. \xdefault{black} +\item[{\tt Axiom.hyperdoc.TtFont:} {\it font}] \ \newline +This is the font used for Axiom output in \HyperName{}. +This font must be fixed-width. \xdefault{Rom14} +\item[{\tt Axiom.hyperdoc.TtColor:} {\it color}] \ \newline +This is the color used for Axiom output in \HyperName{}. +\xdefault{black} +\item[{\tt Axiom.hyperdoc.EmphasizeFont:} {\it font}] \ \newline +This is the font used for italics. \xdefault{Itl14} +\item[{\tt Axiom.hyperdoc.EmphasizeColor:} {\it color}] \ \newline +This is the color used for italics. \xdefault{black} +\item[{\tt Axiom.hyperdoc.InputBackground:} {\it color}] \ \newline +This is the color used as the background for input areas. +\xdefault{black} +\item[{\tt Axiom.hyperdoc.InputForeground:} {\it color}] \ \newline +This is the color used as the foreground for input areas. +\xdefault{white} +\item[{\tt Axiom.hyperdoc.BorderColor:} {\it color}] \ \newline +This is the color used for drawing border lines. +\xdefault{black} +\item[{\tt Axiom.hyperdoc.Background:} {\it color}] \ \newline +This is the color used for the background of all windows. +\xdefault{white} +\enditems +\indent{0} +\endscroll +\autobuttons +\end{page} +@ +\chapter{Users Guide Chapter 4 (ug04.ht)} +<>= +\newcommand{\ugInOutTitle}{Input Files and Output Styles} +\newcommand{\ugInOutNumber}{4.} + +@ +\section{Input Files and Output Styles} +\label{ugInOutPage} +\begin{itemize} +\item ugInOutInPage \ref{ugInOutInPage} on +page~\pageref{ugInOutInPage} +\item ugInOutSpadprofPage \ref{ugInOutSpadprofPage} on +page~\pageref{ugInOutSpadprofPage} +\item ugInOutOutPage \ref{ugInOutOutPage} on +page~\pageref{ugInOutOutPage} +\item ugInOutAlgebraPage \ref{ugInOutAlgebraPage} on +page~\pageref{ugInOutAlgebraPage} +\item ugInOutTeXPage \ref{ugInOutTeXPage} on +page~\pageref{ugInOutTeXPage} +\item ugInOutScriptPage \ref{ugInOutScriptPage} on +page~\pageref{ugInOutScriptPage} +\item ugInOutFortranPage \ref{ugInOutFortranPage} on +page~\pageref{ugInOutFortranPage} +\end{itemize} +\index{pages!ugInOutPage!ug04.ht} +\index{ug04.ht!pages!ugInOutPage} +\index{ugInOutPage!ug04.ht!pages} +<>= +\begin{page}{ugInOutPage}{4. Input Files and Output Styles} +\beginscroll + +In this chapter we discuss how to collect Axiom statements +and commands into files and then read the contents into the +workspace. +We also show how to display the results of your computations in +several different styles including \texht{\TeX}{TeX}, FORTRAN and +monospace two-dimensional format.\footnote{\texht{\TeX}{TeX} is a +trademark of the American Mathematical Society.} + +The printed version of this book uses the Axiom +\texht{\TeX}{TeX} output formatter. +When we demonstrate a particular output style, we will need to +turn \texht{\TeX}{TeX} formatting off and the output style on so +that the correct output is shown in the text. + +\beginmenu + \menudownlink{{4.1. Input Files}}{ugInOutInPage} + \menudownlink{{4.2. The axiom.input File}}{ugInOutSpadprofPage} + \menudownlink{{4.3. Common Features of Using Output Formats}} +{ugInOutOutPage} + \menudownlink{{4.4. Monospace Two-Dimensional Mathematical Format}} +{ugInOutAlgebraPage} + \menudownlink{{4.5. TeX Format}}{ugInOutTeXPage} + \menudownlink{{4.6. IBM Script Formula Format}}{ugInOutScriptPage} + \menudownlink{{4.7. FORTRAN Format}}{ugInOutFortranPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugInOutInTitle}{Input Files} +\newcommand{\ugInOutInNumber}{4.1.} + +@ +\section{Input Files} +\label{ugInOutInPage} +\begin{itemize} +\item ugLangBlocksPage \ref{ugLangBlocksPage} on +page~\pageref{ugLangBlocksPage} +\end{itemize} +\index{pages!ugInOutInPage!ug04.ht} +\index{ug04.ht!pages!ugInOutInPage} +\index{ugInOutInPage!ug04.ht!pages} +<>= +\begin{page}{ugInOutInPage}{4.1. Input Files} +\beginscroll +% +In this section we explain what an {\it input file} is and +why you would want to know about it. +We discuss where Axiom looks for input files and how you can +direct it to look elsewhere. +We also show how to read the contents of an input file into the +\spadgloss{workspace} and how to use the \spadgloss{history} +facility to generate an input file from the statements you have +entered directly into the workspace. + +An {\it input} file contains Axiom expressions and system +commands. +Anything that you can enter directly to Axiom can be put +into an input file. +This is how you save input functions and expressions that you wish +to read into Axiom more than one time. + +To read an input file into Axiom, use the \spadcmd{)read} +system command. +For example, you can read a file in a particular directory by issuing +\begin{verbatim} +)read /spad/src/input/matrix.input +\end{verbatim} +The ``{\bf .input}'' is optional; this also works: +\begin{verbatim} +)read /spad/src/input/matrix +\end{verbatim} +What happens if you just enter +\spadcmd{)read matrix.input} or even \spadcmd{)read matrix}? +Axiom looks in your current working directory for input files +that are not qualified by a directory name. +Typically, this directory is the directory from which you invoked +Axiom. +To change the current working directory, use the \spadcmd{)cd} system command. +The command \spadsys{)cd} by itself shows the current +working +directory. +To change it to +the \spadsys{src/input} subdirectory for user ``babar'', +issue +\begin{verbatim} +)cd /u/babar/src/input +\end{verbatim} +Axiom looks first in this directory for an input file. +If it is not found, it looks in the system's directories, assuming +you meant some input file that was provided with Axiom. + +\beginImportant +If you have the Axiom history facility turned on (which it is +by default), you can save all the lines you have entered into the +workspace by entering +\begin{verbatim} +)history )write +\end{verbatim} + +Axiom tells you what input file to edit to see your +statements. +The file is in your home directory or in the directory you +specified with \spadsys{)cd}. +\endImportant + +In \downlink{``\ugLangBlocksTitle''}{ugLangBlocksPage} +in Section \ugLangBlocksNumber\ignore{ugLangBlocks} +we discuss using indentation in input files to group statements +into {\it blocks.} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugInOutSpadprofTitle}{The axiom.input File} +\newcommand{\ugInOutSpadprofNumber}{4.2.} + +@ +\section{The axiom.input File} +\label{ugInOutSpadprofPage} +\index{pages!ugInOutSpadprofPage!ug04.ht} +\index{ug04.ht!pages!ugInOutSpadprofPage} +\index{ugInOutSpadprofPage!ug04.ht!pages} +<>= +\begin{page}{ugInOutSpadprofPage}{4.2. The axiom.input File} +\beginscroll + +When Axiom starts up, it tries to read the input file +{\bf axiom.input} from your home +directory. +It there is no {\bf axiom.input} in your home directory, it reads the copy +located in its own {\bf src/input} directory. +The file usually contains +system commands to personalize your Axiom environment. +In the remainder of this section we mention a few things +that users frequently place in their +{\bf axiom.input} files. + +In order to have FORTRAN output always produced from your +computations, place the system command +\spadcmd{)set output fortran on} +in {\bf axiom.input}. +If you do not want to be prompted for confirmation when you issue +the \spadcmd{)quit} system command, place +\spadcmd{)set quit unprotected} +in {\bf axiom.input}. +If you then decide that you do want to be prompted, issue +\spadcmd{)set quit protected}. +This is the default setting +so that new users do not leave Axiom +inadvertently.\footnote{The +system command \spadsys{)pquit} always prompts you for +confirmation.} + +To see the other system variables you can set, issue \spadsys{)set} +or use the \HyperName{} {\bf Settings} facility to view and change +Axiom system variables. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugInOutOutTitle}{Common Features of Using Output Formats} +\newcommand{\ugInOutOutNumber}{4.3.} + +@ +\section{Common Features of Using Output Formats} +\label{ugInOutOutPage} +\index{pages!ugInOutOutPage!ug04.ht} +\index{ug04.ht!pages!ugInOutOutPage} +\index{ugInOutOutPage!ug04.ht!pages} +<>= +\begin{page}{ugInOutOutPage}{4.3. Common Features of Using Output Formats} +\beginscroll + +In this section we discuss how to start and stop the display +of the different output formats and how to send the output to the +screen or to a file. +To fix ideas, we use FORTRAN output format for most of the +examples. + +You can use the \spadcmd{)set output} +system +command to +toggle or redirect the different kinds of output. +The name of the kind of output follows ``output'' in the command. +The names are + +\indent{0} +\beginitems +\item[fortran] for FORTRAN output. +\item[algebra] for monospace two-dimensional mathematical output. +\item[tex] for \texht{\TeX}{TeX} output. +\item[script] for IBM Script Formula Format output. +\enditems +\indent{0} + +For example, issue \spadsys{)set output fortran on} to turn on +FORTRAN format and +issue \spadsys{)set output fortran off} to turn it off. +By default, {\tt algebra} is {\tt on} and all others are {\tt off}. +When output is started, it is sent to the screen. +To send the output to a file, give the file name without +directory or extension. +Axiom appends a file extension depending on the kind of +output being produced. +\xtc{ +Issue this to redirect FORTRAN output to, for example, the file +{\bf linalg.sfort}. +}{ +\spadpaste{)set output fortran linalg} +} +\noOutputXtc{ +You must {\it also} turn on the creation of FORTRAN output. +The above just says where it goes if it is created. +}{ +\spadpaste{)set output fortran on} +} +In what directory is this output placed? +It goes into the directory from which you started Axiom, +or if you have used the \spadsys{)cd} system command, the one +that you specified with \spadsys{)cd}. +You should use \spadcmd{)cd} before you send the output to the file. + +\noOutputXtc{ +You can always direct output back to the screen by issuing this. +}{ +\spadpaste{)set output fortran console} +} +\noOutputXtc{ +Let's make sure FORTRAN formatting is off so that nothing we +do from now on produces FORTRAN output. +}{ +\spadpaste{)set output fortran off} +} +\noOutputXtc{ +We also delete the demonstrated output file we created. +}{ +\spadpaste{)system rm linalg.sfort} +} + +You can abbreviate the words ``\spad{on},'' ``\spad{off}'' and +``\spad{console}'' to the minimal number +of characters needed to distinguish them. +Because of this, you cannot send output to files called +{\bf on.sfort, off.sfort, of.sfort, +console.sfort, consol.sfort} and so on. + +The width of the output on the page is set by +\spadcmd{)set output length} +for all formats except FORTRAN. +Use \spadcmd{)set fortran fortlength} to +change the FORTRAN line length from its default value of \spad{72}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugInOutAlgebraTitle}{Monospace Two-Dimensional Mathematical Format} +\newcommand{\ugInOutAlgebraNumber}{4.4.} + +@ +\section{Monospace Two-Dimensional Mathematical Format} +\label{ugInOutAlgebraPage} +\index{pages!ugInOutAlgebraPage!ug04.ht} +\index{ug04.ht!pages!ugInOutAlgebraPage} +\index{ugInOutAlgebraPage!ug04.ht!pages} +<>= +\begin{page}{ugInOutAlgebraPage} +{4.4. Monospace Two-Dimensional Mathematical Format} +\beginscroll + +This is the default output format for Axiom. +It is usually on when you start the system. + +\texht{\vskip 4pc}{} +\noOutputXtc{ +If it is not, issue this. +}{ +\spadpaste{)set output algebra on \bound{algon}} +} +\noOutputXtc{ +Since the printed version of this book +(as opposed to the \HyperName{} version) +shows output produced by the +\texht{\TeX}{TeX}{} output formatter, +let us temporarily turn off +\texht{\TeX}{TeX}{} output. +}{ +\spadpaste{)set output tex off \bound{texoff}} +} +\xtc{ +Here is an example of what it looks like. +}{ +\spadpaste{matrix [[i*x**i + j*\%i*y**j for i in 1..2] for j in 3..4] \free{algon texoff}} +} +\noOutputXtc{ +Issue this to turn off this kind of formatting. +}{ +\spadpaste{)set output algebra off} +} +\noOutputXtc{ +Turn \texht{\TeX}{TeX}{} output on again. +}{ +\spadpaste{)set output tex on} +} + +The characters used for the matrix brackets above are rather ugly. +You get this character set when you issue +\spadcmd{)set output characters plain}. +This character set should be used when you are running on a machine +that does not support the IBM extended ASCII character set. +If you are running on an IBM workstation, for example, issue +\spadcmd{)set output characters default} +to get better looking output. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugInOutTeXTitle}{TeX Format} +\newcommand{\ugInOutTeXNumber}{4.5.} + +@ +\section{TeX Format} +\label{ugInOutTeXPage} +\index{pages!ugInOutTeXPage!ug04.ht} +\index{ug04.ht!pages!ugInOutTeXPage} +\index{ugInOutTeXPage!ug04.ht!pages} +<>= +\begin{page}{ugInOutTeXPage}{4.5. TeX Format} +\beginscroll + +Axiom can produce \texht{\TeX}{TeX}{} output for your +expressions. +The output is produced using macros from the +\texht{\LaTeX}{LaTeX} document preparation system by +Leslie Lamport.\footnote{See Leslie Lamport, {\it LaTeX: A Document +Preparation System,} Reading, Massachusetts: Addison-Wesley +Publishing Company, Inc., 1986.} +The printed version of this book was produced using this formatter. + +\noOutputXtc{ +To turn on \texht{\TeX}{TeX}{} output formatting, issue this. +}{ +\spadpaste{)set output tex on \bound{texon}} +} +Here is an example of its output. +\begin{verbatim} +matrix [[i*x**i + j*\%i*y**j for i in 1..2] for j in 3..4] + +\[ +\left[ +\begin{array}{cc} +\displaystyle {{3 \ \%i \ {y \sp 3}}+x}& +\displaystyle {{3 \ \%i \ {y \sp 3}}+{2 \ {x \sp 2}}} \\ +\displaystyle {{4 \ \%i \ {y \sp 4}}+x}& +\displaystyle {{4 \ \%i \ {y \sp 4}}+{2 \ {x \sp 2}}} +\end{array} +\right] +\leqno(3) +\] +%Axiom STEP NUMBER: 3 +\end{verbatim} +To turn \texht{\TeX}{TeX}{} output formatting off, issue \spadsys{)set +output tex off}. +The \texht{\LaTeX}{LaTeX} macros in the output generated by Axiom +are all standard except for the following definitions: +\begin{verbatim} +\def\csch{\mathop{\rm csch}\nolimits} + +\def\erf{\mathop{\rm erf}\nolimits} + +\def\zag#1#2{ + {{\hfill \left. {#1} \right|} + \over + {\left| {#2} \right. \hfill} + } +} +\end{verbatim} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugInOutScriptTitle}{IBM Script Formula Format} +\newcommand{\ugInOutScriptNumber}{4.6.} + +@ +\section{IBM Script Formula Format} +\label{ugInOutScriptPage} +\index{pages!ugInOutScriptPage!ug04.ht} +\index{ug04.ht!pages!ugInOutScriptPage} +\index{ugInOutScriptPage!ug04.ht!pages} +<>= +\begin{page}{ugInOutScriptPage}{4.6. IBM Script Formula Format} +\beginscroll + +Axiom can +produce IBM Script Formula Format output for your +expressions. + +\texht{\vskip 2pc}{} +\noOutputXtc{ +To turn IBM Script Formula Format on, issue this. +}{ +\spadpaste{)set output script on} +} +Here is an example of its output. +\begin{verbatim} +matrix [[i*x**i + j*%i*y**j for i in 1..2] for j in 3..4] + +.eq set blank @ +:df. +>+x> here < <3 @@ %i @@ +>+<2 @@ >>> habove < < <4 @@ %i @@ +>+x> here < <4 @@ %i @@ >+<2 @@ +>>>> right rb> +:edf. +\end{verbatim} +\noOutputXtc{ +To turn IBM Script Formula Format output formatting off, issue this. +}{ +\spadpaste{)set output script off} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugInOutFortranTitle}{FORTRAN Format} +\newcommand{\ugInOutFortranNumber}{4.7.} + +@ +\section{FORTRAN Format} +\label{ugInOutFortranPage} +\index{pages!ugInOutFortranPage!ug04.ht} +\index{ug04.ht!pages!ugInOutFortranPage} +\index{ugInOutFortranPage!ug04.ht!pages} +<>= +\begin{page}{ugInOutFortranPage}{4.7. FORTRAN Format} +\beginscroll + +In addition to turning FORTRAN output on and off and stating where the +output should be placed, there are many options that control the +appearance of the generated code. +In this section we describe some of the basic options. +Issue \spadcmd{)set fortran} to see a full list with their current +settings. + +The output FORTRAN expression usually begins in column 7. +If the expression needs more than one line, the ampersand character +\spadSyntax{\&} is used in column 6. +Since some versions of FORTRAN have restrictions on the number of lines +per statement, Axiom breaks long expressions into segments with +a maximum of 1320 characters (20 lines of 66 characters) per segment. +If you want to change this, say, to 660 characters, +issue the system command +\spadcmd{)set fortran explength 660}. +You can turn off the line breaking by issuing +\spadcmd{)set fortran segment off}. +Various code optimization levels are available. +% +\noOutputXtc{ +FORTRAN output is produced after you issue this. +}{ +\spadpaste{)set output fortran on \bound{forton}} +} +\noOutputXtc{ +For the initial examples, we set the optimization level to 0, which is the +lowest level. +}{ +\spadpaste{)set fortran optlevel 0 \bound{opt0}\free{forton}} +} +\noOutputXtc{ +The output is usually in columns 7 through 72, although fewer columns +are used in the following examples so that the output +fits nicely on the page. +}{ +\spadpaste{)set fortran fortlength 60} +} +\xtc{ +By default, the output goes to the screen and is displayed +before the standard Axiom two-dimensional output. +In this example, an +assignment to the variable \spad{R1} was generated because this is +the result of step 1. +}{ +\spadpaste{(x+y)**3 \free{opt0}} +} +\xtc{ +Here is an example that illustrates the line breaking. +}{ +\spadpaste{(x+y+z)**3 \free{opt0}} +} + +Note in the above examples that integers are generally converted to +floating point numbers, except in exponents. +This is the default behavior but can be turned off by issuing +\spadcmd{)set fortran ints2floats off}. +The rules governing when the conversion is done are: +\indent{4} +\beginitems +\item[1. ] If an integer is an exponent, convert it to a floating point +number if it is greater than 32767 in absolute value, otherwise leave it +as an integer. +\item[2. ] Convert all other integers in an expression to floating +point numbers. +\enditems +\indent{0} +These rules only govern integers in expressions. +Numbers generated by Axiom for \spad{DIMENSION} statements are also +integers. + +To set the type of generated FORTRAN data, +use one of the following: +\begin{verbatim} +)set fortran defaulttype REAL +)set fortran defaulttype INTEGER +)set fortran defaulttype COMPLEX +)set fortran defaulttype LOGICAL +)set fortran defaulttype CHARACTER +\end{verbatim} + +\xtc{ +When temporaries are created, they are given a default type of +{\tt REAL.} +Also, the {\tt REAL} versions of functions are used by default. +}{ +\spadpaste{sin(x) \free{opt1}} +} +\noOutputXtc{ +At optimization level 1, Axiom removes common subexpressions. +}{ +\spadpaste{)set fortran optlevel 1 \bound{opt1}\free{forton}} +} +\xtc{ +}{ +\spadpaste{(x+y+z)**3 \free{opt1}} +} +\noOutputXtc{ +This changes the precision to {\tt DOUBLE}. +Substitute \spad{single} for \spad{double} +to return to single precision. +}{ +\spadpaste{)set fortran precision double \free{opt1}\bound{double1}} +} +\xtc{ +Complex constants display the precision. +}{ +\spadpaste{2.3 + 5.6*\%i \free{double1}} +} +\xtc{ +The function names that Axiom generates depend on the chosen +precision. +}{ +\spadpaste{sin \%e \free{double1}} +} +\noOutputXtc{ +Reset the precision to \spad{single} and look at these two +examples again. +}{ +\spadpaste{)set fortran precision single \free{opt1}\bound{single1}} +} +\xtc{ +}{ +\spadpaste{2.3 + 5.6*\%i \free{single1}} +} +\xtc{ +}{ +\spadpaste{sin \%e \free{single1}} +} +\xtc{ +Expressions that look like lists, streams, sets or matrices cause +array code to be generated. +}{ +\spadpaste{[x+1,y+1,z+1] \free{opt1}} +} +\xtc{ +A temporary variable is generated to be the name of the array. +This may have to be changed in your particular application. +}{ +\spadpaste{set[2,3,4,3,5] \free{opt1}} +} +\xtc{ +By default, the starting index for generated FORTRAN arrays is \spad{0}. +}{ +\spadpaste{matrix [[2.3,9.7],[0.0,18.778]] \free{opt1}} +} +\noOutputXtc{ +To change the starting index for generated FORTRAN arrays to be \spad{1}, +issue this. +This value can only be \spad{0} or \spad{1}. +}{ +\spadpaste{)set fortran startindex 1 \free{opt1}\bound{start1}} +} +\xtc{ +Look at the code generated for the matrix again. +}{ +\spadpaste{matrix [[2.3,9.7],[0.0,18.778]] \free{start1}} +} +\endscroll +\autobuttons +\end{page} +@ +\chapter{Users Guide Chapter 5 (ug05.ht)} +<>= +\newcommand{\ugLangTitle}{Introduction to the Axiom Interactive Language} +\newcommand{\ugLangNumber}{5.} + +@ +\section{Introduction to the Axiom Interactive Language} +\label{ugLangPage} +\begin{itemize} +\item ugLangAssignPage \ref{ugLangAssignPage} on +page~\pageref{ugLangAssignPage} +\item ugLangBlocksPage \ref{ugLangBlocksPage} on +page~\pageref{ugLangBlocksPage} +\item ugLangIfPage \ref{ugLangIfPage} on +page~\pageref{ugLangIfPage} +\item ugLangLoopsPage \ref{ugLangLoopsPage} on +page~\pageref{ugLangLoopsPage} +\item ugLangItsPage \ref{ugLangItsPage} on +page~\pageref{ugLangItsPage} +\item ugLangStreamsPrimesPage \ref{ugLangStreamsPrimesPage} on +page~\pageref{ugLangStreamsPrimesPage} +\end{itemize} +\index{pages!ugLangPage!ug05.ht} +\index{ug05.ht!pages!ugLangPage} +\index{ugLangPage!ug05.ht!pages} +<>= +\begin{page}{ugLangPage}{5. Introduction to the Axiom Interactive Language} +\beginscroll + +In this chapter we look at some of the basic components of the +Axiom language that you can use interactively. +We show how to create a \spadgloss{block} of expressions, +how to form loops and list iterations, how to modify the sequential +evaluation of a block and how to use {\tt if-then-else} to +evaluate parts of your program conditionally. +We suggest you first read the boxed material in each section and then +proceed to a more thorough reading of the chapter. + +\beginmenu + \menudownlink{{5.1. Immediate and Delayed Assignments}}{ugLangAssignPage} + \menudownlink{{5.2. Blocks}}{ugLangBlocksPage} + \menudownlink{{5.3. if-then-else}}{ugLangIfPage} + \menudownlink{{5.4. Loops}}{ugLangLoopsPage} + \menudownlink{{5.5. Creating Lists and Streams with Iterators}} +{ugLangItsPage} + \menudownlink{{5.6. An Example: Streams of Primes}} +{ugLangStreamsPrimesPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangAssignTitle}{Immediate and Delayed Assignments} +\newcommand{\ugLangAssignNumber}{5.1.} + +@ +\section{Immediate and Delayed Assignments} +\label{ugLangAssignPage} +\begin{itemize} +\item ugUserDelayPage \ref{ugUserDelayPage} on +page~\pageref{ugUserDelayPage} +\end{itemize} +\index{pages!ugLangAssignPage!ug05.ht} +\index{ug05.ht!pages!ugLangAssignPage} +\index{ugLangAssignPage!ug05.ht!pages} +<>= +\begin{page}{ugLangAssignPage}{5.1. Immediate and Delayed Assignments} +\beginscroll + +A \spadgloss{variable} in Axiom refers to a value. +A variable has a name beginning with an uppercase or lowercase alphabetic +character, \axiomSyntax{\%}, or \axiomSyntax{!}. +Successive characters (if any) can be any of the above, digits, or +\axiomSyntax{?}. +Case is distinguished. +The following are all examples of valid, distinct variable names: +\begin{verbatim} +a tooBig? a1B2c3%!? +A %j numberOfPoints +beta6 %J numberofpoints +\end{verbatim} + +The \axiomSyntax{:=} operator is the immediate \spadgloss{assignment} +operator. +Use it to associate a value with a variable. + +\beginImportant +The syntax for immediate assignment for a single variable is +\centerline{{{\it variable} \axiom{:=} {\it expression}}} +The value returned by an immediate assignment is the value of {\it expression}. +\endImportant + +\xtc{ +The right-hand side of the expression is evaluated, +yielding \axiom{1}. This value is then assigned to \axiom{a}. +}{ +\spadpaste{a := 1 \bound{a}} +} +\xtc{ +The right-hand side of the expression is evaluated, +yielding \axiom{1}. This value is then assigned to \axiom{b}. +Thus \axiom{a} and \axiom{b} both have the value \axiom{1} after the sequence +of assignments. +}{ +\spadpaste{b := a \free{a}\bound{b}} +} +\xtc{ +What is the value of \axiom{b} if \axiom{a} is +assigned the value \axiom{2}? +}{ +\spadpaste{a := 2 \bound{a2}} +} +\xtc{ +As you see, the value of \axiom{b} is left unchanged. +}{ +\spadpaste{b \free{b}} +} +This is what we mean when we say this kind of assignment is +{\it immediate}; +\axiom{b} has no dependency on \axiom{a} after the initial assignment. +This is the usual notion of assignment found in programming +languages such as C, +PASCAL +and FORTRAN. + +Axiom provides delayed assignment with \axiomSyntax{==}. +This implements a +delayed evaluation of the right-hand side and dependency +checking. + +\beginImportant +The syntax for delayed assignment is +\centerline{{{\it variable} \axiom{==} {\it expression}}} +The value returned by a delayed assignment is \void{}. +\endImportant + +\xtc{ +Using \axiom{a} and \axiom{b} as above, these are the corresponding delayed +assignments. +}{ +\spadpaste{a == 1 \bound{ad}} +} +\xtc{ +}{ +\spadpaste{b == a \free{ad}\bound{bd}} +} +\xtc{ +The right-hand side of each delayed assignment +is left unevaluated until the +variables on the left-hand sides are evaluated. +Therefore this evaluation and \ldots +}{ +\spadpaste{a \free{ad}} +} +\xtc{ +this evaluation seem the same as before. +}{ +\spadpaste{b \free{bd}} +} +\xtc{ +If we change \axiom{a} to \axiom{2} +}{ +\spadpaste{a == 2 \bound{ad2}} +} +\xtc{ +then +\axiom{a} evaluates to \axiom{2}, as expected, but +}{ +\spadpaste{a \free{ad2}} +} +\xtc{ +the value of \axiom{b} reflects the change to \axiom{a}. +}{ +\spadpaste{b \free{bd ad2}} +} + +It is possible to set several variables at the same time +by using +a \spadgloss{tuple} of variables and a tuple of expressions.\footnote{A +\spadgloss{tuple} is a collection of things separated by commas, often +surrounded by parentheses.} + +\beginImportant +The syntax for multiple immediate assignments is +\centerline{{{\tt ( \subscriptIt{var}{1}, \subscriptIt{var}{2}, \ldots, \subscriptIt{var}{N} ) := ( \subscriptIt{expr}{1}, \subscriptIt{expr}{2}, \ldots, \subscriptIt{expr}{N} ) }}} +The value returned by an immediate assignment is the value of +\subscriptIt{expr}{N}. +\endImportant + +\xtc{ +This sets \axiom{x} to \axiom{1} and \axiom{y} to \axiom{2}. +}{ +\spadpaste{(x,y) := (1,2) \bound{x}\bound{y}} +} +Multiple immediate assigments are parallel in the sense that the +expressions on the right are all evaluated before any assignments +on the left are made. +However, the order of evaluation of these expressions is undefined. +\xtc{ +You can use multiple immediate assignment to swap the +values held by variables. +}{ +\spadpaste{(x,y) := (y,x) \free{x y}\bound{swap}} +} +\xtc{ +\axiom{x} has the previous value of \axiom{y}. +}{ +\spadpaste{x \free{swap}} +} +\xtc{ +\axiom{y} has the previous value of \axiom{x}. +}{ +\spadpaste{y \free{swap}} +} + +There is no syntactic form for multiple delayed assignments. +See the discussion in +\downlink{``\ugUserDelayTitle''}{ugUserDelayPage} +in Section \ugUserDelayNumber\ignore{ugUserDelay} +about how Axiom differentiates between delayed assignments and +user functions of no arguments. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangBlocksTitle}{Blocks} +\newcommand{\ugLangBlocksNumber}{5.2.} + +@ +\section{Blocks} +\label{ugLangBlocksPage} +\begin{itemize} +\item ugLangIfPage \ref{ugLangIfPage} on +page~\pageref{ugLangIfPage} +\end{itemize} +\index{pages!ugLangBlocksPage!ug05.ht} +\index{ug05.ht!pages!ugLangBlocksPage} +\index{ugLangBlocksPage!ug05.ht!pages} +<>= +\begin{page}{ugLangBlocksPage}{5.2. Blocks} +\beginscroll + +%% +%% We should handle tabs in pile correctly but so far we do not. +%% + +A \spadgloss{block} is a sequence of expressions evaluated +in the order that they appear, except as modified by control expressions +such as \axiom{break}, +\spadkey{break} +\axiom{return}, +\spadkey{return} +\axiom{iterate} and +\spadkey{iterate} +\axiom{if-then-else} constructions. +The value of a block is the value of the expression last evaluated +in the block. + +To leave a block early, use \axiomSyntax{=>}. +For example, \axiom{i < 0 => x}. +The expression before the \axiomSyntax{=>} must evaluate to +\axiom{true} or \axiom{false}. +The expression following the \axiomSyntax{=>} is the return value +for the block. + +A block can be constructed in two ways: +\indent{4} +\beginitems +\item[1. ] the expressions can be separated by semicolons +and the resulting expression surrounded by parentheses, and +\item[2. ] the expressions can be written on succeeding lines with each line +indented the same number of spaces (which must be greater than zero). +A block entered in this form is +called a \spadgloss{pile}. +\enditems +\indent{0} +Only the first form is available if you are entering expressions +directly to Axiom. +Both forms are available in {\bf .input} files. + +\beginImportant +The syntax for a simple block of expressions entered interactively is +\centerline{{{\tt ( \subscriptIt{expression}{1}; \subscriptIt{expression}{2}; \ldots; \subscriptIt{expression}{N} )}}} +The value returned by a block is the value of an +\axiomSyntax{=>} expression, or \subscriptIt{expression}{N} +if no \axiomSyntax{=>} is encountered. +\endImportant + +In {\bf .input} files, blocks can also be written using +\spadglossSee{piles}{pile}. +The examples throughout this book are assumed to come from {\bf .input} files. + +\xtc{ +In this example, we assign a rational number to \axiom{a} using a block +consisting of three expressions. +This block is written as a pile. +Each expression in the pile has the same indentation, in this case two +spaces to the right of the first line. +}{ +\begin{spadsrc} +a := + i := gcd(234,672) + i := 3*i**5 - i + 1 + 1 / i +\end{spadsrc} +} +\xtc{ +Here is the same block written on one line. +This is how you are required to enter it at the input prompt. +}{ +\spadpaste{a := (i := gcd(234,672); i := 3*i**5 - i + 1; 1 / i)} +} +\xtc{ +Blocks can be used to put several expressions on one line. +The value returned is that of the last expression. +}{ +\spadpaste{(a := 1; b := 2; c := 3; [a,b,c]) \bound{a b c}} +} + +Axiom gives you two ways of writing a block and the +preferred way in an {\bf .input} file is to use a pile. +Roughly speaking, a pile is +a block whose constituent expressions are indented the same amount. +You begin a pile by starting a new line for the first expression, +indenting it to the right of the previous line. +You then enter the second expression on a new line, vertically aligning +it with the first line. And so on. +If you need to enter an inner pile, further indent its lines to the right +of the outer pile. +Axiom knows where a pile ends. +It ends when a subsequent line is indented to the left of the pile or +the end of the file. + +\xtc{ +Blocks can be used to perform several steps before an assignment +(immediate or delayed) is made. +}{ +\begin{spadsrc}[\free{a b}] +d := + c := a**2 + b**2 + sqrt(c * 1.3) +\end{spadsrc} +} +\xtc{ +Blocks can be used in the arguments to functions. +(Here \axiom{h} is assigned \axiom{2.1 + 3.5}.) +}{ +\begin{spadsrc}[\bound{h}] +h := 2.1 + + 1.0 + 3.5 +\end{spadsrc} +} +\xtc{ +Here the second argument to \axiomFun{eval} is \axiom{x = z}, where +the value of \axiom{z} is computed in the first line of the block +starting on the second line. +}{ +\begin{spadsrc} +eval(x**2 - x*y**2, + z := %pi/2.0 - exp(4.1) + x = z + ) +\end{spadsrc} +} +\xtc{ +Blocks can be used in the clauses of \axiom{if-then-else} +expressions (see \downlink{``\ugLangIfTitle''}{ugLangIfPage} +in Section \ugLangIfNumber\ignore{ugLangIf}). +}{ +\spadpaste{if h > 3.1 then 1.0 else (z := cos(h); max(z,0.5)) \free{h}} +} +\xtc{ +This is the pile version of the last block. +}{ +\begin{spadsrc}[\free{h}] +if h > 3.1 then + 1.0 + else + z := cos(h) + max(z,0.5) +\end{spadsrc} +} +\xtc{ +Blocks can be nested. +}{ +\spadpaste{a := (b := factorial(12); c := (d := eulerPhi(22); factorial(d));b+c)} +} +\xtc{ +This is the pile version of the last block. +}{ +\begin{spadsrc} +a := + b := factorial(12) + c := + d := eulerPhi(22) + factorial(d) + b+c +\end{spadsrc} +} + +\xtc{ +Since \axiom{c + d} does equal \axiom{3628855}, \axiom{a} has the value +of \axiom{c} and the last line is never evaluated. +}{ +\begin{spadsrc} +a := + c := factorial 10 + d := fibonacci 10 + c + d = 3628855 => c + d +\end{spadsrc} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangIfTitle}{if-then-else} +\newcommand{\ugLangIfNumber}{5.3.} + +@ +\section{if-then-else} +\label{ugLangIfPage} +\begin{itemize} +\item ugTypesResolvePage \ref{ugTypesResolvePage} on +page~\pageref{ugTypesResolvePage} +\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on +page~\pageref{ugTypesPkgCallPage} +\end{itemize} +\index{pages!ugLangIfPage!ug05.ht} +\index{ug05.ht!pages!ugLangIfPage} +\index{ugLangIfPage!ug05.ht!pages} +<>= +\begin{page}{ugLangIfPage}{5.3. if-then-else} +\beginscroll + +Like many other programming languages, Axiom uses the three +keywords \spadkey{if} \axiom{if, then} \spadkey{then} and \axiom{else} +\spadkey{else} to form +conditional expressions. +The \axiom{else} part of the conditional is optional. +The expression between the \axiom{if} and \axiom{then} keywords +is a +\spadgloss{predicate}: an expression that evaluates to or is convertible to +either {\tt true} or {\tt false}, that is, +a \axiomType{Boolean}. + +\beginImportant +The syntax for conditional expressions is +\centerline{{{\tt if {\it predicate} then \subscriptIt{expression}{1} else \subscriptIt{expression}{2}}}} +where the \axiom{else} \subscriptIt{\it expression}{2} part is optional. +The value returned from a conditional expression is +\subscriptIt{\it expression}{1} if the predicate evaluates to \axiom{true} +and \subscriptIt{\it expression}{2} otherwise. +If no \axiom{else} clause is given, the value is always \void{}. +\endImportant + +An \axiom{if-then-else} expression always returns a value. +If the +\axiom{else} clause is missing then the entire expression returns +\void{}. +If both clauses are present, the type of the value returned by \axiom{if} +is obtained by resolving the types of the values of the two clauses. +See \downlink{``\ugTypesResolveTitle''}{ugTypesResolvePage} +in Section \ugTypesResolveNumber\ignore{ugTypesResolve} +for more information. + +The predicate must evaluate to, or be convertible to, an object of type +\axiomType{Boolean}: {\tt true} or {\tt false}. +By default, the equal sign \spadopFrom{=}{Equation} creates +an equation. +\xtc{ +This is an equation. +In particular, it is an object of type \axiomType{Equation Polynomial Integer}. +}{ +\spadpaste{x + 1 = y} +} +However, for predicates in \axiom{if} expressions, Axiom +places a default target type of \axiomType{Boolean} on the +predicate and equality testing is performed. +Thus you need not qualify the \axiomSyntax{=} in any way. +In other contexts you may need to tell Axiom that you want +to test for equality rather than create an equation. +In those cases, use \axiomSyntax{@} and a target type of +\axiomType{Boolean}. +See \downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} in Section +\ugTypesPkgCallNumber\ignore{ugTypesPkgCall} for more information. + +The compound symbol meaning ``not equal'' in Axiom is +``\texht{$\sim =$}{\axiom{~=}}''. +This can be used directly without a package call or a target specification. +The expression +\axiom{a} \texht{$\sim =$}{\axiom{~=}} \axiom{b} is directly translated into +\axiom{not (a = b)}. + +Many other functions have return values of type \axiomType{Boolean}. +These include \axiom{<}, \axiom{<=}, \axiom{>}, +\axiom{>=}, \texht{$\sim =$}{\axiom{~=}} and \axiom{member?}. +By convention, operations with names ending in \axiomSyntax{?} +return \axiomType{Boolean} values. + +The usual rules for piles are suspended for conditional expressions. +In {\bf .input} files, the \axiom{then} and +\axiom{else} keywords can begin in the same column as the corresponding +\axiom{if} but may also appear to the right. +Each of the following styles of writing \axiom{if-then-else} +expressions is acceptable: +\begin{verbatim} +if i>0 then output("positive") else output("nonpositive") + +if i > 0 then output("positive") + else output("nonpositive") + +if i > 0 then output("positive") +else output("nonpositive") + +if i > 0 +then output("positive") +else output("nonpositive") + +if i > 0 + then output("positive") + else output("nonpositive") +\end{verbatim} + +A block can follow the \axiom{then} or \axiom{else} keywords. +In the following two assignments to \axiom{a}, +the \axiom{then} and \axiom{else} +clauses each are followed by two-line piles. +The value returned in each is the value of the second line. + +\begin{verbatim} +a := + if i > 0 then + j := sin(i * pi()) + exp(j + 1/j) + else + j := cos(i * 0.5 * pi()) + log(abs(j)**5 + 1) + +a := + if i > 0 + then + j := sin(i * pi()) + exp(j + 1/j) + else + j := cos(i * 0.5 * pi()) + log(abs(j)**5 + 1) +\end{verbatim} +These are both equivalent to the following: +\begin{verbatim} +a := + if i > 0 then (j := sin(i * pi()); exp(j + 1/j)) + else (j := cos(i * 0.5 * pi()); log(abs(j)**5 + 1)) +\end{verbatim} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsTitle}{Loops} +\newcommand{\ugLangLoopsNumber}{5.4.} + +@ +\section{Loops} +\label{ugLangLoopsPage} +\begin{itemize} +\item ugLangLoopsCompIntPage \ref{ugLangLoopsCompIntPage} on +page~\pageref{ugLangLoopsCompIntPage} +\item ugLangLoopsReturnPage \ref{ugLangLoopsReturnPage} on +page~\pageref{ugLangLoopsReturnPage} +\item ugLangLoopsBreakPage \ref{ugLangLoopsBreakPage} on +page~\pageref{ugLangLoopsBreakPage} +\item ugLangLoopsBreakVsPage \ref{ugLangLoopsBreakVsPage} on +page~\pageref{ugLangLoopsBreakVsPage} +\item ugLangLoopsBreakMorePage \ref{ugLangLoopsBreakMorePage} on +page~\pageref{ugLangLoopsBreakMorePage} +\item ugLangLoopsIteratePage \ref{ugLangLoopsIteratePage} on +page~\pageref{ugLangLoopsIteratePage} +\item ugLangLoopsWhilePage \ref{ugLangLoopsWhilePage} on +page~\pageref{ugLangLoopsWhilePage} +\item ugLangLoopsForInPage \ref{ugLangLoopsForInPage} on +page~\pageref{ugLangLoopsForInPage} +\item ugLangLoopsForInNMPage \ref{ugLangLoopsForInNMPage} on +page~\pageref{ugLangLoopsForInNMPage} +\item ugLangLoopsForInNMSPage \ref{ugLangLoopsForInNMSPage} on +page~\pageref{ugLangLoopsForInNMSPage} +\item ugLangLoopsForInNPage \ref{ugLangLoopsForInNPage} on +page~\pageref{ugLangLoopsForInNPage} +\item ugLangLoopsForInXLPage \ref{ugLangLoopsForInXLPage} on +page~\pageref{ugLangLoopsForInXLPage} +\item ugLangLoopsForInPredPage \ref{ugLangLoopsForInPredPage} on +page~\pageref{ugLangLoopsForInPredPage} +\item ugLangLoopsParPage \ref{ugLangLoopsParPage} on +page~\pageref{ugLangLoopsParPage} +\end{itemize} +\index{pages!ugLangLoopsPage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsPage} +\index{ugLangLoopsPage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsPage}{5.4. Loops} +\beginscroll + +A \spadgloss{loop} is an expression that contains another expression, +called the {\it loop body}, which is to be evaluated zero or more +times. +All loops contain the \axiom{repeat} keyword and return \void{}. +Loops can contain inner loops to any depth. + +\beginImportant +The most basic loop is of the form +\centerline{{\axiom{repeat} {\it loopBody}}} +Unless {\it loopBody} contains a \axiom{break} or \axiom{return} expression, +the loop repeats forever. +The value returned by the loop is \void{}. +\endImportant + +\beginmenu + \menudownlink{{5.4.1. Compiling vs. Interpreting Loops}} +{ugLangLoopsCompIntPage} + \menudownlink{{5.4.2. return in Loops}}{ugLangLoopsReturnPage} + \menudownlink{{5.4.3. break in Loops}}{ugLangLoopsBreakPage} + \menudownlink{{5.4.4. break vs. {\tt =>} in Loop Bodies}} +{ugLangLoopsBreakVsPage} + \menudownlink{{5.4.5. More Examples of break}}{ugLangLoopsBreakMorePage} + \menudownlink{{5.4.6. iterate in Loops}}{ugLangLoopsIteratePage} + \menudownlink{{5.4.7. while Loops}}{ugLangLoopsWhilePage} + \menudownlink{{5.4.8. for Loops}}{ugLangLoopsForInPage} + \menudownlink{{5.4.9. for i in n..m repeat}}{ugLangLoopsForInNMPage} + \menudownlink{{5.4.10. for i in n..m by s repeat}}{ugLangLoopsForInNMSPage} + \menudownlink{{5.4.11. for i in n.. repeat}}{ugLangLoopsForInNPage} + \menudownlink{{5.4.12. for x in l repeat}}{ugLangLoopsForInXLPage} + \menudownlink{{5.4.13. ``Such that'' Predicates}}{ugLangLoopsForInPredPage} + \menudownlink{{5.4.14. Parallel Iteration}}{ugLangLoopsParPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsCompIntTitle}{Compiling vs. Interpreting Loops} +\newcommand{\ugLangLoopsCompIntNumber}{5.4.1.} + +@ +\section{Compiling vs. Interpreting Loops} +\label{ugLangLoopsCompIntPage} +\begin{itemize} +\item ugUserCompIntPage \ref{ugUserCompIntPage} on +page~\pageref{ugUserCompIntPage} +\end{itemize} +\index{pages!ugLangLoopsCompIntPage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsCompIntPage} +\index{ugLangLoopsCompIntPage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsCompIntPage}{5.4.1. Compiling vs. Interpreting Loops} +\beginscroll + +Axiom tries to determine completely the type of every +object in a loop and then to translate the loop body to LISP or even to +machine code. +This translation is called \spadglossSee{compilation}{compiler}. + +If Axiom decides that it cannot compile the loop, it issues a +message stating the problem and then the following message: +% +\centerline{{{\bf We will attempt to step through and interpret the code.}}} +% +It is still possible that Axiom can evaluate the loop but in +\spadgloss{interpret-code mode}. +See \downlink{``\ugUserCompIntTitle''}{ugUserCompIntPage} +in Section \ugUserCompIntNumber\ignore{ugUserCompInt} where +this is discussed in terms +of compiling versus interpreting functions. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsReturnTitle}{return in Loops} +\newcommand{\ugLangLoopsReturnNumber}{5.4.2.} + +@ +\section{return in Loops} +\label{ugLangLoopsReturnPage} +\begin{itemize} +\item ugUserBlocksPage \ref{ugUserBlocksPage} on +page~\pageref{ugUserBlocksPage} +\end{itemize} +\index{pages!ugLangLoopsReturnPage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsReturnPage} +\index{ugLangLoopsReturnPage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsReturnPage}{5.4.2. return in Loops} +\beginscroll + +A \axiom{return} expression is used to exit a function with +a particular value. +In particular, if a \axiom{return} is in a loop within the +\spadkey{return} +function, the loop is terminated whenever the \axiom{return} +is evaluated. +%> This is a bug! The compiler should never accept allow +%> Void to be the return type of a function when it has to use +%> resolve to determine it. +\xtc{ +Suppose we start with this. +}{ +\begin{spadsrc}[\bound{f}] +f() == + i := 1 + repeat + if factorial(i) > 1000 then return i + i := i + 1 +\end{spadsrc} +} +\xtc{ +When \axiom{factorial(i)} is big enough, control passes from +inside the loop all the way outside the function, returning the +value of \axiom{i} (or so we think). +}{ +\spadpaste{f() \free{f}} +} + +What went wrong? +Isn't it obvious that this function should return an integer? +Well, Axiom makes no attempt to analyze the structure of a +loop to determine if it always returns a value because, in +general, this is impossible. +So Axiom has this simple rule: the type of the function is +determined by the type of its body, in this case a block. +The normal value of a block is the value of its last expression, +in this case, a loop. +And the value of every loop is \void{}! +So the return type of \userfun{f} is \axiomType{Void}. + +There are two ways to fix this. +The best way is for you to tell Axiom what the return type +of \axiom{f} is. +You do this by giving \axiom{f} a declaration \axiom{f: () -> +Integer} prior to calling for its value. +This tells Axiom: ``trust me---an integer is returned.'' +We'll explain more about this in the next chapter. +Another clumsy way is to add a dummy expression as follows. + +\xtc{ +Since we want an integer, let's stick in a dummy final expression that is +an integer and will never be evaluated. +}{ +\begin{spadsrc}[\bound{f1}] +f() == + i := 1 + repeat + if factorial(i) > 1000 then return i + i := i + 1 + 0 +\end{spadsrc} +} +\xtc{ +When we try \userfun{f} again we get what we wanted. +See +\downlink{``\ugUserBlocksTitle''}{ugUserBlocksPage} +in Section \ugUserBlocksNumber\ignore{ugUserBlocks} +for more information. +}{ +\spadpaste{f() \free{f1}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsBreakTitle}{break in Loops} +\newcommand{\ugLangLoopsBreakNumber}{5.4.3.} + +@ +\section{break in Loops} +\label{ugLangLoopsBreakPage} +\begin{itemize} +\item ugLangLoopsReturnPage \ref{ugLangLoopsReturnPage} on +page~\pageref{ugLangLoopsReturnPage} +\end{itemize} +\index{pages!ugLangLoopsBreakPage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsBreakPage} +\index{ugLangLoopsBreakPage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsBreakPage}{5.4.3. break in Loops} +\beginscroll + +The \axiom{break} keyword is often more useful +\spadkey{break} +in terminating +a loop. +%> and more in keeping with the ideas of structured programming. +A \axiom{break} causes control to transfer to the expression +immediately following the loop. +As loops always return \void{}, +you cannot return a value with \axiom{break}. +That is, \axiom{break} takes no argument. + +\xtc{ +This example is a modification of the last example in +\texht{the previous section}{ +\downlink{``\ugLangLoopsReturnTitle''}{ugLangLoopsReturnPage} +in Section \ugLangLoopsReturnNumber\ignore{ugLangLoopsReturn}}. +Instead of using \axiom{return}, we'll use \axiom{break}. +}{ +\begin{spadsrc}[\bound{f1}] +f() == + i := 1 + repeat + if factorial(i) > 1000 then break + i := i + 1 + i +\end{spadsrc} +} +\xtc{ +The loop terminates when \axiom{factorial(i)} gets big enough, +the last line of the function evaluates to the corresponding ``good'' +value of \axiom{i}, and the function terminates, returning that value. +}{ +\spadpaste{f() \free{f1}} +} +\xtc{ +You can only use \axiom{break} to terminate the evaluation of one loop. +Let's consider a loop within a loop, that is, a loop with a nested loop. +First, we initialize two counter variables. +}{ +\spadpaste{(i,j) := (1, 1) \bound{i}\bound{j}} +} +\xtc{ +Nested loops must have multiple \axiom{break} +expressions at the appropriate nesting level. +How would you rewrite this so \axiom{(i + j) > 10} is only evaluated once? +}{ +\begin{spadsrc}[\free{i j}] +repeat + repeat + if (i + j) > 10 then break + j := j + 1 + if (i + j) > 10 then break + i := i + 1 +\end{spadsrc} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsBreakVsTitle}{break vs. {\tt =>} in Loop Bodies} +\newcommand{\ugLangLoopsBreakVsNumber}{5.4.4.} + +@ +\section{break vs. {\tt =>} in Loop Bodies} +\label{ugLangLoopsBreakVsPage} +\index{pages!ugLangLoopsBreakVsPage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsBreakVsPage} +\index{ugLangLoopsBreakVsPage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsBreakVsPage}{5.4.4. break vs. {\tt =>} in Loop Bodies} +\beginscroll + +Compare the following two loops: + +\begin{verbatim} +i := 1 i := 1 +repeat repeat + i := i + 1 i := i + 1 + i > 3 => i if i > 3 then break + output(i) output(i) +\end{verbatim} + +In the example on the left, the values +\mathOrSpad{2} and \mathOrSpad{3} for \axiom{i} are displayed +but then the \axiomSyntax{=>} does not allow control to reach the call to +\axiomFunFrom{output}{OutputForm} again. +The loop will not terminate +until you run out of space or interrupt the execution. +The variable \axiom{i} will continue to be incremented because +the \axiomSyntax{=>} only means to leave the {\it block,} not the loop. + +In the example on the right, +upon reaching \mathOrSpad{4}, the \axiom{break} will be +executed, and both the block and the loop will terminate. +This is one of the reasons why both \axiomSyntax{=>} and \axiom{break} are +provided. +Using a \axiom{while} clause (see below) with the \axiomSyntax{=>} +\spadkey{while} +lets you simulate the action of \axiom{break}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsBreakMoreTitle}{More Examples of break} +\newcommand{\ugLangLoopsBreakMoreNumber}{5.4.5.} + +@ +\section{More Examples of break} +\label{ugLangLoopsBreakMorePage} +\begin{itemize} +\item ugLangLoopsForInPage \ref{ugLangLoopsForInPage} on +page~\pageref{ugLangLoopsForInPage} +\end{itemize} +\index{pages!ugLangLoopsBreakMorePage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsBreakMorePage} +\index{ugLangLoopsBreakMorePage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsBreakMorePage}{5.4.5. More Examples of break} +\beginscroll + +Here we give four examples of \axiom{repeat} loops that +terminate when a value exceeds a given bound. + +\texht{\vskip 1pc}{} +\xtc{ +First, initialize \axiom{i} as the loop counter. +}{ +\spadpaste{i := 0 \bound{i}} +} +\xtc{ +Here is the first loop. +When the square of \axiom{i} exceeds \axiom{100}, the loop terminates. +}{ +\begin{spadsrc}[\free{i}\bound{i1}] +repeat + i := i + 1 + if i**2 > 100 then break +\end{spadsrc} +} +\xtc{ +Upon completion, \axiom{i} should have the value \axiom{11}. +}{ +\spadpaste{i \free{i1}} +} +% +% +\xtc{ +Do the same thing except use \axiomSyntax{=>} instead +an \axiom{if-then} expression. +}{ +\spadpaste{i := 0 \bound{i2}} +} +\xtc{ +}{ +\begin{spadsrc}[\free{i2}\bound{i3}] +repeat + i := i + 1 + i**2 > 100 => break +\end{spadsrc} +} +\xtc{ +}{ +\spadpaste{i \free{i3}} +} +% +% +\xtc{ +As a third example, we use a simple loop to compute \axiom{n!}. +}{ +\spadpaste{(n, i, f) := (100, 1, 1) \bound{n}\bound{i4}\bound{f}} +} +\xtc{ +Use \axiom{i} as the iteration variable and \axiom{f} +to compute the factorial. +}{ +\begin{spadsrc}[\bound{f1}\bound{i5}\free{f i4 n}] +repeat + if i > n then break + f := f * i + i := i + 1 +\end{spadsrc} +} +\xtc{ +Look at the value of \axiom{f}. +}{ +\spadpaste{f \free{f1}} +} +% +% +\xtc{ +Finally, we show an example of nested loops. +First define a four by four matrix. +}{ +\spadpaste{m := matrix [[21,37,53,14], [8,-24,22,-16], [2,10,15,14], [26,33,55,-13]] \bound{m2}} +} +\xtc{ +Next, set row counter \axiom{r} and column counter \axiom{c} to +\mathOrSpad{1}. +Note: if we were writing a function, these would all be local +variables rather than global workspace variables. +}{ +\spadpaste{(r, c) := (1, 1) \bound{r}\bound{c}} +} +\xtc{ +Also, let \axiom{lastrow} and +\axiom{lastcol} be the final row and column index. +}{ +\spadpaste{(lastrow, lastcol) := (nrows(m), ncols(m)) \bound{lastrow}\bound{lastcol}\free{m2}} +} +% +\xtc{ +Scan the rows looking for the first negative element. +We remark that you can reformulate this example in a better, more +concise form by using a \axiom{for} clause with \axiom{repeat}. +See +\downlink{``\ugLangLoopsForInTitle''}{ugLangLoopsForInPage} +in Section \ugLangLoopsForInNumber\ignore{ugLangLoopsForIn} +for more information. +}{ +\begin{spadsrc}[\free{m2 r c lastrow lastcol}] +repeat + if r > lastrow then break + c := 1 + repeat + if c > lastcol then break + if elt(m,r,c) < 0 then + output [r, c, elt(m,r,c)] + r := lastrow + break -- don't look any further + c := c + 1 + r := r + 1 +\end{spadsrc} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsIterateTitle}{iterate in Loops} +\newcommand{\ugLangLoopsIterateNumber}{5.4.6.} + +@ +\section{iterate in Loops} +\label{ugLangLoopsIteratePage} +\index{pages!ugLangLoopsIteratePage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsIteratePage} +\index{ugLangLoopsIteratePage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsIteratePage}{5.4.6. iterate in Loops} +\beginscroll + +Axiom provides an \axiom{iterate} expression that +\spadkey{iterate} +skips over the remainder of a loop body and starts the next loop iteration. +\xtc{ +We first initialize a counter. +}{ +\spadpaste{i := 0 \bound{i}} +} +\xtc{ +Display the even integers from \axiom{2} to \axiom{5}. +}{ +\begin{spadsrc}[\free{i}] +repeat + i := i + 1 + if i > 5 then break + if odd?(i) then iterate + output(i) +\end{spadsrc} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsWhileTitle}{while Loops} +\newcommand{\ugLangLoopsWhileNumber}{5.4.7.} + +@ +\section{while Loops} +\label{ugLangLoopsWhilePage} +\index{pages!ugLangLoopsWhilePage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsWhilePage} +\index{ugLangLoopsWhilePage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsWhilePage}{5.4.7. while Loops} +\beginscroll + +The \axiom{repeat} in a loop can be modified by adding one or +more \axiom{while} clauses. +\spadkey{while} +Each clause contains a \spadgloss{predicate} +immediately following the \axiom{while} keyword. +The predicate is tested {\it before} +the evaluation of the body of the loop. +The loop body is evaluated whenever the predicates in a \axiom{while} +clause are all \axiom{true}. + +\beginImportant +The syntax for a simple loop using \axiom{while} is +\centerline{{\axiom{while} {\it predicate} \axiom{repeat} {\it loopBody}}} +The {\it predicate} is evaluated before {\it loopBody} is evaluated. +A \axiom{while} loop terminates immediately when {\it predicate} +evaluates to \axiom{false} or when a \axiom{break} or \axiom{return} +expression is evaluated in {\it loopBody}. +The value returned by the loop is \void{}. +\endImportant + +\xtc{ +Here is a simple example of using \axiom{while} in a loop. +We first initialize the counter. +}{ +\spadpaste{i := 1 \bound{i}} +} +\xtc{ +The steps involved in computing this example are +(1) set \axiom{i} to \axiom{1}, (2) test the condition \axiom{i < 1} and +determine that it is not true, and (3) do not evaluate the +loop body and therefore do not display \axiom{"hello"}. +}{ +\begin{spadsrc}[\free{i}] +while i < 1 repeat + output "hello" + i := i + 1 +\end{spadsrc} +} +\xtc{ +If you have multiple predicates to be tested use the +logical \axiom{and} operation to separate them. +Axiom evaluates these predicates from left to right. +}{ +\spadpaste{(x, y) := (1, 1) \bound{x}\bound{y}} +} +\xtc{ +}{ +\begin{spadsrc}[\free{x y}] +while x < 4 and y < 10 repeat + output [x,y] + x := x + 1 + y := y + 2 +\end{spadsrc} +} +\xtc{ +A \axiom{break} expression can be included in a loop body to terminate a +loop even if the predicate in any \axiom{while} clauses are not \axiom{false}. +}{ +\spadpaste{(x, y) := (1, 1) \bound{x1}\bound{y1}} +} +\xtc{ +This loop has multiple \axiom{while} clauses and the loop terminates +before any one of their conditions evaluates to \axiom{false}. +}{ +\begin{spadsrc}[\free{x1 y1}] +while x < 4 while y < 10 repeat + if x + y > 7 then break + output [x,y] + x := x + 1 + y := y + 2 +\end{spadsrc} +} +\xtc{ +Here's a different version of the nested loops that looked +for the first negative element in a matrix. +}{ +\spadpaste{m := matrix [[21,37,53,14], [8,-24,22,-16], [2,10,15,14], [26,33,55,-13]] \bound{m2}} +} +\xtc{ +Initialized the row index to \axiom{1} and +get the number of rows and columns. +If we were writing a function, these would all be +local variables. +}{ +\spadpaste{r := 1 \bound{r}} +} +\xtc{ +}{ +\spadpaste{(lastrow, lastcol) := (nrows(m), ncols(m)) \bound{lastrow}\bound{lastcol}\free{m2}} +} +% +\xtc{ +Scan the rows looking for the first negative element. +}{ +\begin{spadsrc}[\free{m2 r lastrow lastcol}] +while r <= lastrow repeat + c := 1 -- index of first column + while c <= lastcol repeat + if elt(m,r,c) < 0 then + output [r, c, elt(m,r,c)] + r := lastrow + break -- don't look any further + c := c + 1 + r := r + 1 +\end{spadsrc} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsForInTitle}{for Loops} +\newcommand{\ugLangLoopsForInNumber}{5.4.8.} + +@ +\section{for Loops} +\label{ugLangLoopsForInPage} +\index{pages!ugLangLoopsForInPage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsForInPage} +\index{ugLangLoopsForInPage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsForInPage}{5.4.8. for Loops} +\beginscroll + +Axiom provides the \axiom{for} +\spadkey{for} +and \axiom{in} +\spadkey{in} +keywords in \axiom{repeat} loops, +allowing you to iterate across all +elements of a list, or to have a variable take on integral values +from a lower bound to an upper bound. +We shall refer to these modifying clauses of \axiom{repeat} loops as +\axiom{for} clauses. +These clauses can be present in addition to \axiom{while} clauses. +As with all other types of \axiom{repeat} loops, \axiom{break} can +\spadkey{break} +be used to prematurely terminate the evaluation of the loop. + +\beginImportant +The syntax for a simple loop using \axiom{for} is +\centerline{{\axiom{for} {\it iterator} \axiom{repeat} {\it loopBody}}} +The {\it iterator} has several forms. +Each form has an end test which is evaluated +before {\it loopBody} is evaluated. +A \axiom{for} loop terminates immediately when the end test +succeeds (evaluates to \axiom{true}) or when a \axiom{break} or \axiom{return} +expression is evaluated in {\it loopBody}. +The value returned by the loop is \void{}. +\endImportant + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsForInNMTitle}{for i in n..m repeat} +\newcommand{\ugLangLoopsForInNMNumber}{5.4.9.} + +@ +\section{for i in n..m repeat} +\label{ugLangLoopsForInNMPage} +\begin{itemize} +\item SegmentXmpPage \ref{SegmentXmpPage} on +page~\pageref{SegmentXmpPage} +\end{itemize} +\index{pages!ugLangLoopsForInNMPage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsForInNMPage} +\index{ugLangLoopsForInNMPage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsForInNMPage}{5.4.9. for i in n..m repeat} +\beginscroll + +If \axiom{for} +\spadkey{for} +is followed by a variable name, the \axiom{in} +\spadkey{in} +keyword and then an integer segment of the form \axiom{n..m}, +the end test for this loop is the predicate \axiom{i > m}. +The body of the loop is evaluated \axiom{m-n+1} times if this +number is greater than 0. +If this number is less than or equal to 0, the loop body is not evaluated +at all. + +The variable \axiom{i} has the value +\axiom{n, n+1, ..., m} for successive iterations +of the loop body. +The loop variable is a \spadgloss{local variable} +within the loop body: its value is not available outside the loop body +and its value and type within the loop body completely mask any outer +definition of a variable with the same name. + +% +\xtc{ +This loop prints the values of +\texht{${10}^3$, ${11}^3$, and $12^3$}{\axiom{10**3, 11**3, and 12**3}}: +}{ +\spadpaste{for i in 10..12 repeat output(i**3)} +} +% +\xtc{ +Here is a sample list. +}{ +\spadpaste{a := [1,2,3] \bound{a}} +} +\xtc{ +Iterate across this list, using \axiomSyntax{.} to access the elements of a list and +the \axiomFun{\#} operation to count its elements. +}{ +\spadpaste{for i in 1..\#a repeat output(a.i) \free{a}} +} +% +This type of iteration is applicable to anything that uses \axiomSyntax{.}. +You can also use it with functions that use indices to extract elements. +% +\xtc{ +Define \axiom{m} to be a matrix. +}{ +\spadpaste{m := matrix [[1,2],[4,3],[9,0]] \bound{m}} +} +\xtc{ +Display the rows of \axiom{m}. +}{ +\spadpaste{for i in 1..nrows(m) repeat output row(m,i) \free{m}} +} +% +You can use \axiom{iterate} with \axiom{for}-loops. +\spadkey{iterate} +\xtc{ +Display the even integers in a segment. +}{ +\begin{spadsrc} +for i in 1..5 repeat + if odd?(i) then iterate + output(i) +\end{spadsrc} +} + +See \downlink{`Segment'}{SegmentXmpPage}\ignore{Segment} +for more information about segments. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsForInNMSTitle}{for i in n..m by s repeat} +\newcommand{\ugLangLoopsForInNMSNumber}{5.4.10.} + +@ +\section{for i in n..m by s repeat} +\label{ugLangLoopsForInNMSPage} +\index{pages!ugLangLoopsForInNMSPage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsForInNMSPage} +\index{ugLangLoopsForInNMSPage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsForInNMSPage}{5.4.10. for i in n..m by s repeat} +\beginscroll + +By default, the difference between values taken on by a variable in loops +such as \axiom{for i in n..m repeat ...} is \mathOrSpad{1}. +It is possible to supply another, possibly negative, step value by using +the \axiom{by} +\spadkey{by} +keyword along with \axiom{for} and \axiom{in}. +Like the upper and lower bounds, the step value following the +\axiom{by} keyword must be an integer. +Note that the loop +\axiom{for i in 1..2 by 0 repeat output(i)} +will not terminate by itself, as the step value does not change the index +from its initial value of \mathOrSpad{1}. + +\xtc{ +This expression displays the odd integers between two bounds. +}{ +\spadpaste{for i in 1..5 by 2 repeat output(i)} +} +\xtc{ +Use this to display the numbers in reverse order. +}{ +\spadpaste{for i in 5..1 by -2 repeat output(i)} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsForInNTitle}{for i in n.. repeat} +\newcommand{\ugLangLoopsForInNNumber}{5.4.11.} + +@ +\section{for i in n.. repeat} +\label{ugLangLoopsForInNPage} +\index{pages!ugLangLoopsForInNPage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsForInNPage} +\index{ugLangLoopsForInNPage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsForInNPage}{5.4.11. for i in n.. repeat} +\beginscroll + +If the value after the \axiomSyntax{..} +is omitted, the loop has no end test. +A potentially infinite loop is thus created. +The variable is given the successive values \axiom{n, n+1, n+2, ...} +and the loop is terminated only if a \axiom{break} or \axiom{return} +expression is evaluated in the loop body. +However you may also add some other modifying clause on the +\axiom{repeat} (for example, a \axiom{while} clause) to stop the loop. + +\xtc{ +This loop displays the integers greater than or equal to \axiom{15} +and less than the first prime greater than \axiom{15}. +}{ +\spadpaste{for i in 15.. while not prime?(i) repeat output(i)} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsForInXLTitle}{for x in l repeat} +\newcommand{\ugLangLoopsForInXLNumber}{5.4.12.} + +@ +\section{for x in l repeat} +\label{ugLangLoopsForInXLPage} +\index{pages!ugLangLoopsForInXLPage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsForInXLPage} +\index{ugLangLoopsForInXLPage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsForInXLPage}{5.4.12. for x in l repeat} +\beginscroll + +Another variant of the \axiom{for} loop has the form: +\centerline{{{\it \axiom{for} x \axiom{in} list \axiom{repeat} loopBody}}} +This form is used when you want to iterate directly over the +elements of a list. +In this form of the \axiom{for} loop, the variable +\axiom{x} takes on the value of each successive element in \axiom{l}. +The end test is most simply stated in English: ``are there no more +\axiom{x} in \axiom{l}?'' + +\xtc{ +If \axiom{l} is this list, +}{ +\spadpaste{l := [0,-5,3] \bound{l}} +} +\xtc{ +display all elements of \axiom{l}, one per line. +}{ +\spadpaste{for x in l repeat output(x) \free{l}} +} + +Since the list constructing expression \axiom{expand [n..m]} creates the +list \axiom{[n, n+1, ..., m]}\footnote{This list is empty if \axiom{n > +m}.}, you might be tempted to think that the loops +\begin{verbatim} +for i in n..m repeat output(i) +\end{verbatim} +and +\begin{verbatim} +for x in expand [n..m] repeat output(x) +\end{verbatim} +are equivalent. +The second form first creates the list +\axiom{expand [n..m]} (no matter how large it might be) and +then does the iteration. +The first form potentially runs in much less space, as the index variable +\axiom{i} is simply incremented once per loop and the list is not actually +created. +Using the first form is much more efficient. +% +\xtc{ +Of course, sometimes you really want to iterate across a specific list. +This displays each of the factors of \axiom{2400000}. +}{ +\spadpaste{for f in factors(factor(2400000)) repeat output(f)} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsForInPredTitle}{``Such that'' Predicates} +\newcommand{\ugLangLoopsForInPredNumber}{5.4.13.} + +@ +\section{``Such that'' Predicates} +\label{ugLangLoopsForInPredPage} +\index{pages!ugLangLoopsForInPredPage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsForInPredPage} +\index{ugLangLoopsForInPredPage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsForInPredPage}{5.4.13. ``Such that'' Predicates} +\beginscroll + +A \axiom{for} loop can be followed by a \axiomSyntax{|} and then a +predicate. +The predicate qualifies the use of the values from the iterator following +the \axiom{for}. +Think of the vertical bar +\axiomSyntax{|} as the phrase ``such that.'' +\xtc{ +This loop expression +prints out the integers \axiom{n} in the given segment +such that \axiom{n} is odd. +}{ +\spadpaste{for n in 0..4 | odd? n repeat output n} +} + +\beginImportant +A \axiom{for} loop can also be written +\centerline{{\axiom{for} {\it iterator} \axiom{|} {\it predicate} \axiom{repeat} {\it loopBody}}} +which is equivalent to: +\centerline{{\axiom{for} {\it iterator} \axiom{repeat if}}} +\centerline{{{\it predicate} \axiom{then} {\it loopBody} \axiom{else} \axiom{iterate}}} +\endImportant + +The predicate need not refer only to the variable in the \axiom{for} clause: +any variable in an outer scope can be part of the predicate. +\xtc{ +In this example, the predicate on the inner \axiom{for} loop uses +\axiom{i} from the outer loop and the \axiom{j} from the \axiom{for} +clause that it directly modifies. +}{ +\begin{spadsrc} +for i in 1..50 repeat + for j in 1..50 | factorial(i+j) < 25 repeat + output [i,j] +\end{spadsrc} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangLoopsParTitle}{Parallel Iteration} +\newcommand{\ugLangLoopsParNumber}{5.4.14.} + +@ +\section{Parallel Iteration} +\label{ugLangLoopsParPage} +\begin{itemize} +\item ugLangLoopsForInPredPage \ref{ugLangLoopsForInPredPage} on +page~\pageref{ugLangLoopsForInPredPage} +\end{itemize} +\index{pages!ugLangLoopsParPage!ug05.ht} +\index{ug05.ht!pages!ugLangLoopsParPage} +\index{ugLangLoopsParPage!ug05.ht!pages} +<>= +\begin{page}{ugLangLoopsParPage}{5.4.14. Parallel Iteration} +\beginscroll + +The last example of +\texht{the previous section}{ +\downlink{``\ugLangLoopsForInPredTitle''}{ugLangLoopsForInPredPage} +in Section \ugLangLoopsForInPredNumber\ignore{ugLangLoopsForInPred}} +gives an example of +\spadgloss{nested iteration}: a loop is contained +in another loop. +Sometimes you want to iterate across two lists in parallel, or perhaps +you want to traverse a list while incrementing a variable. + +\beginImportant +The general syntax of a repeat loop is +\centerline{{{\tt \subscriptIt{iterator}{1} \subscriptIt{iterator}{2} \ldots \subscriptIt{iterator}{N} repeat {\it loopBody}}}} +where each {\it iterator} is either a \axiom{for} or a \axiom{while} clause. +The loop terminates immediately when the end test of any {\it iterator} +succeeds or when a \axiom{break} or \axiom{return} expression is evaluated +in {\it loopBody}. +The value returned by the loop is \void{}. +\endImportant + +\xtc{ +Here we write a loop to iterate across +two lists, computing the sum of the pairwise product +of elements. Here is the first list. +}{ +\spadpaste{l := [1,3,5,7] \bound{l}} +} +\xtc{ +And the second. +}{ +\spadpaste{m := [100,200] \bound{m}} +} +\xtc{ +The initial value of the sum counter. +}{ +\spadpaste{sum := 0 \bound{sum}} +} +\xtc{ +The last two elements of \axiom{l} are not used in the calculation +because \axiom{m} has two fewer elements than \axiom{l}. +}{ +\begin{spadsrc}[\bound{doit}\free{sum l m}] +for x in l for y in m repeat + sum := sum + x*y +\end{spadsrc} +} +\xtc{ +Display the ``dot product.'' +}{ +\spadpaste{sum \free{doit}} +} + +\xtc{ +Next, we write a loop to compute the sum of the products of the loop +elements with +their positions in the loop. +}{ +\spadpaste{l := [2,3,5,7,11,13,17,19,23,29,31,37] \bound{l1}} +} +\xtc{ +The initial sum. +}{ +\spadpaste{sum := 0 \bound{sum1}} +} +\xtc{ +Here looping stops when the list \axiom{l} is exhausted, even though +the \axiom{for i in 0..} specifies no terminating condition. +}{ +\spadpaste{for i in 0.. for x in l repeat sum := i * x \bound{doit1}\free{sum1 l1}} +} +\xtc{ +Display this weighted sum. +}{ +\spadpaste{sum \free{doit1}} +} + +When \axiomSyntax{|} is used to qualify any of the \axiom{for} clauses in a +parallel iteration, the variables in the predicates can be from an outer +scope or from a \axiom{for} clause in or to the left of a modified clause. + +This is correct: +\begin{verbatim} +for i in 1..10 repeat + for j in 200..300 | odd? (i+j) repeat + output [i,j] +\end{verbatim} +This is not correct since the variable \axiom{j} has not been +defined outside the inner loop. +\begin{verbatim} +for i in 1..10 | odd? (i+j) repeat -- wrong, j not defined + for j in 200..300 repeat + output [i,j] +\end{verbatim} + +%>% ********************************************************************* +%>\head{subsection}{Mixing Loop Modifiers}{ugLangLoopsMix} +%>% ********************************************************************* + +\xtc{ +This example shows that it is possible to mix several of the +forms of \axiom{repeat} modifying clauses on a loop. +}{ +\begin{spadsrc} +for i in 1..10 + for j in 151..160 | odd? j + while i + j < 160 repeat + output [i,j] +\end{spadsrc} +} +% +Here are useful rules for composing loop expressions: +\indent{4} +\beginitems +\item[1. ] \axiom{while} predicates can only refer to variables that +are global (or in an outer scope) +or that are defined in \axiom{for} clauses to the left of the +predicate. +\item[2. ] A ``such that'' predicate (something following \axiomSyntax{|}) +must directly follow a \axiom{for} clause and can only refer to +variables that are global (or in an outer scope) +or defined in the modified \axiom{for} clause +or any \axiom{for} clause to the left. +\enditems +\indent{0} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangItsTitle}{Creating Lists and Streams with Iterators} +\newcommand{\ugLangItsNumber}{5.5.} + +@ +\section{Creating Lists and Streams with Iterators} +\label{ugLangItsPage} +\begin{itemize} +\item ugLangLoopsPage \ref{ugLangLoopsPage} on +page~\pageref{ugLangLoopsPage} +\item ListXmpPage \ref{ListXmpPage} on +page~\pageref{ListXmpPage} +\item StreamXmpPage \ref{StreamXmpPage} on +page~\pageref{StreamXmpPage} +\end{itemize} +\index{pages!ugLangItsPage!ug05.ht} +\index{ug05.ht!pages!ugLangItsPage} +\index{ugLangItsPage!ug05.ht!pages} +<>= +\begin{page}{ugLangItsPage}{5.5. Creating Lists and Streams with Iterators} +\beginscroll + +All of what we did for loops in +\downlink{``\ugLangLoopsTitle''}{ugLangLoopsPage} +in Section \ugLangLoopsNumber\ignore{ugLangLoops} +can be transformed into expressions that create lists +and streams. +The \axiom{repeat,} \axiom{break} or \axiom{iterate} words are not used but +all the other ideas carry over. +Before we give you the general rule, here are some examples which +give you the idea. + +\xtc{ +This creates a simple list of the integers from \axiom{1} to \axiom{10}. +}{ +\spadpaste{list := [i for i in 1..10] \bound{list}} +} +\xtc{ +Create a stream of the integers greater than or equal to \axiom{1}. +}{ +\spadpaste{stream := [i for i in 1..] \bound{stream}} +} +\xtc{ +This is a list of the prime integers between \axiom{1} and \axiom{10}, +inclusive. +}{ +\spadpaste{[i for i in 1..10 | prime? i]} +} +\xtc{ +This is a stream of the prime integers greater than or equal to \axiom{1}. +}{ +\spadpaste{[i for i in 1.. | prime? i]} +} +\xtc{ +This is a list of the integers between \axiom{1} and \axiom{10}, +inclusive, whose squares are less than \axiom{700}. +}{ +\spadpaste{[i for i in 1..10 while i*i < 700]} +} +\xtc{ +This is a stream of the integers greater than or equal to \axiom{1} +whose squares are less than \axiom{700}. +}{ +\spadpaste{[i for i in 1.. while i*i < 700]} +} + +Got the idea? +Here is the general rule. + +\beginImportant +The general syntax of a collection is +\centerline{{{\tt [ {\it collectExpression} \subscriptIt{iterator}{1} \subscriptIt{iterator}{2} \ldots \subscriptIt{iterator}{N} ]}}} +where each \subscriptIt{iterator}{i} is either a \axiom{for} or a +\axiom{while} clause. +The loop terminates immediately when the end test of any +\subscriptIt{iterator}{i} succeeds or when a \axiom{return} expression is +evaluated in {\it collectExpression}. +The value returned by the collection is either a list or a stream of +elements, one for each iteration of the {\it collectExpression}. +\endImportant + +Be careful when you use \axiom{while} +to create a stream. +By default, Axiom tries to compute and display the first ten elements +of a stream. +If the \axiom{while} condition is not satisfied quickly, Axiom +can spend a long (possibly infinite) time trying to compute +the elements. +Use \spadcmd{)set streams calculate} to change the default +to something else. +This also affects the number of terms computed and displayed for power +series. +For the purposes of this book, we have used this system +command to display fewer than ten terms. +\xtc{ +Use nested iterators to create lists of +lists which can then be given as an argument to \axiomFun{matrix}. +}{ +\spadpaste{matrix [[x**i+j for i in 1..3] for j in 10..12]} +} +\xtc{ +You can also create lists of streams, streams of lists and +streams of streams. +Here is a stream of streams. +}{ +\spadpaste{[[i/j for i in j+1..] for j in 1..]} +} +\xtc{ +You can use parallel iteration across lists and streams to create +new lists. +}{ +\spadpaste{[i/j for i in 3.. by 10 for j in 2..]} +} +\xtc{ +Iteration stops if the end of a list or stream is reached. +}{ +\spadpaste{[i**j for i in 1..7 for j in 2.. ]} +} +%\xtc{ +%or a while condition fails. +%}{ +%\spadcommand{[i**j for i in 1.. for j in 2.. while i + j < 5 ]} +%} +\xtc{ +As with loops, you can combine these modifiers to make very +complicated conditions. +}{ +\spadpaste{[[[i,j] for i in 10..15 | prime? i] for j in 17..22 | j = squareFreePart j]} +} + +See \downlink{`List'}{ListXmpPage}\ignore{List} and +\downlink{`Stream'}{StreamXmpPage}\ignore{Stream} +for more information on creating and +manipulating lists and streams, respectively. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugLangStreamsPrimesTitle}{An Example: Streams of Primes} +\newcommand{\ugLangStreamsPrimesNumber}{5.6.} + +@ +\section{An Example: Streams of Primes} +\label{ugLangStreamsPrimesPage} +\index{pages!ugLangStreamsPrimesPage!ug05.ht} +\index{ug05.ht!pages!ugLangStreamsPrimesPage} +\index{ugLangStreamsPrimesPage!ug05.ht!pages} +<>= +\begin{page}{ugLangStreamsPrimesPage}{5.6. An Example: Streams of Primes} +\beginscroll + +We conclude this chapter with an example of the creation and manipulation +of infinite streams of prime integers. +This might be useful for experiments with numbers or other applications +where you are using sequences of primes over and over again. +As for all streams, the stream of primes is only computed as far out as you +need. +Once computed, however, all the primes up to that point are saved for +future reference. + +Two useful operations provided by the Axiom library are +\axiomFunFrom{prime?}{IntegerPrimesPackage} and +\axiomFunFrom{nextPrime}{IntegerPrimesPackage}. +A straight-forward way to create a stream of +prime numbers is to start with the stream of positive integers \axiom{[2,..]} and +filter out those that are prime. +\xtc{ +Create a stream of primes. +}{ +\spadpaste{primes : Stream Integer := [i for i in 2.. | prime? i]} +} +A more elegant way, however, is to use the \axiomFunFrom{generate}{Stream} +operation from \axiomType{Stream}. +Given an initial value \axiom{a} and a function \axiom{f}, +\axiomFunFrom{generate}{Stream} +constructs the stream \axiom{[a, f(a), f(f(a)), ...]}. +This function gives you the quickest method of getting the stream of primes. +\xtc{ +This is how you use +\axiomFunFrom{generate}{Stream} to +generate an infinite stream of primes. +}{ +\spadpaste{primes := generate(nextPrime,2)} +} +\xtc{ +Once the stream is generated, you might only be interested in +primes starting at a particular value. +}{ +\spadpaste{smallPrimes := [p for p in primes | p > 1000] \bound{smallPrimes}} +} +\xtc{ +Here are the first 11 primes greater than 1000. +}{ +\spadpaste{[p for p in smallPrimes for i in 1..11] \free{smallPrimes}} +} +\xtc{ +Here is a stream of primes between 1000 and 1200. +}{ +\spadpaste{[p for p in smallPrimes while p < 1200] \free{smallPrimes}} +} +\xtc{ +To get these expanded into a finite stream, +you call \axiomFunFrom{complete}{Stream} on the stream. +}{ +\spadpaste{complete \%} +} +\xtc{ +Twin primes are consecutive odd number pairs which are prime. +Here is the stream of twin primes. +}{ +\spadpaste{twinPrimes := [[p,p+2] for p in primes | prime?(p + 2)]} +} +\xtc{ +Since we already have the primes computed we can +avoid the call to \axiomFunFrom{prime?}{IntegerPrimesPackage} +by using a double iteration. +This time we'll just generate a stream of the first of the twin primes. +}{ +\spadpaste{firstOfTwins:= [p for p in primes for q in rest primes | q=p+2]} +} + +Let's try to compute the infinite stream of triplet primes, +the set of primes \axiom{p} such that \axiom{[p,p+2,p+4]} +are primes. For example, \axiom{[3,5,7]} is a triple prime. +We could do this by a triple \axiom{for} iteration. +A more economical way is to use \userfun{firstOfTwins}. +This time however, put a semicolon at the end of the line. + +\xtc{Create the stream of firstTriplets. +Put a semicolon at the end so that no +elements are computed. +}{ +\spadpaste{firstTriplets := [p for p in firstOfTwins for q in rest firstOfTwins | q = p+2];} +} + +What happened? +As you know, by default +Axiom displays the first ten +elements of a stream when you first display it. +And, therefore, it needs to compute them! +If you want {\it no} elements computed, just terminate the expression by a +semicolon (\axiomSyntax{;}).\footnote{ +Why does this happen? The semi-colon prevents the display of the +result of evaluating the expression. +Since no stream elements are needed for display (or anything else, so far), +none are computed. +} + +\xtc{ +Compute the first triplet prime. +}{ +\spadpaste{firstTriplets.1} +} + +If you want to compute another, just ask for it. +But wait a second! +Given three consecutive odd integers, one of them must be divisible +by 3. Thus there is only one triplet prime. +But suppose that you did not know this and wanted to know what was the +tenth triplet prime. +\begin{verbatim} +firstTriples.10 +\end{verbatim} +To compute the tenth triplet prime, Axiom first must compute the second, +the third, and so on. +But since there isn't even a second triplet prime, Axiom will +compute forever. +Nonetheless, this effort can produce a useful result. +After waiting a bit, hit +\texht{\fbox{\bf Ctrl}--\fbox{\bf c}}{{\bf Ctrl-c}}. +The system responds as follows. +\begin{verbatim} + >> System error: + Console interrupt. + You are being returned to the top level of + the interpreter. +\end{verbatim} +Let's say that you want to know how many primes have been computed. +Issue +\begin{verbatim} +numberOfComputedEntries primes +\end{verbatim} +and, for this discussion, let's say that the result is \axiom{2045.} +\xtc{ +How big is the \eth{\axiom{2045}} prime? +}{ +\spadpaste{primes.2045} +} + +What you have learned is that there are no triplet primes between 5 and +17837. +Although this result is well known (some might even say trivial), there +are many experiments you could make where the result is not known. +What you see here is a paradigm for testing of hypotheses. +Here our hypothesis could have been: ``there is more than one triplet +prime.'' +We have tested this hypothesis for 17837 cases. +With streams, you can let your machine run, interrupt it to see how far +it has progressed, +then start it up and let it continue from where it left off. + +%> RDJ note to RSS: +%> Expressions not statements or lines-- +%> By an expression I mean any syntactically correct program fragment. +%> Everything in Axiom is an expression since every fragment has a value and a type. +%> In most languages including LISP, a "statement" is different from an expression: +%> it is executed for side-effect only and an error is incurred if you assign it a value. +%> This "gimmick" takes care of incomplete expressions such as "if x > 0 then y" in blocks. +%> In LISP, "u := (if x > 0 then y)" is illegal but in Axiom it is legal. +%> Also, in Axiom the value of a repeat loop is void even though you might be +%> be able to prove that it always returns a valid value (you have an example of this)! +%> This will be considered a bug not a feature. But it is how things stand. +%> In any case---this point should be in a box somewhere since it is key +%> to a user's understanding to the language. I am not sure where. You only +%> gain an appreciation for it after are awhile in chapter 5. +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 6 (ug06.ht)} +<>= +\newcommand{\pred}[1]{\subscriptIt{pred}{#1}} +\newcommand{\expr}[1]{\subscriptIt{expression}{#1}} +\newcommand{\ugUserTitle}{User-Defined Functions, Macros and Rules} +\newcommand{\ugUserNumber}{6.} + +@ +\section{User-Defined Functions, Macros and Rules} +\label{ugUserPage} +\begin{itemize} +\item ugUserFunMacPage \ref{ugUserFunMacPage} on +page~\pageref{ugUserFunMacPage} +\item ugUserMacrosPage \ref{ugUserMacrosPage} on +page~\pageref{ugUserMacrosPage} +\item ugUserIntroPage \ref{ugUserIntroPage} on +page~\pageref{ugUserIntroPage} +\item ugUserDeclarePage \ref{ugUserDeclarePage} on +page~\pageref{ugUserDeclarePage} +\item ugUserOnePage \ref{ugUserOnePage} on +page~\pageref{ugUserOnePage} +\item ugUserDecUndecPage \ref{ugUserDecUndecPage} on +page~\pageref{ugUserDecUndecPage} +\item ugUserDecOpersPage \ref{ugUserDecOpersPage} on +page~\pageref{ugUserDecOpersPage} +\item ugUserDelayPage \ref{ugUserDelayPage} on +page~\pageref{ugUserDelayPage} +\item ugUserUsePage \ref{ugUserUsePage} on +page~\pageref{ugUserUsePage} +\item ugUserCompIntPage \ref{ugUserCompIntPage} on +page~\pageref{ugUserCompIntPage} +\item ugUserPiecePage \ref{ugUserPiecePage} on +page~\pageref{ugUserPiecePage} +\item ugUserCachePage \ref{ugUserCachePage} on +page~\pageref{ugUserCachePage} +\item ugUserRecurPage \ref{ugUserRecurPage} on +page~\pageref{ugUserRecurPage} +\item ugUserMakePage \ref{ugUserMakePage} on +page~\pageref{ugUserMakePage} +\item ugUserBlocksPage \ref{ugUserBlocksPage} on +page~\pageref{ugUserBlocksPage} +\item ugUserFreeLocalPage \ref{ugUserFreeLocalPage} on +page~\pageref{ugUserFreeLocalPage} +\item ugUserAnonPage \ref{ugUserAnonPage} on +page~\pageref{ugUserAnonPage} +\item ugUserDatabasePage \ref{ugUserDatabasePage} on +page~\pageref{ugUserDatabasePage} +\item ugUserTrianglePage \ref{ugUserTrianglePage} on +page~\pageref{ugUserTrianglePage} +\item ugUserPalPage \ref{ugUserPalPage} on +page~\pageref{ugUserPalPage} +\item ugUserRulesPage \ref{ugUserRulesPage} on +page~\pageref{ugUserRulesPage} +\end{itemize} +\index{pages!ugUserPage!ug06.ht} +\index{ug06.ht!pages!ugUserPage} +\index{ugUserPage!ug06.ht!pages} +<>= +\begin{page}{ugUserPage}{6. User-Defined Functions, Macros and Rules} +\beginscroll + +In this chapter we show you how to write functions and macros, +and we explain how Axiom looks for and applies them. +We show some simple one-line examples of functions, together +with larger ones that are defined piece-by-piece or through the use of +piles. + +\beginmenu + \menudownlink{{6.1. Functions vs. Macros}}{ugUserFunMacPage} + \menudownlink{{6.2. Macros}}{ugUserMacrosPage} + \menudownlink{{6.3. Introduction to Functions}}{ugUserIntroPage} + \menudownlink{{6.4. Declaring the Type of Functions}}{ugUserDeclarePage} + \menudownlink{{6.5. One-Line Functions}}{ugUserOnePage} + \menudownlink{{6.6. Declared vs. Undeclared Functions}}{ugUserDecUndecPage} + \menudownlink{{6.7. Functions vs. Operations}}{ugUserDecOpersPage} + \menudownlink{{6.8. Delayed Assignments vs. Functions with No Arguments}} +{ugUserDelayPage} + \menudownlink{{6.9. How Axiom Determines What Function to Use}} +{ugUserUsePage} + \menudownlink{{6.10. Compiling vs. Interpreting}}{ugUserCompIntPage} + \menudownlink{{6.11. Piece-Wise Function Definitions}}{ugUserPiecePage} + \menudownlink{{6.12. Caching Previously Computed Results}}{ugUserCachePage} + \menudownlink{{6.13. Recurrence Relations}}{ugUserRecurPage} + \menudownlink{{6.14. Making Functions from Objects}}{ugUserMakePage} + \menudownlink{{6.15. Functions Defined with Blocks}}{ugUserBlocksPage} + \menudownlink{{6.16. Free and Local Variables}}{ugUserFreeLocalPage} + \menudownlink{{6.17. Anonymous Functions}}{ugUserAnonPage} + \menudownlink{{6.18. Example: A Database}}{ugUserDatabasePage} + \menudownlink{{6.19. Example: A Famous Triangle}}{ugUserTrianglePage} + \menudownlink{{6.20. Example: Testing for Palindromes}}{ugUserPalPage} + \menudownlink{{6.21. Rules and Pattern Matching}}{ugUserRulesPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserFunMacTitle}{Functions vs. Macros} +\newcommand{\ugUserFunMacNumber}{6.1.} + +@ +\section{Functions vs. Macros} +\label{ugUserFunMacPage} +\begin{itemize} +\item ugUserAnonPage \ref{ugUserAnonPage} on +page~\pageref{ugUserAnonPage} +\item ExitXmpPage \ref{ExitXmpPage} on +page~\pageref{ExitXmpPage} +\item VoidXmpPage \ref{VoidXmpPage} on +page~\pageref{VoidXmpPage} +\end{itemize} +\index{pages!ugUserFunMacPage!ug06.ht} +\index{ug06.ht!pages!ugUserFunMacPage} +\index{ugUserFunMacPage!ug06.ht!pages} +<>= +\begin{page}{ugUserFunMacPage}{6.1. Functions vs. Macros} +\beginscroll + +A function is a program to perform some +computation. +Most functions have names so that it is easy to refer to them. +A simple example of a function is one named +\axiomFunFrom{abs}{Integer} which +computes the absolute value of an integer. +% +\xtc{ +This is a use of the ``absolute value'' library function for integers. +}{ +\spadpaste{abs(-8)} +} +\xtc{ +This is an unnamed function that does the same thing, using the +``maps-to'' syntax \axiomSyntax{+->} that we discuss in +\downlink{``\ugUserAnonTitle''}{ugUserAnonPage} +in Section \ugUserAnonNumber\ignore{ugUserAnon}. +}{ +\spadpaste{(x +-> if x < 0 then -x else x)(-8)} +} +% +Functions can be used alone or serve as the building blocks for larger +programs. +Usually they return a value that you might want to use in the next stage +of a computation, but not always (for example, see +\downlink{`Exit'}{ExitXmpPage}\ignore{Exit} and +\downlink{`Void'}{VoidXmpPage}\ignore{Void}). +They may also read data from your keyboard, move information from one +place to another, or format and display results on your screen. + +In Axiom, as in mathematics, functions +are usually \spadglossSee{parameterized}{parameterized form}. +Each time you {\it call} (some people say \spadgloss{apply} or +\spadglossSee{invoke}{invocation}) a function, you give +values to the parameters (variables). +Such a value is called an \spadgloss{argument} of +the function. +Axiom uses the arguments for the computation. +In this way you get different results depending on what you ``feed'' the +function. + +Functions can have local variables or refer to global variables in the +workspace. +Axiom can often \spadglossSee{compile}{compiler} functions so that +they execute very efficiently. +Functions can be passed as arguments to other functions. + +Macros are textual substitutions. +They are used to clarify the meaning of constants or expressions and to be +templates for frequently used expressions. +Macros can be parameterized but they are not objects that can be passed as +arguments to functions. +In effect, macros are extensions to the Axiom expression parser. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserMacrosTitle}{Macros} +\newcommand{\ugUserMacrosNumber}{6.2.} + +@ +\section{Macros} +\label{ugUserMacrosPage} +\index{pages!ugUserMacrosPage!ug06.ht} +\index{ug06.ht!pages!ugUserMacrosPage} +\index{ugUserMacrosPage!ug06.ht!pages} +<>= +\begin{page}{ugUserMacrosPage}{6.2. Macros} +\beginscroll + +A \spadgloss{macro} provides general textual substitution of +an Axiom expression for a name. +You can think of a macro as being a generalized abbreviation. +You can only have one macro in your workspace with +a given name, no matter how many arguments it has. + +\beginImportant +The two general forms for macros are +\centerline{{{\tt macro} {\it name} {\tt ==} {\it body} }} +\centerline{{{\tt macro} {\it name(arg1,...)} {\tt ==} {\it body}}} +where the body of the macro can be any Axiom expression. +\endImportant + +% +\xtc{ +For example, suppose you decided that you +like to use \axiom{df} for \axiomFun{D}. +You define the macro \axiom{df} like this. +}{ +\spadpaste{macro df == D \bound{df}} +} +\xtc{ +Whenever you type \axiom{df}, the system expands it to +\axiomFun{D}. +}{ +\spadpaste{df(x**2 + x + 1,x) \free{df}} +} +\xtc{ +Macros can be parameterized and so can be used for many different +kinds of objects. +}{ +\spadpaste{macro ff(x) == x**2 + 1 \bound{ff}} +} +\xtc{ +Apply it to a number, a symbol, or an expression. +}{ +\spadpaste{ff z \free{ff}} +} +\xtc{ +Macros can also be nested, but you get an error message if you +run out of space because of an infinite nesting loop. +}{ +\spadpaste{macro gg(x) == ff(2*x - 2/3) \bound{gg}\free{ff}} +} +\xtc{ +This new macro is fine as it does not produce a loop. +}{ +\spadpaste{gg(1/w) \free{gg}} +} +% +\xtc{ +This, however, loops since \axiom{gg} is +defined in terms of \axiom{ff}. +}{ +\spadpaste{macro ff(x) == gg(-x) \free{gg}} +} +\xtc{ +The body of a macro can be a block. +}{ +\spadpaste{macro next == (past := present; present := future; future := past + present) \bound{next}} +} +\xtc{ +Before entering \axiom{next}, we need +values for \axiom{present} and \axiom{future}. +}{ +\spadpaste{present : Integer := 0 \bound{present}} +} +\xtc{ +}{ +\spadpaste{future : Integer := 1 \bound{future}} +} +\xtc{ +Repeatedly evaluating \axiom{next} produces the next Fibonacci number. +}{ +\spadpaste{next \free{future}\free{present}} +} +\xtc{ +And the next one. +}{ +\spadpaste{next \free{future}\free{present}} +} +\xtc{ +Here is the infinite stream of the rest of the Fibonacci numbers. +}{ +\spadpaste{[next for i in 1..] \free{future}\free{present}} +} +\xtc{ +Bundle all the above lines into a single macro. +}{ +\begin{spadsrc}[\bound{fibstr}] +macro fibStream == + present : Integer := 1 + future : Integer := 1 + [next for i in 1..] where + macro next == + past := present + present := future + future := past + present +\end{spadsrc} +} +\xtc{ +Use \axiomFunFrom{concat}{Stream} to start with the first two +Fibonacci numbers. +}{ +\spadpaste{concat([0,1],fibStream) \free{fibstr}} +} +\xtc{ +An easier way to compute these numbers is to +use the library operation \axiomFun{fibonacci}. +}{ +\spadpaste{[fibonacci i for i in 1..]} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserIntroTitle}{Introduction to Functions} +\newcommand{\ugUserIntroNumber}{6.3.} + +@ +\section{Introduction to Functions} +\label{ugUserIntroPage} +\begin{itemize} +\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on +page~\pageref{ugTypesPkgCallPage} +\item ugUserAnonPage \ref{ugUserAnonPage} on +page~\pageref{ugUserAnonPage} +\end{itemize} +\index{pages!ugUserIntroPage!ug06.ht} +\index{ug06.ht!pages!ugUserIntroPage} +\index{ugUserIntroPage!ug06.ht!pages} +<>= +\begin{page}{ugUserIntroPage}{6.3. Introduction to Functions} +\beginscroll + +Each name in your workspace can refer to a single object. +This may be any kind of object including a function. +You can use interactively any function from the library or any that you +define in the workspace. +In the library the same name can have very many functions, but you +can have only one function with a given name, although it can have any +number of arguments that you choose. + +If you define a function in the workspace that has the same name and number +of arguments as one in the library, then your definition takes precedence. +In fact, to get the library function you must +\spadglossSee{package-call}{package call} it (see +\downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} +in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall}). + +To use a function in Axiom, you apply it to its arguments. +Most functions are applied by entering the name of the function followed by +its argument or arguments. +\xtc{ +}{ +\spadpaste{factor(12)} +} +% +\xtc{ +Some functions like +\axiomOp{+} have {\it infix} \spadgloss{operators} as names. +}{ +\spadpaste{3 + 4} +} +\xtc{ +The function \axiomOp{+} has two arguments. +When you give it more than two arguments, +Axiom groups the arguments to the left. +This expression is equivalent to \axiom{(1 + 2) + 7}. +}{ +\spadpaste{1 + 2 + 7} +} + +All operations, including infix operators, can be written in prefix form, +that is, with the operation name followed by the arguments +in parentheses. +For example, \axiom{2 + 3} can alternatively be written as \axiom{+(2,3)}. +But \axiom{+(2,3,4)} is an error since \axiomOp{+} +takes only two arguments. + +Prefix operations are generally applied before the infix operation. +Thus \axiom{factorial 3 + 1} means \axiom{factorial(3) + 1} producing +\axiom{7}, and +\axiom{- 2 + 5} means \axiom{(-2) + 5} producing \axiom{3}. +An example of a prefix operator is prefix \axiomOp{-}. +For example, \axiom{- 2 + 5} converts to \axiom{(- 2) + 5} producing +the value \axiom{3}. +Any prefix function taking two arguments can be written in +an infix manner by putting an +ampersand (\axiomSyntax{\&}) before the name. +Thus \axiom{D(2*x,x)} can be written as +\axiom{2*x \&D x} returning \axiom{2}. + +Every function in Axiom is identified by +a \spadgloss{name} and \spadgloss{type}.\footnote{An exception is +an ``anonymous function'' +discussed in +\downlink{``\ugUserAnonTitle''}{ugUserAnonPage} +in Section \ugUserAnonNumber\ignore{ugUserAnon}.} +The type of a function is always a mapping of the form +\spadsig{Source}{Target} +where \axiom{Source} and \axiom{Target} are types. +To enter a type from the keyboard, enter the arrow by using +a hyphen \axiomSyntax{-} followed by a greater-than sign +\axiomSyntax{>}, e.g. {\tt Integer -> Integer}. + +Let's go back to \axiomOp{+}. +There are many \axiomOp{+} functions in the +Axiom library: one for integers, one for floats, another for +rational numbers, and so on. +These \axiomOp{+} functions have different types and thus are +different functions. +You've seen examples of this \spadgloss{overloading} +before---using the same name for different functions. +Overloading is the rule rather than the exception. +You can add two integers, two polynomials, two matrices or +two power series. +These are all done with the same function name +but with different functions. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserDeclareTitle}{Declaring the Type of Functions} +\newcommand{\ugUserDeclareNumber}{6.4.} + +@ +\section{Declaring the Type of Functions} +\label{ugUserDeclarePage} +\begin{itemize} +\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on +page~\pageref{ugTypesDeclarePage} +\end{itemize} +\index{pages!ugUserDeclarePage!ug06.ht} +\index{ug06.ht!pages!ugUserDeclarePage} +\index{ugUserDeclarePage!ug06.ht!pages} +<>= +\begin{page}{ugUserDeclarePage}{6.4. Declaring the Type of Functions} +\beginscroll + +In \downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} +in Section \ugTypesDeclareNumber\ignore{ugTypesDeclare} we +discussed how to declare a variable +to restrict the kind of values that can be assigned to it. +In this section we show how to declare a variable that refers to +function objects. + +\beginImportant +A function is an object of type +\centerline{{\spadsig{Source}{Type}}} +where \axiom{Source} and \axiom{Target} can be any type. +A common type for \axiom{Source} is +\axiomType{Tuple}(\subscriptIt{T}{1}, \ldots, \subscriptIt{T}{n}), +usually written +(\subscriptIt{T}{1}, \ldots, \subscriptIt{T}{n}), +to indicate a function of \axiom{n} arguments. +\endImportant + +\xtc{ +If \axiom{g} takes an \axiomType{Integer}, a \axiomType{Float} and +another \axiomType{Integer}, and returns a +\axiomType{String}, the declaration is written this way. +}{ +\spadpaste{g: (Integer,Float,Integer) -> String} +} +\xtc{ +The types need not be written fully; using abbreviations, the above +declaration is: +}{ +\spadpaste{g: (INT,FLOAT,INT) -> STRING} +} +\xtc{ +It is possible for a function to take no arguments. +If \axiom{ h} takes no arguments +but returns a \axiomType{Polynomial} \axiomType{Integer}, any +of the following declarations is acceptable. +}{ +\spadpaste{h: () -> POLY INT} +} +\xtc{ +}{ +\spadpaste{h: () -> Polynomial INT} +} +\xtc{ +}{ +\spadpaste{h: () -> POLY Integer} +} + + +\beginImportant +Functions can also be declared when they are being defined. +The syntax for combined declaration/definition is: +\centerline{{\frenchspacing{\tt {\it functionName}(\subscriptIt{parm}{1}: \subscriptIt{parmType}{1}, \ldots, \subscriptIt{parm}{N}: \subscriptIt{parmType}{N}): {\it functionReturnType}}}} +\endImportant + +The following definition fragments show how this can be done for +the functions \axiom{g} and \axiom{h} above. +\begin{verbatim} +g(arg1: INT, arg2: FLOAT, arg3: INT): STRING == ... + +h(): POLY INT == ... +\end{verbatim} + +A current restriction on function declarations is that they must +involve fully specified types (that is, cannot include modes involving +explicit or implicit \axiomSyntax{?}). +For more information on declaring things in general, see +\downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} +in Section \ugTypesDeclareNumber\ignore{ugTypesDeclare}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserOneTitle}{One-Line Functions} +\newcommand{\ugUserOneNumber}{6.5.} + +@ +\section{One-Line Functions} +\label{ugUserOnePage} +\index{pages!ugUserOnePage!ug06.ht} +\index{ug06.ht!pages!ugUserOnePage} +\index{ugUserOnePage!ug06.ht!pages} +<>= +\begin{page}{ugUserOnePage}{6.5. One-Line Functions} +\beginscroll + +As you use Axiom, you will find that you will write many short functions +to codify sequences of operations that you often perform. +In this section we write some simple one-line functions. + +\xtc{ +This is a simple recursive factorial function for positive integers. +}{ +\spadpaste{fac n == if n < 3 then n else n * fac(n-1) \bound{fac}} +} +\xtc{ +}{ +\spadpaste{fac 10 \free{fac}} +} +%>> Thankfully, the $ is no longer needed in the next example. +\xtc{ +This function computes \axiom{1 + 1/2 + 1/3 + ... + 1/n}. +}{ +\spadpaste{s n == reduce(+,[1/i for i in 1..n]) \bound{s}} +} +\xtc{ +}{ +\spadpaste{s 50 \free{s}} +} +\xtc{ +This function computes a Mersenne number, several of which are prime. +}{ +\spadpaste{mersenne i == 2**i - 1 \bound{mersenne}} +} +\xtc{ +If you type \axiom{mersenne}, Axiom shows you +the function definition. +}{ +\spadpaste{mersenne \free{mersenne}} +} +\xtc{ +Generate a stream of Mersenne numbers. +}{ +\spadpaste{[mersenne i for i in 1..] \free{mersenne}} +} +\xtc{ +Create a stream of those values of \axiom{i} such that +\axiom{mersenne(i)} is prime. +}{ +\spadpaste{mersenneIndex := [n for n in 1.. | prime?(mersenne(n))] \bound{mersenneIndex}\free{mersenne}} +} +\xtc{ +Finally, write a function that returns the \eth{\axiom{n}} Mersenne +prime. +}{ +\spadpaste{mersennePrime n == mersenne mersenneIndex(n) \free{mersenne mersenneIndex}\bound{mersennePrime}} +} +\xtc{ +}{ +\spadpaste{mersennePrime 5 \free{mersennePrime}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserDecUndecTitle}{Declared vs. Undeclared Functions} +\newcommand{\ugUserDecUndecNumber}{6.6.} + +@ +\section{Declared vs. Undeclared Functions} +\label{ugUserDecUndecPage} +\begin{itemize} +\item ugCategoriesPage \ref{ugCategoriesPage} on +page~\pageref{ugCategoriesPage} +\end{itemize} +\index{pages!ugUserDecUndecPage!ug06.ht} +\index{ug06.ht!pages!ugUserDecUndecPage} +\index{ugUserDecUndecPage!ug06.ht!pages} +<>= +\begin{page}{ugUserDecUndecPage}{6.6. Declared vs. Undeclared Functions} +\beginscroll + +If you declare the type of a function, you can apply +it to any data that can be converted to the source type +of the function. + +\labelSpace{2pc} +\xtc{ +Define \userfun{f} with type \spadsig{Integer}{Integer}. +}{ +\spadpaste{f(x: Integer): Integer == x + 1 \bound{f}} +} +\xtc{ +The function +\userfun{f} can be applied to integers, \ldots +}{ +\spadpaste{f 9 \free{f}} +} +\xtc{ +and to values that convert to integers, \ldots +}{ +\spadpaste{f(-2.0) \free{f}} +} +\xtc{ +but not to values that cannot be converted to integers. +}{ +\spadpaste{f(2/3) \free{f}} +} + +To make the function over a wide range of types, do not +declare its type. +\xtc{ +Give the same definition with no declaration. +}{ +\spadpaste{g x == x + 1 \bound{g}} +} +\xtc{ +If \axiom{x + 1} makes sense, you can apply \userfun{g} to \axiom{x}. +}{ +\spadpaste{g 9 \free{g}} +} +\xtc{ +A version of \userfun{g} with different argument types +get compiled for each new kind of argument used. +}{ +\spadpaste{g(2/3) \free{g}} +} +\xtc{ +Here \axiom{x+1} for \axiom{x = "axiom"} makes no sense. +}{ +\spadpaste{g("axiom")\free{g}} +} + +As you will see in \downlink{``\ugCategoriesTitle''}{ugCategoriesPage} +in Chapter \ugCategoriesNumber\ignore{ugCategories}, +Axiom has a formal idea of categories for what ``makes sense.'' + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserDecOpersTitle}{Functions vs. Operations} +\newcommand{\ugUserDecOpersNumber}{6.7.} + +@ +\section{Functions vs. Operations} +\label{ugUserDecOpersPage} +\begin{itemize} +\item MappingPackageOneXmpPage \ref{MappingPackageOneXmpPage} on +page~\pageref{MappingPackageOneXmpPage} +\item ugPackagesAbstractPage \ref{ugPackagesAbstractPage} on +page~\pageref{ugPackagesAbstractPage} +\item ugPackagesPage \ref{ugPackagesPage} on +page~\pageref{ugPackagesPage} +\item ugCategoriesPage \ref{ugCategoriesPage} on +page~\pageref{ugCategoriesPage} +\end{itemize} +\index{pages!ugUserDecOpersPage!ug06.ht} +\index{ug06.ht!pages!ugUserDecOpersPage} +\index{ugUserDecOpersPage!ug06.ht!pages} +<>= +\begin{page}{ugUserDecOpersPage}{6.7. Functions vs. Operations} +\beginscroll + +A function is an object that you can create, manipulate, pass to, +and return from functions (for some interesting examples of +library functions that manipulate functions, see +\downlink{`MappingPackage1'}{MappingPackageOneXmpPage} +\ignore{MappingPackage1}). +Yet, we often seem to use the term \spadgloss{operation} and +function interchangeably in Axiom. +What is the distinction? + +First consider values and types associated with some variable \axiom{n} in +your workspace. +You can make the declaration \axiom{n : Integer}, then assign \axiom{n} an +integer value. +You then speak of the integer \axiom{n}. +However, note that the integer is not the name \axiom{n} itself, but +the value that you assign to \axiom{n}. + +Similarly, you can declare a variable \axiom{f} in your workspace to have +type \spadsig{Integer}{Integer}, then assign \axiom{f}, through a definition +or an assignment of an anonymous function. +You then speak of the function \axiom{f}. +However, the function is not \axiom{f}, but the value that you +assign to \axiom{f}. + +A function is a value, in fact, some machine code for doing something. +Doing what? +Well, performing some \spadgloss{operation}. +Formally, an operation consists of the constituent parts of \axiom{f} in your +workspace, excluding the value; thus an operation has a name and a type. +An operation is what domains and packages export. +Thus \axiomType{Ring} exports one operation \axiomOp{+}. +Every ring also exports this operation. +Also, the author of every ring in the system is obliged under contract +(see \downlink{``\ugPackagesAbstractTitle''}{ugPackagesAbstractPage} +in Section \ugPackagesAbstractNumber\ignore{ugPackagesAbstract}) +to provide an implementation for this operation. + +This chapter is all about functions---how you create them interactively and +how you apply them to meet your needs. +In \downlink{``\ugPackagesTitle''}{ugPackagesPage} in +Chapter \ugPackagesNumber\ignore{ugPackages} you will +learn how to create them for the +Axiom library. +Then in \downlink{``\ugCategoriesTitle''}{ugCategoriesPage} +in Chapter \ugCategoriesNumber\ignore{ugCategories}, you will +learn about categories and +exported operations. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserDelayTitle}{Delayed Assignments vs. Functions with No Arguments} +\newcommand{\ugUserDelayNumber}{6.8.} + +@ +\section{Delayed Assignments vs. Functions with No Arguments} +\label{ugUserDelayPage} +\begin{itemize} +\item ugLangAssignPage \ref{ugLangAssignPage} on +page~\pageref{ugLangAssignPage} +\end{itemize} +\index{pages!ugUserDelayPage!ug06.ht} +\index{ug06.ht!pages!ugUserDelayPage} +\index{ugUserDelayPage!ug06.ht!pages} +<>= +\begin{page}{ugUserDelayPage} +{6.8. Delayed Assignments vs. Functions with No Arguments} +\beginscroll + +In \downlink{``\ugLangAssignTitle''}{ugLangAssignPage} in Section +\ugLangAssignNumber\ignore{ugLangAssign} we discussed the difference +between immediate and +delayed assignments. +In this section we show the difference between delayed +assignments and functions of no arguments. + +\labelSpace{2pc} +\xtc{ +A function of no arguments is sometimes called a {\it nullary function.} +}{ +\spadpaste{sin24() == sin(24.0) \bound{sin24}} +} +\xtc{ +You must use the parentheses (\axiomSyntax{()}) to evaluate it. +Like a delayed assignment, the right-hand-side of a function evaluation +is not evaluated until the left-hand-side is used. +}{ +\spadpaste{sin24() \free{sin24}} +} +\xtc{ +If you omit the parentheses, you just get the function definition. +%(Note how the explicit floating point number in the definition +%has been translated into a function call involving a mantissa, +%exponent and radix.) +}{ +\spadpaste{sin24 \free{sin24}} +} +\xtc{ +You do not use the parentheses \axiomSyntax{()} in a delayed assignment\ldots +}{ +\spadpaste{cos24 == cos(24.0) \bound{cos24}} +} +\xtc{ +nor in the evaluation. +}{ +\spadpaste{cos24 \free{cos24}} +} +The only syntactic difference between delayed assignments +and nullary functions is that you use \axiomSyntax{()} in the latter case. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserUseTitle}{How Axiom Determines What Function to Use} +\newcommand{\ugUserUseNumber}{6.9.} + +@ +\section{How Axiom Determines What Function to Use} +\label{ugUserUsePage} +\begin{itemize} +\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on +page~\pageref{ugTypesPkgCallPage} +\item ugTypesResolvePage \ref{ugTypesResolvePage} on +page~\pageref{ugTypesResolvePage} +\end{itemize} +\index{pages!ugUserUsePage!ug06.ht} +\index{ug06.ht!pages!ugUserUsePage} +\index{ugUserUsePage!ug06.ht!pages} +<>= +\begin{page}{ugUserUsePage}{6.9. How Axiom Determines What Function to Use} +\beginscroll + +What happens if you define a function that has the same name as a library +function? +Well, if your function has the same name and number of arguments (we +sometimes say \spadgloss{arity}) as another function +in the library, then your function covers up the library function. +If you want then to call the library function, you will have to package-call +it. +Axiom can use both the functions you write and those that come +from the library. +Let's do a simple example to illustrate this. +\xtc{ +Suppose you (wrongly!) define \userfun{sin} in this way. +}{ +\spadpaste{sin x == 1.0 \bound{sin}} +} +\xtc{ +The value \axiom{1.0} is returned for any argument. +}{ +\spadpaste{sin 4.3 \free{sin}} +} +\xtc{ +If you want the library operation, we have to package-call it +(see \downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} +in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall} +for more information). +}{ +\spadpaste{sin(4.3)\$Float} +} +\xtc{ +}{ +\spadpaste{sin(34.6)\$Float} +} +\xtc{ +Even worse, say we accidentally used the same name as a library +function in the function. +}{ +\spadpaste{sin x == sin x \bound{sin1}} +} +\xtc{ +Then Axiom definitely does not understand us. +}{ +\spadpaste{sin 4.3 \free{sin1}} +} +\xtc{ +Again, we could package-call the inside function. +}{ +\spadpaste{sin x == sin(x)\$Float \bound{sin2}} +} +\xtc{ +}{ +\spadpaste{sin 4.3 \free{sin2}} +} +Of course, you are unlikely to make such obvious errors. +It is more probable that you would write a function and in the body use a +function that you think is a library function. +If you had also written a function by that same name, the library function +would be invisible. + +How does Axiom determine what library function to call? +It very much depends on the particular example, but the simple case of +creating the polynomial +\axiom{x + 2/3} will give you an idea. +\indent{4} +\beginitems +\item[1. ] The \axiom{x} is analyzed and its default type is +\axiomType{Variable(x)}. +\item[2. ] The \axiom{2} is analyzed and its default type is +\axiomType{PositiveInteger}. +\item[3. ] The \axiom{3} is analyzed and its default type is +\axiomType{PositiveInteger}. +\item[4. ] Because the arguments to \axiomOp{/} are integers, Axiom +gives the expression \axiom{2/3} a default target type of +\axiomType{Fraction(Integer)}. +\item[5. ] Axiom looks in \axiomType{PositiveInteger} for \axiomOp{/}. +It is not found. +\item[6. ] Axiom looks in \axiomType{Fraction(Integer)} for \axiomOp{/}. +It is found for arguments of type \axiomType{Integer}. +\item[7. ] The \axiom{2} and \axiom{3} are converted to objects of type +\axiomType{Integer} (this is trivial) and \axiomOp{/} is applied, +creating an object of type \axiomType{Fraction(Integer)}. +\item[8. ] No \axiomOp{+} for arguments of types \axiomType{Variable(x)} and +\axiomType{Fraction(Integer)} are found in either domain. +\item[9. ] Axiom resolves +(see \downlink{``\ugTypesResolveTitle''}{ugTypesResolvePage} +in Section \ugTypesResolveNumber\ignore{ugTypesResolve}) +the types and gets \axiomType{Polynomial (Fraction (Integer))}. +\item[10. ] The \axiom{x} and the \axiom{2/3} are converted to objects of this +type and \axiomOp{+} is applied, yielding the answer, an object of type +\axiomType{Polynomial (Fraction (Integer))}. +\enditems +\indent{0} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserCompIntTitle}{Compiling vs. Interpreting} +\newcommand{\ugUserCompIntNumber}{6.10.} + +@ +\section{Compiling vs. Interpreting} +\label{ugUserCompIntPage} +\begin{itemize} +\item ugTypesSubdomainsPage \ref{ugTypesSubdomainsPage} on +page~\pageref{ugTypesSubdomainsPage} +\end{itemize} +\index{pages!ugUserCompIntPage!ug06.ht} +\index{ug06.ht!pages!ugUserCompIntPage} +\index{ugUserCompIntPage!ug06.ht!pages} +<>= +\begin{page}{ugUserCompIntPage}{6.10. Compiling vs. Interpreting} +\beginscroll + +When possible, Axiom completely determines the type of every object in +a function, then translates the function definition to \Lisp{} or +to machine code (see next section). +This translation, +called \spadglossSee{compilation}{compiler}, happens the first time you call +the function and results in a computational delay. +Subsequent function calls with the same argument types use the compiled +version of the code without delay. + +If Axiom cannot determine the type of everything, the +function may still be executed +but +in \spadglossSee{interpret-code mode}{interpreter} : +each statement in the function is analyzed and executed as the control +flow indicates. +This process is slower than executing a compiled function, but it +allows the execution of code that may involve objects whose types +change. + +\beginImportant +If Axiom decides that it cannot compile the code, it +issues a message stating the problem and then the following +message: +% +\centerline{{{\bf We will attempt to step through and interpret the code.}}} +% +This is not a time to panic. +Rather, it just means that what you gave to Axiom +is somehow ambiguous: either it is not specific enough to be analyzed +completely, or it is beyond Axiom's present interactive +compilation abilities. +\endImportant + +\xtc{ +This function runs in interpret-code mode, but it does not compile. +}{ +\begin{spadsrc}[\bound{varPolys}] +varPolys(vars) == + for var in vars repeat + output(1 :: UnivariatePolynomial(var,Integer)) +\end{spadsrc} +} +\xtc{ +For \axiom{vars} equal to \axiom{['x, 'y, 'z]}, this function displays +\axiom{1} three times. +}{ +\spadpaste{varPolys ['x,'y,'z] \free{varPolys}} +} +\xtc{ +The type of the argument to \axiomFun{output} changes in each iteration, +so Axiom cannot compile the function. +In this case, even the inner loop by itself would have a problem: +}{ +\begin{spadsrc} +for var in ['x,'y,'z] repeat + output(1 :: UnivariatePolynomial(var,Integer)) +\end{spadsrc} +} + +Sometimes you can help a function to compile by using an extra conversion +or by using \axiom{pretend}. +\spadkey{pretend} +See \downlink{``\ugTypesSubdomainsTitle''}{ugTypesSubdomainsPage} +in Section \ugTypesSubdomainsNumber\ignore{ugTypesSubdomains} for details. + +When a function is compilable, you have the choice of whether it is +compiled to \Lisp{} and then interpreted by the \Lisp{} +interpreter or then further compiled from \Lisp{} to machine code. +The option is controlled via \spadcmd{)set functions compile}. +Issue \spadcmd{)set functions compile on} to compile all the way to +machine code. +With +the default setting \spadcmd{)set functions compile off}, +Axiom has its \Lisp{} code interpreted +because the overhead of further compilation is larger than the run-time +of most of the functions our users have defined. +You may find that selectively turning this option on and off will +give you the best performance in your particular application. +For example, if you are writing functions for graphics applications +where hundreds of points are being computed, it is almost certainly true +that you will get the best performance by issuing +\spadcmd{)set functions compile on}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserPieceTitle}{Piece-Wise Function Definitions} +\newcommand{\ugUserPieceNumber}{6.11.} + +@ +\section{Piece-Wise Function Definitions} +\label{ugUserPiecePage} +\begin{itemize} +\item ugUserPieceBasicPage \ref{ugUserPieceBasicPage} on +page~\pageref{ugUserPieceBasicPage} +\item ugUserPiecePickingPage \ref{ugUserPiecePickingPage} on +page~\pageref{ugUserPiecePickingPage} +\item ugUserPiecePredPage \ref{ugUserPiecePredPage} on +page~\pageref{ugUserPiecePredPage} +\end{itemize} +\index{pages!ugUserPiecePage!ug06.ht} +\index{ug06.ht!pages!ugUserPiecePage} +\index{ugUserPiecePage!ug06.ht!pages} +<>= +\begin{page}{ugUserPiecePage}{6.11. Piece-Wise Function Definitions} +\beginscroll + +To move beyond functions defined in one line, we introduce in this section +functions that are defined piece-by-piece. +That is, we say ``use this definition when the argument is such-and-such and +use this other definition when the argument is that-and-that.'' + +\beginmenu + \menudownlink{{6.11.1. A Basic Example}}{ugUserPieceBasicPage} + \menudownlink{{6.11.2. Picking Up the Pieces}}{ugUserPiecePickingPage} + \menudownlink{{6.11.3. Predicates}}{ugUserPiecePredPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserPieceBasicTitle}{A Basic Example} +\newcommand{\ugUserPieceBasicNumber}{6.11.1.} + +@ +\section{A Basic Example} +\label{ugUserPieceBasicPage} +\index{pages!ugUserPieceBasicPage!ug06.ht} +\index{ug06.ht!pages!ugUserPieceBasicPage} +\index{ugUserPieceBasicPage!ug06.ht!pages} +<>= +\begin{page}{ugUserPieceBasicPage}{6.11.1. A Basic Example} +\beginscroll + +There are many other ways to define a factorial function for nonnegative +integers. +You might +say +factorial of \axiom{0} is \axiom{1,} otherwise factorial of \axiom{n} is +\axiom{n} times factorial of \axiom{n-1}. +Here is one way to do this in Axiom. +% +\xtc{ +Here is the value for \axiom{n = 0}. +}{ +\spadpaste{fact(0) == 1 \bound{fact0}} +} +\xtc{ +Here is the value for \axiom{n > 0}. +The vertical bar \axiomSyntax{|} means +``such that''. +}{ +\spadpaste{fact(n | n > 0) == n * fact(n - 1) \free{fact0}\bound{factn}} +} +%>> am moving this back +%The vertical bar \axiomSyntax{|} is read as ``such that'' and so +%\index{such that} +%the second line means that that part of the definition for \userfun{fact} +%is for any \axiom{n} such that \axiom{n} is greater than 0. +%In fact, the first line is really just a shorthand expression for +%\axiom{fact(n | n = 0) == 1}. +%>> prefer scratching next 4 lines +%We are implicitly using a \spadgloss{predicate} with a \axiomSyntax{|} in +%this line (see \downlink{``\ugUserPiecePredTitle''}{ugUserPiecePredPage} +%in Section \ugUserPiecePredNumber\ignore{ugUserPiecePred} for more +%on predicates). +%So this piece of the function is applicable to all (the not so many!) +%values of \axiom{n} that are equal to zero. +\xtc{ +What is the value for \axiom{n = 3}? +}{ +\spadpaste{fact(3) \free{factn}} +} +\xtc{ +What is the value for \axiom{n = -3}? +}{ +\spadpaste{fact(-3) \free{factn}} +} +\xtc{ +Now for a second definition. +Here is the value for \axiom{n = 0}. +}{ +\spadpaste{facto(0) == 1 \bound{facto0}} +} +\xtc{ +Give an error message if \axiom{n < 0}. +}{ +\spadpaste{facto(n | n < 0) == error "arguments to facto must be non-negative" \free{facto0}\bound{factop}} +} +\xtc{ +Here is the value otherwise. +}{ +\spadpaste{facto(n) == n * facto(n - 1) \free{factop}\bound{facton}} +} +\xtc{ +What is the value for \axiom{n = 7}? +}{ +\spadpaste{facto(3) \free{facton}} +} +\xtc{ +What is the value for \axiom{n = -7}? +}{ +\spadpaste{facto(-7) \free{facton}} +} +\xtc{ +To see the current piece-wise definition of a function, +use \spadsys{)display value}. +}{ +\spadpaste{)display value facto \free{facton}} +} + +In general a {\it piece-wise definition} of a function consists of two or +more parts. +Each part gives a ``piece'' of the entire definition. +Axiom collects the pieces of a function as you enter them. +When you ask for a value of the function, it then ``glues'' +the pieces together to form a function. + +The two piece-wise definitions for the factorial function +are examples of recursive functions, that is, functions that +are defined in terms of themselves. +Here is an interesting doubly-recursive function. +This function returns the value \axiom{11} for all positive integer arguments. +\xtc{ +Here is the first of two pieces. +}{ +\spadpaste{eleven(n | n < 1) == n + 11\bound{ff0}} +} +\xtc{ +And the general case. +}{ +\spadpaste{eleven(m) == eleven(eleven(m - 12))\bound{ff1}\free{ff0}} +} +\xtc{ +Compute \axiom{elevens}, the infinite stream +of values of \axiom{eleven}. +}{ +\spadpaste{elevens := [eleven(i) for i in 0..]\bound{ff2}\free{ff1}} +} +\xtc{ +What is the value at \axiom{n = 200}? +}{ +\spadpaste{elevens 200\free{ff2}} +} +\xtc{ +What is the Axiom's definition of \axiom{eleven}? +}{ +\spadpaste{)display value eleven\free{ff2}} +} +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserPiecePickingTitle}{Picking Up the Pieces} +\newcommand{\ugUserPiecePickingNumber}{6.11.2.} + +@ +\section{Picking Up the Pieces} +\label{ugUserPiecePickingPage} +\begin{itemize} +\item ugUserPieceBasicPage \ref{ugUserPieceBasicPage} on +page~\pageref{ugUserPieceBasicPage} +\end{itemize} +\index{pages!ugUserPiecePickingPage!ug06.ht} +\index{ug06.ht!pages!ugUserPiecePickingPage} +\index{ugUserPiecePickingPage!ug06.ht!pages} +<>= +\begin{page}{ugUserPiecePickingPage}{6.11.2. Picking Up the Pieces} +\beginscroll + +Here are the details about how Axiom creates a function from its +pieces. +Axiom converts the \eth{\axiom{i}} piece of a function definition into a +conditional expression of the form: \axiom{if} \pred{i} \axiom{then} +\expr{i}. +If any new piece has a \pred{i} that is identical\footnote{after all +variables are uniformly named} to an earlier \pred{j}, the earlier piece is +removed. +Otherwise, the new piece is always added at the end. + +\beginImportant +If there are \axiom{n} pieces to a function definition for \axiom{f}, +the function defined \axiom{f} is: \newline +% +\texht{\hspace*{3pc}}{\tab{6}} +{\tt if} \pred{1} {\tt then} \expr{1} {\tt else}\newline +\texht{\hspace*{6pc}}{\tab{12}}. . . \newline +\texht{\hspace*{3pc}}{\tab{6}} +{\tt if} \pred{n} {\tt then} \expr{n} {\tt else}\newline +\texht{\hspace*{3pc}}{\tab{6}} +{\tt error "You did not define f for argument ."} +% +\endImportant + +You can give definitions of any number of mutually recursive function +definitions, piece-wise or otherwise. +No computation is done until you ask for a value. +When you do ask for a value, all the relevant definitions are gathered, +analyzed, and translated into separate functions and compiled. + +\xtc{ +Let's recall the definition of \userfun{eleven} from +\texht{the previous section}{ +\downlink{``\ugUserPieceBasicTitle''}{ugUserPieceBasicPage} +in Section \ugUserPieceBasicNumber\ignore{ugUserPieceBasic}}. +}{ +\spadpaste{eleven(n | n < 1) == n + 11\bound{ff0}} +} +\xtc{ +}{ +\spadpaste{eleven(m) == eleven(eleven(m - 12))\bound{ff1}\free{ff0}} +} + +A similar doubly-recursive function below produces \axiom{-11} for all +negative positive integers. +If you haven't worked out why or how \userfun{eleven} works, +the structure of this definition gives a clue. +\xtc{ +This definition we write as a block. +}{ +\begin{spadsrc}[\bound{rf1}] +minusEleven(n) == + n >= 0 => n - 11 + minusEleven (5 + minusEleven(n + 7)) +\end{spadsrc} +} +\xtc{ +Define \axiom{s(n)} to be the +sum of plus and minus ``eleven'' functions divided by \axiom{n}. +Since \axiom{11 - 11 = 0}, we define \axiom{s(0)} to be \axiom{1}. +}{ +\spadpaste{s(0) == 1\bound{rf2}} +} +\xtc{ +And the general term. +}{ +\spadpaste{s(n) == (eleven(n) + minusEleven(n))/n\bound{rf3}\free{rf2 rf1 ff1}} +} +\xtc{ +What are the first ten values of \axiom{s}? +}{ +\spadpaste{[s(n) for n in 0..]\free{rf3}} +} +%% interpreter puts the rule at the end - should fix +Axiom can create infinite streams in the positive direction (for +example, for index values \axiom{0,1, \ldots}) or negative direction (for +example, for index values \axiom{0,-1,-2, \ldots}). +Here we would like a stream of values of \axiom{s(n)} that is infinite in +both directions. +The function \axiom{t(n)} below returns the \eth{\axiom{n}} term of the infinite +stream \axiom{[s(0), s(1), s(-1), s(2), s(-2), \ldots].} +Its definition has three pieces. +\xtc{ +Define the initial term. +}{ +\spadpaste{t(1) == s(0)\bound{t1}\free{rf4}} +} +\xtc{ +The even numbered terms are the \axiom{s(i)} for positive \axiom{i}. +We use \axiomOp{quo} rather than \axiomOp{/} +since we want the result to be an integer. +}{ +\spadpaste{t(n | even?(n)) == s(n quo 2)\free{t1}\bound{t2}} +} +\xtc{ +Finally, the odd numbered terms are the +\axiom{s(i)} for negative \axiom{i}. +In piece-wise definitions, you can use different variables +to define different pieces. Axiom will not get confused. +}{ +\spadpaste{t(p) == s(- p quo 2)\free{t2}\bound{t3}} +} +\xtc{ +Look at the definition of \axiom{t}. +In the first piece, the variable \axiom{n} +was used; in the second piece, \axiom{p}. +Axiom always uses +your last variable to display your definitions +back to you. +}{ +\spadpaste{)display value t\free{t2}} +} +\xtc{ +Create a series of values of \axiom{s} applied to +alternating positive and negative arguments. +}{ +\spadpaste{[t(i) for i in 1..]\free{t3}\bound{t4}} +} +\xtc{ +Evidently \axiom{t(n) = 1} for all \axiom{i.} +Check it at \axiom{n= 100}. +}{ +\spadpaste{t(100)\free{t4}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserPiecePredTitle}{Predicates} +\newcommand{\ugUserPiecePredNumber}{6.11.3.} + +@ +\section{Predicates} +\label{ugUserPiecePredPage} +\begin{itemize} +\item ugUserPieceBasicPage \ref{ugUserPieceBasicPage} on +page~\pageref{ugUserPieceBasicPage} +ugLangItsPage +\end{itemize} +\index{pages!ugUserPiecePredPage!ug06.ht} +\index{ug06.ht!pages!ugUserPiecePredPage} +\index{ugUserPiecePredPage!ug06.ht!pages} +<>= +\begin{page}{ugUserPiecePredPage}{6.11.3. Predicates} +\beginscroll + +We have already seen some examples of +predicates +(\downlink{``\ugUserPieceBasicTitle''}{ugUserPieceBasicPage} +in Section \ugUserPieceBasicNumber\ignore{ugUserPieceBasic}). +Predicates are \axiomType{Boolean}-valued expressions and Axiom uses them +for filtering collections +(see \downlink{``\ugLangItsTitle''}{ugLangItsPage} +in Section \ugLangItsNumber\ignore{ugLangIts}) +and for placing +constraints on function arguments. +In this section we discuss their latter usage. + +\xtc{ +The simplest use of a predicate is one you don't see at all. +}{ +\spadpaste{opposite 'right == 'left} +} +\xtc{ +Here is a longer way to give the ``opposite definition.'' +}{ +\spadpaste{opposite (x | x = 'left) == 'right} +} +\xtc{ +Try it out. +}{ +\spadpaste{for x in ['right,'left,'inbetween] repeat output opposite x} +} + +Explicit predicates tell Axiom that the given function definition +piece is to be applied if the predicate evaluates to {\tt true} for the +arguments to the function. +You can use such ``constant'' arguments for integers, +strings, and quoted symbols. +The \axiomType{Boolean} values \axiom{true} and \axiom{false} can also be used +if qualified with ``\spad{@}'' or ``\spad{\$}'' and \axiomType{Boolean}. +The following are all valid function definition fragments using +constant arguments. +\begin{verbatim} +a(1) == ... +b("unramified") == ... +c('untested) == ... +d(true@Boolean) == ... +\end{verbatim} + +If a function has more than one argument, +each argument can have its own predicate. +However, if a predicate involves two or more arguments, it must be given +{\it after} all the arguments mentioned in the predicate have been given. +You are always safe to give +a single predicate at the end of the argument list. +\xtc{ +A function involving predicates on two arguments. +}{ +\spadpaste{inFirstHalfQuadrant(x | x > 0,y | y < x) == true} +} +\xtc{ +This is incorrect as it gives a predicate on \axiom{y} +before the argument \axiom{y} is given. +}{ +\spadpaste{inFirstHalfQuadrant(x | x > 0 and y < x,y) == true} +} +\xtc{ +It is always correct to write the predicate at the end. +}{ +\spadpaste{inFirstHalfQuadrant(x,y | x > 0 and y < x) == true \bound{ifq1a}} +} +\xtc{ +Here is the rest of the definition. +}{ +\spadpaste{inFirstHalfQuadrant(x,y) == false \bound{ifq1b}} +} +\xtc{ +Try it out. +}{ +\spadpaste{[inFirstHalfQuadrant(i,3) for i in 1..5]\bound{ifq1b}} +} + +{\bf Remark:} Very old versions of Axiom allowed predicates +to be given after a {\tt when} keyword as in +{\tt inFirstHalfQuadrant(x ,y) == true when x >0 and y < x}. +This is no longer supported, is WRONG, and will cause a syntax +error or strange behavior. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserCacheTitle}{Caching Previously Computed Results} +\newcommand{\ugUserCacheNumber}{6.12.} + +@ +\section{Caching Previously Computed Results} +\label{ugUserCachePage} +\begin{itemize} +\item ugUserFreeLocalPage \ref{ugUserFreeLocalPage} on +page~\pageref{ugUserFreeLocalPage} +\end{itemize} +\index{pages!ugUserCachePage!ug06.ht} +\index{ug06.ht!pages!ugUserCachePage} +\index{ugUserCachePage!ug06.ht!pages} +<>= +\begin{page}{ugUserCachePage}{6.12. Caching Previously Computed Results} +\beginscroll + +By default, Axiom does not save the values of any function. +You can cause it to save values and not to recompute unnecessarily +by using \spadcmd{)set functions cache}. +This should be used before the functions are defined or, at least, before +they are executed. +The word following ``cache'' should be \axiom{0} to turn off +caching, a positive integer \axiom{n} to save the last \axiom{n} +computed values or ``all'' to save all computed values. +If you then give a list of names of functions, the caching +only affects those functions. +Use no list of names or ``all'' when you want to define the default +behavior for functions not specifically mentioned in other +\spadcmd{)set functions cache} statements. +If you give no list of names, all functions will have the caching behavior. +If you explicitly turn on caching for one or more names, you must +explicitly turn off caching for those names when you want to stop +saving their values. + +\xtc{ +This causes the functions \userfun{f} and \userfun{g} to have +the last three computed values saved. +}{ +\spadpaste{)set functions cache 3 f g \bound{cache}} +} +\xtc{ +This is a sample definition for \userfun{f}. +}{ +\spadpaste{f x == factorial(2**x) \bound{fdef}\free{cache}} +} +\xtc{ +A message is displayed stating what \userfun{f} will cache. +}{ +\spadpaste{f(4) \free{}\free{cache}} +} +\xtc{ +This causes all other functions to have all computed values saved by +default. +}{ +\spadpaste{)set functions cache all} +} +\xtc{ +This causes all functions that have not been specifically cached in some way +to have no computed values saved. +}{ +\spadpaste{)set functions cache 0} +} +\xtc{ +We also make \userfun{f} and \userfun{g} uncached. +}{ +\spadpaste{)set functions cache 0 f g} +} + +\beginImportant +Be careful about caching functions that have +\spadglossSee{side effects}{side effect}. +Such a function might destructively modify the elements of an array or +issue a \axiomFun{draw} command, for example. +A function that you expect to execute every time it is called should +not be cached. +Also, it is highly unlikely that a function with no arguments should +be cached. +\endImportant + +You should also be careful about caching functions that depend on +free variables. +See \downlink{``\ugUserFreeLocalTitle''}{ugUserFreeLocalPage} in +Section \ugUserFreeLocalNumber\ignore{ugUserFreeLocal} +for an example. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserRecurTitle}{Recurrence Relations} +\newcommand{\ugUserRecurNumber}{6.13.} + +@ +\section{Recurrence Relations} +\label{ugUserRecurPage} +\begin{itemize} +\item ugUserFreeLocalPage \ref{ugUserFreeLocalPage} on +page~\pageref{ugUserFreeLocalPage} +\item ugUserCachePage \ref{ugUserCachePage} on +page~\pageref{ugUserCachePage} +\end{itemize} +\index{pages!ugUserRecurPage!ug06.ht} +\index{ug06.ht!pages!ugUserRecurPage} +\index{ugUserRecurPage!ug06.ht!pages} +<>= +\begin{page}{ugUserRecurPage}{6.13. Recurrence Relations} +\beginscroll + +One of the most useful classes of function are those defined via a +``recurrence relation.'' +A {\it recurrence relation} makes each successive +value depend on some or all of the previous values. +A simple example is the ordinary ``factorial'' function: +\begin{verbatim} +fact(0) == 1 +fact(n | n > 0) == n * fact(n-1) +\end{verbatim} + +The value of +\axiom{fact(10)} depends on the value of \axiom{fact(9)}, \axiom{fact(9)} +on \axiom{fact(8)}, and so on. +Because it depends on only one previous value, it is usually called a +{\it first order recurrence relation.} +You can easily imagine a function based on two, three or more previous +values. +The Fibonacci numbers are probably the most famous function defined by a +second order recurrence relation. +\xtc{ +The library function \axiomFun{fibonacci} computes Fibonacci numbers. +It is obviously optimized for speed. +}{ +\spadpaste{[fibonacci(i) for i in 0..]} +} +\xtc{ +Define the +Fibonacci numbers ourselves using a piece-wise definition. +}{ +\spadpaste{fib(1) == 1 \bound{fib0}} +} +\xtc{ +}{ +\spadpaste{fib(2) == 1 \bound{fib1}\free{fib0}} +} +\xtc{ +}{ +\spadpaste{fib(n) == fib(n-1) + fib(n-2) \bound{fibn}\free{fib1}} +} + +As defined, this recurrence relation is obviously doubly-recursive. +To compute \axiom{fib(10)}, we need to compute \axiom{fib(9)} and +\axiom{fib(8)}. +And to \axiom{fib(9)}, we need to compute \axiom{fib(8)} and +\axiom{fib(7)}. +And so on. +It seems that to compute \axiom{fib(10)} we need to compute +\axiom{fib(9)} once, \axiom{fib(8)} twice, \axiom{fib(7)} three times. +Look familiar? +The number of function calls needed to compute {\it any} second order +recurrence relation in the obvious way is exactly \axiom{fib(n)}. +These numbers grow! +For example, if Axiom actually did this, then \axiom{fib(500)} +requires more than \texht{$10^{104}$}{\axiom{10**104}} function calls. +And, given all this, our definition of \userfun{fib} obviously could not be +used to calculate the five-hundredth Fibonacci number. +\xtc{ +Let's try it anyway. +}{ +\spadpaste{fib(500) \free{fibn}} +} + +Since this takes a short time to compute, it obviously didn't do +as many as \texht{$10^{104}$}{\axiom{10**104}} operations! +By default, Axiom transforms any recurrence relation it recognizes +into an iteration. +Iterations are efficient. +To compute the value of the \eth{\axiom{n}} +term of a recurrence relation using an iteration requires only +\axiom{n} function calls.\footnote{If +you compare the speed of our \userfun{fib} function +to the library function, our version is still slower. +This is because the library +\axiomFunFrom{fibonacci}{IntegerNumberTheoryFunctions} +uses a ``powering algorithm'' with a computing time +proportional to \texht{$\log^3(n)$}{\axiom{log(n)**3}} to compute +\axiom{fibonacci(n).}} + +To turn off this special recurrence relation compilation, issue +\begin{verbatim} +)set functions recurrence off +\end{verbatim} +To turn it back on, substitute ``{\tt on}'' for ``{\tt off}''. + +The transformations that Axiom uses for \userfun{fib} caches the +last two values.\footnote{For a more general \eth{\axiom{k}} order recurrence +relation, Axiom caches the last \axiom{k} values.} +If, after computing a value for \userfun{fib}, you ask +for some larger value, Axiom picks up the cached values +and continues computing from there. +See \downlink{``\ugUserFreeLocalTitle''}{ugUserFreeLocalPage} +in Section \ugUserFreeLocalNumber\ignore{ugUserFreeLocal} +for an example of a function definition that has this same behavior. +Also see \downlink{``\ugUserCacheTitle''}{ugUserCachePage} +in Section \ugUserCacheNumber\ignore{ugUserCache} +for a more general discussion of how you can cache function values. + +Recurrence relations can be used for defining recurrence relations +involving polynomials, rational functions, or anything you like. +Here we compute the infinite stream of Legendre polynomials. +\xtc{ +The Legendre polynomial of degree \axiom{0.} +}{ +\spadpaste{p(0) == 1\bound{p0}} +} +\xtc{ +The Legendre polynomial of degree \axiom{1.} +}{ +\spadpaste{p(1) == x\bound{p1}} +} + +\xtc{ +The Legendre polynomial of degree \axiom{n}. +}{ +\spadpaste{p(n) == ((2*n-1)*x*p(n-1) - (n-1)*p(n-2))/n\bound{pn}\free{p1}} +} +\xtc{ +Compute the Legendre polynomial of degree \axiom{6.} +}{ +\spadpaste{p(6)\free{pn}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserMakeTitle}{Making Functions from Objects} +\newcommand{\ugUserMakeNumber}{6.14.} + +@ +\section{Making Functions from Objects} +\label{ugUserMakePage} +\begin{itemize} +\item MakeFunctionXmpPage \ref{MakeFunctionXmpPage} on +page~\pageref{MakeFunctionXmpPage} +\end{itemize} +\index{pages!ugUserMakePage!ug06.ht} +\index{ug06.ht!pages!ugUserMakePage} +\index{ugUserMakePage!ug06.ht!pages} +<>= +\begin{page}{ugUserMakePage}{6.14. Making Functions from Objects} +\beginscroll + +There are many times when you compute a complicated expression +and then wish to use that expression as the body of a function. +Axiom provides an operation called \axiomFun{function} to do +this. +It creates a function object and places it into the workspace. +There are several versions, depending on how many arguments the function +has. +The first argument to \axiomFun{function} is always the expression to be +converted into the function body, and the second is always the name to be +used for the function. +For more information, see \downlink{`MakeFunction'}{MakeFunctionXmpPage} +\ignore{MakeFunction}. + +\xtc{ +Start with a simple example of a polynomial in three variables. +}{ +\spadpaste{p := -x + y**2 - z**3 \bound{p}} +} +\xtc{ +To make this into a function of no arguments that +simply returns the polynomial, use the two argument form of +\axiomFun{function}. +}{ +\spadpaste{function(p,'f0) \free{p}\bound{f0}} +} +\xtc{ +To avoid possible conflicts (see below), it is a good idea to +quote always this second argument. +}{ +\spadpaste{f0 \free{f0}} +} +\xtc{ +This is what you get when you evaluate the function. +}{ +\spadpaste{f0() \free{f0}} +} +\xtc{ +To make a function in \axiom{x}, use a version of +\axiomFun{function} that takes three arguments. +The last argument is the name of the variable to use as the parameter. +Typically, this variable occurs in the expression and, like the function +name, you should quote it to avoid possible confusion. +}{ +\spadpaste{function(p,'f1,'x) \free{p}\bound{f1}} +} +\xtc{ +This is what the new function looks like. +}{ +\spadpaste{f1 \free{f1}} +} +\xtc{ +This is the value of \userfun{f1} at \axiom{x = 3}. +Notice that the return type of the function is +\axiomType{Polynomial (Integer)}, the same as \axiom{p}. +}{ +\spadpaste{f1(3) \free{f1}} +} +\xtc{ +To use \axiom{x} and \axiom{y} as parameters, use the +four argument form of \axiomFun{function}. +}{ +\spadpaste{function(p,'f2,'x,'y) \free{p}\bound{f2}} +} +\xtc{ +}{ +\spadpaste{f2 \free{f2}} +} +\xtc{ +Evaluate \axiom{f2} at \axiom{x = 3} and \axiom{y = 0}. +The return type of \userfun{f2} is still +\axiomType{Polynomial(Integer)} because the variable \axiom{z} +is still present and not one of the parameters. +}{ +\spadpaste{f2(3,0) \free{f2}} +} +\xtc{ +Finally, use all three variables as parameters. +There is no five argument form of \axiomFun{function}, so use the one with +three arguments, the third argument being a list of the parameters. +}{ +\spadpaste{function(p,'f3,['x,'y,'z]) \free{p}\bound{f3}} +} +\xtc{ +Evaluate this using the same values for \axiom{x} and \axiom{y} +as above, but let \axiom{z} be \axiom{-6}. +The result type of \userfun{f3} is \axiomType{Integer}. +}{ +\spadpaste{f3 \free{f3}} +} +\xtc{ +}{ +\spadpaste{f3(3,0,-6) \free{f3}} +} + +The four functions we have defined via \axiom{p} have been undeclared. +To declare a function whose body is to be generated by +\axiomFun{function}, +issue the declaration {\it before} the function is created. +\xtc{ +}{ +\spadpaste{g: (Integer, Integer) -> Float \bound{g}} +} +\xtc{ +}{ +\spadpaste{D(sin(x-y)/cos(x+y),x) \bound{prev}} +} +\xtc{ +}{ +\spadpaste{function(\%,'g,'x,'y) \free{g}\free{prev}} +} +\xtc{ +}{ +\spadpaste{g \free{g}} +} +It is an error to use \axiom{g} without the quote in the +penultimate expression since \axiom{g} had been declared but did not have +a value. +Similarly, since it is common to overuse variable names like \axiom{x}, +\axiom{y}, and so on, +you avoid problems if you always quote the variable names +for \axiomFun{function}. +In general, +if \axiom{x} has a value and you use \axiom{x} without a quote in a call to +\axiomFun{function}, then +Axiom does not know what you are trying to do. + +What kind of object is allowable as the first argument to \axiomFun{function}? +Let's use the \Browse{} facility of \HyperName{} to find out. +At the main \Browse{} menu, enter the string {\tt function} and then +click on {\bf Operations.} +The exposed operations called \axiomFun{function} all take an object +whose type belongs to category \axiomType{ConvertibleTo InputForm}. +What domains are those? +Go back to the main \Browse{} menu, erase {\tt function}, +enter {\tt ConvertibleTo} in the +input area, and click on {\bf categories} on the {\bf Constructors} line. +At the bottom of the page, enter {\tt InputForm} in the input area +following {\bf S =}. +Click on {\bf Cross Reference} and then on {\bf Domains}. +The list you see contains over forty domains that belong to the +category \axiomType{ConvertibleTo InputForm}. +Thus you can use \axiomFun{function} for \axiomType{Integer}, +\axiomType{Float}, +\axiomType{String}, +\axiomType{Complex}, +\axiomType{Expression}, and so on. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserBlocksTitle}{Functions Defined with Blocks} +\newcommand{\ugUserBlocksNumber}{6.15.} + +@ +\section{Functions Defined with Blocks} +\label{ugUserBlocksPage} +\begin{itemize} +\item ugLangBlocksPage \ref{ugLangBlocksPage} on +page~\pageref{ugLangBlocksPage} +\end{itemize} +\index{pages!ugUserBlocksPage!ug06.ht} +\index{ug06.ht!pages!ugUserBlocksPage} +\index{ugUserBlocksPage!ug06.ht!pages} +<>= +\begin{page}{ugUserBlocksPage}{6.15. Functions Defined with Blocks} +\beginscroll + +You need not restrict yourself to functions that only fit on one line +or are written in a piece-wise manner. +The body of the function can be a block, as discussed in +\downlink{``\ugLangBlocksTitle''}{ugLangBlocksPage} +in Section \ugLangBlocksNumber\ignore{ugLangBlocks}. + +\labelSpace{1pc} +\xtc{ +Here is a short function that swaps two elements of a list, +array or vector. +}{ +\begin{spadsrc}[\bound{swap}] +swap(m,i,j) == + temp := m.i + m.i := m.j + m.j := temp +\end{spadsrc} +} +\xtc{ +The significance of \userfun{swap} is that it has a destructive +effect on its first argument. +}{ +\spadpaste{k := [1,2,3,4,5] \bound{k}} +} +\xtc{ +}{ +\spadpaste{swap(k,2,4) \free{l swap}\bound{swapk}} +} +\xtc{ +You see that the second and fourth elements are interchanged. +}{ +\spadpaste{k \free{swapk}} +} + +\xtc{ +Using this, we write a couple of different sort functions. +First, a simple bubble sort. +The operation \axiomOpFrom{\#}{List} returns the number of elements in +an aggregate. +}{ +\begin{spadsrc}[\bound{bubbleSort}] +bubbleSort(m) == + n := #m + for i in 1..(n-1) repeat + for j in n..(i+1) by -1 repeat + if m.j < m.(j-1) then swap(m,j,j-1) + m +\end{spadsrc} +} +\xtc{ +Let this be the list we want to sort. +}{ +\spadpaste{m := [8,4,-3,9] \bound{m}} +} +\xtc{ +This is the result of sorting. +}{ +\spadpaste{bubbleSort(m) \free{m swap bubbleSort}\bound{sortm}} +} +\xtc{ +Moreover, \axiom{m} is destructively changed to be the sorted version. +}{ +\spadpaste{m \free{sortm}} +} + +\xtc{ +This function implements an insertion sort. +The basic idea is to traverse the list and insert the \eth{\axiom{i}} +element in its correct position among the \axiom{i-1} previous +elements. +Since we start at the beginning of the list, the list elements before the +\eth{\axiom{i}} element have already been placed in ascending order. +}{ +\begin{spadsrc}[\bound{insertionSort}] +insertionSort(m) == + for i in 2..#m repeat + j := i + while j > 1 and m.j < m.(j-1) repeat + swap(m,j,j-1) + j := j - 1 + m +\end{spadsrc} +} +\xtc{ +As with our bubble sort, this is a destructive function. +}{ +\spadpaste{m := [8,4,-3,9] \bound{m1}} +} +\xtc{ +}{ +\spadpaste{insertionSort(m) \free{m1 swap insertionSort}\bound{sortm1}} +} +\xtc{ +}{ +\spadpaste{m \free{sortm1}} +} + +Neither of the above functions is efficient for sorting large lists since +they reference elements by asking for the \eth{\axiom{j}} element of the +structure \axiom{m}. +%For lists, compute \axiom{m.(j+1) = rest(m,j).first}, and thus, starting at +%the first node of \axiom{m}, walk down to the \eth{\axiom{j}} node, then call +%\axiomFun{first}. + +\xtc{ +Here is a more efficient bubble sort for lists. +}{ +\begin{spadsrc}[\bound{bubbleSort2}] +bubbleSort2(m: List Integer): List Integer == + null m => m + l := m + while not null (r := l.rest) repeat + r := bubbleSort2 r + x := l.first + if x < r.first then + l.first := r.first + r.first := x + l.rest := r + l := l.rest + m +\end{spadsrc} +} +\xtc{ +Try it out. +}{ +\spadpaste{bubbleSort2 [3,7,2]\free{bubbleSort2}} +} + +This definition is both recursive and iterative, and is tricky! +Unless you are {\it really} curious about this definition, +we suggest you skip immediately to the next section. + +Here are the key points in the definition. +First notice that if you are sorting a list with less than two elements, +there is nothing to do: just return the list. +This definition returns immediately if there are zero elements, and skips +the entire \axiom{while} loop if there is just one element. + +The second point to realize is that on each outer iteration, the bubble sort +ensures that the minimum element is propagated leftmost. +Each iteration of the \axiom{while} loop calls \userfun{bubbleSort2} +recursively to sort all but the first element. +When finished, the minimum element is either in the first or second position. +The conditional expression ensures that it comes first. +If it is in the second, then a swap occurs. +In any case, the \axiomFun{rest} of the original list must be updated to hold +the result of the recursive call. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserFreeLocalTitle}{Free and Local Variables} +\newcommand{\ugUserFreeLocalNumber}{6.16.} + +@ +\section{Free and Local Variables} +\label{ugUserFreeLocalPage} +\begin{itemize} +\item ugUserCachePage \ref{ugUserCachePage} on +page~\pageref{ugUserCachePage} +\item ugUserRecurPage \ref{ugUserRecurPage} on +page~\pageref{ugUserRecurPage} +\end{itemize} +\index{pages!ugUserFreeLocalPage!ug06.ht} +\index{ug06.ht!pages!ugUserFreeLocalPage} +\index{ugUserFreeLocalPage!ug06.ht!pages} +<>= +\begin{page}{ugUserFreeLocalPage}{6.16. Free and Local Variables} +\beginscroll + +When you want to refer to a variable that is not local to your +function, use a ``\axiom{free}'' declaration. +\spadkey{free} +Variables declared to be \axiom{free} +are assumed to be defined globally +in the +workspace. + +\labelSpace{1pc} +\xtc{ +This is a global workspace variable. +}{ +\spadpaste{counter := 0 \bound{counter}} +} +\xtc{ +This function refers to the global \axiom{counter}. +}{ +\begin{spadsrc}[\free{counter}\bound{f}] +f() == + free counter + counter := counter + 1 +\end{spadsrc} +} +\xtc{ +The global \axiom{counter} is incremented by \axiom{1}. +}{ +\spadpaste{f() \free{f}\bound{f1}} +} +\xtc{ +}{ +\spadpaste{counter \free{f1}} +} + +Usually Axiom can tell that you mean to refer to a global +variable and so \axiom{free} isn't always necessary. +However, for clarity and the sake of self-documentation, we encourage +you to use it. + +Declare a variable to be ``\axiom{local}'' when you do not want to refer to +a global variable by the same name. + +\xtc{ +This function uses \axiom{counter} as a local variable. +}{ +\begin{spadsrc}[\bound{g}] +g() == + local counter + counter := 7 +\end{spadsrc} +} +\xtc{ +Apply the function. +}{ +\spadpaste{g() \free{g}} +} +\xtc{ +Check that the global value of \axiom{counter} is unchanged. +}{ +\spadpaste{counter\free{g f1}} +} + +Parameters to a function are local variables in the function. +Even if you issue a \axiom{free} declaration for a parameter, it is +still local. + +What happens if you do not declare that a variable \axiom{x} in +the body of your function is \axiom{local} or \axiom{free}? +Well, Axiom decides on this basis: + +\indent{4} +\beginitems +\item[1. ] Axiom scans your function line-by-line, from top-to-bottom. +The right-hand side of an assignment is looked at before the left-hand +side. +\item[2. ] If \axiom{x} is referenced before it is assigned a value, it is a +\axiom{free} (global) variable. +\item[3. ] If \axiom{x} is assigned a value before it is referenced, it is a +\axiom{local} variable. +\enditems +\indent{0} + +\xtc{ +Set two global variables to 1. +}{ +\spadpaste{a := b := 1\bound{ab1}} +} +\xtc{ +Refer to \axiom{a} before it is assigned a value, but +assign a value to \axiom{b} before it is referenced. +}{ +\begin{spadsrc}[\bound{hh}] +h() == + b := a + 1 + a := b + a +\end{spadsrc} +} +\xtc{ +Can you predict this result? +}{ +\spadpaste{h() \free{ab1 hh}\bound{hhh}} +} +\xtc{ +How about this one? +}{ +\spadpaste{[a, b] \free{hhh}} +} + +What happened? +In the first line of the function body for \axiom{h}, \axiom{a} is +referenced on the right-hand side of the assignment. +Thus \axiom{a} is a free variable. +The variable \axiom{b} is not referenced in that line, but it is +assigned a value. +Thus \axiom{b} is a local variable and is given the value +\axiom{a + 1 = 2}. +In the second line, the free variable \axiom{a} is assigned the value +\axiom{b + a}which equals \axiom{2 + 1 = 3.} +This is the value returned by the function. +Since \axiom{a} was free in \userfun{h}, the global variable \axiom{a} +has value \axiom{3.} +Since \axiom{b} was local in \userfun{h}, the global variable \axiom{b} +is unchanged---it still has the value \axiom{1.} + +It is good programming practice always to declare global variables. +However, by far the most common situation is to have local variables in +your functions. +No declaration is needed for this situation, but be sure to +initialize their values. + +Be careful if you use free variables and you cache the value of +your function (see \downlink{``\ugUserCacheTitle''}{ugUserCachePage} +in Section \ugUserCacheNumber\ignore{ugUserCache}). +Caching {\it only} checks if the values of the function arguments +are the same as in a function call previously seen. +It does not check if any of the free variables on which the +function depends have changed between function calls. +\xtc{ +Turn on caching for \userfun{p}. +}{ +\spadpaste{)set fun cache all p \bound{pcache}} +} +\xtc{ +Define \userfun{p} to depend on the free variable \axiom{N}. +}{ +\spadpaste{p(i,x) == ( free N; reduce( + , [ (x-i)**n for n in 1..N ] ) ) \free{pcache}\bound{pdef}} +} +\xtc{ +Set the value of \axiom{N}. +}{ +\spadpaste{N := 1 \bound{Nass}} +} +\xtc{ +Evaluate \userfun{p} the first time. +}{ +\spadpaste{p(0, x) \free{pdef Nass}\bound{pfirst}} +} +\xtc{ +Change the value of \axiom{N}. +}{ +\spadpaste{N := 2 \bound{Nass2}} +} +\xtc{ +Evaluate \userfun{p} the second time. +}{ +\spadpaste{p(0, x) \free{pfirst Nass2}} +} +If caching had been turned off, the second evaluation would have +reflected the changed value of \axiom{N}. +\xtc{ +Turn off caching for \userfun{p}. +}{ +\spadpaste{)set fun cache 0 p} +} + +Axiom does not allow {\it fluid variables}, that is, variables +\spadglossSee{bound}{binding} by a function \spad{f} that can be referenced by +functions called by \spad{f}. + +Values are passed to functions by \spadgloss{reference}: a pointer +to the value is passed rather than a copy of the value or a pointer to +a copy. + +\xtc{ +This is a global variable that is bound to a record object. +}{ +\spadpaste{r : Record(i : Integer) := [1] \free{r}} +} +\xtc{ +This function first modifies the one component of its +record argument and then rebinds the parameter to another +record. +}{ +\begin{spadsrc}[\bound{resetRecord}] +resetRecord rr == + rr.i := 2 + rr := [10] +\end{spadsrc} +} +\xtc{ +Pass \axiom{r} as an argument to \userfun{resetRecord}. +}{ +\spadpaste{resetRecord r \free{r resetRecord}\bound{rr}} +} +\xtc{ +The value of \axiom{r} was changed by the expression +\axiom{rr.i := 2} but not by \axiom{rr := [10]}. +}{ +\spadpaste{r \free{rr}} +} + +To conclude this section, we give an iterative definition of +a function that computes Fibonacci numbers. +This definition approximates the definition into which Axiom +transforms the recurrence relation definition of \userfun{fib} in +\downlink{``\ugUserRecurTitle''}{ugUserRecurPage} +in Section \ugUserRecurNumber\ignore{ugUserRecur}. + +\xtc{ +Global variables +\axiom{past} and \axiom{present} are used +to hold the last computed Fibonacci numbers. +}{ +\spadpaste{past := present := 1\bound{f0}} +} +\xtc{ +Global variable \axiom{index} gives the +current index of \axiom{present}. +}{ +\spadpaste{index := 2\bound{f1}\free{f0}} +} +\xtc{ +Here is a recurrence relation defined in terms +of these three global variables. +}{ +\begin{spadsrc}[\bound{f3}\free{f2}] +fib(n) == + free past, present, index + n < 3 => 1 + n = index - 1 => past + if n < index-1 then + (past,present) := (1,1) + index := 2 + while (index < n) repeat + (past,present) := (present, past+present) + index := index + 1 + present +\end{spadsrc} +} +\xtc{ +Compute the infinite stream of Fibonacci numbers. +}{ +\spadpaste{fibs := [fib(n) for n in 1..] \bound{fibs}\free{f3}} +} +\xtc{ +What is the 1000th Fibonacci number? +}{ +\spadpaste{fibs 1000 \free{fibs}} +} + +As an exercise, we suggest you write a function in an iterative +style that computes the value of the recurrence relation +\texht{$p(n) = p(n-1) - 2 \, p(n-2) + 4 \, p(n-3)$}{\axiom{p(n) = p(n-1) - 2*p(n-2) + 4*p(n-3)}} +having the initial values +\texht{$p(1) = 1,\, p(2) = 3 \hbox{ and } p(3) = 9.$}{\axiom{p(1) = 1, p(2) = 3 {\rm and} p(3) = 9.}} +How would you write the function using an element +\axiomType{OneDimensionalArray} or \axiomType{Vector} +to hold the previously computed values? + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserAnonTitle}{Anonymous Functions} +\newcommand{\ugUserAnonNumber}{6.17.} + +@ +\section{Anonymous Functions} +\label{ugUserAnonPage} +\begin{itemize} +\item ugUserAnonExampPage \ref{ugUserAnonExampPage} on +page~\pageref{ugUserAnonExampPage} +\item ugUserAnonDeclarePage \ref{ugUserAnonDeclarePage} on +page~\pageref{ugUserAnonDeclarePage} +\end{itemize} +\index{pages!ugUserAnonPage!ug06.ht} +\index{ug06.ht!pages!ugUserAnonPage} +\index{ugUserAnonPage!ug06.ht!pages} +<>= +\begin{page}{ugUserAnonPage}{6.17. Anonymous Functions} +\beginscroll + +\beginImportant +An {\it anonymous function} is a function that is +defined +by giving a list of parameters, the ``maps-to'' compound +symbol \axiomSyntax{+->} \texht{(from the mathematical symbol +$\mapsto$)}{}, +and by an expression involving the parameters, the evaluation of +which determines the return value of the function. + +\centerline{{{\tt ( \subscriptIt{parm}{1}, \subscriptIt{parm}{2}, \ldots, \subscriptIt{parm}{N} ) +-> {\it expression}}}} +\endImportant + +You can apply an anonymous function in several ways. +\indent{4} +\beginitems +\item[1. ] Place the anonymous function definition in parentheses +directly followed by a list of arguments. +\item[2. ] Assign the anonymous function to a variable and then +use the variable name when you would normally use a function name. +\item[3. ] Use \axiomSyntax{==} to use the anonymous function definition as +the arguments and body of a regular function definition. +\item[4. ] Have a named function contain a declared anonymous function and +use the result returned by the named function. +\enditems +\indent{0} + +\beginmenu + \menudownlink{{6.17.1. Some Examples}}{ugUserAnonExampPage} + \menudownlink{{6.17.2. Declaring Anonymous Functions}} +{ugUserAnonDeclarePage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserAnonExampTitle}{Some Examples} +\newcommand{\ugUserAnonExampNumber}{6.17.1.} + +@ +\section{Some Examples} +\label{ugUserAnonExampPage} +\index{pages!ugUserAnonExampPage!ug06.ht} +\index{ug06.ht!pages!ugUserAnonExampPage} +\index{ugUserAnonExampPage!ug06.ht!pages} +<>= +\begin{page}{ugUserAnonExampPage}{6.17.1. Some Examples} +\beginscroll + +Anonymous functions are particularly useful for defining functions +``on the fly.'' That is, they are handy for simple functions that +are used only in one place. +In the following examples, we show how to write some simple +anonymous functions. + +\xtc{ +This is a simple absolute value function. +}{ +\spadpaste{x +-> if x < 0 then -x else x \bound{anon0}} +} +\xtc{ +}{ +\spadpaste{abs1 := \% \free{anon0}\bound{abs1}} +} +\xtc{ +This function returns {\tt true} if the absolute value of +the first argument is greater than the absolute value of the +second, {\tt false} otherwise. +}{ +\spadpaste{(x,y) +-> abs1(x) > abs1(y) \bound{anon1}\free{abs1}} +} +\xtc{ +We use the above function to ``sort'' a list of integers. +}{ +\spadpaste{sort(\%,[3,9,-4,10,-3,-1,-9,5]) \free{anon1}} +} + +\xtc{ +This function returns \axiom{1} if \axiom{i + j} is even, \axiom{-1} otherwise. +}{ +\spadpaste{ev := ( (i,j) +-> if even?(i+j) then 1 else -1) \bound{ev}} +} +\xtc{ +We create a four-by-four matrix containing \axiom{1} or \axiom{-1} +depending on whether the row plus the column index is even or not. +}{ +\spadpaste{matrix([[ev(row,col) for row in 1..4] for col in 1..4]) \free{ev}} +} + +\xtc{ +This function returns {\tt true} if a polynomial in \axiom{x} has multiple +roots, {\tt false} otherwise. +It is defined and applied in the same expression. +}{ +\spadpaste{( p +-> not one?(gcd(p,D(p,x))) )(x**2+4*x+4)} +} + +\xtc{ +This and the next expression are equivalent. +}{ +\spadpaste{g(x,y,z) == cos(x + sin(y + tan(z)))} +} +\xtc{ +The one you use is a matter of taste. +}{ +\spadpaste{g == (x,y,z) +-> cos(x + sin(y + tan(z)))} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserAnonDeclareTitle}{Declaring Anonymous Functions} +\newcommand{\ugUserAnonDeclareNumber}{6.17.2.} + +@ +\section{Declaring Anonymous Functions} +\label{ugUserAnonDeclarePage} +\index{pages!ugUserAnonDeclarePage!ug06.ht} +\index{ug06.ht!pages!ugUserAnonDeclarePage} +\index{ugUserAnonDeclarePage!ug06.ht!pages} +<>= +\begin{page}{ugUserAnonDeclarePage}{6.17.2. Declaring Anonymous Functions} +\beginscroll + +If you declare any of the arguments you must declare all of them. +Thus, +\begin{verbatim} +(x: INT,y): FRAC INT +-> (x + 2*y)/(y - 1) +\end{verbatim} +is not legal. + +\xtc{ +This is an example of a fully declared anonymous +function. +The output shown just indicates that the object you created is a +particular kind of map, that is, function. +}{ +\spadpaste{(x: INT,y: INT): FRAC INT +-> (x + 2*y)/(y - 1)} +} +\xtc{ +Axiom allows you to declare the arguments and not declare +the return type. +}{ +\spadpaste{(x: INT,y: INT) +-> (x + 2*y)/(y - 1)} +} +The return type is computed from the types of the arguments and the +body of the function. +You cannot declare the return type if you do not declare the arguments. +Therefore, +\begin{verbatim} +(x,y): FRAC INT +-> (x + 2*y)/(y - 1) +\end{verbatim} +is not legal. + +\xtc{ +This and the next expression are equivalent. +}{ +\spadpaste{h(x: INT,y: INT): FRAC INT == (x + 2*y)/(y - 1)} +} +\xtc{ +The one you use is a matter of taste. +}{ +\spadpaste{h == (x: INT,y: INT): FRAC INT +-> (x + 2*y)/(y - 1)} +} + +When should you declare an anonymous function? +\indent{4} +\beginitems +\item[1. ] If you use an anonymous function and Axiom can't figure +out what you are trying to do, declare the function. +\item[2. ] If the function has nontrivial argument types or a +nontrivial return type that +Axiom may be able to determine eventually, but you are not +willing to wait that long, declare the function. +\item[3. ] If the function will only be used for arguments of specific +types and it is not too much trouble to declare the function, do so. +\item[4. ] If you are using the anonymous function as an argument to +another function (such as \axiomFun{map} or \axiomFun{sort}), +consider declaring the function. +\item[5. ] If you define an anonymous function inside a named function, +you {\it must} declare the anonymous function. +\enditems +\indent{0} + +\xtc{ +This is an example of a named function for integers that returns a +function. +}{ +\spadpaste{addx x == ((y: Integer): Integer +-> x + y) \bound{addx}} +} +\xtc{ +We define \userfun{g} to be a function that adds \axiom{10} to its +argument. +}{ +\spadpaste{g := addx 10 \free{addx}\bound{g}} +} +\xtc{ +Try it out. +}{ +\spadpaste{g 3 \free{g}} +} +\xtc{ +}{ +\spadpaste{g(-4) \free{g}} +} + +An anonymous function cannot be recursive: since it does not have a +name, you cannot even call it within itself! +If you place an anonymous function inside a named function, the +anonymous function must be declared. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserDatabaseTitle}{Example: A Database} +\newcommand{\ugUserDatabaseNumber}{6.18.} + +@ +\section{Example: A Database} +\label{ugUserDatabasePage} +\index{pages!ugUserDatabasePage!ug06.ht} +\index{ug06.ht!pages!ugUserDatabasePage} +\index{ugUserDatabasePage!ug06.ht!pages} +<>= +\begin{page}{ugUserDatabasePage}{6.18. Example: A Database} +\beginscroll + +This example shows how you can use Axiom to organize a database of +lineage data and then query the database for relationships. + +\labelSpace{1.5pc} +\xtc{ +The database is entered as ``assertions'' that are really +pieces of a function definition. +}{ +\spadpaste{children("albert") == ["albertJr","richard","diane"]\bound{d1}} +} +\xtc{ +Each piece +\axiom{children(x) == y} means +``the children of \axiom{x} are \axiom{y}''. +}{ +\spadpaste{children("richard") == ["douglas","daniel","susan"]\free{d1}\bound{d2}} +} +\xtc{ +This family tree thus spans four generations. +}{ +\spadpaste{children("douglas") == ["dougie","valerie"]\free{d2}\bound{d3}} +} +\xtc{ +Say ``no one else has children.'' +}{ +\spadpaste{children(x) == []\free{d3}\bound{d4}} +} + +\xtc{ +We need some functions for computing lineage. +Start with \axiom{childOf}. +}{ +\spadpaste{childOf(x,y) == member?(x,children(y))\bound{d9}\free{d10}} +} +\xtc{ +To find the \axiom{parentOf} someone, +you have to scan the database of +people applying \axiom{children}. +}{ +\begin{spadsrc}[\bound{d8a}\free{d9}] +parentOf(x) == + for y in people repeat + (if childOf(x,y) then return y) + "unknown" +\end{spadsrc} +} +\xtc{ +And a grandparent of \axiom{x} is just a parent of a parent of \axiom{x}. +}{ +\spadpaste{grandParentOf(x) == parentOf parentOf x\bound{d8}\free{d8a}} +} +\xtc{ +The grandchildren of \axiom{x} +are the people \axiom{y} such that +\axiom{x} is a grandparent of \axiom{y}. +}{ +\spadpaste{grandchildren(x) == [y for y in people | grandParentOf(y) = x]\free{d7}\bound{d8}} +} +\xtc{ +Suppose you want to make a list of all great-grandparents. +Well, a great-grandparent is a grandparent of a person who has children. +}{ +\begin{spadsrc}[\free{d6}\bound{d7}] +greatGrandParents == [x for x in people | + reduce(_or,[not empty? children(y) for y in grandchildren(x)],false)] +\end{spadsrc} +} +\xtc{ +Define \axiom{descendants} to include the parent as well. +}{ +\begin{spadsrc}[\free{d5}\bound{d6}] +descendants(x) == + kids := children(x) + null kids => [x] + concat(x,reduce(concat,[descendants(y) + for y in kids],[])) +\end{spadsrc} +} +\xtc{ +Finally, we need a list of people. +Since all people are descendants of ``albert'', let's say so. +}{ +\spadpaste{people == descendants "albert"\free{d4}\bound{d5}} +} + +We have used \axiomSyntax{==} to define the database and some functions to +query the database. +But no computation is done until we ask for some information. +Then, once and for all, the functions are analyzed and compiled to machine +code for run-time efficiency. +Notice that no types are given anywhere in this example. +They are not needed. + +\xtc{ +Who are the grandchildren of ``richard''? +}{ +\spadpaste{grandchildren "richard"\bound{d10}\free{d11}} +} +\xtc{ +Who are the great-grandparents? +}{ +\spadpaste{greatGrandParents\bound{d11}\free{d12}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserTriangleTitle}{Example: A Famous Triangle} +\newcommand{\ugUserTriangleNumber}{6.19.} + +@ +\section{Example: A Famous Triangle} +\label{ugUserTrianglePage} +\begin{itemize} +\item ugTypesExposePage \ref{ugTypesExposePage} on +page~\pageref{ugTypesExposePage} +\end{itemize} +\index{pages!ugUserTrianglePage!ug06.ht} +\index{ug06.ht!pages!ugUserTrianglePage} +\index{ugUserTrianglePage!ug06.ht!pages} +<>= +\begin{page}{ugUserTrianglePage}{6.19. Example: A Famous Triangle} +\beginscroll + +In this example we write some functions that display +Pascal's triangle. +It demonstrates the use of piece-wise definitions and some output +operations you probably haven't seen before. + +\labelSpace{1pc} +\xtc{ +To make these output operations +available, we have to \spadgloss{expose} the domain +\axiomType{OutputForm}. +See \downlink{``\ugTypesExposeTitle''}{ugTypesExposePage} +in Section \ugTypesExposeNumber\ignore{ugTypesExpose} for +more information about exposing domains +and packages. +}{ +\spadpaste{)set expose add constructor OutputForm \bound{expose}} +} +\xtc{ +Define the values along the first +row and any column \axiom{i}. +}{ +\spadpaste{pascal(1,i) == 1 \bound{pas1}} +} +\xtc{ +Define the values for when the row +and column index \axiom{i} are equal. +Repeating the argument name indicates that +the two index values are equal. +}{ +\spadpaste{pascal(n,n) == 1 \bound{pas2}\free{pas1}} +} +\xtc{ +}{ +\begin{spadsrc}[\bound{pas3}\free{pas1 pas2}] +pascal(i,j | 1 < i and i < j) == + pascal(i-1,j-1)+pascal(i,j-1) +\end{spadsrc} +} +Now that we have defined the coefficients in Pascal's triangle, +let's write a couple of one-liners to display it. +\xtc{ +First, define a function that gives the \eth{\axiom{n}} row. +}{ +\spadpaste{pascalRow(n) == [pascal(i,n) for i in 1..n] \bound{pascalRow}\free{pas3}} +} +\xtc{ +Next, we write the function \userfun{displayRow} +to display the row, separating entries by blanks and centering. +}{ +\spadpaste{displayRow(n) == output center blankSeparate pascalRow(n) \free{pascalRow}\bound{displayRow}\free{expose}} +} +% +Here we have used three output operations. +Operation \axiomFunFrom{output}{OutputForm} +displays the printable form of objects on the screen, +\axiomFunFrom{center}{OutputForm} centers a printable form in the +width of the screen, and \axiomFunFrom{blankSeparate}{OutputForm} takes a list of +printable forms and inserts a blank between successive elements. +\xtc{ +Look at the result. +}{ +\spadpaste{for i in 1..7 repeat displayRow i \free{displayRow}} +} +Being purists, we find this less than satisfactory. +Traditionally, elements of Pascal's triangle are centered between +the left and right elements on the line above. +% +\xtc{ +To fix this misalignment, we go back and +redefine \userfun{pascalRow} to right adjust the entries within the +triangle within a width of four characters. +}{ +\spadpaste{pascalRow(n) == [right(pascal(i,n),4) for i in 1..n] \bound{pascalRow2}} +} +% +\xtc{ +Finally let's look at our purely reformatted triangle. +}{ +\spadpaste{for i in 1..7 repeat displayRow i \free{pascalRow2}\free{displayRow}} +} +\xtc{ +Unexpose \axiomType{OutputForm} so we don't get unexpected +results later. +}{ +\spadpaste{)set expose drop constructor OutputForm} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserPalTitle}{Example: Testing for Palindromes} +\newcommand{\ugUserPalNumber}{6.20.} + +@ +\section{Example: Testing for Palindromes} +\label{ugUserPalPage} +\begin{itemize} +\item ugUserTrianglePage \ref{ugUserTrianglePage} on +page~\pageref{ugUserTrianglePage} +\end{itemize} +\index{pages!ugUserPalPage!ug06.ht} +\index{ug06.ht!pages!ugUserPalPage} +\index{ugUserPalPage!ug06.ht!pages} +<>= +\begin{page}{ugUserPalPage}{6.20. Example: Testing for Palindromes} +\beginscroll + + +In this section we define a function \userfun{pal?} that tests whether its +argument is a {\it palindrome}, that is, something that reads the same +backwards and forwards. +For example, the string ``Madam I'm Adam'' is a palindrome (excluding blanks +and punctuation) and so is the number \axiom{123454321.} +The definition works for any datatype that has \axiom{n} components that +are accessed by the indices \axiom{1\ldots n}. + +\xtc{ +Here is the definition for \userfun{pal?}. +It is simply a call to an auxiliary function called +\userfun{palAux?}. +We are following the convention of ending a function's name with +\axiomSyntax{?} if the function returns a \axiomType{Boolean} value. +}{ +\spadpaste{pal? s == palAux?(s,1,\#s) \bound{pal}} +} +\xtc{ +Here is \userfun{palAux?}. +It works by comparing elements that are equidistant from the start and end +of the object. +}{ +\begin{spadsrc}[\bound{palAux}] +palAux?(s,i,j) == + j > i => + (s.i = s.j) and palAux?(s,i+1,i-1) + true +\end{spadsrc} +} +\xtc{ +Try \userfun{pal?} on some examples. +First, a string. +}{ +\spadpaste{pal? "Oxford" \free{pal palAux}} +} +\xtc{ +A list of polynomials. +}{ +\spadpaste{pal? [4,a,x-1,0,x-1,a,4] \free{pal palAux}} +} +\xtc{ +A list of integers from the example in +\texht{the last section.}{\downlink{``\ugUserTriangleTitle''} +{ugUserTrianglePage} in Section \ugUserTriangleNumber +\ignore{ugUserTriangle}.} +}{ +\spadpaste{pal? [1,6,15,20,15,6,1] \free{pal palAux}} +} +\xtc{ +To use \userfun{pal?} on an integer, first convert it to a string. +}{ +\spadpaste{pal?(1441::String)\free{pal palAux}} +} +\xtc{ +Compute an infinite stream of decimal numbers, +each of which is an obvious palindrome. +}{ +\spadpaste{ones := [reduce(+,[10**j for j in 0..i]) for i in 1..]\free{pal palAux}\bound{pal5}} +} +\xtc{ +How about their squares? +}{ +\spadpaste{squares := [x**2 for x in ones]\free{pal5}\bound{pal6}} +} +\xtc{ +Well, let's test them all! +}{ +\spadpaste{[pal?(x::String) for x in squares]\free{pal6}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugUserRulesTitle}{Rules and Pattern Matching} +\newcommand{\ugUserRulesNumber}{6.21.} + +@ +\section{Rules and Pattern Matching} +\label{ugUserRulesPage} +\index{pages!ugUserRulesPage!ug06.ht} +\index{ug06.ht!pages!ugUserRulesPage} +\index{ugUserRulesPage!ug06.ht!pages} +<>= +\begin{page}{ugUserRulesPage}{6.21. Rules and Pattern Matching} +\beginscroll + +A common mathematical formula is +\texht{\narrowDisplay{% +\log(x) + \log(y) = \log(x y) \quad\forall \, x \hbox{\ and\ } y.}}{ +\axiom{log(x) + log(y) == log(x * y)} for any \axiom{x} and \axiom{y}.} +The presence of +\texht{``$\forall$''}{the word ``any''} +indicates that \axiom{x} and \axiom{y} can stand for arbitrary mathematical +expressions in the above formula. +You can use such mathematical formulas in Axiom to specify ``rewrite +rules''. +Rewrite rules are objects in Axiom that can be assigned to variables for +later use, often for the purpose of simplification. +Rewrite rules look like ordinary function definitions except that they are +preceded by the reserved word \axiom{rule}. +\spadkey{rule} +For example, a rewrite rule for the above formula is: +\begin{verbatim} +rule log(x) + log(y) == log(x * y) +\end{verbatim} +Like function definitions, no action is taken when a rewrite rule is issued. +Think of rewrite rules as functions that take one argument. +When a rewrite rule \axiom{A = B} is applied to an argument \axiom{f}, its +meaning is: ``rewrite every subexpression of \axiom{f} that {\it matches} +\axiom{A} by \axiom{B.}'' +The left-hand side of a rewrite rule is called a \spadgloss{pattern}; its +right-side side is called its \spadgloss{substitution}. + +\xtc{ +Create a rewrite rule named \userfun{logrule}. +The generated symbol beginning with a \axiomSyntax{\%} is a place-holder +for any other terms that might occur in the sum. +}{ +\spadpaste{logrule := rule log(x) + log(y) == log(x * y) \bound{logrule}} +} +\xtc{ +Create an expression with logarithms. +}{ +\spadpaste{f := log sin x + log x \bound{f}} +} +\xtc{ +Apply \userfun{logrule} to \axiom{f}. +}{ +\spadpaste{logrule f \free{f}\free{logrule}} +} + +The meaning of our example rewrite rule is: +``for all expressions \axiom{x} and \axiom{y}, rewrite +\axiom{log(x) + log(y)} by \axiom{log(x * y)}.'' +Patterns generally have both operation names +(here, \axiomFun{log} and \axiomOp{+}) +and variables (here, \axiom{x} and \axiom{y}). +By default, every operation name stands for itself. +Thus \axiomFun{log} matches only ``\axiom{log}'' and not any +other operation such as \axiomFun{sin}. +On the other hand, variables do not stand for themselves. +Rather, a variable denotes a +{\it pattern variable} that is free to match any expression whatsoever. + +When a rewrite rule is applied, a process called +\spadgloss{pattern matching} goes to work by systematically +scanning +the subexpressions of the argument. +When a subexpression is found that ``matches'' the pattern, the subexpression +is replaced by the right-hand side of the rule. +The details of what happens will be covered later. + +The customary Axiom notation for patterns is actually a shorthand for a +longer, more general notation. +Pattern variables can be made explicit by using a percent +(\axiomSyntax{\%}) as the first character of the variable name. +To say that a name stands for itself, you can prefix that name with a quote +operator (\axiomSyntax{'}). +Although the current Axiom parser does not let you quote an operation +name, this more general notation gives you an alternate way of giving the same +rewrite rule: +\begin{verbatim} +rule log(%x) + log(%y) == log(x * y) +\end{verbatim} +This longer notation gives you patterns that the +standard notation won't handle. +For example, the rule +\texht{\typeout{check this example}}{} +\begin{verbatim} +rule %f(c * 'x) == c*%f(x) +\end{verbatim} +means ``for all \axiom{f} and \axiom{c}, replace \axiom{f(y)} by +\axiom{c * f(x)} when \axiom{y} is the product of \axiom{c} +and the explicit variable \axiom{x}.'' + +Thus the pattern can have several adornments on the names that appear there. +Normally, all these adornments are dropped in the substitution on the +right-hand side. + +To summarize: + +\beginImportant +To enter a single rule in Axiom, use the following syntax: +\spadkey{rule} +\centerline{{{\tt rule {\it leftHandSide} == {\it rightHandSide}}}} +The {\it leftHandSide} is a pattern to be matched and +the {\it rightHandSide} is its substitution. +The rule is an object of type \axiomType{RewriteRule} that can be +assigned to a variable and applied to expressions to transform them. +\endImportant + +Rewrite rules can be collected +into rulesets so that a set of rules can be applied at once. +Here is another simplification rule for logarithms. +\texht{\narrowDisplay{y \log(x) = \log(x^y) \quad\forall \, x \hbox{\ and\ } y.}}{ +\axiom{y * log(x) == log(x ** y)} for any \axiom{x} and \axiom{y}.} +If instead of giving a single rule following the reserved word \axiom{rule} +you give a ``pile'' of rules, you create +what is called a {\it ruleset.} +Like rules, rulesets are objects in Axiom and +can be assigned to variables. +You will find it useful to group commonly used rules into input files, and read +them in as needed. +\xtc{ +Create a ruleset named \axiom{logrules}. +}{ +\begin{spadsrc}[\bound{logrules}] +logrules := rule + log(x) + log(y) == log(x * y) + y * log x == log(x ** y) +\end{spadsrc} +} +\xtc{ +Again, create an expression \axiom{f} containing logarithms. +}{ +\spadpaste{f := a * log(sin x) - 2 * log x \bound{f1}} +} +\xtc{ +Apply the ruleset \userfun{logrules} to \axiom{f}. +}{ +\spadpaste{logrules f \free{f1}\free{logrules}} +} + +We have allowed pattern variables to match arbitrary expressions in the +above examples. +Often you want a variable only to match expressions +satisfying some predicate. +For example, we may want to apply the transformation +\texht{\narrowDisplay{y \log(x) = \log(x^y)}}{\axiom{y * log(x) == log(x ** y)}} +only when \axiom{y} is an integer. +% +The way to restrict a pattern variable \axiom{y} by a predicate \axiom{f(y)} +is by using a vertical bar \axiomSyntax{|}, which means ``such that,'' in +much the same way it is used in function definitions. +You do this only once, but at the earliest +(meaning deepest and leftmost) part of the pattern. +\xtc{ +This restricts the logarithmic rule to create integer exponents only. +}{ +\begin{spadsrc}[\bound{logrules2}] +logrules2 := rule + log(x) + log(y) == log(x * y) + (y | integer? y) * log x == log(x ** y) +\end{spadsrc} +} +\xtc{ +Compare this with the result of applying the previous set of rules. +}{ +\spadpaste{f \free{f1}} +} +\xtc{ +}{ +\spadpaste{logrules2 f \free{f1}\free{logrules2}} +} +You should be aware that you might need to apply a function like +\spadfun{integer} within your predicate expression to actually apply +the test function. +\xtc{ +Here we use \spadfun{integer} because \spad{n} has +type \spadtype{Expression Integer} but \spadfun{even?} is an operation +defined on integers. +}{ +\spadpaste{evenRule := rule cos(x)**(n | integer? n and even? integer n)==(1-sin(x)**2)**(n/2) \bound{evenRule}} +} +\xtc{ +Here is the application of the rule. +}{ +\spadpaste{evenRule( cos(x)**2 ) \free{evenRule}} +} +\xtc{ +This is an example of some of the usual identities involving products of +sines and cosines. +}{ +\begin{spadsrc}[\bound{sinCosProducts}] +sinCosProducts == rule + sin(x) * sin(y) == (cos(x-y) - cos(x + y))/2 + cos(x) * cos(y) == (cos(x-y) + cos(x+y))/2 + sin(x) * cos(y) == (sin(x-y) + sin(x + y))/2 +\end{spadsrc} +} +\xtc{ +}{ +\spadpaste{g := sin(a)*sin(b) + cos(b)*cos(a) + sin(2*a)*cos(2*a) \bound{g}} +} +\xtc{ +}{ +\spadpaste{sinCosProducts g \free{sinCosProducts g}} +} + +Another qualification you will often want to use is to allow a pattern to +match an identity element. +Using the pattern \axiom{x + y}, for example, neither \axiom{x} nor \axiom{y} +matches the expression \axiom{0}. +Similarly, if a pattern contains a product \axiom{x*y} or an exponentiation +\axiom{x**y}, then neither \axiom{x} or \axiom{y} matches \axiom{1}. +% +\xtc{ +If identical elements were matched, pattern matching would generally loop. +Here is an expansion rule for exponentials. +}{ +\spadpaste{exprule := rule exp(a + b) == exp(a) * exp(b)\bound{exprule}} +} +\xtc{ +This rule would cause infinite rewriting on this if either \axiom{a} or +\axiom{b} were allowed to match \axiom{0}. +}{ +\spadpaste{exprule exp x \free{exprule}} +} +% +There are occasions when you do want a pattern variable in a sum or +product to match \axiom{0} or \axiom{1}. +If so, prefix its name +with a \axiomSyntax{?} whenever it appears in a left-hand side of a rule. +For example, consider the following rule for the exponential integral: +\texht{\narrowDisplay{\int \left(\frac{y+e^x}{x}\right)\: dx = \int \frac{y}{x}\: dx + \hbox{\rm Ei}(x) +\quad\forall \, x \hbox{\ and\ } y.}}{ +\axiom{integral((y + exp x)/x, x) == integral(y/x, x) + Ei x} +for any \axiom{x} and \axiom{y}.} +This rule is valid for \axiom{y = 0}. +One solution is to create a \axiomType{Ruleset} with two +rules, one with and one without \axiom{y}. +A better solution is to use an ``optional'' pattern variable. +% +\xtc{ +Define rule \axiom{eirule} with +a pattern variable \axiom{?y} to indicate +that an expression may or may not occur. +}{ +\spadpaste{eirule := rule integral((?y + exp x)/x,x) == integral(y/x,x) + Ei x \bound{eirule}} +} +\xtc{ +Apply rule \axiom{eirule} to an integral without this term. +}{ +\spadpaste{eirule integral(exp u/u, u) \free{eirule}} +} +\xtc{ +Apply rule \axiom{eirule} to an integral with this term. +}{ +\spadpaste{eirule integral(sin u + exp u/u, u) \free{eirule}} +} + +Here is one final adornment you will find useful. +When matching a pattern of the form \axiom{x + y} to an expression containing a +long sum of the form \axiom{a +\ldots+ b}, there is no way to predict in +advance which subset of the sum matches \axiom{x} and which matches +\axiom{y}. +Aside from efficiency, this is generally unimportant since the rule holds for +any possible combination of matches for \axiom{x} and \axiom{y}. +In some situations, however, you may want to say which pattern variable is a sum +(or product) of several terms, and which should match only a single term. +To do this, put a prefix colon \axiomSyntax{:} before the pattern variable +that you want to match multiple terms. +% +\xtc{ +The remaining rules involve operators \axiom{u} and \axiom{v}. +}{ +\spadpaste{u := operator 'u \bound{u}} +} +\xtc{ +These definitions tell Axiom that +\axiom{u} and \axiom{v} are formal operators to be used in expressions. +}{ +\spadpaste{v := operator 'v \bound{v}} +} +\xtc{ +First define \axiom{myRule} +with no restrictions on the pattern variables +\axiom{x} and \axiom{y}. +}{ +\spadpaste{myRule := rule u(x + y) == u x + v y \free{u v}\bound{m}} +} +\xtc{ +Apply \axiom{myRule} to an expression. +}{ +\spadpaste{myRule u(a + b + c + d) \free{m}} +} +\xtc{ +Define \axiom{myOtherRule} to match several terms +so that the rule gets applied recursively. +}{ +\spadpaste{myOtherRule := rule u(:x + y) == u x + v y \free{u v}\bound{m2}} +} +\xtc{ +Apply \axiom{myOtherRule} to the same expression. +}{ +\spadpaste{myOtherRule u(a + b + c + d) \free{m2}} +} + + +Here are some final remarks on pattern matching. +Pattern matching provides a very useful paradigm for solving +certain classes of problems, namely, those that involve +transformations of one form to another and back. +However, it is important to recognize its limitations. + +First, pattern matching slows down as the number of rules you have to apply +increases. +Thus it is good practice to organize the sets of rules you use optimally so +that irrelevant rules are never included. + +Second, careless use of pattern matching can lead to wrong answers. +You should avoid using pattern matching to handle hidden algebraic +relationships that can go undetected by other programs. +As a simple example, a symbol such as ``J'' can easily be used to represent +the square root of \axiom{-1} or some other important algebraic quantity. +Many algorithms branch on whether an expression is zero or not, then divide by +that expression if it is not. +If you fail to simplify an expression involving powers of +\axiom{J} to \axiom{-1,} +algorithms may incorrectly assume an expression is non-zero, take a wrong +branch, and produce a meaningless result. + +Pattern matching should also not be used as a substitute for a domain. +In Axiom, objects of one domain are transformed to objects of other +domains using well-defined \axiomFun{coerce} operations. +Pattern matching should be used on objects that are all the same type. +Thus if your application can be handled by type \axiomType{Expression} in +Axiom and you think you need pattern matching, consider this choice +carefully. +You may well be better served by extending an existing domain +or by building a new domain of objects for your application. +\endscroll +\autobuttons +\end{page} +@ +\chapter{Users Guide Chapter 7 (ug07.ht)} +<>= +\newcommand{\optArg}[1]{{{\tt [}{#1}{\tt ]}}} +\newcommand{\argDef}[1]{{\tt ({#1})}} +\newcommand{\funSyntax}[2]{\axiomFun{#1}{\tt ({\small\it{#2}})}} +\newcommand{\funArgs}[1]{{\tt ({\small\it {#1}})}\newline} +\newcommand{\ugGraphTitle}{Graphics} +\newcommand{\ugGraphNumber}{7.} + +@ +\section{Graphics} +\label{ugGraphPage} +\begin{itemize} +\item ugGraphTwoDPage \ref{ugGraphTwoDPage} on +page~\pageref{ugGraphTwoDPage} +\item ugGraphThreeDPage \ref{ugGraphThreeDPage} on +page~\pageref{ugGraphThreeDPage} +\end{itemize} +\index{pages!ugGraphPage!ug07.ht} +\index{ug07.ht!pages!ugGraphPage} +\index{ugGraphPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphPage}{7. Graphics} +\beginscroll + +% + +This chapter shows how to use the Axiom graphics facilities +under the X Window System. +Axiom has \twodim{} and \threedim{} drawing and rendering +packages that allow the drawing, coloring, transforming, mapping, +clipping, and combining of graphic output from Axiom +computations. +This facility is particularly useful for investigating problems in +areas such as topology. +The graphics package is capable of plotting functions of one or +more variables or plotting parametric surfaces and curves. +Various coordinate systems are also available, such as polar and +spherical. + +A graph is displayed in a viewport window and it has a +control-panel that uses interactive mouse commands. +PostScript and other output forms are available so that Axiom +images can be printed or used by other programs.\footnote{PostScript +is a trademark of Adobe Systems Incorporated, registered in the United +States.} + +\beginmenu + \menudownlink{{7.1. Two-Dimensional Graphics}}{ugGraphTwoDPage} + \menudownlink{{7.2. Three-Dimensional Graphics}}{ugGraphThreeDPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphTwoDTitle}{Two-Dimensional Graphics} +\newcommand{\ugGraphTwoDNumber}{7.1.} + +@ +\section{Two-Dimensional Graphics} +\label{ugGraphTwoDPage} +\begin{itemize} +\item ugGraphTwoDPlotPage \ref{ugGraphTwoDPlotPage} on +page~\pageref{ugGraphTwoDPlotPage} +\item ugGraphTwoDParPage \ref{ugGraphTwoDParPage} on +page~\pageref{ugGraphTwoDParPage} +\item ugGraphTwoDPlanePage \ref{ugGraphTwoDPlanePage} on +page~\pageref{ugGraphTwoDPlanePage} +\item ugGraphTwoDOptionsPage \ref{ugGraphTwoDOptionsPage} on +page~\pageref{ugGraphTwoDOptionsPage} +\item ugGraphColorPage \ref{ugGraphColorPage} on +page~\pageref{ugGraphColorPage} +\item ugGraphColorPalettePage \ref{ugGraphColorPalettePage} on +page~\pageref{ugGraphColorPalettePage} +\item ugGraphTwoDControlPage \ref{ugGraphTwoDControlPage} on +page~\pageref{ugGraphTwoDControlPage} +\item ugGraphTwoDopsPage \ref{ugGraphTwoDopsPage} on +page~\pageref{ugGraphTwoDopsPage} +\item ugGraphTwoDbuildPage \ref{ugGraphTwoDbuildPage} on +page~\pageref{ugGraphTwoDbuildPage} +\item ugGraphTwoDappendPage \ref{ugGraphTwoDappendPage} on +page~\pageref{ugGraphTwoDappendPage} +\end{itemize} +\index{pages!ugGraphTwoDPage!ug07.ht} +\index{ug07.ht!pages!ugGraphTwoDPage} +\index{ugGraphTwoDPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphTwoDPage}{7.1. Two-Dimensional Graphics} +\beginscroll +% +The Axiom \twodim{} graphics package provides the ability to +display +% +\indent{4} +\beginitems +% +\item[-] curves defined by functions of a single real variable +% +\item[-] curves defined by parametric equations +% +\item[-] implicit non-singular curves defined by polynomial equations +% +\item[-] planar graphs generated from lists of point components. +\enditems +\indent{0} +These graphs +can be modified by specifying various options, such as +calculating points in the polar +coordinate system or changing the size of the graph viewport window. + +\beginmenu + \menudownlink{{7.1.1. Plotting Two-Dimensional Functions of One Variable}} +{ugGraphTwoDPlotPage} + \menudownlink{{7.1.2. Plotting Two-Dimensional Parametric Plane Curves}} +{ugGraphTwoDParPage} + \menudownlink{{7.1.3. Plotting Plane Algebraic Curves}} +{ugGraphTwoDPlanePage} + \menudownlink{{7.1.4. Two-Dimensional Options}}{ugGraphTwoDOptionsPage} + \menudownlink{{7.1.5. Color}}{ugGraphColorPage} + \menudownlink{{7.1.6. Palette}}{ugGraphColorPalettePage} + \menudownlink{{7.1.7. Two-Dimensional Control-Panel}} +{ugGraphTwoDControlPage} + \menudownlink{{7.1.8. Operations for Two-Dimensional Graphics}} +{ugGraphTwoDopsPage} + \menudownlink{{7.1.9. Addendum: Building Two-Dimensional Graphs}} +{ugGraphTwoDbuildPage} + \menudownlink{ +{7.1.10. Addendum: Appending a Graph to a Viewport Window Containing a Graph}} +{ugGraphTwoDappendPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphTwoDPlotTitle}{Plotting Two-Dimensional Functions of One Variable} +\newcommand{\ugGraphTwoDPlotNumber}{7.1.1.} + +@ +\section{Plotting Two-Dimensional Functions of One Variable} +\label{ugGraphTwoDPlotPage} +\begin{itemize} +\item ugGraphTwoDOptionsPage \ref{ugGraphTwoDOptionsPage} on +page~\pageref{ugGraphTwoDOptionsPage} +\end{itemize} +\index{pages!ugGraphTwoDPlotPage!ug07.ht} +\index{ug07.ht!pages!ugGraphTwoDPlotPage} +\index{ugGraphTwoDPlotPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphTwoDPlotPage}{7.1.1. Plotting Two-Dimensional Functions of One Variable} +\beginscroll + +The first kind of \twodim{} graph is that of a curve defined by a function +\axiom{y = f(x)} over a finite interval of the \axiom{x} axis. + +% +\beginImportant +The general format for drawing a function defined by a formula +\axiom{f(x)} is: +% +\centerline{{{\tt draw(f(x), x = a..b, {\it options})}}} +where \axiom{a..b} defines the range of \axiom{x}, and where +{\it options} prescribes zero or more options as described in +\downlink{``\ugGraphTwoDOptionsTitle''}{ugGraphTwoDOptionsPage} +in Section \ugGraphTwoDOptionsNumber\ignore{ugGraphTwoDOptions}. +An example of an option is \axiom{curveColor == bright red().} +An alternative format involving functions \axiom{f} and \axiom{g} +is also available. +\endImportant + +A simple way to plot a function is to use a formula. +The first argument is the formula. +For the second argument, write the name of the independent variable (here, \axiom{x}), +followed by an \spadSyntax{=}, and the range of values. + +\psXtc{ +Display this formula over the range +\texht{$0 \leq x \leq 6$}{0 <= x <= 6}. +Axiom converts your formula to a compiled +function so that the results can be computed +quickly and efficiently. +}{ +\graphpaste{draw(sin(tan(x)) - tan(sin(x)),x = 0..6)} +}{ +\epsffile[0 0 295 295]{../ps/2d1vara.ps} +} + +Notice that Axiom compiled the function before the graph was put +on the screen. + +\psXtc{ +Here is the same graph on a different interval. +This time we give the graph a title. +}{ +\graphpaste{draw(sin(tan(x)) - tan(sin(x)),x = 10..16)} +}{ +%window was 300 x 300 +\epsffile[0 0 295 295]{../ps/2d1varb.ps} +} +% +Once again the formula is converted to a compiled function before +any points were computed. +If you want to graph the same function on several intervals, it is +a good idea to define the function first so that the function has +to be compiled only once. +\xtc{ +This time we first define the function. +}{ +\spadpaste{f(x) == (x-1)*(x-2)*(x-3) \bound{f}} +} +\psXtc{ +To draw the function, the first argument is its name +and the second is just the range with no independent variable. +}{ +\graphpaste{draw(f, 0..4) \free{f}} +}{ +\epsffile[0 0 295 295]{../ps/2d1vard.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphTwoDParTitle}{Plotting Two-Dimensional Parametric Plane Curves} +\newcommand{\ugGraphTwoDParNumber}{7.1.2.} + +@ +\section{Plotting Two-Dimensional Parametric Plane Curves} +\label{ugGraphTwoDParPage} +\begin{itemize} +\item ugGraphThreeDOptionsPage \ref{ugGraphThreeDOptionsPage} on +page~\pageref{ugGraphThreeDOptionsPage} +\end{itemize} +\index{pages!ugGraphTwoDParPage!ug07.ht} +\index{ug07.ht!pages!ugGraphTwoDParPage} +\index{ugGraphTwoDParPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphTwoDParPage} +{7.1.2. Plotting Two-Dimensional Parametric Plane Curves} +\beginscroll + +The second kind of \twodim{} graph is that of +curves produced by parametric equations. +Let \axiom{x = f(t)} and \axiom{y = g(t)} be formulas or two +functions \axiom{f} and \axiom{g} as the parameter \axiom{t} ranges +over an interval \axiom{[a,b]}. +The function \axiomFun{curve} takes the two functions \axiom{f} and +\axiom{g} as its parameters. + +\beginImportant +The general format for drawing a \twodim{} plane curve defined by +parametric formulas \axiom{x = f(t)} and \axiom{y = g(t)} is: +% +\centerline{{{\tt draw(curve(f(t), g(t)), t = a..b, {\it options})}}} +where \axiom{a..b} defines the range of the independent variable \axiom{t}, +and where {\it options} prescribes zero or more options as +described in +\downlink{``\ugGraphThreeDOptionsTitle''}{ugGraphThreeDOptionsPage} +in Section \ugGraphThreeDOptionsNumber\ignore{ugGraphThreeDOptions}. +An example of an option is \axiom{curveColor == bright red().} +\endImportant + +Here's an example: + +\psXtc{ +Define a parametric curve using a range involving +\axiom{\%pi}, Axiom's way of saying \texht{$\pi$}{``pi''}. +For parametric curves, Axiom compiles two +functions, one for each of the functions \axiom{f} and \axiom{g}. +}{ +\graphpaste{draw(curve(sin(t)*sin(2*t)*sin(3*t), sin(4*t)*sin(5*t)*sin(6*t)), t = 0..2*\%pi)} +}{ +\epsffile[0 0 295 295]{../ps/2dppca.ps} +} +% +% +\psXtc{ +The title may be an arbitrary string and is an +optional argument to the \axiomFun{draw} command. +}{ +\graphpaste{draw(curve(cos(t), sin(t)), t = 0..2*\%pi)} +}{ +\epsffile[0 0 295 295]{../ps/2dppcb.ps} +} +% +If you plan on plotting \axiom{x = f(t)}, \axiom{y = g(t)} as \axiom{t} +ranges over several intervals, you may want to define functions +\axiom{f} and \axiom{g} first, so +that they need not be recompiled every time you create a new graph. +Here's an example: +\xtc{ +As before, you can first define the functions you wish to draw. +}{ +\spadpaste{f(t:DFLOAT):DFLOAT == sin(3*t/4) \bound{f}} +} +\xtc{ +Axiom compiles them to map \axiomType{DoubleFloat} +values to \axiomType{DoubleFloat} values. +}{ +\spadpaste{g(t:DFLOAT):DFLOAT == sin(t) \bound{g}} +} + +\psXtc{ +Give to {\tt curve} the names of the functions, +then write the range without the name of the +independent variable. +}{ +\graphpaste{draw(curve(f,g),0..\%pi) \free{f g}} +}{ +\epsffile[0 0 295 295]{../ps/2dppcc.ps} +} +% +% +\psXtc{ +Here is another look at the same curve but over a different +range. Notice that \axiom{f} and \axiom{g} are not recompiled. +Also note that Axiom provides a default title based on +the first function specified in \axiomFun{curve}. +}{ +\graphpaste{draw(curve(f,g),-4*\%pi..4*\%pi) \free{f g}} +}{ +\epsffile[0 0 295 295]{../ps/2dppce.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphTwoDPlaneTitle}{Plotting Plane Algebraic Curves} +\newcommand{\ugGraphTwoDPlaneNumber}{7.1.3.} + +@ +\section{Plotting Plane Algebraic Curves} +\label{ugGraphTwoDPlanePage} +\begin{itemize} +\item ugGraphTwoDOptionsPage \ref{ugGraphTwoDOptionsPage} on +page~\pageref{ugGraphTwoDOptionsPage} +\end{itemize} +\index{pages!ugGraphTwoDPlanePage!ug07.ht} +\index{ug07.ht!pages!ugGraphTwoDPlanePage} +\index{ugGraphTwoDPlanePage!ug07.ht!pages} +<>= +\begin{page}{ugGraphTwoDPlanePage}{7.1.3. Plotting Plane Algebraic Curves} +\beginscroll + +A third kind of \twodim{} graph is a non-singular ``solution curve'' +in a rectangular region of the plane. +A solution curve is a curve defined by a polynomial equation +\axiom{p(x,y) = 0}. +Non-singular means that the curve is ``smooth'' in that it does not +cross itself or come to a point (cusp). +Algebraically, this means that for any point \axiom{(x,y)} on the curve, +that is, a point such that \axiom{p(x,y) = 0}, the partial derivatives +\texht{${{\partial p}\over{\partial x}}(x,y)$ and +${{\partial p}\over{\partial y}}(x,y)$}{\axiom{dp/dx(x,y)} +and \axiom{dp/dy(a,b)}} +are not both zero. + +% +\beginImportant +The general format for drawing a non-singular solution curve +given by a polynomial of the form \axiom{p(x,y) = 0} is: +% +\centerline{{{\tt draw(p(x,y) = 0, x, y, range == [a..b, c..d], {\it options})}}} +where the second and third arguments name the first and second +independent variables of \axiom{p}. +A {\tt range} option is always given to designate a bounding +rectangular region of the plane \texht{$a \leq x \leq b, c \leq y +\leq d$}{a <= x <= b, c <= y <= d}. +Zero or more additional options as described in +\downlink{``\ugGraphTwoDOptionsTitle''}{ugGraphTwoDOptionsPage} +in Section \ugGraphTwoDOptionsNumber\ignore{ugGraphTwoDOptions} +may be given. +\endImportant + +\xtc{ +We require that the polynomial has rational or integral coefficients. +Here is an algebraic curve example (``Cartesian ovals''): +}{ +\spadpaste{p := ((x**2 + y**2 + 1) - 8*x)**2 - (8*(x**2 + y**2 + 1)-4*x-1) \bound{p}} +} + +\psXtc{ +The first argument is always expressed as an equation of the form +\axiom{p = 0} where \axiom{p} is a polynomial. +}{ +\graphpaste{draw(p = 0, x, y, range == [-1..11, -7..7]) \free{p}} +}{ +\epsffile[0 0 295 295]{../ps/2dpaca.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphTwoDOptionsTitle}{Two-Dimensional Options} +\newcommand{\ugGraphTwoDOptionsNumber}{7.1.4.} + +@ +\section{Two-Dimensional Options} +\label{ugGraphTwoDOptionsPage} +\begin{itemize} +\item ugGraphColorPage \ref{ugGraphColorPage} on +page~\pageref{ugGraphColorPage} +\item ugGraphColorPalettePage \ref{ugGraphColorPalettePage} on +page~\pageref{ugGraphColorPalettePage} +\item ugGraphColorPage \ref{ugGraphColorPage} on +page~\pageref{ugGraphColorPage} +\item ugGraphColorPalettePage \ref{ugGraphColorPalettePage} on +page~\pageref{ugGraphColorPalettePage} +\end{itemize} +\index{pages!ugGraphTwoDOptionsPage!ug07.ht} +\index{ug07.ht!pages!ugGraphTwoDOptionsPage} +\index{ugGraphTwoDOptionsPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphTwoDOptionsPage}{7.1.4. Two-Dimensional Options} +\beginscroll + +The \axiomFun{draw} commands take an optional list of options, +such as {\tt title} shown above. +Each option is given by the syntax: {\it name} {\tt ==} {\it value}. +Here is a list of the available options in the order that they are +described below. + +\table{ {adaptive} {clip} {unit} {clip} {curveColor} {range} +{toScale} {pointColor} {coordinates}} + +The \axiom{adaptive} option turns adaptive plotting on or off. +Adaptive plotting uses an algorithm that traverses a graph and computes +more points for those parts of the graph with high curvature. +The higher the curvature of a region is, the more points the algorithm +computes. +% +% +\psXtc{ +The {\tt adaptive} option is normally on. +Here we turn it off. +}{ +\graphpaste{draw(sin(1/x),x=-2*\%pi..2*\%pi, adaptive == false)} +}{ +\epsffile[0 0 295 295]{../ps/2doptad.ps} +} +% +% +\psXtc{ +The {\tt clip} option turns clipping on or off. +If on, large values are cut off according to +\axiomFunFrom{clipPointsDefault}{GraphicsDefaults}. +}{ +\graphpaste{draw(tan(x),x=-2*\%pi..2*\%pi, clip == true)} +}{ +\epsffile[0 0 295 295]{../ps/2doptcp.ps} +} +% +% +\psXtc{ +Option {\tt toScale} does plotting to scale if {\tt true} or uses +the entire viewport if {\tt false}. +The default can be determined using +\axiomFunFrom{drawToScale}{GraphicsDefaults}. +}{ +\graphpaste{draw(sin(x),x=-\%pi..\%pi, toScale == true, unit == [1.0,1.0])} +}{ +\epsffile[0 0 295 295]{../ps/2doptsc.ps} +} +% +% +\psXtc{ +Option {\tt clip} with a range sets point clipping of a graph within the +ranges specified in the list \axiom{[x range,y range]}. +If only one range is specified, clipping applies to the y-axis. +}{ +\graphpaste{draw(sec(x),x=-2*\%pi..2*\%pi, clip == [-2*\%pi..2*\%pi,-\%pi..\%pi], unit == [1.0,1.0])} +}{ +\epsffile[0 0 295 295]{../ps/2doptcpr.ps} +} +% +\psXtc{ +Option {\tt curveColor} sets the color of the graph curves or lines to be the +indicated palette color +(see \downlink{``\ugGraphColorTitle''}{ugGraphColorPage} in Section +\ugGraphColorNumber\ignore{ugGraphColor} and +\downlink{``\ugGraphColorPaletteTitle''}{ugGraphColorPalettePage} +in Section \ugGraphColorPaletteNumber\ignore{ugGraphColorPalette}). +}{ +\graphpaste{draw(sin(x),x=-\%pi..\%pi, curveColor == bright red())} +}{ +\epsffile[0 0 295 295]{../ps/2doptcvc.ps} +} +% +\psXtc{ +Option {\tt pointColor} +sets the color of the graph points to the indicated +palette color +(see \downlink{``\ugGraphColorTitle''}{ugGraphColorPage} +in Section \ugGraphColorNumber\ignore{ugGraphColor} and +\downlink{``\ugGraphColorPaletteTitle''}{ugGraphColorPalettePage} +in Section \ugGraphColorPaletteNumber\ignore{ugGraphColorPalette}). +}{ +\graphpaste{draw(sin(x),x=-\%pi..\%pi, pointColor == pastel yellow())} +}{ +\epsffile[0 0 295 295]{../ps/2doptptc.ps} +} +% +\psXtc{ +Option {\tt unit} sets the intervals at which the axis units are plotted +according to the indicated steps [\axiom{x} interval, \axiom{y} interval]. +}{ +\graphpaste{draw(curve(9*sin(3*t/4),8*sin(t)), t = -4*\%pi..4*\%pi, unit == [2.0,1.0])} +}{ +\epsffile[0 0 295 295]{../ps/2doptut.ps} +} +% +% +\psXtc{ +Option {\tt range} sets the range of variables in a graph to be +within the ranges +for solving plane algebraic curve plots. +}{ +\graphpaste{draw(y**2 + y - (x**3 - x) = 0, x, y, range == [-2..2,-2..1], unit==[1.0,1.0])} +}{ +\epsffile[0 0 295 295]{../ps/2doptrga.ps} +} +% +% +\psXtc{ +A second example of a solution plot. +}{ +\graphpaste{draw(x**2 + y**2 = 1, x, y, range == [-3/2..3/2,-3/2..3/2], unit==[0.5,0.5])} +}{ +\epsffile[0 0 295 295]{../ps/2doptrgb.ps} +} +% +% +\psXtc{ +Option \axiom{coordinates} indicates the coordinate system +in which the graph +is plotted. +The default is to use the Cartesian coordinate system. +For more details, see \downlink{``\ugGraphCoordTitle''}{ugGraphCoordPage} in Section \ugGraphCoordNumber\ignore{ugGraphCoord} \texht{.}{or +\axiomType{CoordinateSystems}.} +}{ +\graphpaste{draw(curve(sin(5*t),t),t=0..2*\%pi, coordinates == polar)} +}{ +\epsffile[0 0 295 295]{../ps/2doptplr.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphColorTitle}{Color} +\newcommand{\ugGraphColorNumber}{7.1.5.} + +@ +\section{Color} +\label{ugGraphColorPage} +\index{pages!ugGraphColorPage!ug07.ht} +\index{ug07.ht!pages!ugGraphColorPage} +\index{ugGraphColorPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphColorPage}{7.1.5. Color} +\beginscroll + +The domain \axiomType{Color} +provides operations for manipulating +colors in \twodim{} graphs. +Colors are objects of \axiomType{Color}. +Each color has a {\it hue} and a {\it weight}. +Hues are represented by integers that range from \axiom{1} to the +\axiomFunFrom{numberOfHues()}{Color}, normally +\axiom{27}. +%\footnote{Use \axiomFun{colorDef} to +%change these values to any range you want for a given \threedim{} viewport} +Weights are floats and have the value \axiom{1.0} by default. +% +\indent{0} +\beginitems +% +\item[\axiomFun{color}]\funArgs{integer} +creates a color of hue {\it integer} and weight \axiom{1.0}. +% +\item[\axiomFun{hue}]\funArgs{color} +returns the hue of {\it color} as an integer. +% +\item[\axiomFun{red}]\funArgs{}, +\funSyntax{blue}{}, +\funSyntax{green}{}, and \funSyntax{yellow}{} +create colors of that hue with weight \axiom{1.0}. +% +\item[\subscriptIt{color}{1} {\tt +} \subscriptIt{color}{2}] returns the +color that results from additively combining the indicated +\subscriptIt{color}{1} and \subscriptIt{color}{2}. +Color addition is not commutative: changing the order of the arguments +produces different results. +% +\item[{\it integer} {\tt *} {\it color}] +changes the weight of {\it color} by {\it integer} +without affecting its hue. +For example, +\axiom{red() + 3*yellow()} produces a color closer to yellow than to red. +Color multiplication is not associative: changing the order of grouping +produces different results. +\enditems +\indent{0} +% +\psXtc{ +These functions can be used to change the point and curve colors +for two- and \threedim{} graphs. +Use the {\tt pointColor} option for points. +}{ +\graphpaste{draw(x**2,x=-1..1,pointColor == green())} +}{ +\epsffile[0 0 295 295]{../ps/23dcola.ps} +} +% +\psXtc{ +Use the {\tt curveColor} option for curves. +}{ +\graphpaste{draw(x**2,x=-1..1,curveColor == color(13) + 2*blue())} +}{ +\epsffile[0 0 295 295]{../ps/23dcolb.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphColorPaletteTitle}{Palette} +\newcommand{\ugGraphColorPaletteNumber}{7.1.6.} + +@ +\section{Palette} +\label{ugGraphColorPalettePage} +\index{pages!ugGraphColorPalettePage!ug07.ht} +\index{ug07.ht!pages!ugGraphColorPalettePage} +\index{ugGraphColorPalettePage!ug07.ht!pages} +<>= +\begin{page}{ugGraphColorPalettePage}{7.1.6. Palette} +\beginscroll + +Domain \axiomType{Palette} is the domain of shades of colors: +\axiomFun{dark}, \axiomFun{dim}, \axiomFun{bright}, \axiomFun{pastel}, and \axiomFun{light}, +designated by the integers \axiom{1} through \axiom{5}, respectively. +\xtc{ +Colors are normally ``bright.'' +}{ +\spadpaste{shade red()} +} +\xtc{ +To change the shade of a color, apply the name of a shade to it. +}{ +\spadpaste{myFavoriteColor := dark blue() \bound{mfc}} +} +\xtc{ +The expression \axiom{shade(color)} +returns the value of a shade of \axiom{color}. +}{ +\spadpaste{shade myFavoriteColor \free{mfc}} +} +\xtc{ +The expression \axiom{hue(color)} returns its hue. +}{ +\spadpaste{hue myFavoriteColor \free{mfc}} +} +\psXtc{ +Palettes can be used in specifying colors in \twodim{} graphs. +}{ +\graphpaste{draw(x**2,x=-1..1,curveColor == dark blue())} +}{ +\epsffile[0 0 295 295]{../ps/23dpal.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphTwoDControlTitle}{Two-Dimensional Control-Panel} +\newcommand{\ugGraphTwoDControlNumber}{7.1.7.} + +@ +\section{Two-Dimensional Control-Panel} +\label{ugGraphTwoDControlPage} +\index{pages!ugGraphTwoDControlPage!ug07.ht} +\index{ug07.ht!pages!ugGraphTwoDControlPage} +\index{ugGraphTwoDControlPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphTwoDControlPage}{7.1.7. Two-Dimensional Control-Panel} +\beginscroll +Once you have created a viewport, move your mouse to the viewport and click +with your left mouse button to display a control-panel. +The panel is displayed on the side of the viewport closest to +where you clicked. Each of the buttons which toggle on and off show the +current state of the graph. + + +\subsubsection{Transformations} + +Object transformations are executed from the control-panel by mouse-activated +potentiometer windows. +% +\indent{0} +\beginitems +% +\item[Scale:] To scale a graph, click on a mouse button +within the {\bf Scale} window in the upper left corner of the control-panel. +The axes along which the scaling is to occur are indicated by setting the +toggles above the arrow. +With {\tt X On} and {\tt Y On} appearing, both axes are selected and scaling +is uniform. +If either is not selected, for example, if {\tt X Off} appears, scaling is +non-uniform. +% +\item[Translate:] To translate a graph, click the mouse in the +{\bf Translate} window in the direction you wish the graph to move. +This window is located in the upper right corner of the control-panel. +Along the top of the {\bf Translate} window are two buttons for selecting +the direction of translation. +Translation along both coordinate axes results when {\tt X On} and {\tt Y +On} appear or along one axis when one is on, for example, {\tt X On} and +{\tt Y Off} appear. +\enditems +\indent{0} + +\subsubsection{Messages} + +The window directly below the transformation potentiometer windows is +used to display system messages relating to the viewport and the control-panel. +The following format is displayed: \newline +% +\centerline{{[scaleX, scaleY] \axiom{>}graph\axiom{<} [translateX, translateY] \newline}} +The two values to the left show the scale factor along the {\tt X} and +{\tt Y} coordinate axes. The two values to the right show the distance of +translation from the center in the {\tt X} and {\tt Y} directions. The number +in the center shows which graph in the viewport this data pertains to. +When multiple graphs exist in the same viewport, +the graph must be selected (see ``Multiple Graphs,'' below) in +order for its transformation data to be shown, otherwise the number +is 1. + +\subsubsection{Multiple Graphs} + +The {\bf Graphs} window contains buttons that allow the placement +of \twodim{} graphs into one of nine available slots in any other +\twodim{} viewport. +In the center of the window are numeral buttons from one to nine +that show whether a graph is displayed in the viewport. +Below each number button is a button showing whether a graph +that is present is selected for application of some +transformation. +When the caret symbol is displayed, then the graph in that slot +will be manipulated. +Initially, the graph for which the viewport is created occupies +the first slot, is displayed, and is selected. +% +% +\indent{0} +\beginitems +% +\item[Clear:] The {\bf Clear} button deselects every viewport graph slot. +A graph slot is reselected by selecting the button below its number. +% +\item[Query:] The {\bf Query} button is used to display the scale and +translate data for the indicated graph. When this button is selected the +message ``Click on the graph to query'' appears. Select a slot +number button from the {\bf Graphs} window. The scaling factor and translation +offset of the graph are then displayed in the message window. +% +\item[Pick:] The {\bf Pick} button is used to select a graph +to be placed or dropped into the indicated viewport. When this button is +selected, the message ``Click on the graph to pick'' appears. +Click on the slot with the graph number of the desired +graph. The graph information is held waiting for +you to execute a {\bf Drop} in some other graph. +% +\item[Drop:] Once a graph has been picked up using the {\bf Pick} button, +the {\bf Drop} button places it into a new viewport slot. +The message ``Click on the graph to drop'' appears in the message +window when the {\bf Drop} button is selected. +By selecting one of the slot number buttons in the {\bf Graphs} +window, the graph currently being held is dropped into this slot +and displayed. +\enditems +\indent{0} + +\subsubsection{Buttons} + +% +\indent{0} +\beginitems +% +\item[Axes] turns the coordinate axes on or off. +% +\item[Units] turns the units along the {\tt x} +and {\tt y} axis on or off. +% +\item[Box] encloses the area of the viewport graph +in a bounding box, or removes the box if already enclosed. +% +\item[Pts] turns on or off the display of points. +% +\item[Lines] turns on or off the display +of lines connecting points. +% +\item[PS] writes the current viewport contents to +a file {\bf axiom2D.ps} or to a name specified in the user's {\bf +.Xdefaults} file. +The file is placed in the directory from which Axiom or the {\bf +viewalone} program was invoked. +% +\item[Reset] resets the object transformation +characteristics and attributes back to their initial states. +% +\item[Hide] makes the control-panel disappear. +% +\item[Quit] queries whether the current viewport +session should be terminated. +\enditems +\indent{0} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphTwoDopsTitle}{Operations for Two-Dimensional Graphics} +\newcommand{\ugGraphTwoDopsNumber}{7.1.8.} + +@ +\section{Operations for Two-Dimensional Graphics} +\label{ugGraphTwoDopsPage} +\index{pages!ugGraphTwoDopsPage!ug07.ht} +\index{ug07.ht!pages!ugGraphTwoDopsPage} +\index{ugGraphTwoDopsPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphTwoDopsPage} +{7.1.8. Operations for Two-Dimensional Graphics} +\beginscroll + +Here is a summary of useful Axiom operations for \twodim{} +graphics. +Each operation name is followed by a list of arguments. +Each argument is written as a variable informally named according +to the type of the argument (for example, {\it integer}). +If appropriate, a default value for an argument is given in +parentheses immediately following the name. + +% +\texht{\bgroup\hbadness = 10001\sloppy}{} +\indent{0} +\beginitems +% +\item[\axiomFun{adaptive}]\funArgs{\optArg{boolean\argDef{true}}} +sets or indicates whether graphs are plotted +according to the adaptive refinement algorithm. +% +\item[\axiomFun{axesColorDefault}]\funArgs{\optArg{color\argDef{dark blue()}}} +sets or indicates the default color of the +axes in a \twodim{} graph viewport. +% +\item[\axiomFun{clipPointsDefault}]\funArgs{\optArg{boolean\argDef{false}}} +sets or +indicates whether point clipping is +to be applied as the default for graph plots. +% +\item[\axiomFun{drawToScale}]\funArgs{\optArg{boolean\argDef{false}}} +sets or +indicates whether the plot of a graph +is ``to scale'' or uses the entire viewport space as the default. +% +\item[\axiomFun{lineColorDefault}]\funArgs{\optArg{color\argDef{pastel yellow()}}} +sets or indicates the default color of the +lines or curves in a \twodim{} graph viewport. +% +\item[\axiomFun{maxPoints}]\funArgs{\optArg{integer\argDef{500}}} +sets or indicates +the default maximum number of +possible points to be used when constructing a \twodim{} graph. +% +\item[\axiomFun{minPoints}]\funArgs{\optArg{integer\argDef{21}}} +sets or indicates the default minimum number of +possible points to be used when constructing a \twodim{} graph. +% +\item[\axiomFun{pointColorDefault}]\funArgs{\optArg{color\argDef{bright red()}}} +sets or indicates the default color of the +points in a \twodim{} graph viewport. +% +\item[\axiomFun{pointSizeDefault}]\funArgs{\optArg{integer\argDef{5}}} +sets or indicates the default size of the +dot used to plot points in a \twodim{} graph. +% +\item[\axiomFun{screenResolution}]\funArgs{\optArg{integer\argDef{600}}} +sets or indicates the default screen +resolution constant used in setting the computation limit of adaptively +generated curve plots. +% +\item[\axiomFun{unitsColorDefault}]\funArgs{\optArg{color\argDef{dim green()}}} +sets or indicates the default color of the +unit labels in a \twodim{} graph viewport. +% +\item[\axiomFun{viewDefaults}]\funArgs{} +resets the default settings for the following +attributes: point color, line color, axes color, units color, point size, +viewport upper left-hand corner position, and the viewport size. +% +\item[\axiomFun{viewPosDefault}]\funArgs{\optArg{list\argDef{[100,100]}}} +sets or indicates the default position of the +upper left-hand corner of a \twodim{} viewport, relative to the +display root window. +The upper left-hand corner of the display is considered to be at the +(0, 0) position. +% +\item[\axiomFun{viewSizeDefault}]\funArgs{\optArg{list\argDef{[200,200]}}} +sets or +indicates the default size in which two +dimensional viewport windows are shown. +It is defined by a width and then a height. +% +\item[\axiomFun{viewWriteAvailable}]\funArgs{\optArg{list\argDef{["pixmap", +"bitmap", "postscript", \"image"}}} +indicates the possible file types +that can be created with the \axiomFunFrom{write}{TwoDimensionalViewport} function. +% +\item[\axiomFun{viewWriteDefault}] +\funArgs{\optArg{list\argDef{[]}}} +sets or indicates the default types of files, in +addition to the {\bf data} file, that are created when a +\axiomFun{write} function is executed on a viewport. +% +\item[\axiomFun{units}]\funArgs{viewport, integer\argDef{1}, string\argDef{"off"}} +turns the units on or off for the graph with index {\it integer}. +% +\item[\axiomFun{axes}]\funArgs{viewport, integer\argDef{1}, string\argDef{"on"}} +turns the axes on +or off for the graph with index {\it integer}. +% +\item[\axiomFun{close}]\funArgs{viewport} +closes {\it viewport}. +% +\item[\axiomFun{connect}]\funArgs{viewport, integer\argDef{1}, string\argDef{"on"}} +declares whether lines +connecting the points are displayed or not. +% +\item[\axiomFun{controlPanel}]\funArgs{viewport, string\argDef{"off"}} +declares +whether the \twodim{} control-panel is automatically displayed +or not. +% +\item[\axiomFun{graphs}]\funArgs{viewport} +returns a list +describing the state of each graph. +If the graph state is not being used this is shown by {\tt "undefined"}, +otherwise a description of the graph's contents is shown. +% +\item[\axiomFun{graphStates}]\funArgs{viewport} +displays +a list of all the graph states available for {\it viewport}, giving the +values for every property. +% +\item[\axiomFun{key}]\funArgs{viewport} +returns the process +ID number for {\it viewport}. +% +\item[\axiomFun{move}]\funArgs{viewport, +\subscriptText{integer}{x}(viewPosDefault), +\subscriptText{integer}{y}(viewPosDefault)} +moves {\it viewport} on the screen so that the +upper left-hand corner of {\it viewport} is at the position {\it (x,y)}. +% +\item[\axiomFun{options}]\funArgs{\it viewport} +returns a list +of all the \axiomType{DrawOption}s used by {\it viewport}. +% +\item[\axiomFun{points}]\funArgs{viewport, integer\argDef{1}, string\argDef{"on"}} +specifies whether the graph points for graph {\it integer} are +to be displayed or not. +% +\item[\axiomFun{region}]\funArgs{viewport, integer\argDef{1}, string\argDef{"off"}} +declares whether graph {\it integer} is or is not to be displayed +with a bounding rectangle. +% +\item[\axiomFun{reset}]\funArgs{viewport} +resets all the properties of {\it viewport}. +% +\item[\axiomFun{resize}]\funArgs{viewport, +\subscriptText{integer}{width}, \subscriptText{integer}{height}} +resizes {\it viewport} with a new {\it width} and {\it height}. +% +\item[\axiomFun{scale}]\funArgs{viewport, \subscriptText{integer}{n}\argDef{1}, +\subscriptText{integer}{x}\argDef{0.9}, \subscriptText{integer}{y}\argDef{0.9}} +scales values for the +{\it x} and {\it y} coordinates of graph {\it n}. +% +\item[\axiomFun{show}]\funArgs{viewport, \subscriptText{integer}{n}\argDef{1}, +string\argDef{"on"}} +indicates if graph {\it n} is shown or not. +% +\item[\axiomFun{title}]\funArgs{viewport, string\argDef{"Axiom 2D"}} +designates the title for {\it viewport}. +% +\item[\axiomFun{translate}]\funArgs{viewport, +\subscriptText{integer}{n}\argDef{1}, +\subscriptText{float}{x}\argDef{0.0}, \subscriptText{float}{y}\argDef{0.0}} +causes graph {\it n} to be moved {\it x} and {\it y} units in the respective directions. +% +\item[\axiomFun{write}]\funArgs{viewport, \subscriptText{string}{directory}, +\optArg{strings}} +if no third argument is given, writes the {\bf data} file onto the directory +with extension {\bf data}. +The third argument can be a single string or a list of strings with some or +all the entries {\tt "pixmap"}, {\tt "bitmap"}, {\tt "postscript"}, and +{\tt "image"}. +\enditems +\indent{0} +\texht{\egroup}{} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphTwoDbuildTitle}{Addendum: Building Two-Dimensional Graphs} +\newcommand{\ugGraphTwoDbuildNumber}{7.1.9.} + +@ +\section{Addendum: Building Two-Dimensional Graphs} +\label{ugGraphTwoDbuildPage} +\index{pages!ugGraphTwoDbuildPage!ug07.ht} +\index{ug07.ht!pages!ugGraphTwoDbuildPage} +\index{ugGraphTwoDbuildPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphTwoDbuildPage} +{7.1.9. Addendum: Building Two-Dimensional Graphs} +\beginscroll + +In this section we demonstrate how to create \twodim{} graphs from +lists of points and give an example showing how to read the lists +of points from a file. + +\subsubsection{Creating a Two-Dimensional Viewport from a List of Points} + +Axiom creates lists of points in a \twodim{} viewport by utilizing +the \axiomType{GraphImage} and \axiomType{TwoDimensionalViewport} domains. +In this example, the \axiomFunFrom{makeGraphImage}{GraphImage} +function takes a list of lists of points parameter, a list of colors for +each point in the graph, a list of colors for each line in the graph, and +a list of sizes for each point in the graph. +% +\xtc{ +The following expressions create a list of lists of points which will be read +by Axiom and made into a \twodim{} viewport. +}{ +\spadpaste{p1 := point [1,1]\$(Point DFLOAT) \bound{p1}} +} +\xtc{ +}{ +\spadpaste{p2 := point [0,1]\$(Point DFLOAT) \bound{p2}} +} +\xtc{ +}{ +\spadpaste{p3 := point [0,0]\$(Point DFLOAT) \bound{p3}} +} +\xtc{ +}{ +\spadpaste{p4 := point [1,0]\$(Point DFLOAT) \bound{p4}} +} +\xtc{ +}{ +\spadpaste{p5 := point [1,.5]\$(Point DFLOAT) \bound{p5}} +} +\xtc{ +}{ +\spadpaste{p6 := point [.5,0]\$(Point DFLOAT) \bound{p6}} +} +\xtc{ +}{ +\spadpaste{p7 := point [0,0.5]\$(Point DFLOAT) \bound{p7}} +} +\xtc{ +}{ +\spadpaste{p8 := point [.5,1]\$(Point DFLOAT) \bound{p8}} +} +\xtc{ +}{ +\spadpaste{p9 := point [.25,.25]\$(Point DFLOAT) \bound{p9}} +} +\xtc{ +}{ +\spadpaste{p10 := point [.25,.75]\$(Point DFLOAT) \bound{p10}} +} +\xtc{ +}{ +\spadpaste{p11 := point [.75,.75]\$(Point DFLOAT) \bound{p11}} +} +\xtc{ +}{ +\spadpaste{p12 := point [.75,.25]\$(Point DFLOAT) \bound{p12}} +} +\xtc{ +Finally, here is the list. +}{ +\spadpaste{llp := [[p1,p2], [p2,p3], [p3,p4], [p4,p1], [p5,p6], [p6,p7], [p7,p8], [p8,p5], [p9,p10], [p10,p11], [p11,p12], [p12,p9]] \free{p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12} \bound{llp}} +} +\xtc{ +Now we set the point sizes for all components of the graph. +}{ +\spadpaste{size1 := 6::PositiveInteger \bound{size1}} +} +\xtc{ +}{ +} +\xtc{ +}{ +\spadpaste{size2 := 8::PositiveInteger \bound{size2}} +} +\xtc{ +}{ +\spadpaste{size3 := 10::PositiveInteger \bound{size3}} +} +\xtc{ +}{ +\spadpaste{lsize := [size1, size1, size1, size1, size2, size2, size2, size2, size3, size3, size3, size3] \bound{lsize} \free{size1 size2 size3}} +} +\xtc{ +Here are the colors for the points. +}{ +\spadpaste{pc1 := pastel red() \bound{pc1}} +} +\xtc{ +}{ +\spadpaste{pc2 := dim green() \bound{pc2}} +} +\xtc{ +}{ +\spadpaste{pc3 := pastel yellow() \bound{pc3}} +} +\xtc{ +}{ +\spadpaste{lpc := [pc1, pc1, pc1, pc1, pc2, pc2, pc2, pc2, pc3, pc3, pc3, pc3] \free{pc1 pc2 pc3} \bound{lpc}} +} +\xtc{ +Here are the colors for the lines. +}{ +\spadpaste{lc := [pastel blue(), light yellow(), dim green(), bright red(), light green(), dim yellow(), bright blue(), dark red(), pastel red(), light blue(), dim green(), light yellow()] \bound{lc}} +} +\xtc{ +Now the \axiomType{GraphImage} is created according to the component +specifications indicated above. +}{ +\spadpaste{g := makeGraphImage(llp,lpc,lc,lsize)\$GRIMAGE \bound{g} \free{llp lpc lc lsize}} +} +\psXtc{ +The \axiomFunFrom{makeViewport2D}{TwoDimensionalViewport} function now +creates a \axiomType{TwoDimensionalViewport} for this graph according to the +list of options specified within the brackets. +}{ +\graphpaste{makeViewport2D(g,[title("Lines")])\$VIEW2D \free{g}} +}{ +% +} +%See Figure #.#. +\xtc{ +This example demonstrates the use of the \axiomType{GraphImage} functions +\axiomFunFrom{component}{GraphImage} and \axiomFunFrom{appendPoint}{GraphImage} +in adding points to an empty \axiomType{GraphImage}. +}{ +\spadpaste{)clear all \bound{clearAll}} +} +\xtc{ +}{ +\spadpaste{g := graphImage()\$GRIMAGE \bound{Sg}\free{clearAll}} +} +\xtc{ +}{ +\spadpaste{p1 := point [0,0]\$(Point DFLOAT) \bound{Sp1}} +} +\xtc{ +}{ +\spadpaste{p2 := point [.25,.25]\$(Point DFLOAT) \bound{Sp2}} +} +\xtc{ +}{ +\spadpaste{p3 := point [.5,.5]\$(Point DFLOAT) \bound{Sp3}} +} +\xtc{ +}{ +\spadpaste{p4 := point [.75,.75]\$(Point DFLOAT) \bound{Sp4}} +} +\xtc{ +}{ +\spadpaste{p5 := point [1,1]\$(Point DFLOAT) \bound{Sp5}} +} +\xtc{ +}{ +\spadpaste{component(g,p1)\$GRIMAGE\free{Sg Sp1}\bound{gp1}} +} +\xtc{ +}{ +\spadpaste{component(g,p2)\$GRIMAGE\free{Sg Sp2}\bound{gp2}} +} +\xtc{ +}{ +\spadpaste{appendPoint(g,p3)\$GRIMAGE\free{gp1 gp2 Sp3}\bound{gp3}} +} +\xtc{ +}{ +\spadpaste{appendPoint(g,p4)\$GRIMAGE\free{gp3 Sp4}\bound{gp4}} +} +\xtc{ +}{ +\spadpaste{appendPoint(g,p5)\$GRIMAGE\free{gp4 Sp5}\bound{gp5}} +} +\xtc{ +}{ +\spadpaste{g1 := makeGraphImage(g)\$GRIMAGE \bound{Sg1} \free{gp5}} +} +\psXtc{ +Here is the graph. +}{ +\graphpaste{makeViewport2D(g1,[title("Graph Points")])\$VIEW2D \free{Sg1}} +}{ +% +} +% +%See Figure #.#. +% +\xtc{ +A list of points can also be made into a \axiomType{GraphImage} by using +the operation \axiomFunFrom{coerce}{GraphImage}. It is equivalent to adding +each point to \axiom{g2} using \axiomFunFrom{component}{GraphImage}. +}{ +\spadpaste{g2 := coerce([[p1],[p2],[p3],[p4],[p5]])\$GRIMAGE \free{Sp1 Sp2 Sp3 Sp4 Sp5} \bound{Sg2}} +} +\xtc{ +Now, create an empty \axiomType{TwoDimensionalViewport}. +}{ +\spadpaste{v := viewport2D()\$VIEW2D \bound{Sv}} +} +\xtc{ +}{ +\spadpaste{options(v,[title("Just Points")])\$VIEW2D \free{Sv}\bound{Svo}} +} +\xtc{ +Place the graph into the viewport. +}{ +\spadpaste{putGraph(v,g2,1)\$VIEW2D \free{Sg2 Svo}\bound{Svog2}} +} +\psXtc{ +Take a look. +}{ +\graphpaste{makeViewport2D(v)\$VIEW2D \free{Svog2}} +}{ +% +} + +%See Figure #.#. + +\subsubsection{Creating a Two-Dimensional Viewport of a List of Points from a File} + +The following three functions read a list of points from a +file and then draw the points and the connecting lines. The +points are stored in the file in readable form as floating point numbers +(specifically, \axiomType{DoubleFloat} values) as an alternating +stream of \axiom{x}- and \axiom{y}-values. For example, +\begin{verbatim} +0.0 0.0 1.0 1.0 2.0 4.0 +3.0 9.0 4.0 16.0 5.0 25.0 +\end{verbatim} + +\beginImportant + +\noindent +{\tt 1.\ \ \ drawPoints(lp:List\ Point\ DoubleFloat):VIEW2D\ ==}\newline +{\tt 2.\ \ \ \ \ g\ :=\ graphImage()\$GRIMAGE}\newline +{\tt 3.\ \ \ \ \ for\ p\ in\ lp\ repeat}\newline +{\tt 4.\ \ \ \ \ \ \ component(g,p,pointColorDefault(),lineColorDefault(),}\newline +{\tt 5.\ \ \ \ \ \ \ \ \ pointSizeDefault())}\newline +{\tt 6.\ \ \ \ \ gi\ :=\ makeGraphImage(g)\$GRIMAGE}\newline +{\tt 7.\ \ \ \ \ makeViewport2D(gi,[title("Points")])\$VIEW2D}\newline +{\tt 8.\ \ \ }\newline +{\tt 9.\ \ \ drawLines(lp:List\ Point\ DoubleFloat):VIEW2D\ ==}\newline +{\tt 10.\ \ \ \ g\ :=\ graphImage()\$GRIMAGE}\newline +{\tt 11.\ \ \ \ component(g,\ lp,\ pointColorDefault(),\ lineColorDefault(),}\newline +{\tt 12.\ \ \ \ \ \ pointSizeDefault())\$GRIMAGE}\newline +{\tt 13.\ \ \ \ gi\ :=\ makeGraphImage(g)\$GRIMAGE}\newline +{\tt 14.\ \ \ \ makeViewport2D(gi,[title("Points")])\$VIEW2D}\newline +{\tt 15.\ \ }\newline +{\tt 16.\ \ plotData2D(name,\ title)\ ==}\newline +{\tt 17.\ \ \ \ f:File(DFLOAT)\ :=\ open(name,"input")}\newline +{\tt 18.\ \ \ \ lp:LIST(Point\ DFLOAT)\ :=\ empty()}\newline +{\tt 19.\ \ \ \ while\ ((x\ :=\ readIfCan!(f))\ case\ DFLOAT)\ repeat}\newline +{\tt 20.\ \ \ \ \ \ y\ :\ DFLOAT\ :=\ read!(f)}\newline +{\tt 21.\ \ \ \ \ \ lp\ :=\ cons(point\ [x,y]\$(Point\ DFLOAT),\ lp)}\newline +{\tt 22.\ \ \ \ \ \ lp}\newline +{\tt 23.\ \ \ \ close!(f)}\newline +{\tt 24.\ \ \ \ drawPoints(lp)}\newline +{\tt 25.\ \ \ \ drawLines(lp)}\newline +\endImportant +% +This command will actually create the viewport and the graph if +the point data is in the file \axiom{"file.data"}. +\beginImportant + +\noindent +{\tt 1.\ \ \ plotData2D("file.data",\ "2D\ Data\ Plot")}\newline +\endImportant + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphTwoDappendTitle}{Addendum: Appending a Graph to a Viewport Window Containing a Graph} +\newcommand{\ugGraphTwoDappendNumber}{7.1.10.} + +@ +\section{Addendum: Appending a Graph to a Viewport Window Containing a Graph} +\label{ugGraphTwoDappendPage} +\index{pages!ugGraphTwoDappendPage!ug07.ht} +\index{ug07.ht!pages!ugGraphTwoDappendPage} +\index{ugGraphTwoDappendPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphTwoDappendPage} +{7.1.10. Addendum: Appending a Graph to a Viewport Window Containing a Graph} +\beginscroll + +This section demonstrates how to append a \twodim{} graph to a viewport +already containing other graphs. +The default \axiomFun{draw} command places a graph into the first +\axiomType{GraphImage} slot position of the \axiomType{TwoDimensionalViewport}. + +\xtc{ +This graph is in the first slot in its viewport. +}{ +\spadpaste{v1 := draw(sin(x),x=0..2*\%pi) \bound{v1}} +} +\xtc{ +So is this graph. +}{ +\spadpaste{v2 := draw(cos(x),x=0..2*\%pi, curveColor==light red()) \bound{v2}} +} +\xtc{ +The operation \axiomFunFrom{getGraph}{TwoDimensionalViewport} +retrieves the \axiomType{GraphImage} \axiom{g1} from the first slot position +in the viewport \axiom{v1}. +}{ +\spadpaste{g1 := getGraph(v1,1) \bound{g1}\free{v1}} +} +\xtc{ +Now \axiomFunFrom{putGraph}{TwoDimensionalViewport} +places \axiom{g1} into the the second slot position of \axiom{v2}. +}{ +\spadpaste{putGraph(v2,g1,2) \bound{v22}\free{g1 v2}} +} +\psXtc{ +Display the new \axiomType{TwoDimensionalViewport} containing both graphs. +}{ +\graphpaste{makeViewport2D(v2) \free{v22}} +}{ +% +} +% +%See Figure #.#. +% + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphThreeDTitle}{Three-Dimensional Graphics} +\newcommand{\ugGraphThreeDNumber}{7.2.} + +@ +\section{Three-Dimensional Graphics} +\label{ugGraphThreeDPage} +\begin{itemize} +\item ugGraphThreeDPlotPage \ref{ugGraphThreeDPlotPage} on +page~\pageref{ugGraphThreeDPlotPage} +\item ugGraphThreeDParmPage \ref{ugGraphThreeDParmPage} on +page~\pageref{ugGraphThreeDParmPage} +\item ugGraphThreeDParPage \ref{ugGraphThreeDParPage} on +page~\pageref{ugGraphThreeDParPage} +\item ugGraphThreeDOptionsPage \ref{ugGraphThreeDOptionsPage} on +page~\pageref{ugGraphThreeDOptionsPage} +\item ugGraphMakeObjectPage \ref{ugGraphMakeObjectPage} on +page~\pageref{ugGraphMakeObjectPage} +\item ugGraphThreeDBuildPage \ref{ugGraphThreeDBuildPage} on +page~\pageref{ugGraphThreeDBuildPage} +\item ugGraphCoordPage \ref{ugGraphCoordPage} on +page~\pageref{ugGraphCoordPage} +\item ugGraphClipPage \ref{ugGraphClipPage} on +page~\pageref{ugGraphClipPage} +\item ugGraphThreeDControlPage \ref{ugGraphThreeDControlPage} on +page~\pageref{ugGraphThreeDControlPage} +\item ugGraphThreeDopsPage \ref{ugGraphThreeDopsPage} on +page~\pageref{ugGraphThreeDopsPage} +\item ugXdefaultsPage \ref{ugXdefaultsPage} on +page~\pageref{ugXdefaultsPage} +\end{itemize} +\index{pages!ugGraphThreeDPage!ug07.ht} +\index{ug07.ht!pages!ugGraphThreeDPage} +\index{ugGraphThreeDPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphThreeDPage}{7.2. Three-Dimensional Graphics} +\beginscroll +% +The Axiom \threedim{} graphics package provides the ability to +% +\indent{4} +\beginitems +% +\item[-] generate surfaces defined by a function of two real variables +% +\item[-] generate space curves and tubes defined by parametric equations +% +\item[-] generate surfaces defined by parametric equations +\enditems +\indent{0} +These graphs can be modified by using various options, such as calculating +points in the spherical coordinate system or changing the polygon grid size +of a surface. + +\beginmenu + \menudownlink{ +{7.2.1. Plotting Three-Dimensional Functions of Two Variables}} +{ugGraphThreeDPlotPage} + \menudownlink{ +{7.2.2. Plotting Three-Dimensional Parametric Space Curves}} +{ugGraphThreeDParmPage} + \menudownlink{ +{7.2.3. Plotting Three-Dimensional Parametric Surfaces}} +{ugGraphThreeDParPage} + \menudownlink{{7.2.4. Three-Dimensional Options}}{ugGraphThreeDOptionsPage} + \menudownlink{{7.2.5. The makeObject Command}}{ugGraphMakeObjectPage} + \menudownlink{ +{7.2.6. Building Three-Dimensional Objects From Primitives}} +{ugGraphThreeDBuildPage} + \menudownlink{{7.2.7. Coordinate System Transformations}}{ugGraphCoordPage} + \menudownlink{{7.2.8. Three-Dimensional Clipping}}{ugGraphClipPage} + \menudownlink{{7.2.9. Three-Dimensional Control-Panel}} +{ugGraphThreeDControlPage} + \menudownlink{{7.2.10. Operations for Three-Dimensional Graphics}} +{ugGraphThreeDopsPage} + \menudownlink{{7.2.11. Customization using .Xdefaults}}{ugXdefaultsPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphThreeDPlotTitle}{Plotting Three-Dimensional Functions of Two Variables} +\newcommand{\ugGraphThreeDPlotNumber}{7.2.1.} + +@ +\section{Plotting Three-Dimensional Functions of Two Variables} +\label{ugGraphThreeDPlotPage} +\begin{itemize} +\item ugGraphThreeDOptionsPage \ref{ugGraphThreeDOptionsPage} on +page~\pageref{ugGraphThreeDOptionsPage} +\end{itemize} +\index{pages!ugGraphThreeDPlotPage!ug07.ht} +\index{ug07.ht!pages!ugGraphThreeDPlotPage} +\index{ugGraphThreeDPlotPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphThreeDPlotPage} +{7.2.1. Plotting Three-Dimensional Functions of Two Variables} +\beginscroll + +The simplest \threedim{} graph is that of a surface defined by a function +of two variables, \axiom{z = f(x,y)}. + +% +\beginImportant +The general format for drawing a surface defined by a formula \axiom{f(x,y)} +of two variables \axiom{x} and \axiom{y} is: +% +\centerline{{{\tt draw(f(x,y), x = a..b, y = c..d, {\it options})}}} +where \axiom{a..b} and \axiom{c..d} define the range of \axiom{x} +and \axiom{y}, and where {\it options} prescribes zero or more +options as described in +\downlink{``\ugGraphThreeDOptionsTitle''}{ugGraphThreeDOptionsPage} +in Section \ugGraphThreeDOptionsNumber\ignore{ugGraphThreeDOptions}. +An example of an option is \axiom{title == "Title of Graph".} +An alternative format involving a function \axiom{f} is also +available. +\endImportant + +% +\psXtc{ +The simplest way to plot a function of two variables is to use a formula. +With formulas you always precede the range specifications with +the variable name and an \spadSyntax{=} sign. +}{ +\graphpaste{draw(cos(x*y),x=-3..3,y=-3..3)} +}{ +\epsffile[0 0 295 295]{../ps/3d2vara.ps} +} +% +\xtc{ +If you intend to use a function more than once, +or it is long and complex, then first +give its definition to Axiom. +}{ +\spadpaste{f(x,y) == sin(x)*cos(y) \bound{f}} +} +% +% +\psXtc{ +To draw the function, just give its name and drop the variables +from the range specifications. +Axiom compiles your function for efficient computation +of data for the graph. +Notice that Axiom uses the text of your function as a +default title. +}{ +\graphpaste{draw(f,-\%pi..\%pi,-\%pi..\%pi) \free{f}} +}{ +\epsffile[0 0 295 295]{../ps/3d2varb.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphThreeDParmTitle}{Plotting Three-Dimensional Parametric Space Curves} +\newcommand{\ugGraphThreeDParmNumber}{7.2.2.} + +@ +\section{Plotting Three-Dimensional Parametric Space Curves} +\label{ugGraphThreeDParmPage} +\begin{itemize} +\item ugGraphThreeDOptionsPage \ref{ugGraphThreeDOptionsPage} on +page~\pageref{ugGraphThreeDOptionsPage} +\end{itemize} +\index{pages!ugGraphThreeDParmPage!ug07.ht} +\index{ug07.ht!pages!ugGraphThreeDParmPage} +\index{ugGraphThreeDParmPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphThreeDParmPage} +{7.2.2. Plotting Three-Dimensional Parametric Space Curves} +\beginscroll + +A second kind of \threedim{} graph is a \threedim{} space curve +defined by the parametric equations for \axiom{x(t)}, \axiom{y(t)}, +and \axiom{z(t)} as a function of an independent variable \axiom{t}. + +% +\beginImportant +The general format for drawing a \threedim{} space curve defined by +parametric formulas \axiom{x = f(t)}, \axiom{y = g(t)}, and +\axiom{z = h(t)} is: +% +\centerline{{{\tt draw(curve(f(t),g(t),h(t)), t = a..b, {\it options})}}} +where \axiom{a..b} defines the range of the independent variable +\axiom{t}, and where {\it options} prescribes zero or more options +as described in +\downlink{``\ugGraphThreeDOptionsTitle''}{ugGraphThreeDOptionsPage} +in Section \ugGraphThreeDOptionsNumber\ignore{ugGraphThreeDOptions}. +An example of an option is \axiom{title == "Title of Graph".} +An alternative format involving functions \axiom{f}, \axiom{g} and +\axiom{h} is also available. +\endImportant + +% +\psXtc{ +If you use explicit formulas to draw a space curve, always precede +the range specification with the variable name and an +\spadSyntax{=} sign. +}{ +\graphpaste{draw(curve(5*cos(t), 5*sin(t),t), t=-12..12)} +}{ +\epsffile[0 0 295 295]{../ps/3dpsca.ps} +} +% +\xtc{ +Alternatively, you can draw space curves by referring to functions. +}{ +\spadpaste{i1(t:DFLOAT):DFLOAT == sin(t)*cos(3*t/5) \bound{i1}} +} +\xtc{ +This is useful if the functions are to be used more than once \ldots +}{ +\spadpaste{i2(t:DFLOAT):DFLOAT == cos(t)*cos(3*t/5) \bound{i2}} +} +\xtc{ +or if the functions are long and complex. +}{ +\spadpaste{i3(t:DFLOAT):DFLOAT == cos(t)*sin(3*t/5) \bound{i3}} +} +% +% +\psXtc{ +Give the names of the functions and +drop the variable name specification in the second argument. +Again, Axiom supplies a default title. +}{ +\graphpaste{draw(curve(i1,i2,i3),0..15*\%pi) \free{i1 i2 i3}} +}{ +\epsffile[0 0 295 295]{../ps/3dpscb.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphThreeDParTitle}{Plotting Three-Dimensional Parametric Surfaces} +\newcommand{\ugGraphThreeDParNumber}{7.2.3.} + +@ +\section{Plotting Three-Dimensional Parametric Surfaces} +\label{ugGraphThreeDParPage} +\begin{itemize} +\item ugGraphThreeDOptionsPage \ref{ugGraphThreeDOptionsPage} on +page~\pageref{ugGraphThreeDOptionsPage} +\item ugGraphCoordPage \ref{ugGraphCoordPage} on +page~\pageref{ugGraphCoordPage} +\end{itemize} +\index{pages!ugGraphThreeDParPage!ug07.ht} +\index{ug07.ht!pages!ugGraphThreeDParPage} +\index{ugGraphThreeDParPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphThreeDParPage} +{7.2.3. Plotting Three-Dimensional Parametric Surfaces} +\beginscroll + +A third kind of \threedim{} graph is a surface defined by +parametric equations for \axiom{x(u,v)}, \axiom{y(u,v)}, and +\axiom{z(u,v)} of two independent variables \axiom{u} and \axiom{v}. + +% +\beginImportant +The general format for drawing a \threedim{} graph defined by +parametric formulas \axiom{x = f(u,v)}, \axiom{y = g(u,v)}, +and \axiom{z = h(u,v)} is: +% +\centerline{{{\tt draw(surface(f(u,v),g(u,v),h(u,v)), u = a..b, v = c..d, {\it options})}}} +where \axiom{a..b} and \axiom{c..d} define the range of the +independent variables \axiom{u} and \axiom{v}, and where +{\it options} prescribes zero or more options as described in +\downlink{``\ugGraphThreeDOptionsTitle''}{ugGraphThreeDOptionsPage} +in Section \ugGraphThreeDOptionsNumber\ignore{ugGraphThreeDOptions}. +An example of an option is \axiom{title == "Title of Graph".} +An alternative format involving functions \axiom{f}, \axiom{g} and +\axiom{h} is also available. +\endImportant + +% +\psXtc{ +This example draws a graph of a surface plotted using the +parabolic cylindrical coordinate system option. +The values of the functions supplied to \axiomFun{surface} are +interpreted in coordinates as given by a {\tt coordinates} option, +here as parabolic cylindrical coordinates (see +\downlink{``\ugGraphCoordTitle''}{ugGraphCoordPage} +in Section \ugGraphCoordNumber\ignore{ugGraphCoord}). +}{ +\graphpaste{draw(surface(u*cos(v), u*sin(v), v*cos(u)), u=-4..4, v=0..\%pi, coordinates== parabolicCylindrical)} +}{ +\epsffile[0 0 295 295]{../ps/3dpsa.ps} +} +% +Again, you can graph these parametric surfaces using functions, +if the functions are long and complex. +\xtc{ +Here we declare the types of arguments and values to be of type +\axiomType{DoubleFloat}. +}{ +\spadpaste{n1(u:DFLOAT,v:DFLOAT):DFLOAT == u*cos(v) \bound{n1}} +} +\xtc{ +As shown by previous examples, these declarations are necessary. +}{ +\spadpaste{n2(u:DFLOAT,v:DFLOAT):DFLOAT == u*sin(v) \bound{n2}} +} +\xtc{ +In either case, Axiom compiles the functions +when needed to graph a result. +}{ +\spadpaste{n3(u:DFLOAT,v:DFLOAT):DFLOAT == u \bound{n3}} +} +\xtc{ +Without these declarations, you have to suffix floats +with \axiom{@DFLOAT} to get a \axiomType{DoubleFloat} result. +However, a call here with an unadorned float +produces a \axiomType{DoubleFloat}. +}{ +\spadpaste{n3(0.5,1.0)\free{n3}} +} +% +% +\psXtc{ +Draw the surface by referencing the function names, this time +choosing the toroidal coordinate system. +}{ +\graphpaste{draw(surface(n1,n2,n3), 1..4, 1..2*\%pi, coordinates == toroidal(1\$DFLOAT)) \free{n1 n2 n3}} +}{ +\epsffile[0 0 295 295]{../ps/3dpsb.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphThreeDOptionsTitle}{Three-Dimensional Options} +\newcommand{\ugGraphThreeDOptionsNumber}{7.2.4.} + +@ +\section{Three-Dimensional Options} +\label{ugGraphThreeDOptionsPage} +\begin{itemize} +\item ugGraphCoordPage \ref{ugGraphCoordPage} on +page~\pageref{ugGraphCoordPage} +\end{itemize} +\index{pages!ugGraphThreeDOptionsPage!ug07.ht} +\index{ug07.ht!pages!ugGraphThreeDOptionsPage} +\index{ugGraphThreeDOptionsPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphThreeDOptionsPage}{7.2.4. Three-Dimensional Options} +\beginscroll + +The \axiomFun{draw} commands optionally take an optional list of options such +as {\tt coordinates} as shown in the last example. +Each option is given by the syntax: \axiom{name} {\tt ==} \axiom{value}. +Here is a list of the available options in the order that they are +described below: + +\table{ {title} {coordinates} {var1Steps} {style} {tubeRadius} {var2Steps} +{colorFunction} {tubePoints} {space}} + +\psXtc{ +The option \axiom{title} gives your graph a title. +}{ +\graphpaste{draw(cos(x*y),x=0..2*\%pi,y=0..\%pi,title == "Title of Graph") } +}{ +\epsffile[0 0 295 295]{../ps/3doptttl.ps} +} +% +\psXtc{ +The \axiom{style} determines which of four rendering algorithms is used for +the graph. +The choices are +{\tt "wireMesh"}, {\tt "solid"}, {\tt "shade"}, and {\tt "smooth"}. +}{ +\graphpaste{draw(cos(x*y),x=-3..3,y=-3..3, style=="smooth", title=="Smooth Option")} +}{ +\epsffile[0 0 295 295]{../ps/3doptsty.ps} +} +% + +In all but the wire-mesh style, polygons in a surface or tube plot +are normally colored in a graph according to their +\axiom{z}-coordinate value. Space curves are colored according to their +parametric variable value. +To change this, you can give a coloring function. +The coloring function is sampled across the range of its arguments, then +normalized onto the standard Axiom colormap. + +\xtc{ +A function of one variable makes the color depend on the +value of the parametric variable specified for a tube plot. +}{ +\spadpaste{color1(t) == t \bound{colorFxn1}} +} +\psXtc{ +}{ +\graphpaste{draw(curve(sin(t), cos(t),0), t=0..2*\%pi, tubeRadius == .3, colorFunction == color1) \free{colorFxn1}} +}{ +\epsffile[0 0 295 295]{../ps/3doptcf1.ps} +} +% +\xtc{ +A function of two variables makes the color depend on the +values of the independent variables. +}{ +\spadpaste{color2(u,v) == u**2 - v**2 \bound{colorFxn2}} +} +\psXtc{ +Use the option {\tt colorFunction} for special coloring. +}{ +\graphpaste{draw(cos(u*v), u=-3..3, v=-3..3, colorFunction == color2) \free{colorFxn2}} +}{ +\epsffile[0 0 295 295]{../ps/3doptcf2.ps} +} +% +\xtc{ +With a three variable function, the +color also depends on the value of the function. +}{ +\spadpaste{color3(x,y,fxy) == sin(x*fxy) + cos(y*fxy) \bound{colorFxn3}} +} +\psXtc{ +}{ +\graphpaste{draw(cos(x*y), x=-3..3, y=-3..3, colorFunction == color3) \free{colorFxn3}} +}{ +\epsffile[0 0 295 295]{../ps/3doptcf3.ps} +} +% +Normally the Cartesian coordinate system is used. +To change this, use the {\tt coordinates} option. +For details, see +\downlink{``\ugGraphCoordTitle''}{ugGraphCoordPage} +in Section \ugGraphCoordNumber\ignore{ugGraphCoord}. +% +% +\xtc{ +}{ +\spadpaste{m(u:DFLOAT,v:DFLOAT):DFLOAT == 1 \bound{m}} +} +\psXtc{ +Use the spherical +coordinate system. +}{ +\graphpaste{draw(m, 0..2*\%pi,0..\%pi, coordinates == spherical, style=="shade") \free{m}} +}{ +\epsffile[0 0 295 295]{../ps/3doptcrd.ps} +} +% +Space curves may be displayed as tubes with polygonal cross sections. +Two options, {\tt tubeRadius} and {\tt tubePoints}, control the size and +shape of this cross section. +% +\psXtc{ +The {\tt tubeRadius} option specifies the radius of the tube that +encircles the specified space curve. +}{ +\graphpaste{draw(curve(sin(t),cos(t),0),t=0..2*\%pi, style=="shade", tubeRadius == .3)} +}{ +\epsffile[0 0 295 295]{../ps/3doptrad.ps} +} +% +% +\psXtc{ +The {\tt tubePoints} option specifies the number of vertices +defining the polygon that is used to create a tube around the +specified space curve. +The larger this number is, the more cylindrical the tube becomes. +}{ +\graphpaste{draw(curve(sin(t), cos(t), 0), t=0..2*\%pi, style=="shade", tubeRadius == .25, tubePoints == 3)} +}{ +\epsffile[0 0 295 295]{../ps/3doptpts.ps} +} +% +% +% +\psXtc{ +Options \axiomFunFrom{var1Steps}{DrawOption} and +\axiomFunFrom{var2Steps}{DrawOption} specify the number of intervals into +which the grid defining a surface plot is subdivided with respect to the +first and second parameters of the surface function(s). +}{ +\graphpaste{draw(cos(x*y),x=-3..3,y=-3..3, style=="shade", var1Steps == 30, var2Steps == 30)} +}{ +\epsffile[0 0 295 295]{../ps/3doptvb.ps} +} +% +The {\tt space} option +of a \axiomFun{draw} command lets you build multiple graphs in three space. +To use this option, first create an empty three-space object, +then use the {\tt space} option thereafter. +There is no restriction as to the number or kinds +of graphs that can be combined this way. +\xtc{ +Create an empty three-space object. +}{ +\spadpaste{s := create3Space()\$(ThreeSpace DFLOAT) \bound{s}} +} +% +% +\xtc{ +}{ +\spadpaste{m(u:DFLOAT,v:DFLOAT):DFLOAT == 1 \bound{m}} +} +\psXtc{ +Add a graph to this three-space object. +The new graph destructively inserts the graph +into \axiom{s}. +}{ +\graphpaste{draw(m,0..\%pi,0..2*\%pi, coordinates == spherical, space == s) \free{s m}} +}{ +\epsffile[0 0 295 295]{../ps/3dmult1a.ps} +} +% +% +\psXtc{ +Add a second graph to \axiom{s}. +}{ +\graphpaste{v := draw(curve(1.5*sin(t), 1.5*cos(t),0), t=0..2*\%pi, tubeRadius == .25, space == s) \free{s} \bound{v}} +}{ +\epsffile[0 0 295 295]{../ps/3dmult1b.ps} +} +% +A three-space object can also be obtained from an existing \threedim{} viewport +using the \axiomFunFrom{subspace}{ThreeSpace} command. +You can then use \axiomFun{makeViewport3D} to create a viewport window. +\xtc{ +Assign to \axiom{subsp} the three-space object in viewport \axiom{v}. +}{ +\spadpaste{subsp := subspace v \free{v} \bound{su}} +} +\xtc{ +Reset the space component of \axiom{v} to the value of \axiom{subsp}. +}{ +\spadpaste{subspace(v, subsp) \bound{sp} \free{su}} +} +\noOutputXtc{ +Create a viewport window from a three-space object. +}{ +\graphpaste{makeViewport3D(subsp,"Graphs") \free{sp}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphMakeObjectTitle}{The makeObject Command} +\newcommand{\ugGraphMakeObjectNumber}{7.2.5.} + +@ +\section{The makeObject Command} +\label{ugGraphMakeObjectPage} +\index{pages!ugGraphMakeObjectPage!ug07.ht} +\index{ug07.ht!pages!ugGraphMakeObjectPage} +\index{ugGraphMakeObjectPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphMakeObjectPage}{7.2.5. The makeObject Command} +\beginscroll + +An alternate way to create multiple graphs is to use +\axiomFun{makeObject}. +The \axiomFun{makeObject} command is similar to the \axiomFun{draw} +command, except that it returns a three-space object rather than a +\axiomType{ThreeDimensionalViewport}. +In fact, \axiomFun{makeObject} is called by the \axiomFun{draw} +command to create the \axiomType{ThreeSpace} then +\axiomFunFrom{makeViewport3D}{ThreeDimensionalViewport} to create a +viewport window. + +\xtc{ +}{ +\spadpaste{m(u:DFLOAT,v:DFLOAT):DFLOAT == 1 \bound{m}} +} +\noOutputXtc{ +Do the last example a new way. +First use \axiomFun{makeObject} to +create a three-space object \axiom{sph}. +}{ +\spadpaste{sph := makeObject(m, 0..\%pi, 0..2*\%pi, coordinates==spherical)\bound{sph}\free{m}} +} +\noOutputXtc{ +Add a second object to \axiom{sph}. +}{ +\spadpaste{makeObject(curve(1.5*sin(t), 1.5*cos(t), 0), t=0..2*\%pi, space == sph, tubeRadius == .25) \free{sph}\bound{v1}} +} +\noOutputXtc{ +Create and display a viewport +containing \axiom{sph}. +}{ +\graphpaste{makeViewport3D(sph,"Multiple Objects") \free{v1}} +} + +Note that an undefined \axiomType{ThreeSpace} parameter declared in a +\axiomFun{makeObject} or \axiomFun{draw} command results in an error. +Use the \axiomFunFrom{create3Space}{ThreeSpace} function to define a +\axiomType{ThreeSpace}, or obtain a \axiomType{ThreeSpace} that has been +previously generated before including it in a command line. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphThreeDBuildTitle}{Building Three-Dimensional Objects From Primitives} +\newcommand{\ugGraphThreeDBuildNumber}{7.2.6.} + +@ +\section{Building Three-Dimensional Objects From Primitives} +\label{ugGraphThreeDBuildPage} +\index{pages!ugGraphThreeDBuildPage!ug07.ht} +\index{ug07.ht!pages!ugGraphThreeDBuildPage} +\index{ugGraphThreeDBuildPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphThreeDBuildPage} +{7.2.6. Building Three-Dimensional Objects From Primitives} +\beginscroll + +Rather than using the \axiomFun{draw} and \axiomFun{makeObject} commands, +you can create \threedim{} graphs from primitives. +Operation \axiomFunFrom{create3Space}{ThreeSpace} creates a +three-space object to which points, curves and polygons +can be added using the operations from the \axiomType{ThreeSpace} +domain. +The resulting object can then be displayed in a viewport using +\axiomFunFrom{makeViewport3D}{ThreeDimensionalViewport}. + +\xtc{ +Create the empty three-space object \axiom{space}. +}{ +\spadpaste{space := create3Space()\$(ThreeSpace DFLOAT) \bound{space}} +} + +Objects can be sent to this \axiom{space} using the operations +exported by the \axiomType{ThreeSpace} domain. +The following examples place curves into \axiom{space}. + +\xtc{ +Add these eight curves to the space. +}{ +\spadpaste{closedCurve(space,[[0,30,20], [0,30,30], [0,40,30], [0,40,100], [0,30,100],[0,30,110], [0,60,110], [0,60,100], [0,50,100], [0,50,30], [0,60,30], [0,60,20]]) \bound{curve1} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[80,0,30], [80,0,100], [70,0,110], [40,0,110], [30,0,100], [30,0,90], [40,0,90], [40,0,95], [45,0,100], [65,0,100], [70,0,95], [70,0,35]]) \bound{curve2} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[70,0,35], [65,0,30], [45,0,30], [40,0,35], [40,0,60], [50,0,60], [50,0,70], [30,0,70], [30,0,30], [40,0,20], [70,0,20], [80,0,30]]) \bound{curve3} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[0,70,20], [0,70,110], [0,110,110], [0,120,100], [0,120,70], [0,115,65], [0,120,60], [0,120,30], [0,110,20], [0,80,20], [0,80,30], [0,80,20]]) \bound{curve4} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[0,105,30], [0,110,35], [0,110,55], [0,105,60], [0,80,60], [0,80,70], [0,105,70], [0,110,75], [0,110,95], [0,105,100], [0,80,100], [0,80,20], [0,80,30]]) \bound{curve5} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[140,0,20], [140,0,110], [130,0,110], [90,0,20], [101,0,20],[114,0,50], [130,0,50], [130,0,60], [119,0,60], [130,0,85], [130,0,20]]) \bound{curve6} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[0,140,20], [0,140,110], [0,150,110], [0,170,50], [0,190,110], [0,200,110], [0,200,20], [0,190,20], [0,190,75], [0,175,35], [0,165,35],[0,150,75], [0,150,20]]) \bound{curve7} \free{space}} +} +\xtc{ +}{ +\spadpaste{closedCurve(space,[[200,0,20], [200,0,110], [189,0,110], [160,0,45], [160,0,110], [150,0,110], [150,0,20], [161,0,20], [190,0,85], [190,0,20]]) \bound{curve8} \free{space}} +} +\psXtc{ +Create and display the viewport using \axiomFun{makeViewport3D}. +Options may also be given but here are displayed as a list with values +enclosed in parentheses. +}{ +\graphpaste{makeViewport3D(space, title == "Letters") \free{space curve1 curve2 curve3 curve4 curve5 curve6 curve7 curve8}} +}{ +\epsffile[0 0 295 295]{../ps/3dbuilda.ps} +} + +\subsubsection{Cube Example} + +As a second example of the use of primitives, we generate a cube using a +polygon mesh. +It is important to use a consistent orientation of the polygons for +correct generation of \threedim{} objects. + +\xtc{ +Again start with an empty three-space object. +}{ +\spadpaste{spaceC := create3Space()\$(ThreeSpace DFLOAT) \bound{spaceC}} +} +\xtc{ +For convenience, +give \axiomType{DoubleFloat} values \axiom{+1} and \axiom{-1} names. +}{ +\spadpaste{x: DFLOAT := 1 \bound{x}} +} +\xtc{ +}{ +\spadpaste{y: DFLOAT := -1 \bound{y}} +} +\xtc{ +Define the vertices of the cube. +}{ +\spadpaste{a := point [x,x,y,1::DFLOAT]\$(Point DFLOAT) \bound{a} \free{x y}} +} +\xtc{ +}{ +\spadpaste{b := point [y,x,y,4::DFLOAT]\$(Point DFLOAT) \bound{b} \free{x y}} +} +\xtc{ +}{ +\spadpaste{c := point [y,x,x,8::DFLOAT]\$(Point DFLOAT) \bound{c} \free{x y}} +} +\xtc{ +}{ +\spadpaste{d := point [x,x,x,12::DFLOAT]\$(Point DFLOAT) \bound{d} \free{x y}} +} +\xtc{ +}{ +\spadpaste{e := point [x,y,y,16::DFLOAT]\$(Point DFLOAT) \bound{e} \free{x y}} +} +\xtc{ +}{ +\spadpaste{f := point [y,y,y,20::DFLOAT]\$(Point DFLOAT) \bound{f} \free{x y}} +} +\xtc{ +}{ +\spadpaste{g := point [y,y,x,24::DFLOAT]\$(Point DFLOAT) \bound{g} \free{x y}} +} +\xtc{ +}{ +\spadpaste{h := point [x,y,x,27::DFLOAT]\$(Point DFLOAT) \bound{h} \free{x y}} +} +\xtc{ +Add the faces of the cube as polygons to the space using a +consistent orientation. +}{ +\spadpaste{polygon(spaceC,[d,c,g,h]) \free{d c g h spaceC} \bound{pol1}} +} +\xtc{ +}{ +\spadpaste{polygon(spaceC,[d,h,e,a]) \free{d h e a spaceC} \bound{pol2}} +} +\xtc{ +}{ +\spadpaste{polygon(spaceC,[c,d,a,b]) \free{c d a b spaceC} \bound{pol3}} +} +\xtc{ +}{ +\spadpaste{polygon(spaceC,[g,c,b,f]) \free{g c b f spaceC} \bound{pol4}} +} +\xtc{ +}{ +\spadpaste{polygon(spaceC,[h,g,f,e]) \free{h g f e spaceC} \bound{pol5}} +} +\xtc{ +}{ +\spadpaste{polygon(spaceC,[e,f,b,a]) \free{e f b a spaceC} \bound{pol6}} +} +\psXtc{ +Create and display the viewport. +}{ +\graphpaste{makeViewport3D(spaceC, title == "Cube") \free{pol1 pol2 pol3 pol4 pol5 pol6}} +}{ +\epsffile[0 0 295 295]{../ps/3dbuildb.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphCoordTitle}{Coordinate System Transformations} +\newcommand{\ugGraphCoordNumber}{7.2.7.} + +@ +\section{Coordinate System Transformations} +\label{ugGraphCoordPage} +\index{pages!ugGraphCoordPage!ug07.ht} +\index{ug07.ht!pages!ugGraphCoordPage} +\index{ugGraphCoordPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphCoordPage}{7.2.7. Coordinate System Transformations} +\beginscroll + +The \axiomType{CoordinateSystems} package provides coordinate transformation +functions that map a given data point from the coordinate system specified +into the Cartesian coordinate system. +The default coordinate system, given a triplet \axiom{(f(u,v), u, v)}, assumes +that \axiom{z = f(u, v)}, \axiom{x = u} and \axiom{y = v}, +that is, reads the coordinates in \axiom{(z, x, y)} order. + +\xtc{ +}{ +\spadpaste{m(u:DFLOAT,v:DFLOAT):DFLOAT == u**2 \bound{m}} +} +% +\psXtc{ +Graph plotted in default coordinate system. +}{ +\graphpaste{draw(m,0..3,0..5) \free{m}} +}{ +\epsffile[0 0 295 295]{../ps/defcoord.ps} +} + +The \axiom{z} coordinate comes first since the first argument of +the \axiomFun{draw} command gives its values. +In general, the coordinate systems Axiom provides, or any +that you make up, must provide a map to an \axiom{(x, y, z)} triplet in +order to be compatible with the +\axiomFunFrom{coordinates}{DrawOption} \axiomType{DrawOption}. +Here is an example. + +\xtc{ +Define the identity function. +}{ +\spadpaste{cartesian(point:Point DFLOAT):Point DFLOAT == point \bound{cart}} +} +\psXtc{ +Pass \axiom{cartesian} as the \axiomFunFrom{coordinates}{DrawOption} +parameter to the \axiomFun{draw} command. +}{ +\graphpaste{draw(m,0..3,0..5,coordinates==cartesian) \free{m cart}} +}{ +\epsffile[0 0 295 295]{../ps/cartcoord.ps} +} +% + +What happened? +The option {\tt coordinates == cartesian} directs Axiom to +treat the dependent variable \axiom{m} defined by +\texht{$m=u^2$}{m=u**2} as the \axiom{x} coordinate. +Thus the triplet of values \axiom{(m, u, v)} is transformed to +coordinates \axiom{(x, y, z)} and so we get the graph of +\texht{$x=y^2$}{x=y**2}. + +Here is another example. +The \axiomFunFrom{cylindrical}{CoordinateSystems} transform takes +input of the form \axiom{(w,u,v)}, interprets it in the order +\texht{($r$,$\theta$,$z$)}{(\axiom{r}, \axiom{theta}, \axiom{z})} +and maps it to the Cartesian coordinates +\texht{$x=r\cos(\theta)$, $y=r\sin(\theta)$, $z=z$} +{\axiom{x = r * cos(theta)}, \axiom{y = r * sin(theta)}, \axiom{z = z}} +in which +\texht{$r$}{\axiom{r}} is the radius, +\texht{$\theta$}{\axiom{theta}} is the angle and +\texht{$z$}{\axiom{z}} is the z-coordinate. +\xtc{ +An example using the \axiomFunFrom{cylindrical}{CoordinateSystems} +coordinates for the constant \axiom{r = 3}. +}{ +\spadpaste{f(u:DFLOAT,v:DFLOAT):DFLOAT == 3 \bound{f}} +} +\psXtc{ +Graph plotted in cylindrical coordinates. +}{ +\graphpaste{draw(f,0..\%pi,0..6,coordinates==cylindrical) \free{f}} +}{ +\epsffile[0 0 295 295]{../ps/cylcoord.ps} +} + +Suppose you would like to specify \smath{z} as a function of +\smath{r} and \texht{$\theta$}{\axiom{theta}} instead of just +\smath{r}? +Well, you still can use the \axiomFun{cylindrical} Axiom +transformation but we have to reorder the triplet before +passing it to the transformation. + +\xtc{ +First, let's create a point to +work with and call it \axiom{pt} with some color \axiom{col}. +}{ +\spadpaste{col := 5 \bound{c}} +} +\xtc{ +}{ +\spadpaste{pt := point[1,2,3,col]\$(Point DFLOAT) \free{c} \bound{pt}} +} +The reordering you want is +\texht{$(z,r, \theta)$}{\axiom{(z,r,theta)}} to +\texht{$(r, \theta,z)$}{\axiom{(r,theta,z)}} +so that the first element is moved to the third element, while the second +and third elements move forward and the color element does not change. +\xtc{ +Define a function \userfun{reorder} to reorder the point elements. +}{ +\spadpaste{reorder(p:Point DFLOAT):Point DFLOAT == point[p.2, p.3, p.1, p.4] \bound{freo}} +} +\xtc{ +The function moves the second and third elements +forward but the color does not change. +}{ +\spadpaste{reorder pt \free{pt freo}} +} +\xtc{ +The function \userfun{newmap} converts our reordered version of +the cylindrical coordinate system to the standard +\texht{$(x,y,z)$}{\axiom{(x,y,z)}} Cartesian system. +}{ +\spadpaste{newmap(pt:Point DFLOAT):Point DFLOAT == cylindrical(reorder pt) \free{freo} \bound{fnewmap}} +} +\xtc{ +}{ +\spadpaste{newmap pt \free{fnewmap pt} \bound{new}} +} +% +\psXtc{ +Graph the same function \axiom{f} using the coordinate mapping of the function +\axiom{newmap}, so it is now interpreted as +\texht{$z=3$}{\axiom{z = 3}}: +}{ +\graphpaste{draw(f,0..3,0..2*\%pi,coordinates==newmap) \free{f new}} +}{ +\epsffile[0 0 295 295]{../ps/newmap.ps} +} + +{\texht{\sloppy}{} +The \axiomType{CoordinateSystems} package exports the following +operations: +\axiomFun{bipolar}, +\axiomFun{bipolarCylindrical}, +\axiomFun{cartesian}, +\axiomFun{conical}, +\axiomFun{cylindrical}, +\axiomFun{elliptic}, +\axiomFun{ellipticCylindrical}, +\axiomFun{oblateSpheroidal}, +\axiomFun{parabolic}, +\axiomFun{parabolicCylindrical}, +\axiomFun{paraboloidal}, +\axiomFun{polar}, +\axiomFun{prolateSpheroidal}, +\axiomFun{spherical}, and +\axiomFun{toroidal}. +Use \Browse{} or the \spadcmd{)show} system command +to get more information. + +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphClipTitle}{Three-Dimensional Clipping} +\newcommand{\ugGraphClipNumber}{7.2.8.} + +@ +\section{Three-Dimensional Clipping} +\label{ugGraphClipPage} +\index{pages!ugGraphClipPage!ug07.ht} +\index{ug07.ht!pages!ugGraphClipPage} +\index{ugGraphClipPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphClipPage}{7.2.8. Three-Dimensional Clipping} +\beginscroll + +A \threedim{} graph can be explicitly clipped within the \axiomFun{draw} +command by indicating a minimum and maximum threshold for the +given function definition. +These thresholds can be defined using the Axiom \axiomFun{min} +and \axiomFun{max} functions. +\xtc{ +}{ +\begin{spadsrc}[\bound{g}] +gamma(x,y) == + g := Gamma complex(x,y) + point [x, y, max( min(real g, 4), -4), argument g] +\end{spadsrc} +} +\psXtc{ +Here is an example that clips +the gamma function in order to eliminate the extreme divergence it creates. +}{ +\graphpaste{draw(gamma,-\%pi..\%pi,-\%pi..\%pi,var1Steps==50,var2Steps==50) \free{g}} +}{ +\epsffile[0 0 295 295]{../ps/clipgamma.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphThreeDControlTitle}{Three-Dimensional Control-Panel} +\newcommand{\ugGraphThreeDControlNumber}{7.2.9.} + +@ +\section{Three-Dimensional Control-Panel} +\label{ugGraphThreeDControlPage} +\index{pages!ugGraphThreeDControlPage!ug07.ht} +\index{ug07.ht!pages!ugGraphThreeDControlPage} +\index{ugGraphThreeDControlPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphThreeDControlPage}{7.2.9. Three-Dimensional Control-Panel} +\beginscroll +Once you have created a viewport, move your mouse to the viewport +and click with your left mouse button. +This displays a control-panel on the side of the viewport +that is closest to where you clicked. + + +\subsubsection{Transformations} + +We recommend you first select the {\bf Bounds} button while +executing transformations since the bounding box displayed +indicates the object's position as it changes. +% +\indent{0} +\beginitems +% +\item[Rotate:] A rotation transformation occurs by clicking the mouse +within the {\bf Rotate} window in the upper left corner of the +control-panel. +The rotation is computed in spherical coordinates, using the +horizontal mouse position to increment or decrement the value of +the longitudinal angle \texht{$\theta$}{\axiom{theta}} within the +range of 0 to \texht{2$\pi$}{2*pi} and the vertical mouse position +to increment or decrement the value of the latitudinal angle +\texht{$\phi$}{\axiom{phi}} within the range of \texht{-$\pi$}{pi} +to \texht{$\pi$}{pi}. +The active mode of rotation is displayed in green on a color +monitor or in clear text on a black and white monitor, while the +inactive mode is displayed in red for color display or a mottled +pattern for black and white. +% +\indent{0} +\beginitems +% +\item[origin:] The {\bf origin} button indicates that the +rotation is to occur with respect to the origin of the viewing space, that is +indicated by the axes. +% +\item[object:] The {\bf object} button indicates that the +rotation is to occur with respect to the center of volume of the object, +independent of the axes' origin position. +\enditems +\indent{0} +% +\item[Scale:] A scaling transformation occurs by clicking the mouse +within the {\bf Scale} window in the upper center of the +control-panel, containing a zoom arrow. +The axes along which the scaling is to occur are indicated by +selecting the appropriate button above the zoom arrow window. +The selected axes are displayed in green on a color monitor or in +clear text on a black and white monitor, while the unselected axes +are displayed in red for a color display or a mottled pattern for +black and white. +% +\indent{0} +\beginitems +% +\item[uniform:] Uniform scaling along the {\tt x}, {\tt y} +and {\tt z} axes occurs when all the axes buttons are selected. +% +\item[non-uniform:] If any of the axes buttons are +not selected, non-uniform scaling occurs, that is, scaling occurs only in the +direction of the axes that are selected. +\enditems +\indent{0} +% +\item[Translate:] Translation occurs by indicating with the mouse in the +{\bf Translate} window the direction you want the graph to move. +This window is located in the upper right corner of the +control-panel and contains a potentiometer with crossed arrows +pointing up, down, left and right. +Along the top of the {\bf Translate} window are three buttons +({\bf XY}, +{\bf XZ}, and {\bf YZ}) indicating the three orthographic projection planes. +Each orientates the group as a view into that plane. +Any translation of the graph occurs only along this plane. +\enditems +\indent{0} + +\subsubsection{Messages} + +The window directly below the potentiometer windows for transformations is +used to display system messages relating to the viewport, the control-panel +and the current graph displaying status. + +\subsubsection{Colormap} + +Directly below the message window is the colormap range indicator +window. +The Axiom Colormap shows a sampling of the spectrum from +which hues can be drawn to represent the colors of a surface. +The Colormap is composed of five shades for each of the hues along +this spectrum. +By moving the markers above and below the Colormap, the range of +hues that are used to color the existing surface are set. +The bottom marker shows the hue for the low end of the color range +and the top marker shows the hue for the upper end of the range. +Setting the bottom and top markers at the same hue results in +monochromatic smooth shading of the graph when {\bf Smooth} mode is selected. +At each end of the Colormap are {\bf +} and {\bf -} buttons. +When clicked on, these increment or decrement the top or bottom +marker. + +\subsubsection{Buttons} + +Below the Colormap window and to the left are located various +buttons that determine the characteristics of a graph. +The buttons along the bottom and right hand side all have special +meanings; the remaining buttons in the first row indicate the mode +or style used to display the graph. +The second row are toggles that turn on or off a property of the +graph. +On a color monitor, the property is on if green (clear text, on a +monochrome monitor) and off if red (mottled pattern, on a +monochrome monitor). +Here is a list of their functions. +% +\indent{0} +\beginitems +% +\item[Wire] displays surface and tube plots as a +wireframe image in a single color (blue) with no hidden surfaces removed, +or displays space curve plots in colors based upon their parametric variables. +This is the fastest mode for displaying a graph. +This is very useful when you +want to find a good orientation of your graph. +% +\item[Solid] displays the graph with hidden +surfaces removed, drawing each polygon beginning with the furthest +from the viewer. +The edges of the polygons are displayed in the hues specified by +the range in the Colormap window. +% +\item[Shade] displays the graph with hidden +surfaces removed and with the polygons shaded, drawing each +polygon beginning with the furthest from the viewer. +Polygons are shaded in the hues specified by the range in the +Colormap window using the Phong illumination model. +% +\item[Smooth] displays the graph using a +renderer that computes the graph one line at a time. +The location and color of the graph at each visible point on the +screen are determined and displayed using the Phong illumination +model. +Smooth shading is done in one of two ways, depending on the range +selected in the colormap window and the number of colors available +from the hardware and/or window manager. +When the top and bottom markers of the colormap range are set to +different hues, the graph is rendered by dithering between the +transitions in color hue. +When the top and bottom markers of the colormap range are set to +the same hue, the graph is rendered using the Phong smooth shading +model. +However, if enough colors cannot be allocated for this purpose, +the renderer reverts to the color dithering method until a +sufficient color supply is available. +For this reason, it may not be possible to render multiple Phong +smooth shaded graphs at the same time on some systems. +% +\item[Bounds] encloses the entire volume of the +viewgraph within a bounding box, or removes the box if previously selected. +The region that encloses the entire volume of the viewport graph is displayed. +% +\item[Axes] displays Cartesian +coordinate axes of the space, or turns them off if previously selected. +% +\item[Outline] causes +quadrilateral polygons forming the graph surface to be outlined in black when +the graph is displayed in {\bf Shade} mode. +% +\item[BW] converts a color viewport to black and white, or vice-versa. +When this button is selected the +control-panel and viewport switch to an immutable colormap composed of a range +of grey scale patterns or tiles that are used wherever shading is necessary. +% +\item[Light] takes you to a control-panel described below. +% +\item[ViewVolume] takes you to another control-panel as described below. +% +\item[Save] creates a menu of the possible file types that can +be written using the control-panel. +The {\bf Exit} button leaves the save menu. +The {\bf Pixmap} button writes an Axiom pixmap of +the current viewport contents. The file is called {\bf axiom3D.pixmap} and is +located in the directory from which Axiom or {\bf viewalone} was +started. +The {\bf PS} button writes the current viewport contents to +PostScript output rather than to the viewport window. +By default the file is called {\bf axiom3D.ps}; however, if a file +name is specified in the user's {\bf .Xdefaults} file it is +used. +The file is placed in the directory from which the Axiom or +{\bf viewalone} session was begun. +See also the \axiomFunFrom{write}{ThreeDimensionalViewport} +function. +% +\item[Reset] returns the object transformation +characteristics back to their initial states. +% +\item[Hide] causes the control-panel for the +corresponding viewport to disappear from the screen. +% +\item[Quit] queries whether the current viewport +session should be terminated. +\enditems +\indent{0} + +\subsubsection{Light} + +% +%>>>\begin{texonly} +% +%>>>\begin{figure}[htbp] +%>>>\begin{picture}(183,252)(-125,0) +%>>>\special{psfile=../ps/3dlight.ps} +%>>>\end{picture} +%>>>\caption{Three-Dimensional Lighting Panel.} +%>>>\end{figure} +%>>>\end{texonly} +% + +The {\bf Light} button changes the control-panel into the +{\bf Lighting Control-Panel}. At the top of this panel, the three axes +are shown with the same orientation as the object. A light vector from +the origin of the axes shows the current position of the light source +relative to the object. At the bottom of the panel is an {\bf Abort} +button that cancels any changes to the lighting that were made, and a +{\bf Return} button that carries out the current set of lighting changes +on the graph. +% +\indent{0} +\beginitems +% +\item[XY:] The {\bf XY} lighting axes window is below the +{\bf Lighting Control-Panel} title and to the left. +This changes the light vector within the {\bf XY} view plane. +% +\item[Z:] The {\bf Z} lighting axis window is below the +{\bf Lighting Control-Panel} title and in the center. This +changes the {\bf Z} +location of the light vector. +% +\item[Intensity:] +Below the {\bf Lighting Control-Panel} title +and to the right is the light intensity meter. +Moving the intensity indicator down decreases the amount of +light emitted from the light source. +When the indicator is at the top of the meter the light source is +emitting at 100\% intensity. +At the bottom of the meter the light source is emitting at a level +slightly above ambient lighting. +\enditems +\indent{0} + +\subsubsection{View Volume} + +The {\bf View Volume} button changes the control-panel into +the {\bf Viewing Volume Panel}. +At the bottom of the viewing panel is an {\bf Abort} button that +cancels any changes to the viewing volume that were made and a +{\it Return} button that carries out the current set of +viewing changes to the graph. +% +%>>>\begin{texonly} +% +%>>>\begin{figure}[htbp] +%>>>\begin{picture}(183,252)(-125,0) +%>>>\special{psfile=../ps/3dvolume.ps} +%>>>\end{picture} +%>>>\caption{Three-Dimensional Volume Panel.} +%>>>\end{figure} +%>>>\end{texonly} +% +\indent{0} +\beginitems +% +\item[Eye Reference:] At the top of this panel is the +{\bf Eye Reference} window. +It shows a planar projection of the viewing pyramid from the eye +of the viewer relative to the location of the object. +This has a bounding region represented by the rectangle on the +left. +Below the object rectangle is the {\bf Hither} window. +By moving the slider in this window the hither clipping plane sets +the front of the view volume. +As a result of this depth clipping all points of the object closer +to the eye than this hither plane are not shown. +The {\bf Eye Distance} slider to the right of the {\bf Hither} +slider is used to change the degree of perspective in the image. +% +\item[Clip Volume:] The {\bf Clip Volume} window is at the +bottom of the {\bf Viewing Volume Panel}. +On the right is a {\bf Settings} menu. +In this menu are buttons to select viewing attributes. +Selecting the {\bf Perspective} button computes the image using +perspective projection. +The {\bf Show Region} button indicates whether the clipping region +of the +volume is to be drawn in the viewport and the {\bf Clipping On} +button shows whether the view volume clipping is to be in effect +when the image +is drawn. +The left side of the {\bf Clip Volume} window shows the clipping +boundary of the graph. +Moving the knobs along the {\bf X}, {\bf Y}, and {\bf Z} sliders +adjusts the volume of the clipping region accordingly. +\enditems +\indent{0} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugGraphThreeDopsTitle}{Operations for Three-Dimensional Graphics} +\newcommand{\ugGraphThreeDopsNumber}{7.2.10.} + +@ +\section{Operations for Three-Dimensional Graphics} +\label{ugGraphThreeDopsPage} +\index{pages!ugGraphThreeDopsPage!ug07.ht} +\index{ug07.ht!pages!ugGraphThreeDopsPage} +\index{ugGraphThreeDopsPage!ug07.ht!pages} +<>= +\begin{page}{ugGraphThreeDopsPage} +{7.2.10. Operations for Three-Dimensional Graphics} +\beginscroll + +Here is a summary of useful Axiom operations for \threedim{} +graphics. +Each operation name is followed by a list of arguments. +Each argument is written as a variable informally named according +to the type of the argument (for example, {\it integer}). +If appropriate, a default value for an argument is given in +parentheses immediately following the name. + +% +\texht{\bgroup\hbadness = 10001\sloppy}{} +\indent{0} +\beginitems +% +\item[\axiomFun{adaptive3D?}]\funArgs{} +tests whether space curves are to be plotted +according to the +adaptive refinement algorithm. + +% +\item[\axiomFun{axes}]\funArgs{viewport, string\argDef{"on"}} +turns the axes on and off. + +% +\item[\axiomFun{close}]\funArgs{viewport} +closes the viewport. + +% +\item[\axiomFun{colorDef}]\funArgs{viewport, +\subscriptIt{color}{1}\argDef{1}, \subscriptIt{color}{2}\argDef{27}} +sets the colormap +range to be from +\subscriptIt{color}{1} to \subscriptIt{color}{2}. + +% +\item[\axiomFun{controlPanel}]\funArgs{viewport, string\argDef{"off"}} +declares whether the +control-panel for the viewport is to be displayed or not. + +% +\item[\axiomFun{diagonals}]\funArgs{viewport, string\argDef{"off"}} +declares whether the +polygon outline includes the diagonals or not. + +% +\item[\axiomFun{drawStyle}]\funArgs{viewport, style} +selects which of four drawing styles +are used: {\tt "wireMesh", "solid", "shade",} or {\tt "smooth".} + +% +\item[\axiomFun{eyeDistance}]\funArgs{viewport,float\argDef{500}} +sets the distance of the eye from the origin of the object +for use in the \axiomFunFrom{perspective}{ThreeDimensionalViewport}. + +% +\item[\axiomFun{key}]\funArgs{viewport} +returns the operating +system process ID number for the viewport. + +% +\item[\axiomFun{lighting}]\funArgs{viewport, +\subscriptText{float}{x}\argDef{-0.5}, +\subscriptText{float}{y}\argDef{0.5}, \subscriptText{float}{z}\argDef{0.5}} +sets the Cartesian +coordinates of the light source. + +% +\item[\axiomFun{modifyPointData}]\funArgs{viewport,integer,point} +replaces the coordinates of the point with +the index {\it integer} with {\it point}. + +% +\item[\axiomFun{move}]\funArgs{viewport, +\subscriptText{integer}{x}\argDef{viewPosDefault}, +\subscriptText{integer}{y}\argDef{viewPosDefault}} +moves the upper +left-hand corner of the viewport to screen position +\allowbreak +({\small \subscriptText{integer}{x}, \subscriptText{integer}{y}}). + +% +\item[\axiomFun{options}]\funArgs{viewport} +returns a list of all current draw options. + +% +\item[\axiomFun{outlineRender}]\funArgs{viewport, string\argDef{"off"}} +turns polygon outlining +off or on when drawing in {\tt "shade"} mode. + +% +\item[\axiomFun{perspective}]\funArgs{viewport, string\argDef{"on"}} +turns perspective +viewing on and off. + +% +\item[\axiomFun{reset}]\funArgs{viewport} +resets the attributes of a viewport to their +initial settings. + +% +\item[\axiomFun{resize}]\funArgs{viewport, +\subscriptText{integer}{width} \argDef{viewSizeDefault}, +\subscriptText{integer}{height} \argDef{viewSizeDefault}} +resets the width and height +values for a viewport. + +% +\item[\axiomFun{rotate}]\funArgs{viewport, +\subscriptText{number}{\texht{$\theta$}{\axiom{theta}}}\argDef{viewThetaDefault}, +\subscriptText{number}{\texht{$\phi$}{\axiom{phi}}}\argDef{viewPhiDefault}} +rotates the viewport by rotation angles for longitude +({\it \texht{$\theta$}{\axiom{theta}}}) and +latitude ({\it \texht{$\phi$}{\axiom{phi}}}). +Angles designate radians if given as floats, or degrees if given +as integers. + +% +\item[\axiomFun{setAdaptive3D}]\funArgs{boolean\argDef{true}} +sets whether space curves are to be plotted +according to the adaptive +refinement algorithm. + +% +\item[\axiomFun{setMaxPoints3D}]\funArgs{integer\argDef{1000}} + sets the default maximum number of possible +points to be used when constructing a \threedim{} space curve. + +% +\item[\axiomFun{setMinPoints3D}]\funArgs{integer\argDef{49}} +sets the default minimum number of possible +points to be used when constructing a \threedim{} space curve. + +% +\item[\axiomFun{setScreenResolution3D}]\funArgs{integer\argDef{500}} +sets the default screen resolution constant +used in setting the computation limit of adaptively +generated \threedim{} space curve plots. + +% +\item[\axiomFun{showRegion}]\funArgs{viewport, string\argDef{"off"}} +declares whether the bounding +box of a graph is shown or not. +% +\item[\axiomFun{subspace}]\funArgs{viewport} +returns the space component. +% +\item[\axiomFun{subspace}]\funArgs{viewport, subspace} +resets the space component +to {\it subspace}. + +% +\item[\axiomFun{title}]\funArgs{viewport, string} +gives the viewport the +title {\it string}. + +% +\item[\axiomFun{translate}]\funArgs{viewport, +\subscriptText{float}{x}\argDef{viewDeltaXDefault}, +\subscriptText{float}{y}\argDef{viewDeltaYDefault}} +translates +the object horizontally and vertically relative to the center of the viewport. + +% +\item[\axiomFun{intensity}]\funArgs{viewport,float\argDef{1.0}} +resets the intensity {\it I} of the light source, +\texht{$0 \le I \le 1.$}{{\it 0 \le I \le 1}.} + +% +\item[\axiomFun{tubePointsDefault}]\funArgs{\optArg{integer\argDef{6}}} +sets or indicates the default number of +vertices defining the polygon that is used to create a tube around +a space curve. + +% +\item[\axiomFun{tubeRadiusDefault}]\funArgs{\optArg{float\argDef{0.5}}} +sets or indicates the default radius of +the tube that encircles a space curve. + +% +\item[\axiomFun{var1StepsDefault}]\funArgs{\optArg{integer\argDef{27}}} +sets or indicates the default number of +increments into which the grid defining a surface plot is subdivided with +respect to the first parameter declared in the surface function. + +% +\item[\axiomFun{var2StepsDefault}]\funArgs{\optArg{integer\argDef{27}}} +sets or indicates the default number of +increments into which the grid defining a surface plot is subdivided with +respect to the second parameter declared in the surface function. + +% +\item[\axiomFun{viewDefaults}]\funArgs{{\tt [}\subscriptText{integer}{% +point}, \subscriptText{integer}{line}, \subscriptText{integer}{axes}, +\subscriptText{integer}{units}, \subscriptText{float}{point}, +\allowbreak\subscriptText{list}{position}, +\subscriptText{list}{size}{\tt ]}} +resets the default settings for the +point color, line color, axes color, units color, point size, +viewport upper left-hand corner position, and the viewport size. + +% +\item[\axiomFun{viewDeltaXDefault}]\funArgs{\optArg{float\argDef{0}}} +resets the default horizontal offset +from the center of the viewport, or returns the current default offset if no argument is given. + +% +\item[\axiomFun{viewDeltaYDefault}]\funArgs{\optArg{float\argDef{0}}} +resets the default vertical offset +from the center of the viewport, or returns the current default offset if no argument is given. + +% +\item[\axiomFun{viewPhiDefault}]\funArgs{\optArg{float\argDef{-\texht{$\pi$}{{\it pi}}/4}}} +resets the default latitudinal view angle, +or returns the current default angle if no argument is given. +\texht{$\phi$}{{\it phi}} is set to this value. + +% +\item[\axiomFun{viewpoint}]\funArgs{viewport, \subscriptText{float}{x}, +\subscriptText{float}{y}, \subscriptText{float}{z}} +sets the viewing position in Cartesian coordinates. + +% +\item[\axiomFun{viewpoint}]\funArgs{viewport, +\subscriptText{float}{\texht{$\theta$}{\axiom{theta}}}, +\subscriptText{Float}{\texht{$\phi$}{\axiom{phi}}}} +sets the viewing position in spherical coordinates. + +% +\item[\axiomFun{viewpoint}]\funArgs{viewport, +\subscriptText{Float}{\texht{$\theta$}{\axiom{theta}}}, +\subscriptText{Float}{\texht{$\phi$}{\axiom{phi}}}, +\subscriptText{Float}{scaleFactor}, +\subscriptText{Float}{xOffset}, \subscriptText{Float}{yOffset}} +sets the viewing position in spherical coordinates, +the scale factor, and offsets. +\texht{$\theta$}{{\it theta}} (longitude) and +\texht{$\phi$}{{\it phi}} (latitude) are in radians. + +% +\item[\axiomFun{viewPosDefault}]\funArgs{\optArg{list\argDef{[0,0]}}} +sets or indicates the position of the upper +left-hand corner of a \twodim{} viewport, relative to the display root +window (the upper left-hand corner of the display is \axiom{[0, 0]}). + +% +\item[\axiomFun{viewSizeDefault}]\funArgs{\optArg{list\argDef{[400,400]}}} +sets or indicates the width and height dimensions +of a viewport. + +% +\item[\axiomFun{viewThetaDefault}]\funArgs{\optArg{float\argDef{\texht{$\pi$}{{\it pi}}/4}}} +resets the default longitudinal view angle, +or returns the current default angle if no argument is given. +When a parameter is specified, the default longitudinal view angle +\texht{$\theta$}{{\it theta}} is set to this value. + +% +\item[\axiomFun{viewWriteAvailable}]\funArgs{\optArg{list\argDef{["pixmap", +"bitmap", "postscript", "image"}}} +indicates the possible file types +that can be created with the \axiomFunFrom{write}{ThreeDimensionalViewport} function. + +% +\item[\axiomFun{viewWriteDefault}]\funArgs{\optArg{list\argDef{[]}}} +sets or indicates the default types of files +that are created in addition to the {\bf data} file when a +\axiomFunFrom{write}{ThreeDimensionalViewport} command +is executed on a viewport. + +% +\item[\axiomFun{viewScaleDefault}]\funArgs{\optArg{float}} +sets the default scaling factor, or returns +the current factor if no argument is given. + +% +\item[\axiomFun{write}]\funArgs{viewport, directory, \optArg{option}} +writes the file {\bf data} for {\it viewport} +in the directory {\it directory}. +An optional third argument specifies a file type (one of {\tt +pixmap}, {\tt bitmap}, {\tt postscript}, or {\tt image}), or a +list of file types. +An additional file is written for each file type listed. + +% +\item[\axiomFun{scale}]\funArgs{viewport, float\argDef{2.5}} +specifies the scaling factor. +\enditems +\indent{0} +\texht{\egroup}{} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugXdefaultsTitle}{Customization using .Xdefaults} +\newcommand{\ugXdefaultsNumber}{7.2.11.} + +@ +\section{Customization using .Xdefaults} +\label{ugXdefaultsPage} +\index{pages!ugXdefaultsPage!ug07.ht} +\index{ug07.ht!pages!ugXdefaultsPage} +\index{ugXdefaultsPage!ug07.ht!pages} +<>= +\begin{page}{ugXdefaultsPage}{7.2.11. Customization using .Xdefaults} +\beginscroll + +Both the \twodim{} and \threedim{} drawing facilities consult +the {\bf .Xdefaults} file for various defaults. +The list of defaults that are recognized by the graphing routines +is discussed in this section. +These defaults are preceded by {\tt Axiom.3D.} +for \threedim{} viewport defaults, {\tt Axiom.2D.} +for \twodim{} viewport defaults, or {\tt Axiom*} (no dot) for +those defaults that are acceptable to either viewport type. + +% +\indent{0} +\beginitems +% +\item[{\tt Axiom*buttonFont:\ \it font}] \ \newline +This indicates which +font type is used for the button text on the control-panel. +\xdefault{Rom11} +% +\item[{\tt Axiom.2D.graphFont:\ \it font}] \quad (2D only) \newline +This indicates +which font type is used for displaying the graph numbers and +slots in the {\bf Graphs} section of the \twodim{} control-panel. +\xdefault{Rom22} +% +\item[{\tt Axiom.3D.headerFont:\ \it font}] \ \newline +This indicates which +font type is used for the axes labels and potentiometer +header names on \threedim{} viewport windows. +This is also used for \twodim{} control-panels for indicating +which font type is used for potentionmeter header names and +multiple graph title headers. +%for example, {\tt Axiom.2D.headerFont: 8x13}. +\xdefault{Itl14} +% +\item[{\tt Axiom*inverse:\ \it switch}] \ \newline +This indicates whether the +background color is to be inverted from white to black. +If {\tt on}, the graph viewports use black as the background +color. +If {\tt off} or no declaration is made, the graph viewports use a +white background. +\xdefault{off} +% +\item[{\tt Axiom.3D.lightingFont:\ \it font}] \quad (3D only) \newline +This indicates which font type is used for the {\bf x}, +{\bf y}, and {\bf z} labels of the two lighting axes potentiometers, and for +the {\bf Intensity} title on the lighting control-panel. +\xdefault{Rom10} +% +\item[{\tt Axiom.2D.messageFont, Axiom.3D.messageFont:\ \it font}] \ \newline +These indicate the font type +to be used for the text in the control-panel message window. +\xdefault{Rom14} +% +\item[{\tt Axiom*monochrome:\ \it switch}] \ \newline +This indicates whether the +graph viewports are to be displayed as if the monitor is black and +white, that is, a 1 bit plane. +If {\tt on} is specified, the viewport display is black and white. +If {\tt off} is specified, or no declaration for this default is +given, the viewports are displayed in the normal fashion for the +monitor in use. +\xdefault{off} +% +\item[{\tt Axiom.2D.postScript:\ \it filename}] \ \newline +This specifies +the name of the file that is generated when a 2D PostScript graph +is saved. +\xdefault{axiom2D.ps} +% +\item[{\tt Axiom.3D.postScript:\ \it filename}] \ \newline +This specifies +the name of the file that is generated when a 3D PostScript graph +is saved. +\xdefault{axiom3D.ps} +% +\item[{\tt Axiom*titleFont \it font}] \ \newline +This +indicates which font type is used +for the title text and, for \threedim{} graphs, +in the lighting and viewing-volume control-panel windows. +\xdefault{Rom14} +% +\item[{\tt Axiom.2D.unitFont:\ \it font}] \quad (2D only) \newline +This indicates +which font type is used for displaying the unit labels on +\twodim{} viewport graphs. +\xdefault{6x10} +% +\item[{\tt Axiom.3D.volumeFont:\ \it font}] \quad (3D only) \newline +This indicates which font type is used for the {\bf x}, +{\bf y}, and {\bf z} labels of the clipping region sliders; for the +{\bf Perspective}, {\bf Show Region}, and {\bf Clipping On} buttons under +{\bf Settings}, and above the windows for the {\bf Hither} and +{\bf Eye Distance} sliders in the {\bf Viewing Volume Panel} of the +\threedim{} control-panel. +\xdefault{Rom8} +\enditems +\indent{0} +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 8 (ug08.ht)} +<>= +\newcommand{\ugProblemTitle}{Advanced Problem Solving} +\newcommand{\ugProblemNumber}{8.} + +@ +\section{Advanced Problem Solving} +\label{ugProblemPage} +\begin{itemize} +\item ugProblemNumericPage \ref{ugProblemNumericPage} on +page~\pageref{ugProblemNumericPage} +\item ugProblemFactorPage \ref{ugProblemFactorPage} on +page~\pageref{ugProblemFactorPage} +\item ugProblemSymRootPage \ref{ugProblemSymRootPage} on +page~\pageref{ugProblemSymRootPage} +\item ugProblemEigenPage \ref{ugProblemEigenPage} on +page~\pageref{ugProblemEigenPage} +\item ugProblemLinPolEqnPage \ref{ugProblemLinPolEqnPage} on +page~\pageref{ugProblemLinPolEqnPage} +\item ugProblemLimitsPage \ref{ugProblemLimitsPage} on +page~\pageref{ugProblemLimitsPage} +\item ugProblemLaplacePage \ref{ugProblemLaplacePage} on +page~\pageref{ugProblemLaplacePage} +\item ugProblemIntegrationPage \ref{ugProblemIntegrationPage} on +page~\pageref{ugProblemIntegrationPage} +\item ugProblemSeriesPage \ref{ugProblemSeriesPage} on +page~\pageref{ugProblemSeriesPage} +\item ugProblemDEQPage \ref{ugProblemDEQPage} on +page~\pageref{ugProblemDEQPage} +\item ugProblemFinitePage \ref{ugProblemFinitePage} on +page~\pageref{ugProblemFinitePage} +\item ugProblemIdealPage \ref{ugProblemIdealPage} on +page~\pageref{ugProblemIdealPage} +\item ugProblemGaloisPage \ref{ugProblemGaloisPage} on +page~\pageref{ugProblemGaloisPage} +\item ugProblemGeneticPage \ref{ugProblemGeneticPage} on +page~\pageref{ugProblemGeneticPage} +\end{itemize} +\index{pages!ugProblemPage!ug08.ht} +\index{ug08.ht!pages!ugProblemPage} +\index{ugProblemPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemPage}{8. Advanced Problem Solving} +\beginscroll + +In this chapter we describe techniques useful in solving advanced problems +with Axiom. + +\beginmenu + \menudownlink{{8.1. Numeric Functions}}{ugProblemNumericPage} + \menudownlink{{8.2. Polynomial Factorization}}{ugProblemFactorPage} + \menudownlink{{8.3. Manipulating Symbolic Roots of a Polynomial}} +{ugProblemSymRootPage} + \menudownlink{{8.4. Computation of Eigenvalues and Eigenvectors}} +{ugProblemEigenPage} + \menudownlink{{8.5. Solution of Linear and Polynomial Equations}} +{ugProblemLinPolEqnPage} + \menudownlink{{8.6. Limits}}{ugProblemLimitsPage} + \menudownlink{{8.7. Laplace Transforms}}{ugProblemLaplacePage} + \menudownlink{{8.8. Integration}}{ugProblemIntegrationPage} + \menudownlink{{8.9. Working with Power Series}}{ugProblemSeriesPage} + \menudownlink{{8.10. Solution of Differential Equations}}{ugProblemDEQPage} + \menudownlink{{8.11. Finite Fields}}{ugProblemFinitePage} + \menudownlink{{8.12. Primary Decomposition of Ideals}}{ugProblemIdealPage} + \menudownlink{{8.13. Computation of Galois Groups}}{ugProblemGaloisPage} + \menudownlink{{8.14. Non-Associative Algebras and Modelling Genetic Laws}} +{ugProblemGeneticPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemNumericTitle}{Numeric Functions} +\newcommand{\ugProblemNumericNumber}{8.1.} + +@ +\section{Numeric Functions} +\label{ugProblemNumericPage} +\begin{itemize} +\item ugIntroPage \ref{ugIntroPage} on +page~\pageref{ugIntroPage} +\item FloatXmpPage \ref{FloatXmpPage} on +page~\pageref{FloatXmpPage} +\item DoubleFloatXmpPage \ref{DoubleFloatXmpPage} on +page~\pageref{DoubleFloatXmpPage} +\end{itemize} +\index{pages!ugProblemNumericPage!ug08.ht} +\index{ug08.ht!pages!ugProblemNumericPage} +\index{ugProblemNumericPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemNumericPage}{8.1. Numeric Functions} +\beginscroll +% +Axiom provides two basic floating-point types: \axiomType{Float} and +\axiomType{DoubleFloat}. This section describes how to use numerical +operations defined on these types and the related complex types. +% +As we mentioned in \downlink{``\ugIntroTitle''}{ugIntroPage} in +Chapter \ugIntroNumber\ignore{ugIntro}, the \axiomType{Float} type +is a software +implementation of floating-point numbers in which the exponent and the +significand may have any number of digits. +See \downlink{`Float'}{FloatXmpPage}\ignore{Float} for detailed +information about this domain. +The \axiomType{DoubleFloat} (see +\downlink{`DoubleFloat'}{DoubleFloatXmpPage}\ignore{DoubleFloat}) +is usually a hardware +implementation of floating point numbers, corresponding to machine double +precision. +The types \axiomType{Complex Float} and \axiomType{Complex DoubleFloat} are +the corresponding software implementations of complex floating-point numbers. +In this section the term {\it floating-point type} means any of these +four types. +% +The floating-point types implement the basic elementary functions. +These include (where \axiomSyntax{\$} means +\axiomType{DoubleFloat}, +\axiomType{Float}, +\axiomType{Complex DoubleFloat}, or +\axiomType{Complex Float}): + +\noindent +\axiomFun{exp}, \axiomFun{log}: \axiom{\$ -> \$} \newline +\axiomFun{sin}, \axiomFun{cos}, \axiomFun{tan}, \axiomFun{cot}, \axiomFun{sec}, \axiomFun{csc}: \axiom{\$ -> \$} \newline +\axiomFun{sin}, \axiomFun{cos}, \axiomFun{tan}, \axiomFun{cot}, \axiomFun{sec}, \axiomFun{csc}: \axiom{\$ -> \$} \newline +\axiomFun{asin}, \axiomFun{acos}, \axiomFun{atan}, \axiomFun{acot}, \axiomFun{asec}, \axiomFun{acsc}: \axiom{\$ -> \$} \newline +\axiomFun{sinh}, \axiomFun{cosh}, \axiomFun{tanh}, \axiomFun{coth}, \axiomFun{sech}, \axiomFun{csch}: \axiom{\$ -> \$} \newline +\axiomFun{asinh}, \axiomFun{acosh}, \axiomFun{atanh}, \axiomFun{acoth}, \axiomFun{asech}, \axiomFun{acsch}: \axiom{\$ -> \$} \newline +\axiomFun{pi}: \axiom{() -> \$} \newline +\axiomFun{sqrt}: \axiom{\$ -> \$} \newline +\axiomFun{nthRoot}: \axiom{(\$, Integer) -> \$} \newline +\axiomFunFrom{**}{Float}: \axiom{(\$, Fraction Integer) -> \$} \newline +\axiomFunFrom{**}{Float}: \axiom{(\$,\$) -> \$} \newline + +The handling of roots depends on whether the floating-point type +is real or complex: for the real floating-point types, +\axiomType{DoubleFloat} and \axiomType{Float}, if a real root exists +the one with the same sign as the radicand is returned; for the +complex floating-point types, the principal value is returned. +Also, for real floating-point types the inverse functions +produce errors if the results are not real. +This includes cases such as \axiom{asin(1.2)}, \axiom{log(-3.2)}, +\axiom{sqrt(-1.1)}. +% +\xtc{ +The default floating-point type is \axiomType{Float} so to evaluate +functions using \axiomType{Float} or \axiomType{Complex Float}, just use +normal decimal notation. +}{ +\spadpaste{exp(3.1)} +} +\xtc{ +}{ +\spadpaste{exp(3.1 + 4.5 * \%i)} +} +\xtc{ +To evaluate functions using \axiomType{DoubleFloat} +or \axiomType{Complex DoubleFloat}, +a declaration or conversion is required. +}{ +\spadpaste{r: DFLOAT := 3.1; t: DFLOAT := 4.5; exp(r + t*\%i)} +} +\xtc{ +}{ +\spadpaste{exp(3.1::DFLOAT + 4.5::DFLOAT * \%i)} +} +% +A number of special functions are provided by the package +\axiomType{DoubleFloatSpecialFunctions} for the machine-precision +floating-point types. +The special functions provided are listed below, where \axiom{F} stands for +the types \axiomType{DoubleFloat} and \axiomType{Complex DoubleFloat}. +The real versions of the functions yield an error if the result is not real. + +\noindent +\axiomFun{Gamma}: \axiom{F -> F}\hfill\newline +\axiom{Gamma(z)} is the Euler gamma function, + \texht{$\Gamma(z)$}{\axiom{Gamma(z)}}, + defined by + \texht{\narrowDisplay{\Gamma(z) = \int_{0}^{\infty} t^{z-1} e^{-t} dt.}% + }{ +\newline +\centerline{{\axiom{Gamma(z) = integrate(t**(z-1)*exp(-t), t=0..\%infinity).}}} + } + +\noindent +\axiomFun{Beta}: \axiom{F -> F}\hfill\newline + \axiom{Beta(u, v)} is the Euler Beta function, + \texht{$B(u,v)$}{\axiom{B(u,v)}}, defined by + \texht{\narrowDisplay{B(u,v) = \int_{0}^{1} t^{u-1} (1-t)^{v-1} dt.}% + }{ +\newline +\centerline{{ \axiom{Beta(u,v) = integrate(t**(u-1)*(1-t)**(b-1), t=0..1).}}} + } + This is related to \texht{$\Gamma(z)$}{\axiom{Gamma(z)}} by + \texht{\narrowDisplay{B(u,v) = \frac{\Gamma(u) \Gamma(v)}{\Gamma(u + v)}.}% + }{ +\newline +\centerline{{ \axiom{Beta(u,v) = Gamma(u)*Gamma(v)/Gamma(u + v).}}} + }% + +\noindent +\axiomFun{logGamma}: \axiom{F -> F}\hfill\newline + \axiom{logGamma(z)} is the natural logarithm of +\texht{$\Gamma(z)$}{\axiom{Gamma(z)}}. + This can often be computed even if \texht{$\Gamma(z)$}{\axiom{Gamma(z)}} +cannot. +% + +\noindent +\axiomFun{digamma}: \axiom{F -> F}\hfill\newline + \axiom{digamma(z)}, also called \axiom{psi(z)}, +is the function \texht{$\psi(z)$}{\axiom{psi(z)}}, + defined by \texht{\narrowDisplay{\psi(z) = \Gamma'(z)/\Gamma(z).}% + }{ +\newline +\centerline{{ \axiom{psi(z) = Gamma'(z)/Gamma(z).}}} + }% + +\noindent +\axiomFun{polygamma}: \axiom{(NonNegativeInteger, F) -> F}\hfill\newline + \axiom{polygamma(n, z)} is the \eth{\axiom{n}} derivative of + \texht{$\psi(z)$}{\axiom{digamma(z)}}\texht{, written $\psi^{(n)}(z)$}{}. + +\noindent +\axiomFun{besselJ}: \axiom{(F,F) -> F}\hfill\newline + \axiom{besselJ(v,z)} is the Bessel function of the first kind, + \texht{$J_\nu (z)$}{\axiom{J(v,z)}}. + This function satisfies the differential equation + \texht{\narrowDisplay{z^2 w''(z) + z w'(z) + (z^2-\nu^2)w(z) = 0.}% + }{ +\newline +\centerline{{ \axiom{z**2*w''(z) + z*w'(z) + (z**2-v**2)*w(z) = 0.}}} + }% + +\noindent +\axiomFun{besselY}: \axiom{(F,F) -> F}\hfill\newline + \axiom{besselY(v,z)} is the Bessel function of the second kind, + \texht{$Y_\nu (z)$}{\axiom{Y(v,z)}}. + This function satisfies the same differential equation as + \axiomFun{besselJ}. + The implementation simply uses the relation + \texht{\narrowDisplay{Y_\nu (z) = \frac{J_\nu (z) \cos(\nu \pi) - J_{-\nu} (z)}{\sin(\nu \pi)}.}% + }{ +\newline +\centerline{{ \axiom{Y(v,z) = (J(v,z)*cos(v*\%pi) - J(-v,z))/sin(v*\%pi).}}} + }% + +\noindent +\axiomFun{besselI}: \axiom{(F,F) -> F}\hfill\newline + \axiom{besselI(v,z)} is the modified Bessel function of the first kind, + \texht{$I_\nu (z)$}{\axiom{I(v,z)}}. + This function satisfies the differential equation + \texht{\narrowDisplay{z^2 w''(z) + z w'(z) - (z^2+\nu^2)w(z) = 0.}% + }{ +\newline +\centerline{{ \axiom{z**2 * w''(z) + z * w'(z) - (z**2+v**2)*w(z) = 0.}}} + }% + +\noindent +\axiomFun{besselK}: \axiom{(F,F) -> F}\hfill\newline + \axiom{besselK(v,z)} is the modified Bessel function of the second kind, + \texht{$K_\nu (z)$}{\axiom{K(v,z)}}. + This function satisfies the same differential equation as \axiomFun{besselI}. + The implementation simply uses the relation + \texht{\narrowDisplay{K_\nu (z) = \pi \frac{I_{-\nu} (z) - I_{\nu} (z)}{2 \sin(\nu \pi)}.}% + }{ +\newline +\centerline{{ \axiom{K(v,z) = \%pi*(I(v,z) - I(-v,z))/(2*sin(v*\%pi)).}}} + } + +\noindent +\axiomFun{airyAi}: \axiom{F -> F}\hfill\newline + \axiom{airyAi(z)} is the Airy function \texht{$Ai(z)$}{\axiom{Ai(z)}}. + This function satisfies the differential equation + \texht{$w''(z) - z w(z) = 0.$}{\axiom{w''(z) - z * w(z) = 0.}} + The implementation simply uses the relation + \texht{\narrowDisplay{Ai(-z) = \frac{1}{3}\sqrt{z} ( J_{-1/3} (\frac{2}{3}z^{3/2}) + J_{1/3} (\frac{2}{3}z^{3/2}) ).}% + }{ +\newline +\centerline{{ \axiom{Ai(-z) = 1/3 * sqrt(z) * (J(-1/3, 2/3*z**(3/2)) + J(1/3, 2/3*z**(3/2)) ).}}} + }% + +\noindent +\axiomFun{airyBi}: \axiom{F -> F}\hfill\newline + \axiom{airyBi(z)} is the Airy function \texht{$Bi(z)$}{\axiom{Bi(z)}}. + This function satisfies the same differential equation as \axiomFun{airyAi}. + The implementation simply uses the relation + \texht{\narrowDisplay{Bi(-z) = \frac{1}{3}\sqrt{3 z} ( J_{-1/3} (\frac{2}{3}z^{3/2}) - J_{1/3} (\frac{2}{3}z^{3/2}) ).}% + }{ +\newline +\centerline{{ \axiom{Bi(-z) = 1/3 *sqrt(3*z) * (J(-1/3, 2/3*z**(3/2)) - J(1/3, 2/3*z**(3/2)) ).}}} + } + +\noindent +\axiomFun{hypergeometric0F1}: \axiom{(F,F) -> F}\hfill\newline + \axiom{hypergeometric0F1(c,z)} is the hypergeometric function + \texht{${}_0 F_1 ( ; c; z)$}{\axiom{0F1(; c; z)}}.% + +\xtc{ +The above special functions are defined only for small floating-point types. +If you give \axiomType{Float} arguments, they are converted to +\axiomType{DoubleFloat} by Axiom. +}{ +\spadpaste{Gamma(0.5)**2} +} +\xtc{ +}{ +\spadpaste{a := 2.1; b := 1.1; besselI(a + \%i*b, b*a + 1)} +} +% +A number of additional operations may be used to compute numerical values. +These are special polynomial functions that can be evaluated for values in +any commutative ring \axiom{R}, and in particular for values in any +floating-point type. +The following operations are provided by the package +\axiomType{OrthogonalPolynomialFunctions}: + +\noindent +\axiomFun{chebyshevT}: \axiom{(NonNegativeInteger, R) -> R}\hbox{}\hfill\newline + \axiom{chebyshevT(n,z)} is the \eth{\axiom{n}} Chebyshev polynomial of the first + kind, \texht{$T_n (z)$}{\axiom{T[n](z)}}. These are defined by + \texht{\narrowDisplay{\frac{1-t z}{1-2 t z+t^2} = \sum_{n=0}^{\infty} T_n (z) t^n.}% + }{ +\newline +\centerline{{ \axiom{(1-t*z)/(1-2*t*z+t**2) = sum(T[n](z) *t**n, n = 0..).}}} + }% + +\noindent +\axiomFun{chebyshevU}: \axiom{(NonNegativeInteger, R) -> R}\hbox{}\hfill\newline + \axiom{chebyshevU(n,z)} is the \eth{\axiom{n}} Chebyshev polynomial of the second + kind, \texht{$U_n (z)$}{\axiom{U[n](z)}}. These are defined by + \texht{\narrowDisplay{\frac{1}{1-2 t z+t^2} = \sum_{n=0}^{\infty} U_n (z) t^n.}% + }{ +\newline +\centerline{{ \axiom{1/(1-2*t*z+t**2) = sum(U[n](z) *t**n, n = 0..).}}} + }% + +\noindent +\axiomFun{hermiteH}: \axiom{(NonNegativeInteger, R) -> R}\hbox{}\hfill\newline + \axiom{hermiteH(n,z)} is the \eth{\axiom{n}} Hermite polynomial, + \texht{$H_n (z)$}{\axiom{H[n](z)}}. + These are defined by + \texht{\narrowDisplay{e^{2 t z - t^2} = \sum_{n=0}^{\infty} H_n (z) \frac{t^n}{n!}.}% + }{ +\newline +\centerline{{ \axiom{exp(2*t*z-t**2) = sum(H[n](z)*t**n/n!, n = 0..).}}} + }% + +\noindent +\axiomFun{laguerreL}: \axiom{(NonNegativeInteger, R) -> R}\hbox{}\hfill\newline + \axiom{laguerreL(n,z)} is the \eth{\axiom{n}} Laguerre polynomial, + \texht{$L_n (z)$}{\axiom{L[n](z)}}. + These are defined by + \texht{\narrowDisplay{\frac{e^{-\frac{t z}{1-t}}}{1-t} = \sum_{n=0}^{\infty} L_n (z) \frac{t^n}{n!}.}% + }{ +\newline +\centerline{{ \axiom{exp(-t*z/(1-t))/(1-t) = sum(L[n](z)*t**n/n!, n = 0..).}}} + }% + +\noindent +\axiomFun{laguerreL}: \axiom{(NonNegativeInteger, NonNegativeInteger, R) -> R}\hbox{}\hfill\newline + \axiom{laguerreL(m,n,z)} is the associated Laguerre polynomial, + \texht{$L^m_n (z)$}{\axiom{L[n](z)}}. + This is the \eth{\axiom{m}} derivative of \texht{$L_n (z)$}{\axiom{L[n](z)}}. + +\noindent +\axiomFun{legendreP}: \axiom{(NonNegativeInteger, R) -> R}\hbox{}\hfill\newline + \axiom{legendreP(n,z)} is the \eth{\axiom{n}} Legendre polynomial, + \texht{$P_n (z)$}{\axiom{P[n](z)}}. These are defined by + \texht{\narrowDisplay{\frac{1}{\sqrt{1-2 t z+t^2}} = \sum_{n=0}^{\infty} P_n (z) t^n.}% + }{ +\newline +\centerline{{ \axiom{1/sqrt(1-2*z*t+t**2) = sum(P[n](z)*t**n, n = 0..).}}} + }% + +% +\xtc{ +These operations require non-negative integers for the indices, but otherwise +the argument can be given as desired. +}{ +\spadpaste{[chebyshevT(i, z) for i in 0..5]} +} +\xtc{ +The expression \axiom{chebyshevT(n,z)} evaluates to the \eth{\axiom{n}} Chebyshev +polynomial of the first kind. +}{ +\spadpaste{chebyshevT(3, 5.0 + 6.0*\%i)} +} +\xtc{ +}{ +\spadpaste{chebyshevT(3, 5.0::DoubleFloat)} +} +\xtc{ +The expression \axiom{chebyshevU(n,z)} evaluates to the \eth{\axiom{n}} Chebyshev +polynomial of the second kind. +}{ +\spadpaste{[chebyshevU(i, z) for i in 0..5]} +} +\xtc{ +}{ +\spadpaste{chebyshevU(3, 0.2)} +} +\xtc{ +The expression \axiom{hermiteH(n,z)} evaluates to the \eth{\axiom{n}} Hermite +polynomial. +}{ +\spadpaste{[hermiteH(i, z) for i in 0..5]} +} +\xtc{ +}{ +\spadpaste{hermiteH(100, 1.0)} +} +\xtc{ +The expression \axiom{laguerreL(n,z)} evaluates to the \eth{\axiom{n}} Laguerre +polynomial. +}{ +\spadpaste{[laguerreL(i, z) for i in 0..4]} +} +\xtc{ +}{ +\spadpaste{laguerreL(4, 1.2)} +} +\xtc{ +}{ +\spadpaste{[laguerreL(j, 3, z) for j in 0..4]} +} +\xtc{ +}{ +\spadpaste{laguerreL(1, 3, 2.1)} +} +\xtc{ +The expression +\axiom{legendreP(n,z)} evaluates to the \eth{\axiom{n}} Legendre polynomial, +}{ +\spadpaste{[legendreP(i,z) for i in 0..5]} +} +\xtc{ +}{ +\spadpaste{legendreP(3, 3.0*\%i)} +} +% + +Finally, three number-theoretic polynomial operations may be evaluated. +The following operations are provided by the package +\axiomType{NumberTheoreticPolynomialFunctions}. + +\noindent +\axiomFun{bernoulliB}: \axiom{(NonNegativeInteger, R) -> R} \hbox{}\hfill\newline + \axiom{bernoulliB(n,z)} is the \eth{\axiom{n}} Bernoulli polynomial, + \texht{$B_n (z)$}{\axiom{B[n](z)}}. These are defined by + \texht{\narrowDisplay{\frac{t e^{z t}}{e^t - 1} = \sum_{n=0}^{\infty} B_n (z) \frac{t^n}{n!}.} + }{ +\newline +\centerline{{ \axiom{t*exp(z*t)/(exp t - 1) = sum(B[n](z)*t**n/n! for n - 0..)}}} + }% + +\noindent +\axiomFun{eulerE}: \axiom{(NonNegativeInteger, R) -> R} \hbox{}\hfill\newline + \axiom{eulerE(n,z)} is the \eth{\axiom{n}} Euler polynomial, + \texht{$E_n (z)$}{\axiom{E[n](z)}}. These are defined by + \texht{\narrowDisplay{\frac{2 e^{z t}}{e^t + 1} = \sum_{n=0}^{\infty} E_n (z) \frac{t^n}{n!}.}% + }{ +\newline +\centerline{{ \axiom{2*exp(z*t)/(exp t + 1) = sum(E[n](z)*t**n/n! for n - 0..)}}} + }% + +\noindent +\axiomFun{cyclotomic}: \axiom{(NonNegativeInteger, R) -> R}\hbox{}\hfill\newline + \axiom{cyclotomic(n,z)} is the \eth{\axiom{n}} cyclotomic polynomial + \texht{$\Phi_n (z)$}{\axiom{phi(n,z)}}. This is the polynomial whose + roots are precisely the primitive \eth{\axiom{n}} roots of unity. + This polynomial has degree given by the Euler totient function + \texht{$\phi(n)$}{\axiom{phi(n)}}. + +\xtc{ +The expression \axiom{bernoulliB(n,z)} evaluates to the \eth{\axiom{n}} Bernoulli +polynomial. +}{ +\spadpaste{bernoulliB(3, z)} +} +\xtc{ +}{ +\spadpaste{bernoulliB(3, 0.7 + 0.4 * \%i)} +} +\xtc{ +The expression +\axiom{eulerE(n,z)} evaluates to the \eth{\axiom{n}} Euler polynomial. +}{ +\spadpaste{eulerE(3, z)} +} +\xtc{ +}{ +\spadpaste{eulerE(3, 0.7 + 0.4 * \%i)} +} +\xtc{ +The expression +\axiom{cyclotomic(n,z)} evaluates to the \eth{\axiom{n}} cyclotomic polynomial. +}{ +\spadpaste{cyclotomic(3, z)} +} +\xtc{ +}{ +\spadpaste{cyclotomic(3, (-1.0 + 0.0 * \%i)**(2/3))} +} + +Drawing complex functions in Axiom is presently somewhat +awkward compared to drawing real functions. +It is necessary to use the \axiomFun{draw} operations that operate +on functions rather than expressions. + +\psXtc{ +This is the complex exponential function\texht{ (rotated interactively).}{.} +When this is displayed in color, the height is the value of the real part of +the function and the color is the imaginary part. +Red indicates large negative imaginary values, green indicates imaginary +values near zero and blue/violet indicates large positive imaginary values. +}{ +\graphpaste{draw((x,y)+-> real exp complex(x,y), -2..2, -2*\%pi..2*\%pi, colorFunction == (x, y) +-> imag exp complex(x,y), title=="exp(x+\%i*y)", style=="smooth")} +}{ +\epsffile[0 0 295 295]{../ps/compexp.ps} +} + +\psXtc{ +This is the complex arctangent function. +Again, the height is the real part of the function value but here +the color indicates the function value's phase. +The position of the branch cuts are clearly visible and one can +see that the function is real only for a real argument. +}{ +\graphpaste{vp := draw((x,y) +-> real atan complex(x,y), -\%pi..\%pi, -\%pi..\%pi, colorFunction==(x,y) +->argument atan complex(x,y), title=="atan(x+\%i*y)", style=="shade"); rotate(vp,-160,-45); vp} +}{ +\epsffile[0 0 295 295]{../ps/compatan.ps} +} + +\psXtc{ +This is the complex Gamma function. +}{ +\graphpaste{draw((x,y) +-> max(min(real Gamma complex(x,y),4),-4), -\%pi..\%pi, -\%pi..\%pi, style=="shade", colorFunction == (x,y) +-> argument Gamma complex(x,y), title == "Gamma(x+\%i*y)", var1Steps == 50, var2Steps== 50)} +}{ +\epsffile[0 0 295 295]{../ps/compgamm.ps} +} + +\psXtc{ +This shows the real Beta function near the origin. +}{ +\graphpaste{draw(Beta(x,y)/100, x=-1.6..1.7, y = -1.6..1.7, style=="shade", title=="Beta(x,y)", var1Steps==40, var2Steps==40)} +}{ +\epsffile[0 0 295 295]{../ps/realbeta.ps} +} + +\psXtc{ +This is the Bessel function \texht{$J_\alpha (x)$}{\axiom{J(alpha,x)}} +for index \texht{$\alpha$}{\axiom{alpha}} in the range \axiom{-6..4} and +argument \texht{$x$}{\axiom{x}} in the range \axiom{2..14}. +}{ +\graphpaste{draw((alpha,x) +-> min(max(besselJ(alpha, x+8), -6), 6), -6..4, -6..6, title=="besselJ(alpha,x)", style=="shade", var1Steps==40, var2Steps==40)} +}{ +\epsffile[0 0 295 295]{../ps/bessel.ps} +} + +\psXtc{ +This is the modified Bessel function +\texht{$I_\alpha (x)$}{\axiom{I(alpha,x)}} +evaluated for various real values of the index \texht{$\alpha$}{\axiom{alpha}} +and fixed argument \texht{$x = 5$}{\axiom{x = 5}}. +}{ +\graphpaste{draw(besselI(alpha, 5), alpha = -12..12, unit==[5,20])} +}{ +\epsffile[0 0 295 295]{../ps/modbess.ps} +} + +\psXtc{ +This is similar to the last example +except the index \texht{$\alpha$}{\axiom{alpha}} +takes on complex values in a \axiom{6 x 6} rectangle centered on the origin. +}{ +\graphpaste{draw((x,y) +-> real besselI(complex(x/20, y/20),5), -60..60, -60..60, colorFunction == (x,y)+-> argument besselI(complex(x/20,y/20),5), title=="besselI(x+i*y,5)", style=="shade")} +}{ +\epsffile[0 0 295 295]{../ps/modbessc.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemFactorTitle}{Polynomial Factorization} +\newcommand{\ugProblemFactorNumber}{8.2.} + +@ +\section{Polynomial Factorization} +\label{ugProblemFactorPage} +\begin{itemize} +\item ugProblemFactorIntRatPage \ref{ugProblemFactorIntRatPage} on +page~\pageref{ugProblemFactorIntRatPage} +\item ugProblemFactorFFPage \ref{ugProblemFactorFFPage} on +page~\pageref{ugProblemFactorFFPage} +\item ugProblemFactorAlgPage \ref{ugProblemFactorAlgPage} on +page~\pageref{ugProblemFactorAlgPage} +\item ugProblemFactorRatFunPage \ref{ugProblemFactorRatFunPage} on +page~\pageref{ugProblemFactorRatFunPage} +\end{itemize} +\index{pages!ugProblemFactorPage!ug08.ht} +\index{ug08.ht!pages!ugProblemFactorPage} +\index{ugProblemFactorPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemFactorPage}{8.2. Polynomial Factorization} +\beginscroll +% +The Axiom polynomial factorization +facilities are available for all polynomial types and a wide variety of +coefficient domains. +Here are some examples. + +\beginmenu + \menudownlink{{8.2.1. Integer and Rational Number Coefficients}} +{ugProblemFactorIntRatPage} + \menudownlink{{8.2.2. Finite Field Coefficients}} +{ugProblemFactorFFPage} + \menudownlink{{8.2.3. Simple Algebraic Extension Field Coefficients}} +{ugProblemFactorAlgPage} + \menudownlink{{8.2.4. Factoring Rational Functions}} +{ugProblemFactorRatFunPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemFactorIntRatTitle}{Integer and Rational Number Coefficients} +\newcommand{\ugProblemFactorIntRatNumber}{8.2.1.} + +@ +\section{Integer and Rational Number Coefficients} +\label{ugProblemFactorIntRatPage} +\index{pages!ugProblemFactorIntRatPage!ug08.ht} +\index{ug08.ht!pages!ugProblemFactorIntRatPage} +\index{ugProblemFactorIntRatPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemFactorIntRatPage} +{8.2.1. Integer and Rational Number Coefficients} +\beginscroll + +\labelSpace{4pc} +\xtc{ +Polynomials with integer +coefficients can be be factored. +}{ +\spadpaste{v := (4*x**3+2*y**2+1)*(12*x**5-x**3*y+12) \bound{v}} +} +\xtc{ +}{ +\spadpaste{factor v \free{v}} +} +\xtc{ +Also, Axiom can factor polynomials with +rational number coefficients. +}{ +\spadpaste{w := (4*x**3+(2/3)*x**2+1)*(12*x**5-(1/2)*x**3+12) \bound{w}} +} +\xtc{ +}{ +\spadpaste{factor w \free{w}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemFactorFFTitle}{Finite Field Coefficients} +\newcommand{\ugProblemFactorFFNumber}{8.2.2.} + +@ +\section{Finite Field Coefficients} +\label{ugProblemFactorFFPage} +\begin{itemize} +\item ugProblemFinitePage \ref{ugProblemFinitePage} on +page~\pageref{ugProblemFinitePage} +\end{itemize} +\index{pages!ugProblemFactorFFPage!ug08.ht} +\index{ug08.ht!pages!ugProblemFactorFFPage} +\index{ugProblemFactorFFPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemFactorFFPage}{8.2.2. Finite Field Coefficients} +\beginscroll + +Polynomials with coefficients in a finite field +can be also be factored. + +\labelSpace{3pc} +\xtc{ +}{ +\spadpaste{u : POLY(PF(19)) :=3*x**4+2*x**2+15*x+18 \bound{u}} +} +\xtc{ +These include the integers mod \axiom{p}, where \axiom{p} is prime, and +extensions of these fields. +}{ +\spadpaste{factor u \free{u}} +} +\xtc{ +Convert this to have coefficients in the finite +field with \texht{$19^3$}{\axiom{19**3}} elements. +See \downlink{``\ugProblemFiniteTitle''}{ugProblemFinitePage} +in Section \ugProblemFiniteNumber\ignore{ugProblemFinite} for more information +about finite fields. +}{ +\spadpaste{factor(u :: POLY FFX(PF 19,3)) \free{u}} +} +% + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemFactorAlgTitle}{Simple Algebraic Extension Field Coefficients} +\newcommand{\ugProblemFactorAlgNumber}{8.2.3.} + +@ +\section{Simple Algebraic Extension Field Coefficients} +\label{ugProblemFactorAlgPage} +\index{pages!ugProblemFactorAlgPage!ug08.ht} +\index{ug08.ht!pages!ugProblemFactorAlgPage} +\index{ugProblemFactorAlgPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemFactorAlgPage} +{8.2.3. Simple Algebraic Extension Field Coefficients} +\beginscroll + +Polynomials with coefficients in simple algebraic extensions +of the rational numbers can be factored. + +\labelSpace{2pc} +\xtc{ +Here, \axiom{aa} and \axiom{bb} are symbolic roots of polynomials. +}{ +\spadpaste{aa := rootOf(aa**2+aa+1) \bound{aa}} +} +\xtc{ +}{ +\spadpaste{p:=(x**3+aa**2*x+y)*(aa*x**2+aa*x+aa*y**2)**2 \free{aa}\bound{p}} +} +\xtc{ +Note that the second argument to factor can be a list of +algebraic extensions to factor over. +}{ +\spadpaste{factor(p,[aa]) \free{p aa}} +} +\xtc{ +This factors \axiom{x**2+3} over the integers. +}{ +\spadpaste{factor(x**2+3)} +} +\xtc{ +Factor the same polynomial over the field obtained by adjoining +\axiom{aa} to the rational numbers. +}{ +\spadpaste{factor(x**2+3,[aa]) \free{aa}} +} +\xtc{ +Factor \axiom{x**6+108} over the same field. +}{ +\spadpaste{factor(x**6+108,[aa]) \free{aa}} +} +\xtc{ +}{ +\spadpaste{bb:=rootOf(bb**3-2) \bound{bb}} +} +\xtc{ +}{ +\spadpaste{factor(x**6+108,[bb]) \free{bb}} +} +\xtc{ +Factor again over the field obtained by adjoining both \axiom{aa} +and \axiom{bb} to the rational numbers. +}{ +\spadpaste{factor(x**6+108,[aa,bb]) \free{aa bb}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemFactorRatFunTitle}{Factoring Rational Functions} +\newcommand{\ugProblemFactorRatFunNumber}{8.2.4.} + +@ +\section{Factoring Rational Functions} +\label{ugProblemFactorRatFunPage} +\index{pages!ugProblemFactorRatFunPage!ug08.ht} +\index{ug08.ht!pages!ugProblemFactorRatFunPage} +\index{ugProblemFactorRatFunPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemFactorRatFunPage}{8.2.4. Factoring Rational Functions} +\beginscroll + +Since fractions of polynomials form a field, every element (other than zero) +divides any other, so there is no useful notion of irreducible factors. +Thus the \axiomFun{factor} operation is not very useful for fractions +of polynomials. + +\xtc{ +There is, instead, a specific operation \axiomFun{factorFraction} +that separately factors the numerator and denominator and returns +a fraction of the factored results. +}{ +\spadpaste{factorFraction((x**2-4)/(y**2-4))} +} +\xtc{ +You can also use \axiomFun{map}. This expression +applies the \axiomFun{factor} operation +to the numerator and denominator. +}{ +\spadpaste{map(factor,(x**2-4)/(y**2-4))} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemSymRootTitle}{Manipulating Symbolic Roots of a Polynomial} +\newcommand{\ugProblemSymRootNumber}{8.3.} + +@ +\section{Manipulating Symbolic Roots of a Polynomial} +\label{ugProblemSymRootPage} +\begin{itemize} +\item ugxProblemOnePolPage \ref{ugxProblemOnePolPage} on +page~\pageref{ugxProblemOnePolPage} +\item ugxProblemPolSysPage \ref{ugxProblemPolSysPage} on +page~\pageref{ugxProblemPolSysPage} +\item ugxProblemSymRootOnePage \ref{ugxProblemSymRootOnePage} on +page~\pageref{ugxProblemSymRootOnePage} +\item ugxProblemSymRootAllPage \ref{ugxProblemSymRootAllPage} on +page~\pageref{ugxProblemSymRootAllPage} +\end{itemize} +\index{pages!ugProblemSymRootPage!ug08.ht} +\index{ug08.ht!pages!ugProblemSymRootPage} +\index{ugProblemSymRootPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemSymRootPage} +{8.3. Manipulating Symbolic Roots of a Polynomial} +\beginscroll +% +In this section we show you how to work with one root or all roots +of a polynomial. +These roots are represented symbolically (as opposed to being +numeric approximations). +See \downlink{``\ugxProblemOnePolTitle''}{ugxProblemOnePolPage} +in Section \ugxProblemOnePolNumber\ignore{ugxProblemOnePol} and +\downlink{``\ugxProblemPolSysTitle''}{ugxProblemPolSysPage} in +Section \ugxProblemPolSysNumber\ignore{ugxProblemPolSys} for +information about solving for the roots of one or more +polynomials. + +\beginmenu + \menudownlink{{8.3.1. Using a Single Root of a Polynomial}} +{ugxProblemSymRootOnePage} + \menudownlink{{8.3.2. Using All Roots of a Polynomial}} +{ugxProblemSymRootAllPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemSymRootOneTitle}{Using a Single Root of a Polynomial} +\newcommand{\ugxProblemSymRootOneNumber}{8.3.1.} + +@ +\section{Using a Single Root of a Polynomial} +\label{ugxProblemSymRootOnePage} +\index{pages!ugxProblemSymRootOnePage!ug08.ht} +\index{ug08.ht!pages!ugxProblemSymRootOnePage} +\index{ugxProblemSymRootOnePage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemSymRootOnePage}{8.3.1. Using a Single Root of a Polynomial} +\beginscroll + +Use \axiomFun{rootOf} to get a symbolic root of a polynomial: +\axiom{rootOf(p, x)} returns a root of \axiom{p(x)}. + +\labelSpace{2pc} +\xtc{ +This creates an algebraic number \axiom{a}. +}{ +\spadpaste{a := rootOf(a**4+1,a) \bound{a}} +} +\xtc{ +To find the algebraic relation that defines \axiom{a}, +use \axiomFun{definingPolynomial}. +}{ +\spadpaste{definingPolynomial a \free{a}} +} +\xtc{ +You can use \axiom{a} in any further expression, +including a nested \axiomFun{rootOf}. +}{ +\spadpaste{b := rootOf(b**2-a-1,b) \free{a}\bound{b}} +} +\xtc{ +Higher powers of the roots are automatically reduced during +calculations. +}{ +\spadpaste{a + b \free{a b}\bound{c}} +} +\xtc{ +}{ +\spadpaste{\% ** 5 \free{c}} +} +\xtc{ +The operation \axiomFun{zeroOf} is similar to \axiomFun{rootOf}, +except that it may express the root using radicals in some cases. +}{ +\spadpaste{rootOf(c**2+c+1,c)} +} +\xtc{ +}{ +\spadpaste{zeroOf(d**2+d+1,d)} +} +\xtc{ +}{ +\spadpaste{rootOf(e**5-2,e)} +} +\xtc{ +}{ +\spadpaste{zeroOf(f**5-2,f)} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemSymRootAllTitle}{Using All Roots of a Polynomial} +\newcommand{\ugxProblemSymRootAllNumber}{8.3.2.} + +@ +\section{Using All Roots of a Polynomial} +\label{ugxProblemSymRootAllPage} +\begin{itemize} +\item ugxProblemOnePolPage \ref{ugxProblemOnePolPage} on +page~\pageref{ugxProblemOnePolPage} +\end{itemize} +\index{pages!ugxProblemSymRootAllPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemSymRootAllPage} +\index{ugxProblemSymRootAllPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemSymRootAllPage}{8.3.2. Using All Roots of a Polynomial} +\beginscroll + +Use \axiomFun{rootsOf} to get all symbolic roots of a polynomial: +\axiom{rootsOf(p, x)} returns a +list of all the roots of \axiom{p(x)}. +If \axiom{p(x)} has a multiple root of order \axiom{n}, then that root +appears \axiom{n} times in the list. +\texht{\typeout{Make sure these variables are x0 etc}}{} + +\xtc{ +Compute all the roots of \axiom{x**4 + 1}. +}{ +\spadpaste{l := rootsOf(x**4+1,x) \bound{l}} +} +\xtc{ +As a side effect, the variables \axiom{\%x0, \%x1} and \axiom{\%x2} are bound +to the first three roots of \axiom{x**4+1}. +}{ +\spadpaste{\%x0**5 \free{l}} +} +\xtc{ +Although they all satisfy \axiom{x**4 + 1 = 0, \%x0, \%x1,} +and \axiom{\%x2} are different algebraic numbers. +To find the algebraic relation that defines each of them, +use \axiomFun{definingPolynomial}. +}{ +\spadpaste{definingPolynomial \%x0 \free{l}} +} +\xtc{ +}{ +\spadpaste{definingPolynomial \%x1 \free{l}} +} +\xtc{ +}{ +\spadpaste{definingPolynomial \%x2 \free{l}} +} +\xtc{ +We can check that the sum and product of the roots of \axiom{x**4+1} are +its trace and norm. +}{ +\spadpaste{x3 := last l \free{l} \bound{x3}} +} +\xtc{ +}{ +\spadpaste{\%x0 + \%x1 + \%x2 + x3 \free{x3}} +} +\xtc{ +}{ +\spadpaste{\%x0 * \%x1 * \%x2 * x3 \free{x3}} +} +\xtc{ +Corresponding to the pair of operations +\axiomFun{rootOf}/\axiomFun{zeroOf} in +\downlink{``\ugxProblemOnePolTitle''}{ugxProblemOnePolPage} in +Section \ugxProblemOnePolNumber\ignore{ugxProblemOnePol}, there is +an operation \axiomFun{zerosOf} that, like \axiomFun{rootsOf}, +computes all the roots +of a given polynomial, but which expresses some of them in terms of +radicals. +}{ +\spadpaste{zerosOf(y**4+1,y) \bound{z}} +} +\xtc{ +As you see, only one implicit algebraic number was created +(\axiom{\%y1}), and its defining equation is this. +The other three roots are expressed in radicals. +}{ +\spadpaste{definingPolynomial \%y1 \free{z}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemEigenTitle}{Computation of Eigenvalues and Eigenvectors} +\newcommand{\ugProblemEigenNumber}{8.4.} + +@ +\section{Computation of Eigenvalues and Eigenvectors} +\label{ugProblemEigenPage} +\index{pages!ugProblemEigenPage!ug08.ht} +\index{ug08.ht!pages!ugProblemEigenPage} +\index{ugProblemEigenPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemEigenPage} +{8.4. Computation of Eigenvalues and Eigenvectors} +\beginscroll +% +In this section we show you +some of Axiom's facilities for computing and +manipulating eigenvalues and eigenvectors, also called +characteristic values and characteristic vectors, +respectively. + +\texht{\vskip 4pc}{} + +\xtc{ +Let's first create a matrix with integer entries. +}{ +\spadpaste{m1 := matrix [[1,2,1],[2,1,-2],[1,-2,4]] \bound{m1}} +} +\xtc{ +To get a list of the {\it rational} eigenvalues, +use the operation \axiomFun{eigenvalues}. +}{ +\spadpaste{leig := eigenvalues(m1) \free{m1} \bound{leig}} +} +\xtc{ +Given an explicit eigenvalue, \axiomFun{eigenvector} computes the eigenvectors +corresponding to it. +}{ +\spadpaste{eigenvector(first(leig),m1) \free{m1 leig}} +} + +The operation \axiomFun{eigenvectors} returns a list of pairs of values and +vectors. When an eigenvalue is rational, Axiom gives you +the value explicitly; otherwise, its minimal polynomial is given, +(the polynomial of lowest degree with the eigenvalues as roots), +together with a parametric representation of the eigenvector using the +eigenvalue. +This means that if you ask Axiom to \axiomFun{solve} +the minimal polynomial, then you can substitute these roots +into the parametric form of the corresponding eigenvectors. + +\xtc{ +You must be aware that unless an exact eigenvalue has been computed, +the eigenvector may be badly in error. +}{ +\spadpaste{eigenvectors(m1) \free{m1}} +} +\xtc{ +Another possibility is to use the operation +\axiomFun{radicalEigenvectors} +tries to compute explicitly the eigenvectors +in terms of radicals. +}{ +\spadpaste{radicalEigenvectors(m1) \free{m1}} +} + +Alternatively, Axiom can compute real or complex approximations to the +eigenvectors and eigenvalues using the operations \axiomFun{realEigenvectors} +or \axiomFun{complexEigenvectors}. +They each take an additional argument \texht{$\epsilon$}{\axiom{epsilon}} +to specify the ``precision'' required. +In the real case, this means that each approximation will be within +\texht{$\pm\epsilon$}{plus or minus \axiom{epsilon}} of the actual +result. +In the complex case, this means that each approximation will be within +\texht{$\pm\epsilon$}{plus or minus \axiom{epsilon}} of the actual result +in each of the real and imaginary parts. + +\xtc{ +The precision can be specified as a \axiomType{Float} if the results are +desired in floating-point notation, or as \axiomType{Fraction Integer} if the +results are to be expressed using rational (or complex rational) numbers. +}{ +\spadpaste{realEigenvectors(m1,1/1000) \free{m1}} +} +\xtc{ +If an \axiom{n} by \axiom{n} matrix has \axiom{n} distinct eigenvalues (and +therefore \axiom{n} eigenvectors) the operation \axiomFun{eigenMatrix} +gives you a matrix of the eigenvectors. +}{ +\spadpaste{eigenMatrix(m1) \free{m1}} +} +\xtc{ +}{ +\spadpaste{m2 := matrix [[-5,-2],[18,7]] \bound{m2}} +} +\xtc{ +}{ +\spadpaste{eigenMatrix(m2) \free{m2}} +} +% +% +\xtc{ +If a symmetric matrix +has a basis of orthonormal eigenvectors, then +\axiomFun{orthonormalBasis} computes a list of these vectors. +}{ +\spadpaste{m3 := matrix [[1,2],[2,1]] \bound{m3}} +} +\xtc{ +}{ +\spadpaste{orthonormalBasis(m3) \free{m3}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemLinPolEqnTitle}{Solution of Linear and Polynomial Equations} +\newcommand{\ugProblemLinPolEqnNumber}{8.5.} + +@ +\section{Solution of Linear and Polynomial Equations} +\label{ugProblemLinPolEqnPage} +\begin{itemize} +\item ugProblemDEQPage \ref{ugProblemDEQPage} on +page~\pageref{ugProblemDEQPage} +\item ugxProblemLinSysPage \ref{ugxProblemLinSysPage} on +page~\pageref{ugxProblemLinSysPage} +\item ugxProblemOnePolPage \ref{ugxProblemOnePolPage} on +page~\pageref{ugxProblemOnePolPage} +\item ugxProblemPolSysPage \ref{ugxProblemPolSysPage} on +page~\pageref{ugxProblemPolSysPage} +\end{itemize} +\index{pages!ugProblemLinPolEqnPage!ug08.ht} +\index{ug08.ht!pages!ugProblemLinPolEqnPage} +\index{ugProblemLinPolEqnPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemLinPolEqnPage} +{8.5. Solution of Linear and Polynomial Equations} +\beginscroll +% +In this section we discuss the Axiom facilities for solving +systems of linear equations, finding the roots of polynomials and +solving systems of polynomial equations. +For a discussion of the solution of differential equations, see +\downlink{``\ugProblemDEQTitle''}{ugProblemDEQPage} in +Section \ugProblemDEQNumber\ignore{ugProblemDEQ}. + +\beginmenu + \menudownlink{{8.5.1. Solution of Systems of Linear Equations}} +{ugxProblemLinSysPage} + \menudownlink{{8.5.2. Solution of a Single Polynomial Equation}} +{ugxProblemOnePolPage} + \menudownlink{{8.5.3. Solution of Systems of Polynomial Equations}} +{ugxProblemPolSysPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemLinSysTitle}{Solution of Systems of Linear Equations} +\newcommand{\ugxProblemLinSysNumber}{8.5.1.} + +@ +\section{Solution of Systems of Linear Equations} +\label{ugxProblemLinSysPage} +\index{pages!ugxProblemLinSysPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemLinSysPage} +\index{ugxProblemLinSysPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemLinSysPage}{8.5.1. Solution of Systems of Linear Equations} +\beginscroll + +You can use the operation \axiomFun{solve} to solve systems of linear equations. + +The operation \axiomFun{solve} takes two arguments, the list of equations and the +list of the unknowns to be solved for. +A system of linear equations need not have a unique solution. + +\xtc{ +To solve the linear system: +\centerline{{\axiom{ x + y + z = 8} }} +\centerline{{\axiom{3*x - 2*y + z = 0} }} +\centerline{{\axiom{ x + 2*y + 2*z = 17}}} +evaluate this expression. +}{ +\spadpaste{solve([x+y+z=8,3*x-2*y+z=0,x+2*y+2*z=17],[x,y,z])} +} + +Parameters are given as new variables starting with a percent sign and +\spadSyntax{\%} and +the variables are expressed in terms of the parameters. +If the system has no solutions then the empty list is returned. + +\xtc{ +When you solve the linear system +\centerline{{\axiom{ x + 2*y + 3*z = 2} }} +\centerline{{\axiom{2*x + 3*y + 4*z = 2} }} +\centerline{{\axiom{3*x + 4*y + 5*z = 2}}} +with this expression +you get a solution involving a parameter. +}{ +\spadpaste{solve([x+2*y+3*z=2,2*x+3*y+4*z=2,3*x+4*y+5*z=2],[x,y,z])} +} + +The system can also be presented as a matrix and a vector. +The matrix contains the coefficients of the linear equations and +the vector contains the numbers appearing on the right-hand sides +of the equations. +You may input the matrix as a list of rows and the vector as a +list of its elements. + +\xtc{ +To solve the system: +\centerline{{\axiom{ x + y + z = 8} }} +\centerline{{\axiom{3*x - 2*y + z = 0} }} +\centerline{{\axiom{ x + 2*y + 2*z = 17}}} +in matrix form you would evaluate this expression. +}{ +\spadpaste{solve([[1,1,1],[3,-2,1],[1,2,2]],[8,0,17])} +} + +The solutions are presented as a \pspadtype{Record} with two +components: the component \texht{{\it particular}}{{\tt +particular}} contains a particular solution of the given system or +the item {\tt "failed"} if there are no solutions, the component +\texht{{\it basis}}{{\tt basis}} contains a list of vectors that +are a basis for the space of solutions of the corresponding +homogeneous system. +If the system of linear equations does not have a unique solution, +then the \texht{{\it basis}}{{\tt basis}} component contains +non-trivial vectors. + +\xtc{ +This happens when you solve the linear system +\centerline{{\axiom{ x + 2*y + 3*z = 2} }} +\centerline{{\axiom{2*x + 3*y + 4*z = 2} }} +\centerline{{\axiom{3*x + 4*y + 5*z = 2}}} +with this command. +}{ +\spadpaste{solve([[1,2,3],[2,3,4],[3,4,5]],[2,2,2])} +} + +All solutions of this system are obtained by adding the particular +solution with a linear combination of the \texht{{\it basis}}{{\tt +basis}} vectors. + +When no solution exists then {\tt "failed"} is returned as the +\texht{{\it particular}}{{\tt particular}} component, as follows: + +\xtc{ +}{ +\spadpaste{solve([[1,2,3],[2,3,4],[3,4,5]],[2,3,2])} +} + +When you want to solve a system of homogeneous equations (that is, +a system where the numbers on the right-hand sides of the +equations are all zero) in the matrix form you can omit the second +argument and use the \axiomFun{nullSpace} operation. + +\xtc{ +This computes the solutions of the following system of equations: +\centerline{{\axiom{ x + 2*y + 3*z = 0} }} +\centerline{{\axiom{2*x + 3*y + 4*z = 0} }} +\centerline{{\axiom{3*x + 4*y + 5*z = 0}}} +The result is given as a list of vectors and +these vectors form a basis for the solution space. +}{ +\spadpaste{nullSpace([[1,2,3],[2,3,4],[3,4,5]])} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemOnePolTitle}{Solution of a Single Polynomial Equation} +\newcommand{\ugxProblemOnePolNumber}{8.5.2.} + +@ +\section{Solution of a Single Polynomial Equation} +\label{ugxProblemOnePolPage} +\index{pages!ugxProblemOnePolPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemOnePolPage} +\index{ugxProblemOnePolPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemOnePolPage}{8.5.2. Solution of a Single Polynomial Equation} +\beginscroll + +Axiom can solve polynomial equations producing either approximate +or exact solutions. +Exact solutions are either members of the ground +field or can be presented symbolically as roots of irreducible polynomials. + +\xtc{ +This returns the one rational root along with an irreducible +polynomial describing the other solutions. +}{ +\spadpaste{solve(x**3 = 8,x)} +} +\xtc{ +If you want solutions expressed in terms of radicals you would use this +instead. +}{ +\spadpaste{radicalSolve(x**3 = 8,x)} +} + +The \axiomFun{solve} command always returns a value but +\axiomFun{radicalSolve} returns only the solutions that it is +able to express in terms of radicals. + +If the polynomial equation has rational coefficients +you can ask for approximations to its real roots by calling +solve with a second argument that specifies the ``precision'' +\texht{$\epsilon$}{\axiom{epsilon}}. +This means that each approximation will be within +\texht{$\pm\epsilon$}{plus or minus \axiom{epsilon}} of the actual +result. + +\xtc{ +Notice that the type of second argument controls the type of the result. +}{ +\spadpaste{solve(x**4 - 10*x**3 + 35*x**2 - 50*x + 25,.0001)} +} +\xtc{ +If you give a floating-point precision you get a floating-point result; +if you give the precision as a rational number you get a rational result. +}{ +\spadpaste{solve(x**3-2,1/1000)} +} +\xtc{ +If you want approximate complex results you should use the +command \axiomFun{complexSolve} that takes the same precision argument +\texht{$\epsilon$}{\axiom{epsilon}}. +}{ +\spadpaste{complexSolve(x**3-2,.0001)} +} +\xtc{ +Each approximation will be within +\texht{$\pm\epsilon$}{plus or minus \axiom{epsilon}} of the actual result +in each of the real and imaginary parts. +}{ +\spadpaste{complexSolve(x**2-2*\%i+1,1/100)} +} + +Note that if you omit the \axiomOp{=} from the first argument +Axiom generates an equation by equating the first argument to zero. +Also, when only one variable is present in the equation, you +do not need to specify the variable to be solved for, that is, +you can omit the second argument. + +\xtc{ +Axiom can also solve equations involving rational functions. +Solutions where the denominator vanishes are discarded. +}{ +\spadpaste{radicalSolve(1/x**3 + 1/x**2 + 1/x = 0,x)} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemPolSysTitle}{Solution of Systems of Polynomial Equations} +\newcommand{\ugxProblemPolSysNumber}{8.5.3.} + +@ +\section{Solution of Systems of Polynomial Equations} +\label{ugxProblemPolSysPage} +\begin{itemize} +\item ugxProblemOnePolPage \ref{ugxProblemOnePolPage} on +page~\pageref{ugxProblemOnePolPage} +\end{itemize} +\index{pages!ugxProblemPolSysPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemPolSysPage} +\index{ugxProblemPolSysPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemPolSysPage} +{8.5.3. Solution of Systems of Polynomial Equations} +\beginscroll + +Given a system of equations of rational functions with exact coefficients: +\centerline{{\axiom{p1(x1,...,xn)} }} +\centerline{{\axiom{.} }} +\centerline{{\axiom{.} }} +\centerline{{\axiom{.} }} +\centerline{{\axiom{pm(x1,...,xn)}}} +Axiom can find +numeric or symbolic solutions. +The system is first split into irreducible components, then for +each component, a triangular system of equations is found that reduces +the problem to sequential solution of univariate polynomials resulting +from substitution of partial solutions from the previous stage. +\centerline{{\axiom{q1(x1,...,xn)} }} +\centerline{{\axiom{.} }} +\centerline{{\axiom{.} }} +\centerline{{\axiom{.} }} +\centerline{{\axiom{qm(xn)}}} + +Symbolic solutions can be presented using ``implicit'' algebraic numbers +defined as roots of irreducible polynomials or in terms of radicals. +Axiom can also find approximations to the real or complex roots +of a system of polynomial equations to any user-specified accuracy. + +The operation \axiomFun{solve} for systems is used in a way similar +to \axiomFun{solve} for single equations. +Instead of a polynomial equation, one has to give a list of +equations and instead of a single variable to solve for, a list of +variables. +For solutions of single equations see +\downlink{``\ugxProblemOnePolTitle''}{ugxProblemOnePolPage} in +Section \ugxProblemOnePolNumber\ignore{ugxProblemOnePol}. + +% +\xtc{ +Use the operation \axiomFun{solve} if you want implicitly presented +solutions. +}{ +\spadpaste{solve([3*x**3 + y + 1,y**2 -4],[x,y])} +} +\xtc{ +}{ +\spadpaste{solve([x = y**2-19,y = z**2+x+3,z = 3*x],[x,y,z])} +} +\xtc{ +Use \axiomFun{radicalSolve} if you want your solutions expressed +in terms of radicals. +}{ +\spadpaste{radicalSolve([3*x**3 + y + 1,y**2 -4],[x,y])} +} + +To get numeric solutions you only need to give the list of +equations and the precision desired. +The list of variables would be redundant information since there +can be no parameters for the numerical solver. + +\xtc{ +If the precision is expressed as a floating-point number you get +results expressed as floats. +}{ +\spadpaste{solve([x**2*y - 1,x*y**2 - 2],.01)} +} +\xtc{ +To get complex numeric solutions, use the operation \axiomFun{complexSolve}, +which takes the same arguments as in the real case. +}{ +\spadpaste{complexSolve([x**2*y - 1,x*y**2 - 2],1/1000)} +} +\xtc{ +It is also possible to solve systems of equations in rational functions +over the rational numbers. +Note that \axiom{[x = 0.0, a = 0.0]} is not returned as a solution since +the denominator vanishes there. +}{ +\spadpaste{solve([x**2/a = a,a = a*x],.001)} +} +\xtc{ +When solving equations with +denominators, all solutions where the denominator vanishes are +discarded. +}{ +\spadpaste{radicalSolve([x**2/a + a + y**3 - 1,a*y + a + 1],[x,y])} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemLimitsTitle}{Limits} +\newcommand{\ugProblemLimitsNumber}{8.6.} + +@ +\section{Limits} +\label{ugProblemLimitsPage} +\index{pages!ugProblemLimitsPage!ug08.ht} +\index{ug08.ht!pages!ugProblemLimitsPage} +\index{ugProblemLimitsPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemLimitsPage}{8.6. Limits} +\beginscroll +% +To compute a limit, you must specify a functional expression, +a variable, and a limiting value for that variable. +If you do not specify a direction, Axiom attempts to +compute a two-sided limit. + +\xtc{ +Issue this to compute the limit +\texht{$$\lim_{x \rightarrow 1}{{\displaystyle x^2 - 3x + +2}\over{\displaystyle x^2 - 1}}.$$}{ +of \axiom{(x**2 - 3*x + 2)/(x**2 - 1)} as \axiom{x} approaches \axiom{1}.} +}{ +\spadpaste{limit((x**2 - 3*x + 2)/(x**2 - 1),x = 1)} +} + +Sometimes the limit when approached from the left is different from the +limit from the right and, in this case, you may wish to ask for a +one-sided limit. +Also, +if you have a function that is only defined on one side of a particular value, +you can compute a one-sided limit. + +\xtc{ +The function \axiom{log(x)} is only defined to the right of zero, +that is, for \axiom{x > 0}. +Thus, when computing limits of functions involving \axiom{log(x)}, +you probably want a ``right-hand'' limit. +}{ +\spadpaste{limit(x * log(x),x = 0,"right")} +} +\xtc{ +When you do not specify \axiom{"right"} or \axiom{"left"} as the +optional fourth argument, \axiomFun{limit} tries to compute a +two-sided limit. +Here the limit from the left does not exist, as Axiom +indicates when you try to take a two-sided limit. +}{ +\spadpaste{limit(x * log(x),x = 0)} +} + +A function can be defined on both sides of a particular value, but +tend to different limits as its variable approaches that value from the +left and from the right. +We can construct an example of this as follows: +Since +\texht{$\sqrt{y^2}$}{\axiom{sqrt(y**2)}} +is simply the absolute value of \axiom{y}, +the function +\texht{$\sqrt{y^2} / y$}{\axiom{sqrt(y**2) / y}} +is simply the sign (\axiom{+1} or \axiom{-1}) of the nonzero +real number \axiom{y}. +Therefore, +\texht{$\sqrt{y^2} / y = -1$}{\axiom{sqrt(y**2) / y = -1}} +for \axiom{y < 0} and +\texht{$\sqrt{y^2} / y = +1$}{\axiom{sqrt(y**2) / y = +1}} +for \axiom{y > 0}. +\xtc{ +This is what happens when we take the limit at \axiom{y = 0}. +The answer returned by Axiom gives both a +``left-hand'' and a ``right-hand'' limit. +}{ +\spadpaste{limit(sqrt(y**2)/y,y = 0)} +} +\xtc{ +Here is another example, this time using a more complicated function. +}{ +\spadpaste{limit(sqrt(1 - cos(t))/t,t = 0)} +} + +You can compute limits at infinity by passing either +\texht{$+\infty$ or $-\infty$}{``plus infinity'' or ``minus infinity''} +as the third argument of \axiomFun{limit}. +\xtc{ +To do this, use the constants \axiom{\%plusInfinity} and \axiom{\%minusInfinity}. +}{ +\spadpaste{limit(sqrt(3*x**2 + 1)/(5*x),x = \%plusInfinity)} +} +\xtc{ +}{ +\spadpaste{limit(sqrt(3*x**2 + 1)/(5*x),x = \%minusInfinity)} +} + +\xtc{ +You can take limits of functions with parameters. +As you can see, the limit is expressed in terms of the parameters. +}{ +\spadpaste{limit(sinh(a*x)/tan(b*x),x = 0)} +} + +When you use \axiomFun{limit}, you are taking the limit of a real +function of a real variable. +\xtc{ +When you compute this, +Axiom returns \axiom{0} because, as a function of a real variable, +\axiom{sin(1/z)} is always between \axiom{-1} and \axiom{1}, so \axiom{z * sin(1/z)} +tends to \axiom{0} as \axiom{z} tends to \axiom{0}. +}{ +\spadpaste{limit(z * sin(1/z),z = 0)} +} +However, as a function of a {\it complex} variable, \axiom{sin(1/z)} is badly +behaved near \axiom{0} (one says that \axiom{sin(1/z)} has an +{\it essential singularity} at \axiom{z = 0}). +\xtc{ +When viewed as a function of a complex variable, \axiom{z * sin(1/z)} +does not approach any limit as \axiom{z} tends to \axiom{0} in the complex plane. +Axiom indicates this when we call \axiomFun{complexLimit}. +}{ +\spadpaste{complexLimit(z * sin(1/z),z = 0)} +} + +%% This is used in chapter 1 + +You can also take complex limits at infinity, that is, limits of a function of +\axiom{z} as \axiom{z} approaches infinity on the Riemann sphere. +Use the symbol \axiom{\%infinity} to denote ``complex infinity.'' +\xtc{ +As above, to compute complex limits rather than real limits, use +\axiomFun{complexLimit}. +}{ +\spadpaste{complexLimit((2 + z)/(1 - z),z = \%infinity)} +} +\xtc{ +In many cases, a limit of a real function of a real variable +exists when the corresponding complex limit does not. +This limit exists. +}{ +\spadpaste{limit(sin(x)/x,x = \%plusInfinity)} +} +\xtc{ +But this limit does not. +}{ +\spadpaste{complexLimit(sin(x)/x,x = \%infinity)} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemLaplaceTitle}{Laplace Transforms} +\newcommand{\ugProblemLaplaceNumber}{8.7.} + +@ +\section{Laplace Transforms} +\label{ugProblemLaplacePage} +\index{pages!ugProblemLaplacePage!ug08.ht} +\index{ug08.ht!pages!ugProblemLaplacePage} +\index{ugProblemLaplacePage!ug08.ht!pages} +<>= +\begin{page}{ugProblemLaplacePage}{8.7. Laplace Transforms} +\beginscroll +% +Axiom can compute some forward Laplace transforms, mostly +of elementary +functions +not involving logarithms, although some cases of +special functions are handled. +\xtc{ +To compute the forward Laplace transform of \axiom{F(t)} with respect to +\axiom{t} and express the result as \axiom{f(s)}, issue the command +\axiom{laplace(F(t), t, s)}. +}{ +\spadpaste{laplace(sin(a*t)*cosh(a*t)-cos(a*t)*sinh(a*t), t, s)} +} +\xtc{ +Here are some other non-trivial examples. +}{ +\spadpaste{laplace((exp(a*t) - exp(b*t))/t, t, s)} +} +\xtc{ +}{ +\spadpaste{laplace(2/t * (1 - cos(a*t)), t, s)} +} +\xtc{ +}{ +\spadpaste{laplace(exp(-a*t) * sin(b*t) / b**2, t, s)} +} +\xtc{ +}{ +\spadpaste{laplace((cos(a*t) - cos(b*t))/t, t, s)} +} +\xtc{ +Axiom also knows about a few special functions. +}{ +\spadpaste{laplace(exp(a*t+b)*Ei(c*t), t, s)} +} +\xtc{ +}{ +\spadpaste{laplace(a*Ci(b*t) + c*Si(d*t), t, s)} +} +\xtc{ +When Axiom does not know about a particular transform, +it keeps it as a formal transform in the answer. +}{ +\spadpaste{laplace(sin(a*t) - a*t*cos(a*t) + exp(t**2), t, s)} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemIntegrationTitle}{Integration} +\newcommand{\ugProblemIntegrationNumber}{8.8.} + +@ +\section{Integration} +\label{ugProblemIntegrationPage} +\begin{itemize} +\item ugxProblemSymRootAllPage \ref{ugxProblemSymRootAllPage} on +page~\pageref{ugxProblemSymRootAllPage} +\end{itemize} +\index{pages!ugProblemIntegrationPage!ug08.ht} +\index{ug08.ht!pages!ugProblemIntegrationPage} +\index{ugProblemIntegrationPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemIntegrationPage}{8.8. Integration} +\beginscroll +% +Integration is the reverse process of differentiation, that is, +an {\it integral} of a function \axiom{f} with respect to a variable +\axiom{x} is any function \axiom{g} such that \axiom{D(g,x)} +is equal to \axiom{f}. +\xtc{ +The package \axiomType{FunctionSpaceIntegration} provides the top-level +integration operation, \axiomFunFrom{integrate}{FunctionSpaceIntegration}, +for integrating real-valued elementary functions. +}{ +\spadpaste{integrate(cosh(a*x)*sinh(a*x), x)} +} +\xtc{ +Unfortunately, antiderivatives of most functions cannot be expressed in +terms of elementary functions. +}{ +\spadpaste{integrate(log(1 + sqrt(a * x + b)) / x, x)} +} +Given an elementary function to integrate, Axiom returns a formal +integral as above only when it can prove that the integral is not +elementary and not when it cannot determine the integral. +In this rare case it prints a message that it cannot +determine if an elementary integral exists. +% +\xtc{ +Similar functions may have antiderivatives +that look quite different because the form of the antiderivative +depends on the sign of a constant that appears in the function. +}{ +\spadpaste{integrate(1/(x**2 - 2),x)} +} +\xtc{ +}{ +\spadpaste{integrate(1/(x**2 + 2),x)} +} +% +If the integrand contains parameters, then there may be several possible +antiderivatives, depending on the signs of expressions of the parameters. +\xtc{ +In this case Axiom returns a list of answers that cover all +the possible cases. +Here you +use the answer involving the square root of \axiom{a} when \axiom{a > 0} and +the answer involving the square root of \axiom{-a} when \axiom{a < 0}. +}{ +\spadpaste{integrate(x**2 / (x**4 - a**2), x)} +} + +If the parameters and the variables of integration can be complex +numbers rather than real, then the notion of sign is not defined. +In this case all the possible answers can be expressed as one +complex function. +To get that function, rather than a list of real functions, use +\axiomFunFrom{complexIntegrate}{FunctionSpaceComplexIntegration}, +which is provided by the package +\axiomType{FunctionSpaceComplexIntegration}. + +\xtc{ +This operation is used for +integrating complex-valued elementary functions. +}{ +\spadpaste{complexIntegrate(x**2 / (x**4 - a**2), x)} +} +\xtc{ +As with the real case, +antiderivatives for most complex-valued functions cannot be expressed +in terms of elementary functions. +}{ +\spadpaste{complexIntegrate(log(1 + sqrt(a * x + b)) / x, x)} +} + +Sometimes \axiomFun{integrate} can involve symbolic algebraic numbers +such as those returned by \axiomFunFrom{rootOf}{Expression}. +To see how to work with these strange generated symbols (such as +\axiom{\%\%a0}), see +\downlink{``\ugxProblemSymRootAllTitle''}{ugxProblemSymRootAllPage} +in Section \ugxProblemSymRootAllNumber\ignore{ugxProblemSymRootAll}. + +Definite integration is the process of computing the area between +the \axiom{x}-axis and the curve of a function \axiom{f(x)}. +The fundamental theorem of calculus states that if \axiom{f} is +continuous on an interval \axiom{a..b} and if there exists a function \axiom{g} +that is differentiable on \axiom{a..b} and such that \axiom{D(g, x)} +is equal to \axiom{f}, then the definite integral of \axiom{f} +for \axiom{x} in the interval \axiom{a..b} is equal to \axiom{g(b) - g(a)}. + +\xtc{ +The package \axiomType{RationalFunctionDefiniteIntegration} provides +the top-level definite integration operation, +\axiomFunFrom{integrate}{RationalFunctionDefiniteIntegration}, +for integrating real-valued rational functions. +}{ +\spadpaste{integrate((x**4 - 3*x**2 + 6)/(x**6-5*x**4+5*x**2+4), x = 1..2)} +} +Axiom checks beforehand that the function you are integrating is +defined on the interval \axiom{a..b}, and prints an error message if it +finds that this is not case, as in the following example: +\begin{verbatim} +integrate(1/(x**2-2), x = 1..2) + + >> Error detected within library code: + Pole in path of integration + You are being returned to the top level + of the interpreter. +\end{verbatim} +When parameters are present in the function, the function may or may not be +defined on the interval of integration. + +\xtc{ +If this is the case, Axiom issues a warning that a pole might +lie in the path of integration, and does not compute the integral. +}{ +\spadpaste{integrate(1/(x**2-a), x = 1..2)} +} + +If you know that you are using values of the parameter for which +the function has no pole in the interval of integration, use the +string {\tt "noPole"} as a third argument to +\axiomFunFrom{integrate}{RationalFunctionDefiniteIntegration}: + +% +\xtc{ +The value here is, of course, incorrect if \axiom{sqrt(a)} is between +\axiom{1} and \axiom{2.} +}{ +\spadpaste{integrate(1/(x**2-a), x = 1..2, "noPole")} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemSeriesTitle}{Working with Power Series} +\newcommand{\ugProblemSeriesNumber}{8.9.} + +@ +\section{Working with Power Series} +\label{ugProblemSeriesPage} +\begin{itemize} +\item ugxProblemDEQSeriesPage \ref{ugxProblemDEQSeriesPage} on +page~\pageref{ugxProblemDEQSeriesPage} +\item ugxProblemSeriesCreatePage \ref{ugxProblemSeriesCreatePage} on +page~\pageref{ugxProblemSeriesCreatePage} +\item ugxProblemSeriesCoefficientsPage \ref{ugxProblemSeriesCoefficientsPage} on +page~\pageref{ugxProblemSeriesCoefficientsPage} +\item ugxProblemSeriesArithmeticPage \ref{ugxProblemSeriesArithmeticPage} on +page~\pageref{ugxProblemSeriesArithmeticPage} +\item ugxProblemSeriesFunctionsPage \ref{ugxProblemSeriesFunctionsPage} on +page~\pageref{ugxProblemSeriesFunctionsPage} +\item ugxProblemSeriesConversionsPage \ref{ugxProblemSeriesConversionsPage} on +page~\pageref{ugxProblemSeriesConversionsPage} +\item ugxProblemSeriesFormulaPage \ref{ugxProblemSeriesFormulaPage} on +page~\pageref{ugxProblemSeriesFormulaPage} +\item ugxProblemSeriesSubstitutePage \ref{ugxProblemSeriesSubstitutePage} on +page~\pageref{ugxProblemSeriesSubstitutePage} +\item ugxProblemSeriesBernoulliPage \ref{ugxProblemSeriesBernoulliPage} on +page~\pageref{ugxProblemSeriesBernoulliPage} +\end{itemize} +\index{pages!ugProblemSeriesPage!ug08.ht} +\index{ug08.ht!pages!ugProblemSeriesPage} +\index{ugProblemSeriesPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemSeriesPage}{8.9. Working with Power Series} +\beginscroll +% +Axiom has very sophisticated facilities for working with power +series. +Infinite series are represented by a list of the +coefficients that have already been determined, together with a +function for computing the additional coefficients if needed. +% +The system command that determines how many terms of a series is displayed +is \spadcmd{)set streams calculate}. +For the purposes of this book, we have used this system command to display +fewer than ten terms. +Series can be created from expressions, from functions for the +series coefficients, and from applications of operations on +existing series. +The most general function for creating a series is called +\axiomFun{series}, although you can also use \axiomFun{taylor}, +\axiomFun{laurent} and \axiomFun{puiseux} in situations where you +know what kind of exponents are involved. + +For information about solving differential equations in terms of +power series, see +\downlink{``\ugxProblemDEQSeriesTitle''}{ugxProblemDEQSeriesPage} in +Section \ugxProblemDEQSeriesNumber\ignore{ugxProblemDEQSeries}. + +\beginmenu + \menudownlink{{8.9.1. Creation of Power Series}} +{ugxProblemSeriesCreatePage} + \menudownlink{{8.9.2. Coefficients of Power Series}} +{ugxProblemSeriesCoefficientsPage} + \menudownlink{{8.9.3. Power Series Arithmetic}} +{ugxProblemSeriesArithmeticPage} + \menudownlink{{8.9.4. Functions on Power Series}} +{ugxProblemSeriesFunctionsPage} + \menudownlink{{8.9.5. Converting to Power Series}} +{ugxProblemSeriesConversionsPage} + \menudownlink{{8.9.6. Power Series from Formulas}} +{ugxProblemSeriesFormulaPage} + \menudownlink{{8.9.7. Substituting Numerical Values in Power Series}} +{ugxProblemSeriesSubstitutePage} + \menudownlink{{8.9.8. Example: Bernoulli Polynomials and Sums of Powers}} +{ugxProblemSeriesBernoulliPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemSeriesCreateTitle}{Creation of Power Series} +\newcommand{\ugxProblemSeriesCreateNumber}{8.9.1.} + +@ +\section{Creation of Power Series} +\label{ugxProblemSeriesCreatePage} +\begin{itemize} +\item ugxProblemSeriesConversionsPage \ref{ugxProblemSeriesConversionsPage} on +page~\pageref{ugxProblemSeriesConversionsPage} +\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on +page~\pageref{ugTypesDeclarePage} +\item ugxProblemSeriesFunctionsPage \ref{ugxProblemSeriesFunctionsPage} on +page~\pageref{ugxProblemSeriesFunctionsPage} +\item ugxProblemSeriesFormulaPage \ref{ugxProblemSeriesFormulaPage} on +page~\pageref{ugxProblemSeriesFormulaPage} +\end{itemize} +\index{pages!ugxProblemSeriesCreatePage!ug08.ht} +\index{ug08.ht!pages!ugxProblemSeriesCreatePage} +\index{ugxProblemSeriesCreatePage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemSeriesCreatePage}{8.9.1. Creation of Power Series} +\beginscroll + +\labelSpace{4pc} +\xtc{ +This is the easiest way to create a power series. +This tells Axiom that \axiom{x} is to be treated as a power series, +so functions of \axiom{x} are again power series. +}{ +\spadpaste{x := series 'x \bound{x}} +} +% +We didn't say anything about the coefficients of the power +series, so the coefficients are general expressions over the integers. +This allows us to introduce denominators, symbolic constants, and other +variables as needed. +\xtc{ +Here the coefficients are integers (note that the coefficients +are the Fibonacci +numbers). +}{ +\spadpaste{1/(1 - x - x**2) \free{x}} +} +\xtc{ +This series has coefficients that are rational numbers. +}{ +\spadpaste{sin(x) \free{x}} +} +\xtc{ +When you enter this expression +you introduce the symbolic constants \axiom{sin(1)} and \axiom{cos(1).} +}{ +\spadpaste{sin(1 + x) \free{x}} +} +\xtc{ +When you enter the expression +the variable \axiom{a} appears in the resulting series expansion. +}{ +\spadpaste{sin(a * x) \free{x}} +} + +\xtc{ +You can also convert an expression into a series expansion. +This expression creates the series expansion of \axiom{1/log(y)} +about \axiom{y = 1}. +For details and more examples, see +\downlink{``\ugxProblemSeriesConversionsTitle''} +{ugxProblemSeriesConversionsPage} in Section +\ugxProblemSeriesConversionsNumber\ignore{ugxProblemSeriesConversions}. +}{ +\spadpaste{series(1/log(y),y = 1)} +} + +You can create power series with more general coefficients. +You normally accomplish this via a type declaration (see +\downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} in Section +\ugTypesDeclareNumber\ignore{ugTypesDeclare}). +See +\downlink{``\ugxProblemSeriesFunctionsTitle''}{ugxProblemSeriesFunctionsPage} +in Section \ugxProblemSeriesFunctionsNumber\ignore{ugxProblemSeriesFunctions} +for some warnings about working with declared series. + +\xtc{ +We declare that \axiom{y} is a one-variable Taylor series +(\axiomType{UTS} is the abbreviation for \axiomType{UnivariateTaylorSeries}) +in the variable \axiom{z} with \axiomType{FLOAT} +(that is, floating-point) coefficients, centered about \axiom{0.} +Then, by assignment, we obtain the Taylor expansion of +\axiom{exp(z)} with floating-point coefficients. +}{ +\spadpaste{y : UTS(FLOAT,'z,0) := exp(z) \bound{y}} +} + +You can also create a power series by giving an explicit formula +for its \eth{\axiom{n}} coefficient. +For details and more examples, see +\downlink{``\ugxProblemSeriesFormulaTitle''}{ugxProblemSeriesFormulaPage} +in Section \ugxProblemSeriesFormulaNumber\ignore{ugxProblemSeriesFormula}. + +\xtc{ +To create a series about +\axiom{w = 0} whose \eth{\axiom{n}} Taylor coefficient +is \axiom{1/n!}, you can evaluate this expression. +This is the Taylor expansion of \axiom{exp(w)} at \axiom{w = 0}. +}{ +\spadpaste{series(1/factorial(n),n,w = 0)} +} +% + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemSeriesCoefficientsTitle}{Coefficients of Power Series} +\newcommand{\ugxProblemSeriesCoefficientsNumber}{8.9.2.} + +@ +\section{Coefficients of Power Series} +\label{ugxProblemSeriesCoefficientsPage} +\index{pages!ugxProblemSeriesCoefficientsPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemSeriesCoefficientsPage} +\index{ugxProblemSeriesCoefficientsPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemSeriesCoefficientsPage}{8.9.2. Coefficients of Power Series} +\beginscroll + +You can extract any coefficient from a power series---even one +that hasn't been computed yet. +This is possible because in Axiom, infinite series are +represented by a list of the coefficients that have already been +determined, together with a function for computing the additional +coefficients. +(This is known as {\it lazy evaluation}.) When you ask for a +coefficient that hasn't yet been computed, Axiom computes +whatever additional coefficients it needs and then stores them in +the representation of the power series. + +\xtc{ +Here's an example of how to extract the coefficients of a power series. +}{ +\spadpaste{x := series(x) \bound{x}} +} +\xtc{ +}{ +\spadpaste{y := exp(x) * sin(x) \free{x} \bound{y}} +} +\xtc{ +This coefficient is readily available. +}{ +\spadpaste{coefficient(y,6) \free{y}} +} +\xtc{ +But let's get the fifteenth coefficient of \axiom{y}. +}{ +\spadpaste{coefficient(y,15) \free{y} \bound{y15}} +} +\xtc{ +If you look at \axiom{y} +then you see that the coefficients up to order \axiom{15} +have all been computed. +}{ +\spadpaste{y \free{y15}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemSeriesArithmeticTitle}{Power Series Arithmetic} +\newcommand{\ugxProblemSeriesArithmeticNumber}{8.9.3.} + +@ +\section{Power Series Arithmetic} +\label{ugxProblemSeriesArithmeticPage} +\index{pages!ugxProblemSeriesArithmeticPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemSeriesArithmeticPage} +\index{ugxProblemSeriesArithmeticPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemSeriesArithmeticPage}{8.9.3. Power Series Arithmetic} +\beginscroll + +You can manipulate power series using the usual arithmetic operations +\axiomOpFrom{+}{UnivariatePuiseuxSeries}, +\axiomOpFrom{-}{UnivariatePuiseuxSeries}, +\axiomOpFrom{*}{UnivariatePuiseuxSeries}, and +\axiomOpFrom{/}{UnivariatePuiseuxSeries}. +% + +\labelSpace{1pc} +\xtc{ +The results of these operations are also power series. +}{ +\spadpaste{x := series x \bound{x}} +} +\xtc{ +}{ +\spadpaste{(3 + x) / (1 + 7*x)} +} +\xtc{ +You can also compute \axiom{f(x) ** g(x)}, where \axiom{f(x)} and \axiom{g(x)} +are two power series. +}{ +\spadpaste{base := 1 / (1 - x) \free{x} \bound{base}} +} +% +\xtc{ +}{ +\spadpaste{expon := x * base \free{x base} \bound{expon}} +} +% +\xtc{ +}{ +\spadpaste{base ** expon \free{base expon}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemSeriesFunctionsTitle}{Functions on Power Series} +\newcommand{\ugxProblemSeriesFunctionsNumber}{8.9.4.} + +@ +\section{Functions on Power Series} +\label{ugxProblemSeriesFunctionsPage} +\index{pages!ugxProblemSeriesFunctionsPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemSeriesFunctionsPage} +\index{ugxProblemSeriesFunctionsPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemSeriesFunctionsPage}{8.9.4. Functions on Power Series} +\beginscroll + +Once you have created a power series, you can apply transcendental +functions +(for example, \axiomFun{exp}, \axiomFun{log}, \axiomFun{sin}, \axiomFun{tan}, +\axiomFun{cosh}, etc.) to it. + +\labelSpace{1pc} +% +\xtc{ +To demonstrate this, we first create the power series +expansion of the rational function +\texht{ +${\displaystyle x^2} \over {\displaystyle 1 - 6x + x^2}$ +}{ +\axiom{x**2/(1 - 6*x + x**2)} +} +about \axiom{x = 0}. +}{ +\spadpaste{x := series 'x \bound{x}} +} +% +\xtc{ +}{ +\spadpaste{rat := x**2 / (1 - 6*x + x**2) \free{x} \bound{rat}} +} +% +% +\xtc{ +If you want to compute the series expansion of +\texht{ +$\sin\left({\displaystyle x^2} \over {\displaystyle 1 - 6x + x^2}\right)$ +}{ +\axiom{sin(x**2/(1 - 6*x + x**2))} +} +you simply compute the sine of \axiom{rat}. +}{ +\spadpaste{sin(rat) \free{rat}} +} +% + +\beginImportant +\noindent {\bf Warning:} +the type of the coefficients of a power series may +affect the kind of computations that you can do with that series. +This can only happen when you have made a declaration to +specify a series domain with a certain type of coefficient. +\endImportant + +\xtc{ +If you evaluate +then you have declared that \axiom{y} is a one variable Taylor series +(\axiomType{UTS} is the abbreviation for \axiomType{UnivariateTaylorSeries}) +in the variable \axiom{y} with \axiomType{FRAC INT} +(that is, fractions of integer) coefficients, centered about \axiom{0}. +}{ +\spadpaste{y : UTS(FRAC INT,y,0) := y \bound{y}} +} +% +\xtc{ +You can now compute certain power series in \axiom{y}, +{\it provided} that these series have rational coefficients. +}{ +\spadpaste{exp(y) \free{y}} +} +% +\xtc{ +You can get examples of such series +by applying transcendental functions to +series in \axiom{y} that have no constant terms. +}{ +\spadpaste{tan(y**2) \free{y}} +} +% +\xtc{ +}{ +\spadpaste{cos(y + y**5) \free{y}} +} +% +% +\xtc{ +Similarly, you can compute the logarithm of a power series with rational +coefficients if the constant coefficient is \axiom{1.} +}{ +\spadpaste{log(1 + sin(y)) \free{y}} +} +% +If you wanted to apply, say, the operation \axiomFun{exp} to a power +series with a nonzero constant coefficient \texht{$a_0$}{\axiom{a0}}, +then the constant coefficient of the result would be +\texht{$e^{a_0}$}{\axiom{exp(a0)}}, which is {\it not} a rational number. +Therefore, evaluating \axiom{exp(2 + tan(y))} would generate an error +message. + +If you want to compute the Taylor expansion of \axiom{exp(2 + tan(y))}, you must +ensure that the coefficient domain has an operation \axiomFun{exp} defined +for it. +An example of such a domain is \axiomType{Expression Integer}, the type +of formal functional expressions over the integers. +% +\xtc{ +When working with coefficients of this type, +}{ +\spadpaste{z : UTS(EXPR INT,z,0) := z \bound{z}} +} +\xtc{ +this presents no problems. +}{ +\spadpaste{exp(2 + tan(z)) \free{z}} +} +% +Another way to create Taylor series whose coefficients are expressions over +the integers is to use \axiomFun{taylor} which works similarly to +\axiomFun{series}. +% +\xtc{ +This is equivalent to the previous computation, except that now we +are using the variable \axiom{w} instead of \axiom{z}. +}{ +\spadpaste{w := taylor 'w \bound{w}} +} +\xtc{ +}{ +\spadpaste{exp(2 + tan(w)) \free{w}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemSeriesConversionsTitle}{Converting to Power Series} +\newcommand{\ugxProblemSeriesConversionsNumber}{8.9.5.} + +@ +\section{Converting to Power Series} +\label{ugxProblemSeriesConversionsPage} +\index{pages!ugxProblemSeriesConversionsPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemSeriesConversionsPage} +\index{ugxProblemSeriesConversionsPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemSeriesConversionsPage} +{8.9.5. Converting to Power Series} +\beginscroll + +The \axiomType{ExpressionToUnivariatePowerSeries} package provides +operations for computing series expansions of functions. + +\labelSpace{1pc} +\xtc{ +Evaluate this +to compute the Taylor expansion of \axiom{sin x} about +\axiom{x = 0}. +The first argument, \axiom{sin(x)}, specifies the function whose series +expansion is to be computed and the second argument, \axiom{x = 0}, +specifies that the series is to be expanded in power of \axiom{(x - 0)}, +that is, in power of \axiom{x}. +}{ +\spadpaste{taylor(sin(x),x = 0)} +} +\xtc{ +Here is the Taylor expansion of \axiom{sin x} about +\texht{$x = \frac{\pi}{6}$}{\axiom{x = \%pi/6}}: +}{ +\spadpaste{taylor(sin(x),x = \%pi/6)} +} + +The function to be expanded into a series may have variables other than +the series variable. +% +\xtc{ +For example, we may expand \axiom{tan(x*y)} as a Taylor series in +\axiom{x} +}{ +\spadpaste{taylor(tan(x*y),x = 0)} +} +% +\xtc{ +or as a Taylor series in \axiom{y}. +}{ +\spadpaste{taylor(tan(x*y),y = 0)} +} +\xtc{ +A more interesting function is +\texht{${\displaystyle t e^{x t}} \over {\displaystyle e^t - 1}$}{(t * +\%e**(x*t))/(\%e**t - 1)}. +When we expand this function as a Taylor series in \axiom{t} +the \eth{\axiom{n}} order coefficient is the \eth{\axiom{n}} Bernoulli +polynomial +divided by \axiom{n!}. +}{ +\spadpaste{bern := taylor(t*exp(x*t)/(exp(t) - 1),t = 0) \bound{bern}} +} +\xtc{ +Therefore, this and the next expression +produce the same result. +}{ +\spadpaste{factorial(6) * coefficient(bern,6) \free{bern}} +} +\xtc{ +}{ +\spadpaste{bernoulliB(6,x)} +} + +Technically, a series with terms of negative degree is not considered to +be a Taylor series, but, rather, a +{\it Laurent series}. +If you try to compute a Taylor series expansion of +\texht{$\frac{x}{\log x}$}{x/log(x)} +at \axiom{x = 1} via \axiom{taylor(x/log(x),x = 1)} +you get an error message. +The reason is that the function has a {\it pole} at \axiom{x = +1}, meaning that +its series expansion about this point has terms of negative degree. +A series with finitely many terms of negative degree is called a Laurent +series. +\xtc{ +You get the desired series expansion by issuing this. +}{ +\spadpaste{laurent(x/log(x),x = 1)} +} + +Similarly, a series with terms of fractional degree is neither a Taylor +series nor a Laurent series. +Such a series is called a +{\it Puiseux series}. +The expression \axiom{laurent(sqrt(sec(x)),x = 3 * \%pi/2)} +results in an error message +because the series expansion about this point has terms of fractional degree. +\xtc{ +However, this command produces what you want. +}{ +\spadpaste{puiseux(sqrt(sec(x)),x = 3 * \%pi/2)} +} + +Finally, consider the case of functions that do not have Puiseux +expansions about certain points. +An example of this is \texht{$x^x$}{\axiom{x^x}} about \axiom{x = 0}. +\axiom{puiseux(x**x,x=0)} +produces an error message because of the +type of singularity of the function at \axiom{x = 0}. +\xtc{ +The general function \axiomFun{series} can be used in this case. +Notice that the series returned is not, strictly speaking, a power series +because of the \axiom{log(x)} in the expansion. +}{ +\spadpaste{series(x**x,x=0)} +} + +\beginImportant +The operation \axiomFun{series} returns the most general type of +infinite series. +The user who is not interested in distinguishing +between various types of infinite series may wish to use this operation +exclusively. +\endImportant + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemSeriesFormulaTitle}{Power Series from Formulas} +\newcommand{\ugxProblemSeriesFormulaNumber}{8.9.6.} + +@ +\section{Power Series from Formulas} +\label{ugxProblemSeriesFormulaPage} +\begin{itemize} +\item ugxProblemSeriesConversionsPage \ref{ugxProblemSeriesConversionsPage} on +page~\pageref{ugxProblemSeriesConversionsPage} +\item ugUserAnonPage \ref{ugUserAnonPage} on +page~\pageref{ugUserAnonPage} +\item ugxProblemSeriesConversionsPage \ref{ugxProblemSeriesConversionsPage} on +page~\pageref{ugxProblemSeriesConversionsPage} +\end{itemize} +\index{pages!ugxProblemSeriesFormulaPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemSeriesFormulaPage} +\index{ugxProblemSeriesFormulaPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemSeriesFormulaPage}{8.9.6. Power Series from Formulas} +\beginscroll + +The \axiomType{GenerateUnivariatePowerSeries} package enables you to +create power series from explicit formulas for their +\eth{\axiom{n}} coefficients. +In what follows, we construct series expansions for certain +transcendental functions by giving formulas for their +coefficients. +You can also compute such series expansions directly simply by +specifying the function and the point about which the series is to +be expanded. +See +\downlink{``\ugxProblemSeriesConversionsTitle''} +{ugxProblemSeriesConversionsPage} in Section +\ugxProblemSeriesConversionsNumber\ignore{ugxProblemSeriesConversions} +for more information. + +Consider the Taylor expansion of \texht{$e^x$}{\axiom{\%e**x}} +about \axiom{x = 0}: +\texht{\narrowDisplay{% +\begin{array}{ccl} +e^x &=& \displaystyle 1 + x + \frac{x^2}{2} + \frac{x^3}{6} + \cdots \\ \\ + &=& \displaystyle\sum_{n=0}^\infty \frac{x^n}{n!} +\end{array}}% +}{ +\begin{verbatim} +%e**x = 1 + x + x**2/2 + x**3/6 + ... + = sum from n=0 to n=%infty of x**n / n! +\end{verbatim} +} +The \eth{\axiom{n}} Taylor coefficient is \axiom{1/n!}. +% +\xtc{ +This is how you create this series in Axiom. +}{ +\spadpaste{series(n +-> 1/factorial(n),x = 0)} +} + +The first argument specifies a formula for the \eth{\axiom{n}} +coefficient by giving a function that maps \axiom{n} to +\axiom{1/n!}. +The second argument specifies that the series is to be expanded in +powers of \axiom{(x - 0)}, that is, in powers of \axiom{x}. +Since we did not specify an initial degree, the first term in the +series was the term of degree 0 (the constant term). +Note that the formula was given as an anonymous function. +These are discussed in \downlink{``\ugUserAnonTitle''}{ugUserAnonPage} +in Section \ugUserAnonNumber\ignore{ugUserAnon}. + +Consider the Taylor expansion of \axiom{log x} about \axiom{x = 1}: +\texht{\narrowDisplay{% +\begin{array}{ccl} +\log(x) &=& \displaystyle (x - 1) - \frac{(x - 1)^2}{2} + \frac{(x - 1)^3}{3} - \cdots \\ \\ + &=& \displaystyle\sum_{n = 1}^\infty (-1)^{n-1} \frac{(x - 1)^n}{n} +\end{array}}% +}{ +\begin{verbatim} +log x = (x - 1) - \(x - 1)^2/2 + (x - 1)^3/3 - ... + = sum from n=1 to n=%infty of (-1)**(n-1) (x - 1)**n / n +\end{verbatim} +} +If you were to evaluate the expression +\axiom{series(n +-> (-1)**(n-1) / n, x = 1)} +you would get an error message because Axiom would try to +calculate a term of degree \axiom{0} and therefore divide by \axiom{0.} + +\xtc{ +Instead, evaluate this. +The third argument, \axiom{1..}, indicates that only terms of degree +\axiom{n = 1, ...} are to be computed. +}{ +\spadpaste{series(n +-> (-1)**(n-1)/n,x = 1,1..)} +} +% + +Next consider the Taylor expansion of an odd function, say, +\axiom{sin(x)}: +\begin{verbatim} +sin x = x - x**3/3! + x**5/5! - ... +\end{verbatim} +Here every other coefficient is zero and we would like to give an +explicit formula only for the odd Taylor coefficients. +% +\xtc{ +This is one way to do it. +The third argument, \axiom{1..}, specifies that the first term to be computed +is the term of degree 1. +The fourth argument, \axiom{2}, specifies that we +increment by \axiom{2} to find the degrees of +subsequent terms, that is, the next +term +is of degree \axiom{1 + 2}, the next of degree \axiom{1 + 2 + 2}, etc. +}{ +\spadpaste{series(n +-> (-1)**((n-1)/2)/factorial(n),x = 0,1..,2)} +} +% + +\xtc{ +The initial degree and the increment do not have to be integers. +For example, this expression produces a series expansion of +\texht{$\sin(x^{\frac{1}{3}})$}{\axiom{sin(x**(1/3))}}. +}{ +\spadpaste{series(n +-> (-1)**((3*n-1)/2)/factorial(3*n),x = 0,1/3..,2/3)} +} +\xtc{ +While the increment must be positive, the initial degree may be negative. +This yields the Laurent expansion of \axiom{csc(x)} at +\axiom{x = 0}. +% +}{ +\spadpaste{cscx := series(n +-> (-1)**((n-1)/2) * 2 * (2**n-1) * bernoulli(numer(n+1)) / factorial(n+1), x=0, -1..,2) \bound{cscx}} +} +\xtc{ +Of course, the reciprocal of this power series is the Taylor expansion +of \axiom{sin(x)}. +}{ +\spadpaste{1/cscx \free{cscx}} +} +% +\xtc{ +As a final example, +here is the Taylor expansion of \axiom{asin(x)} about \axiom{x = 0}. +}{ +\spadpaste{asinx := series(n +-> binomial(n-1,(n-1)/2)/(n*2**(n-1)),x=0,1..,2) \bound{asinx}} +} +\xtc{ +When we compute the \axiom{sin} of this series, we get \axiom{x} +(in the sense that all higher terms computed so far are zero). +}{ +\spadpaste{sin(asinx) \free{asinx}} +} + +As we discussed in +\downlink{``\ugxProblemSeriesConversionsTitle''} +{ugxProblemSeriesConversionsPage} in Section +\ugxProblemSeriesConversionsNumber\ignore{ugxProblemSeriesConversions}, +you can also use the operations \axiomFun{taylor}, \axiomFun{laurent} and +\axiomFun{puiseux} instead of \axiomFun{series} if you know ahead of time +what kind of exponents a series has. +You can't go wrong using \axiomFun{series}, though. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemSeriesSubstituteTitle}{Substituting Numerical Values in Power Series} +\newcommand{\ugxProblemSeriesSubstituteNumber}{8.9.7.} + +@ +\section{Substituting Numerical Values in Power Series} +\label{ugxProblemSeriesSubstitutePage} +\index{pages!ugxProblemSeriesSubstitutePage!ug08.ht} +\index{ug08.ht!pages!ugxProblemSeriesSubstitutePage} +\index{ugxProblemSeriesSubstitutePage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemSeriesSubstitutePage}{8.9.7. Substituting Numerical Values in Power Series} +\beginscroll + +Use \axiomFunFrom{eval}{UnivariatePowerSeriesCategory} +to substitute a numerical value for a variable in +a power series. +For example, here's a way to obtain numerical approximations of +\axiom{\%e} from the Taylor series +expansion of \axiom{exp(x)}. + +\labelSpace{1pc} +\xtc{ +First you create the desired Taylor expansion. +}{ +\spadpaste{f := taylor(exp(x)) \bound{f}} +} +\xtc{ +Then you evaluate the series at the value \axiom{1.0}. +The result is a sequence of the partial sums. +}{ +\spadpaste{eval(f,1.0)} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemSeriesBernoulliTitle}{Example: Bernoulli Polynomials and Sums of Powers} +\newcommand{\ugxProblemSeriesBernoulliNumber}{8.9.8.} + +@ +\section{Example: Bernoulli Polynomials and Sums of Powers} +\label{ugxProblemSeriesBernoulliPage} +\index{pages!ugxProblemSeriesBernoulliPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemSeriesBernoulliPage} +\index{ugxProblemSeriesBernoulliPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemSeriesBernoulliPage} +{8.9.8. Example: Bernoulli Polynomials and Sums of Powers} +\beginscroll + +Axiom provides operations for computing definite and +indefinite sums. + +\labelSpace{3pc} +\xtc{ +You can compute the sum of the first +ten fourth powers by evaluating this. +This creates a list whose entries are +\texht{$m^4$}{\axiom{m**4}} as \texht{$m$}{\axiom{m}} ranges from 1 +to 10, and then computes the sum of the entries of that list. +}{ +\spadpaste{reduce(+,[m**4 for m in 1..10])} +} +\xtc{ +You can also compute a formula for the sum of the first +\texht{$k$}{\axiom{k}} fourth powers, where \texht{$k$}{\axiom{k}} is an +unspecified positive integer. +}{ +\spadpaste{sum4 := sum(m**4, m = 1..k) \bound{sum4}} +} +\xtc{ +This formula is valid for any positive integer \texht{$k$}{\axiom{k}}. +For instance, if we replace \texht{$k$}{\axiom{k}} by 10, +we obtain the number we computed earlier. +}{ +\spadpaste{eval(sum4, k = 10) \free{sum4}} +} + +You can compute a formula for the sum of the first +\texht{$k$}{\axiom{k}} \eth{\axiom{n}} powers in a similar fashion. +Just replace the \axiom{4} in the definition of \userfun{sum4} by +any expression not involving \texht{$k$}{\axiom{k}}. +Axiom computes these formulas using Bernoulli polynomials; +we +use the rest of this section to describe this method. + +% +\xtc{ +First consider this function of \axiom{t} and \axiom{x}. +}{ +\spadpaste{f := t*exp(x*t) / (exp(t) - 1) \bound{f}} +} +\noOutputXtc{ +Since the expressions involved get quite large, we tell +Axiom to show us only terms of degree up to \axiom{5.} +}{ +\spadpaste{)set streams calculate 5 \bound{set}} +} +% +% +\xtc{ +If we look at the Taylor expansion of \axiom{f(x, t)} about \axiom{t = 0,} +we see that the coefficients of the powers of \axiom{t} are polynomials +in \axiom{x}. +}{ +\spadpaste{ff := taylor(f,t = 0) \free{f set} \bound{ff}} +} +% +In fact, the \eth{\axiom{n}} coefficient in this series is essentially +the \eth{\axiom{n}} Bernoulli polynomial: +the \eth{\axiom{n}} coefficient of the series is +\texht{${1 \over {n!}} B_n(x)$}{\axiom{1/n! * Bn(x)}}, where +\texht{$B_n(x)$}{\axiom{Bn(x)}} +is the \eth{\axiom{n}} Bernoulli polynomial. +Thus, to obtain the \eth{\axiom{n}} Bernoulli polynomial, we multiply +the \eth{\axiom{n}} coefficient +of the series \axiom{ff} by \axiom{n!}. +% +\xtc{ +For example, the sixth Bernoulli polynomial is this. +}{ +\spadpaste{factorial(6) * coefficient(ff,6) \free{ff}} +} +% +\xtc{ +We derive some properties of the function \axiom{f(x,t)}. +First we compute \axiom{f(x + 1,t) - f(x,t)}. +}{ +\spadpaste{g := eval(f, x = x + 1) - f \bound{g} \free{f}} +} +% +\xtc{ +If we normalize \axiom{g}, we see that it has a particularly simple form. +}{ +\spadpaste{normalize(g) \free{g}} +} +% +From this it follows that the \eth{\axiom{n}} +coefficient in the Taylor expansion of +\axiom{g(x,t)} at \axiom{t = 0} is +\texht{${1\over{(n-1)\:!}}\:x^{n-1}$}{\axiom{1/(n-1)! * x**(n-1)}}. +\xtc{ +If you want to check this, evaluate the next expression. +}{ +\spadpaste{taylor(g,t = 0) \free{g}} +} +% +However, since \axiom{g(x,t) = f(x+1,t)-f(x,t)}, it follows that the +\eth{\axiom{n}} coefficient is +\texht{${1 \over {n!}}\:(B_n(x+1)-B_n(x))$}{\axiom{1/n! * (Bn(x + 1) - +Bn(x))}}. +Equating coefficients, we see that +\texht{${1\over{(n-1)\:!}}\:x^{n-1} = {1\over{n!}}\:(B_n(x + 1) - +B_n(x))$}{\axiom{1/(n-1)! * x**(n-1) = 1/n! * (Bn(x + 1) - Bn(x))}} +and, therefore, +\texht{$x^{n-1} = {1\over{n}}\:(B_n(x + 1) - +B_n(x))$}{\axiom{x**(n-1) = 1/n * (Bn(x + 1) - Bn(x))}}. +% +Let's apply this formula repeatedly, letting \axiom{x} vary between two +integers \axiom{a} and \axiom{b}, with \axiom{a < b}: +% +\begin{verbatim} + a**(n-1) = 1/n * (Bn(a + 1) - Bn(a)) + (a + 1)**(n-1) = 1/n * (Bn(a + 2) - Bn(a + 1)) + (a + 2)**(n-1) = 1/n * (Bn(a + 3) - Bn(a + 2)) + . + . + . + (b - 1)**(n-1) = 1/n * (Bn(b) - Bn(b - 1)) + b**(n-1) = 1/n * (Bn(b + 1) - Bn(b)) +\end{verbatim} + +When we add these equations we find that +the sum of the left-hand sides is +\texht{$\sum_{m=a}^{b} m^{n-1},$}{\axiom{sum(m = a..b,m ** (n-1))},}% +the sum of the +\texht{$(n-1)^{\hbox{\small\rm st}}$}{\axiom{(n-1)}-st} +powers from \axiom{a} to \axiom{b}. +The sum of the right-hand sides is a ``telescoping series.'' +After cancellation, the sum is simply +\texht{${1\over{n}}\:(B_n(b + 1) - +B_n(a))$}{\axiom{1/n * (Bn(b + 1) - Bn(a))}}. + +Replacing \axiom{n} by \axiom{n + 1}, we have shown that +\centerline{{\axiom{sum(m = a..b,m ** n) = 1/(n + 1) * (B(b + 1) - B(a))}.}} + +Let's use this to obtain the formula for the sum of fourth powers. +\xtc{ +First we obtain the Bernoulli polynomial \texht{$B_5$}{\axiom{B5}}. +}{ +\spadpaste{B5 := factorial(5) * coefficient(ff,5) \free{ff} \bound{B5}} +} +% +\xtc{ +To find the sum of the first \texht{$k$}{\axiom{k}} 4th powers, +we multiply \axiom{1/5} by +\texht{$B_5(k+1) - B_5(1)$}{\axiom{B5(k + 1) - B5(1)}}. +}{ +\spadpaste{1/5 * (eval(B5, x = k + 1) - eval(B5, x = 1)) \free{B5}} +} +% +\xtc{ +This is the same formula that we obtained via \axiom{sum(m**4, m = 1..k)}. +}{ +\spadpaste{sum4 \free{sum4}} +} + +At this point you may want to do the same computation, but with an +exponent other than \axiom{4.} +For example, you might try to find a formula for the sum of the +first \texht{$k$}{\axiom{k}} 20th powers. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemDEQTitle}{Solution of Differential Equations} +\newcommand{\ugProblemDEQNumber}{8.10.} + +@ +\section{Solution of Differential Equations} +\label{ugProblemDEQPage} +\begin{itemize} +\item ugProblemLinPolEqnPage \ref{ugProblemLinPolEqnPage} on +page~\pageref{ugProblemLinPolEqnPage} +\item ugxProblemLDEQClosedPage \ref{ugxProblemLDEQClosedPage} on +page~\pageref{ugxProblemLDEQClosedPage} +\item ugxProblemNLDEQClosedPage \ref{ugxProblemNLDEQClosedPage} on +page~\pageref{ugxProblemNLDEQClosedPage} +\item ugxProblemDEQSeriesPage \ref{ugxProblemDEQSeriesPage} on +page~\pageref{ugxProblemDEQSeriesPage} +\end{itemize} +\index{pages!ugProblemDEQPage!ug08.ht} +\index{ug08.ht!pages!ugProblemDEQPage} +\index{ugProblemDEQPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemDEQPage}{8.10. Solution of Differential Equations} +\beginscroll +% +In this section we discuss Axiom's facilities for +solving +differential equations in closed-form and in series. + +Axiom provides facilities for closed-form solution of +single differential equations of the following kinds: +\indent{4} +\beginitems +\item[-] linear ordinary differential equations, and +\item[-] non-linear first order ordinary differential equations +when integrating factors can be found just by integration. +\enditems +\indent{0} + +For a discussion of the solution of systems of linear and polynomial +equations, see +\downlink{``\ugProblemLinPolEqnTitle''}{ugProblemLinPolEqnPage} in +Section \ugProblemLinPolEqnNumber\ignore{ugProblemLinPolEqn}. + +\beginmenu + \menudownlink{ +{8.10.1. Closed-Form Solutions of Linear Differential Equations}} +{ugxProblemLDEQClosedPage} + \menudownlink{ +{8.10.2. Closed-Form Solutions of Non-Linear Differential Equations}} +{ugxProblemNLDEQClosedPage} + \menudownlink{ +{8.10.3. Power Series Solutions of Differential Equations}} +{ugxProblemDEQSeriesPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemLDEQClosedTitle}{Closed-Form Solutions of Linear Differential Equations} +\newcommand{\ugxProblemLDEQClosedNumber}{8.10.1.} + +@ +\section{Closed-Form Solutions of Linear Differential Equations} +\label{ugxProblemLDEQClosedPage} +\index{pages!ugxProblemLDEQClosedPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemLDEQClosedPage} +\index{ugxProblemLDEQClosedPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemLDEQClosedPage} +{8.10.1. Closed-Form Solutions of Linear Differential Equations} +\beginscroll + +A {\it differential equation} is an equation involving an unknown {\it +function} and one or more of its derivatives. +The equation is called {\it ordinary} if derivatives with respect to +only one dependent variable appear in the equation (it is called {\it +partial} otherwise). +The package \axiomType{ElementaryFunctionODESolver} provides the +top-level operation \spadfun {solve} for finding closed-form solutions +of ordinary differential equations. + +To solve a differential equation, you must first create an operator for +the unknown function. +% +\xtc{ +We let \axiom{y} be the unknown function in terms of \axiom{x}. +}{ +\spadpaste{y := operator 'y \bound{y}} +} +% +You then type the equation using \axiomFun{D} to create the +derivatives of the unknown function \axiom{y(x)} where \axiom{x} is any +symbol you choose (the so-called {\it dependent variable}). +% +\xtc{ +This is how you enter +the equation \axiom{y'' + y' + y = 0}. +}{ +\spadpaste{deq := D(y x, x, 2) + D(y x, x) + y x = 0\bound{e1}\free{y}} +} +% +The simplest way to invoke the \axiomFun{solve} command is with three +arguments. +\begin{items} +\item the differential equation, +\item the operator representing the unknown function, +\item the dependent variable. +\end{items} +% +\xtc{ +So, to solve the above equation, we enter this. +}{ +\spadpaste{solve(deq, y, x) \free{e1}\free{y}} +} +% +Since linear ordinary differential equations have infinitely many +solutions, \axiomFun{solve} returns a {\it particular solution} +\texht{$f_p$}{\axiom{f_p}} +and a basis +\texht{$f_1,\dots,f_n$}{\axiom{f1,...,fn}} +for the solutions of the corresponding homogenuous equation. +Any expression of the form +\texht{$f_p + c_1 f_1 + \dots c_n f_n$}{\axiom{fp + c1 f1 + ... + cn fn}} +where the \texht{$c_i$}{\axiom{ci}} do not involve +the dependent variable is also a solution. +This is similar to what you get when you solve systems of linear +algebraic equations. + +A way to select a unique solution is to specify {\it initial +conditions}: choose a value \axiom{a} for the dependent variable +and specify the values of the unknown function and its derivatives +at \axiom{a}. +If the number of initial conditions is equal to the order of the +equation, then the solution is unique (if it exists in closed +form!) and \axiomFun{solve} tries to find it. +To specify initial conditions to \axiomFun{solve}, use an +\axiomType{Equation} of the form \axiom{x = a} for the third +parameter instead of the dependent variable, and add a fourth +parameter consisting of the list of values \axiom{y(a), y'(a), ...}. + +\xtc{ +To find the solution of \axiom{y'' + y = 0} satisfying \axiom{y(0) = y'(0) = 1}, +do this. +}{ +\spadpaste{deq := D(y x, x, 2) + y x \bound{e2}\free{y}} +} +\xtc{ +You can omit the \axiom{= 0} when you enter the equation to be solved. +}{ +\spadpaste{solve(deq, y, x = 0, [1, 1]) \free{e2}\free{y}} +} +% + +Axiom is not limited to linear differential equations with +constant coefficients. +It can also find solutions when the coefficients are rational or +algebraic functions of the dependent variable. +Furthermore, Axiom is not limited by the order of the equation. +% +\xtc{ +Axiom can solve the following third order equations with +polynomial coefficients. +}{ +\spadpaste{deq := x**3 * D(y x, x, 3) + x**2 * D(y x, x, 2) - 2 * x * D(y x, x) + 2 * y x = 2 * x**4 \bound{e3}\free{y}} +} +\xtc{ +}{ +\spadpaste{solve(deq, y, x) \free{e3}\free{y}} +} +% +% +\xtc{ +Here we are solving a homogeneous equation. +}{ +\spadpaste{deq := (x**9+x**3) * D(y x, x, 3) + 18 * x**8 * D(y x, x, 2) - 90 * x * D(y x, x) - 30 * (11 * x**6 - 3) * y x \bound{e4}\free{y}} +} +\xtc{ +}{ +\spadpaste{solve(deq, y, x) \free{e4}\free{y}} +} +% +On the other hand, and in contrast with the operation +\axiomFun{integrate}, it can happen that Axiom finds no solution +and that some closed-form solution still exists. +While it is mathematically complicated to describe exactly when the +solutions are guaranteed to be found, the following statements are +correct and form good guidelines for linear ordinary differential +equations: +\begin{items} +\item If the coefficients are constants, Axiom finds a complete basis +of solutions (i,e, all solutions). +\item If the coefficients are rational functions in the dependent variable, +Axiom at least finds all solutions that do not involve algebraic +functions. +\end{items} +% +Note that this last statement does not mean that Axiom does not find +the solutions that are algebraic functions. +It means that it is not +guaranteed that the algebraic function solutions will be found. +% +\xtc{ +This is an example where all the algebraic solutions are found. +}{ +\spadpaste{deq := (x**2 + 1) * D(y x, x, 2) + 3 * x * D(y x, x) + y x = 0 \bound{e5}\free{y}} +} +\xtc{ +}{ +\spadpaste{solve(deq, y, x) \free{e5}\free{y}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemNLDEQClosedTitle}{Closed-Form Solutions of Non-Linear Differential Equations} +\newcommand{\ugxProblemNLDEQClosedNumber}{8.10.2.} + +@ +\section{Closed-Form Solutions of Non-Linear Differential Equations} +\label{ugxProblemNLDEQClosedPage} +\index{pages!ugxProblemNLDEQClosedPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemNLDEQClosedPage} +\index{ugxProblemNLDEQClosedPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemNLDEQClosedPage} +{8.10.2. Closed-Form Solutions of Non-Linear Differential Equations} +\beginscroll + +This is an example that shows how to solve a non-linear +first order ordinary differential equation manually when an integrating +factor can be found just by integration. +At the end, we show you how to solve it directly. + +Let's solve the differential equation \axiom{y' = y / (x + y log y)}. +% +\xtc{ +Using the notation +\axiom{m(x, y) + n(x, y) y' = 0}, +we have \axiom{m = -y} and \axiom{n = x + y log y}. +}{ +\spadpaste{m := -y \bound{m}} +} +\xtc{ +}{ +\spadpaste{n := x + y * log y \bound{n}} +} +% +\xtc{ +We first check for exactness, that is, does \axiom{dm/dy = dn/dx}? +}{ +\spadpaste{D(m, y) - D(n, x) \free{m n}} +} +% +This is not zero, so the equation is not exact. +Therefore we must look for +an integrating factor: a function \axiom{mu(x,y)} such that +\axiom{d(mu m)/dy = d(mu n)/dx}. +Normally, we first search for \axiom{mu(x,y)} depending only on +\axiom{x} or only on \axiom{y}. +% +\xtc{ +Let's search for such a \axiom{mu(x)} first. +}{ +\spadpaste{mu := operator 'mu \bound{mu}} +} +\xtc{ +}{ +\spadpaste{a := D(mu(x) * m, y) - D(mu(x) * n, x) \bound{a}\free{m n mu}} +} +% +% +\xtc{ +If the above is zero for a function +\axiom{mu} that does {\it not} depend on \axiom{y}, then +\axiom{mu(x)} is an integrating factor. +}{ +\spadpaste{solve(a = 0, mu, x) \free{mu a}} +} +% +The solution depends on \axiom{y}, so there is no integrating +factor that depends on \axiom{x} only. +% +\xtc{ +Let's look for one that depends on \axiom{y} only. +}{ +\spadpaste{b := D(mu(y) * m, y) - D(mu(y) * n, x) \bound{b}\free{mu m}} +} +\xtc{ +}{ +\spadpaste{sb := solve(b = 0, mu, y) \free{mu b}\bound{sb}} +} +\noindent +We've found one! +% +\xtc{ +The above \axiom{mu(y)} is an integrating factor. +We must multiply our initial equation +(that is, \axiom{m} and \axiom{n}) by the integrating factor. +}{ +\spadpaste{intFactor := sb.basis.1 \bound{intFactor}\free{sb}} +} +\xtc{ +}{ +\spadpaste{m := intFactor * m \bound{m1}\free{m intFactor}} +} +\xtc{ +}{ +\spadpaste{n := intFactor * n \bound{n1}\free{n intFactor}} +} +% +\xtc{ +Let's check for exactness. +}{ +\spadpaste{D(m, y) - D(n, x) \free{m1 n1}} +} +% +We must solve the exact equation, that is, find a function +\axiom{s(x,y)} such that +\axiom{ds/dx = m} and \axiom{ds/dy = n}. +% +\xtc{ +We start by writing \axiom{s(x, y) = h(y) + integrate(m, x)} +where \axiom{h(y)} is an unknown function of \axiom{y}. +This guarantees that \axiom{ds/dx = m}. +}{ +\spadpaste{h := operator 'h \bound{h}} +} +\xtc{ +}{ +\spadpaste{sol := h y + integrate(m, x) \bound{sol}\free{h m1}} +} +% +% +\xtc{ +All we want is to find \axiom{h(y)} such that +\axiom{ds/dy = n}. +}{ +\spadpaste{dsol := D(sol, y) \free{sol}\bound{dsol}} +} +\xtc{ +}{ +\spadpaste{nsol := solve(dsol = n, h, y) \free{dsol n1 h}\bound{nsol}} +} +% +\xtc{ +The above particular solution is the \axiom{h(y)} we want, so we just replace +\axiom{h(y)} by it in the implicit solution. +}{ +\spadpaste{eval(sol, h y = nsol.particular) \free{sol h nsol}} +} +% +A first integral of the initial equation is obtained by setting +this result equal to an arbitrary constant. + +Now that we've seen how to solve the equation ``by hand,'' +we show you how to do it with the \axiomFun{solve} operation. +\xtc{ +First define \axiom{y} to be an operator. +}{ +\spadpaste{y := operator 'y \bound{y}} +} +\xtc{ +Next we create the differential equation. +}{ +\spadpaste{deq := D(y x, x) = y(x) / (x + y(x) * log y x) \bound{deqi}\free{y}} +} +\xtc{ +Finally, we solve it. +}{ +\spadpaste{solve(deq, y, x) \free{deqi y}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemDEQSeriesTitle}{Power Series Solutions of Differential Equations} +\newcommand{\ugxProblemDEQSeriesNumber}{8.10.3.} + +@ +\section{Power Series Solutions of Differential Equations} +\label{ugxProblemDEQSeriesPage} +\index{pages!ugxProblemDEQSeriesPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemDEQSeriesPage} +\index{ugxProblemDEQSeriesPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemDEQSeriesPage} +{8.10.3. Power Series Solutions of Differential Equations} +\beginscroll + +The command to solve differential equations in power +series +around +a particular initial point with specific initial conditions is called +\axiomFun{seriesSolve}. +It can take a variety of parameters, so we illustrate +its use with some examples. + +\labelSpace{1pc} +\noOutputXtc{ +Since the coefficients of some solutions +are quite large, we reset the default to compute only seven terms. +}{ +\spadpaste{)set streams calculate 7 \bound{c7}} +} + +You can solve a single nonlinear equation of any order. For example, +we solve \axiom{y''' = sin(y'') * exp(y) + cos(x)} +subject to \axiom{y(0) = 1, y'(0) = 0, y''(0) = 0}. + +\xtc{ +We first tell Axiom +that the symbol \axiom{'y} denotes a new operator. +}{ +\spadpaste{y := operator 'y \bound{y}} +} +\xtc{ +Enter the differential equation using \axiom{y} like any system +function. +}{ +\spadpaste{eq := D(y(x), x, 3) - sin(D(y(x), x, 2))*exp(y(x)) = cos(x)\bound{eq}\free{y}} +} +% +\xtc{ +Solve it around \axiom{x = 0} with the initial conditions +\axiom{y(0) = 1, y'(0) = y''(0) = 0}. +}{ +\spadpaste{seriesSolve(eq, y, x = 0, [1, 0, 0])\free{y}\free{eq}\free{c7}} +} + +You can also solve a system of nonlinear first order equations. +For example, we solve a system that has \axiom{tan(t)} and +\axiom{sec(t)} as solutions. + +\xtc{ +We tell Axiom that \axiom{x} is also an operator. +}{ +\spadpaste{x := operator 'x\bound{x}} +} +\xtc{ +Enter the two equations forming our system. +}{ +\spadpaste{eq1 := D(x(t), t) = 1 + x(t)**2\free{x}\free{y}\bound{eq1}} +} +% +\xtc{ +}{ +\spadpaste{eq2 := D(y(t), t) = x(t) * y(t)\free{x}\free{y}\bound{eq2}} +} +% +\xtc{ +Solve the system around \axiom{t = 0} with the initial conditions +\axiom{x(0) = 0} and \axiom{y(0) = 1}. +Notice that since we give the unknowns in the +order \axiom{[x, y]}, the answer is a list of two series in the order +\axiom{[series for x(t), series for y(t)]}. +}{ +\spadpaste{seriesSolve([eq2, eq1], [x, y], t = 0, [y(0) = 1, x(0) = 0])\free{x}\free{y}\free{eq1}\free{eq2}\free{c7}} +} +\noindent +The order in which we give the +equations and the initial conditions has no effect on the order of +the solution. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemFiniteTitle}{Finite Fields} +\newcommand{\ugProblemFiniteNumber}{8.11.} + +@ +\section{Finite Fields} +\label{ugProblemFinitePage} +\begin{itemize} +\item ugxProblemFinitePrimePage \ref{ugxProblemFinitePrimePage} on +page~\pageref{ugxProblemFinitePrimePage} +\item ugxProblemFinitePrimePage \ref{ugxProblemFinitePrimePage} on +page~\pageref{ugxProblemFinitePrimePage} +\item ugxProblemFiniteExtensionFinitePage \ref{ugxProblemFiniteExtensionFinitePage} on +page~\pageref{ugxProblemFiniteExtensionFinitePage} +\item ugxProblemFiniteModulusPage \ref{ugxProblemFiniteModulusPage} on +page~\pageref{ugxProblemFiniteModulusPage} +\item ugxProblemFiniteCyclicPage \ref{ugxProblemFiniteCyclicPage} on +page~\pageref{ugxProblemFiniteCyclicPage} +\item ugxProblemFiniteNormalPage \ref{ugxProblemFiniteNormalPage} on +page~\pageref{ugxProblemFiniteNormalPage} +\item ugxProblemFiniteConversionPage \ref{ugxProblemFiniteConversionPage} on +page~\pageref{ugxProblemFiniteConversionPage} +\item ugxProblemFiniteUtilityPage \ref{ugxProblemFiniteUtilityPage} on +page~\pageref{ugxProblemFiniteUtilityPage} +\end{itemize} +\index{pages!ugProblemFinitePage!ug08.ht} +\index{ug08.ht!pages!ugProblemFinitePage} +\index{ugProblemFinitePage!ug08.ht!pages} +<>= +\begin{page}{ugProblemFinitePage}{8.11. Finite Fields} +\beginscroll +% + +A {\it finite field} (also called a {\it Galois field}) is a +finite algebraic structure where one can add, multiply and divide +under the same laws (for example, commutativity, associativity or +distributivity) as apply to the rational, real or complex numbers. +Unlike those three fields, for any finite field there exists a +positive prime integer \smath{p}, called the +\axiomFun{characteristic}, such that \texht{$p \: x = 0$}{\axiom{p * +x = 0}} for any element \smath{x} in the finite field. +In fact, the number of elements in a finite field is a power of +the characteristic and for each prime \smath{p} and positive +integer \smath{n} there exists exactly one finite field with +\texht{$p^n$}{\axiom{p**n}} elements, up to +isomorphism.\footnote{For more information about the algebraic +structure and properties of finite fields, see, for example, S. +Lang, {\it Algebra}, Second Edition, New York: Addison-Wesley +Publishing Company, Inc., 1984, ISBN 0 201 05487 6; or R. +Lidl, H. +Niederreiter, {\it Finite Fields}, Encyclopedia of Mathematics and +Its Applications, Vol. +20, Cambridge: Cambridge Univ. +Press, 1983, ISBN 0 521 30240 4.} + +When \axiom{n = 1,} the field has \smath{p} elements and is +called a {\it prime field}, discussed in \texht{the next +section}{ +\downlink{``\ugxProblemFinitePrimeTitle''}{ugxProblemFinitePrimePage} +in Section \ugxProblemFinitePrimeNumber\ignore{ugxProblemFinitePrime}}. +There are several ways of implementing extensions of finite +fields, and Axiom provides quite a bit of freedom to allow +you to choose the one that is best for your application. +Moreover, we provide operations for converting among the different +representations of extensions and different extensions of a single +field. +Finally, note that you usually need to package-call operations +from finite fields if the operations do not take as an argument an +object of the field. +See \downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall} for more information on +package-calling. + +\beginmenu + \menudownlink{{8.11.1. Modular Arithmetic and Prime Fields}} +{ugxProblemFinitePrimePage} + \menudownlink{{8.11.2. Extensions of Finite Fields}} +{ugxProblemFiniteExtensionFinitePage} + \menudownlink{{8.11.3. Irreducible Modulus Polynomial Representations}} +{ugxProblemFiniteModulusPage} + \menudownlink{{8.11.4. Cyclic Group Representations}} +{ugxProblemFiniteCyclicPage} + \menudownlink{{8.11.5. Normal Basis Representations}} +{ugxProblemFiniteNormalPage} + \menudownlink{{8.11.6. Conversion Operations for Finite Fields}} +{ugxProblemFiniteConversionPage} + \menudownlink{{8.11.7. Utility Operations for Finite Fields}} +{ugxProblemFiniteUtilityPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemFinitePrimeTitle}{Modular Arithmetic and Prime Fields} +\newcommand{\ugxProblemFinitePrimeNumber}{8.11.1.} + +@ +\section{Modular Arithmetic and Prime Fields} +\label{ugxProblemFinitePrimePage} +\index{pages!ugxProblemFinitePrimePage!ug08.ht} +\index{ug08.ht!pages!ugxProblemFinitePrimePage} +\index{ugxProblemFinitePrimePage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemFinitePrimePage} +{8.11.1. Modular Arithmetic and Prime Fields} +\beginscroll + +Let \smath{n} be a positive integer. +It is well known that you can get the same result if you perform +addition, subtraction or multiplication of integers and then take +the remainder on dividing by \smath{n} as if +you had first done such remaindering on the operands, performed the +arithmetic and then (if necessary) done remaindering again. +This allows us to speak of arithmetic +{\it modulo} \smath{n} or, more simply +{\it mod} \smath{n}. +\xtc{ +In Axiom, you use \axiomType{IntegerMod} to do such arithmetic. +}{ +\spadpaste{(a,b) : IntegerMod 12 \bound{abdec}} +} +\xtc{ +}{ +\spadpaste{(a, b) := (16, 7) \free{abdec}\bound{a b}} +} +\xtc{ +}{ +\spadpaste{[a - b, a * b] \free{a b}} +} +\xtc{ +If \smath{n} is not prime, there is only a limited notion of +reciprocals and division. +}{ +\spadpaste{a / b \free{a b}} +} +\xtc{ +}{ +\spadpaste{recip a \free{a}} +} +\xtc{ +Here \axiom{7} and \axiom{12} are relatively prime, so \axiom{7} +has a multiplicative inverse modulo \axiom{12}. +}{ +\spadpaste{recip b \free{b}} +} + +If we take \smath{n} to be a prime number \smath{p}, +then taking inverses and, therefore, division are generally defined. +\xtc{ +Use \axiomType{PrimeField} instead of \axiomType{IntegerMod} +for \smath{n} prime. +}{ +\spadpaste{c : PrimeField 11 := 8 \bound{c}} +} +\xtc{ +}{ +\spadpaste{inv c \free{c}} +} +\xtc{ +You can also use \axiom{1/c} and \axiom{c**(-1)} for the inverse of +\smath{c}. +}{ +\spadpaste{9/c \free{c}} +} + +\axiomType{PrimeField} (abbreviation \axiomType{PF}) checks if its +argument is prime when you try to use an operation from it. +If you know the argument is prime (particularly if it is large), +\axiomType{InnerPrimeField} (abbreviation \axiomType{IPF}) assumes +the argument has already been verified to be prime. +If you do use a number that is not prime, you will eventually get +an error message, most likely a division by zero message. +For computer science applications, the most important finite fields +are \axiomType{PrimeField 2} and its extensions. + +\xtc{ +In the following examples, we work with the finite field with +\smath{p = 101} elements. +}{ +\spadpaste{GF101 := PF 101 \bound{GF101} } +} +\xtc{ +Like many domains in Axiom, finite fields provide an operation +for returning a random element of the domain. +}{ +\spadpaste{x := random()\$GF101 \bound{x}\free{GF101}} +} +\xtc{ +}{ +\spadpaste{y : GF101 := 37 \bound{y}\free{GF101}} +} +\xtc{ +}{ +\spadpaste{z := x/y \bound{z}\free{x y}} +} +\xtc{ +}{ +\spadpaste{z * y - x \free{x y z}} +} +% +\xtc{ +The element \axiom{2} is a {\it primitive element} of this field, +}{ +\spadpaste{pe := primitiveElement()\$GF101 \bound{pe}\free{GF101}} +} +% +\xtc{ +in the sense that its powers enumerate all nonzero elements. +}{ +\spadpaste{[pe**i for i in 0..99] \free{pe}} +} +% +% +\xtc{ +If every nonzero element is a power of a primitive element, how do you +determine what the exponent is? +Use +\axiomFun{discreteLog}. +}{ +\spadpaste{ex := discreteLog(y) \bound{ex}\free{y}} +} +\xtc{ +}{ +\spadpaste{pe ** ex \free{ex pe}} +} +% +\xtc{ +The \axiomFun{order} of a nonzero element \smath{x} is the +smallest positive integer \smath{t} such +\texht{$x^t = 1$}{\axiom{x**t = 1}}. +}{ +\spadpaste{order y \free{y}} +} +\xtc{ +The order of a primitive element is the defining \smath{p-1}. +}{ +\spadpaste{order pe \free{pe}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemFiniteExtensionFiniteTitle}{Extensions of Finite Fields} +\newcommand{\ugxProblemFiniteExtensionFiniteNumber}{8.11.2.} + +@ +\section{Extensions of Finite Fields} +\label{ugxProblemFiniteExtensionFinitePage} +\index{pages!ugxProblemFiniteExtensionFinitePage!ug08.ht} +\index{ug08.ht!pages!ugxProblemFiniteExtensionFinitePage} +\index{ugxProblemFiniteExtensionFinitePage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemFiniteExtensionFinitePage} +{8.11.2. Extensions of Finite Fields} +\beginscroll + +When you want to work with an extension of a finite field in Axiom, +you have three choices to make: +\indent{4} +\beginitems +\item[1. ] Do you want to generate an extension of the prime field +(for example, \axiomType{PrimeField 2}) or an extension of a given field? +% +\item[2. ] Do you want to use a representation that is particularly +efficient for multiplication, exponentiation and addition but +uses a lot of computer memory (a representation that models the cyclic +group structure of the multiplicative group of the field extension +and uses a Zech logarithm table), one that +uses a normal basis for the vector space structure of the field +extension, or one that performs arithmetic modulo an irreducible +polynomial? +The cyclic group representation is only usable up to ``medium'' +(relative to your machine's performance) +sized fields. +If the field is large and the normal basis is relatively simple, +the normal basis representation is more efficient for exponentiation than +the irreducible polynomial representation. +% +\item[3. ] Do you want to provide a polynomial explicitly, a root of which +``generates'' the extension in one of the three senses in (2), +or do you wish to have the polynomial generated for you? +\enditems +\indent{0} + +This illustrates one of the most important features of Axiom: +you can choose exactly the right data-type and representation to +suit your application best. + +We first tell you what domain constructors to use for each case +above, and then give some examples. + +\texht{\hangafter=1\hangindent=2pc}{\noindent} +Constructors that automatically generate extensions of the prime field: +\newline +\axiomType{FiniteField} \newline +\axiomType{FiniteFieldCyclicGroup} \newline +\axiomType{FiniteFieldNormalBasis} + +\texht{\hangafter=1\hangindent=2pc}{\noindent} +Constructors that generate extensions of an arbitrary field: +\newline +\axiomType{FiniteFieldExtension} \newline +\axiomType{FiniteFieldExtensionByPolynomial} \newline +\axiomType{FiniteFieldCyclicGroupExtension} \newline +\axiomType{FiniteFieldCyclicGroupExtensionByPolynomial} \newline +\axiomType{FiniteFieldNormalBasisExtension} \newline +\axiomType{FiniteFieldNormalBasisExtensionByPolynomial} + +\texht{\hangafter=1\hangindent=2pc}{\noindent} +Constructors that use a cyclic group representation: +\newline +\axiomType{FiniteFieldCyclicGroup} \newline +\axiomType{FiniteFieldCyclicGroupExtension} \newline +\axiomType{FiniteFieldCyclicGroupExtensionByPolynomial} + +\texht{\hangafter=1\hangindent=2pc}{\noindent} +Constructors that use a normal basis representation: +\newline +\axiomType{FiniteFieldNormalBasis} \newline +\axiomType{FiniteFieldNormalBasisExtension} \newline +\axiomType{FiniteFieldNormalBasisExtensionByPolynomial} + +\texht{\hangafter=1\hangindent=2pc}{\noindent} +Constructors that use an irreducible modulus polynomial representation: +\newline +\axiomType{FiniteField} \newline +\axiomType{FiniteFieldExtension} \newline +\axiomType{FiniteFieldExtensionByPolynomial} + +\texht{\hangafter=1\hangindent=2pc}{\noindent} +Constructors that generate a polynomial for you: +\newline +\axiomType{FiniteField} \newline +\axiomType{FiniteFieldExtension} \newline +\axiomType{FiniteFieldCyclicGroup} \newline +\axiomType{FiniteFieldCyclicGroupExtension} \newline +\axiomType{FiniteFieldNormalBasis} \newline +\axiomType{FiniteFieldNormalBasisExtension} + +\texht{\hangafter=1\hangindent=2pc}{\noindent} +Constructors for which you provide a polynomial: +\newline +\axiomType{FiniteFieldExtensionByPolynomial} \newline +\axiomType{FiniteFieldCyclicGroupExtensionByPolynomial} \newline +\axiomType{FiniteFieldNormalBasisExtensionByPolynomial} + +These constructors are discussed in the following sections where +we collect together descriptions of extension fields that have the +same underlying representation.\footnote{For +more information on the implementation aspects of finite +fields, see +J. Grabmeier, A. Scheerhorn, {\it Finite Fields in AXIOM,} +Technical Report, IBM Heidelberg Scientific Center, 1992.} + +If you don't really care about all this detail, just use +\axiomType{FiniteField}. +As your knowledge of your application and its Axiom implementation +grows, you can come back and choose an alternative constructor that +may improve the efficiency of your code. +Note that the exported operations are almost the same for all constructors +of finite field extensions and include the operations exported by +\axiomType{PrimeField}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemFiniteModulusTitle}{Irreducible Modulus Polynomial Representations} +\newcommand{\ugxProblemFiniteModulusNumber}{8.11.3.} + +@ +\section{Irreducible Modulus Polynomial Representations} +\label{ugxProblemFiniteModulusPage} +\begin{itemize} +\item ugxProblemFiniteExtensionFinitePage +\ref{ugxProblemFiniteExtensionFinitePage} on +page~\pageref{ugxProblemFiniteExtensionFinitePage} +\end{itemize} +\index{pages!ugxProblemFiniteModulusPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemFiniteModulusPage} +\index{ugxProblemFiniteModulusPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemFiniteModulusPage} +{8.11.3. Irreducible Modulus Polynomial Representations} +\beginscroll + +All finite field extension constructors discussed in this +section +use a representation that performs arithmetic with univariate +(one-variable) polynomials modulo an irreducible polynomial. +This polynomial may be given explicitly by you or automatically +generated. +The ground field may be the prime field or one you specify. +See +\downlink{``\ugxProblemFiniteExtensionFiniteTitle''} +{ugxProblemFiniteExtensionFinitePage} in Section +\ugxProblemFiniteExtensionFiniteNumber\ignore{ugxProblemFiniteExtensionFinite} +for general information about finite field extensions. + +For \axiomType{FiniteField} (abbreviation \axiomType{FF}) you provide a +prime number \smath{p} and an extension degree \smath{n}. +This degree can be 1. +% +\xtc{ +Axiom uses the prime field \axiomType{PrimeField(p)}, +here \axiomType{PrimeField 2}, +and it chooses an irreducible polynomial of degree \smath{n}, +here 12, over the ground field. +}{ +\spadpaste{GF4096 := FF(2,12); \bound{GF4096}} +} +% + +The objects in the generated field extension are polynomials +of degree at most \smath{n-1} with coefficients in the +prime field. +The polynomial indeterminate is automatically chosen by Axiom and +is typically something like \axiom{\%A} or \axiom{\%D}. +These (strange) variables are {\it only} for output display; +there are several ways to construct elements of this field. + +The operation \axiomFun{index} enumerates the elements of the field +extension and accepts as argument the integers from 1 to +\smath{p \texht{^}{**} n}. +% +\xtc{ +The expression +\axiom{index(p)} always gives the indeterminate. +}{ +\spadpaste{a := index(2)\$GF4096 \bound{a}\free{GF4096}} +} +% +% +\xtc{ +You can build polynomials in \smath{a} and calculate in +\axiom{GF4096}. +}{ +\spadpaste{b := a**12 - a**5 + a \bound{b}\free{a}} +} +\xtc{ +}{ +\spadpaste{b ** 1000 \free{b}} +} +\xtc{ +}{ +\spadpaste{c := a/b \free{a b}\bound{c}} +} +% +\xtc{ +Among the available operations are \axiomFun{norm} and \axiomFun{trace}. +}{ +\spadpaste{norm c \free{c}} +} +\xtc{ +}{ +\spadpaste{trace c \free{c}} +} +% +% + +Since any nonzero element is a power of a primitive element, how +do we discover what the exponent is? +% +\xtc{ +The operation \axiomFun{discreteLog} calculates +the exponent and, +if it is called with only one argument, always refers to the primitive +element returned by \axiomFun{primitiveElement}. +}{ +\spadpaste{dL := discreteLog a \free{a}\bound{dL}} +} +\xtc{ +}{ +\spadpaste{g ** dL \free{dL g}} +} + +\axiomType{FiniteFieldExtension} (abbreviation \axiomType{FFX}) is +similar to \axiomType{FiniteField} except that the +ground-field for \axiomType{FiniteFieldExtension} is arbitrary and +chosen by you. +% +\xtc{ +In case you select the prime field as ground field, there is +essentially no difference between the constructed two finite field +extensions. +}{ +\spadpaste{GF16 := FF(2,4); \bound{GF16}} +} +\xtc{ +}{ +\spadpaste{GF4096 := FFX(GF16,3); \bound{GF4096x}\free{GF16}} +} +\xtc{ +}{ +\spadpaste{r := (random()\$GF4096) ** 20 \free{GF4096x}\bound{r}} +} +\xtc{ +}{ +\spadpaste{norm(r) \free{r}} +} +% + +\axiomType{FiniteFieldExtensionByPolynomial} (abbreviation \axiomType{FFP}) +is similar to \axiomType{FiniteField} and \axiomType{FiniteFieldExtension} +but is more general. +% +\xtc{ +}{ +\spadpaste{GF4 := FF(2,2); \bound{GF4}} +} +\xtc{ +}{ +\spadpaste{f := nextIrreduciblePoly(random(6)\$FFPOLY(GF4))\$FFPOLY(GF4) \free{GF4}\bound{f}} +} +\xtc{ +For \axiomType{FFP} you choose both the +ground field and the irreducible polynomial used in the representation. +The degree of the extension is the degree of the polynomial. +}{ +\spadpaste{GF4096 := FFP(GF4,f); \bound{GF4096y}\free{f GF4}} +} +\xtc{ +}{ +\spadpaste{discreteLog random()\$GF4096 \free{GF4096y}} +} +% + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemFiniteCyclicTitle}{Cyclic Group Representations} +\newcommand{\ugxProblemFiniteCyclicNumber}{8.11.4.} + +@ +\section{Cyclic Group Representations} +\label{ugxProblemFiniteCyclicPage} +\begin{itemize} +\item ugxProblemFiniteUtilityPage \ref{ugxProblemFiniteUtilityPage} on +page~\pageref{ugxProblemFiniteUtilityPage} +\end{itemize} +\index{pages!ugxProblemFiniteCyclicPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemFiniteCyclicPage} +\index{ugxProblemFiniteCyclicPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemFiniteCyclicPage}{8.11.4. Cyclic Group Representations} +\beginscroll + +In every finite field there exist elements whose powers are all the +nonzero elements of the field. +Such an element is called a {\it primitive element}. + +In \axiomType{FiniteFieldCyclicGroup} (abbreviation \axiomType{FFCG}) +the nonzero elements are represented by the +powers of a fixed primitive +element +of the field (that is, a generator of its +cyclic multiplicative group). +Multiplication (and hence exponentiation) using this representation is easy. +To do addition, we consider our primitive element as the root of a primitive +polynomial (an irreducible polynomial whose +roots are all primitive). +See +\downlink{``\ugxProblemFiniteUtilityTitle''}{ugxProblemFiniteUtilityPage} +in Section \ugxProblemFiniteUtilityNumber\ignore{ugxProblemFiniteUtility} +for examples of how to +compute such a polynomial. + +% +\xtc{ +To use \axiomType{FiniteFieldCyclicGroup} you provide a prime number and an +extension degree. +}{ +\spadpaste{GF81 := FFCG(3,4); \bound{GF81}} +} +% +% +\xtc{ +Axiom uses the prime field, here \axiomType{PrimeField 3}, as the +ground field and it chooses a primitive polynomial of degree +\smath{n}, here 4, over the prime field. +}{ +\spadpaste{a := primitiveElement()\$GF81 \bound{a}\free{GF81}} +} +% +% +\xtc{ +You can calculate in \axiom{GF81}. +}{ +\spadpaste{b := a**12 - a**5 + a \bound{b}\free{a}} +} +% +\xtc{ +In this representation of finite fields the discrete logarithm +of an element can be seen directly in its output form. +}{ +\spadpaste{b \free{b}} +} +\xtc{ +}{ +\spadpaste{discreteLog b \free{b}} +} +% + +\axiomType{FiniteFieldCyclicGroupExtension} (abbreviation +\axiomType{FFCGX}) is similar to \axiomType{FiniteFieldCyclicGroup} +except that the ground field for +\axiomType{FiniteFieldCyclicGroupExtension} is arbitrary and chosen +by you. +In case you select the prime field as ground field, there is +essentially no difference between the constructed two finite field +extensions. +% +\xtc{ +}{ +\spadpaste{GF9 := FF(3,2); \bound{GF9}} +} +\xtc{ +}{ +\spadpaste{GF729 := FFCGX(GF9,3); \bound{GF729}\free{GF9}} +} +\xtc{ +}{ +\spadpaste{r := (random()\$GF729) ** 20 \free{GF729}\bound{r}} +} +\xtc{ +}{ +\spadpaste{trace(r) \free{r}} +} +% + +\axiomType{FiniteFieldCyclicGroupExtensionByPolynomial} +(abbreviation \axiomType{FFCGP}) +is similar to \axiomType{FiniteFieldCyclicGroup} and +\axiomType{FiniteFieldCyclicGroupExtension} +but is more general. +For \axiomType{FiniteFieldCyclicGroupExtensionByPolynomial} you choose both the +ground field and the irreducible polynomial used in the representation. +The degree of the extension is the degree of the polynomial. +% +\xtc{ +}{ +\spadpaste{GF3 := PrimeField 3; \bound{GF3}} +} +\xtc{ +We use a utility operation to generate an irreducible primitive +polynomial (see +\downlink{``\ugxProblemFiniteUtilityTitle''}{ugxProblemFiniteUtilityPage} +in Section \ugxProblemFiniteUtilityNumber\ignore{ugxProblemFiniteUtility}). +The polynomial has one variable that is ``anonymous'': it displays +as a question mark. +}{ +\spadpaste{f := createPrimitivePoly(4)\$FFPOLY(GF3) \bound{f}\free{GF3}} +} +\xtc{ +}{ +\spadpaste{GF81 := FFCGP(GF3,f); \bound{GF81x}\free{f GF3}} +} +\xtc{ +Let's look at a random element from this field. +}{ +\spadpaste{random()\$GF81 \free{GF81x}} +} +% + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemFiniteNormalTitle}{Normal Basis Representations} +\newcommand{\ugxProblemFiniteNormalNumber}{8.11.5.} + +@ +\section{Normal Basis Representations} +\label{ugxProblemFiniteNormalPage} +\begin{itemize} +\item ugxProblemFiniteUtilityPage \ref{ugxProblemFiniteUtilityPage} on +page~\pageref{ugxProblemFiniteUtilityPage} +\end{itemize} +\index{pages!ugxProblemFiniteNormalPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemFiniteNormalPage} +\index{ugxProblemFiniteNormalPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemFiniteNormalPage}{8.11.5. Normal Basis Representations} +\beginscroll + +Let \smath{K} be a finite extension of degree \smath{n} of the +finite field \smath{F} and let \smath{F} have \smath{q} +elements. +An element \smath{x} of \smath{K} is said to be +{\it normal} over \smath{F} if the elements +\centerline{{\axiom{1, x**q, x**(q**2), ..., x**(q**(n-1))}}} +form a basis of \smath{K} as a vector space over \smath{F}. +Such a basis is called a {\it normal basis}.\footnote{This +agrees with the general definition of a normal basis because the +\smath{n} distinct powers of the automorphism +\texht{$x \mapsto x^q$}{\axiom{x +-> x**q}} +constitute the Galois group of \smath{K/F}.} + +If \smath{x} is normal over \smath{F}, its minimal +polynomial is also said to be {\it normal} over \smath{F}. +There exist normal bases for all finite extensions of arbitrary +finite fields. + +In \axiomType{FiniteFieldNormalBasis} (abbreviation +\axiomType{FFNB}), the elements of the finite field are represented +by coordinate vectors with respect to a normal basis. + +\xtc{ +You provide a prime \smath{p} and an extension degree +\smath{n}. +}{ +\spadpaste{K := FFNB(3,8) \bound{K}} +} +% +Axiom uses the prime field \axiomType{PrimeField(p)}, +here \axiomType{PrimeField 3}, +and it chooses a normal polynomial of degree +\smath{n}, here 8, over the ground field. +The remainder class of the indeterminate is used +as the normal element. +The polynomial indeterminate is automatically chosen by Axiom and +is typically something like \axiom{\%A} or \axiom{\%D}. +These (strange) variables are only for output display; +there are several ways to construct elements of this field. +The output of the basis elements is something like +\texht{$\%A^{q^i}.$}{ +\begin{verbatim} + i + q +%A . +\end{verbatim} +} +% +\xtc{ +}{ +\spadpaste{a := normalElement()\$K \bound{a}\free{K}} +} +% +% +\xtc{ +You can calculate in \smath{K} using \smath{a}. +}{ +\spadpaste{b := a**12 - a**5 + a \bound{b}\free{a}} +} + +\axiomType{FiniteFieldNormalBasisExtension} (abbreviation +\axiomType{FFNBX}) is +similar to \axiomType{FiniteFieldNormalBasis} except that the +groundfield for \axiomType{FiniteFieldNormalBasisExtension} is arbitrary and +chosen by you. +In case you select the prime field as ground field, there is +essentially no difference between the constructed two finite field +extensions. +\xtc{ +}{ +\spadpaste{GF9 := FFNB(3,2); \bound{GF9}} +} +\xtc{ +}{ +\spadpaste{GF729 := FFNBX(GF9,3); \bound{GF729}\free{GF9}} +} +\xtc{ +}{ +\spadpaste{r := random()\$GF729 \bound{r}\free{GF729}} +} +\xtc{ +}{ +\spadpaste{r + r**3 + r**9 + r**27 \free{r}} +} + +\axiomType{FiniteFieldNormalBasisExtensionByPolynomial} +(abbreviation \axiomType{FFNBP}) is similar to +\axiomType{FiniteFieldNormalBasis} and +\axiomType{FiniteFieldNormalBasisExtension} but is more general. +For \axiomType{FiniteFieldNormalBasisExtensionByPolynomial} you +choose both the ground field and the irreducible polynomial used +in the representation. +The degree of the extension is the degree of the polynomial. + +% +\xtc{ +}{ +\spadpaste{GF3 := PrimeField 3; \bound{GF3}} +} +\xtc{ +We use a utility operation to generate an irreducible normal +polynomial (see +\downlink{``\ugxProblemFiniteUtilityTitle''}{ugxProblemFiniteUtilityPage} +in Section \ugxProblemFiniteUtilityNumber\ignore{ugxProblemFiniteUtility}). +The polynomial has one variable that is ``anonymous'': it displays +as a question mark. +}{ +\spadpaste{f := createNormalPoly(4)\$FFPOLY(GF3) \free{GF3}\bound{f}} +} +\xtc{ +}{ +\spadpaste{GF81 := FFNBP(GF3,f); \bound{GF81}\free{f GF3}} +} +\xtc{ +Let's look at a random element from this field. +}{ +\spadpaste{r := random()\$GF81 \free{GF81}\bound{r1}} +} +\xtc{ +}{ +\spadpaste{r * r**3 * r**9 * r**27 \free{r1}} +} +\xtc{ +}{ +\spadpaste{norm r \free{r1}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemFiniteConversionTitle}{Conversion Operations for Finite Fields} +\newcommand{\ugxProblemFiniteConversionNumber}{8.11.6.} + +@ +\section{Conversion Operations for Finite Fields} +\label{ugxProblemFiniteConversionPage} +\begin{itemize} +\item ugxProblemFiniteExtensionFinitePage +\ref{ugxProblemFiniteExtensionFinitePage} on +page~\pageref{ugxProblemFiniteExtensionFinitePage} +\end{itemize} +\index{pages!ugxProblemFiniteConversionPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemFiniteConversionPage} +\index{ugxProblemFiniteConversionPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemFiniteConversionPage} +{8.11.6. Conversion Operations for Finite Fields} +\beginscroll + +\labelSpace{5pc} +% +\xtc{ +Let \texht{$K$}{\axiom{K}} be a finite field. +}{ +\spadpaste{K := PrimeField 3 \bound{K}} +} +% +An extension field \texht{$K_m$}{\axiom{Km}} of degree +\smath{m} over \texht{$K$}{\axiom{K}} is a subfield of an +extension field \texht{$K_n$}{\axiom{Kn}} of degree \smath{n} +over \texht{$K$}{\axiom{K}} if and only if \smath{m} divides +\smath{n}. +\texht{ +\centerline{{\begin{tabular}{ccc}}} +\centerline{{$K_n$ }} +\centerline{{$|$ }} +\centerline{{$K_m$ & $\Longleftrightarrow$ & $m | n$ }} +\centerline{{$|$ }} +\centerline{{K}} +\centerline{{\end{tabular}}} +}{ +\begin{verbatim} +Kn +| +Km <==> m | n +| +K +\end{verbatim} +} +\axiomType{FiniteFieldHomomorphisms} provides conversion operations +between different extensions of one +fixed finite ground field and between different representations of +these finite fields. +\xtc{ +Let's choose \smath{m} and \smath{n}, +}{ +\spadpaste{(m,n) := (4,8) \bound{m n}} +} +\xtc{ +build the field extensions, +}{ +\spadpaste{Km := FiniteFieldExtension(K,m) \bound{Km}\free{K m}} +} +\xtc{ +and pick two random elements from the smaller field. +}{ +\spadpaste{Kn := FiniteFieldExtension(K,n) \bound{Kn}\free{K n}} +} +\xtc{ +}{ +\spadpaste{a1 := random()\$Km \bound{a1}\free{Km}} +} +\xtc{ +}{ +\spadpaste{b1 := random()\$Km \bound{b1}\free{Km}} +} +% +\xtc{ +Since \smath{m} divides \smath{n}, +\texht{$K_m$}{\axiom{Km}} is a subfield of \texht{$K_n$}{\axiom{Kn}}. +}{ +\spadpaste{a2 := a1 :: Kn \bound{a2}\free{a1 Kn}} +} +\xtc{ +Therefore we can convert the elements of \texht{$K_m$}{\axiom{Km}} +into elements of \texht{$K_n$}{\axiom{Kn}}. +}{ +\spadpaste{b2 := b1 :: Kn \bound{b2}\free{b1 Kn}} +} +% +% +\xtc{ +To check this, let's do some arithmetic. +}{ +\spadpaste{a1+b1 - ((a2+b2) :: Km) \free{a1 a2 b1 b2 Km Kn}} +} +\xtc{ +}{ +\spadpaste{a1*b1 - ((a2*b2) :: Km) \free{a1 a2 b1 b2 Km Kn}} +} +% +There are also conversions available for the +situation, when \texht{$K_m$}{\axiom{Km}} and \texht{$K_n$}{\axiom{Kn}} +are represented in different ways (see +\downlink{``\ugxProblemFiniteExtensionFiniteTitle''} +{ugxProblemFiniteExtensionFinitePage} in Section +\ugxProblemFiniteExtensionFiniteNumber +\ignore{ugxProblemFiniteExtensionFinite}). +For example let's choose \texht{$K_m$}{\axiom{Km}} where the +representation is 0 plus the cyclic multiplicative group and +\texht{$K_n$}{\axiom{Kn}} with a normal basis representation. +\xtc{ +}{ +\spadpaste{Km := FFCGX(K,m) \bound{Km2}\free{K m}} +} +\xtc{ +}{ +\spadpaste{Kn := FFNBX(K,n) \bound{Kn2}\free{K n}} +} +\xtc{ +}{ +\spadpaste{(a1,b1) := (random()\$Km,random()\$Km) \bound{a12 b12}\free{Km2}} +} +\xtc{ +}{ +\spadpaste{a2 := a1 :: Kn \bound{a22}\free{a12 Kn2}} +} +\xtc{ +}{ +\spadpaste{b2 := b1 :: Kn \bound{b22}\free{b12 Kn2}} +} +% +\xtc{ +Check the arithmetic again. +}{ +\spadpaste{a1+b1 - ((a2+b2) :: Km) \free{a12 a22 b12 b22 Km2}} +} +\xtc{ +}{ +\spadpaste{a1*b1 - ((a2*b2) :: Km) \free{a12 a22 b12 b22 Km2}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugxProblemFiniteUtilityTitle} +{Utility Operations for Finite Fields} +\newcommand{\ugxProblemFiniteUtilityNumber}{8.11.7.} + +@ +\section{Utility Operations for Finite Fields} +\label{ugxProblemFiniteUtilityPage} +\index{pages!ugxProblemFiniteUtilityPage!ug08.ht} +\index{ug08.ht!pages!ugxProblemFiniteUtilityPage} +\index{ugxProblemFiniteUtilityPage!ug08.ht!pages} +<>= +\begin{page}{ugxProblemFiniteUtilityPage} +{8.11.7. Utility Operations for Finite Fields} +\beginscroll + +\axiomType{FiniteFieldPolynomialPackage} (abbreviation +\axiomType{FFPOLY}) +provides operations for generating, counting and testing polynomials +over finite fields. Let's start with a couple of definitions: +\indent{4} +\beginitems +\item[-] A polynomial is {\it primitive} if its roots are primitive +elements in an extension of the coefficient field of degree equal +to the degree of the polynomial. +\item[-] A polynomial is {\it normal} over its coefficient field +if its roots are linearly independent +elements in an extension of the coefficient field of degree equal +to the degree of the polynomial. +\enditems +\indent{0} +In what follows, many of the generated polynomials have one +``anonymous'' variable. +This indeterminate is displayed as a question mark (\spadSyntax{?}). + +\xtc{ +To fix ideas, let's use the field with five elements for the first +few examples. +}{ +\spadpaste{GF5 := PF 5; \bound{GF5}} +} +% +% +\xtc{ +You can generate irreducible polynomials of any (positive) degree +(within the storage capabilities of the computer and your ability +to wait) by using +\axiomFunFrom{createIrreduciblePoly}{FiniteFieldPolynomialPackage}. +}{ +\spadpaste{f := createIrreduciblePoly(8)\$FFPOLY(GF5) \bound{f}\free{GF5}} +} +% +\xtc{ +Does this polynomial have other important properties? Use +\axiomFun{primitive?} to test whether it is a primitive polynomial. +}{ +\spadpaste{primitive?(f)\$FFPOLY(GF5) \free{f}} +} +\xtc{ +Use \axiomFun{normal?} to test whether it is a normal polynomial. +}{ +\spadpaste{normal?(f)\$FFPOLY(GF5) \free{f}} +} +\noindent +Note that this is actually a trivial case, +because a normal polynomial of degree \smath{n} +must have a nonzero term of degree \smath{n-1}. +We will refer back to this later. + +\xtc{ +To get a primitive polynomial of degree 8 just issue this. +}{ +\spadpaste{p := createPrimitivePoly(8)\$FFPOLY(GF5) \bound{p}\free{GF5}} +} +\xtc{ +}{ +\spadpaste{primitive?(p)\$FFPOLY(GF5) \free{p}} +} +\xtc{ +This polynomial is not normal, +}{ +\spadpaste{normal?(p)\$FFPOLY(GF5) \free{p}} +} +\xtc{ +but if you want a normal one simply write this. +}{ +\spadpaste{n := createNormalPoly(8)\$FFPOLY(GF5) \bound{n} \free{GF5}} +} +\xtc{ +This polynomial is not primitive! +}{ +\spadpaste{primitive?(n)\$FFPOLY(GF5) \free{n}} +} +This could have been seen directly, as +the constant term is 1 here, which is not a primitive +element up to the factor (\axiom{-1}) raised to the degree of the +polynomial.\footnote{Cf. Lidl, R. \& Niederreiter, +H., {\it Finite Fields,} Encycl. of Math. 20, (Addison-Wesley, 1983), +p.90, Th. 3.18.} + +What about +polynomials that are both primitive and normal? +The existence of such a polynomial is by no means obvious. +\footnote{The existence of such polynomials is proved in +Lenstra, H. W. \& Schoof, R. J., {\it Primitive +Normal Bases for Finite Fields,} Math. Comp. 48, 1987, pp. 217-231.} +% +\xtc{ +If you really need one use either +\axiomFunFrom{createPrimitiveNormalPoly}{FiniteFieldPolynomialPackage} or +\axiomFunFrom{createNormalPrimitivePoly}{FiniteFieldPolynomialPackage}. +}{ +\spadpaste{createPrimitiveNormalPoly(8)\$FFPOLY(GF5) \free{GF5}} +} +% + +If you want to obtain additional polynomials of the various types above +as given by the {\bf create...} operations above, you can use the {\bf +next...} operations. +For instance, +\axiomFunFrom{nextIrreduciblePoly}{FiniteFieldPolynomialPackage} yields +the next monic irreducible polynomial with the same degree as the input +polynomial. +By ``next'' we mean ``next in a natural order using the terms and +coefficients.'' +This will become more clear in the following examples. + +\xtc{ +This is the field with five elements. +}{ +\spadpaste{GF5 := PF 5; \bound{GF5}} +} +% +\xtc{ +Our first example irreducible polynomial, say +of degree 3, must be ``greater'' than this. +}{ +\spadpaste{h := monomial(1,8)\$SUP(GF5) \bound{h}\free{GF5}} +} +\xtc{ +You can generate it by doing this. +}{ +\spadpaste{nh := nextIrreduciblePoly(h)\$FFPOLY(GF5) \bound{nh}\free{h}} +} +% +\xtc{ +Notice that this polynomial is not the same as the one +\axiomFunFrom{createIrreduciblePoly}{FiniteFieldPolynomialPackage}. +}{ +\spadpaste{createIrreduciblePoly(3)\$FFPOLY(GF5) \free{GF5}} +} +\xtc{ +You can step through all irreducible polynomials of degree 8 over +the field with 5 elements by repeatedly issuing this. +}{ +\spadpaste{nh := nextIrreduciblePoly(nh)\$FFPOLY(GF5) \free{nh}} +} +\xtc{ +You could also ask for the total number of these. +}{ +\spadpaste{numberOfIrreduciblePoly(5)\$FFPOLY(GF5) \free{GF5}} +} + +We hope that ``natural order'' on polynomials is now clear: +first we compare the number of monomials of +two polynomials (``more'' is ``greater''); +then, if necessary, the degrees of these monomials (lexicographically), +and lastly their coefficients (also +lexicographically, and using the operation \axiomFun{lookup} if +our field is not a prime field). +Also note that we make both polynomials monic before looking at the +coefficients: +multiplying either polynomial by a nonzero constant +produces the same result. + +% +\xtc{ +The package +\axiomType{FiniteFieldPolynomialPackage} also provides similar +operations for primitive and normal polynomials. With +the exception of the number of primitive normal polynomials; +we're not aware of any known formula for this. +}{ +\spadpaste{numberOfPrimitivePoly(3)\$FFPOLY(GF5) \free{GF5}} +} +% +% +\xtc{ +Take these, +}{ +\spadpaste{m := monomial(1,1)\$SUP(GF5) \bound{m}\free{GF5}} +} +\xtc{ +}{ +\spadpaste{f := m**3 + 4*m**2 + m + 2 \bound{fx}\free{m}} +} +% +% +\xtc{ +and then we have: +}{ +\spadpaste{f1 := nextPrimitivePoly(f)\$FFPOLY(GF5) \free{fx}\bound{f1}} +} +\xtc{ +What happened? +}{ +\spadpaste{nextPrimitivePoly(f1)\$FFPOLY(GF5) \free{f1}} +} +% +Well, for the ordering used in +\axiomFunFrom{nextPrimitivePoly}{FiniteFieldPolynomialPackage} we +use as first criterion a comparison of the constant terms of the +polynomials. +Analogously, in +\axiomFunFrom{nextNormalPoly}{FiniteFieldPolynomialPackage} we first +compare the monomials of degree 1 less than the degree of the +polynomials (which is nonzero, by an earlier remark). +% +\xtc{ +}{ +\spadpaste{f := m**3 + m**2 + 4*m + 1 \bound{fy} \free{m}} +} +\xtc{ +}{ +\spadpaste{f1 := nextNormalPoly(f)\$FFPOLY(GF5) \free{fy}\bound{f1y}} +} +\xtc{ +}{ +\spadpaste{nextNormalPoly(f1)\$FFPOLY(GF5) \free{f1y}} +} +% +\noindent +We don't have to restrict ourselves to prime fields. +% +\xtc{ +Let's consider, say, a field with 16 elements. +}{ +\spadpaste{GF16 := FFX(FFX(PF 2,2),2); \bound{GF16} } +} +% +% +\xtc{ +We can apply any of the operations described above. +}{ +\spadpaste{createIrreduciblePoly(5)\$FFPOLY(GF16) \free{GF16}} +} + +\xtc{ +Axiom also provides operations +for producing random polynomials of a given degree +}{ +\spadpaste{random(5)\$FFPOLY(GF16) \free{GF16}} +} +\xtc{ +or with degree between two given bounds. +}{ +\spadpaste{random(3,9)\$FFPOLY(GF16) \free{GF16}} +} + +\axiomType{\axiom{FiniteFieldPolynomialPackage2}} (abbreviation +\axiomType{FFPOLY2}) +exports an operation \axiomFun{rootOfIrreduciblePoly} +for finding one root of an irreducible polynomial \axiom{f} +in an extension field of the coefficient field. +The degree of the extension has to be a multiple of the degree of \axiom{f}. +It is not checked whether \axiom{f} actually is irreducible. + +% +\xtc{ +To illustrate this operation, we fix a ground field \axiom{GF} +}{ +\spadpaste{GF2 := PrimeField 2; \bound{GF2}} +} +% +% +\xtc{ +and then an extension field. +}{ +\spadpaste{F := FFX(GF2,12) \bound{F}\free{GF2}} +} +% +% +\xtc{ +We construct an irreducible polynomial over \axiom{GF2}. +}{ +\spadpaste{f := createIrreduciblePoly(6)\$FFPOLY(GF2) \bound{fz}\free{GF2}} +} +% +% +\xtc{ +We compute a root of \axiom{f}. +}{ +\spadpaste{root := rootOfIrreduciblePoly(f)\$FFPOLY2(F,GF2) \free{F GF2 fz}\bound{root}} +} +% +%and check the result +%\spadcommand{eval(f, monomial(1,1)\$SUP(F) = root) \free{fz F root}} + +%********************************************************************* +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemIdealTitle}{Primary Decomposition of Ideals} +\newcommand{\ugProblemIdealNumber}{8.12.} + +@ +\section{Primary Decomposition of Ideals} +\label{ugProblemIdealPage} +\index{pages!ugProblemIdealPage!ug08.ht} +\index{ug08.ht!pages!ugProblemIdealPage} +\index{ugProblemIdealPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemIdealPage}{8.12. Primary Decomposition of Ideals} +\beginscroll +%********************************************************************* +% +Axiom provides a facility for the primary decomposition +of +polynomial ideals over fields of characteristic zero. +The algorithm +%is discussed in \cite{gtz:gbpdpi} and +works in essentially two steps: +\indent{4} +\beginitems +\item[1. ] the problem is solved for 0-dimensional ideals by ``generic'' +projection on the last coordinate +\item[2. ] a ``reduction process'' uses localization and ideal quotients +to reduce the general case to the 0-dimensional one. +\enditems +\indent{0} +The Axiom constructor \axiomType{PolynomialIdeals} +represents ideals with coefficients in any field and +supports the basic ideal operations, +including intersection, sum and quotient. +\axiomType{IdealDecompositionPackage} contains the specific +operations for the primary decomposition and the computation of the +radical of an ideal with polynomial +coefficients in a field of characteristic 0 with +an effective algorithm for factoring polynomials. + +The following examples illustrate the capabilities of this facility. +% +\xtc{ +First consider the ideal generated by +\texht{$x^2 + y^2 - 1$}{\axiom{x**2 + y**2 - 1}} +(which defines a circle in the \axiom{(x,y)}-plane) and the ideal +generated by \texht{$x^2 - y^2$}{\axiom{x**2 - y**2}} (corresponding to the +straight lines \axiom{x = y} and \axiom{x = -y}. +}{ +\spadpaste{(n,m) : List DMP([x,y],FRAC INT) \bound{nm}} +} +\xtc{ +}{ +\spadpaste{m := [x**2+y**2-1] \free{nm} \bound{m}} +} +\xtc{ +}{ +\spadpaste{n := [x**2-y**2] \free{nm} \bound{n}} +} +% +% +\xtc{ +We find the equations defining the intersection of the two loci. +This correspond to the sum of the associated ideals. +}{ +\spadpaste{id := ideal m + ideal n \free{n m} \bound{id}} +} +% +% +\xtc{ +We can check if the locus contains only a finite number of points, +that is, if the ideal is zero-dimensional. +}{ +\spadpaste{zeroDim? id \free{id}} +} +\xtc{ +}{ +\spadpaste{zeroDim?(ideal m) \free{m}} +} +\xtc{ +}{ +\spadpaste{dimension ideal m \free{m}} +} +\xtc{ +We can find polynomial relations among the generators +(\axiom{f} and \axiom{g} are the parametric equations of the knot). +}{ +\spadpaste{(f,g):DMP([x,y],FRAC INT) \bound{fg}} +} +\xtc{ +}{ +\spadpaste{f := x**2-1 \free{fg} \bound{f}} +} +\xtc{ +}{ +\spadpaste{g := x*(x**2-1) \free{fg} \bound{g}} +} +\xtc{ +}{ +\spadpaste{relationsIdeal [f,g] \free{f g}} +} + +\xtc{ +We can compute the primary decomposition of an ideal. +}{ +\spadpaste{l: List DMP([x,y,z],FRAC INT) \bound{ll}} +} +\xtc{ +}{ +\spadpaste{l:=[x**2+2*y**2,x*z**2-y*z,z**2-4] \free{ll} \bound{l}} +} +\xtc{ +}{ +\spadpaste{ld:=primaryDecomp ideal l \free{l} \bound{ld}} +} +\xtc{ +We can intersect back. +}{ +\spadpaste{reduce(intersect,ld) \free{ld}} +} + +\xtc{ +We can compute the radical of every primary component. +}{ +\spadpaste{reduce(intersect,[radical ld.i for i in 1..2]) \free{ld}} +} +\xtc{ +Their intersection is equal to the radical of the ideal of \axiom{l}. +}{ +\spadpaste{radical ideal l \free{l}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemGaloisTitle}{Computation of Galois Groups} +\newcommand{\ugProblemGaloisNumber}{8.13.} + +@ +\section{Computation of Galois Groups} +\label{ugProblemGaloisPage} +\begin{itemize} +\item FactoredXmpPage \ref{FactoredXmpPage} on +page~\pageref{FactoredXmpPage} +\item ugAvailCLEFPage \ref{ugAvailCLEFPage} on +page~\pageref{ugAvailCLEFPage} +\end{itemize} +\index{pages!ugProblemGaloisPage!ug08.ht} +\index{ug08.ht!pages!ugProblemGaloisPage} +\index{ugProblemGaloisPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemGaloisPage}{8.13. Computation of Galois Groups} +\beginscroll +% +As a sample use of Axiom's algebraic number facilities, +we compute +the Galois group of the polynomial +\texht{$p(x) = x^5 - 5 x + 12$}{\axiom{p(x) = x**5 - 5*x + 12}}. +% +\xtc{ +}{ +\spadpaste{p := x**5 - 5*x + 12 \bound{p}} +} +% +We would like to construct a polynomial \smath{f(x)} +such that the splitting +field +of \smath{p(x)} is generated by one root of \smath{f(x)}. +First we construct a polynomial \smath{r = r(x)} such that one +root of \smath{r(x)} generates the field generated by two roots of +the polynomial \smath{p(x)}. +(As it will turn out, the field generated by two roots of +\smath{p(x)} is, in fact, the splitting field of +\smath{p(x)}.) + +From the proof of the primitive element theorem we know that +if \smath{a} and \smath{b} are +algebraic numbers, then the field +\texht{${\bf Q}(a,b)$}{\axiom{Q(a,b)}} is equal to +\texht{${\bf Q}(a+kb)$}{\axiom{Q(a + k*b)}} for an +appropriately chosen integer \smath{k}. +In our case, we construct the minimal polynomial of +\texht{$a_i - a_j$}{\axiom{a[i] - a[j]}}, where +\texht{$a_i$}{\axiom{a[i]}} and +\texht{$a_j$}{\axiom{a[j]}} are two roots of \smath{p(x)}. +We construct this polynomial using \axiomFun{resultant}. +The main result we need is the following: +If \smath{f(x)} is a polynomial with roots +\texht{$a_i \ldots a_m$}{\axiom{a[1]...a[m]}} and +\smath{g(x)} is a polynomial +with roots +\texht{$b_i \ldots b_n$}{\axiom{b[1]...b[n]}}, then the polynomial +\axiom{h(x) = resultant(f(y), g(x-y), y)} +is a polynomial of degree \smath{m*n} with +roots +\texht{$a_i + b_j, i = 1 \ldots m, j = 1 \ldots n$} +{\axiom{a[i] + b[j], 1 <= i <= m, 1 <= j <= n}}. + +\xtc{ +For \smath{f(x)} we use the polynomial \smath{p(x)}. +For \smath{g(x)} we use the polynomial \smath{-p(-x)}. +Thus, the polynomial we first construct is +\axiom{resultant(p(y), -p(y-x), y)}. +}{ +\spadpaste{q := resultant(eval(p,x,y),-eval(p,x,y-x),y) \free{p} \bound{q}} +} +% +The roots of \smath{q(x)} are +\texht{$a_i - a_j, i \leq 1, j \leq 5$} +{\axiom{a[i] - a[j], 1 <= i,j <= 5}}. +Of course, there are five pairs \smath{(i,j)} with \smath{i = j}, +so \axiom{0} is a 5-fold root of \smath{q(x)}. +% +\xtc{ +Let's get rid of this factor. +}{ +\spadpaste{q1 := exquo(q, x**5) \free{q} \bound{q1}} +} +\xtc{ +Factor the polynomial \axiom{q1}. +}{ +\spadpaste{factoredQ := factor q1 \free{q1} \bound{factoredQ}} +} +% +We see that \axiom{q1} has two irreducible factors, each of degree \axiom{10}. +(The fact that the polynomial \axiom{q1} has two factors of +degree \axiom{10} is enough to show +that the Galois group of \smath{p(x)} is the dihedral group of +order \axiom{10}.\footnote{See McKay, Soicher, Computing Galois Groups +over the Rationals, Journal of Number Theory 20, 273-281 (1983). +We do not assume the results of this paper, however, and we continue with +the computation.} +Note that the type of \axiom{factoredQ} is \axiomType{FR POLY INT}, that is, +\axiomType{Factored Polynomial Integer}. +This is a special data type for recording factorizations of polynomials with +integer coefficients (see \downlink{`Factored'}{FactoredXmpPage} +\ignore{Factored}). +% +\xtc{ +We can access the individual factors using the operation +\axiomFunFrom{nthFactor}{Factored}. +}{ +\spadpaste{r := nthFactor(factoredQ,1) \free{factoredQ} \bound{r}} +} +% + +Consider the polynomial \smath{r = r(x)}. +This is the minimal polynomial of the difference of two roots of +\smath{p(x)}. +Thus, the splitting field of \smath{p(x)} contains a subfield of +degree \axiom{10}. +We show that this subfield is, in fact, the splitting field of +\smath{p(x)} by showing that \smath{p(x)} factors completely +over this field. +% +\xtc{ +First we create a symbolic root of the polynomial \smath{r(x)}. +(We replaced \axiom{x} by \axiom{b} in the +polynomial \axiom{r} so that our symbolic root would be +printed as \axiom{b}.) +}{ +\spadpaste{beta:AN := rootOf(eval(r,x,b)) \free{r} \bound{beta}} +} +\xtc{ +We next tell Axiom to view \smath{p(x)} as a univariate polynomial +in \axiom{x} +with algebraic number coefficients. +This is accomplished with this type declaration. +}{ +\spadpaste{p := p::UP(x,INT)::UP(x,AN) \free{p} \bound{declareP}} +} +% +% +\xtc{ +Factor \smath{p(x)} over the field +\texht{${\bf Q}(\beta)$}{\axiom{Q(beta)}}. +(This computation will take some time!) +}{ +\spadpaste{algFactors := factor(p,[beta]) \free{declareP beta} \bound{algFactors}} +} +% +When factoring over number fields, it is important to specify the +field over which the polynomial is to be factored, as polynomials +have different factorizations over different fields. +When you use the operation \axiomFun{factor}, the field over which +the polynomial is factored is the field generated by +\indent{4} +\beginitems +\item[1. ] the algebraic numbers that appear +in the coefficients of the polynomial, and +\item[2. ] the algebraic numbers that +appear in a list passed as an optional second argument of the operation. +\enditems +\indent{0} +In our case, the coefficients of \axiom{p} +are all rational integers and only \axiom{beta} +appears in the list, so the field is simply +\texht{${\bf Q}(\beta)$}{\axiom{Q(beta)}}. +% +\xtc{ +It was necessary to give the list \axiom{[beta]} +as a second argument of the operation +because otherwise the polynomial would have been factored over the field +generated by its coefficients, namely the rational numbers. +}{ +\spadpaste{factor(p) \free{declareP}} +} +% +We have shown that the splitting field of \smath{p(x)} has degree +\axiom{10}. +Since the symmetric group of degree 5 has only one transitive subgroup +of order \axiom{10}, we know that the Galois group of \smath{p(x)} must be +this group, the dihedral group +of order \axiom{10}. +Rather than stop here, we explicitly compute the action of the Galois +group on the roots of \smath{p(x)}. + +First we assign the roots of \smath{p(x)} as the values of five +variables. +\xtc{ +We can obtain an individual root by negating the constant coefficient of +one of the factors of \smath{p(x)}. +}{ +\spadpaste{factor1 := nthFactor(algFactors,1) \free{algFactors} \bound{factor1}} +} +\xtc{ +}{ +\spadpaste{root1 := -coefficient(factor1,0) \free{factor1} \bound{root1}} +} +% +% +\xtc{ +We can obtain a list of all the roots in this way. +}{ +\spadpaste{roots := [-coefficient(nthFactor(algFactors,i),0) for i in 1..5] \free{algFactors} \bound{roots}} +} + +The expression +\begin{verbatim} +- coefficient(nthFactor(algFactors, i), 0)} +\end{verbatim} +is the \eth{\axiom{i }} root +of \smath{p(x)} and the elements of \axiom{roots} are the \eth{\axiom{i }} +roots of \smath{p(x)} as \axiom{i} ranges from \axiom{1} to \axiom{5}. + +\xtc{ +Assign the roots as the values of the variables \axiom{a1,...,a5}. +}{ +\spadpaste{(a1,a2,a3,a4,a5) := (roots.1,roots.2,roots.3,roots.4,roots.5) \free{roots} \bound{ais}} +} +% + +Next we express the roots of \smath{r(x)} as polynomials in +\axiom{beta}. +We could obtain these roots by calling the operation \axiomFun{factor}: +\axiom{factor(r, [beta])} factors \axiom{r(x)} over +\texht{${\bf Q}(\beta)$}{\axiom{Q(beta)}}. +However, this is a lengthy computation and we can obtain the roots of +\smath{r(x)} as differences of the roots \axiom{a1,...,a5} of +\smath{p(x)}. +Only ten of these differences are roots of \smath{r(x)} and the +other ten are roots +of the other irreducible factor of \axiom{q1}. +We can determine if a given value is a root of \smath{r(x)} by evaluating +\smath{r(x)} at that particular value. +(Of course, the order in which factors are returned by the +operation \axiomFun{factor} +is unimportant and may change with different implementations of the operation. +Therefore, we cannot predict in advance which differences are roots of +\smath{r(x)} and which are not.) +% +\xtc{ +Let's look at four examples (two are roots of \smath{r(x)} and +two are not). +}{ +\spadpaste{eval(r,x,a1 - a2) \free{ais}} +} +\xtc{ +}{ +\spadpaste{eval(r,x,a1 - a3) \free{ais}} +} +\xtc{ +}{ +\spadpaste{eval(r,x,a1 - a4) \free{ais}} +} +\xtc{ +}{ +\spadpaste{eval(r,x,a1 - a5) \free{ais}} +} +% + +Take one of the differences that was a root of \smath{r(x)} +and assign it to the variable \axiom{bb}. +\xtc{ +For example, if \axiom{eval(r,x,a1 - a4)} returned \axiom{0}, you would +enter this. +}{ +\spadpaste{bb := a1 - a4 \free{ais} \bound{bb}} +} +Of course, if the difference is, in fact, equal to the root \axiom{beta}, +you should choose another root of \smath{r(x)}. + +Automorphisms of the splitting field are given by mapping a generator of +the field, namely \axiom{beta}, to other roots of its minimal polynomial. +Let's see what happens when \axiom{beta} is mapped to \axiom{bb}. +% +\xtc{ +We compute the images of the roots \axiom{a1,...,a5} +under this automorphism: +}{ +\spadpaste{aa1 := subst(a1,beta = bb) \free{beta bb ais} \bound{aa1}} +} +\xtc{ +}{ +\spadpaste{aa2 := subst(a2,beta = bb) \free{beta bb ais} \bound{aa2}} +} +\xtc{ +}{ +\spadpaste{aa3 := subst(a3,beta = bb) \free{beta bb ais} \bound{aa3}} +} +\xtc{ +}{ +\spadpaste{aa4 := subst(a4,beta = bb) \free{beta bb ais} \bound{aa4}} +} +\xtc{ +}{ +\spadpaste{aa5 := subst(a5,beta = bb) \free{beta bb ais} \bound{aa5}} +} +% +Of course, the values \axiom{aa1,...,aa5} are simply a permutation of the values +\axiom{a1,...,a5}. +% +\xtc{ +Let's find the value of \axiom{aa1} (execute as many of the following five commands +as necessary). +}{ +\spadpaste{(aa1 = a1) :: Boolean \free{aa1}} +} +\xtc{ +}{ +\spadpaste{(aa1 = a2) :: Boolean \free{aa1}} +} +\xtc{ +}{ +\spadpaste{(aa1 = a3) :: Boolean \free{aa1}} +} +\xtc{ +}{ +\spadpaste{(aa1 = a4) :: Boolean \free{aa1}} +} +\xtc{ +}{ +\spadpaste{(aa1 = a5) :: Boolean \free{aa1}} +} +% +Proceeding in this fashion, you can find the values of +\axiom{aa2,...aa5}.\footnote{Here you should use the +\Clef{} line editor. +See \downlink{``\ugAvailCLEFTitle''}{ugAvailCLEFPage} in Section +\ugAvailCLEFNumber\ignore{ugAvailCLEF} for more information about \Clef{}.} +You have represented the automorphism \axiom{beta -> bb} +as a permutation of the roots \axiom{a1,...,a5}. +If you wish, you can repeat this computation for all the roots of +\smath{r(x)} and represent the Galois group of +\smath{p(x)} as a subgroup of the symmetric group on five letters. + +Here are two other problems that you may attack in a similar fashion: +\indent{4} +\beginitems +\item[1. ] Show that the Galois group of +\texht{$p(x) = x^4 + 2 x^3 - 2 x^2 - 3 x + 1$}{\axiom{ +p(x) = x**4 + 2*x**3 - 2*x**2 - 3*x + 1}} +is the dihedral group of order eight. +(The splitting field of this polynomial is the Hilbert class field +of +the quadratic field +\texht{${\bf Q}(\sqrt{145})$}{\axiom{Q(sqrt(145))}}.) +\item[2. ] Show that the Galois group of +\texht{$p(x) = x^6 + 108$}{\axiom{p(x) = x**6 + 108}} +has order 6 and is +isomorphic to \texht{$S_3,$}{} the symmetric group on three letters. +(The splitting field of this polynomial is the splitting field of +\texht{$x^3 - 2$}{\axiom{x**3 - 2}}.) +\enditems +\indent{0} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugProblemGeneticTitle}{Non-Associative Algebras and Modelling Genetic Laws} +\newcommand{\ugProblemGeneticNumber}{8.14.} + +@ +\section{Non-Associative Algebras and Modelling Genetic Laws} +\label{ugProblemGeneticPage} +\begin{itemize} +\item OctonionXmpPage \ref{OctonionXmpPage} on +page~\pageref{OctonionXmpPage} +\end{itemize} +\index{pages!ugProblemGeneticPage!ug08.ht} +\index{ug08.ht!pages!ugProblemGeneticPage} +\index{ugProblemGeneticPage!ug08.ht!pages} +<>= +\begin{page}{ugProblemGeneticPage} +{8.14. Non-Associative Algebras and Modelling Genetic Laws} +\beginscroll + +Many algebraic structures of mathematics and Axiom +have a multiplication operation \axiomOp{*} that satisfies +the associativity law +\texht{$a*(b*c) = (a*b)*c$}{\spad{a*(b*c) = (a*b)*c}} +for all \smath{a}, \smath{b} and \smath{c}. +The octonions (see +\downlink{`Octonion'}{OctonionXmpPage}\ignore{Octonion}) +are a well known exception. +There are many other interesting non-associative structures, such as the +class of +Lie algebras.\footnote{Two Axiom implementations of Lie algebras +are \spadtype{LieSquareMatrix} and \spadtype{FreeNilpotentLie}.} +Lie algebras can be used, for example, to analyse Lie symmetry algebras of +partial differential +equations. +In this section we show a different application of non-associative algebras, +the modelling of genetic laws. + +The Axiom library contains several constructors for +creating non-assoc\-i\-a\-tive structures, +ranging from the categories \spadtype{Monad}, +\spadtype{NonAssociativeRng}, and +\spadtype{FramedNonAssociativeAlgebra}, to the domains +\spadtype{AlgebraGivenByStructuralConstants} and +\spadtype{GenericNonAssociativeAlgebra}. +Furthermore, the package \spadtype{AlgebraPackage} provides +operations for analysing the structure of such algebras.\footnote{% +The interested reader can learn more about these aspects of the +Axiom library from the paper +``Computations in Algebras of Finite Rank,'' +by Johannes Grabmeier and Robert Wisbauer, +Technical Report, IBM Heidelberg Scientific Center, 1992.} + +Mendel's genetic laws are often written in a form like +\texht{ +\narrowDisplay{Aa \times Aa = {1\over 4}AA + {1\over 2}Aa + {1\over 4}aa.}}{ +\spad{Aa * Aa = (1/4)*AA + (1/2)*Aa + (1/4)*aa.} +} +The implementation of general algebras in Axiom allows us to +use this as the definition for multiplication in an algebra. +Hence, it is possible to study +questions of genetic inheritance using Axiom. +To demonstrate this more precisely, we discuss one example from a +monograph of \texht{A. W\"orz-Busekros}{A. Woerz-Busekros}, +where you can also find a general setting of this theory.\footnote{% +\texht{W\"{o}rz-Busekros}{Woerz-Busekros}, A., +{\it Algebras in Genetics}, +Springer Lectures Notes in Biomathematics 36, Berlin e.a. (1980). +In particular, see example 1.3.} + +We assume that there is an infinitely large random mating population. +Random mating of two gametes \texht{$a_i$}{\spad{ai}} and +\texht{$a_j$}{\spad{aj}} gives zygotes +\texht{$a_ia_j$}{\spad{ai aj}}, which produce new gametes. +In classical Mendelian segregation we have +\texht{$a_ia_j = {1 \over 2}a_i+{1 \over 2}a_j$}{\spad{ai aj = (1/2)*ai+(1/2)*aj}}. +In general, we have +\texht{\narrowDisplay{a_ia_j = \sum_{k=1}^n \gamma_{i,j}^k\ a_k.}}% +{\spad{ai aj = gammaij1 a1 + gammaij2 a2 + ... + gammaijn an}} +The segregation rates \texht{$\gamma_{i,j}$}{\spad{gammaij}} +are the structural constants of an +\smath{n}-dimensional algebra. +This is provided in Axiom by +the constructor \spadtype{AlgebraGivenByStructuralConstants} +(abbreviation \spadtype{ALGSC}). + +Consider two coupled autosomal loci with alleles +\smath{A},\smath{a}, \smath{B}, and \smath{b}, building four +different gametes +\texht{$a_1 = AB, a_2 = Ab, a_3 = aB,$ and $a_4 = ab$}% +{\spad{a1 := AB, a2 := Ab, a3 := aB,} and \spad{a4 := ab}}. +The zygotes \texht{$a_ia_j$}{\spad{ai aj}} +produce gametes \texht{$a_i$}{\spad{ai}} and +\texht{$a_j$}{\spad{aj}} +with classical Mendelian segregation. +Zygote \texht{$a_1a_4$}{a1 a4} undergoes transition +to \texht{$a_2a_3$}{\spad{a2 a3}} +and vice versa with probability +\texht{$0 \le \theta \le {1\over 2}$}{0 <= theta <= 1/2}. + +\xtc{ +Define a list +\texht{$[(\gamma_{i,j}^k) 1 \le k \le 4]$}{\spad{[(gammaijk) 1 <= k <= 4]}} +of four four-by-four matrices giving the segregation +rates. +We use the value \smath{1/10} for \smath{\theta}. +}{ +\spadpaste{segregationRates : List SquareMatrix(4,FRAC INT) := [matrix [ [1, 1/2, 1/2, 9/20], [1/2, 0, 1/20, 0], [1/2, 1/20, 0, 0], [9/20, 0, 0, 0] ], matrix [ [0, 1/2, 0, 1/20], [1/2, 1, 9/20, 1/2], [0, 9/20, 0, 0], [1/20, 1/2, 0, 0] ], matrix [ [0, 0, 1/2, 1/20], [0, 0, 9/20, 0], [1/2, 9/20, 1, 1/2], [1/20, 0, 1/2, 0] ], matrix [ [0, 0, 0, 9/20], [0, 0, 1/20, 1/2], [0, 1/20, 0, 1/2], [9/20, 1/2, 1/2, 1] ] ] \bound{segregationRates}} +} +\xtc{ +Choose the appropriate symbols for the basis of gametes, +}{ +\spadpaste{gametes := ['AB,'Ab,'aB,'ab] \bound{gametes}} +} +\xtc{ +Define the algebra. +}{ +\spadpaste{A := ALGSC(FRAC INT, 4, gametes, segregationRates);\bound{A}\free{gametes, segregationRates}} +} + +\xtc{ +What are the probabilities for zygote +\texht{$a_1a_4$}{a1 a4} to produce the different gametes? +}{ +\spadpaste{a := basis()\$A; a.1*a.4} +} + +Elements in this algebra whose coefficients sum to one play a +distinguished role. +They represent a population with the distribution of gametes +reflected by the coefficients with respect to the basis of +gametes. + +Random mating of different populations \smath{x} and \smath{y} is described by +their product \smath{x*y}. + +\xtc{ +This product is commutative only +if the gametes are not sex-dependent, as in our example. +}{ +\spadpaste{commutative?()\$A \free{A}} +} +\xtc{ +In general, it is not associative. +}{ +\spadpaste{associative?()\$A \free{A}} +} + +Random mating within a population \smath{x} is described by +\smath{x*x.} +The next generation is \smath{(x*x)*(x*x).} + +\xtc{ +Use decimal numbers to compare the distributions more easily. +}{ +\spadpaste{x : ALGSC(DECIMAL, 4, gametes, segregationRates) := convert [3/10, 1/5, 1/10, 2/5]\bound{x}\free{gametes, segregationRates}} +} +\xtc{ +To compute directly the gametic distribution in the fifth +generation, we use \spadfun{plenaryPower}. +}{ +\spadpaste{plenaryPower(x,5) \free{x}} +} + +We now ask two questions: +Does this distribution converge to an equilibrium state? +What are the distributions that are stable? + +\xtc{ +This is an invariant of the algebra and it is used to answer +the first question. +The new indeterminates describe a symbolic distribution. +}{ +\spadpaste{q := leftRankPolynomial()\$GCNAALG(FRAC INT, 4, gametes, segregationRates) :: UP(Y, POLY FRAC INT)\bound{q}\free{gametes, segregationRates}} +} +\xtc{ +Because the coefficient \texht{${9 \over 20}$}{\axiom{9/20}} has absolute +value less than 1, all distributions do converge, +by a theorem of this theory. +}{ +\spadpaste{factor(q :: POLY FRAC INT) \free{q}} +} +\xtc{ +The second question is answered by searching for idempotents in the +algebra. +}{ +\spadpaste{cI := conditionsForIdempotents()\$GCNAALG(FRAC INT, 4, gametes, segregationRates)\bound{cI} \free{gametes, segregationRates}} +} +\xtc{ +Solve these equations and look at the first solution. +}{ +\spadpaste{gbs:= groebnerFactorize cI; gbs.1\free{cI}\bound{gbs}} +} + +Further analysis using the package \spadtype{PolynomialIdeals} +shows that there is a two-dimensional variety of equilibrium states and all +other solutions are contained in it. + +\xtc{ +Choose one equilibrium state by setting two indeterminates to +concrete values. +}{ +\spadpaste{sol := solve concat(gbs.1,[\%x1-1/10,\%x2-1/10])\bound{sol} \free{gbs}} +} +\xtc{ +}{ +\spadpaste{e : A := represents reverse (map(rhs, sol.1) :: List FRAC INT)\bound{e} \free{A, sol}} +} +\xtc{ +Verify the result. +}{ +\spadpaste{e*e-e \free{e}} +} +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 10 (ug10.ht)} +<>= +\newcommand{\ugIntProgTitle}{Interactive Programming} +\newcommand{\ugIntProgNumber}{10.} + +@ +\section{Interactive Programming} +\label{ugIntProgPage} +\begin{itemize} +\item ugAppGraphicsPage \ref{ugAppGraphicsPage} on +page~\pageref{ugAppGraphicsPage} +\item ugIntProgDrawingPage \ref{ugIntProgDrawingPage} on +page~\pageref{ugIntProgDrawingPage} +\item ugIntProgRibbonPage \ref{ugIntProgRibbonPage} on +page~\pageref{ugIntProgRibbonPage} +\item ugIntProgColorPage \ref{ugIntProgColorPage} on +page~\pageref{ugIntProgColorPage} +\item ugIntProgPLCPage \ref{ugIntProgPLCPage} on +page~\pageref{ugIntProgPLCPage} +\item ugIntProgColorArrPage \ref{ugIntProgColorArrPage} on +page~\pageref{ugIntProgColorArrPage} +\item ugIntProgVecFieldsPage \ref{ugIntProgVecFieldsPage} on +page~\pageref{ugIntProgVecFieldsPage} +\item ugIntProgCompFunsPage \ref{ugIntProgCompFunsPage} on +page~\pageref{ugIntProgCompFunsPage} +\item ugIntProgFunctionsPage \ref{ugIntProgFunctionsPage} on +page~\pageref{ugIntProgFunctionsPage} +\item ugIntProgNewtonPage \ref{ugIntProgNewtonPage} on +page~\pageref{ugIntProgNewtonPage} +\end{itemize} +\index{pages!ugIntProgPage!ug10.ht} +\index{ug10.ht!pages!ugIntProgPage} +\index{ugIntProgPage!ug10.ht!pages} +<>= +\begin{page}{ugIntProgPage}{10. Interactive Programming} +\beginscroll + +Programming in the interpreter is easy. +So is the use of Axiom's graphics facility. +Both are rather flexible and allow you to use them for many +interesting applications. +However, both require learning some basic ideas and skills. + +All graphics examples in the \Gallery{} section are either +produced directly by interactive commands or by interpreter +programs. +Four of these programs are introduced here. +By the end of this chapter you will know enough about graphics and +programming in the interpreter to not only understand all these +examples, but to tackle interesting and difficult problems on your +own. +\downlink{``\ugAppGraphicsTitle''}{ugAppGraphicsPage} in +Appendix \ugAppGraphicsNumber\ignore{ugAppGraphics} lists +all the remaining commands and +programs used to create these images. + +\beginmenu + \menudownlink{{10.1. Drawing Ribbons Interactively}}{ugIntProgDrawingPage} + \menudownlink{{10.2. A Ribbon Program}}{ugIntProgRibbonPage} + \menudownlink{{10.3. Coloring and Positioning Ribbons}}{ugIntProgColorPage} + \menudownlink{{10.4. Points, Lines, and Curves}}{ugIntProgPLCPage} + \menudownlink{{10.5. A Bouquet of Arrows}}{ugIntProgColorArrPage} + \menudownlink{{10.6. Drawing Complex Vector Fields}} +{ugIntProgVecFieldsPage} + \menudownlink{{10.7. Drawing Complex Functions}}{ugIntProgCompFunsPage} + \menudownlink{{10.8. Functions Producing Functions}} +{ugIntProgFunctionsPage} + \menudownlink{{10.9. Automatic Newton Iteration Formulas}} +{ugIntProgNewtonPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntProgDrawingTitle}{Drawing Ribbons Interactively} +\newcommand{\ugIntProgDrawingNumber}{10.1.} + +@ +\section{Drawing Ribbons Interactively} +\label{ugIntProgDrawingPage} +\begin{itemize} +\item ugGraphPage \ref{ugGraphPage} on +page~\pageref{ugGraphPage} +\end{itemize} +\index{pages!ugIntProgDrawingPage!ug10.ht} +\index{ug10.ht!pages!ugIntProgDrawingPage} +\index{ugIntProgDrawingPage!ug10.ht!pages} +<>= +\begin{page}{ugIntProgDrawingPage}{10.1. Drawing Ribbons Interactively} +\beginscroll +% + +We begin our discussion of interactive graphics with the creation +of a useful facility: plotting ribbons of two-graphs in +three-space. +Suppose you want to draw the \twodim{} graphs of \smath{n} +functions \texht{$f_i(x), 1 \leq i \leq n,$}{\spad{f_i(x), 1 <= i +<= 5,}} all over some fixed range of \smath{x}. +One approach is to create a \twodim{} graph for each one, then +superpose one on top of the other. +What you will more than likely get is a jumbled mess. +Even if you make each function a different color, the result is +likely to be confusing. + +A better approach is to display each of the \smath{f_i(x)} in three +dimensions as a ``ribbon'' of some appropriate width along the +\smath{y}-direction, laying down each ribbon next to the +previous one. +A ribbon is simply a function of \smath{x} and \smath{y} depending +only on \smath{x.} + +We illustrate this for \smath{f_i(x)} defined as simple powers of +\smath{x} for \smath{x} ranging between \smath{-1} and \smath{1}. + +\psXtc{ +Draw the ribbon for \texht{$z = x^2$}{\spad{z=x ** 2}}. +}{ +\graphpaste{draw(x**2,x=-1..1,y=0..1)} +}{ +\epsffile[0 0 295 295]{../ps/ribbon1.ps} +} + +Now that was easy! +What you get is a ``wire-mesh'' rendition of the ribbon. +That's fine for now. +Notice that the mesh-size is small in both the \smath{x} and the +\smath{y} directions. +Axiom normally computes points in both these directions. +This is unnecessary. +One step is all we need in the \smath{y}-direction. +To have Axiom economize on \spad{y}-points, we re-draw the +ribbon with option \spad{var2Steps == 1}. + +\psXtc{ +Re-draw the ribbon, but with option \spad{var2Steps == 1} +so that only \spad{1} step is computed in the +\smath{y} direction. +}{ +\graphpaste{vp := draw(x**2,x=-1..1,y=0..1,var2Steps==1) \bound{d1}} +}{ +\epsffile[0 0 295 295]{../ps/ribbon2.ps} +} + +The operation has created a viewport, that is, a graphics window +on your screen. +We assigned the viewport to \spad{vp} and now we manipulate +its contents. + + +Graphs are objects, like numbers and algebraic expressions. +You may want to do some experimenting with graphs. +For example, say +\begin{verbatim} +showRegion(vp, "on") +\end{verbatim} +to put a bounding box around the ribbon. +Try it! +Issue \spad{rotate(vp, -45, 90)} to rotate the +figure \smath{-45} longitudinal degrees and \smath{90} latitudinal +degrees. + +\psXtc{ +Here is a different rotation. +This turns the graph so you can view it along the \smath{y}-axis. +}{ +\spadpaste{rotate(vp, 0, -90)\bound{d3}\free{d1}} +}{ +\epsffile[0 0 295 295]{../ps/ribbon2r.ps} +} + +There are many other things you can do. +In fact, most everything you can do interactively using the +\threedim{} control panel (such as translating, zooming, resizing, +coloring, perspective and lighting selections) can also be done +directly by operations (see \downlink{``\ugGraphTitle''}{ugGraphPage} +in Chapter \ugGraphNumber\ignore{ugGraph} for more details). + +When you are done experimenting, say \spad{reset(vp)} to restore the +picture to its original position and settings. + + +Let's add another ribbon to our picture---one +for \texht{$x^3$}{\spad{x**3}}. +Since \smath{y} ranges from \smath{0} to \smath{1} for the +first ribbon, now let \smath{y} range from \smath{1} to +\smath{2.} +This puts the second ribbon next to the first one. + +How do you add a second ribbon to the viewport? +One method is +to extract the ``space'' component from the +viewport using the operation +\spadfunFrom{subspace}{ThreeDimensionalViewport}. +You can think of the space component as the object inside the +window (here, the ribbon). +Let's call it \spad{sp}. +To add the second ribbon, you draw the second ribbon using the +option \spad{space == sp}. + +\xtc{ +Extract the space component of \spad{vp}. +}{ +\spadpaste{sp := subspace(vp)\bound{d5}\free{d1}} +} + +\psXtc{ +Add the ribbon for +\texht{$x^3$}{\spad{x**3}} alongside that for +\texht{$x^2$}{\spad{x**2}}. +}{ +\graphpaste{vp := draw(x**3,x=-1..1,y=1..2,var2Steps==1, space==sp)\bound{d6}\free{d5}} +}{ +\epsffile[0 0 295 295]{../ps/ribbons.ps} +} + +Unless you moved the original viewport, the new viewport covers +the old one. +You might want to check that the old object is still there by +moving the top window. + +Let's show quadrilateral polygon outlines on the ribbons and then +enclose the ribbons in a box. + +\psXtc{ +Show quadrilateral polygon outlines. +}{ +\spadpaste{drawStyle(vp,"shade");outlineRender(vp,"on")\bound{d10}\free{d6}} +}{ +\epsffile[0 0 295 295]{../ps/ribbons2.ps} +} +\psXtc{ +Enclose the ribbons in a box. +}{ +\spadpaste{rotate(vp,20,-60); showRegion(vp,"on")\bound{d11}\free{d10}} +}{ +\epsffile[0 0 295 295]{../ps/ribbons2b.ps} +} + +This process has become tedious! +If we had to add two or three more ribbons, we would have to +repeat the above steps several more times. +It is time to write an interpreter program to help us take care of +the details. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntProgRibbonTitle}{A Ribbon Program} +\newcommand{\ugIntProgRibbonNumber}{10.2.} + +@ +\section{A Ribbon Program} +\label{ugIntProgRibbonPage} +\begin{itemize} +\item ugUserPage \ref{ugUserPage} on +page~\pageref{ugUserPage} +\item ugLangBlocksPage \ref{ugLangBlocksPage} on +page~\pageref{ugLangBlocksPage} +\end{itemize} +\index{pages!ugIntProgRibbonPage!ug10.ht} +\index{ug10.ht!pages!ugIntProgRibbonPage} +\index{ugIntProgRibbonPage!ug10.ht!pages} +<>= +\begin{page}{ugIntProgRibbonPage}{10.2. A Ribbon Program} +\beginscroll +% + +The above approach creates a new viewport for each additional +ribbon. +A better approach is to build one object composed of all ribbons +before creating a viewport. +To do this, use \spadfun{makeObject} rather than \spadfun{draw}. +The operations have similar formats, but +\spadfun{draw} returns a viewport and +\spadfun{makeObject} returns a space object. + +We now create a function \userfun{drawRibbons} of two arguments: +\spad{flist}, a list of formulas for the ribbons you want to draw, +and \spad{xrange}, the range over which you want them drawn. +Using this function, you can just say +\begin{verbatim} +drawRibbons([x**2, x**3], x=-1..1) +\end{verbatim} +to do all of the work required in the last section. +Here is the \userfun{drawRibbons} program. +Invoke your favorite editor and create a file called {\bf ribbon.input} +containing the following program. + +\beginImportant + +\noindent +{\tt 1.\ \ \ drawRibbons(flist,\ xrange)\ ==}\newline +{\tt 2.\ \ \ \ \ sp\ :=\ createThreeSpace()}\newline +{\tt 3.\ \ \ \ \ y0\ :=\ 0}\newline +{\tt 4.\ \ \ \ \ for\ f\ in\ flist\ repeat}\newline +{\tt 5.\ \ \ \ \ \ \ makeObject(f,\ xrange,\ y=y0..y0+1,\ }\newline +{\tt 6.\ \ \ \ \ \ \ \ \ \ space==sp,\ var2Steps\ ==\ 1)}\newline +{\tt 7.\ \ \ \ \ \ \ y0\ :=\ y0\ +\ 1}\newline +{\tt 8.\ \ \ \ \ vp\ :=\ makeViewport3D(sp,\ "Ribbons")}\newline +{\tt 9.\ \ \ \ \ drawStyle(vp,\ "shade")}\newline +{\tt 10.\ \ \ \ outlineRender(vp,\ "on")}\newline +{\tt 11.\ \ \ \ showRegion(vp,"on")}\newline +{\tt 12.\ \ \ \ n\ :=\ \#\ flist}\newline +{\tt 13.\ \ \ \ zoom(vp,n,1,n)}\newline +{\tt 14.\ \ \ \ rotate(vp,0,75)}\newline +{\tt 15.\ \ \ \ vp}\newline +\caption{The first \protect\pspadfun{drawRibbons} function.}\label{fig-ribdraw1} +\endImportant + +Here are some remarks on the syntax used in the \pspadfun{drawRibbons} +function (consult \downlink{``\ugUserTitle''}{ugUserPage} in Chapter +\ugUserNumber\ignore{ugUser} for more details). Unlike most other +programming languages which use semicolons, parentheses, or {\it +begin}--{\it end} brackets to delineate the structure of programs, the +structure of an Axiom program is determined by indentation. The first +line of the function definition always begins in column 1. All other +lines of the function are indented with respect to the first line and +form a \spadgloss{pile} (see +\downlink{``\ugLangBlocksTitle''}{ugLangBlocksPage} in Section +\ugLangBlocksNumber\ignore{ugLangBlocks}). + +The definition of \userfun{drawRibbons} consists of a pile of +expressions to be executed one after another. Each expression of the +pile is indented at the same level. Lines 4-7 designate one single +expression: since lines 5-7 are indented with respect to the others, +these lines are treated as a continuation of line 4. Also since lines +5 and 7 have the same indentation level, these lines designate a pile +within the outer pile. + +The last line of a pile usually gives the value returned by the pile. +Here it is also the value returned by the function. Axiom knows this +is the last line of the function because it is the last line of the +file. In other cases, a new expression beginning in column one +signals the end of a function. + +The line \spad{drawStyle(vp,"shade")} is given after the viewport has +been created to select the draw style. We have also used the +\spadfunFrom{zoom}{ThreeDimensionalViewport} option. Without the +zoom, the viewport region would be scaled equally in all three +coordinate directions. + +Let's try the function \userfun{drawRibbons}. +First you must read the file to give Axiom the function definition. + +\xtc{ +Read the input file. +}{ +\spadpaste{)read ribbon \bound{s0}} +} +\psXtc{ +Draw ribbons for \texht{$x, x^2,\dots, x^5$}{x, x**2,...,x**5} +for \texht{$-1 \leq x \leq 1$}{-1 <= x <= 1} +}{ +\graphpaste{drawRibbons([x**i for i in 1..5],x=-1..1) \free{s0}} +}{ +\epsffile[0 0 295 295]{../ps/ribbons5.ps} +} + + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntProgColorTitle}{Coloring and Positioning Ribbons} +\newcommand{\ugIntProgColorNumber}{10.3.} + +@ +\section{Coloring and Positioning Ribbons} +\label{ugIntProgColorPage} +\index{pages!ugIntProgColorPage!ug10.ht} +\index{ug10.ht!pages!ugIntProgColorPage} +\index{ugIntProgColorPage!ug10.ht!pages} +<>= +\begin{page}{ugIntProgColorPage}{10.3. Coloring and Positioning Ribbons} +\beginscroll +% + +Before leaving the ribbon example, we make two improvements. +Normally, the color given to each point in the space is a +function of its height within a bounding box. +The points at the bottom of the +box are red, those at the top are purple. + +To change the normal coloring, you can give +an option \spad{colorFunction == {\it function}}. +When Axiom goes about displaying the data, it +determines the range of colors used for all points within the box. +Axiom then distributes these numbers uniformly over the number of hues. +Here we use the simple color function +\texht{$(x,y) \mapsto i$}{(x,y) +-> i} for the +\eth{\smath{i}} ribbon. + +Also, we add an argument \spad{yrange} so you can give the range of +\spad{y} occupied by the ribbons. +For example, if the \spad{yrange} is given as +\spad{y=0..1} and there are \smath{5} ribbons to be displayed, each +ribbon would have width \smath{0.2} and would appear in the +range \texht{$0 \leq y \leq 1$}{\spad{0 <= y <= 1}}. + +Refer to lines 4-9. +Line 4 assigns to \spad{yVar} the variable part of the +\spad{yrange} (after all, it need not be \spad{y}). +Suppose that \spad{yrange} is given as \spad{t = a..b} where \spad{a} and +\spad{b} have numerical values. +Then line 5 assigns the value of \spad{a} to the variable \spad{y0}. +Line 6 computes the width of the ribbon by dividing the difference of +\spad{a} and \spad{b} by the number, \spad{num}, of ribbons. +The result is assigned to the variable \spad{width}. +Note that in the for-loop in line 7, we are iterating in parallel; it is +not a nested loop. + +\beginImportant + +\noindent +{\tt 1.\ \ \ drawRibbons(flist,\ xrange,\ yrange)\ ==}\newline +{\tt 2.\ \ \ \ \ sp\ :=\ createThreeSpace()}\newline +{\tt 3.\ \ \ \ \ num\ :=\ \#\ flist}\newline +{\tt 4.\ \ \ \ \ yVar\ :=\ variable\ yrange}\newline +{\tt 5.\ \ \ \ \ y0:Float\ \ \ \ :=\ lo\ segment\ yrange}\newline +{\tt 6.\ \ \ \ \ width:Float\ :=\ (hi\ segment\ yrange\ -\ y0)/num}\newline +{\tt 7.\ \ \ \ \ for\ f\ in\ flist\ for\ color\ in\ 1..num\ repeat}\newline +{\tt 8.\ \ \ \ \ \ \ makeObject(f,\ xrange,\ yVar\ =\ y0..y0+width,}\newline +{\tt 9.\ \ \ \ \ \ \ \ \ var2Steps\ ==\ 1,\ colorFunction\ ==\ (x,y)\ +->\ color,\ \_}\newline +{\tt 10.\ \ \ \ \ \ \ \ space\ ==\ sp)}\newline +{\tt 11.\ \ \ \ \ \ y0\ :=\ y0\ +\ width}\newline +{\tt 12.\ \ \ \ vp\ :=\ makeViewport3D(sp,\ "Ribbons")}\newline +{\tt 13.\ \ \ \ drawStyle(vp,\ "shade")}\newline +{\tt 14.\ \ \ \ outlineRender(vp,\ "on")}\newline +{\tt 15.\ \ \ \ showRegion(vp,\ "on")}\newline +{\tt 16.\ \ \ \ vp}\newline +\caption{The final \protect\pspadfun{drawRibbons} function.}\label{fig-ribdraw2} +\endImportant + + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntProgPLCTitle}{Points, Lines, and Curves} +\newcommand{\ugIntProgPLCNumber}{10.4.} + +@ +\section{Points, Lines, and Curves} +\label{ugIntProgPLCPage} +\index{pages!ugIntProgPLCPage!ug10.ht} +\index{ug10.ht!pages!ugIntProgPLCPage} +\index{ugIntProgPLCPage!ug10.ht!pages} +<>= +\begin{page}{ugIntProgPLCPage}{10.4. Points, Lines, and Curves} +\beginscroll +% +What you have seen so far is a high-level program using the +graphics facility. +We now turn to the more basic notions of points, lines, and curves +in \threedim{} graphs. +These facilities use small floats (objects +of type \spadtype{DoubleFloat}) for data. +Let us first give names to the small float values \smath{0} and +\smath{1}. +\xtc{ +The small float 0. +}{ +\spadpaste{zero := 0.0@DFLOAT \bound{d1}} +} +\xtc{ +The small float 1. +}{ +\spadpaste{one := 1.0@DFLOAT \bound{d2}} +} +The \spadSyntax{@} sign means ``of the type.'' Thus \spad{zero} is +\smath{0.0} of the type \spadtype{DoubleFloat}. +You can also say \spad{0.0::DFLOAT}. + +Points can have four small float components: \smath{x, y, z} coordinates and an +optional color. +A ``curve'' is simply a list of points connected by straight line +segments. +\xtc{ +Create the point \spad{origin} with color zero, that is, the lowest color +on the color map. +}{ +\spadpaste{origin := point [zero,zero,zero,zero] \free{d1}\bound{d3}} +} +\xtc{ +Create the point \spad{unit} with color zero. +}{ +\spadpaste{unit := point [one,one,one,zero] \free{d1 d2}\bound{d4}} +} +\xtc{ +Create the curve (well, here, a line) from +\spad{origin} to \spad{unit}. +}{ +\spadpaste{line := [origin, unit] \free{d3 d4} \bound{d5}} +} + +We make this line segment into an arrow by adding an arrowhead. +The arrowhead extends to, +say, \spad{p3} on the left, and to, say, \spad{p4} on the right. +To describe an arrow, you tell Axiom to draw the two curves +\spad{[p1, p2, p3]} and \spad{[p2, p4].} +We also decide through experimentation on +values for \spad{arrowScale}, the ratio of the size of +the arrowhead to the stem of the arrow, and \spad{arrowAngle}, +the angle between the arrowhead and the arrow. + +Invoke your favorite editor and create +an input file called {\bf arrows.input}. +This input file first defines the values of +%\spad{origin},\spad{unit}, +\spad{arrowAngle} and \spad{arrowScale}, then +defines the function \userfun{makeArrow}\texht{$(p_1, p_2)$}{(p1, p2)} to +draw an arrow from point \texht{$p_1$}{p1} to \texht{$p_2$}{p2}. + +\beginImportant + +\noindent +%\xmpLine{origin := point [0.0@DFLOAT,0.0@DFLOAT,0.0@DFLOAT,0.0@DFLOAT]}{The point 0 with color 0.} +%\xmpLine{unit := point [1.0@DFLOAT,1.0@DFLOAT,1.0@DFLOAT,0.0@DFLOAT]}{A second point with color 0.} +%\xmpLine{}{} +{\tt 1.\ \ \ arrowAngle\ :=\ \%pi-\%pi/10.0@DFLOAT}\newline +{\tt 2.\ \ \ arrowScale\ :=\ 0.2@DFLOAT}\newline +{\tt 3.\ \ \ }\newline +{\tt 4.\ \ \ makeArrow(p1,\ p2)\ ==}\newline +{\tt 5.\ \ \ \ \ delta\ :=\ p2\ -\ p1}\newline +{\tt 6.\ \ \ \ \ len\ :=\ arrowScale\ *\ length\ delta}\newline +{\tt 7.\ \ \ \ \ theta\ :=\ atan(delta.1,\ delta.2)}\newline +{\tt 8.\ \ \ \ \ c1\ :=\ len*cos(theta\ +\ arrowAngle)}\newline +{\tt 9.\ \ \ \ \ s1\ :=\ len*sin(theta\ +\ arrowAngle)}\newline +{\tt 10.\ \ \ \ c2\ :=\ len*cos(theta\ -\ arrowAngle)}\newline +{\tt 11.\ \ \ \ s2\ :=\ len*sin(theta\ -\ arrowAngle)}\newline +{\tt 12.\ \ \ \ z\ \ :=\ p2.3*(1\ -\ arrowScale)}\newline +{\tt 13.\ \ \ \ p3\ :=\ point\ [p2.1\ +\ c1,\ p2.2\ +\ s1,\ z,\ p2.4]}\newline +{\tt 14.\ \ \ \ p4\ :=\ point\ [p2.1\ +\ c2,\ p2.2\ +\ s2,\ z,\ p2.4]}\newline +{\tt 15.\ \ \ \ [[p1,\ p2,\ p3],\ [p2,\ p4]]}\newline +\endImportant + +Read the file and then create +an arrow from the point \spad{origin} to the point \spad{unit}. +\xtc{ +Read the input file defining \userfun{makeArrow}. +}{ +\spadpaste{)read arrows\bound{v1}} +} +\xtc{ +Construct the arrow (a list of two curves). +}{ +\spadpaste{arrow := makeArrow(origin,unit)\bound{v2}\free{v1 d3 d4}} +} +\xtc{ +Create an empty object \spad{sp} of type \spad{ThreeSpace}. +}{ +\spadpaste{sp := createThreeSpace()\bound{c1}} +} +\xtc{ +Add each curve of the arrow to the space \spad{sp}. +}{ +\spadpaste{for a in arrow repeat sp := curve(sp,a)\bound{v3}\free{v2}\free{c1}} +} +\psXtc{ +Create a \threedim{} viewport containing that space. +}{ +\graphpaste{vp := makeViewport3D(sp,"Arrow")\bound{v4}\free{v3}} +}{ +\epsffile[0 0 295 295]{../ps/arrow.ps} +} +\psXtc{ +Here is a better viewing angle. +}{ +\spadpaste{rotate(vp,200,-60)\bound{v5}\free{v4}} +}{ +\epsffile[0 0 295 295]{../ps/arrowr.ps} +} + + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntProgColorArrTitle}{A Bouquet of Arrows} +\newcommand{\ugIntProgColorArrNumber}{10.5.} + +@ +\section{A Bouquet of Arrows} +\label{ugIntProgColorArrPage} +\index{pages!ugIntProgColorArrPage!ug10.ht} +\index{ug10.ht!pages!ugIntProgColorArrPage} +\index{ugIntProgColorArrPage!ug10.ht!pages} +<>= +\begin{page}{ugIntProgColorArrPage}{10.5. A Bouquet of Arrows} +\beginscroll + +%Axiom gathers up all the points of a graph and looks at the range +%of color values given as integers. +%If theses color values range from a minimum value of \spad{a} to a maximum +%value of \spad{b}, then the \spad{a} values are colored red (the +%lowest color in our spectrum), and \spad{b} values are colored +%purple (the highest color), and those in the middle are colored +%green. +%When all the points are the same color as above, Axiom +%chooses green. + +Let's draw a ``bouquet'' of arrows. +Each arrow is identical. The arrowheads are +uniformly placed on a circle parallel to the \smath{xy}-plane. +Thus the position of each arrow differs only +by the angle \texht{$\theta$}{theta}, +\texht{$0 \leq \theta < 2\pi$}{\spad{0 <= theta < 2*\%pi}}, +between the arrow and +the \smath{x}-axis on the \smath{xy}-plane. + +Our bouquet is rather special: each arrow has a different +color (which won't be evident here, unfortunately). +This is arranged by letting the color of each successive arrow be +denoted by \texht{$\theta$}{theta}. +In this way, the color of arrows ranges from red to green to violet. +Here is a program to draw a bouquet of \smath{n} arrows. + +\beginImportant + +\noindent +{\tt 1.\ \ \ drawBouquet(n,title)\ ==}\newline +{\tt 2.\ \ \ \ \ angle\ :=\ 0.0@DFLOAT}\newline +{\tt 3.\ \ \ \ \ sp\ :=\ createThreeSpace()}\newline +{\tt 4.\ \ \ \ \ for\ i\ in\ 0..n-1\ repeat}\newline +{\tt 5.\ \ \ \ \ \ \ start\ :=\ point\ [0.0@DFLOAT,0.0@DFLOAT,0.0@DFLOAT,angle]\ }\newline +{\tt 6.\ \ \ \ \ \ \ end\ \ \ :=\ point\ [cos\ angle,\ sin\ angle,\ 1.0@DFLOAT,\ angle]}\newline +{\tt 7.\ \ \ \ \ \ \ arrow\ :=\ makeArrow(start,end)}\newline +{\tt 8.\ \ \ \ \ \ \ for\ a\ in\ makeArrow(start,end)\ repeat\ }\newline +{\tt 9.\ \ \ \ \ \ \ \ \ curve(sp,a)}\newline +{\tt 10.\ \ \ \ \ \ angle\ :=\ angle\ +\ 2*\%pi/n}\newline +{\tt 11.\ \ \ \ makeViewport3D(sp,title)}\newline +\endImportant + +\xtc{ +Read the input file. +}{ +\spadpaste{)read bouquet\bound{b1}} +} +\psXtc{ +A bouquet of a dozen arrows. +}{ +\graphpaste{drawBouquet(12,"A Dozen Arrows")\free{b1}} +}{ +\epsffile[0 0 295 295]{../ps/bouquet.ps} +} +\ + +%\head{section}{Diversion: When Things Go Wrong}{ugIntProgDivTwo} +% +%Up to now, if you have typed in all the programs exactly as they are in +%the book, you have encountered no errors. +%In practice, however, it is easy to make mistakes. +%Computers are unforgiving: your program must be letter-for-letter correct +%or you will encounter some error. +% +%One thing that can go wrong is that you can create a syntactically +%incorrect program. +%As pointed out in Diversion 1, the meaning of Axiom programs is +%affected by indentation. +% +%The Axiom parser will ensure that all parentheses, brackets, and +%braces balance, and that commas and operators appear in the correct +%context. +%For example, change line ?? +%to ?? +%and run. +% +%A common mistake is to misspell an identifier or operation name. +%These are generally easy to spot since the interpreter will tell you the +%name of the operation together with the type and number of arguments which +%it is trying to find. +% +%Another mistake is to either to omit an argument or to give too many. +%Again Axiom will notify you of the offending operation. +% +%Indentation makes your programs more readable. +%However there are several ways to create a syntactically valid program. +%A most common problem occurs when a line is either indented improperly. +%% either or what? +%If this is a first line of a pile, then all the other lines will act as an +%inner pile to the first line. +%If it is a line of the pile other than the first line, Axiom then +%thinks that this line is a continuation of the previous line. +%More frequently than not, a syntactically correct expression is created. +%Almost never however will this be a semantically correct. +%Only when the program is run will an error be discovered. +%For example, change line ?? +%to ?? +%and run. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntProgVecFieldsTitle}{Drawing Complex Vector Fields} +\newcommand{\ugIntProgVecFieldsNumber}{10.6.} + +@ +\section{Drawing Complex Vector Fields} +\label{ugIntProgVecFieldsPage} +\index{pages!ugIntProgVecFieldsPage!ug10.ht} +\index{ug10.ht!pages!ugIntProgVecFieldsPage} +\index{ugIntProgVecFieldsPage!ug10.ht!pages} +<>= +\begin{page}{ugIntProgVecFieldsPage}{10.6. Drawing Complex Vector Fields} +\beginscroll + +We now put our arrows to good use drawing complex vector fields. +These vector fields give a representation of complex-valued +functions of complex variables. +Consider a Cartesian coordinate grid of points \smath{(x, y)} in +the plane, and some complex-valued function \smath{f} defined on +this grid. +At every point on this grid, compute the value of \texht{$f(x + +iy)$}{f(x + y*\%i)} and call it \smath{z}. +Since \smath{z} has both a real and imaginary value for a given +\smath{(x,y)} grid point, there are four dimensions to plot. +What do we do? +We represent the values of \smath{z} by arrows planted at each +grid point. +Each arrow represents the value of \smath{z} in polar coordinates +\texht{$(r,\theta)$}{(r, theta)}. +The length of the arrow is proportional to \smath{r}. +Its direction is given by \texht{$\theta$}{theta}. + +The code for drawing vector fields is in the file {\bf vectors.input}. +We discuss its contents from top to bottom. + +Before showing you the code, we have two small +matters to take care of. +First, what if the function has large spikes, say, ones that go off +to infinity? +We define a variable \spad{clipValue} for this purpose. When +\spad{r} exceeds the value of \spad{clipValue}, then the value of +\spad{clipValue} is used instead of that for \spad{r}. +For convenience, we define a function \spad{clipFun(x)} which uses +\spad{clipValue} to ``clip'' the value of \spad{x}. + +% +\beginImportant + +\noindent +{\tt 1.\ \ \ clipValue\ :\ DFLOAT\ :=\ 6}\newline +{\tt 2.\ \ \ clipFun(x)\ ==\ min(max(x,-clipValue),clipValue)}\newline +\endImportant + +Notice that we identify \spad{clipValue} as a small float but do +not declare the type of the function \userfun{clipFun}. +As it turns out, \userfun{clipFun} is called with a +small float value. +This declaration ensures that \userfun{clipFun} never does a +conversion when it is called. + +The second matter concerns the possible ``poles'' of a +function, the actual points where the spikes have infinite +values. +Axiom uses normal \spadtype{DoubleFloat} arithmetic which +does not directly handle infinite values. +If your function has poles, you must adjust your step size to +avoid landing directly on them (Axiom calls \spadfun{error} +when asked to divide a value by \axiom{0}, for example). + +We set the variables \spad{realSteps} and \spad{imagSteps} to +hold the number of steps taken in the real and imaginary +directions, respectively. +Most examples will have ranges centered around the origin. +To avoid a pole at the origin, the number of points is taken +to be odd. + +\beginImportant + +\noindent +{\tt 1.\ \ \ realSteps:\ INT\ :=\ 25}\newline +{\tt 2.\ \ \ imagSteps:\ INT\ :=\ 25}\newline +{\tt 3.\ \ \ )read\ arrows}\newline +\endImportant + +Now define the function \userfun{drawComplexVectorField} to draw the arrows. +It is good practice to declare the type of the main function in +the file. +This one declaration is usually sufficient to ensure that other +lower-level functions are compiled with the correct types. + +\beginImportant + +\noindent +{\tt 4.\ \ \ C\ :=\ Complex\ DoubleFloat}\newline +{\tt 5.\ \ \ S\ :=\ Segment\ DoubleFloat}\newline +{\tt 6.\ \ \ drawComplexVectorField:\ (C\ ->\ C,\ S,\ S)\ ->\ VIEW3D}\newline +\endImportant + +The first argument is a function mapping complex small floats into +complex small floats. +The second and third arguments give the range of real and +imaginary values as segments like \spad{a..b}. +The result is a \threedim{} viewport. +Here is the full function definition: + +\beginImportant + +\noindent +{\tt 7.\ \ \ drawComplexVectorField(f,\ realRange,imagRange)\ ==}\newline +{\tt 8.\ \ \ \ \ delReal\ :=\ (hi(realRange)-lo(realRange))/realSteps}\newline +{\tt 9.\ \ \ \ \ delImag\ :=\ (hi(imagRange)-lo(imagRange))/imagSteps}\newline +{\tt 10.\ \ \ \ sp\ :=\ createThreeSpace()}\newline +{\tt 11.\ \ \ \ real\ :=\ lo(realRange)}\newline +{\tt 12.\ \ \ \ for\ i\ in\ 1..realSteps+1\ repeat}\newline +{\tt 13.\ \ \ \ \ \ imag\ :=\ lo(imagRange)}\newline +{\tt 14.\ \ \ \ \ \ for\ j\ in\ 1..imagSteps+1\ repeat}\newline +{\tt 15.\ \ \ \ \ \ \ \ z\ :=\ f\ complex(real,imag)}\newline +{\tt 16.\ \ \ \ \ \ \ \ arg\ :=\ argument\ z}\newline +{\tt 17.\ \ \ \ \ \ \ \ len\ :=\ clipFun\ sqrt\ norm\ z}\newline +{\tt 18.\ \ \ \ \ \ \ \ p1\ :=\ \ point\ [real,\ imag,\ 0.0@DFLOAT,\ arg]}\newline +{\tt 19.\ \ \ \ \ \ \ \ scaleLen\ :=\ delReal\ *\ len}\newline +{\tt 20.\ \ \ \ \ \ \ \ p2\ :=\ point\ [p1.1\ +\ scaleLen*cos(arg),}\newline +{\tt 21.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ p1.2\ +\ scaleLen*sin(arg),0.0@DFLOAT,\ arg]}\newline +{\tt 22.\ \ \ \ \ \ \ \ arrow\ :=\ makeArrow(p1,\ p2)}\newline +{\tt 23.\ \ \ \ \ \ \ \ for\ a\ in\ arrow\ repeat\ curve(sp,\ a)}\newline +{\tt 24.\ \ \ \ \ \ \ \ imag\ :=\ imag\ +\ delImag}\newline +{\tt 25.\ \ \ \ \ \ real\ :=\ real\ +\ delReal}\newline +{\tt 26.\ \ \ \ makeViewport3D(sp,\ "Complex\ Vector\ Field")}\newline +\endImportant + +As a first example, let us draw \spad{f(z) == sin(z)}. +There is no need to create a user function: just pass the +\spadfunFrom{sin}{Complex DoubleFloat} from \spadtype{Complex DoubleFloat}. +\xtc{ +Read the file. +}{ +\spadpaste{)read vectors \bound{readVI}} +} +\psXtc{ +Draw the complex vector field of \spad{sin(x)}. +}{ +\graphpaste{drawComplexVectorField(sin,-2..2,-2..2) \free{readVI}} +}{ +\epsffile[0 0 295 295]{../ps/vectorsin.ps} +} +\ + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntProgCompFunsTitle}{Drawing Complex Functions} +\newcommand{\ugIntProgCompFunsNumber}{10.7.} + +@ +\section{Drawing Complex Functions} +\label{ugIntProgCompFunsPage} +\begin{itemize} +\item ugGraphPage \ref{ugGraphPage} on +page~\pageref{ugGraphPage} +\end{itemize} +\index{pages!ugIntProgCompFunsPage!ug10.ht} +\index{ug10.ht!pages!ugIntProgCompFunsPage} +\index{ugIntProgCompFunsPage!ug10.ht!pages} +<>= +\begin{page}{ugIntProgCompFunsPage}{10.7. Drawing Complex Functions} +\beginscroll + +Here is another way to graph a complex function of complex arguments. +For each complex value \smath{z}, compute \smath{f(z)}, again +expressing the value in polar coordinates \smath{(r,\theta{})}. We +draw the complex valued function, again considering the +\smath{(x,y)}-plane as the complex plane, using \smath{r} as the +height (or \smath{z}-coordinate) and \smath{\theta} as the color. +This is a standard plot---we learned how to do this in +\downlink{``\ugGraphTitle''}{ugGraphPage} in Chapter +\ugGraphNumber\ignore{ugGraph}---but here we write a new program to +illustrate the creation of polygon meshes, or grids. + +Call this function \userfun{drawComplex}. +It displays the points using the ``mesh'' of points. +The function definition is in three parts. + +\beginImportant + +\noindent +{\tt 1.\ \ \ drawComplex:\ (C\ ->\ C,\ S,\ S)\ ->\ VIEW3D}\newline +{\tt 2.\ \ \ drawComplex(f,\ realRange,\ imagRange)\ ==}\newline +{\tt 3.\ \ \ \ \ delReal\ :=\ (hi(realRange)-lo(realRange))/realSteps}\newline +{\tt 4.\ \ \ \ \ delImag\ :=\ (hi(imagRange)-lo(imagRange))/imagSteps}\newline +{\tt 5.\ \ \ \ \ llp:List\ List\ Point\ DFLOAT\ :=\ []}\newline +\endImportant + +Variables \spad{delReal} and \spad{delImag} give the step sizes along +the real and imaginary directions as computed by the values of the +global variables \spad{realSteps} and \spad{imagSteps}. The mesh is +represented by a list of lists of points \spad{llp}, initially empty. +Now \spad{[ ]} alone is ambiguous, so to set this initial value you +have to tell Axiom what type of empty list it is. Next comes the loop +which builds \spad{llp}. + +\beginImportant + +\noindent +{\tt 1.\ \ \ \ \ real\ :=\ lo(realRange)}\newline +{\tt 2.\ \ \ \ \ for\ i\ in\ 1..realSteps+1\ repeat}\newline +{\tt 3.\ \ \ \ \ \ \ imag\ :=\ lo(imagRange)}\newline +{\tt 4.\ \ \ \ \ \ \ lp\ :=\ []\$(List\ Point\ DFLOAT)}\newline +{\tt 5.\ \ \ \ \ \ \ for\ j\ in\ 1..imagSteps+1\ repeat}\newline +{\tt 6.\ \ \ \ \ \ \ \ \ z\ :=\ f\ complex(real,imag)}\newline +{\tt 7.\ \ \ \ \ \ \ \ \ pt\ :=\ point\ [real,imag,\ clipFun\ sqrt\ norm\ z,\ }\newline +{\tt 8.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ argument\ z]}\newline +{\tt 9.\ \ \ \ \ \ \ \ \ lp\ :=\ cons(pt,lp)}\newline +{\tt 10.\ \ \ \ \ \ \ \ imag\ :=\ imag\ +\ delImag}\newline +{\tt 11.\ \ \ \ \ \ real\ :=\ real\ +\ delReal}\newline +{\tt 12.\ \ \ \ \ \ llp\ :=\ cons(lp,\ llp)}\newline +\endImportant + +The code consists of both an inner and outer loop. Each pass through +the inner loop adds one list \spad{lp} of points to the list of lists +of points \spad{llp}. The elements of \spad{lp} are collected in +reverse order. + +\beginImportant + +\noindent +{\tt 13.\ \ \ \ makeViewport3D(mesh(llp),\ "Complex\ Function")}\newline +\endImportant + +The operation \spadfun{mesh} then creates an object of type +\spadtype{ThreeSpace(DoubleFloat)} from the list of lists of points. +This is then passed to \spadfun{makeViewport3D} to display the +image. + +Now add this function directly to your {\bf vectors.input} file and +re-read the file using \spad{)read vectors}. We try +\userfun{drawComplex} using a user-defined function \spad{f}. + +\xtc{ +Read the file. +}{ +\spadpaste{)read vectors \bound{readVI}} +} +\xtc{ +This one has a pole at \smath{z=0}. +}{ +\spadpaste{f(z) == exp(1/z)\bound{e1}} +} +\psXtc{ +Draw it with an odd number of steps to avoid the pole. +}{ +\graphpaste{drawComplex(f,-2..2,-2..2)\free{e1 readVI}} +}{ +\epsffile[0 0 295 295]{../ps/complexexp.ps} +} +\ + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntProgFunctionsTitle}{Functions Producing Functions} +\newcommand{\ugIntProgFunctionsNumber}{10.8.} + +@ +\section{Functions Producing Functions} +\label{ugIntProgFunctionsPage} +\begin{itemize} +\item ugUserMakePage \ref{ugUserMakePage} on +page~\pageref{ugUserMakePage} +\end{itemize} +\index{pages!ugIntProgFunctionsPage!ug10.ht} +\index{ug10.ht!pages!ugIntProgFunctionsPage} +\index{ugIntProgFunctionsPage!ug10.ht!pages} +<>= +\begin{page}{ugIntProgFunctionsPage}{10.8. Functions Producing Functions} +\beginscroll + +In \downlink{``\ugUserMakeTitle''}{ugUserMakePage} in Section +\ugUserMakeNumber\ignore{ugUserMake}, you learned how to use the +operation \spadfun{function} to create a function from symbolic +formulas. Here we introduce a similar operation which not only +creates functions, but functions from functions. + +The facility we need is provided by the package +\spadtype{MakeUnaryCompiledFunction(E,S,T)}. This package produces a +unary (one-argument) compiled function from some symbolic data +generated by a previous computation.\footnote{% +\spadtype{MakeBinaryCompiledFunction} is available for binary +functions.} The \spad{E} tells where the symbolic data comes from; +the \spad{S} and \spad{T} give Axiom the source and target type of the +function, respectively. The compiled function produced has type +\spadsig{\spad{S}}{\spad{T}}. To produce a compiled function with +definition \spad{p(x) == expr}, call \spad{compiledFunction(expr, x)} +from this package. The function you get has no name. You must to +assign the function to the variable \spad{p} to give it that name. % +\xtc{ Do some computation. }{ \spadpaste{(x+1/3)**5\bound{p1}} } +\xtc{ Convert this to an anonymous function of \spad{x}. Assign it to +the variable \spad{p} to give the function a name. }{ \spadpaste{p := +compiledFunction(\%,x)\$MakeUnaryCompiledFunction(POLY FRAC +INT,DFLOAT,DFLOAT)\bound{p2}\free{p1}} } \xtc{ Apply the function. }{ +\spadpaste{p(sin(1.3))\bound{p3}\free{p2}} } + +For a more sophisticated application, read on. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugIntProgNewtonTitle}{Automatic Newton Iteration Formulas} +\newcommand{\ugIntProgNewtonNumber}{10.9.} + +@ +\section{Automatic Newton Iteration Formulas} +\label{ugIntProgNewtonPage} +\begin{itemize} +\item MappingPackageOneXmpPage \ref{MappingPackageOneXmpPage} on +page~\pageref{MappingPackageOneXmpPage} +\end{itemize} +\index{pages!ugIntProgNewtonPage!ug10.ht} +\index{ug10.ht!pages!ugIntProgNewtonPage} +\index{ugIntProgNewtonPage!ug10.ht!pages} +<>= +\begin{page}{ugIntProgNewtonPage}{10.9. Automatic Newton Iteration Formulas} +\beginscroll + +We resume +our continuing saga of arrows and complex functions. +Suppose we want to investigate the behavior of Newton's iteration function +in the complex plane. +Given a function \smath{f}, we want to find the complex values +\smath{z} such that \smath{f(z) = 0}. + +The first step is to produce a Newton iteration formula for +a given \smath{f}: +\texht{$x_{n+1} = x_n - {{f(x_n)}\over{f'(x_n)}}.$}{% +\spad{x(n+1) = x(n) - f(x(n))/f'(x(n))}.} +We represent this formula by a function \smath{g} +that performs the computation on the right-hand side, that is, +\texht{$x_{n+1} = {g}(x_n)$}{\spad{x(n+1) = g(x(n))}}. + +The type \spadtype{Expression Integer} (abbreviated \spadtype{EXPR +INT}) is used to represent general symbolic expressions in +Axiom. +To make our facility as general as possible, we assume +\smath{f} has this type. +Given \smath{f}, we want +to produce a Newton iteration function \spad{g} which, +given a complex point \texht{$x_n$}{x(n)}, delivers the next +Newton iteration point \texht{$x_{n+1}$}{x(n+1)}. + +This time we write an input file called {\bf newton.input}. +We need to import \spadtype{MakeUnaryCompiledFunction} (discussed +in the last section), call it with appropriate types, and then define +the function \spad{newtonStep} which references it. +Here is the function \spad{newtonStep}: + +\beginImportant + +\noindent +{\tt 1.\ \ \ C\ :=\ Complex\ DoubleFloat}\newline +{\tt 2.\ \ \ complexFunPack:=MakeUnaryCompiledFunction(EXPR\ INT,C,C)}\newline +{\tt 3.\ \ \ }\newline +{\tt 4.\ \ \ newtonStep(f)\ ==}\newline +{\tt 5.\ \ \ \ \ fun\ \ :=\ complexNumericFunction\ f}\newline +{\tt 6.\ \ \ \ \ deriv\ :=\ complexDerivativeFunction(f,1)}\newline +{\tt 7.\ \ \ \ \ (x:C):C\ +->}\newline +{\tt 8.\ \ \ \ \ \ \ x\ -\ fun(x)/deriv(x)}\newline +{\tt 9.\ \ \ }\newline +{\tt 10.\ \ complexNumericFunction\ f\ ==}\newline +{\tt 11.\ \ \ \ v\ :=\ theVariableIn\ f}\newline +{\tt 12.\ \ \ \ compiledFunction(f,\ v)\$complexFunPack}\newline +{\tt 13.\ \ }\newline +{\tt 14.\ \ complexDerivativeFunction(f,n)\ ==}\newline +{\tt 15.\ \ \ \ v\ :=\ theVariableIn\ f}\newline +{\tt 16.\ \ \ \ df\ :=\ D(f,v,n)}\newline +{\tt 17.\ \ \ \ compiledFunction(df,\ v)\$complexFunPack}\newline +{\tt 18.\ \ }\newline +{\tt 19.\ \ theVariableIn\ f\ ==\ \ }\newline +{\tt 20.\ \ \ \ vl\ :=\ variables\ f}\newline +{\tt 21.\ \ \ \ nv\ :=\ \#\ vl}\newline +{\tt 22.\ \ \ \ nv\ >\ 1\ =>\ error\ "Expression\ is\ not\ univariate."}\newline +{\tt 23.\ \ \ \ nv\ =\ 0\ =>\ 'x}\newline +{\tt 24.\ \ \ \ first\ vl}\newline +\endImportant + +Do you see what is going on here? +A formula \spad{f} is passed into the function \userfun{newtonStep}. +First, the function turns \spad{f} into a compiled program mapping +complex numbers into complex numbers. Next, it does the same thing +for the derivative of \spad{f}. Finally, it returns a function which +computes a single step of Newton's iteration. + +The function \userfun{complexNumericFunction} extracts the variable +from the expression \spad{f} and then turns \spad{f} into a function +which maps complex numbers into complex numbers. The function +\userfun{complexDerivativeFunction} does the same thing for the +derivative of \spad{f}. The function \userfun{theVariableIn} +extracts the variable from the expression \spad{f}, calling the function +\spadfun{error} if \spad{f} has more than one variable. +It returns the dummy variable \spad{x} if \spad{f} has no variables. + +Let's now apply \userfun{newtonStep} to the formula for computing +cube roots of two. +% +\xtc{ +Read the input file with the definitions. +}{ +\spadpaste{)read newton\bound{n1}} +} +\xtc{}{ +\spadpaste{)read vectors \bound{n1a}} +} + +\xtc{ +The cube root of two. +}{ +\spadpaste{f := x**3 - 2\bound{n2}\free{n1 n1a}} +} +\xtc{ +Get Newton's iteration formula. +}{ +\spadpaste{g := newtonStep f\bound{n3}\free{n2}} +} +\xtc{ +Let \spad{a} denote the result of +applying Newton's iteration once to the complex number \spad{1 + \%i}. +}{ +\spadpaste{a := g(1.0 + \%i)\bound{n4}\free{n3}} +} +\xtc{ +Now apply it repeatedly. How fast does it converge? +}{ +\spadpaste{[(a := g(a)) for i in 1..]\bound{n5}\free{n4}} +} +\xtc{ +Check the accuracy of the last iterate. +}{ +\spadpaste{a**3\bound{n6}\free{n5}} +} + +In +\downlink{`MappingPackage1'}{MappingPackageOneXmpPage}\ignore{MappingPackage1}, +we show how functions can be manipulated as objects in Axiom. A +useful operation to consider here is \spadop{*}, which means +composition. For example \spad{g*g} causes the Newton iteration +formula to be applied twice. Correspondingly, \spad{g**n} means to +apply the iteration formula \spad{n} times. + +% +\xtc{ +Apply \spad{g} twice to the point \spad{1 + \%i}. +}{ +\spadpaste{(g*g) (1.0 + \%i)\bound{n10}\free{n3}} +} +\xtc{ +Apply \spad{g} 11 times. +}{ +\spadpaste{(g**11) (1.0 + \%i)\bound{n11}\free{n10}} +} + +Look now at the vector field and surface generated +after two steps of Newton's formula for the cube root of two. +The poles in these pictures represent bad starting values, and the +flat areas are the regions of convergence to the three roots. +% +\psXtc{ +The vector field. +}{ +\graphpaste{drawComplexVectorField(g**3,-3..3,-3..3)\free{n3}} +}{ +\epsffile[0 0 295 295]{../ps/vectorroot.ps} +} +\psXtc{ +The surface. +}{ +\graphpaste{drawComplex(g**3,-3..3,-3..3)\free{n3}} +}{ +\epsffile[0 0 295 295]{../ps/complexroot.ps} +} +\ + + +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 11 (ug11.ht)} +<>= +\newcommand{\ugPackagesTitle}{Packages} +\newcommand{\ugPackagesNumber}{11.} + +@ +\section{Packages} +\label{ugPackagesPage} +\begin{itemize} +\item ugIntProgPage \ref{ugIntProgPage} on +page~\pageref{ugIntProgPage} +\item ugIntProgPage \ref{ugIntProgPage} on +page~\pageref{ugIntProgPage} +\item ugPackagesNamesPage \ref{ugPackagesNamesPage} on +page~\pageref{ugPackagesNamesPage} +\item ugPackagesSyntaxPage \ref{ugPackagesSyntaxPage} on +page~\pageref{ugPackagesSyntaxPage} +\item ugPackagesAbstractPage \ref{ugPackagesAbstractPage} on +page~\pageref{ugPackagesAbstractPage} +\item ugPackagesCapsulesPage \ref{ugPackagesCapsulesPage} on +page~\pageref{ugPackagesCapsulesPage} +\item ugPackagesInputFilesPage \ref{ugPackagesInputFilesPage} on +page~\pageref{ugPackagesInputFilesPage} +\item ugPackagesPackagesPage \ref{ugPackagesPackagesPage} on +page~\pageref{ugPackagesPackagesPage} +\item ugPackagesParametersPage \ref{ugPackagesParametersPage} on +page~\pageref{ugPackagesParametersPage} +\item ugPackagesCondsPage \ref{ugPackagesCondsPage} on +page~\pageref{ugPackagesCondsPage} +\item ugPackagesCompilingPage \ref{ugPackagesCompilingPage} on +page~\pageref{ugPackagesCompilingPage} +\item ugPackagesHowPage \ref{ugPackagesHowPage} on +page~\pageref{ugPackagesHowPage} +\end{itemize} +\index{pages!ugPackagesPage!ug11.ht} +\index{ug11.ht!pages!ugPackagesPage} +\index{ugPackagesPage!ug11.ht!pages} +<>= +\begin{page}{ugPackagesPage}{11. Packages} +\beginscroll + +Packages provide the bulk of +Axiom's algorithmic library, from numeric packages for computing +special functions to symbolic facilities for +differential equations, symbolic integration, and limits. + +In \downlink{``\ugIntProgTitle''}{ugIntProgPage} in Chapter +\ugIntProgNumber\ignore{ugIntProg}, we developed several useful +functions for drawing vector fields and complex functions. We now +show you how you can add these functions to the Axiom library to make +them available for general use. + +The way we created the functions in +\downlink{``\ugIntProgTitle''}{ugIntProgPage} in Chapter +\ugIntProgNumber\ignore{ugIntProg} is typical of how you, as an +advanced Axiom user, may interact with Axiom. You have an +application. You go to your editor and create an input file defining +some functions for the application. Then you run the file and try the +functions. Once you get them all to work, you will often want to +extend them, add new features, perhaps write additional functions. + +Eventually, when you have a useful set of functions for your +application, you may want to add them to your local Axiom library. To +do this, you embed these function definitions in a package and add +that package to the library. + +To introduce new packages, categories, and domains into the system, +you need to use the Axiom compiler to convert the constructors into +executable machine code. An existing compiler in Axiom is available +on an ``as-is'' basis. A new, faster compiler will be available in +version 2.0 of Axiom. + +\beginImportant + +\noindent +\label{pak-cdraw} +{\tt 1.\ \ \ C\ \ \ \ \ \ ==>\ Complex\ DoubleFloat}\newline +{\tt 2.\ \ \ S\ \ \ \ \ \ ==>\ Segment\ DoubleFloat}\newline +{\tt 3.\ \ \ INT\ \ \ \ ==>\ Integer}\newline +{\tt 4.\ \ \ DFLOAT\ ==>\ DoubleFloat}\newline +{\tt 5.\ \ \ VIEW3D\ ==>\ ThreeDimensionalViewport}\newline +{\tt 6.\ \ \ CURVE\ \ ==>\ List\ List\ Point\ DFLOAT}\newline +{\tt 7.\ \ \ }\newline +{\tt 8.\ \ \ )abbrev\ package\ DRAWCX\ DrawComplex}\newline +{\tt 9.\ \ \ DrawComplex():\ Exports\ ==\ Implementation\ where}\newline +{\tt 10.\ \ }\newline +{\tt 11.\ \ \ \ Exports\ ==\ with}\newline +{\tt 12.\ \ \ \ \ \ drawComplex:\ (C\ ->\ C,S,S,Boolean)\ ->\ VIEW3D}\newline +{\tt 13.\ \ \ \ \ \ drawComplexVectorField:\ (C\ ->\ C,S,S)\ ->\ VIEW3D}\newline +{\tt 14.\ \ \ \ \ \ setRealSteps:\ INT\ ->\ INT}\newline +{\tt 15.\ \ \ \ \ \ setImagSteps:\ INT\ ->\ INT}\newline +{\tt 16.\ \ \ \ \ \ setClipValue:\ DFLOAT->\ DFLOAT}\newline +{\tt 17.\ \ }\newline +{\tt 18.\ \ \ \ Implementation\ ==\ add}\newline +{\tt 19.\ \ \ \ \ \ arrowScale\ :\ DFLOAT\ :=\ (0.2)::DFLOAT\ --relative\ size}\newline +{\tt 20.\ \ \ \ \ \ arrowAngle\ :\ DFLOAT\ :=\ pi()-pi()/(20::DFLOAT)}\newline +{\tt 21.\ \ \ \ \ \ realSteps\ \ :\ INT\ :=\ 11\ --\#\ real\ steps}\newline +{\tt 22.\ \ \ \ \ \ imagSteps\ \ :\ INT\ :=\ 11\ --\#\ imaginary\ steps}\newline +{\tt 23.\ \ \ \ \ \ clipValue\ \ :\ DFLOAT\ \ :=\ 10::DFLOAT\ --maximum\ vector\ length}\newline +{\tt 24.\ \ }\newline +{\tt 25.\ \ \ \ \ \ setRealSteps(n)\ ==\ realSteps\ :=\ n}\newline +{\tt 26.\ \ \ \ \ \ setImagSteps(n)\ ==\ imagSteps\ :=\ n}\newline +{\tt 27.\ \ \ \ \ \ setClipValue(c)\ ==\ clipValue\ :=\ c}\newline +{\tt 28.\ \ }\newline +{\tt 29.\ \ \ \ \ \ clipFun:\ DFLOAT\ ->\ DFLOAT\ --Clip\ large\ magnitudes.}\newline +{\tt 30.\ \ \ \ \ \ clipFun(x)\ ==\ min(max(x,\ -clipValue),\ clipValue)}\newline +{\tt 31.\ \ }\newline +{\tt 32.\ \ \ \ \ \ makeArrow:\ (Point\ DFLOAT,Point\ DFLOAT,DFLOAT,DFLOAT)\ ->\ CURVE}\newline +{\tt 33.\ \ \ \ \ \ makeArrow(p1,\ p2,\ len,\ arg)\ ==\ ...}\newline +{\tt 34.\ \ }\newline +{\tt 35.\ \ \ \ \ \ drawComplex(f,\ realRange,\ imagRange,\ arrows?)\ ==\ ...}\newline +\caption{The DrawComplex package.}\label{fig-pak-cdraw} +\endImportant + +\beginmenu + \menudownlink{{11.1. Names, Abbreviations, and File Structure}} +{ugPackagesNamesPage} + \menudownlink{{11.2. Syntax}}{ugPackagesSyntaxPage} + \menudownlink{{11.3. Abstract Datatypes}}{ugPackagesAbstractPage} + \menudownlink{{11.4. Capsules}}{ugPackagesCapsulesPage} + \menudownlink{{11.5. Input Files vs. Packages}}{ugPackagesInputFilesPage} + \menudownlink{{11.6. Compiling Packages}}{ugPackagesPackagesPage} + \menudownlink{{11.7. Parameters}}{ugPackagesParametersPage} + \menudownlink{{11.8. Conditionals}}{ugPackagesCondsPage} + \menudownlink{{11.9. Testing}}{ugPackagesCompilingPage} + \menudownlink{{11.10. How Packages Work}}{ugPackagesHowPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugPackagesNamesTitle}{Names, Abbreviations, and File Structure} +\newcommand{\ugPackagesNamesNumber}{11.1.} + +@ +\section{Names, Abbreviations, and File Structure} +\label{ugPackagesNamesPage} +\begin{itemize} +\item ugIntProgPage \ref{ugIntProgPage} on +page~\pageref{ugIntProgPage} +\item ugTypesWritingAbbrPage \ref{ugTypesWritingAbbrPage} on +page~\pageref{ugTypesWritingAbbrPage} +\end{itemize} +\index{pages!ugPackagesNamesPage!ug11.ht} +\index{ug11.ht!pages!ugPackagesNamesPage} +\index{ugPackagesNamesPage!ug11.ht!pages} +<>= +\begin{page}{ugPackagesNamesPage} +{11.1. Names, Abbreviations, and File Structure} +\beginscroll +% + +Each package has a name and an abbreviation. For a package of the +complex draw functions from +\downlink{``\ugIntProgTitle''}{ugIntProgPage} in Chapter +\ugIntProgNumber\ignore{ugIntProg}, we choose the name +\nonLibAxiomType{DrawComplex} and abbreviation +\nonLibAxiomType{DRAWCX}.\footnote{An abbreviation can be any string +of between two and seven capital letters and digits, beginning with a +letter. See +\downlink{``\ugTypesWritingAbbrTitle''}{ugTypesWritingAbbrPage} in +Section \ugTypesWritingAbbrNumber\ignore{ugTypesWritingAbbr} for more +information.} To be sure that you have not chosen a name or +abbreviation already used by the system, issue the system command +\spadcmd{)show} for both the name and the abbreviation. + +Once you have named the package and its abbreviation, you can choose +any new filename you like with extension ``{\bf \spadFileExt{}}'' to +hold the definition of your package. We choose the name {\bf +drawpak\spadFileExt{}}. If your application involves more than one +package, you can put them all in the same file. Axiom assumes no +relationship between the name of a library file, and the name or +abbreviation of a package. + +Near the top of the ``{\bf \spadFileExt{}}'' file, list all the +abbreviations for the packages using \spadcmd{)abbrev}, each command +beginning in column one. Macros giving names to Axiom expressions can +also be placed near the top of the file. The macros are only usable +from their point of definition until the end of the file. + +Consider the definition of +\nonLibAxiomType{DrawComplex} in Figure \ref{fig-pak-cdraw}. +After the macro +definition +\begin{verbatim} +S ==> Segment DoubleFloat +\end{verbatim} +the name +{\tt S} can be used in the file as a +shorthand for \axiomType{Segment DoubleFloat}. +\footnote{The interpreter also allows +{\tt macro} for macro definitions.} +The abbreviation command for the package +\begin{verbatim} +)abbrev package DRAWCX DrawComplex +\end{verbatim} +is given after the macros (although it could precede them). + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugPackagesSyntaxTitle}{Syntax} +\newcommand{\ugPackagesSyntaxNumber}{11.2.} + +@ +\section{Syntax} +\label{ugPackagesSyntaxPage} +\index{pages!ugPackagesSyntaxPage!ug11.ht} +\index{ug11.ht!pages!ugPackagesSyntaxPage} +\index{ugPackagesSyntaxPage!ug11.ht!pages} +<>= +\begin{page}{ugPackagesSyntaxPage}{11.2. Syntax} +\beginscroll +% +The definition of a package has the syntax: +\centerline{{\frenchspacing{\it PackageForm {\tt :} Exports\quad{\tt ==}\quad Implementation}}} +The syntax for defining a package constructor is the same as that +for defining any function in Axiom. +In practice, the definition extends over many lines so that this syntax is +not practical. +Also, the type of a package is expressed by the operator \axiom{with} +\spadkey{with} +followed by an explicit list of operations. +A preferable way to write the definition of a package is with a \axiom{where} +\spadkey{where} +expression: + +\beginImportant +The definition of a package usually has the form: \newline +{\tt% +{\it PackageForm} : Exports == Implementation where \newline +\texht{\hspace*{.75pc}}{\tab{3}} {\it optional type declarations}\newline +\texht{\hspace*{.75pc}}{\tab{3}} Exports == with \newline +\texht{\hspace*{2.0pc}}{\tab{6}} {\it list of exported operations}\newline +\texht{\hspace*{.75pc}}{\tab{3}} Implementation == add \newline +\texht{\hspace*{2.0pc}}{\tab{6}} {\it list of function definitions for exported operations} +} +\endImportant + +The \axiomType{DrawComplex} package takes no parameters and exports five +operations, each a separate item of a \spadgloss{pile}. +Each operation is described as a \spadgloss{declaration}: a name, followed +by a colon (\axiomSyntax{:}), followed by the type of the operation. +All operations have types expressed as \spadglossSee{mappings}{mapping} with +the syntax +\centerline{{{\it}} +\centerline{{source\quad{\tt ->}\quad target}} +\centerline{{}}} + +%e ********************************************************************* +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugPackagesAbstractTitle}{Abstract Datatypes} +\newcommand{\ugPackagesAbstractNumber}{11.3.} + +@ +\section{Abstract Datatypes} +\label{ugPackagesAbstractPage} +\begin{itemize} +\item ugIntProgCompFunsPage \ref{ugIntProgCompFunsPage} on +page~\pageref{ugIntProgCompFunsPage} +\end{itemize} +\index{pages!ugPackagesAbstractPage!ug11.ht} +\index{ug11.ht!pages!ugPackagesAbstractPage} +\index{ugPackagesAbstractPage!ug11.ht!pages} +<>= +\begin{page}{ugPackagesAbstractPage}{11.3. Abstract Datatypes} +\beginscroll + +A constructor as defined in Axiom is called an \spadgloss{abstract +datatype} in the computer science literature. Abstract datatypes +separate ``specification'' (what operations are provided) from +``implementation'' (how the operations are implemented). The {\tt +Exports} (specification) part of a constructor is said to be +``public'' (it provides the user interface to the package) whereas the +{\tt Implementation} part is ``private'' (information here is +effectively hidden---programs cannot take advantage of it). + +The {\tt Exports} part specifies what operations the package provides +to users. As an author of a package, you must ensure that the {\tt +Implementation} part provides a function for each operation in the +{\tt Exports} part.\footnote{The \spadtype{DrawComplex} package +enhances the facility described in +\downlink{``\ugIntProgCompFunsTitle''}{ugIntProgCompFunsPage} in +Chapter \ugIntProgCompFunsNumber\ignore{ugIntProgCompFuns} by allowing +a complex function to have arrows emanating from the surface to +indicate the direction of the complex argument.} + +An important difference between interactive programming and the use of +packages is in the handling of global variables such as +\axiom{realSteps} and \axiom{imagSteps}. In interactive programming, +you simply change the values of variables by \spadgloss{assignment}. +With packages, such variables are local to the package---their values +can only be set using functions exported by the package. In our +example package, we provide two functions \fakeAxiomFun{setRealSteps} +and \fakeAxiomFun{setImagSteps} for this purpose. + +Another local variable is \axiom{clipValue} which can be changed using +the exported operation \fakeAxiomFun{setClipValue}. This value is +referenced by the internal function \fakeAxiomFun{clipFun} that +decides whether to use the computed value of the function at a point +or, if the magnitude of that value is too large, the value assigned to +\axiom{clipValue} (with the appropriate sign). + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugPackagesCapsulesTitle}{Capsules} +\newcommand{\ugPackagesCapsulesNumber}{11.4.} + +@ +\section{Capsules} +\label{ugPackagesCapsulesPage} +\index{pages!ugPackagesCapsulesPage!ug11.ht} +\index{ug11.ht!pages!ugPackagesCapsulesPage} +\index{ugPackagesCapsulesPage!ug11.ht!pages} +<>= +\begin{page}{ugPackagesCapsulesPage}{11.4. Capsules} +\beginscroll +% +The part to the right of {\tt add} in the {\tt Implementation} +\spadkey{add} +part of the definition is called a \spadgloss{capsule}. +The purpose of a capsule is: +\indent{4} +\beginitems +\item[-] to define a function for each exported operation, and +\item[-] to define a \spadgloss{local environment} for these functions to run. +\enditems +\indent{0} + +What is a local environment? +First, what is an environment? +Think of the capsule as an input file that Axiom reads from top to +bottom. +Think of the input file as having a \axiom{)clear all} at the top +so that initially no variables or functions are defined. +When this file is read, variables such as \axiom{realSteps} and +\axiom{arrowSize} in \nonLibAxiomType{DrawComplex} are set to initial values. +Also, all the functions defined in the capsule are compiled. +These include those that are exported (like \axiom{drawComplex}), and +those that are not (like \axiom{makeArrow}). +At the end, you get a set of name-value pairs: +variable names (like \axiom{realSteps} and \axiom{arrowSize}) +are paired with assigned values, while +operation names (like \axiom{drawComplex} and \axiom{makeArrow}) +are paired with function values. + +This set of name-value pairs is called an \spadgloss{environment}. +Actually, we call this environment the ``initial environment'' of a package: +it is the environment that exists immediately after the package is +first built. +Afterwards, functions of this capsule can +access or reset a variable in the environment. +The environment is called {\it local} since any changes to the value of a +variable in this environment can be seen {\it only} by these functions. + +Only the functions from the package can change the variables in the local +environment. +When two functions are called successively from a package, +any changes caused by the first function called +are seen by the second. + +Since the environment is local to the package, its names +don't get mixed +up with others in the system or your workspace. +If you happen to have a variable called \axiom{realSteps} in your +workspace, it does not affect what the +\nonLibAxiomType{DrawComplex} functions do in any way. + +The functions in a package are compiled into machine code. +Unlike function definitions in input files that may be compiled repeatedly +as you use them with varying argument types, +functions in packages have a unique type (generally parameterized by +the argument parameters of a package) and a unique compilation residing on disk. + +The capsule itself is turned into a compiled function. +This so-called {\it capsule function} is what builds the initial environment +spoken of above. +If the package has arguments (see below), then each call to the package +constructor with a distinct pair of arguments +builds a distinct package, each with its own local environment. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugPackagesInputFilesTitle}{Input Files vs. Packages} +\newcommand{\ugPackagesInputFilesNumber}{11.5.} + +@ +\section{Input Files vs. Packages} +\label{ugPackagesInputFilesPage} +\index{pages!ugPackagesInputFilesPage!ug11.ht} +\index{ug11.ht!pages!ugPackagesInputFilesPage} +\index{ugPackagesInputFilesPage!ug11.ht!pages} +<>= +\begin{page}{ugPackagesInputFilesPage}{11.5. Input Files vs. Packages} +\beginscroll +% +A good question at this point would be ``Is writing a package more difficult than +writing an input file?'' + +The programs in input files are designed for flexibility and ease-of-use. +Axiom can usually work out all of your types as it reads your program +and does the computations you request. +Let's say that you define a one-argument function without giving its type. +When you first apply the function to a value, this +value is understood by Axiom as identifying the type for the +argument parameter. +Most of the time Axiom goes through the body of your function and +figures out the target type that you have in mind. +Axiom sometimes fails to get it right. +Then---and only then---do you need a declaration to tell Axiom what +type you want. + +Input files are usually written to be read by Axiom---and by you. +Without suitable documentation and declarations, your input files +are likely incomprehensible to a colleague---and to you some +months later! + +Packages are designed for legibility, as well as +run-time efficiency. +There are few new concepts you need to learn to write +packages. Rather, you just have to be explicit about types +and type conversions. +The types of all functions are pre-declared so that Axiom---and the reader--- +knows precisely what types of arguments can be passed to and from +the functions (certainly you don't want a colleague to guess or to +have to work this out from context!). +The types of local variables are also declared. +Type conversions are explicit, never automatic.\footnote{There +is one exception to this rule: conversions from a subdomain to a +domain are automatic. +After all, the objects both have the domain as a common type.} + +In summary, packages are more tedious to write than input files. +When writing input files, you can casually go ahead, giving some +facts now, leaving others for later. +Writing packages requires forethought, care and discipline. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugPackagesPackagesTitle}{Compiling Packages} +\newcommand{\ugPackagesPackagesNumber}{11.6.} + +@ +\section{Compiling Packages} +\label{ugPackagesPackagesPage} +\index{pages!ugPackagesPackagesPage!ug11.ht} +\index{ug11.ht!pages!ugPackagesPackagesPage} +\index{ugPackagesPackagesPage!ug11.ht!pages} +<>= +\begin{page}{ugPackagesPackagesPage}{11.6. Compiling Packages} +\beginscroll +% + +Once you have defined the package \nonLibAxiomType{DrawComplex}, +you need to compile and test it. +To compile the package, issue the system command \spadcmd{)compile drawpak}. +Axiom reads the file {\bf drawpak\spadFileExt{}} +and compiles its contents into machine binary. +If all goes well, the file {\bf DRAWCX.nrlib} is created in your +local directory for the package. +To test the package, you must load the package before trying an +operation. + +\nullXtc{ +Compile the package. +}{ +\spadpaste{)compile drawpak} +} +\xtc{ +Expose the package. +}{ +\spadpaste{)expose DRAWCX \bound{dp}} +} +\xtc{ +Use an odd step size to avoid +a pole at the origin. +}{ +\spadpaste{setRealSteps 51 \free{dp}\bound{srs}} +} +\xtc{ +}{ +\spadpaste{setImagSteps 51 \free{dp}\bound{scs}} +} +\xtc{ +Define \userfun{f} to be the Gamma function. +}{ +\spadpaste{f(z) == Gamma(z) \bound{f}} +} +\xtc{ +Clip values of function with magnitude larger than 7. +}{ +\spadpaste{setClipValue 7} +} +\psXtc{ +Draw the \spadfun{Gamma} function. +}{ +\graphpaste{drawComplex(f,-\%pi..\%pi,-\%pi..\%pi, false) \free{srs scs f}} +}{ +\epsffile[0 0 300 300]{../ps/3dgamma11.ps} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugPackagesParametersTitle}{Parameters} +\newcommand{\ugPackagesParametersNumber}{11.7.} + +@ +\section{Parameters} +\label{ugPackagesParametersPage} +\begin{itemize} +\item ugTypesPage \ref{ugTypesPage} on +page~\pageref{ugTypesPage} +\item ugUserBlocksPage \ref{ugUserBlocksPage} on +page~\pageref{ugUserBlocksPage} +\item ugCategoriesAttributesPage \ref{ugCategoriesAttributesPage} on +page~\pageref{ugCategoriesAttributesPage} +\end{itemize} +\index{pages!ugPackagesParametersPage!ug11.ht} +\index{ug11.ht!pages!ugPackagesParametersPage} +\index{ugPackagesParametersPage!ug11.ht!pages} +<>= +\begin{page}{ugPackagesParametersPage}{11.7. Parameters} +\beginscroll +% +The power of packages becomes evident when packages have parameters. +Usually these parameters are domains and the exported operations have types +involving these parameters. + +In \downlink{``\ugTypesTitle''}{ugTypesPage} in Chapter +\ugTypesNumber\ignore{ugTypes}, you learned that categories denote +classes of domains. Although we cover this notion in detail in the +next chapter, we now give you a sneak preview of its usefulness. + +In \downlink{``\ugUserBlocksTitle''}{ugUserBlocksPage} in Section +\ugUserBlocksNumber\ignore{ugUserBlocks}, we defined functions +\axiom{bubbleSort(m)} and \axiom{insertionSort(m)} to sort a list of +integers. If you look at the code for these functions, you see that +they may be used to sort {\it any} structure \axiom{m} with the right +properties. Also, the functions can be used to sort lists of {\it +any} elements---not just integers. Let us now recall the code for +\axiom{bubbleSort}. + +\begin{verbatim} +bubbleSort(m) == + n := #m + for i in 1..(n-1) repeat + for j in n..(i+1) by -1 repeat + if m.j < m.(j-1) then swap!(m,j,j-1) + m +\end{verbatim} + +What properties of ``lists of integers'' are assumed by the sorting +algorithm? In the first line, the operation \spadfun{\#} computes the +maximum index of the list. The first obvious property is that +\axiom{m} must have a finite number of elements. In Axiom, this is +done by your telling Axiom that \axiom{m} has the ``attribute'' +\spadatt{finiteAggregate}. An \spadgloss{attribute} is a property +that a domain either has or does not have. As we show later in +\downlink{``\ugCategoriesAttributesTitle''}{ugCategoriesAttributesPage} +in Section +\ugCategoriesAttributesNumber\ignore{ugCategoriesAttributes}, programs +can query domains as to the presence or absence of an attribute. + +The operation \spadfunX{swap} swaps elements of \axiom{m}. +Using \Browse{}, you find that \spadfunX{swap} requires its +elements to come from a domain of category +\axiomType{IndexedAggregate} with attribute +\spadatt{shallowlyMutable}. +This attribute means that you can change the internal components +of \axiom{m} without changing its external structure. +Shallowly-mutable data structures include lists, streams, one- and +two-dimensional arrays, vectors, and matrices. + +The category \axiomType{IndexedAggregate} designates the class of +aggregates whose elements can be accessed by the notation +\axiom{m.s} for suitable selectors \axiom{s}. +The category \axiomType{IndexedAggregate} takes two arguments: +\axiom{Index}, a domain of selectors for the aggregate, and +\axiom{Entry}, a domain of entries for the aggregate. +Since the sort functions access elements by integers, we must +choose \axiom{Index = }\axiomType{Integer}. +The most general class of domains for which \axiom{bubbleSort} and +\axiom{insertionSort} are defined are those of +category \spadtype{IndexedAggregate(Integer,Entry)} with the two +attributes \spadatt{shallowlyMutable} and +\spadatt{finiteAggregate}. + +Using \Browse{}, you can also discover that Axiom has many kinds of domains +with attribute \spadatt{shallowlyMutable}. +Those of class \axiomType{IndexedAggregate(Integer,Entry)} include +\axiomType{Bits}, \axiomType{FlexibleArray}, \axiomType{OneDimensionalArray}, +\axiomType{List}, \axiomType{String}, and \axiomType{Vector}, and also +\axiomType{HashTable} and \axiomType{EqTable} with integer keys. +Although you may never want to sort all such structures, we +nonetheless demonstrate Axiom's +ability to do so. + +Another requirement is that \nonLibAxiomType{Entry} has an operation +\axiomOp{<}. One way to get this operation is to assume that +\nonLibAxiomType{Entry} has category \axiomType{OrderedSet}. By +definition, will then export a \axiomOp{<} operation. A more general +approach is to allow any comparison function \axiom{f} to be used for +sorting. This function will be passed as an argument to the sorting +functions. + +Our sorting package then takes two arguments: a domain \axiom{S} of +objects of {\it any} type, and a domain \axiom{A}, an aggregate of +type \axiomType{IndexedAggregate(Integer, S)} with the above two +attributes. Here is its definition using what are close to the +original definitions of \axiom{bubbleSort} and \axiom{insertionSort} +for sorting lists of integers. The symbol \axiomSyntax{!} is added to +the ends of the operation names. This uniform naming convention is +used for Axiom operation names that destructively change one or more +of their arguments. + +\beginImportant + +\noindent +{\tt 1.\ \ \ SortPackage(S,A)\ :\ Exports\ ==\ Implementation\ where}\newline +{\tt 2.\ \ \ \ \ S:\ Object}\newline +{\tt 3.\ \ \ \ \ A:\ IndexedAggregate(Integer,S)}\newline +{\tt 4.\ \ \ \ \ \ \ with\ (finiteAggregate;\ shallowlyMutable)}\newline +{\tt 5.\ \ \ }\newline +{\tt 6.\ \ \ \ \ Exports\ ==\ with}\newline +{\tt 7.\ \ \ \ \ \ \ bubbleSort!:\ (A,(S,S)\ ->\ Boolean)\ ->\ A}\newline +{\tt 8.\ \ \ \ \ \ \ insertionSort!:\ (A,\ (S,S)\ ->\ Boolean)\ ->\ A}\newline +{\tt 9.\ \ \ }\newline +{\tt 10.\ \ \ \ Implementation\ ==\ add}\newline +{\tt 11.\ \ \ \ \ \ bubbleSort!(m,f)\ ==}\newline +{\tt 12.\ \ \ \ \ \ \ \ n\ :=\ \#m}\newline +{\tt 13.\ \ \ \ \ \ \ \ for\ i\ in\ 1..(n-1)\ repeat}\newline +{\tt 14.\ \ \ \ \ \ \ \ \ \ for\ j\ in\ n..(i+1)\ by\ -1\ repeat}\newline +{\tt 15.\ \ \ \ \ \ \ \ \ \ \ \ if\ f(m.j,m.(j-1))\ then\ swap!(m,j,j-1)}\newline +{\tt 16.\ \ \ \ \ \ \ \ m}\newline +{\tt 17.\ \ \ \ \ \ insertionSort!(m,f)\ ==}\newline +{\tt 18.\ \ \ \ \ \ \ \ for\ i\ in\ 2..\#m\ repeat}\newline +{\tt 19.\ \ \ \ \ \ \ \ \ \ j\ :=\ i}\newline +{\tt 20.\ \ \ \ \ \ \ \ \ \ while\ j\ >\ 1\ and\ f(m.j,m.(j-1))\ repeat}\newline +{\tt 21.\ \ \ \ \ \ \ \ \ \ \ \ swap!(m,j,j-1)}\newline +{\tt 22.\ \ \ \ \ \ \ \ \ \ \ \ j\ :=\ (j\ -\ 1)\ pretend\ PositiveInteger}\newline +{\tt 23.\ \ \ \ \ \ \ \ m}\newline +\endImportant + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugPackagesCondsTitle}{Conditionals} +\newcommand{\ugPackagesCondsNumber}{11.8.} + +@ +\section{Conditionals} +\label{ugPackagesCondsPage} +\begin{itemize} +\item ugUserBlocksPage \ref{ugUserBlocksPage} on +page~\pageref{ugUserBlocksPage} +\end{itemize} +\index{pages!ugPackagesCondsPage!ug11.ht} +\index{ug11.ht!pages!ugPackagesCondsPage} +\index{ugPackagesCondsPage!ug11.ht!pages} +<>= +\begin{page}{ugPackagesCondsPage}{11.8. Conditionals} +\beginscroll +% +When packages have parameters, you can say that an operation is or is not +exported depending on the values of those parameters. +When the domain of objects \axiom{S} has an \axiomOp{<} +operation, we can supply one-argument versions of +\axiom{bubbleSort} and \axiom{insertionSort} which use this operation +for sorting. +The presence of the +operation \axiomOp{<} is guaranteed when \axiom{S} is an ordered set. + +\beginImportant + +\noindent +{\tt 1.\ \ \ Exports\ ==\ with}\newline +{\tt 2.\ \ \ \ \ \ \ bubbleSort!:\ (A,(S,S)\ ->\ Boolean)\ ->\ A}\newline +{\tt 3.\ \ \ \ \ \ \ insertionSort!:\ (A,\ (S,S)\ ->\ Boolean)\ ->\ A}\newline +{\tt 4.\ \ \ }\newline +{\tt 5.\ \ \ \ \ \ \ if\ S\ has\ OrderedSet\ then}\newline +{\tt 6.\ \ \ \ \ \ \ \ \ bubbleSort!:\ A\ ->\ A}\newline +{\tt 7.\ \ \ \ \ \ \ \ \ insertionSort!:\ A\ ->\ A}\newline +\endImportant + +In addition to exporting the one-argument sort operations +conditionally, we must provide conditional definitions for the +operations in the {\tt Implementation} part. +This is easy: just have the one-argument functions call the +corresponding two-argument functions with the operation +\axiomOp{<} from \axiom{S}. + +\beginImportant + +\noindent +{\tt 1.\ \ \ \ \ Implementation\ ==\ add}\newline +{\tt 2.\ \ \ \ \ \ \ \ \ \ ...}\newline +{\tt 3.\ \ \ \ \ \ \ if\ S\ has\ OrderedSet\ then}\newline +{\tt 4.\ \ \ \ \ \ \ \ \ bubbleSort!(m)\ ==\ bubbleSort!(m,<\$S)}\newline +{\tt 5.\ \ \ \ \ \ \ \ \ insertionSort!(m)\ ==\ insertionSort!(m,<\$S)}\newline +\endImportant + +In \downlink{``\ugUserBlocksTitle''}{ugUserBlocksPage} in Section +\ugUserBlocksNumber\ignore{ugUserBlocks}, we give an alternative +definition of \fakeAxiomFun{bubbleSort} using +\spadfunFrom{first}{List} and \spadfunFrom{rest}{List} that is more +efficient for a list (for which access to any element requires +traversing the list from its first node). To implement a more +efficient algorithm for lists, we need the operation \spadfun{setelt} +which allows us to destructively change the \spadfun{first} and +\spadfun{rest} of a list. Using \Browse{}, you find that these +operations come from category \axiomType{UnaryRecursiveAggregate}. +Several aggregate types are unary recursive aggregates including those +of \axiomType{List} and \axiomType{AssociationList}. We provide two +different implementations for \fakeAxiomFun{bubbleSort!} and +\fakeAxiomFun{insertionSort!}: one for list-like structures, another +for array-like structures. + +\beginImportant + +\noindent +{\tt 1.\ \ \ Implementation\ ==\ add}\newline +{\tt 2.\ \ \ \ \ \ \ \ \ \ \ ...}\newline +{\tt 3.\ \ \ \ \ \ \ if\ A\ has\ UnaryRecursiveAggregate(S)\ then}\newline +{\tt 4.\ \ \ \ \ \ \ \ \ bubbleSort!(m,fn)\ ==}\newline +{\tt 5.\ \ \ \ \ \ \ \ \ \ \ empty?\ m\ =>\ m}\newline +{\tt 6.\ \ \ \ \ \ \ \ \ \ \ l\ :=\ m}\newline +{\tt 7.\ \ \ \ \ \ \ \ \ \ \ while\ not\ empty?\ (r\ :=\ l.rest)\ repeat}\newline +{\tt 8.\ \ \ \ \ \ \ \ \ \ \ \ \ \ r\ :=\ bubbleSort!\ r}\newline +{\tt 9.\ \ \ \ \ \ \ \ \ \ \ \ \ \ x\ :=\ l.first}\newline +{\tt 10.\ \ \ \ \ \ \ \ \ \ \ \ \ if\ fn(r.first,x)\ then}\newline +{\tt 11.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ l.first\ :=\ r.first}\newline +{\tt 12.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ r.first\ :=\ x}\newline +{\tt 13.\ \ \ \ \ \ \ \ \ \ \ \ \ l.rest\ :=\ r}\newline +{\tt 14.\ \ \ \ \ \ \ \ \ \ \ \ \ l\ :=\ l.rest}\newline +{\tt 15.\ \ \ \ \ \ \ \ \ \ \ m}\newline +{\tt 16.\ \ \ \ \ \ \ \ \ insertionSort!(m,fn)\ ==}\newline +{\tt 17.\ \ \ \ \ \ \ \ \ \ \ \ ...}\newline +\endImportant + +The ordering of definitions is important. +The standard definitions come first and +then the predicate +\begin{verbatim} +A has UnaryRecursiveAggregate(S) +\end{verbatim} +is evaluated. +If {\tt true}, the special definitions cover up the standard ones. + +Another equivalent way to write the capsule is to use an +\axiom{if-then-else} expression: +\spadkey{if} + +\beginImportant + +\noindent +{\tt 1.\ \ \ \ \ \ \ \ if\ A\ has\ UnaryRecursiveAggregate(S)\ then}\newline +{\tt 2.\ \ \ \ \ \ \ \ \ \ \ ...}\newline +{\tt 3.\ \ \ \ \ \ \ \ else}\newline +{\tt 4.\ \ \ \ \ \ \ \ \ \ \ ...}\newline +\endImportant + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugPackagesCompilingTitle}{Testing} +\newcommand{\ugPackagesCompilingNumber}{11.9.} + +@ +\section{Testing} +\label{ugPackagesCompilingPage} +\begin{itemize} +\item EqTableXmpPage \ref{EqTableXmpPage} on +page~\pageref{EqTableXmpPage} +\end{itemize} +\index{pages!ugPackagesCompilingPage!ug11.ht} +\index{ug11.ht!pages!ugPackagesCompilingPage} +\index{ugPackagesCompilingPage!ug11.ht!pages} +<>= +\begin{page}{ugPackagesCompilingPage}{11.9. Testing} +\beginscroll +% +Once you have written the package, embed it in a file, for example, {\bf +sortpak\spadFileExt{}}. +Be sure to include an \axiom{)abbrev} command at the top of the file: +\begin{verbatim} +)abbrev package SORTPAK SortPackage +\end{verbatim} +Now compile the file (using \spadcmd{)compile sortpak\spadFileExt{}}). +\xtc{ +Expose the constructor. +You are then ready to begin testing. +}{ +\spadpaste{)expose SORTPAK} +} +\xtc{ +Define a list. +}{ +\spadpaste{l := [1,7,4,2,11,-7,3,2]} +} +\xtc{ +Since the integers are an ordered set, +a one-argument operation will do. +}{ +\spadpaste{bubbleSort!(l)} +} +\xtc{ +Re-sort it using ``greater than.'' +}{ +\spadpaste{bubbleSort!(l,(x,y) +-> x > y)} +} +\xtc{ +Now sort it again using \axiomOp{<} on integers. +}{ +\spadpaste{bubbleSort!(l, <\$Integer)} +} +\xtc{ +A string is an aggregate of characters so we can sort them as well. +}{ +\spadpaste{bubbleSort! "Mathematical Sciences"} +} +\xtc{ +Is \axiomOp{<} defined on booleans? +}{ +\spadpaste{false < true} +} +\xtc{ +Good! Create a bit string representing ten consecutive +boolean values \axiom{true}. +}{ +\spadpaste{u : Bits := new(10,true)} +} +\xtc{ +Set bits 3 through 5 to \axiom{false}, then display the result. +}{ +\spadpaste{u(3..5) := false; u} +} +\xtc{ +Now sort these booleans. +}{ +\spadpaste{bubbleSort! u} +} +\xtc{ +Create an ``eq-table'' (see +\downlink{`EqTable'}{EqTableXmpPage}\ignore{EqTable}), a +table having integers as keys +and strings as values. +}{ +\spadpaste{t : EqTable(Integer,String) := table()} +} +\xtc{ +Give the table a first entry. +}{ +\spadpaste{t.1 := "robert"} +} +\xtc{ +And a second. +}{ +\spadpaste{t.2 := "richard"} +} +\xtc{ +What does the table look like? +}{ +\spadpaste{t} +} +\xtc{ +Now sort it. +}{ +\spadpaste{bubbleSort! t} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugPackagesHowTitle}{How Packages Work} +\newcommand{\ugPackagesHowNumber}{11.10.} + +@ +\section{How Packages Work} +\label{ugPackagesHowPage} +\begin{itemize} +\item ugCategoriesHierPage \ref{ugCategoriesHierPage} on +page~\pageref{ugCategoriesHierPage} +\end{itemize} +\index{pages!ugPackagesHowPage!ug11.ht} +\index{ug11.ht!pages!ugPackagesHowPage} +\index{ugPackagesHowPage!ug11.ht!pages} +<>= +\begin{page}{ugPackagesHowPage}{11.10. How Packages Work} +\beginscroll +% +Recall that packages as abstract datatypes are compiled independently +and put into the library. +The curious reader may ask: ``How is the interpreter able to find an +operation such as \fakeAxiomFun{bubbleSort!}? +Also, how is a single compiled function such as \fakeAxiomFun{bubbleSort!} able +to sort data of different types?'' + +After the interpreter loads the package \nonLibAxiomType{SortPackage}, the four +operations from the package become known to the interpreter. +Each of these operations is expressed as a {\it modemap} in which the type +of the operation is written in terms of symbolic domains. +\nullXtc{ +See the modemaps for \fakeAxiomFun{bubbleSort!}. +}{ +\spadpaste{)display op bubbleSort!} +} +\begin{verbatim} +There are 2 exposed functions called bubbleSort! : + + [1] D1 -> D1 from SortPackage(D2,D1) + if D2 has ORDSET and D2 has OBJECT and D1 has + IndexedAggregate(Integer, D2) with + finiteAggregate + shallowlyMutable + + [2] (D1,((D3,D3) -> Boolean)) -> D1 from SortPackage(D3,D1) + if D3 has OBJECT and D1 has + IndexedAggregate(Integer,D3) with + finiteAggregate + shallowlyMutable +\end{verbatim} + +What happens if you ask for \axiom{bubbleSort!([1,-5,3])}? +There is a unique modemap for an operation named +\fakeAxiomFun{bubbleSort!} with one argument. +Since \axiom{[1,-5,3]} is a list of integers, the symbolic domain +\axiom{D1} is defined as \axiomType{List(Integer)}. +For some operation to apply, it must satisfy the predicate for +some \axiom{D2}. +What \axiom{D2}? +The third expression of the \axiom{and} requires {\tt D1 has +IndexedAggregate(Integer, D2) with} two attributes. +So the interpreter searches for an \axiomType{IndexedAggregate} +among the ancestors of \axiomType{List (Integer)} (see + +\downlink{``\ugCategoriesHierTitle''}{ugCategoriesHierPage} in Section +\ugCategoriesHierNumber\ignore{ugCategoriesHier}). It finds one: +\axiomType{IndexedAggregate(Integer, Integer)}. The interpreter tries +defining \axiom{D2} as \axiomType{Integer}. After substituting for +\axiom{D1} and \axiom{D2}, the predicate evaluates to \axiom{true}. +An applicable operation has been found! + +Now Axiom builds the package \axiomType{SortPackage(List(Integer), +Integer)}. According to its definition, this package exports the +required operation: \fakeAxiomFun{bubbleSort!}: \spadsig{List +Integer}{List Integer}. The interpreter then asks the package for a +function implementing this operation. The package gets all the +functions it needs (for example, \axiomFun{rest} and \axiomFunX{swap}) +from the appropriate domains and then it returns a +\fakeAxiomFun{bubbleSort!} to the interpreter together with the local +environment for \fakeAxiomFun{bubbleSort!}. The interpreter applies +the function to the argument \axiom{[1,-5,3]}. The +\fakeAxiomFun{bubbleSort!} function is executed in its local +environment and produces the result. \endscroll \autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 12 (ug12.ht)} +<>= +\newcommand{\ugCategoriesTitle}{Categories} +\newcommand{\ugCategoriesNumber}{12.} + +@ +\section{Categories} +\label{ugCategoriesPage} +\begin{itemize} +\item ugTypesBasicDomainConsPage \ref{ugTypesBasicDomainConsPage} on +page~\pageref{ugTypesBasicDomainConsPage} +\item ugCategoriesDefsPage \ref{ugCategoriesDefsPage} on +page~\pageref{ugCategoriesDefsPage} +\item ugCategoriesExportsPage \ref{ugCategoriesExportsPage} on +page~\pageref{ugCategoriesExportsPage} +\item ugCategoriesDocPage \ref{ugCategoriesDocPage} on +page~\pageref{ugCategoriesDocPage} +\item ugCategoriesHierPage \ref{ugCategoriesHierPage} on +page~\pageref{ugCategoriesHierPage} +\item ugCategoriesMembershipPage \ref{ugCategoriesMembershipPage} on +page~\pageref{ugCategoriesMembershipPage} +\item ugCategoriesDefaultsPage \ref{ugCategoriesDefaultsPage} on +page~\pageref{ugCategoriesDefaultsPage} +\item ugCategoriesAxiomsPage \ref{ugCategoriesAxiomsPage} on +page~\pageref{ugCategoriesAxiomsPage} +\item ugCategoriesCorrectnessPage \ref{ugCategoriesCorrectnessPage} on +page~\pageref{ugCategoriesCorrectnessPage} +\item ugCategoriesAttributesPage \ref{ugCategoriesAttributesPage} on +page~\pageref{ugCategoriesAttributesPage} +\item ugCategoriesParametersPage \ref{ugCategoriesParametersPage} on +page~\pageref{ugCategoriesParametersPage} +\item ugCategoriesConditionalsPage \ref{ugCategoriesConditionalsPage} on +page~\pageref{ugCategoriesConditionalsPage} +\item ugCategoriesAndPackagesPage \ref{ugCategoriesAndPackagesPage} on +page~\pageref{ugCategoriesAndPackagesPage} +\end{itemize} +\index{pages!ugCategoriesPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesPage} +\index{ugCategoriesPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesPage}{12. Categories} +\beginscroll + +This chapter unravels the mysteries of categories---what +they are, how they are related to domains and packages, +how they are defined in Axiom, and how you can extend the +system to include new categories of your own. + +We assume that you have read the introductory material on domains and +categories in +\downlink{``\ugTypesBasicDomainConsTitle''}{ugTypesBasicDomainConsPage} +in Section +\ugTypesBasicDomainConsNumber\ignore{ugTypesBasicDomainCons}. There +you learned that the notion of packages covered in the previous +chapter are special cases of domains. While this is in fact the case, +it is useful here to regard domains as distinct from packages. + +Think of a domain as a datatype, a collection of objects (the objects +of the domain). From your ``sneak preview'' in the previous chapter, +you might conclude that categories are simply named clusters of +operations exported by domains. As it turns out, categories have a +much deeper meaning. Categories are fundamental to the design of +Axiom. They control the interactions between domains and algorithmic +packages, and, in fact, between all the components of Axiom. + +Categories form hierarchies as shown on the inside cover pages of this +book. The inside front-cover pages illustrate the basic algebraic +hierarchy of the Axiom programming language. The inside back-cover +pages show the hierarchy for data structures. + +Think of the category structures of Axiom as a foundation for a city +on which superstructures (domains) are built. The algebraic +hierarchy, for example, serves as a foundation for constructive +mathematical algorithms embedded in the domains of Axiom. Once in +place, domains can be constructed, either independently or from one +another. + +Superstructures are built for quality---domains are compiled into +machine code for run-time efficiency. You can extend the foundation +in directions beyond the space directly beneath the superstructures, +then extend selected superstructures to cover the space. Because of +the compilation strategy, changing components of the foundation +generally means that the existing superstructures (domains) built on +the changed parts of the foundation (categories) have to be +rebuilt---that is, recompiled. + +Before delving into some of the interesting facts about categories, let's see +how you define them in Axiom. + +\beginmenu + \menudownlink{{12.1. Definitions}}{ugCategoriesDefsPage} + \menudownlink{{12.2. Exports}}{ugCategoriesExportsPage} + \menudownlink{{12.3. Documentation}}{ugCategoriesDocPage} + \menudownlink{{12.4. Hierarchies}}{ugCategoriesHierPage} + \menudownlink{{12.5. Membership}}{ugCategoriesMembershipPage} + \menudownlink{{12.6. Defaults}}{ugCategoriesDefaultsPage} + \menudownlink{{12.7. Axioms}}{ugCategoriesAxiomsPage} + \menudownlink{{12.8. Correctness}}{ugCategoriesCorrectnessPage} + \menudownlink{{12.9. Attributes}}{ugCategoriesAttributesPage} + \menudownlink{{12.10. Parameters}}{ugCategoriesParametersPage} + \menudownlink{{12.11. Conditionals}}{ugCategoriesConditionalsPage} + \menudownlink{{12.12. Anonymous Categories}}{ugCategoriesAndPackagesPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugCategoriesDefsTitle}{Definitions} +\newcommand{\ugCategoriesDefsNumber}{12.1.} + +@ +\section{Definitions} +\label{ugCategoriesDefsPage} +\begin{itemize} +\item ugTypesPage \ref{ugTypesPage} on +page~\pageref{ugTypesPage} +\end{itemize} +\index{pages!ugCategoriesDefsPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesDefsPage} +\index{ugCategoriesDefsPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesDefsPage}{12.1. Definitions} +\beginscroll + +A category is defined by a function with exactly the same format as +any other function in Axiom. + +\beginImportant +The definition of a category has the syntax: +\centerline{{{\it CategoryForm} : {\tt Category\quad{}==\quad{}} {\it Extensions} {\tt [ with} {\it Exports} {\tt ]}}} + +The brackets {\tt [ ]} here indicate optionality. +\endImportant + + +The first example of a category definition is +\spadtype{SetCategory}, +the most basic of the algebraic categories in Axiom. + +\beginImportant + +\noindent +{\tt 1.\ \ \ SetCategory():\ Category\ ==}\newline +{\tt 2.\ \ \ \ \ \ Join(Type,CoercibleTo\ OutputForm)\ with}\newline +{\tt 3.\ \ \ \ \ \ \ \ \ "="\ :\ (\$,\ \$)\ ->\ Boolean}\newline +\endImportant + +The definition starts off with the name of the +category (\spadtype{SetCategory}); this is +always in column one in the source file. +%% maybe talk about naming conventions for source files? .spad or .ax? +All parts of a category definition are then indented with respect to this +first line. + +In \downlink{``\ugTypesTitle''}{ugTypesPage} in Chapter +\ugTypesNumber\ignore{ugTypes}, we talked about \spadtype{Ring} as +denoting the class of all domains that are rings, in short, the class +of all rings. While this is the usual naming convention in Axiom, it +is also common to use the word ``Category'' at the end of a category +name for clarity. The interpretation of the name +\spadtype{SetCategory} is, then, ``the category of all domains that +are (mathematical) sets.'' + +The name \spadtype{SetCategory} is followed in the definition by its +formal parameters enclosed in parentheses \spadSyntax{()}. +Here there are no parameters. +As required, the type of the result of this category function is the +distinguished name {\sf Category}. + +Then comes the \spadSyntax{==}. +As usual, what appears to the right of the \spadSyntax{==} is a +definition, here, a category definition. +A category definition always has two parts separated by the reserved word +\spadkey{with} +\spad{with}. +%\footnote{Debugging hint: it is very easy to forget +%the \spad{with}!} + +The first part tells what categories the category extends. +Here, the category extends two categories: \spadtype{Type}, the +category of all domains, and +\spadtype{CoercibleTo(OutputForm)}. +%\footnote{\spadtype{CoercibleTo(OutputForm)} +%can also be written (and is written in the definition above) without +%parentheses.} +The operation \spad{Join} is a system-defined operation that +\spadkey{Join} +forms a single category from two or more other categories. + +Every category other than \spadtype{Type} is an extension of some other +category. +If, for example, \spadtype{SetCategory} extended only the category +\spadtype{Type}, the definition here would read ``{\tt Type with +...}''. +In fact, the {\tt Type} is optional in this line; ``{\tt with +...}'' suffices. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugCategoriesExportsTitle}{Exports} +\newcommand{\ugCategoriesExportsNumber}{12.2.} + +@ +\section{Exports} +\label{ugCategoriesExportsPage} +\index{pages!ugCategoriesExportsPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesExportsPage} +\index{ugCategoriesExportsPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesExportsPage}{12.2. Exports} +\beginscroll + +To the right of the \spad{with} is a list of +\spadkey{with} +all the \spadglossSee{exports}{export} of the category. +Each exported operation has a name and a type expressed by a +\spadgloss{declaration} of the form +``{\frenchspacing\tt {\it name}: {\it type}}''. + +Categories can export symbols, as well as +{\tt 0} and {\tt 1} which denote +domain constants.\footnote{The +numbers {\tt 0} and {\tt 1} are operation names in Axiom.} +In the current implementation, all other exports are operations with +types expressed as \spadglossSee{mappings}{mapping} with the syntax +\centerline{{{\it}} +\centerline{{source\quad{\tt ->}\quad target}} +\centerline{{}}} + +The category \spadtype{SetCategory} has a single export: the operation +\spadop{=} whose type is given by the mapping {\tt (\$, \$) -> Boolean}. +The \spadSyntax{\$} in a mapping type always means ``the domain.'' Thus +the operation \spadop{=} takes two arguments from the domain and +returns a value of type \spadtype{Boolean}. + +The source part of the mapping here is given by a {\it tuple} +consisting of two or more types separated by commas and enclosed in +parentheses. +If an operation takes only one argument, you can drop the parentheses +around the source type. +If the mapping has no arguments, the source part of the mapping is either +left blank or written as \spadSyntax{()}. +Here are examples of formats of various operations with some +contrived names. + +\begin{verbatim} +someIntegerConstant : $ +aZeroArgumentOperation: () -> Integer +aOneArgumentOperation: Integer -> $ +aTwoArgumentOperation: (Integer,$) -> Void +aThreeArgumentOperation: ($,Integer,$) -> Fraction($) +\end{verbatim} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugCategoriesDocTitle}{Documentation} +\newcommand{\ugCategoriesDocNumber}{12.3.} + +@ +\section{Documentation} +\label{ugCategoriesDocPage} +\index{pages!ugCategoriesDocPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesDocPage} +\index{ugCategoriesDocPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesDocPage}{12.3. Documentation} +\beginscroll + +The definition of \spadtype{SetCategory} above is missing +an important component: its library documentation. +Here is its definition, complete with documentation. + +\beginImportant + +\noindent +{\tt 1.\ \ \ ++\ Description:}\newline +{\tt 2.\ \ \ ++\ \bs{}axiomType\{SetCategory\}\ is\ the\ basic\ category}\newline +{\tt 3.\ \ \ ++\ for\ describing\ a\ collection\ of\ elements\ with}\newline +{\tt 4.\ \ \ ++\ \bs{}axiomOp\{=\}\ (equality)\ and\ a\ \bs{}axiomFun\{coerce\}}\newline +{\tt 5.\ \ \ ++\ to\ \bs{}axiomType\{OutputForm\}.}\newline +{\tt 6.\ \ \ }\newline +{\tt 7.\ \ \ SetCategory():\ Category\ ==}\newline +{\tt 8.\ \ \ \ \ Join(Type,\ CoercibleTo\ OutputForm)\ with}\newline +{\tt 9.\ \ \ \ \ \ \ "=":\ (\$,\ \$)\ ->\ Boolean}\newline +{\tt 10.\ \ \ \ \ \ \ \ ++\ \bs{}axiom\{x\ =\ y\}\ tests\ if\ \bs{}axiom\{x\}\ and}\newline +{\tt 11.\ \ \ \ \ \ \ \ ++\ \bs{}axiom\{y\}\ are\ equal.}\newline +\endImportant + +Documentary comments are an important part of constructor definitions. +Documentation is given both for the category itself and for +each export. +A description for the category precedes the code. +Each line of the description begins in column one with \axiomSyntax{++}. +The description starts with the word {\tt Description:}.\footnote{Other +information such as the author's name, date of creation, and so on, +can go in this +area as well but are currently ignored by Axiom.} +All lines of the description following the initial line are +indented by the same amount. + +{\texht{\sloppy}{} +Surround the name of any constructor (with or without parameters) with an +\texht{\verb+\axiomType{}+}{\\axiomType\{\}}. +Similarly, surround an +operator name with \texht{\verb+\axiomOp{}+}{\\axiomOp\{\}}, +an Axiom operation with \texht{\verb+\axiomFun{}+}{\\axiomFun\{\}}, and a +variable or Axiom expression with +\texht{\verb+\axiom{}+}{\\axiom\{\}}. +Library documentation is given in a \TeX{}-like language so that +it can be used both for hard-copy and for \Browse{}. +These different wrappings cause operations and types to have +mouse-active buttons in \Browse{}. +For hard-copy output, wrapped expressions appear in a different font. +The above documentation appears in hard-copy as: + +} +% +\texht{\begin{quotation}}{\indent{3}} +% +\axiomType{SetCategory} is the basic category +for describing a collection of elements with \axiomOp{=} +(equality) and a \spadfun{coerce} to \axiomType{OutputForm}. +% +\texht{\end{quotation}}{\indent{0}} +% +and +% +\texht{\begin{quotation}}{\indent{3}} +% +\axiom{x = y} tests if \axiom{x} and \axiom{y} are equal. +% +\texht{\end{quotation}}{\indent{0}} +% + +For our purposes in this chapter, we omit the documentation from further +category descriptions. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugCategoriesHierTitle}{Hierarchies} +\newcommand{\ugCategoriesHierNumber}{12.4.} + +@ +\section{Hierarchies} +\label{ugCategoriesHierPage} +\index{pages!ugCategoriesHierPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesHierPage} +\index{ugCategoriesHierPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesHierPage}{12.4. Hierarchies} +\beginscroll + +A second example of a category is +\spadtype{SemiGroup}, defined by: + +\beginImportant + +\noindent +{\tt 1.\ \ \ SemiGroup():\ Category\ ==\ SetCategory\ with}\newline +{\tt 2.\ \ \ \ \ \ \ \ \ "*":\ \ (\$,\$)\ ->\ \$}\newline +{\tt 3.\ \ \ \ \ \ \ \ \ "**":\ (\$,\ PositiveInteger)\ ->\ \$}\newline +\endImportant + +This definition is as simple as that for \spadtype{SetCategory}, +except that there are two exported operations. +Multiple exported operations are written as a \spadgloss{pile}, +that is, they all begin in the same column. +Here you see that the category mentions another type, +\spadtype{PositiveInteger}, in a signature. +Any domain can be used in a signature. + +Since categories extend one another, they form hierarchies. +Each category other than \spadtype{Type} has one or more parents given +by the one or more categories mentioned before the \spad{with} part of +the definition. +\spadtype{SemiGroup} extends \spadtype{SetCategory} and +\spadtype{SetCategory} extends both \spadtype{Type} and +\spadtype{CoercibleTo (OutputForm)}. +Since \spadtype{CoercibleTo (OutputForm)} also extends \spadtype{Type}, +the mention of \spadtype{Type} in the definition is unnecessary but +included for emphasis. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugCategoriesMembershipTitle}{Membership} +\newcommand{\ugCategoriesMembershipNumber}{12.5.} + +@ +\section{Membership} +\label{ugCategoriesMembershipPage} +\index{pages!ugCategoriesMembershipPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesMembershipPage} +\index{ugCategoriesMembershipPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesMembershipPage}{12.5. Membership} +\beginscroll + +We say a category designates a class of domains. +What class of domains? +That is, how does Axiom know what domains belong to what categories? +The simple answer to this basic question is key to the design of +Axiom: + +\beginImportant +\centerline{{{\bf Domains belong to categories by assertion.}}} +\endImportant + +When a domain is defined, it is asserted to belong to one or more +categories. +Suppose, for example, that an author of domain \spadtype{String} wishes to +use the binary operator \spadop{*} to denote concatenation. +Thus \spad{"hello " * "there"} would produce the string +\spad{"hello there"}\footnote{Actually, concatenation of strings in +Axiom is done by juxtaposition or by using the operation +\spadfunFrom{concat}{String}. +The expression \spad{"hello " "there"} produces the string +\spad{"hello there"}.}. +The author of \spadtype{String} could then assert that \spadtype{String} +is a member of \spadtype{SemiGroup}. +According to our definition of \spadtype{SemiGroup}, strings +would then also have the operation \spadop{**} defined automatically. +Then \spad{"--" ** 4} would produce a string of eight dashes +\spad{"--------"}. +Since \spadtype{String} is a member of \spadtype{SemiGroup}, it also is +a member of \spadtype{SetCategory} and thus has an operation +\spadop{=} for testing that two strings are equal. + +\texht{Now turn to the algebraic category hierarchy inside the +front cover of this book.}{} +Any domain that is a member of a +category extending \spadtype{SemiGroup} is a member of +\spadtype{SemiGroup} (that is, it {\it is} a semigroup). +In particular, any domain asserted to be a \spadtype{Ring} is a +semigroup since \spadtype{Ring} extends \spadtype{Monoid}, that, +in turn, extends \spadtype{SemiGroup}. +The definition of \spadtype{Integer} in Axiom asserts that +\spadtype{Integer} is a member of category +\spadtype{IntegerNumberSystem}, that, in turn, asserts that it is +a member of \spadtype{EuclideanDomain}. +Now \spadtype{EuclideanDomain} extends +\spadtype{PrincipalIdealDomain} and so on. +If you trace up the hierarchy, you see that +\spadtype{EuclideanDomain} extends \spadtype{Ring}, and, +therefore, \spadtype{SemiGroup}. +Thus \spadtype{Integer} is a semigroup and also exports the +operations \spadop{*} and \spadop{**}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugCategoriesDefaultsTitle}{Defaults} +\newcommand{\ugCategoriesDefaultsNumber}{12.6.} + +@ +\section{Defaults} +\label{ugCategoriesDefaultsPage} +\begin{itemize} +\item ugCategoriesHierPage \ref{ugCategoriesHierPage} on +page~\pageref{ugCategoriesHierPage} +\item ugPackagesPage \ref{ugPackagesPage} on +page~\pageref{ugPackagesPage} +\end{itemize} +\index{pages!ugCategoriesDefaultsPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesDefaultsPage} +\index{ugCategoriesDefaultsPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesDefaultsPage}{12.6. Defaults} +\beginscroll + +We actually omitted the last +part of the definition of +\spadtype{SemiGroup} in +\downlink{``\ugCategoriesHierTitle''}{ugCategoriesHierPage} +in Section \ugCategoriesHierNumber\ignore{ugCategoriesHier}. +Here now is its complete Axiom definition. + +\beginImportant + +\noindent +{\tt 1.\ \ \ SemiGroup():\ Category\ ==\ SetCategory\ with}\newline +{\tt 2.\ \ \ \ \ \ \ \ \ "*":\ (\$,\ \$)\ ->\ \$}\newline +{\tt 3.\ \ \ \ \ \ \ \ \ "**":\ (\$,\ PositiveInteger)\ ->\ \$}\newline +{\tt 4.\ \ \ \ \ \ \ add}\newline +{\tt 5.\ \ \ \ \ \ \ \ \ import\ RepeatedSquaring(\$)}\newline +{\tt 6.\ \ \ \ \ \ \ \ \ x:\ \$\ **\ n:\ PositiveInteger\ ==\ expt(x,n)}\newline +\endImportant + +The \spad{add} part at the end is used to give ``default definitions'' for +\spadkey{add} +exported operations. +Once you have a multiplication operation \spadop{*}, you can +define exponentiation +for positive integer exponents +using repeated multiplication: +\centerline{{\spad{x ** n = x * x * ... * x} ( \spad{n} copies of \spad{x} )}} +This definition for \spadop{**} is called a {\it default} definition. +In general, a category can give default definitions for any +operation it exports. +Since \spadtype{SemiGroup} and all its category descendants in the hierarchy +export \spadop{**}, any descendant category may redefine \spadop{**} as well. + +A domain of category \spadtype{SemiGroup} +(such as \spadtype{Integer}) may or may not choose to +define its own \spadop{**} operation. +If it does not, a default definition that is closest (in a ``tree-distance'' +sense of the hierarchy) to the domain is chosen. + +The part of the category definition following an \spadop{add} operation +is a \spadgloss{capsule}, as discussed in +\texht{the previous chapter.} +{\downlink{``\ugPackagesTitle''}{ugPackagesPage} +in Chapter \ugPackagesNumber\ignore{ugPackages}.} +The line +\begin{verbatim} +import RepeatedSquaring($) +\end{verbatim} +references the package +\spadtype{RepeatedSquaring(\$)}, that is, the package +\spadtype{RepeatedSquaring} that takes ``this domain'' as its +parameter. +For example, if the semigroup \spadtype{Polynomial (Integer)} +does not define its own exponentiation operation, the +definition used may come from the package +\spadtype{RepeatedSquaring (Polynomial (Integer))}. +The next line gives the definition in terms of \spadfun{expt} from that +package. + +The default definitions are collected to form a ``default package'' +for the category. The name of the package is the same as the category +but with an ampersand (\spadSyntax{\&}) added at the end. A default +package always takes an additional argument relative to the category. +Here is the definition of the default package \pspadtype{SemiGroup\&} +as automatically generated by Axiom from the above definition of +\spadtype{SemiGroup}. + +\beginImportant + +\noindent +{\tt 1.\ \ \ SemiGroup\_\&(\$):\ Exports\ ==\ Implementation\ where}\newline +{\tt 2.\ \ \ \ \ \$:\ SemiGroup}\newline +{\tt 3.\ \ \ \ \ Exports\ ==\ with}\newline +{\tt 4.\ \ \ \ \ \ \ "**":\ (\$,\ PositiveInteger)\ ->\ \$}\newline +{\tt 5.\ \ \ \ \ Implementation\ ==\ add}\newline +{\tt 6.\ \ \ \ \ \ \ import\ RepeatedSquaring(\$)}\newline +{\tt 7.\ \ \ \ \ \ \ x:\$\ **\ n:PositiveInteger\ ==\ expt(x,n)}\newline +\endImportant + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugCategoriesAxiomsTitle}{Axioms} +\newcommand{\ugCategoriesAxiomsNumber}{12.7.} + +@ +\section{Axioms} +\label{ugCategoriesAxiomsPage} +\begin{itemize} +\item ugCategoriesDefaultsPage \ref{ugCategoriesDefaultsPage} on +page~\pageref{ugCategoriesDefaultsPage} +\end{itemize} +\index{pages!ugCategoriesAxiomsPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesAxiomsPage} +\index{ugCategoriesAxiomsPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesAxiomsPage}{12.7. Axioms} +\beginscroll + +In \texht{the previous section} +{\downlink{``\ugCategoriesDefaultsTitle''}{ugCategoriesDefaultsPage} +in Section \ugCategoriesDefaultsNumber\ignore{ugCategoriesDefaults}} +you saw the complete Axiom program defining \index{axiom} +\spadtype{SemiGroup}. According to this definition, semigroups (that +is, are sets with the operations \spadopFrom{*}{SemiGroup} and +\spadopFrom{**}{SemiGroup}. + +You might ask: ``Aside from the notion of default packages, isn't a +category just a \spadgloss{macro}, that is, a shorthand equivalent to +the two operations \spadop{*} and \spadop{**} with their types?'' If a +category were a macro, every time you saw the word +\spadtype{SemiGroup}, you would rewrite it by its list of exported +operations. Furthermore, every time you saw the exported operations +of \spadtype{SemiGroup} among the exports of a constructor, you could +conclude that the constructor exported \spadtype{SemiGroup}. + +A category is {\it not} a macro and here is why. +The definition for \spadtype{SemiGroup} has documentation that states: + +\texht{\begin{quotation}}{\indent{3}} + Category \spadtype{SemiGroup} denotes the class of all multiplicative + semigroups, that is, a set with an associative operation \spadop{*}. + + \texht{\vskip .5\baselineskip}{} + {Axioms:} + + {\small\tt associative("*" : (\$,\$)->\$) -- (x*y)*z = x*(y*z)} +\texht{\end{quotation}}{\indent{3}} + +According to the author's remarks, the mere exporting of an operation +named \spadop{*} and \spadop{**} is not enough to qualify the domain +as a \spadtype{SemiGroup}. In fact, a domain can be a semigroup only +if it explicitly exports a \spadop{**} and a \spadop{*} satisfying the +associativity axiom. + +In general, a category name implies a set of axioms, even mathematical +theorems. There are numerous axioms from \spadtype{Ring}, for +example, that are well-understood from the literature. No attempt is +made to list them all. Nonetheless, all such mathematical facts are +implicit by the use of the name \spadtype{Ring}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugCategoriesCorrectnessTitle}{Correctness} +\newcommand{\ugCategoriesCorrectnessNumber}{12.8.} + +@ +\section{Correctness} +\label{ugCategoriesCorrectnessPage} +\index{pages!ugCategoriesCorrectnessPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesCorrectnessPage} +\index{ugCategoriesCorrectnessPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesCorrectnessPage}{12.8. Correctness} +\beginscroll + +While such statements are only comments, +Axiom can enforce their intention simply by shifting the burden of +responsibility onto the author of a domain. +A domain belongs to category \spad{Ring} only if the +author asserts that the domain belongs to \spadtype{Ring} or +to a category that extends \spadtype{Ring}. + +This principle of assertion is important for large user-extendable +systems. +Axiom has a large library of operations offering facilities in +many areas. +Names such as \spadfun{norm} and \spadfun{product}, for example, have +diverse meanings in diverse contexts. +An inescapable hindrance to users would be to force those who wish to +extend Axiom to always invent new names for operations. +%>> I don't think disambiguate is really a word, though I like it +Axiom allows you to reuse names, and then use context to disambiguate one +from another. + +Here is another example of why this is important. +Some languages, such as {\bf APL}, +denote the \spadtype{Boolean} constants \spad{true} and +\spad{false} by the integers \spad{1} and \spad{0}. +You may want to let infix operators \spadop{+} and \spadop{*} serve as the logical +operators \spadfun{or} and \spadfun{and}, respectively. +But note this: \spadtype{Boolean} is not a ring. +The {\it inverse axiom} for \spadtype{Ring} states: +% +\centerline{{Every element \spad{x} has an additive inverse \spad{y} such that}} +\centerline{{\spad{x + y = 0}.}} +% +\spadtype{Boolean} is not a ring since \spad{true} has +no inverse---there is no inverse element \spad{a} such that +\spad{1 + a = 0} (in terms of booleans, \spad{(true or a) = false}). +Nonetheless, Axiom {\it could} easily and correctly implement +\spadtype{Boolean} this way. +\spadtype{Boolean} simply would not assert that it is of category +\spadtype{Ring}. +Thus the \spadop{+} for \spadtype{Boolean} values +is not confused with the one for \spadtype{Ring}. +Since the \spadtype{Polynomial} constructor requires its argument +to be a ring, Axiom would then refuse to build the +domain \spadtype{Polynomial(Boolean)}. Also, Axiom would refuse to +wrongfully apply algorithms to \spadtype{Boolean} elements that presume that the +ring axioms for \spadop{+} hold. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugCategoriesAttributesTitle}{Attributes} +\newcommand{\ugCategoriesAttributesNumber}{12.9.} + +@ +\section{Attributes} +\label{ugCategoriesAttributesPage} +\begin{itemize} +\item ugDomainsAssertionsPage \ref{ugDomainsAssertionsPage} on +page~\pageref{ugDomainsAssertionsPage} +\end{itemize} +\index{pages!ugCategoriesAttributesPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesAttributesPage} +\index{ugCategoriesAttributesPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesAttributesPage}{12.9. Attributes} +\beginscroll + +Most axioms are not computationally useful. +Those that are can be explicitly expressed by what Axiom calls an +\spadgloss{attribute}. +The attribute \spadatt{commutative("*")}, for example, is used to assert +that a domain has commutative multiplication. +Its definition is given by its documentation: + +\texht{\begingroup \parindent=1pc \narrower\noindent}{\indent{3}}% + A domain \spad{R} has \spadatt{commutative("*")} + if it has an operation "*": \spadsig{(R,R)}{R} such that \spad{x * y = y * x}. +\texht{\par\endgroup}{\indent{0}} + +Just as you can test whether a domain has the category \spadtype{Ring}, you +can test that a domain has a given attribute. + +\xtc{ +Do polynomials over the integers +have commutative multiplication? +}{ +\spadpaste{Polynomial Integer has commutative("*")} +} +\xtc{ +Do matrices over the integers +have commutative multiplication? +}{ +\spadpaste{Matrix Integer has commutative("*")} +} + +Attributes are used to conditionally export and define +operations for a domain (see +\downlink{``\ugDomainsAssertionsTitle''}{ugDomainsAssertionsPage} in +Section \ugDomainsAssertionsNumber\ignore{ugDomainsAssertions}). +Attributes can also be asserted in a category definition. + +After mentioning category \spadtype{Ring} many times in this book, +it is high time that we show you its definition: + +\beginImportant + +\noindent +{\tt 1.\ \ \ Ring():\ Category\ ==}\newline +{\tt 2.\ \ \ \ \ Join(Rng,Monoid,LeftModule(\$:\ Rng))\ with}\newline +{\tt 3.\ \ \ \ \ \ \ \ \ characteristic:\ ->\ NonNegativeInteger}\newline +{\tt 4.\ \ \ \ \ \ \ \ \ coerce:\ Integer\ ->\ \$}\newline +{\tt 5.\ \ \ \ \ \ \ \ \ unitsKnown}\newline +{\tt 6.\ \ \ \ \ \ \ add}\newline +{\tt 7.\ \ \ \ \ \ \ \ \ n:Integer}\newline +{\tt 8.\ \ \ \ \ \ \ \ \ coerce(n)\ ==\ n\ *\ 1\$\$}\newline +\endImportant + +There are only two new things here. First, look at the +\spadSyntax{\$\$} on the last line. This is not a typographic error! +The first \spadSyntax{\$} says that the \spad{1} is to come from some +domain. The second \spadSyntax{\$} says that the domain is ``this +domain.'' If \spadSyntax{\$} is \spadtype{Fraction(Integer)}, this +line reads {\tt coerce(n) == n * 1\$Fraction(Integer)}. + +The second new thing is the presence of attribute +``\spad{unitsKnown}''. Axiom can always distinguish an attribute from +an operation. An operation has a name and a type. An attribute has no +type. The attribute \spadatt{unitsKnown} asserts a rather subtle +mathematical fact that is normally taken for granted when working with +rings.\footnote{With this axiom, the units of a domain are the set of +elements \spad{x} that each have a multiplicative inverse \spad{y} in +the domain. Thus \spad{1} and \spad{-1} are units in domain +\spadtype{Integer}. Also, for \spadtype{Fraction Integer}, the domain +of rational numbers, all non-zero elements are units.} Because +programs can test for this attribute, Axiom can correctly handle +rather more complicated mathematical structures (ones that are similar +to rings but do not have this attribute). + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugCategoriesParametersTitle}{Parameters} +\newcommand{\ugCategoriesParametersNumber}{12.10.} + +@ +\section{Parameters} +\label{ugCategoriesParametersPage} +\index{pages!ugCategoriesParametersPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesParametersPage} +\index{ugCategoriesParametersPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesParametersPage}{12.10. Parameters} +\beginscroll + +Like domain constructors, category constructors can also have +parameters. +For example, category \spadtype{MatrixCategory} is a parameterized +category for defining matrices over a ring \spad{R} so that the +matrix domains can have +different representations and indexing schemes. +Its definition has the form: + +\beginImportant + +\noindent +{\tt 1.\ \ \ MatrixCategory(R,Row,Col):\ Category\ ==}\newline +{\tt 2.\ \ \ \ \ \ \ TwoDimensionalArrayCategory(R,Row,Col)\ with\ ...}\newline +\endImportant + +The category extends \spadtype{TwoDimensionalArrayCategory} with +the same arguments. +You cannot find \spadtype{TwoDimensionalArrayCategory} in the +algebraic hierarchy listing. +Rather, it is a member of the data structure hierarchy, +given inside the back cover of this book. +In particular, \spadtype{TwoDimensionalArrayCategory} is an extension of +\spadtype{HomogeneousAggregate} since its elements are all one type. + +The domain \spadtype{Matrix(R)}, the class of matrices with coefficients +from domain \spad{R}, asserts that it is a member of category +\spadtype{MatrixCategory(R, Vector(R), Vector(R))}. +The parameters of a category must also have types. +The first parameter to \spadtype{MatrixCategory} +\spad{R} is required to be a ring. +The second and third are required to be domains of category +\spadtype{FiniteLinearAggregate(R)}.\footnote{% +This is another extension of +\spadtype{HomogeneousAggregate} that you can see in +the data structure hierarchy.} +In practice, examples of categories having parameters other than +domains are rare. + +Adding the declarations for parameters to the definition for +\spadtype{MatrixCategory}, we have: + +\beginImportant + +\noindent +{\tt 1.\ \ \ R:\ Ring}\newline +{\tt 2.\ \ \ (Row,\ Col):\ FiniteLinearAggregate(R)}\newline +{\tt 3.\ \ \ }\newline +{\tt 4.\ \ \ MatrixCategory(R,\ Row,\ Col):\ Category\ ==}\newline +{\tt 5.\ \ \ \ \ \ \ TwoDimensionalArrayCategory(R,\ Row,\ Col)\ with\ ...}\newline +\endImportant + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugCategoriesConditionalsTitle}{Conditionals} +\newcommand{\ugCategoriesConditionalsNumber}{12.11.} + +@ +\section{Conditionals} +\label{ugCategoriesConditionalsPage} +\begin{itemize} +\item ugPackagesCondsPage \ref{ugPackagesCondsPage} on +page~\pageref{ugPackagesCondsPage} +\end{itemize} +\index{pages!ugCategoriesConditionalsPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesConditionalsPage} +\index{ugCategoriesConditionalsPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesConditionalsPage}{12.11. Conditionals} +\beginscroll + +As categories have parameters, the actual operations exported by a +category can depend on these parameters. +As an example, the operation \spadfunFrom{determinant}{MatrixCategory} +from category \spadtype{MatrixCategory} is only exported when the +underlying domain \spad{R} has commutative multiplication: + +\begin{verbatim} +if R has commutative("*") then + determinant: $ -> R +\end{verbatim} + +Conditionals can also define conditional extensions of a category. +Here is a portion of the definition of \spadtype{QuotientFieldCategory}: + +\beginImportant + +\noindent +{\tt 1.\ \ \ QuotientFieldCategory(R)\ :\ Category\ ==\ ...\ with\ ...}\newline +{\tt 2.\ \ \ \ \ \ \ \ if\ R\ has\ OrderedSet\ then\ OrderedSet}\newline +{\tt 3.\ \ \ \ \ \ \ \ if\ R\ has\ IntegerNumberSystem\ then}\newline +{\tt 4.\ \ \ \ \ \ \ \ \ \ ceiling:\ \$\ ->\ R}\newline +{\tt 5.\ \ \ \ \ \ \ \ \ \ \ \ ...}\newline +\endImportant + +Think of category \spadtype{QuotientFieldCategory(R)} as +denoting the domain \spadtype{Fraction(R)}, the +class of all fractions of the form \smath{a/b} for elements of \spad{R}. +The first conditional means in English: +``If the elements of \spad{R} are totally ordered (\spad{R} +is an \spadtype{OrderedSet}), then so are the fractions \smath{a/b}''. + +The second conditional is used to conditionally export an +operation \spadfun{ceiling} which returns the smallest integer +greater than or equal to its argument. +Clearly, ``ceiling'' makes sense for integers but not for +polynomials and other algebraic structures. +Because of this conditional, +the domain \spadtype{Fraction(Integer)} exports +an operation +\spadfun{ceiling}: \spadsig{Fraction Integer}{Integer}, but +\spadtype{Fraction Polynomial Integer} does not. + +Conditionals can also appear in the default definitions for the +operations of a category. +For example, a default definition for \spadfunFrom{ceiling}{Field} +within the part following the \spadop{add} reads: + +\begin{verbatim} +if R has IntegerNumberSystem then + ceiling x == ... +\end{verbatim} + +Here the predicate used is identical to the predicate in the {\tt +Exports} part. This need not be the case. See +\downlink{``\ugPackagesCondsTitle''}{ugPackagesCondsPage} in Section +\ugPackagesCondsNumber\ignore{ugPackagesConds} for a more complicated +example. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugCategoriesAndPackagesTitle}{Anonymous Categories} +\newcommand{\ugCategoriesAndPackagesNumber}{12.12.} + +@ +\section{Anonymous Categories} +\label{ugCategoriesAndPackagesPage} +\begin{itemize} +\item ugPackagesAbstractPage \ref{ugPackagesAbstractPage} on +page~\pageref{ugPackagesAbstractPage} +\end{itemize} +\index{pages!ugCategoriesAndPackagesPage!ug12.ht} +\index{ug12.ht!pages!ugCategoriesAndPackagesPage} +\index{ugCategoriesAndPackagesPage!ug12.ht!pages} +<>= +\begin{page}{ugCategoriesAndPackagesPage}{12.12. Anonymous Categories} +\beginscroll + +The part of a category to the right of a {\tt with} is also regarded +as a category---an ``anonymous category.'' Thus you have already seen +a category definition The {\tt Exports} part of the package +\pspadtype{DrawComplex} +(\downlink{``\ugPackagesAbstractTitle''}{ugPackagesAbstractPage} in +Section \ugPackagesAbstractNumber\ignore{ugPackagesAbstract}) is an +anonymous category. This is not necessary. We could, instead, give +this category a name: + +% +\beginImportant + +\noindent +{\tt 1.\ \ \ DrawComplexCategory():\ Category\ ==\ with}\newline +{\tt 2.\ \ \ \ \ \ drawComplex:\ (C\ ->\ C,S,S,Boolean)\ ->\ VIEW3D}\newline +{\tt 3.\ \ \ \ \ \ drawComplexVectorField:\ (C\ ->\ C,S,S)\ ->\ VIEW3D}\newline +{\tt 4.\ \ \ \ \ \ setRealSteps:\ INT\ ->\ INT}\newline +{\tt 5.\ \ \ \ \ \ setImagSteps:\ INT\ ->\ INT}\newline +{\tt 6.\ \ \ \ \ \ setClipValue:\ DFLOAT->\ DFLOAT}\newline +\endImportant +% +and then define \spadtype{DrawComplex} by: +% +\beginImportant + +\noindent +{\tt 1.\ \ \ DrawComplex():\ DrawComplexCategory\ ==\ Implementation}\newline +{\tt 2.\ \ \ \ \ \ where}\newline +{\tt 3.\ \ \ \ \ \ \ \ \ ...}\newline +\endImportant +% + +There is no reason, however, to give this list of exports a name +since no other domain or package exports it. +In fact, it is rare for a package to export a named category. +As you will see in the next chapter, however, it is very common +for the definition of domains to mention one or more category +before the {\tt with}. +\spadkey{with} +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 13 (ug13.ht)} +<>= +\newcommand{\ugDomainsTitle}{Domains} +\newcommand{\ugDomainsNumber}{13.} + +@ +\section{Domains} +\label{ugDomainsPage} +\begin{itemize} +\item ugPackagesDomsPage \ref{ugPackagesDomsPage} on +page~\pageref{ugPackagesDomsPage} +\item ugDomainsDefsPage \ref{ugDomainsDefsPage} on +page~\pageref{ugDomainsDefsPage} +\item ugDomainsAssertionsPage \ref{ugDomainsAssertionsPage} on +page~\pageref{ugDomainsAssertionsPage} +\item ugDomainsDemoPage \ref{ugDomainsDemoPage} on +page~\pageref{ugDomainsDemoPage} +\item ugDomainsBrowsePage \ref{ugDomainsBrowsePage} on +page~\pageref{ugDomainsBrowsePage} +\item ugDomainsRepPage \ref{ugDomainsRepPage} on +page~\pageref{ugDomainsRepPage} +\item ugDomainsMultipleRepsPage \ref{ugDomainsMultipleRepsPage} on +page~\pageref{ugDomainsMultipleRepsPage} +\item ugDomainsAddDomainPage \ref{ugDomainsAddDomainPage} on +page~\pageref{ugDomainsAddDomainPage} +\item ugDomainsDefaultsPage \ref{ugDomainsDefaultsPage} on +page~\pageref{ugDomainsDefaultsPage} +\item ugDomainsOriginsPage \ref{ugDomainsOriginsPage} on +page~\pageref{ugDomainsOriginsPage} +\item ugDomainsShortFormsPage \ref{ugDomainsShortFormsPage} on +page~\pageref{ugDomainsShortFormsPage} +\item ugDomainsCliffordPage \ref{ugDomainsCliffordPage} on +page~\pageref{ugDomainsCliffordPage} +\item ugDomsinsDatabasePage \ref{ugDomsinsDatabasePage} on +page~\pageref{ugDomsinsDatabasePage} +\end{itemize} +\index{pages!ugDomainsPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsPage} +\index{ugDomainsPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsPage}{13. Domains} +\beginscroll + +We finally come to the \spadgloss{domain constructor}. +A few subtle differences between packages and +domains turn up some interesting issues. +We first discuss these differences then +describe the resulting issues by illustrating a program +for the \axiomType{QuadraticForm} constructor. +After a short example of an algebraic constructor, +\axiomType{CliffordAlgebra}, we show how you use domain constructors to build +a database query facility. + +\beginmenu + \menudownlink{{13.1. Domains vs. Packages}}{ugPackagesDomsPage} + \menudownlink{{13.2. Definitions}}{ugDomainsDefsPage} + \menudownlink{{13.3. Category Assertions}}{ugDomainsAssertionsPage} + \menudownlink{{13.4. A Demo}}{ugDomainsDemoPage} + \menudownlink{{13.5. Browse}}{ugDomainsBrowsePage} + \menudownlink{{13.6. Representation}}{ugDomainsRepPage} + \menudownlink{{13.7. Multiple Representations}}{ugDomainsMultipleRepsPage} + \menudownlink{{13.8. Add Domain}}{ugDomainsAddDomainPage} + \menudownlink{{13.9. Defaults}}{ugDomainsDefaultsPage} + \menudownlink{{13.10. Origins}}{ugDomainsOriginsPage} + \menudownlink{{13.11. Short Forms}}{ugDomainsShortFormsPage} + \menudownlink{{13.12. Example 1: Clifford Algebra}}{ugDomainsCliffordPage} + \menudownlink{{13.13. Example 2: Building A Query Facility}} +{ugDomsinsDatabasePage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugPackagesDomsTitle}{Domains vs. Packages} +\newcommand{\ugPackagesDomsNumber}{13.1.} + +@ +\section{Domains vs. Packages} +\label{ugPackagesDomsPage} +\begin{itemize} +\item ugPackagesPage \ref{ugPackagesPage} on +page~\pageref{ugPackagesPage} +\end{itemize} +\index{pages!ugPackagesDomsPage!ug13.ht} +\index{ug13.ht!pages!ugPackagesDomsPage} +\index{ugPackagesDomsPage!ug13.ht!pages} +<>= +\begin{page}{ugPackagesDomsPage}{13.1. Domains vs. Packages} +\beginscroll +% +Packages are special cases of domains. +What is the difference between a package and a domain that is not a +package? +By definition, there is only one difference: a domain that is not a package +has the symbol \axiomSyntax{\$} appearing +somewhere among the types of its exported operations. +The \axiomSyntax{\$} denotes ``this domain.'' If the \axiomSyntax{\$} +appears before the \axiomSyntax{->} in the type of a signature, it means +the operation takes an element from the domain as an argument. +If it appears after the \axiomSyntax{->}, then the operation returns an +element of the domain. + +If no exported operations mention \axiomSyntax{\$}, then evidently +there is nothing of interest to do with the objects of the domain. +You might then say that a package is a ``boring'' domain! But, as you +saw in \downlink{``\ugPackagesTitle''}{ugPackagesPage} in Chapter +\ugPackagesNumber\ignore{ugPackages}, packages are a very useful +notion indeed. The exported operations of a package depend solely on +the parameters to the package constructor and other explicit domains. + +To summarize, domain constructors are versatile structures that serve +two distinct practical purposes: Those like \axiomType{Polynomial} and +\axiomType{List} describe classes of computational objects; others, +like \pspadtype{SortPackage}, describe packages of useful operations. +As in the last chapter, we focus here on the first kind. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsDefsTitle}{Definitions} +\newcommand{\ugDomainsDefsNumber}{13.2.} + +@ +\section{Definitions} +\label{ugDomainsDefsPage} +\index{pages!ugDomainsDefsPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsDefsPage} +\index{ugDomainsDefsPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsDefsPage}{13.2. Definitions} +\beginscroll +% + +The syntax for defining a domain constructor is the same as for any +function in Axiom: +\centerline{{\frenchspacing{\tt {\it DomainForm} : {\it Exports} == {\it Implementation}}}} +As this definition usually extends over many lines, a +\axiom{where} expression is generally used instead. +\spadkey{where} + +\beginImportant +A recommended format for the definition of a domain is:\newline +{\tt% +{\it DomainForm} : Exports == Implementation where \newline +\texht{\hspace*{.75pc}}{\tab{8}} {\it optional type declarations} \newline +\texht{\hspace*{.75pc}}{\tab{3}} Exports == [{\it Category Assertions}] with \newline +\texht{\hspace*{2.0pc}}{\tab{8}} {\it list of exported operations} \newline +\texht{\hspace*{.75pc}}{\tab{3}} Implementation == [{\it Add Domain}] add \newline +\texht{\hspace*{2.0pc}}{\tab{6}} [Rep := {\it Representation}] \newline +\texht{\hspace*{2.0pc}}{\tab{8}} {\it list of function definitions for exported operations} +} + +\texht{\vskip 4pt}{} +Note: The brackets {\tt [ ]} here denote optionality. +\endImportant + +A complete domain constructor definition for +\axiomType{QuadraticForm} is shown in Figure \ref{fig-quadform}. +Interestingly, this little domain illustrates all the new +concepts you need to learn. + +\beginImportant + +\noindent +{\tt 1.\ \ \ )abbrev\ domain\ QFORM\ QuadraticForm}\newline +{\tt 2.\ \ \ }\newline +{\tt 3.\ \ \ ++\ Description:}\newline +{\tt 4.\ \ \ ++\ \ \ This\ domain\ provides\ modest\ support\ for}\newline +{\tt 5.\ \ \ ++\ \ \ quadratic\ forms.}\newline +{\tt 6.\ \ \ QuadraticForm(n,\ K):\ Exports\ ==\ Implementation\ where}\newline +{\tt 7.\ \ \ \ \ \ \ n:\ PositiveInteger}\newline +{\tt 8.\ \ \ \ \ \ \ K:\ Field}\newline +{\tt 9.\ \ \ }\newline +{\tt 10.\ \ \ \ \ \ Exports\ ==\ AbelianGroup\ with}\newline +{\tt 11.\ \ \ \ \ \ \ \ quadraticForm:\ SquareMatrix(n,K)\ ->\ \$}\newline +{\tt 12.\ \ \ \ \ \ \ \ \ \ ++\ \bs{}axiom\{quadraticForm(m)\}\ creates\ a\ quadratic}\newline +{\tt 13.\ \ \ \ \ \ \ \ \ \ ++\ quadratic\ form\ from\ a\ symmetric,}\newline +{\tt 14.\ \ \ \ \ \ \ \ \ \ ++\ square\ matrix\ \bs{}axiom\{m\}.}\newline +{\tt 15.\ \ \ \ \ \ \ \ matrix:\ \$\ ->\ SquareMatrix(n,K)}\newline +{\tt 16.\ \ \ \ \ \ \ \ \ \ ++\ \bs{}axiom\{matrix(qf)\}\ creates\ a\ square\ matrix}\newline +{\tt 17.\ \ \ \ \ \ \ \ \ \ ++\ from\ the\ quadratic\ form\ \bs{}axiom\{qf\}.}\newline +{\tt 18.\ \ \ \ \ \ \ \ elt:\ (\$,\ DirectProduct(n,K))\ ->\ K}\newline +{\tt 19.\ \ \ \ \ \ \ \ \ \ ++\ \bs{}axiom\{qf(v)\}\ evaluates\ the\ quadratic\ form}\newline +{\tt 20.\ \ \ \ \ \ \ \ \ \ ++\ \bs{}axiom\{qf\}\ on\ the\ vector\ \bs{}axiom\{v\},}\newline +{\tt 21.\ \ \ \ \ \ \ \ \ \ ++\ producing\ a\ scalar.}\newline +{\tt 22.\ \ }\newline +{\tt 23.\ \ \ \ \ \ Implementation\ ==\ SquareMatrix(n,K)\ add}\newline +{\tt 24.\ \ \ \ \ \ \ \ Rep\ :=\ SquareMatrix(n,K)}\newline +{\tt 25.\ \ \ \ \ \ \ \ quadraticForm\ m\ ==}\newline +{\tt 26.\ \ \ \ \ \ \ \ \ \ not\ symmetric?\ m\ =>\ error}\newline +{\tt 27.\ \ \ \ \ \ \ \ \ \ \ \ "quadraticForm\ requires\ a\ symmetric\ matrix"}\newline +{\tt 28.\ \ \ \ \ \ \ \ \ \ m\ ::\ \$}\newline +{\tt 29.\ \ \ \ \ \ \ \ matrix\ q\ ==\ q\ ::\ Rep}\newline +{\tt 30.\ \ \ \ \ \ \ \ elt(q,v)\ ==\ dot(v,\ (matrix\ q\ *\ v))}\newline +% +\caption{The \protect\axiomType{QuadraticForm} domain.}\label{fig-quadform} +\endImportant + +A domain constructor can take any number and type of parameters. +\axiomType{QuadraticForm} takes a positive integer \axiom{n} and a field +\axiom{K} as arguments. +Like a package, a domain has a set of explicit exports and an +implementation described by a capsule. +Domain constructors are documented in the same way as package constructors. + +Domain \axiomType{QuadraticForm(n, K)}, for a given positive integer +\axiom{n} and domain \axiom{K}, explicitly exports three operations: +% +\indent{4} +\beginitems +\item\axiom{quadraticForm(A)} creates a quadratic form from a matrix +\axiom{A}. +\item\axiom{matrix(q)} returns the matrix \axiom{A} used to create +the quadratic form \axiom{q}. +\item\axiom{q.v} computes the scalar \texht{$v^TAv$}{transpose(v)*A*v} +for a given vector \axiom{v}. +\enditems +\indent{0} + +Compared with the corresponding syntax given for the definition of a +package, you see that a domain constructor has three optional parts to +its definition: {\it Category Assertions}, {\it Add Domain}, and +{\it Representation}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsAssertionsTitle}{Category Assertions} +\newcommand{\ugDomainsAssertionsNumber}{13.3.} + +@ +\section{Category Assertions} +\label{ugDomainsAssertionsPage} +\begin{itemize} +\item ugCategoriesCorrectnessPage \ref{ugCategoriesCorrectnessPage} on +page~\pageref{ugCategoriesCorrectnessPage} +\item ugCategoriesConditionalsPage \ref{ugCategoriesConditionalsPage} on +page~\pageref{ugCategoriesConditionalsPage} +\end{itemize} +\index{pages!ugDomainsAssertionsPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsAssertionsPage} +\index{ugDomainsAssertionsPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsAssertionsPage}{13.3. Category Assertions} +\beginscroll +% + +The {\it Category Assertions} part of your domain constructor +definition lists those categories of which all domains created by the +constructor are unconditionally members. The word ``unconditionally'' +means that membership in a category does not depend on the values of +the parameters to the domain constructor. This part thus defines the +link between the domains and the category hierarchies given on the +inside covers of this book. As described in +\downlink{``\ugCategoriesCorrectnessTitle''}{ugCategoriesCorrectnessPage} +in Section +\ugCategoriesCorrectnessNumber\ignore{ugCategoriesCorrectness}, it is +this link that makes it possible for you to pass objects of the +domains as arguments to other operations in Axiom. + +Every \axiomType{QuadraticForm} domain is declared to be +unconditionally a member of category \axiomType{AbelianGroup}. An +abelian group is a collection of elements closed under addition. +Every object {\it x} of an abelian group has an additive inverse {\it +y} such that \texht{$x + y = 0$}{\axiom{{\it x} + {\it y} = 0}}. The +exports of an abelian group include \axiom{0}, \axiomOp{+}, +\axiomOp{-}, and scalar multiplication by an integer. After asserting +that \axiomType{QuadraticForm} domains are abelian groups, it is +possible to pass quadratic forms to algorithms that only assume +arguments to have these abelian group properties. + +In +\downlink{``\ugCategoriesConditionalsTitle''}{ugCategoriesConditionalsPage} +in Section +\ugCategoriesConditionalsNumber\ignore{ugCategoriesConditionals}, you +saw that \axiomType{Fraction(R)}, a member of +\axiomType{QuotientFieldCategory(R)}, is a member of +\axiomType{OrderedSet} if \axiom{R} is a member of +\axiomType{OrderedSet}. Likewise, from the {\tt Exports} part of the +definition of \axiomType{ModMonic(R, S)}, \begin{verbatim} +UnivariatePolynomialCategory(R) with + if R has Finite then Finite + ... +\end{verbatim} +you see that \axiomType{ModMonic(R, S)} is a member of +\axiomType{Finite} is \axiom{R} is. + +The {\tt Exports} part of a domain definition is the same kind of +expression that can appear to the right of an \axiomSyntax{==} in a +category definition. If a domain constructor is unconditionally a +member of two or more categories, a \axiom{Join} form is used. +\spadkey{Join} The {\tt Exports} part of the definition of +\axiomType{FlexibleArray(S)} reads, for example: +\begin{verbatim} +Join(ExtensibleLinearAggregate(S), + OneDimensionalArrayAggregate(S)) with... +\end{verbatim} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsDemoTitle}{A Demo} +\newcommand{\ugDomainsDemoNumber}{13.4.} + +@ +\section{A Demo} +\label{ugDomainsDemoPage} +\index{pages!ugDomainsDemoPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsDemoPage} +\index{ugDomainsDemoPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsDemoPage}{13.4. A Demo} +\beginscroll +% +Before looking at the {\it Implementation} part of \axiomType{QuadraticForm}, +let's try some examples. + +\texht{\vskip 2pc}{} +\xtc{ +Build a domain \axiom{QF}. +}{ +\spadpaste{QF := QuadraticForm(2,Fraction Integer)\bound{x2}\free{x1}} +} +\xtc{ +Define a matrix to be used to construct +a quadratic form. +}{ +\spadpaste{A := matrix [[-1,1/2],[1/2,1]]\bound{x3}\free{x2}} +} +\xtc{ +Construct the quadratic form. +A package call {\tt \$QF} is necessary since there +are other \axiomType{QuadraticForm} domains. +}{ +\spadpaste{q : QF := quadraticForm(A)\bound{x4}\free{x3}} +} +\xtc{ +Looks like a matrix. Try computing +the number of rows. +Axiom won't let you. +}{ +\spadpaste{nrows q\free{x3}} +} +\xtc{ +Create a direct product element \axiom{v}. +A package call is again necessary, but Axiom +understands your list as denoting a vector. +}{ +\spadpaste{v := directProduct([2,-1])\$DirectProduct(2,Fraction Integer)\bound{x5}\free{x4}} +} +\xtc{ +Compute the product \texht{$v^TAv$}{transpose(v)*A*v}. +}{ +\spadpaste{q.v\free{x5}} +} +\xtc{ +What is 3 times \axiom{q} minus \axiom{q} plus \axiom{q}? +}{ +\spadpaste{3*q-q+q\free{x4}} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsBrowseTitle}{Browse} +\newcommand{\ugDomainsBrowseNumber}{13.5.} + +@ +\section{Browse} +\label{ugDomainsBrowsePage} +\index{pages!ugDomainsBrowsePage!ug13.ht} +\index{ug13.ht!pages!ugDomainsBrowsePage} +\index{ugDomainsBrowsePage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsBrowsePage}{13.5. Browse} +\beginscroll + +The \Browse{} facility of \HyperName{} is useful for +investigating +the properties of domains, packages, and categories. +From the main \HyperName{} menu, move your mouse to {\bf Browse} and +click on the left mouse button. +This brings up the \Browse{} first page. +Now, with your mouse pointer somewhere in this window, enter the +string ``quadraticform'' into the input area (all lower case +letters will do). +Move your mouse to {\bf Constructors} and click. +Up comes a page describing \axiomType{QuadraticForm}. + +From here, click on {\bf Description}. +This gives you a page that includes a part labeled by ``{\it +Description:}''. +You also see the types for arguments \axiom{n} and \axiom{K} +displayed as well as the fact that \axiomType{QuadraticForm} +returns an \axiomType{AbelianGroup}. +You can go and experiment a bit by selecting {\bf Field} with +your mouse. +Eventually, use +\UpButton{} +several times to return to the first page on +\axiomType{QuadraticForm}. + +Select {\bf Operations} to get a list of operations for +\axiomType{QuadraticForm}. +You can select an operation by clicking on it +to get an individual page with information about that operation. +Or you can select the buttons along the bottom to see alternative +views or get additional information on the operations. +Then return to the page on \axiomType{QuadraticForm}. + +Select {\bf Cross Reference} to get another menu. +This menu has buttons for {\bf Parents}, {\bf Ancestors}, and +others. +Clicking on {\bf Parents}, you see that \axiomType{QuadraticForm} +has one parent \axiomType{AbelianMonoid}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsRepTitle}{Representation} +\newcommand{\ugDomainsRepNumber}{13.6.} + +@ +\section{Representation} +\label{ugDomainsRepPage} +\begin{itemize} +\item ugDomainsDemoPage \ref{ugDomainsDemoPage} on +page~\pageref{ugDomainsDemoPage} +\end{itemize} +\index{pages!ugDomainsRepPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsRepPage} +\index{ugDomainsRepPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsRepPage}{13.6. Representation} +\beginscroll +% +The {\tt Implementation} part of an Axiom capsule for a +domain constructor uses the special variable \axiom{Rep} to +identify the lower level data type used to represent the objects +of the domain. +The \axiom{Rep} for quadratic forms is \axiomType{SquareMatrix(n, K)}. +This means that all objects of the domain are required to be +\axiom{n} by \axiom{n} matrices with elements from \axiomType{K}. + +The code for \axiomFun{quadraticForm} in Figure \ref{fig-quadform} on +page \pageref{fig-quadform} checks that the matrix is symmetric and +then converts it to \axiomSyntax{\$}, which means, as usual, ``this +domain.'' Such explicit conversions \index{conversion} are generally +required by the compiler. Aside from checking that the matrix is +symmetric, the code for this function essentially does nothing. The +{\frenchspacing\tt m :: \$} on line 28 coerces \axiom{m} to a +quadratic form. In fact, the quadratic form you created in step (3) +of \downlink{``\ugDomainsDemoTitle''}{ugDomainsDemoPage} in Section +\ugDomainsDemoNumber\ignore{ugDomainsDemo} is just the matrix you +passed it in disguise! Without seeing this definition, you would not +know that. Nor can you take advantage of this fact now that you do +know! When we try in the next step of +\downlink{``\ugDomainsDemoTitle''}{ugDomainsDemoPage} in Section +\ugDomainsDemoNumber\ignore{ugDomainsDemo} to regard \axiom{q} as a +matrix by asking for \axiomFun{nrows}, the number of its rows, Axiom +gives you an error message saying, in effect, ``Good try, but this +won't work!'' + +The definition for the \spadfunFrom{matrix}{QuadraticForm} +function could hardly be simpler: +it just returns its argument after explicitly +\spadglossSee{coercing}{coerce} its argument to a matrix. +Since the argument is already a matrix, this coercion does no computation. + +Within the context of a capsule, an object of \axiomSyntax{\$} is +regarded both as a quadratic form {\it and} as a +matrix.\footnote{In case each of \axiomSyntax{\$} and \axiom{Rep} +have the same named operation available, +the one from \axiom{\$} takes precedence. +Thus, if you want the one from \axiomSyntax{Rep}, you must +package call it using a \axiomSyntax{\$Rep} suffix.} +This makes the definition of \axiom{q.v} easy---it +just calls the \spadfunFrom{dot}{DirectProduct} product from +\axiomType{DirectProduct} to perform the indicated operation. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsMultipleRepsTitle}{Multiple Representations} +\newcommand{\ugDomainsMultipleRepsNumber}{13.7.} + +@ +\section{Multiple Representations} +\label{ugDomainsMultipleRepsPage} +\begin{itemize} +\item ugTypesUnionsPage \ref{ugTypesUnionsPage} on +page~\pageref{ugTypesUnionsPage} +\end{itemize} +\index{pages!ugDomainsMultipleRepsPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsMultipleRepsPage} +\index{ugDomainsMultipleRepsPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsMultipleRepsPage}{13.7. Multiple Representations} +\beginscroll +% + +To write functions that implement the operations of a domain, you +want to choose the most computationally efficient +data structure to represent the elements of your domain. + +A classic problem in computer algebra is the optimal choice for an +internal representation of polynomials. +If you create a polynomial, say \texht{$3x^2+ 5$}{\axiom{3*x**2 + 5}}, how +does Axiom hold this value internally? +There are many ways. +Axiom has nearly a dozen different representations of +polynomials, one to suit almost any purpose. +Algorithms for solving polynomial equations work most +efficiently with polynomials represented one way, whereas those for +factoring polynomials are most efficient using another. +One often-used representation is a list of terms, each term +consisting of exponent-coefficient records written in the order +of decreasing exponents. +For example, the polynomial \texht{$3x^2+5$}{3*x**2+5} is +%>> I changed the k's in next line to e's as I thought that was +%>> clearer. +represented by the list \axiom{[[e:2, c:3], [e:0, c:5]]}. + +What is the optimal data structure for a matrix? +It depends on the application. +For large sparse matrices, a linked-list structure of records +holding only the non-zero elements may be optimal. +If the elements can be defined by a simple formula +\texht{$f(i,j)$}{\axiom{f(i,j)}}, then a compiled function for +\axiom{f} may be optimal. +Some programmers prefer to represent ordinary matrices as vectors +of vectors. +Others prefer to represent matrices by one big linear array where +elements are accessed with linearly computable indexes. + +While all these simultaneous structures tend to be confusing, +Axiom provides a helpful organizational tool for such a purpose: +categories. +\axiomType{PolynomialCategory}, for example, provides a uniform user +interface across all polynomial types. +Each kind of polynomial implements functions for +all these operations, each in its own way. +If you use only the top-level operations in +\axiomType{PolynomialCategory} you usually do not care what kind +of polynomial implementation is used. + +%>> I've often thought, though, that it would be nice to be +%>> be able to use conditionals for representations. + +Within a given domain, however, you define (at most) one +representation.\footnote{You can make that representation a +\pspadtype{Union} type, however. See +\downlink{``\ugTypesUnionsTitle''}{ugTypesUnionsPage} in Section +\ugTypesUnionsNumber\ignore{ugTypesUnions} for examples of unions.} +If you want to have multiple representations (that is, several +domains, each with its own representation), use a category to describe +the {\tt Exports}, then define separate domains for each +representation. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsAddDomainTitle}{Add Domain} +\newcommand{\ugDomainsAddDomainNumber}{13.8.} + +@ +\section{Add Domain} +\label{ugDomainsAddDomainPage} +\begin{itemize} +\item ugDomainsDemoPage \ref{ugDomainsDemoPage} on +page~\pageref{ugDomainsDemoPage} +\end{itemize} +\index{pages!ugDomainsAddDomainPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsAddDomainPage} +\index{ugDomainsAddDomainPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsAddDomainPage}{13.8. Add Domain} +\beginscroll +% + +The capsule part of {\tt Implementation} defines functions that +implement the operations exported by the domain---usually only some of +the operations. In our demo in +\downlink{``\ugDomainsDemoTitle''}{ugDomainsDemoPage} in Section +\ugDomainsDemoNumber\ignore{ugDomainsDemo}, we asked for the value of +\axiom{3*q-q+q}. Where do the operations \axiomOp{*}, \axiomOp{+}, +and \axiomOp{-} come from? There is no definition for them in the +capsule! + +The {\tt Implementation} part of a definition can optionally specify +an ``add-domain'' to the left of an {\tt add} \spadkey{add} (for +\axiomType{QuadraticForm}, defines \axiomType{SquareMatrix(n,K)} is +the add-domain). The meaning of an add-domain is simply this: if the +capsule part of the {\tt Implementation} does not supply a function +for an operation, Axiom goes to the add-domain to find the function. +So do \axiomOpFrom{*}{QuadraticForm}, \axiomOpFrom{+}{QuadraticForm} +and \axiomOpFrom{-}{QuadraticForm} come from +\axiomType{SquareMatrix(n,K)}? + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsDefaultsTitle}{Defaults} +\newcommand{\ugDomainsDefaultsNumber}{13.9.} + +@ +\section{Defaults} +\label{ugDomainsDefaultsPage} +\begin{itemize} +\item ugPackagesPage \ref{ugPackagesPage} on +page~\pageref{ugPackagesPage} +\item ugCategoriesDefaultsPage \ref{ugCategoriesDefaultsPage} on +page~\pageref{ugCategoriesDefaultsPage} +\end{itemize} +\index{pages!ugDomainsDefaultsPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsDefaultsPage} +\index{ugDomainsDefaultsPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsDefaultsPage}{13.9. Defaults} +\beginscroll +% +In \downlink{``\ugPackagesTitle''}{ugPackagesPage} in +Chapter \ugPackagesNumber\ignore{ugPackages}, we saw that +categories can provide +default implementations for their operations. +How and when are they used? +When Axiom finds that \axiomType{QuadraticForm(2, Fraction Integer)} +does not implement the operations \axiomOp{*}, +\axiomOp{+}, and \axiomOp{-}, it goes to +\axiomType{SquareMatrix(2,Fraction Integer)} to find it. +As it turns out, \axiomType{SquareMatrix(2, Fraction Integer)} does +not implement {\it any} of these operations! + +What does Axiom do then? Here is its overall strategy. First, Axiom +looks for a function in the capsule for the domain. If it is not +there, Axiom looks in the add-domain for the operation. If that +fails, Axiom searches the add-domain of the add-domain, and so on. If +all those fail, it then searches the default packages for the +categories of which the domain is a member. In the case of +\axiomType{QuadraticForm}, it searches \axiomType{AbelianGroup}, then +its parents, grandparents, and so on. If this fails, it then searches +the default packages of the add-domain. Whenever a function is found, +the search stops immediately and the function is returned. When all +fails, the system calls \axiomFun{error} to report this unfortunate +news to you. To find out the actual order of constructors searched +for \axiomType{QuadraticForm}, consult \Browse{}: from the +\axiomType{QuadraticForm}, click on {\bf Cross Reference}, then on +{\bf Lineage}. + +Let's apply this search strategy for our example \axiom{3*q-q+q}. The +scalar multiplication comes first. Axiom finds a default +implementation in \axiomType{AbelianGroup\&}. Remember from +\downlink{``\ugCategoriesDefaultsTitle''}{ugCategoriesDefaultsPage} in +Section \ugCategoriesDefaultsNumber\ignore{ugCategoriesDefaults} that +\axiomType{SemiGroup} provides a default definition for +\texht{$x^n$}{x**n} by repeated squaring? \axiomType{AbelianGroup} +similarly provides a definition for \texht{$n x$}{n*x} by repeated +doubling. + +But the search of the defaults for \axiomType{QuadraticForm} fails to +find any \axiomOp{+} or \axiomOp{*} in the default packages for the +ancestors of \axiomType{QuadraticForm}. So it now searches among +those for \axiomType{SquareMatrix}. Category +\axiomType{MatrixCategory}, which provides a uniform interface for all +matrix domains, is a grandparent of \axiomType{SquareMatrix} and has a +capsule defining many functions for matrices, including matrix +addition, subtraction, and scalar multiplication. The default package +\axiomType{MatrixCategory\&} is where the functions for +\axiomOpFrom{+}{QuadraticForm} and \spadfunFrom{-}{QuadraticForm} come +from. + +You can use \Browse{} to discover where the operations for +\axiomType{QuadraticForm} are implemented. First, get the page +describing \axiomType{QuadraticForm}. With your mouse somewhere in +this window, type a ``2'', press the \texht{\fbox{\bf Tab}}{{\bf Tab}} +key, and then enter ``Fraction Integer'' to indicate that you want the +domain \axiomType{QuadraticForm(2, Fraction Integer)}. Now click on +{\bf Operations} to get a table of operations and on \axiomOp{*} to +get a page describing the \axiomOp{*} operation. Finally, click on +{\bf implementation} at the bottom. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsOriginsTitle}{Origins} +\newcommand{\ugDomainsOriginsNumber}{13.10.} + +@ +\section{Origins} +\label{ugDomainsOriginsPage} +\index{pages!ugDomainsOriginsPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsOriginsPage} +\index{ugDomainsOriginsPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsOriginsPage}{13.10. Origins} +\beginscroll +% + +Aside from the notion of where an operation is implemented, +a useful notion is the {\it origin} or ``home'' of an operation. +When an operation (such as +\spadfunFrom{quadraticForm}{QuadraticForm}) is explicitly exported by +a domain (such as \axiomType{QuadraticForm}), you can say that the +origin of that operation is that domain. +If an operation is not explicitly exported from a domain, it is inherited +from, and has as origin, the (closest) category that explicitly exports it. +The operations \axiomOpFrom{+}{AbelianMonoid} and +\axiomOpFrom{-}{AbelianMonoid} of \axiomType{QuadraticForm}, +for example, are inherited from \axiomType{AbelianMonoid}. +As it turns out, \axiomType{AbelianMonoid} is the origin of virtually every +\axiomOp{+} operation in Axiom! + +Again, you can use \Browse{} to discover the origins of +operations. +From the \Browse{} page on \axiomType{QuadraticForm}, click on {\bf +Operations}, then on {\bf origins} at the bottom of the page. + +The origin of the operation is the {\it only} place where on-line +documentation is given. +However, you can re-export an operation to give it special +documentation. +Suppose you have just invented the world's fastest algorithm for +inverting matrices using a particular internal representation for +matrices. +If your matrix domain just declares that it exports +\axiomType{MatrixCategory}, it exports the \axiomFun{inverse} +operation, but the documentation the user gets from \Browse{} is +the standard one from \axiomType{MatrixCategory}. +To give your version of \axiomFun{inverse} the attention it +deserves, simply export the operation explicitly with new +documentation. +This redundancy gives \axiomFun{inverse} a new origin and tells +\Browse{} to present your new documentation. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsShortFormsTitle}{Short Forms} +\newcommand{\ugDomainsShortFormsNumber}{13.11.} + +@ +\section{Short Forms} +\label{ugDomainsShortFormsPage} +\index{pages!ugDomainsShortFormsPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsShortFormsPage} +\index{ugDomainsShortFormsPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsShortFormsPage}{13.11. Short Forms} +\beginscroll +% +In Axiom, a domain could be defined using only an add-domain +and no capsule. +Although we talk about rational numbers as quotients of integers, +there is no type \pspadtype{RationalNumber} in Axiom. +To create such a type, you could compile the following +``short-form'' definition: + +\beginImportant + +\noindent +{\tt 1.\ \ \ RationalNumber()\ ==\ Fraction(Integer)}\newline +\endImportant + +The {\tt Exports} part of this definition is missing and is taken +to be equivalent to that of \axiomType{Fraction(Integer)}. +Because of the add-domain philosophy, you get precisely +what you want. +The effect is to create a little stub of a domain. +When a user asks to add two rational numbers, Axiom would +ask \pspadtype{RationalNumber} for a function implementing this +\axiomOp{+}. +Since the domain has no capsule, the domain then immediately +sends its request to \axiomType{Fraction (Integer)}. + +The short form definition for domains is used to +define such domains as \axiomType{MultivariatePolynomial}: + +\beginImportant + +\noindent +{\tt 1.\ \ \ MultivariatePolynomial(vl:\ List\ Symbol,\ R:\ Ring)\ ==}\newline +{\tt 2.\ \ \ \ \ \ SparseMultivariatePolynomial(R,}\newline +{\tt 3.\ \ \ \ \ \ \ \ \ OrderedVariableList\ vl)}\newline +\endImportant + +%% ********************************************************************* +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsCliffordTitle}{Example 1: Clifford Algebra} +\newcommand{\ugDomainsCliffordNumber}{13.12.} + +@ +\section{Example 1: Clifford Algebra} +\label{ugDomainsCliffordPage} +\begin{itemize} +\item CliffordAlgebraXmpPage \ref{CliffordAlgebraXmpPage} on +page~\pageref{CliffordAlgebraXmpPage} +\end{itemize} +\index{pages!ugDomainsCliffordPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsCliffordPage} +\index{ugDomainsCliffordPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsCliffordPage}{13.12. Example 1: Clifford Algebra} +\beginscroll +% + +Now that we have \axiomType{QuadraticForm} available, +let's put it to use. +Given some quadratic form \smath{Q} described by an +\smath{n} by \smath{n} matrix over a field \smath{K}, the domain +\axiomType{CliffordAlgebra(n, K, Q)} defines a vector space of +dimension \texht{$2^n$}{2**n} over \smath{K}. +This is an interesting domain since complex numbers, quaternions, +exterior algebras and spin algebras are all examples of Clifford +algebras. + +The basic idea is this: +the quadratic form \axiom{Q} defines a basis +\texht{$e_1,e_2\ldots,e_n$}{e1,e2,...,en} for the +vector space \texht{$K^n$}{K**n}---the direct product of \axiom{K} +with itself \axiom{n} times. +From this, the Clifford algebra generates a basis of +\texht{$2^n$}{2**n} elements given by all the possible products +of the \texht{$e_i$}{\axiom{ei}} in order without duplicates, that is, +\texht{ +1, +$e_1$, +$e_2$, +$e_1e_2$, +$e_3$, +$e_1e_3$, +$e_2e_3$, +$e_1e_2,e_3$}{1, e1, e2, e1*e2, e3, e1*e3, e2*e3, e1*e2*e3}, +and so on. + +The algebra is defined by the relations +\begin{verbatim} +ei*ei = Q(ei) +ei*ej = -ej*ei, i ^= j +\end{verbatim} + +Now look at the snapshot of its definition given in Figure +\ref{fig-clifalg}. +Lines 9-10 show part of the definitions of the {\tt Exports}. +A Clifford algebra over a field \axiom{K} is asserted to be a ring, +an algebra over \axiom{K}, and a vector space over \axiom{K}. +Its explicit exports include +\axiom{e(n),} which returns the \eth{\axiom{n}} unit element. + +\beginImportant + +\noindent +{\tt 1.\ \ \ NNI\ ==>\ NonNegativeInteger}\newline +{\tt 2.\ \ \ PI\ \ ==>\ PositiveInteger}\newline +{\tt 3.\ \ \ }\newline +{\tt 4.\ \ \ CliffordAlgebra(n,K,q):\ Exports\ ==\ Implementation\ where}\newline +{\tt 5.\ \ \ \ \ \ \ n:\ PI}\newline +{\tt 6.\ \ \ \ \ \ \ K:\ Field}\newline +{\tt 7.\ \ \ \ \ \ \ q:\ QuadraticForm(n,\ K)}\newline +{\tt 8.\ \ \ }\newline +{\tt 9.\ \ \ \ \ \ \ Exports\ ==\ Join(Ring,Algebra(K),VectorSpace(K))\ with}\newline +{\tt 10.\ \ \ \ \ \ \ \ e:\ PI\ ->\ \$}\newline +{\tt 11.\ \ \ \ \ \ \ \ \ \ \ \ ...\ \ \ \ \ \ \ \ }\newline +{\tt 12.\ \ }\newline +{\tt 13.\ \ \ \ \ \ Implementation\ ==\ add}\newline +{\tt 14.\ \ \ \ \ \ \ \ Qeelist\ :=\ \ }\newline +{\tt 15.\ \ \ \ \ \ \ \ \ \ [q.unitVector(i::PI)\ for\ i\ in\ 1..n]}\newline +{\tt 16.\ \ \ \ \ \ \ \ dim\ \ \ \ \ :=\ \ 2**n}\newline +{\tt 17.\ \ \ \ \ \ \ \ Rep\ \ \ \ \ :=\ PrimitiveArray\ K}\newline +{\tt 18.\ \ \ \ \ \ \ \ New\ ==>\ new(dim,\ 0\$K)\$Rep}\newline +{\tt 19.\ \ \ \ \ \ \ \ x\ +\ y\ ==}\newline +{\tt 20.\ \ \ \ \ \ \ \ \ \ z\ :=\ New}\newline +{\tt 21.\ \ \ \ \ \ \ \ \ \ for\ i\ in\ 0..dim-1\ repeat\ z.i\ :=\ x.i\ +\ y.i}\newline +{\tt 22.\ \ \ \ \ \ \ \ \ \ z}\newline +{\tt 23.\ \ \ \ \ \ \ \ addMonomProd:\ (K,\ NNI,\ K,\ NNI,\ \$)\ ->\ \$}\newline +{\tt 24.\ \ \ \ \ \ \ \ addMonomProd(c1,\ b1,\ c2,\ b2,\ z)\ ==\ \ ...}\newline +{\tt 25.\ \ \ \ \ \ \ \ x\ *\ y\ ==}\newline +{\tt 26.\ \ \ \ \ \ \ \ \ \ z\ :=\ New}\newline +{\tt 27.\ \ \ \ \ \ \ \ \ \ for\ ix\ in\ 0..dim-1\ repeat}\newline +{\tt 28.\ \ \ \ \ \ \ \ \ \ \ \ if\ x.ix\ \notequal{}\ 0\ then\ for\ iy\ in\ 0..dim-1\ repeat}\newline +{\tt 29.\ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ y.iy\ \notequal{}\ 0}\newline +{\tt 30.\ \ \ \ \ \ \ \ \ \ \ \ \ \ then\ addMonomProd(x.ix,ix,y.iy,iy,z)}\newline +{\tt 31.\ \ \ \ \ \ \ \ \ \ \ \ z}\newline +{\tt 32.\ \ \ \ \ \ \ \ \ \ \ \ \ ...}\newline +\caption{Part of the \protect\axiomType{CliffordAlgebra} domain.}\label{fig-clifalg} +\endImportant + +The {\tt Implementation} part begins by defining a local variable +\axiom{Qeelist} to hold the list of all \axiom{q.v} where \axiom{v} +runs over the unit vectors from 1 to the dimension \axiom{n}. +Another local variable \axiom{dim} is set to \texht{$2^n$}{2**n}, +computed once and for all. +The representation for the domain is +\axiomType{PrimitiveArray(K)}, +which is a basic array of elements from domain \axiom{K}. +Line 18 defines \axiom{New} as shorthand for the more lengthy +expression \axiom{new(dim, 0\$K)\$Rep}, which computes a primitive +array of length \texht{$2^n$}{2**n} filled with \axiom{0}'s from +domain \axiom{K}. + +Lines 19-22 define the sum of two elements \axiom{x} and \axiom{y} +straightforwardly. +First, a new array of all \axiom{0}'s is created, then filled with +the sum of the corresponding elements. +Indexing for primitive arrays starts at 0. +The definition of the product of \axiom{x} and \axiom{y} first requires +the definition of a local function \userfun{addMonomProd}. +Axiom knows it is local since it is not an exported function. +The types of all local functions must be declared. + +For a demonstration of \axiomType{CliffordAlgebra}, see +\downlink{`CliffordAlgebra'}{CliffordAlgebraXmpPage}\ignore{CliffordAlgebra}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomsinsDatabaseTitle}{Example 2: Building A Query Facility} +\newcommand{\ugDomsinsDatabaseNumber}{13.13.} + +@ +\section{Example 2: Building A Query Facility} +\label{ugDomsinsDatabasePage} +\begin{itemize} +\item ugDomainsQueryLanguagePage \ref{ugDomainsQueryLanguagePage} on +page~\pageref{ugDomainsQueryLanguagePage} +\item ugDomainsDatabaseConstructorPage \ref{ugDomainsDatabaseConstructorPage} on +page~\pageref{ugDomainsDatabaseConstructorPage} +\item ugDomainsQueryEquationsPage \ref{ugDomainsQueryEquationsPage} on +page~\pageref{ugDomainsQueryEquationsPage} +\item ugDomainsDataListsPage \ref{ugDomainsDataListsPage} on +page~\pageref{ugDomainsDataListsPage} +\item ugDomainsDatabasePage \ref{ugDomainsDatabasePage} on +page~\pageref{ugDomainsDatabasePage} +\item ugDomainsCreatingPage \ref{ugDomainsCreatingPage} on +page~\pageref{ugDomainsCreatingPage} +\item ugDomainsPuttingPage \ref{ugDomainsPuttingPage} on +page~\pageref{ugDomainsPuttingPage} +\item ugDomainsExamplesPage \ref{ugDomainsExamplesPage} on +page~\pageref{ugDomainsExamplesPage} +\end{itemize} +\index{pages!ugDomsinsDatabasePage!ug13.ht} +\index{ug13.ht!pages!ugDomsinsDatabasePage} +\index{ugDomsinsDatabasePage!ug13.ht!pages} +<>= +\begin{page}{ugDomsinsDatabasePage} +{13.13. Example 2: Building A Query Facility} +\beginscroll +% +We now turn to an entirely different kind of application, +building a query language for a database. + +Here is the practical problem to solve. +The \Browse{} facility of Axiom has a +database for all operations and constructors which is +stored on disk and accessed by \HyperName{}. +For our purposes here, we regard each line of this file as having +eight fields: +{\tt class, name, type, nargs, exposed, kind, origin,} and {\tt condition.} +Here is an example entry: + +\begin{verbatim} +o`determinant`$->R`1`x`d`Matrix(R)`has(R,commutative("*")) +\end{verbatim} + +In English, the entry means: +\texht{\begin{quotation}}{\newline} +\texht{\raggedright}{} +The operation \axiomFun{determinant}: \spadsig{\$}{R} with {\it 1} argument, is +{\it exposed} and is exported by {\it domain} \axiomType{Matrix(R)} +if {\tt R has commutative("*")}. +\texht{\end{quotation}}{\newline} + +Our task is to create a little query language that allows us +to get useful information from this database. + +\beginmenu + \menudownlink{{13.13.1. A Little Query Language}} +{ugDomainsQueryLanguagePage} + \menudownlink{{13.13.2. The Database Constructor}} +{ugDomainsDatabaseConstructorPage} + \menudownlink{{13.13.3. Query Equations}}{ugDomainsQueryEquationsPage} + \menudownlink{{13.13.4. DataLists}}{ugDomainsDataListsPage} + \menudownlink{{13.13.5. Index Cards}}{ugDomainsDatabasePage} + \menudownlink{{13.13.6. Creating a Database}}{ugDomainsCreatingPage} + \menudownlink{{13.13.7. Putting It All Together}}{ugDomainsPuttingPage} + \menudownlink{{13.13.8. Example Queries}}{ugDomainsExamplesPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsQueryLanguageTitle}{A Little Query Language} +\newcommand{\ugDomainsQueryLanguageNumber}{13.13.1.} + +@ +\section{A Little Query Language} +\label{ugDomainsQueryLanguagePage} +\index{pages!ugDomainsQueryLanguagePage!ug13.ht} +\index{ug13.ht!pages!ugDomainsQueryLanguagePage} +\index{ugDomainsQueryLanguagePage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsQueryLanguagePage}{13.13.1. A Little Query Language} +\beginscroll + +First we design a simple language for accessing information from +the database. +We have the following simple model in mind for its design. +Think of the database as a box of index cards. +There is only one search operation---it +takes the name of a field and a predicate +(a boolean-valued function) defined on the fields of the +index cards. +When applied, the search operation goes through the entire box +selecting only those index cards for which the predicate is true. +The result of a search is a new box of index cards. +This process can be repeated again and again. + +The predicates all have a particularly simple form: {\it symbol} +{\tt =} {\it pattern}, where {\it symbol} designates one of the +fields, and {\it pattern} is a ``search string''---a string +that may contain a ``{\tt *}'' as a +wildcard. +Wildcards match any substring, including the empty string. +Thus the pattern {\tt "*ma*t"} matches +{\tt "mat", "doormat"} and {\tt "smart".} + +To illustrate how queries are given, we give you a sneak preview +of the facility we are about to create. + +\xtc{ +Extract the database of all Axiom operations. +}{ +\spadpaste{ops := getDatabase("o")\bound{o1}} +} +\xtc{ +How many exposed three-argument \axiomFun{map} operations involving streams? +}{ +\spadpaste{ops.(name="map").(nargs="3").(type="*Stream*")\bound{o2}\free{o1}} +} + +As usual, the arguments of \axiomFun{elt} (\axiomSyntax{.}) +associate to the left. +The first \axiomFun{elt} produces the set of all operations with +name {\tt map}. +The second \axiomFun{elt} produces the set of all map operations +with three arguments. +The third \axiomFun{elt} produces the set of all three-argument map +operations having a type mentioning \axiomType{Stream}. + +Another thing we'd like to do is to extract one field from each of +the index cards in the box and look at the result. +Here is an example of that kind of request. + +\xtc{ +What constructors explicitly export a \axiomFun{determinant} operation? +}{ +\spadpaste{elt(elt(elt(elt(ops,name="determinant"),origin),sort),unique)\free{o1}} +} + +The first \axiomFun{elt} produces the set of all index cards with +name {\tt determinant}. +The second \axiomFun{elt} extracts the {\tt origin} component from +each index card. Each origin component +is the name of a constructor which directly +exports the operation represented by the index card. +Extracting a component from each index card produces what we call +a {\it datalist}. +The third \axiomFun{elt}, {\tt sort}, causes the datalist of +origins to be sorted in alphabetic +order. +The fourth, {\tt unique}, causes duplicates to be removed. + +Before giving you a more extensive demo of this facility, +we now build the necessary domains and packages to implement it. +%We will introduce a few of our minor conveniences. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsDatabaseConstructorTitle}{The Database Constructor} +\newcommand{\ugDomainsDatabaseConstructorNumber}{13.13.2.} + +@ +\section{The Database Constructor} +\label{ugDomainsDatabaseConstructorPage} +\index{pages!ugDomainsDatabaseConstructorPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsDatabaseConstructorPage} +\index{ugDomainsDatabaseConstructorPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsDatabaseConstructorPage} +{13.13.2. The Database Constructor} +\beginscroll + +We work from the top down. First, we define a database, +our box of index cards, as an abstract datatype. +For sake of illustration and generality, +we assume that an index card is some type \axiom{S}, and +that a database is a box of objects of type \axiom{S}. +Here is the Axiom program defining the \pspadtype{Database} +domain. + +\beginImportant + +\noindent +{\tt 1.\ \ \ PI\ ==>\ PositiveInteger}\newline +{\tt 2.\ \ \ Database(S):\ Exports\ ==\ Implementation\ where}\newline +{\tt 3.\ \ \ \ \ S:\ Object\ with\ }\newline +{\tt 4.\ \ \ \ \ \ \ elt:\ (\$,\ Symbol)\ ->\ String}\newline +{\tt 5.\ \ \ \ \ \ \ display:\ \$\ ->\ Void}\newline +{\tt 6.\ \ \ \ \ \ \ fullDisplay:\ \$\ ->\ Void}\newline +{\tt 7.\ \ \ }\newline +{\tt 8.\ \ \ \ \ Exports\ ==\ with}\newline +{\tt 9.\ \ \ \ \ \ \ elt:\ (\$,QueryEquation)\ ->\ \$}\newline +{\tt 10.\ \ \ \ \ \ elt:\ (\$,\ Symbol)\ ->\ DataList\ String}\newline +{\tt 11.\ \ \ \ \ \ "+":\ (\$,\$)\ ->\ \$}\newline +{\tt 12.\ \ \ \ \ \ "-":\ (\$,\$)\ ->\ \$}\newline +{\tt 13.\ \ \ \ \ \ display:\ \$\ ->\ Void}\newline +{\tt 14.\ \ \ \ \ \ fullDisplay:\ \$\ ->\ Void}\newline +{\tt 15.\ \ \ \ \ \ fullDisplay:\ (\$,PI,PI)\ ->\ Void}\newline +{\tt 16.\ \ \ \ \ \ coerce:\ \$\ ->\ OutputForm}\newline +{\tt 17.\ \ \ \ Implementation\ ==\ add}\newline +{\tt 18.\ \ \ \ \ \ \ \ ...}\newline +\endImportant + +The domain constructor takes a parameter \axiom{S}, which +stands for the class of index cards. +We describe an index card later. +Here think of an index card as a string which has +the eight fields mentioned above. + +First, we tell Axiom what operations we are going to require +from index cards. +We need an \axiomFun{elt} to extract the contents of a field +(such as {\tt name} and {\tt type}) as a string. +For example, +\axiom{c.name} returns a string that is the content of the +\axiom{name} field on the index card \axiom{c}. +We need to display an index card in two ways: +\pspadfun{display} shows only the name and type of an +operation; +\pspadfun{fullDisplay} displays all fields. +The display operations return no useful information and thus have +return type \axiomType{Void}. + +Next, we tell Axiom what operations the user can apply +to the database. +This part defines our little query language. +The most important operation is +{\frenchspacing\tt db . field = pattern} which +returns a new database, consisting of all index +cards of {\tt db} such that the \axiom{field} part of the index +card is matched by the string pattern called \axiom{pattern}. +The expression {\tt field = pattern} is an object of type +\axiomType{QueryEquation} (defined in the next section). + +Another \axiomFun{elt} is needed to produce a \pspadtype{DataList} +object. +Operation \axiomOp{+} is to merge two databases together; +\axiomOp{-} is used to subtract away common entries in a second +database from an initial database. +There are three display functions. +The \pspadfun{fullDisplay} function has two versions: one +that prints all the records, the other that prints only a fixed +number of records. +A \axiomFun{coerce} to \axiomType{OutputForm} creates a display +object. + +The {\tt Implementation} part of \axiomType{Database} is straightforward. +\beginImportant + +\noindent +{\tt 1.\ \ \ \ \ Implementation\ ==\ add}\newline +{\tt 2.\ \ \ \ \ \ \ s:\ Symbol}\newline +{\tt 3.\ \ \ \ \ \ \ Rep\ :=\ List\ S}\newline +{\tt 4.\ \ \ \ \ \ \ elt(db,equation)\ ==\ ...}\newline +{\tt 5.\ \ \ \ \ \ \ elt(db,key)\ ==\ [x.key\ for\ x\ in\ db]::DataList(String)}\newline +{\tt 6.\ \ \ \ \ \ \ display(db)\ ==\ \ for\ x\ in\ db\ repeat\ display\ x}\newline +{\tt 7.\ \ \ \ \ \ \ fullDisplay(db)\ ==\ for\ x\ in\ db\ repeat\ fullDisplay\ x}\newline +{\tt 8.\ \ \ \ \ \ \ fullDisplay(db,\ n,\ m)\ ==\ for\ x\ in\ db\ for\ i\ in\ 1..m}\newline +{\tt 9.\ \ \ \ \ \ \ \ \ repeat}\newline +{\tt 10.\ \ \ \ \ \ \ \ \ \ if\ i\ >=\ n\ then\ fullDisplay\ x}\newline +{\tt 11.\ \ \ \ \ \ x+y\ ==\ removeDuplicates!\ merge(x,y)}\newline +{\tt 12.\ \ \ \ \ \ x-y\ ==\ mergeDifference(copy(x::Rep),}\newline +{\tt 13.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ y::Rep)\$MergeThing(S)}\newline +{\tt 14.\ \ \ \ \ \ coerce(db):\ OutputForm\ ==\ (\#db)::\ OutputForm}\newline +\endImportant + +The database is represented by a list of elements of \axiom{S} (index cards). +We leave the definition of the first \axiomFun{elt} operation +(on line 4) until the next section. +The second \axiomFun{elt} collects all the strings with field name +{\it key} into a list. +The \axiomFun{display} function and first \axiomFun{fullDisplay} function +simply call the corresponding functions from \axiom{S}. +The second \axiomFun{fullDisplay} function provides an efficient way of +printing out a portion of a large list. +The \axiomOp{+} is defined by using the existing +\spadfunFrom{merge}{List} operation defined on lists, then +removing duplicates from the result. +The \axiomOp{-} operation requires writing a corresponding +subtraction operation. +A package \axiomType{MergeThing} (not shown) provides this. + +The \axiomFun{coerce} function converts the database to an +\axiomType{OutputForm} by computing the number of index cards. +This is a good example of the independence of +the representation of an Axiom object from how it presents +itself to the user. We usually do not want to look at a database---but +do care how many ``hits'' we get for a given query. +So we define the output representation of a database to be simply +the number of index cards our query finds. +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsQueryEquationsTitle}{Query Equations} +\newcommand{\ugDomainsQueryEquationsNumber}{13.13.3.} + +@ +\section{Query Equations} +\label{ugDomainsQueryEquationsPage} +\index{pages!ugDomainsQueryEquationsPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsQueryEquationsPage} +\index{ugDomainsQueryEquationsPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsQueryEquationsPage}{13.13.3. Query Equations} +\beginscroll + +The predicate for our search is given by an object of type +\pspadtype{QueryEquation}. +Axiom does not have such an object yet so we +have to invent it. + +\beginImportant + +\noindent +{\tt 1.\ \ \ QueryEquation():\ Exports\ ==\ Implementation\ where}\newline +{\tt 2.\ \ \ \ \ Exports\ ==\ with}\newline +{\tt 3.\ \ \ \ \ \ \ equation:\ (Symbol,\ String)\ ->\ \$}\newline +{\tt 4.\ \ \ \ \ \ \ variable:\ \$\ ->\ Symbol}\newline +{\tt 5.\ \ \ \ \ \ \ value:\\ \\ \\ \\ \$\ ->\ String}\newline +{\tt 6.\ \ \ }\newline +{\tt 7.\ \ \ \ \ Implementation\ ==\ add}\newline +{\tt 8.\ \ \ \ \ \ \ Rep\ :=\ Record(var:Symbol,\ val:String)}\newline +{\tt 9.\ \ \ \ \ \ \ equation(x,\ s)\ ==\ [x,\ s]}\newline +{\tt 10.\ \ \ \ \ \ variable\ q\ ==\ q.var}\newline +{\tt 11.\ \ \ \ \ \ value\\ \\ \\ \\ q\ ==\ q.val}\newline +\endImportant + +Axiom converts an input expression of the form +\axiom{{\it a} = {\it b}} to \axiom{equation({\it a, b})}. +Our equations always have a symbol on the left and a string +on the right. +The {\tt Exports} part thus specifies an operation +\axiomFun{equation} to create a query equation, and +\pspadfun{variable} and \pspadfun{value} to select the left- and +right-hand sides. +The {\tt Implementation} part uses \pspadtype{Record} for a +space-efficient representation of an equation. + +Here is the missing definition for the \axiomFun{elt} function of +\pspadtype{Database} in the last section: + +\beginImportant + +\noindent +{\tt 1.\ \ \ \ \ \ \ elt(db,eq)\ ==}\newline +{\tt 2.\ \ \ \ \ \ \ \ \ field\\ \ :=\ variable\ eq}\newline +{\tt 3.\ \ \ \ \ \ \ \ \ value\ :=\ value\ eq}\newline +{\tt 4.\ \ \ \ \ \ \ \ \ [x\ for\ x\ in\ db\ |\ matches?(value,x.field)]}\newline +\endImportant + +Recall that a database is represented by a list. +Line 4 simply runs over that list collecting all elements +such that the pattern (that is, \axiom{value}) +matches the selected field of the element. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsDataListsTitle}{DataLists} +\newcommand{\ugDomainsDataListsNumber}{13.13.4.} + +@ +\section{DataLists} +\label{ugDomainsDataListsPage} +\index{pages!ugDomainsDataListsPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsDataListsPage} +\index{ugDomainsDataListsPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsDataListsPage}{13.13.4. DataLists} +\beginscroll + +Type \pspadtype{DataList} is a new type invented to hold the result +of selecting one field from each of the index cards in the box. +It is useful to make datalists extensions of lists---lists that +have special \axiomFun{elt} operations defined on them for +sorting and removing duplicates. + +\beginImportant + +\noindent +{\tt 1.\ \ \ DataList(S:OrderedSet)\ :\ Exports\ ==\ Implementation\ where}\newline +{\tt 2.\ \ \ \ \ Exports\ ==\ ListAggregate(S)\ with}\newline +{\tt 3.\ \ \ \ \ \ \ elt:\ (\$,"unique")\ ->\ \$}\newline +{\tt 4.\ \ \ \ \ \ \ elt:\ (\$,"sort")\ ->\ \$}\newline +{\tt 5.\ \ \ \ \ \ \ elt:\ (\$,"count")\ ->\ NonNegativeInteger}\newline +{\tt 6.\ \ \ \ \ \ \ coerce:\ List\ S\ ->\ \$}\newline +{\tt 7.\ \ \ }\newline +{\tt 8.\ \ \ \ \ Implementation\ ==\ \ List(S)\ add}\newline +{\tt 9.\ \ \ \ \ \ \ Rep\ :=\ List\ S}\newline +{\tt 10.\ \ \ \ \ \ elt(x,"unique")\ ==\ removeDuplicates(x)}\newline +{\tt 11.\ \ \ \ \ \ elt(x,"sort")\ ==\ sort(x)}\newline +{\tt 12.\ \ \ \ \ \ elt(x,"count")\ ==\ \#x}\newline +{\tt 13.\ \ \ \ \ \ coerce(x:List\ S)\ ==\ x\ ::\ \$}\newline +\endImportant + +The {\tt Exports} part asserts that datalists belong to the +category \axiomType{ListAggregate}. +Therefore, you can use all the usual list operations on datalists, +such as \spadfunFrom{first}{List}, \spadfunFrom{rest}{List}, and +\spadfunFrom{concat}{List}. +In addition, datalists have four explicit operations. +Besides the three \axiomFun{elt} operations, there is a +\axiomFun{coerce} operation that creates datalists from lists. + +The {\tt Implementation} part needs only to define four functions. +All the rest are obtained from \axiomType{List(S)}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsDatabaseTitle}{Index Cards} +\newcommand{\ugDomainsDatabaseNumber}{13.13.5.} + +@ +\section{Index Cards} +\label{ugDomainsDatabasePage} +\index{pages!ugDomainsDatabasePage!ug13.ht} +\index{ug13.ht!pages!ugDomainsDatabasePage} +\index{ugDomainsDatabasePage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsDatabasePage}{13.13.5. Index Cards} +\beginscroll + +An index card comes from a file as one long string. +We define functions that extract substrings from the long +string. +Each field has a name that +is passed as a second argument to \axiomFun{elt}. + +\beginImportant + +\noindent +{\tt 1.\ \ \ IndexCard()\ ==\ Implementation\ where}\newline +{\tt 2.\ \ \ \ \ Exports\ ==\ with}\newline +{\tt 3.\ \ \ \ \ \ \ elt:\ (\$,\ Symbol)\ ->\ String}\newline +{\tt 4.\ \ \ \ \ \ \ display:\ \$\ ->\ Void}\newline +{\tt 5.\ \ \ \ \ \ \ fullDisplay:\ \$\ ->\ Void}\newline +{\tt 6.\ \ \ \ \ \ \ coerce:\ String\ ->\ \$}\newline +{\tt 7.\ \ \ \ \ Implementation\ ==\ String\ add\ ...}\newline +\endImportant + +We leave the {\tt Implementation} part to the reader. +All operations involve straightforward string manipulations. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsCreatingTitle}{Creating a Database} +\newcommand{\ugDomainsCreatingNumber}{13.13.6.} + +@ +\section{Creating a Database} +\label{ugDomainsCreatingPage} +\index{pages!ugDomainsCreatingPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsCreatingPage} +\index{ugDomainsCreatingPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsCreatingPage}{13.13.6. Creating a Database} +\beginscroll + +We must not forget one important operation: one that builds the database in the +first place! +We'll name it \pspadfun{getDatabase} and put it in a package. +This function is implemented by calling the \Lisp{} function +\axiom{getBrowseDatabase(s)} to get appropriate information from +\Browse{}. +This operation takes a string indicating which lines you +want from the database: \axiom{"o"} gives you all operation +lines, and \axiom{"k"}, all constructor lines. +Similarly, \axiom{"c"}, \axiom{"d"}, and \axiom{"p"} give +you all category, domain and package lines respectively. +% +\beginImportant + +\noindent +{\tt 1.\ \ \ OperationsQuery():\ Exports\ ==\ Implementation\ where}\newline +{\tt 2.\ \ \ \ \ Exports\ ==\ with}\newline +{\tt 3.\ \ \ \ \ \ \ getDatabase:\ String\ ->\ Database(IndexCard)}\newline +{\tt 4.\ \ \ }\newline +{\tt 5.\ \ \ \ \ Implementation\ ==\ add}\newline +{\tt 6.\ \ \ \ \ \ \ getDatabase(s)\ ==\ getBrowseDatabase(s)\$Lisp}\newline +\endImportant + +We do not bother creating a special name for databases of index +cards. +\pspadtype{Database (IndexCard)} will do. +Notice that we used the package \pspadtype{OperationsQuery} to +create, in effect, +a new kind of domain: \pspadtype{Database(IndexCard)}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsPuttingTitle}{Putting It All Together} +\newcommand{\ugDomainsPuttingNumber}{13.13.7.} + +@ +\section{Putting It All Together} +\label{ugDomainsPuttingPage} +\index{pages!ugDomainsPuttingPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsPuttingPage} +\index{ugDomainsPuttingPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsPuttingPage}{13.13.7. Putting It All Together} +\beginscroll + +To create the database facility, you put all these constructors +into one file.\footnote{You could use separate files, but we +are putting them all together because, organizationally, that is +the logical thing to do.} +At the top of the file put \spadcmd{)abbrev} commands, giving the +constructor abbreviations you created. + +\beginImportant + +\noindent +{\tt 1.\ \ \ )abbrev\ domain\ \ ICARD\ \ \ IndexCard}\newline +{\tt 2.\ \ \ )abbrev\ domain\ \ QEQUAT\ \ QueryEquation}\newline +{\tt 3.\ \ \ )abbrev\ domain\ \ MTHING\ \ MergeThing}\newline +{\tt 4.\ \ \ )abbrev\ domain\ \ DLIST\ \ \ DataList}\newline +{\tt 5.\ \ \ )abbrev\ domain\ \ DBASE\ \ \ Database}\newline +{\tt 6.\ \ \ )abbrev\ package\ OPQUERY\ OperationsQuery}\newline +\endImportant + +With all this in {\bf alql.spad}, for example, compile it using +\begin{verbatim} +)compile alql +\end{verbatim} +and then load each of the constructors: +\begin{verbatim} +)load ICARD QEQUAT MTHING DLIST DBASE OPQUERY +\end{verbatim} +You are ready to try some sample queries. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugDomainsExamplesTitle}{Example Queries} +\newcommand{\ugDomainsExamplesNumber}{13.13.8.} + +@ +\section{Example Queries} +\label{ugDomainsExamplesPage} +\index{pages!ugDomainsExamplesPage!ug13.ht} +\index{ug13.ht!pages!ugDomainsExamplesPage} +\index{ugDomainsExamplesPage!ug13.ht!pages} +<>= +\begin{page}{ugDomainsExamplesPage}{13.13.8. Example Queries} +\beginscroll + +Our first set of queries give some statistics on constructors in +the current Axiom system. + +\xtc{ +How many constructors does Axiom have? +}{ +\spadpaste{ks := getDatabase "k"\bound{q1}} +} +\xtc{ +Break this down into the number of categories, domains, and packages. +}{ +\spadpaste{[ks.(kind=k) for k in ["c","d","p"]]\bound{q3}\free{q1}} +} +\xtc{ +What are all the domain constructors that take no parameters? +}{ +\spadpaste{elt(ks.(kind="d").(nargs="0"),name)\bound{q4}\free{q1}} +} +\xtc{ +How many constructors have ``Matrix'' in their name? +}{ +\spadpaste{mk := ks.(name="*Matrix*")\bound{q5}\free{q1}} +} +\xtc{ +What are the names of those that are domains? +}{ +\spadpaste{elt(mk.(kind="d"),name)\bound{q6}\free{q5}} +} +\xtc{ +How many operations are there in the library? +}{ +\spadpaste{o := getDatabase "o"\bound{o1}} +} +\xtc{ +Break this down into categories, domains, and packages. +}{ +\spadpaste{[o.(kind=k) for k in ["c","d","p"]]\free{o1}} +} + +The query language is helpful in getting information about a +particular operation you might like to apply. +While this information can be obtained with +\Browse{}, the use of the query database gives you data that you +can manipulate in the workspace. + +\xtc{ +How many operations have ``eigen'' in the name? +}{ +\spadpaste{eigens := o.(name="*eigen*")\bound{eigens}\free{o1}} +} +\xtc{ +What are their names? +}{ +\spadpaste{elt(eigens,name)\free{eigens}} +} +\xtc{ +Where do they come from? +}{ +\spadpaste{elt(elt(elt(eigens,origin),sort),unique) \free{eigens}} +} + +The operations \axiomOp{+} and \axiomOp{-} are useful for +constructing small databases and combining them. +However, remember that the only matching you can do is string +matching. +Thus a pattern such as {\tt "*Matrix*"} on the type field +matches +any type containing \axiomType{Matrix}, \axiomType{MatrixCategory}, +\axiomType{SquareMatrix}, and so on. + +\xtc{ +How many operations mention ``Matrix'' in their type? +}{ +\spadpaste{tm := o.(type="*Matrix*")\bound{x10}\free{o1}} +} +\xtc{ +How many operations come from constructors with ``Matrix'' in +their name? +}{ +\spadpaste{fm := o.(origin="*Matrix*")\bound{x11}\free{o1}} +} +\xtc{ +How many operations are in \axiom{fm} but not in \axiom{tm}? +}{ +\spadpaste{fm-tm \bound{x12}\free{x10 x11}} +} +\xtc{ +Display the operations that both mention ``Matrix'' in their type +and come from a constructor having ``Matrix'' in their name. +}{ +\spadpaste{fullDisplay(fm-\%) \bound{x13}\free{x12}} +} +\xtc{ +How many operations involve matrices? +}{ +\spadpaste{m := tm+fm \bound{x14}\free{x10 x11}} +} +\xtc{ +Display 4 of them. +}{ +\spadpaste{fullDisplay(m, 202, 205) \free{x14}} +} +\xtc{ +How many distinct names of operations involving matrices are there? +}{ +\spadpaste{elt(elt(elt(m,name),unique),count) \free{x14}} +} + + + +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 14 (ug14.ht)} +<>= +\newcommand{\ugBrowseTitle}{Browse} +\newcommand{\ugBrowseNumber}{14.} + +@ +\section{Browse} +\label{ugBrowsePage} +\begin{itemize} +\item ugBrowseStartPage \ref{ugBrowseStartPage} on +page~\pageref{ugBrowseStartPage} +\item ugBrowseDomainPage \ref{ugBrowseDomainPage} on +page~\pageref{ugBrowseDomainPage} +\item ugBrowseMiscellaneousFeaturesPage \ref{ugBrowseMiscellaneousFeaturesPage} on +page~\pageref{ugBrowseMiscellaneousFeaturesPage} +\end{itemize} +\index{pages!ugBrowsePage!ug14.ht} +\index{ug14.ht!pages!ugBrowsePage} +\index{ugBrowsePage!ug14.ht!pages} +<>= +\begin{page}{ugBrowsePage}{14. Browse} +\beginscroll + +This chapter discusses the \Browse{} +component of \HyperName{}. +We suggest you invoke Axiom and work through this +chapter, section by section, following our examples to gain some +familiarity with \Browse{}. + +\beginmenu + \menudownlink{{14.1. The Front Page: Searching the Library}} +{ugBrowseStartPage} + \menudownlink{{14.2. The Constructor Page}}{ugBrowseDomainPage} + \menudownlink{{14.3. Miscellaneous Features of Browse}} +{ugBrowseMiscellaneousFeaturesPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugBrowseStartTitle}{The Front Page: Searching the Library} +\newcommand{\ugBrowseStartNumber}{14.1.} + +@ +\section{The Front Page: Searching the Library} +\label{ugBrowseStartPage} +\begin{itemize} +\item ugBrowseCapitalizationConventionPage +\ref{ugBrowseCapitalizationConventionPage} on +page~\pageref{ugBrowseCapitalizationConventionPage} +\item ugBrowseDomainPage \ref{ugBrowseDomainPage} on +page~\pageref{ugBrowseDomainPage} +\item ugBrowseViewsOfConstructorsPage \ref{ugBrowseViewsOfConstructorsPage} on +page~\pageref{ugBrowseViewsOfConstructorsPage} +\item ugBrowseViewsOfOperationsPage \ref{ugBrowseViewsOfOperationsPage} on +page~\pageref{ugBrowseViewsOfOperationsPage} +\end{itemize} +\index{pages!ugBrowseStartPage!ug14.ht} +\index{ug14.ht!pages!ugBrowseStartPage} +\index{ugBrowseStartPage!ug14.ht!pages} +<>= +\begin{page}{ugBrowseStartPage}{14.1. The Front Page: Searching the Library} +\beginscroll +To enter \Browse{}, click on {\bf Browse} on the top level page +of \HyperName{} to get the {\it front page} of \Browse{}. +% +%324pt is 4.5",180pt is 2.5",432pt is 6"=textwidth,54=(432-324)/2 +%ps files are 4.5"x2.5" except source 4.5"x2.5" +% + +To use this page, you first enter a \spadgloss{search string} into +the input area at the top, then click on one of the buttons below. +We show the use of each of the buttons by example. + +\subsubsection{Constructors} + +First enter the search string {\tt Matrix} into the input area and +click on {\bf Constructors}. What you get is the {\it constructor +page} for \axiomType{Matrix}. We show and describe this page in +detail in \downlink{``\ugBrowseDomainTitle''}{ugBrowseDomainPage} in +Section \ugBrowseDomainNumber\ignore{ugBrowseDomain}. By convention, +Axiom does a case-insensitive search for a match. Thus {\tt matrix} +is just as good as {\tt Matrix}, has the same effect as {\tt MaTrix}, +and so on. We recommend that you generally use small letters for +names however. A search string with only capital letters has a +special meaning (see +\downlink{``\ugBrowseCapitalizationConventionTitle''} +{ugBrowseCapitalizationConventionPage} +in Section +\ugBrowseCapitalizationConventionNumber +\ignore{ugBrowseCapitalizationConvention}). + + +Click on \UpBitmap{} to return to the \Browse{} front page. + +Use the symbol ``{\tt *}'' in search strings as a \spadgloss{wild +card}. +A wild card matches any substring, including the empty string. +For example, enter the search string {\tt *matrix*} into the input +area and click on {\bf Constructors}.\footnote{To get only +categories, domains, or packages, rather than all constructors, +you can click on the corresponding button to the right of {\bf +Constructors}.} +What you get is a table of all constructors whose names contain +the string ``{\tt matrix}.'' + +All constructors containing the string are listed, whether +\spadglossSee{exposed}{expose} or \spadglossSee{unexposed}{expose}. +You can hide the names of the unexposed constructors by clicking on +the {\it *=}{\bf unexposed} button in the {\it Views} panel at the +bottom of the window. (The button will change to {\bf exposed} {\it +only}.) + +One of the names in this table is \axiomType{Matrix}. Click on +\axiomType{Matrix}. What you get is again the constructor page for +\axiomType{Matrix}. As you see, \Browse{} gives you a large network +of information in which there are many ways to reach the same pages. + +Again click on the \UpBitmap{} to return to the table of constructors +whose names contain {\tt matrix}. Below the table is a {\it Views} +panel. This panel contains buttons that let you view constructors in +different ways. To learn about views of constructors, skip to +\downlink{``\ugBrowseViewsOfConstructorsTitle''} +{ugBrowseViewsOfConstructorsPage} +in Section +\ugBrowseViewsOfConstructorsNumber\ignore{ugBrowseViewsOfConstructors}. + +Click on \UpBitmap{} to return to the \Browse{} front page. + +\subsubsection{Operations} + +Enter {\tt *matrix} into the input area and click on {\bf Operations}. +This time you get a table of {\it operations} whose names end with +{\tt matrix} or {\tt Matrix}. + + +If you select an operation name, you go to a page describing all the +operations in Axiom of that name. At the bottom of an operation page +is another kind of {\it Views} panel, one for operation pages. To +learn more about these views, skip to +\downlink{``\ugBrowseViewsOfOperationsTitle''}{ugBrowseViewsOfOperationsPage} +in Section +\ugBrowseViewsOfOperationsNumber\ignore{ugBrowseViewsOfOperations}. + +Click on \UpBitmap{} to return to the \Browse{} front page. + +\subsubsection{Attributes} + +This button gives you a table of attribute names that match the +search string. Enter the search string {\tt *} and click on +{\bf Attributes} to get a list +of all system attributes. + +Click on \UpBitmap{} to return to the \Browse{} front page. + +Again there is a {\it Views} panel at the bottom with buttons that let +you view the attributes in different ways. + +\subsubsection{General} + +This button does a general search for all constructor, operation, and +attribute names matching the search string. Enter the search string +\allowbreak {\tt *matrix*} into the input area. Click on {\bf +General} to find all constructs that have {\tt matrix} as a part of +their name. + + +The summary gives you all the names under a heading when the number of +entries is less than 10. + +Click on \UpBitmap{} to return to the \Browse{} front page. + +\subsubsection{Documentation} + +Again enter the search key {\tt *matrix*} and this time click on +{\bf Documentation}. +This search matches any constructor, operation, or attribute +name whose documentation contains a substring matching {\tt +matrix}. + + +Click on \UpBitmap{} to return to the \Browse{} front page. + +\subsubsection{Complete} + +This search combines both {\bf General} and {\bf Documentation}. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugBrowseDomainTitle}{The Constructor Page} +\newcommand{\ugBrowseDomainNumber}{14.2.} + +@ +\section{The Constructor Page} +\label{ugBrowseDomainPage} +\index{pages!ugBrowseDomainPage!ug14.ht} +\index{ug14.ht!pages!ugBrowseDomainPage} +\index{ugBrowseDomainPage!ug14.ht!pages} +<>= +\begin{page}{ugBrowseDomainPage}{14.2. The Constructor Page} +\beginscroll + +In this section we look in detail at a constructor page for domain +\axiomType{Matrix}. +Enter {\tt matrix} into the input area on the main \Browse{} page +and click on {\bf Constructors}. + + + +The header part tells you that \axiomType{Matrix} has abbreviation +\axiomType{MATRIX} and one argument called {\tt R} that must be a +domain of category \axiomType{Ring}. +Just what domains can be arguments of \axiomType{Matrix}? +To find this out, click on the {\tt R} on the second line of the +heading. +What you get is a table of all acceptable domain parameter values +of {\tt R}, or a table of \spadgloss{rings} in Axiom. + + +Click on \UpBitmap{} to return to the constructor page for +\axiomType{Matrix}. +\texht{\newpage}{} + +If you have access to the source code of Axiom, the third +line of the heading gives you the name of the source file +containing the definition of \axiomType{Matrix}. +Click on it to pop up an editor window containing the source code +of \axiomType{Matrix}. + + +We recommend that you leave the editor window up while working +through this chapter as you occasionally may want to refer to it. +\texht{\newpage}{} + +\beginmenu + \menudownlink{{14.2.1. Constructor Page Buttons}}{ugBrowseDomainButtonsPage} + \menudownlink{{14.2.2. Cross Reference}}{ugBrowseCrossReferencePage} + \menudownlink{{14.2.3. Views Of Constructors}}{ugBrowseViewsOfConstructorsPage} + \menudownlink{{14.2.4. Giving Parameters to Constructors}}{ugBrowseGivingParametersPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugBrowseDomainButtonsTitle}{Constructor Page Buttons} +\newcommand{\ugBrowseDomainButtonsNumber}{14.2.1.} + +@ +\section{Constructor Page Buttons} +\label{ugBrowseDomainButtonsPage} +\begin{itemize} +\item ugBrowseViewsOfOperationsPage \ref{ugBrowseViewsOfOperationsPage} on +page~\pageref{ugBrowseViewsOfOperationsPage} +\end{itemize} +\index{pages!ugBrowseDomainButtonsPage!ug14.ht} +\index{ug14.ht!pages!ugBrowseDomainButtonsPage} +\index{ugBrowseDomainButtonsPage!ug14.ht!pages} +<>= +\begin{page}{ugBrowseDomainButtonsPage}{14.2.1. Constructor Page Buttons} +\beginscroll + +We examine each button on this page in order. + +\labelSpace{2pc} + +\subsubsection{Description} + +Click here to bring up a page with a brief description of +constructor \axiomType{Matrix}. +If you have access to system source code, note that these comments +can be found directly over the constructor definition. + + +\subsubsection{Operations} + +Click here to get a table of operations exported by +\axiomType{Matrix}. +You may wish to widen the window to have multiple columns as +below. + + +If you click on an operation name, you bring up a description page for +the operations. For a detailed description of these pages, skip to +\downlink{``\ugBrowseViewsOfOperationsTitle''}{ugBrowseViewsOfOperationsPage} +in Section +\ugBrowseViewsOfOperationsNumber\ignore{ugBrowseViewsOfOperations}. + +\subsubsection{Attributes} + +Click here to get a table of the two attributes exported by +\axiomType{Matrix}: +\spadatt{\texht{fi\-nite\-Ag\-gre\-gate}{finiteAggregate}} and +\spadatt{shallowlyMutable}. +These are two computational properties that result from +\axiomType{Matrix} being regarded as a data structure. + +\subsubsection{Examples} + +Click here to get an {\it examples page} with examples of operations to +create and manipulate matrices. + +Read through this section. +Try selecting the various buttons. +Notice that if you click on an operation name, such as +\spadfunFrom{new}{Matrix}, you bring up a description page for that +operation from \axiomType{Matrix}. + +Example pages have several examples of Axiom commands. +Each example has an active button to its left. +Click on it! +A pre-computed answer is pasted into the page immediately following the +command. +If you click on the button a second time, the answer disappears. +This button thus acts as a toggle: +``now you see it; now you don't.'' + +Note also that the Axiom commands themselves are active. +If you want to see Axiom execute the command, then click on it! +A new Axiom window appears on your screen and the command is +executed. + +\httex{At the end of the page is generally a menu of buttons that lead +you to further sections. +Select one of these topics to explore its contents.}{} + +\subsubsection{Exports} + +Click here to see a page describing the exports of \axiomType{Matrix} +exactly as described by the source code. + + +As you see, \axiomType{Matrix} declares that it exports all the operations +and attributes exported by category +\axiomType{MatrixCategory(R, Row, Col)}. +In addition, two operations, \axiomFun{diagonalMatrix} and +\axiomFun{inverse}, are explicitly exported. + +To learn a little about the structure of Axiom, we suggest you do +the following exercise. +Otherwise, click on \UpButton{} and go on to the next section. +\axiomType{Matrix} explicitly exports only two operations. +The other operations are thus exports of \axiomType{MatrixCategory}. +In general, operations are usually not explicitly exported by a domain. +Typically they are \spadglossSee{inherited}{inherit} from several +different categories. +Let's find out from where the operations of \axiomType{Matrix} come. + +\indent{4} +\beginitems +\item[1. ] Click on {\bf MatrixCategory}, then on {\bf Exports}. +Here you see that {\bf MatrixCategory} explicitly exports many matrix +operations. +Also, it inherits its operations from +\axiomType{TwoDimensionalArrayCategory}. + +\item[2. ] Click on {\bf TwoDimensionalArrayCategory}, then on {\bf Exports}. +Here you see explicit operations dealing with rows and columns. +In addition, it inherits operations from +\axiomType{HomogeneousAggregate}. + +%\item Click on {\bf HomogeneousAggregate}, then on {\bf Exports}. +%And so on. +%If you continue doing this, eventually you will + +\item[3. ] Click on \UpBitmap{} and then +click on {\bf Object}, then on {\bf Exports}, where you see +there are no exports. + +\item[4. ] Click on \UpBitmap{} repeatedly to return to the constructor page +for \axiomType{Matrix}. + +\enditems +\indent{0} + +\subsubsection{Related Operations} + +Click here bringing up a table of operations that are exported by +\spadglossSee{packages}{package} but not by \axiomType{Matrix} itself. + + +To see a table of such packages, use the {\bf Relatives} button on the +{\bf Cross Reference} page described next. + + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugBrowseCrossReferenceTitle}{Cross Reference} +\newcommand{\ugBrowseCrossReferenceNumber}{14.2.2.} + +@ +\section{Cross Reference} +\label{ugBrowseCrossReferencePage} +\index{pages!ugBrowseCrossReferencePage!ug14.ht} +\index{ug14.ht!pages!ugBrowseCrossReferencePage} +\index{ugBrowseCrossReferencePage!ug14.ht!pages} +<>= +\begin{page}{ugBrowseCrossReferencePage}{14.2.2. Cross Reference} +\beginscroll +Click on the {\bf Cross Reference} button on the main constructor page +for \axiomType{Matrix}. +This gives you a page having various cross reference information stored +under the respective buttons. + + +\subsubsection{Parents} + +The parents of a domain are the same as the categories mentioned under +the {\bf Exports} button on the first page. +Domain \axiomType{Matrix} has only one parent but in general a domain can +have any number. + +\subsubsection{Ancestors} + +The \spadglossSee{ancestors}{ancestor} of a constructor consist of its parents, the +parents of its parents, and so on. +Did you perform the exercise in the last section under {\bf Exports}? +If so, you see here all the categories you found while ascending the +{\bf Exports} chain for \axiomType{Matrix}. + +\subsubsection{Relatives} + +The \spadglossSee{relatives}{relative} of a domain constructor are package +constructors that provide operations in addition to those +\spadglossSee{exported}{export} by the domain. + +Try this exercise. +\indent{4} +\beginitems +\item[1. ] Click on {\bf Relatives}, bringing up a list of +\spadglossSee{packages}{package}. + +\item[2. ] Click on {\bf LinearSystemMatrixPackage} bringing up its +constructor page.\footnote{You may want to widen your \HyperName{} +window to make what follows more legible.} + +\item[3. ] Click on {\bf Operations}. +Here you see \axiomFun{rank}, an operation also exported by +\axiomType{Matrix} itself. + +\item[4. ] Click on {\bf rank}. +This \spadfunFrom{rank}{LinearSystemMatrixPackage} has two arguments and +thus is different from the \spadfunFrom{rank}{Matrix} from +\axiomType{Matrix}. + +\item[5. ] Click on \UpBitmap{} to return to the list of operations for the +package \axiomType{LinearSystemMatrixPackage}. + +\item[6. ] Click on {\bf solve} to bring up a +\spadfunFrom{solve}{LinearSystemMatrixPackage} for linear systems of +equations. + +\item[7. ] Click on \UpBitmap{} several times to return to the cross +reference page for \axiomType{Matrix}. +\enditems +\indent{0} + +\subsubsection{Dependents} + +The \spadglossSee{dependents}{dependent} of a constructor are those +\spadglossSee{domains}{domain} or \spadglossSee{packages}{package} +that mention that +constructor either as an argument or in its \spadglossSee{exports}{export}. + +If you click on {\bf Dependents} two entries may surprise you: +\axiomType{RectangularMatrix} and \axiomType{SquareMatrix}. +This happens because \axiomType{Matrix}, as it turns out, appears in +signatures of operations exported by these domains. + +\subsubsection{Lineage} + +The term \spadgloss{lineage} refers to the {\it search order} for +functions. +If you are an expert user or curious about how the Axiom system +works, try the following exercise. +Otherwise, you best skip this button and go on to {\bf Clients}. + +Clicking on {\bf Lineage} gives you a +list of domain constructors: +\axiomType{InnerIndexedTwoDimensionalArray}, +\aliascon{MatrixCategory\&}{MATCAT-}, +\aliascon{TwoDimensionalArrayCategory\&}{ARR2CAT-}, +\aliascon{HomogeneousAggregate\&}{HOAGG-}, +\aliascon{Aggregate\&}{AGG-}. +What are these constructors and how are they used? + +We explain by an example. +Suppose you create a matrix using the interpreter, then ask for its +\axiomFun{rank}. +Axiom must then find a function implementing the \axiomFun{rank} +operation for matrices. +The first place Axiom looks for \axiomFun{rank} is in the \axiomType{Matrix} +domain. + +If not there, the lineage of \axiomType{Matrix} tells Axiom where +else to look. +Associated with the matrix domain are five other lineage domains. +Their order is important. +Axiom first searches the first one, +\axiomType{InnerIndexedTwoDimensionalArray}. +If not there, it searches the second \aliascon{MatrixCategory\&}{MATCAT-}. +And so on. + +Where do these {\it lineage constructors} come from? +The source code for \axiomType{Matrix} contains this syntax for the +\spadgloss{function body} of +\axiomType{Matrix}:\footnote{\axiomType{InnerIndexedTwoDimensionalArray} +is a special domain implemented for matrix-like domains to provide +efficient implementations of \twodim{} arrays. +For example, domains of category \axiomType{TwoDimensionalArrayCategory} +can have any integer as their \spad{minIndex}. +Matrices and other members of this special ``inner'' array have their +\spad{minIndex} defined as \spad{1}.} +\begin{verbatim} +InnerIndexedTwoDimensionalArray(R,mnRow,mnCol,Row,Col) + add ... +\end{verbatim} +where the ``{\tt ...}'' denotes all the code that follows. +In English, this means: +``The functions for matrices are defined as those from +\axiomType{InnerIndexedTwoDimensionalArray} domain augmented by those +defined in `{\tt ...}','' where the latter take precedence. + +This explains \axiomType{InnerIndexedTwoDimensionalArray}. +The other names, those with names ending with an ampersand \axiomSyntax{\&} are +\spadglossSee{default packages}{default package} +for categories to which \axiomType{Matrix} belongs. +Default packages are ordered by the notion of ``closest ancestor.'' + +\subsubsection{Clients} + +A client of \axiomType{Matrix} is any constructor that uses +\axiomType{Matrix} in its implementation. +For example, \axiomType{Complex} is a client of \axiomType{Matrix}; it +exports several operations that take matrices as arguments or return +matrices as values.\footnote{A constructor is a client of +\axiomType{Matrix} if it handles any matrix. +For example, a constructor having internal (unexported) operations +dealing with matrices is also a client.} + +\subsubsection{Benefactors} + +A \spadgloss{benefactor} of \axiomType{Matrix} is any constructor that +\axiomType{Matrix} uses in its implementation. +This information, like that for clients, is gathered from run-time +structures.\footnote{The benefactors exclude constructors such as +\axiomType{PrimitiveArray} whose operations macro-expand and so vanish +from sight!} + +Cross reference pages for categories have some different buttons on +them. +Starting with the constructor page of \axiomType{Matrix}, click on +\axiomType{Ring} producing its constructor page. +Click on {\bf Cross Reference}, +producing the cross-reference page for \axiomType{Ring}. +Here are buttons {\bf Parents} and {\bf Ancestors} similar to the notion +for domains, except for categories the relationship between parent and +child is defined through \spadgloss{category extension}. + +\subsubsection{Children} + +Category hierarchies go both ways. +There are children as well as parents. +A child can have any number of parents, but always at least one. +Every category is therefore a descendant of exactly one category: +\axiomType{Object}. + +\subsubsection{Descendants} + +These are children, children of children, and so on. + +Category hierarchies are complicated by the fact that categories take +parameters. +Where a parameterized category fits into a hierarchy {\it may} depend on +values of its parameters. +In general, the set of categories in Axiom forms a {\it directed +acyclic graph}, that is, a graph with directed arcs and no cycles. + +\subsubsection{Domains} + +This produces a table of all domain constructors that can possibly be +rings (members of category \axiomType{Ring}). +Some domains are unconditional rings. +Others are rings for some parameters and not for others. +To find out which, select the {\bf conditions} button in the views +panel. +For example, \axiomType{DirectProduct(n, R)} is a ring if {\tt R} is a +ring. + + + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugBrowseViewsOfConstructorsTitle}{Views Of Constructors} +\newcommand{\ugBrowseViewsOfConstructorsNumber}{14.2.3.} + +@ +\section{Views Of Constructors} +\label{ugBrowseViewsOfConstructorsPage} +\index{pages!ugBrowseViewsOfConstructorsPage!ug14.ht} +\index{ug14.ht!pages!ugBrowseViewsOfConstructorsPage} +\index{ugBrowseViewsOfConstructorsPage!ug14.ht!pages} +<>= +\begin{page}{ugBrowseViewsOfConstructorsPage}{14.2.3. Views Of Constructors} +\beginscroll + +Below every constructor table page is a {\it Views} panel. +As an example, click on {\bf Cross Reference} from +the constructor page of \axiomType{Matrix}, +then on {\bf Benefactors} to produce a +short table of constructor names. + +The {\it Views} panel is at the bottom of the page. +Two items, {\it names} and {\it conditions,} are in italics. +Others are active buttons. +The active buttons are those that give you useful alternative views +on this table of constructors. +Once you select a view, you notice that the button turns +off (becomes italicized) so that you cannot reselect it. + +\subsubsection{names} + +This view gives you a table of names. +Selecting any of these names brings up the constructor page for that +constructor. + +\subsubsection{abbrs} + +This view gives you a table of abbreviations, in the same order as the +original constructor names. +Abbreviations are in capitals and are limited to 7 characters. +They can be used interchangeably with constructor names in input areas. + +\subsubsection{kinds} + +This view organizes constructor names into +the three kinds: categories, domains and packages. + +\subsubsection{files} + +This view gives a table of file names for the source +code of the constructors in alphabetic order after removing +duplicates. + +\subsubsection{parameters} + +This view presents constructors with the arguments. +This view of the benefactors of \axiomType{Matrix} shows that +\axiomType{Matrix} uses as many as five different \axiomType{List} domains +in its implementation. + +\subsubsection{filter} + +This button is used to refine the list of names or abbreviations. +Starting with the {\it names} view, enter {\tt m*} into the input area +and click on {\bf filter}. +You then get a shorter table with only the names beginning with {\tt m}. + +\subsubsection{documentation} + +This gives you documentation for each of the constructors. + +\subsubsection{conditions} + +This page organizes the constructors according to predicates. +The view is not available for your example page since all constructors +are unconditional. +For a table with conditions, return to the {\bf Cross Reference} page +for \axiomType{Matrix}, click on {\bf Ancestors}, then on {\bf +conditions} in the view panel. +This page shows you that \axiomType{CoercibleTo(OutputForm)} and +\axiomType{SetCategory} are ancestors of \axiomType{Matrix(R)} only if {\tt R} +belongs to category \axiomType{SetCategory}. + +%********************************************************************* +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugBrowseGivingParametersTitle}{Giving Parameters to Constructors} +\newcommand{\ugBrowseGivingParametersNumber}{14.2.4.} + +@ +\section{Giving Parameters to Constructors} +\label{ugBrowseGivingParametersPage} +\index{pages!ugBrowseGivingParametersPage!ug14.ht} +\index{ug14.ht!pages!ugBrowseGivingParametersPage} +\index{ugBrowseGivingParametersPage!ug14.ht!pages} +<>= +\begin{page}{ugBrowseGivingParametersPage} +{14.2.4. Giving Parameters to Constructors} +\beginscroll +%********************************************************************* + +Notice the input area at the bottom of the constructor page. +If you leave this blank, then the information you get is for the +domain constructor \axiomType{Matrix(R)}, that is, \axiomType{Matrix} for an +arbitrary underlying domain {\tt R}. + +In general, however, the exports and other information {\it do} usually +depend on the actual value of {\tt R}. +For example, \axiomType{Matrix} exports the \axiomFun{inverse} operation +only if the domain {\tt R} is a \axiomType{Field}. +To see this, try this from the main constructor page: + +\indent{4} +\beginitems +\item[1. ] Enter {\tt Integer} into the input area at the bottom of the page. + +\item[2. ] Click on {\bf Operations}, producing a table of operations. +Note the number of operation names that appear at the top of the +page. + +\item[3. ] Click on \UpBitmap{} to return to the constructor page. + +\item[4. ] Use the +\texht{\fbox{\bf Delete}}{{\bf Delete}} +or +\texht{\fbox{\bf Backspace}}{{\bf Backspace}} +keys to erase {\tt Integer} from the input area. + +\item[5. ] Click on {\bf Operations} to produce a new table of operations. +Look at the number of operations you get. +This number is greater than what you had before. +Find, for example, the operation \axiomFun{inverse}. + +\item[6. ] Click on {\bf inverse} to produce a page describing the operation +\axiomFun{inverse}. +At the bottom of the description, you notice that the {\bf +Conditions} line says ``{\tt R} has \axiomType{Field}.'' +This operation is {\it not} exported by \axiomType{Matrix(Integer)} since +\axiomType{Integer} is not a \spadgloss{field}. + +Try putting the name of a domain such as \axiomType{Fraction Integer} +(which is a field) into the input area, then clicking on {\bf Operations}. +As you see, the operation \axiomFun{inverse} is exported. +\enditems +\indent{0} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugBrowseMiscellaneousFeaturesTitle}{Miscellaneous Features of Browse} +\newcommand{\ugBrowseMiscellaneousFeaturesNumber}{14.3.} + +@ +\section{Miscellaneous Features of Browse} +\label{ugBrowseMiscellaneousFeaturesPage} +\index{pages!ugBrowseMiscellaneousFeaturesPage!ug14.ht} +\index{ug14.ht!pages!ugBrowseMiscellaneousFeaturesPage} +\index{ugBrowseMiscellaneousFeaturesPage!ug14.ht!pages} +<>= +\begin{page}{ugBrowseMiscellaneousFeaturesPage} +{14.3. Miscellaneous Features of Browse} +\beginscroll +\labelSpace{4pc} +\beginmenu + \menudownlink{{14.3.1. The Description Page for Operations}}{ugBrowseDescriptionPagePage} + \menudownlink{{14.3.2. Views of Operations}}{ugBrowseViewsOfOperationsPage} + \menudownlink{{14.3.3. Capitalization Convention}}{ugBrowseCapitalizationConventionPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugBrowseDescriptionPageTitle}{The Description Page for Operations} +\newcommand{\ugBrowseDescriptionPageNumber}{14.3.1.} + +@ +\section{The Description Page for Operations} +\label{ugBrowseDescriptionPagePage} +\index{pages!ugBrowseDescriptionPagePage!ug14.ht} +\index{ug14.ht!pages!ugBrowseDescriptionPagePage} +\index{ugBrowseDescriptionPagePage!ug14.ht!pages} +<>= +\begin{page}{ugBrowseDescriptionPagePage} +{14.3.1. The Description Page for Operations} +\beginscroll +From the constructor page of \axiomType{Matrix}, +click on {\bf Operations} to bring up the table of operations +for \axiomType{Matrix}. + +Find the operation {\bf inverse} in the table and click on it. +This takes you to a page showing the documentation for this operation. + + +Here is the significance of the headings you see. + +\subsubsection{Arguments} + +This lists each of the arguments of the operation in turn, paraphrasing +the \spadgloss{signature} of the operation. +As for signatures, a \axiomSyntax{\$} is used to designate {\em this domain}, +that is, \axiomType{Matrix(R)}. + +\subsubsection{Returns} + +This describes the return value for the operation, analogous to the {\bf +Arguments} part. + +\subsubsection{Origin} + +This tells you which domain or category explicitly exports the +operation. +In this example, the domain itself is the {\it Origin}. + + +\subsubsection{Conditions} + +This tells you that the operation is exported by \axiomType{Matrix(R)} only if +``{\tt R} has \axiomType{Field},'' that is, ``{\tt R} is a member of +category \axiomType{Field}.'' +When no {\bf Conditions} part is given, the operation is exported for +all values of {\tt R}. + +\subsubsection{Description} + +Here are the \axiomSyntax{++} comments +that appear in the source code of its {\it Origin}, here \axiomType{Matrix}. +You find these comments in the source code for \axiomType{Matrix}. + + +Click on \UpBitmap{} to return to the table of operations. +Click on {\bf map}. +Here you find three different operations named \axiomFun{map}. +This should not surprise you. +Operations are identified by name and \spadgloss{signature}. +There are three operations named \axiomFun{map}, each with +different signatures. +What you see is the {\it descriptions} view of the operations. +If you like, select the button in the heading of one of these +descriptions to get {\it only} that operation. + +\subsubsection{Where} + +This part qualifies domain parameters mentioned in the arguments to the +operation. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugBrowseViewsOfOperationsTitle}{Views of Operations} +\newcommand{\ugBrowseViewsOfOperationsNumber}{14.3.2.} + +@ +\section{Views of Operations} +\label{ugBrowseViewsOfOperationsPage} +\index{pages!ugBrowseViewsOfOperationsPage!ug14.ht} +\index{ug14.ht!pages!ugBrowseViewsOfOperationsPage} +\index{ugBrowseViewsOfOperationsPage!ug14.ht!pages} +<>= +\begin{page}{ugBrowseViewsOfOperationsPage}{14.3.2. Views of Operations} +\beginscroll + +We suggest that you go to the constructor page for \axiomType{Matrix} +and click on {\bf Operations} to bring up a table of operations +with a {\it Views} panel at the bottom. + +\subsubsection{names} + +This view lists the names of the operations. +Unlike constructors, however, there may be several operations with the +same name. +The heading for the page tells you the number of unique names and the +number of distinct operations when these numbers are different. + +\subsubsection{filter} + +As for constructors, you can use this button to cut down the list of +operations you are looking at. +Enter, for example, {\tt m*} into the input area to the right of {\bf +filter} then click on {\bf filter}. +As usual, any logical expression is permitted. +For example, use +\begin{verbatim} +*! or *? +\end{verbatim} +to get a list of destructive operations and predicates. + +\subsubsection{documentation} + +This gives you the most information: +a detailed description of all the operations in the form you have seen +before. +Every other button summarizes these operations in some form. + +\subsubsection{signatures} + +This views the operations by showing their signatures. + +\subsubsection{parameters} + +This views the operations by their distinct syntactic forms with +parameters. + +\subsubsection{origins} + +This organizes the operations according to the constructor that +explicitly exports them. + +\subsubsection{conditions} + +This view organizes the operations into conditional and unconditional +operations. + +\subsubsection{usage} + +This button is only available if your user-level is set to {\it +development}. +The {\bf usage} button produces a table of constructors that reference this +operation.\footnote{Axiom requires an especially long time to +produce this table, so anticipate this when requesting this +information.} + +\subsubsection{implementation} + +This button is only available if your user-level is set to {\it +development}. +If you enter values for all domain parameters on the constructor page, +then the {\bf implementation} button appears in place of the {\bf +conditions} button. +This button tells you what domains or packages actually implement the +various operations.\footnote{This button often takes a long time; expect +a delay while you wait for an answer.} + +With your user-level set to {\it development}, we suggest you try this +exercise. +Return to the main constructor page for \axiomType{Matrix}, then enter +{\tt Integer} into the input area at the bottom as the value of {\tt R}. +Then click on {\bf Operations} to produce a table of operations. +Note that the {\bf conditions} part of the {\it Views} table is +replaced by {\bf implementation}. +Click on {\bf implementation}. +After some delay, you get a page describing what implements each of +the matrix operations, organized by the various domains and packages. + + +\subsubsection{generalize} + +This button only appears for an operation page of a constructor +involving a unique operation name. + +From an operations page for \axiomType{Matrix}, select any +operation name, say {\bf rank}. +In the views panel, the {\bf filter} button is replaced by +{\bf generalize}. +Click on it! +%% Replaced {\bf threshold} with 10 below. MGR 1995oct31 +What you get is a description of all Axiom operations +named \axiomFun{rank}.\footnote{If there were more than 10 +operations of the name, you get instead a page +with a {\it Views} panel at the bottom and the message to {\bf +Select a view below}. +To get the descriptions of all these operations as mentioned +above, select the {\bf description} button.} + +\subsubsection{all domains} + +This button only appears on an operation page resulting from a +search from the front page of \Browse{} or from selecting +{\bf generalize} from an operation page for a constructor. + +Note that the {\bf filter} button in the {\it Views} panel is +replaced by {\bf all domains}. +Click on it to produce a table of {\it all} domains or packages that +export a \axiomFun{rank} operation. + + +We note that this table specifically refers to all the \axiomFun{rank} +operations shown in the preceding page. +Return to the descriptions of all the \axiomFun{rank} operations and +select one of them by clicking on the button in its heading. +Select {\bf all domains}. +As you see, you have a smaller table of constructors. +When there is only one constructor, you get the +constructor page for that constructor. +\texht{\newpage}{} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugBrowseCapitalizationConventionTitle}{Capitalization Convention} +\newcommand{\ugBrowseCapitalizationConventionNumber}{14.3.3.} + +@ +\section{Capitalization Convention} +\label{ugBrowseCapitalizationConventionPage} +\index{pages!ugBrowseCapitalizationConventionPage!ug14.ht} +\index{ug14.ht!pages!ugBrowseCapitalizationConventionPage} +\index{ugBrowseCapitalizationConventionPage!ug14.ht!pages} +<>= +\begin{page}{ugBrowseCapitalizationConventionPage} +{14.3.3. Capitalization Convention} +\beginscroll + +When entering search keys for constructors, you can use capital +letters to search for abbreviations. +For example, enter {\tt UTS} into the input area and click on {\bf +Constructors}. +Up comes a page describing \axiomType{UnivariateTaylorSeries} +whose abbreviation is \axiomType{UTS}. + +Constructor abbreviations always have three or more capital +letters. +For short constructor names (six letters or less), abbreviations +are not generally helpful as their abbreviation is typically the +constructor name in capitals. +For example, the abbreviation for \axiomType{Matrix} is +\axiomType{MATRIX}. + +Abbreviations can also contain numbers. +For example, \axiomType{POLY2} is the abbreviation for constructor +\axiomType{PolynomialFunctions2}. +For default packages, the abbreviation is the same as the +abbreviation for the corresponding category with the ``\&'' +replaced by ``-''. +For example, for the category default package +\aliascon{MatrixCategory\&}{MATCAT-} the abbreviation is +\axiomType{MATCAT-} since the corresponding category +\axiomType{MatrixCategory} has abbreviation \axiomType{MATCAT}. + +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 15 (ug15.ht)} +<>= +\newcommand{\ugWhatsNewTitle}{What's New in Axiom Version 2.0} +\newcommand{\ugWhatsNewNumber}{15.} + +@ +\section{What's New in Axiom Version 2.0} +\label{ugWhatsNewPage} +\index{pages!ugWhatsNewPage!ug15.ht} +\index{ug15.ht!pages!ugWhatsNewPage} +\index{ugWhatsNewPage!ug15.ht!pages} +<>= +\begin{page}{ugWhatsNewPage}{15. What's New in Axiom Version 2.0} +\beginscroll + +Many things have changed in this new version of Axiom and +we describe many of the more important topics here. + +%------------------------------------------------------------------------ +\beginmenu + \menudownlink{{15.1. Important Things to Read First}}{ugWhatsNewImportantPage} + \menudownlink{{15.2. The New Axiom Library Compiler}}{ugWhatsNewAsharpPage} + \menudownlink{{15.3. The NAG Library Link}}{nagLinkIntroPage} + \menudownlink{{15.4. Interactive Front-end and Language}}{ugWhatsNewLanguagePage} + \menudownlink{{15.5. Library}}{ugWhatsNewLibraryPage} + \menudownlink{{15.6. \HyperName}}{ugWhatsNewHyperDocPage} + \menudownlink{{15.7. Documentation}}{ugWhatsNewDocumentationPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugWhatsNewImportantTitle}{Important Things to Read First} +\newcommand{\ugWhatsNewImportantNumber}{15.1.} + +@ +\section{Important Things to Read First} +\label{ugWhatsNewImportantPage} +\index{pages!ugWhatsNewImportantPage!ug15.ht} +\index{ug15.ht!pages!ugWhatsNewImportantPage} +\index{ugWhatsNewImportantPage!ug15.ht!pages} +<>= +\begin{page}{ugWhatsNewImportantPage}{15.1. Important Things to Read First} +\beginscroll +%------------------------------------------------------------------------ + +If you have any private {\tt .spad} files (that is, library files +which were not shipped with Axiom) you will need to +recompile them. For example, if you wrote the file {\tt +regress.spad} then you should issue {\tt )compile regress.spad} +before trying to use it. + +The internal representation of \axiomType{Union} has changed. +This means that \texht{\linebreak}{} Axiom data saved +with Release 1.x may not +be readable by this Release. If you cannot recreate the saved data +by recomputing in Release 2.0, please contact NAG for assistance. + +%------------------------------------------------------------------------ +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugWhatsNewAsharpTitle}{The New Axiom Library Compiler} +\newcommand{\ugWhatsNewAsharpNumber}{15.2.} + +@ +\section{The New Axiom Library Compiler} +\label{ugWhatsNewAsharpPage} +\index{pages!ugWhatsNewAsharpPage!ug15.ht} +\index{ug15.ht!pages!ugWhatsNewAsharpPage} +\index{ugWhatsNewAsharpPage!ug15.ht!pages} +<>= +\begin{page}{ugWhatsNewAsharpPage}{15.2. The New Axiom Library Compiler} +\beginscroll +%------------------------------------------------------------------------ + +A new compiler is now available for Axiom. +The programming language is referred to as the Axiom Extension Language +(or \axiomxl{} for short), and +improves upon the old Axiom language in many ways. +The \spadcmd{)compile} command has been upgraded to be able to +invoke the new or old compilers. +The language and the compiler are described in the hard-copy +documentation which came with your Axiom system. + +To ease the chore of upgrading your {\it .spad} files (old +compiler) to {\it .as} files (new compiler), the +\spadcmd{)compile} command has been given a {\tt )translate} +option. This invokes a special version of the old compiler which +parses and analyzes your old code and produces augmented code +using the new syntax. +Please be aware that the translation is not necessarily one +hundred percent complete or correct. +You should attempt to compile the output with the \axiomxl{} compiler +and make any necessary corrections. + + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\nagLinkIntroTitle}{The NAG Library Link} +\newcommand{\nagLinkIntroNumber}{15.3.} + +@ +\section{The NAG Library Link} +\label{nagLinkIntroPage} +\begin{itemize} +\item htxl1 \ref{htxl1} on +page~\pageref{htxl1} +\item nagDocumentationPage \ref{nagDocumentationPage} on +page~\pageref{nagDocumentationPage} +\item nagLinkUsagePage \ref{nagLinkUsagePage} on +page~\pageref{nagLinkUsagePage} +\item aspSectionPage \ref{aspSectionPage} on +page~\pageref{aspSectionPage} +\item generalFortranPage \ref{generalFortranPage} on +page~\pageref{generalFortranPage} +\item nagTechnicalPage \ref{nagTechnicalPage} on +page~\pageref{nagTechnicalPage} +\end{itemize} +\index{pages!nagLinkIntroPage!ug15.ht} +\index{ug15.ht!pages!nagLinkIntroPage} +\index{nagLinkIntroPage!ug15.ht!pages} +<>= +\begin{page}{nagLinkIntroPage}{15.3. The NAG Library Link} +\beginscroll + +The \naglib{} link allows you to call NAG Fortran +routines from within Axiom, passing Axiom objects as parameters +and getting them back as results. + +The \naglib{} and, consequently, the link are divided into {\em chapters}, +which cover different areas of numerical analysis. The statistical +and sorting {\em chapters} of the Library, however, are not included in the +link and various support and utility routines (mainly the F06 and X +{\em chapters}) have been omitted. + +Each {\em chapter} has a short (at most three-letter) name; +for example, the {\em chapter} devoted to the +solution of ordinary differential equations is called D02. When +using the link via the \downlink{\HyperName{} interface}{htxl1}, +you will be presented with a complete menu of these {\em chapters}. The +names of individual routines within each {\em chapter} are formed by +adding three letters to the {\em chapter} name, so for example the routine +for solving ODEs by Adams method is called +\axiomFunFrom{d02cjf}{NagOrdinaryDifferentialEquationsPackage}. + +\beginmenu + \menudownlink{{15.3.1. Interpreting NAG Documentation}} +{nagDocumentationPage} + \menudownlink{{15.3.2. Using the Link}}{nagLinkUsagePage} + \menudownlink{{15.3.3. Providing values for Argument Subprograms}} +{aspSectionPage} + \menudownlink{{15.3.4. General Fortran-generation utilities in Axiom}} +{generalFortranPage} + \menudownlink{{15.3.5. Some technical information}}{nagTechnicalPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\nagDocumentationTitle}{Interpreting NAG Documentation} +\newcommand{\nagDocumentationNumber}{15.3.1.} + +@ +\section{Interpreting NAG Documentation} +\label{nagDocumentationPage} +\begin{itemize} +\item manpageXXintro \ref{manpageXXintro} on +page~\pageref{manpageXXintro} +\item manpageXXonline \ref{manpageXXonline} on +page~\pageref{manpageXXonline} +\item FoundationLibraryDocPage \ref{FoundationLibraryDocPage} on +page~\pageref{FoundationLibraryDocPage} +\item aspSectionPage \ref{aspSectionPage} on +page~\pageref{aspSectionPage} +\end{itemize} +\index{pages!nagDocumentationPage!ug15.ht} +\index{ug15.ht!pages!nagDocumentationPage} +\index{nagDocumentationPage!ug15.ht!pages} +<>= +\begin{page}{nagDocumentationPage}{15.3.1. Interpreting NAG Documentation} +\beginscroll + +Information about using the \naglib{} in general, and about using +individual routines in particular, can be accessed via \HyperName{}. +This documentation refers to the Fortran routines directly; the +purpose of this subsection is to explain how this corresponds to the +Axiom routines. + +For general information about the \naglib{} users should consult +\downlink{Essential Introduction to the NAG Foundation Library} +{manpageXXintro}. +The documentation is in ASCII format, and a description of the conventions +used to represent mathematical symbols is given in +\downlink{Introduction to NAG On-Line Documentation}{manpageXXonline}. +Advice about choosing a routine from a particular {\em chapter} can +be found in the \downlink{Chapter Documents}{FoundationLibraryDocPage}. + +\subsubsection{Correspondence Between Fortran and Axiom types} + +The NAG documentation refers to the Fortran types of objects; in +general, the correspondence to Axiom types is as follows. +\indent{4} +\beginitems +\item[-] Fortran INTEGER corresponds to Axiom \axiomType{Integer}. +\item[-] Fortran DOUBLE PRECISION corresponds to Axiom \axiomType{DoubleFloat}. +\item[-] Fortran COMPLEX corresponds to Axiom \axiomType{Complex DoubleFloat}. +\item[-] Fortran LOGICAL corresponds to Axiom \axiomType{Boolean}. +\item[-] Fortran CHARACTER*(*) corresponds to Axiom \axiomType{String}. +\enditems +\indent{0} +(Exceptionally, for NAG EXTERNAL parameters -- ASPs in link parlance +-- REAL and COMPLEX correspond to \axiomType{MachineFloat} and +\axiomType{MachineComplex}, +respectively; see \downlink{``\aspSectionTitle''}{aspSectionPage} +in Section \aspSectionNumber\ignore{aspSection}.) + +The correspondence for aggregates is as follows. +\indent{4} +\beginitems +\item[-] A one-dimensional Fortran array corresponds to an Axiom +\texht{\linebreak}{} + \axiomType{Matrix} with one column. +\item[-] A two-dimensional Fortran ARRAY corresponds to an Axiom +\texht{\linebreak}{} + \axiomType{Matrix}. +\item[-] A three-dimensional Fortran ARRAY corresponds to an Axiom +\texht{\linebreak}{} + \axiomType{ThreeDimensionalMatrix}. +\enditems +\indent{0} +Higher-dimensional arrays are not currently needed for the \naglib{}. + +Arguments which are Fortran FUNCTIONs or SUBROUTINEs correspond to +special ASP domains in Axiom. See +\downlink{``\aspSectionTitle''}{aspSectionPage} in Section +\aspSectionNumber\ignore{aspSection}. + +\subsubsection{Classification of NAG parameters} + +NAG parameters are classified as belonging to one (or more) of the +following categories: {\tt Input}, {\tt Output}, {\tt Workspace} or +{\tt External} procedure. Within {\tt External} procedures a similar +classification is used, and parameters may also be {\tt Dummies}, or +{\tt User Workspace} (data structures not used by the NAG routine but +provided for the convenience of the user). + +When calling a NAG routine via the link the user only provides values +for {\tt Input} and {\tt External} parameters. + +The order of the parameters is, in general, different from the order +specified in the \naglib{} documentation. The Browser description +for each routine helps in determining the correspondence. As a rule of +thumb, {\tt Input} parameters come first followed by {\tt Input/Output} +parameters. The {\tt External} parameters are always found at the end. + + +\subsubsection{IFAIL} + +NAG routines often return diagnostic information through a parameter called +\axiom{ifail}. With a few exceptions, the principle is that on input +\axiom{ifail} takes +one of the values $-1,0,1$. This determines how the routine behaves when +it encounters an error: +\indent{4} +\beginitems +\item[-] a value of 1 causes the NAG routine to return without printing +an error message; +\item[-] a value of 0 causes the NAG routine to print an error message +and abort; +\item[-] a value of -1 causes the NAG routine to return and print an +error message. +\enditems +\indent{0} + +The user is STRONGLY ADVISED to set \axiom{ifail} to \texht{$-1$}{-1} +when using the link. If \axiom{ifail} has been set to \texht{$1$}{1} +or \texht{$-1$}{-1} on input, then its value on output will determine +the possible cause of any error. A value of \texht{$0$}{0} indicates +successful completion, otherwise it provides an index into a table of +diagnostics provided as part of the routine documentation (accessible +via \Browse{}). + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\nagLinkUsageTitle}{Using the Link} +\newcommand{\nagLinkUsageNumber}{15.3.2.} + +@ +\section{Using the Link} +\label{nagLinkUsagePage} +\begin{itemize} +\item htxl1 \ref{htxl1} on +page~\pageref{htxl1} +\end{itemize} +\index{pages!nagLinkUsagePage!ug15.ht} +\index{ug15.ht!pages!nagLinkUsagePage} +\index{nagLinkUsagePage!ug15.ht!pages} +<>= +\begin{page}{nagLinkUsagePage}{15.3.2. Using the Link} +\beginscroll + +The easiest way to use the link is via the +\downlink{\HyperName{} interface}{htxl1}. +You will be presented with a set of fill-in forms where +you can specify the parameters for each call. Initially, the forms +contain example values, demonstrating the use of each routine (these, +in fact, correspond to the standard NAG example program for the +routine in question). For some parameters, these values can provide +reasonable defaults; others, of course, represent data. When you +change a parameter which controls the size of an array, the data in +that array are reset to a ``neutral'' value -- usually zero. + +When you are satisfied with the values entered, clicking on the +``Continue'' button will display the Axiom command needed to +run the chosen NAG routine with these values. Clicking on the +``Do It'' button will then cause Axiom to execute this command +and return the result in the parent Axiom session, as described +below. Note that, for some routines, multiple HyperDoc ``pages'' are +required, due to the structure of the data. For these, returning to +an earlier page causes HyperDoc to reset the later pages (this is a +general feature of HyperDoc); in such a case, the simplest way to +repeat a call, varying a parameter on an earlier page, is probably to +modify the call displayed in the parent session. + +An alternative approach is to call NAG routines directly in your +normal Axiom session (that is, using the Axiom +interpreter). Such calls return an +object of type \axiomType{Result}. As not +all parameters in the underlying NAG routine are required in the +Axiom call (and the parameter ordering may be different), before +calling a NAG routine you should consult the description of the +Axiom operation in the Browser. (The quickest route to this +is to type the routine name, in lower case, into the Browser's +input area, then click on {\tt Operations}.) The parameter names +used coincide with NAG's, although they will appear here in lower +case. Of course, it is also possible to become familiar with the +Axiom form of a routine by first using it through the +\downlink{\HyperName{} interface}{htxl1}. + +\xtc{ +As an example of this mode of working, we can find a zero +of a function, lying between 3 and 4, as follows: +}{ +\spadpaste{answer:=c05adf(3.0,4.0,1.0e-5,0.0,-1,sin(X)::ASP1(F))\bound{answer} } +} +\xtc{ +By default, \axiomType{Result} only displays the type of returned values, +since the amount of information returned can be quite large. Individual +components can be examined as follows: +}{ +\spadpaste{answer . x\free{answer}} +} +\xtc{ +}{ +\spadpaste{answer . ifail\free{answer}} +} +\xtc{ +In order to avoid conflict with names defined in the workspace, you can also +get the values by using the \axiomType{String} type (the interpreter automatically +coerces them to \axiomType{Symbol}) +}{ +\spadpaste{answer "x"\free{answer}} +} + + +It is possible to have Axiom display the values of scalar or array +results automatically. For more details, see the commands +\axiomFunFrom{showScalarValues}{Result} +and \axiomFunFrom{showArrayValues}{Result}. + +\xtc{ +There is also a {\bf .input} file for each NAG routine, containing +Axiom interpreter commands to set up and run the standard NAG +example for that routine. +}{ +\spadpaste{)read c05adf.input} +} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\aspSectionTitle}{Providing values for Argument Subprograms} +\newcommand{\aspSectionNumber}{15.3.3.} + +@ +\section{Providing values for Argument Subprograms} +\label{aspSectionPage} +\begin{itemize} +\item generalFortranPage \ref{generalFortranPage} on +page~\pageref{generalFortranPage} +\end{itemize} +\index{pages!aspSectionPage!ug15.ht} +\index{ug15.ht!pages!aspSectionPage} +\index{aspSectionPage!ug15.ht!pages} +<>= +\begin{page}{aspSectionPage}{15.3.3. Providing values for Argument Subprograms} +\beginscroll + +There are a number of ways in which users can provide values for argument +subprograms (ASPs). At the top level the user will see that NAG routines +require +an object from the \axiomType{Union} of a \axiomType{Filename} and an ASP. +\xtc{ +For example \axiomFun{c05adf} requires an object of type \texht{\linebreak}{} +\axiomType{Union}(fn: \axiomType{FileName},fp: \axiomType{Asp1 F}) +}{ +\spadpaste{)display operation c05adf} +} + +The user thus has a choice of providing the name of a file containing +Fortran source code, or of somehow generating the ASP within Axiom. +If a filename is specified, it is searched for in the {\it local} +machine, i.e., the machine that Axiom is running on. + +\subsubsection{Providing ASPs via \axiomType{FortranExpression}} + +The \axiomType{FortranExpression} domain is used to represent expressions +which can be translated into Fortran under certain circumstances. It is +very similar to \axiomType{Expression} except that only operators which exist +in Fortran can be used, and only certain variables can occur. +For +example the instantiation \axiomType{FortranExpression([X],[M],MachineFloat)} +is the domain of expressions containing the scalar \axiom{X} and the array +\axiom{M}. +\xtc{ +This allows us to create expressions like: +}{ +\spadpaste{f : FortranExpression([X],[M],MachineFloat) := sin(X)+M[3,1]} +} +\xtc{ +but not +}{ +\spadpaste{f : FortranExpression([X],[M],MachineFloat) := sin(M)+Y} +} + +Those ASPs which represent expressions usually export a \axiomFun{coerce} from +an appropriate instantiation of \axiomType{FortranExpression} (or perhaps +\axiomType{Vector FortranExpression} etc.). For convenience there are also +retractions from appropriate instantiations of \axiomType{Expression}, +\axiomType{Polynomial} and \axiomType{Fraction Polynomial}. + +\subsubsection{Providing ASPs via \axiomType{FortranCode}} + +\texht{\exptypeindex{FortranCode}}{} \axiomType{FortranCode} allows us +to build arbitrarily complex ASPs via a kind of pseudo-code. It is +described fully in +\downlink{``\generalFortranTitle''}{generalFortranPage} in Section +\generalFortranNumber\ignore{generalFortran}. + +Every ASP exports two \axiomFun{coerce} functions: one from +\axiomType{FortranCode} and one from \axiomType{List FortranCode}. +There is also a \axiomFun{coerce} from \texht{\linebreak}{} +\axiomType{Record( localSymbols: SymbolTable, code: List FortranCode)} +which is used for passing extra symbol information about the ASP. + +\xtc{ +So for example, to integrate the function abs(x) we could use the built-in +\axiomFun{abs} function. But suppose we want to get back to basics and define +it directly, then we could do the following: +}{ +\spadpaste{d01ajf(-1.0, 1.0, 0.0, 1.0e-5, 800, 200, -1, cond(LT(X,0), assign(F,-X), assign(F,X))) result } +} +The \axiomFunFrom{cond}{FortranCode} operation creates a conditional clause +and the \axiomFunFrom{assign}{FortranCode} an assignment statement. + +\subsubsection{Providing ASPs via \axiomType{FileName}} + +Suppose we have created the file ``asp.f'' as follows: +\begin{verbatim} + DOUBLE PRECISION FUNCTION F(X) + DOUBLE PRECISION X + F=4.0D0/(X*X+1.0D0) + RETURN + END +\end{verbatim} +and wish to pass it to the NAG +routine \axiomFun{d01ajf} which performs one-dimensional quadrature. +We can do this as follows: +\begin{verbatim} +d01ajf(0.0 ,1.0, 0.0, 1.0e-5, 800, 200, -1, "asp.f") +\end{verbatim} + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\generalFortranTitle}{General Fortran-generation utilities in Axiom} +\newcommand{\generalFortranNumber}{15.3.4.} + +@ +\section{General Fortran-generation utilities in Axiom} +\label{generalFortranPage} +\index{pages!generalFortranPage!ug15.ht} +\index{ug15.ht!pages!generalFortranPage} +\index{generalFortranPage!ug15.ht!pages} +<>= +\begin{page}{generalFortranPage} +{15.3.4. General Fortran-generation utilities in Axiom} +\beginscroll + +This section describes more advanced facilities which are available to users +who wish to generate Fortran code from within Axiom. There are +facilities to manipulate templates, store type information, and generate +code fragments or complete programs. + +\subsubsection{Template Manipulation} + +A template is a skeletal program which is ``fleshed out'' with data when +it is processed. It is a sequence of {\em active} and {\em passive} parts: +active parts are sequences of Axiom commands which are processed as if they +had been typed into the interpreter; passive parts are simply echoed +verbatim on the Fortran output stream. + +Suppose, for example, that we have the following template, stored in +the file ``test.tem'': +\begin{verbatim} +-- A simple template +beginVerbatim + DOUBLE PRECISION FUNCTION F(X) + DOUBLE PRECISION X +endVerbatim +outputAsFortran("F",f) +beginVerbatim + RETURN + END +endVerbatim +\end{verbatim} +The passive parts lie between the two +tokens {\tt beginVerbatim} and \texht{\linebreak}{} {\tt endVerbatim}. There +are two active statements: one which is simply an Axiom ( +\texht{\verb+--+}{\-\-}) +comment, and one which produces an assignment to the current value +of {\tt f}. We could use it as follows: +\begin{verbatim} +(4) ->f := 4.0/(1+X**2) + + 4 + (4) ------ + 2 + X + 1 + +(5) ->processTemplate "test.tem" + DOUBLE PRECISION FUNCTION F(X) + DOUBLE PRECISION X + F=4.0D0/(X*X+1.0D0) + RETURN + END + + (5) "CONSOLE" +\end{verbatim} + +(A more reliable method of specifying the filename will be introduced +below.) Note that the Fortran assignment {\tt F=4.0D0/(X*X+1.0D0)} +automatically converted 4.0 and 1 into DOUBLE PRECISION numbers; in +general, the Axiom Fortran generation facility will convert +anything which should be a floating point object into either +a Fortran REAL or DOUBLE PRECISION object. +\xtc{ +Which alternative is used is determined by the command +}{ +\spadpaste{)set fortran precision} +} + +It is sometimes useful to end a template before the file itself ends (e.g. to +allow the template to be tested incrementally or so that a piece of text +describing how the template works can be included). It is of course possible +to ``comment-out'' the remainder of the file. Alternatively, the single token +{\tt endInput} as part of an active portion of the template will cause +processing to be ended prematurely at that point. + +The \axiomFun{processTemplate} command comes in two flavours. In the first case, +illustrated above, it takes one argument of domain \axiomType{FileName}, +the name of the template to be processed, and writes its output on the +current Fortran output stream. In general, a filename can be generated +from {\em directory}, {\em name} and {\em extension} components, using +the operation \axiomFun{filename}, as in +\begin{verbatim} +processTemplate filename("","test","tem") +\end{verbatim} +There is an alternative version of \axiomFun{processTemplate}, which +takes two arguments (both of domain \axiomType{FileName}). In this case the +first argument is the name of the template to be processed, and the +second is the file in which to write the results. Both versions return +the location of the generated Fortran code as their result +({\tt "CONSOLE"} in the above example). + +It is sometimes useful to be able to mix active and passive parts of a +line or statement. For example you might want to generate a Fortran +Comment describing your data set. For this kind of application we +provide three functions as follows: +\texht +{ +\begin{tabular}{p{1.8in}p{2.6in}} +\axiomFun{fortranLiteral} & writes a string on the Fortran output stream \\ + & \\ +\axiomFun{fortranCarriageReturn} & writes a carriage return on the Fortran output stream \\ +& \\ +\axiomFun{fortranLiteralLine} & writes a string followed by a return +on the Fortran output stream \\ +\end{tabular} +} +{ +\newline +\axiomFun{fortranLiteral}\tab{25}writes a string on the Fortran output stream\newline +\axiomFun{fortranCarriageReturn}\tab{25}writes a carriage return on the Fortran output stream\newline +\axiomFun{fortranLiteralLine}\tab{25}writes a string followed by a return on the Fortran output stream\newline +} +\xtc{ +So we could create our comment as follows: +}{ +\spadpaste{m := matrix [[1,2,3],[4,5,6]]\bound{m}} +} +\xtc{ +}{ +\spadpaste{fortranLiteralLine concat ["C\ \ \ \ \ \ The\ Matrix\ has\ ", nrows(m)::String, "\ rows\ and\ ", ncols(m)::String, "\ columns"]\free{m}} +} +\xtc{ +or, alternatively: +}{ +\spadpaste{fortranLiteral "C\ \ \ \ \ \ The\ Matrix\ has\ "} +} +\xtc{ +}{ +\spadpaste{fortranLiteral(nrows(m)::String)} +} +\xtc{ +}{ +\spadpaste{fortranLiteral "\ rows\ and\ "} +} +\xtc{ +}{ +\spadpaste{fortranLiteral(ncols(m)::String)\free{m}} +} +\xtc{ +}{ +\spadpaste{fortranLiteral "\ columns"} +} +\xtc{ +}{ +\spadpaste{fortranCarriageReturn()} +} + +We should stress that these functions, together with the \axiomFun{outputAsFortran} +function are the {\em only} sure ways +of getting output to appear on the Fortran output stream. Attempts to use +Axiom commands such as \axiomFun{output} or \axiomFunX{writeline} may appear to give +the required result when displayed on the console, but will give the wrong +result when Fortran and algebraic output are sent to differing locations. On +the other hand, these functions can be used to send helpful messages to the +user, without interfering with the generated Fortran. + +\subsubsection{Manipulating the Fortran Output Stream} +\texht{\exptypeindex{FortranOutputStackPackage}}{} + +Sometimes it is useful to manipulate the Fortran output stream in a program, +possibly without being aware of its current value. The main use of this is +for gathering type declarations (see ``Fortran Types'' below) but it can be useful +in other contexts as well. Thus we provide a set of commands to manipulate +a stack of (open) output streams. Only one stream can be written to at +any given time. The stack is never empty---its initial value is the +console or the current value of the Fortran output stream, and can be +determined using +\xtc{ +}{ +\spadpaste{topFortranOutputStack()} +} +(see below). +The commands available to manipulate the stack are: +\texht{ +\begin{tabular}{ll} +\axiomFun{clearFortranOutputStack} & resets the stack to the console \\ + & \\ +\axiomFun{pushFortranOutputStack} & pushes a \axiomType{FileName} onto the stack \\ + & \\ +\axiomFun{popFortranOutputStack} & pops the stack \\ + & \\ +\axiomFun{showFortranOutputStack} & returns the current stack \\ + & \\ +\axiomFun{topFortranOutputStack} & returns the top element of the stack \\ +\end{tabular} +} +{ +\newline +\axiomFun{clearFortranOutputStack}\tab{25}resets the stack\newline +\axiomFun{pushFortranOutputStack}\tab{25}pushes a \axiomType{FileName} onto the stack\newline +\axiomFun{popFortranOutputStack}\tab{25}pops the stack\newline +\axiomFun{showFortranOutputStack}\tab{25}returns the current stack\newline +\axiomFun{topFortranOutputStack}\tab{25}returns the top element of the stack\newline +} +These commands are all part of \axiomType{FortranOutputStackPackage}. + +\subsubsection{Fortran Types} + +When generating code it is important to keep track of the Fortran types of +the objects which we are generating. This is useful for a number of reasons, +not least to ensure that we are actually generating legal Fortran code. The +current type system is built up in several layers, and we shall describe each +in turn. + +\subsubsection{FortranScalarType} +\texht{\exptypeindex{FortranScalarType}}{} + +This domain represents the simple Fortran datatypes: REAL, DOUBLE PRECISION, +COMPLEX, LOGICAL, INTEGER, and CHARACTER. +It is possible to \axiomFun{coerce} a \axiomType{String} or \axiomType{Symbol} +into the domain, test whether two objects are equal, and also apply +the predicate functions \axiomFunFrom{real?}{FortranScalarType} etc. + +\subsubsection{FortranType} +\texht{\exptypeindex{FortranType}}{} + +This domain represents ``full'' types: i.e., datatype plus array dimensions +(where appropriate) plus whether or not the parameter is an external +subprogram. It is possible to \axiomFun{coerce} an object of +\axiomType{FortranScalarType} into the domain or \axiomFun{construct} one +from an element of \axiomType{FortranScalarType}, a list of +\axiomType{Polynomial Integer}s (which can of course be simple integers or +symbols) representing its dimensions, and +a \axiomType{Boolean} declaring whether it is external or not. The list +of dimensions must be empty if the \axiomType{Boolean} is {\tt true}. +The functions \axiomFun{scalarTypeOf}, \axiomFun{dimensionsOf} and +\axiomFun{external?} return the appropriate +parts, and it is possible to get the various basic Fortran Types via +functions like \axiomFun{fortranReal}. +\xtc{ +For example: +}{ +\spadpaste{type:=construct(real,[i,10],false)$FortranType} +} +\xtc{ +or +}{ +\spadpaste{type:=[real,[i,10],false]$FortranType\bound{type}} +} +\xtc{ +}{ +\spadpaste{scalarTypeOf type\free{type}} +} +\xtc{ +}{ +\spadpaste{dimensionsOf type\free{type}} +} +\xtc{ +}{ +\spadpaste{external? type\free{type}} +} +\xtc{ +}{ +\spadpaste{fortranLogical()} +} +\xtc{ +}{ +\spadpaste{construct(integer,[],true)$FortranType} +} + +\subsubsection{SymbolTable} +\texht{\exptypeindex{SymbolTable}}{} + +This domain creates and manipulates a symbol table for generated Fortran code. +This is used by \axiomType{FortranProgram} to represent the types of objects in +a subprogram. The commands available are: +\texht{ +\begin{tabular}{ll} +\axiomFun{empty} & creates a new \axiomType{SymbolTable} \\ + & \\ +\axiomFunX{declare} & creates a new entry in a table \\ + & \\ +\axiomFun{fortranTypeOf} & returns the type of an object in a table \\ + & \\ +\axiomFun{parametersOf} & returns a list of all the symbols in the table \\ + & \\ +\axiomFun{typeList} & returns a list of all objects of a given type \\ + & \\ +\axiomFun{typeLists} & returns a list of lists of all objects sorted by type \\ + & \\ +\axiomFun{externalList} & returns a list of all {\tt EXTERNAL} objects \\ + & \\ +\axiomFun{printTypes} & produces Fortran type declarations from a table\\ +\end{tabular} +} +{ +\newline +\axiomFun{empty}\tab{25}creates a new \axiomType{SymbolTable}\newline +\axiomFunX{declare}\tab{25}creates a new entry in a table \newline +\axiomFun{fortranTypeOf}\tab{25}returns the type of an object in a table \newline +\axiomFun{parametersOf}\tab{25}returns a list of all the symbols in the table \newline +\axiomFun{typeList}\tab{25}returns a list of all objects of a given type \newline +\axiomFun{typeLists}\tab{25}returns a list of lists of all objects sorted by type \newline +\axiomFun{externalList}\tab{25}returns a list of all {\tt EXTERNAL} objects \newline +\axiomFun{printTypes}\tab{25}produces Fortran type declarations from a table\newline +} +\xtc{ +}{ +\spadpaste{symbols := empty()$SymbolTable\bound{symbols}} +} +\xtc{ +}{ +\spadpaste{declare!(X,fortranReal(),symbols)\free{symbols}} +} +\xtc{ +}{ +\spadpaste{declare!(M,construct(real,[i,j],false)$FortranType,symbols)\free{symbols}} +} +\xtc{ +}{ +\spadpaste{declare!([i,j],fortranInteger(),symbols)\free{symbols}} +} +\xtc{ +}{ +\spadpaste{symbols\free{symbols}} +} +\xtc{ +}{ +\spadpaste{fortranTypeOf(i,symbols)\free{symbols}} +} +\xtc{ +}{ +\spadpaste{typeList(real,symbols)\free{symbols}} +} +\xtc{ +}{ +\spadpaste{printTypes symbols\free{symbols}} +} + +\subsubsection{TheSymbolTable} +\texht{\exptypeindex{TheSymbolTable}}{} + +This domain creates and manipulates one global symbol table to be used, for +example, during template processing. It is +also used when +linking to external Fortran routines. The +information stored for each subprogram (and the main program segment, where +relevant) is: +\indent{4} +\beginitems +\item[-] its name; +\item[-] its return type; +\item[-] its argument list; +\item[-] and its argument types. +\enditems +\indent{0} +Initially, any information provided is deemed to be for the main program +segment. +\xtc{ +Issuing the following command indicates that from now on all information +refers to the subprogram \axiom{F}. +}{ +\spadpaste{newSubProgram F} +} +\xtc{ +It is possible to return to processing the main program segment by issuing +the command: +}{ +\spadpaste{endSubProgram()} +} +The following commands exist: +\texht{ +\begin{tabular}{p{1.6in}p{2.8in}} +\axiomFunX{returnType} & declares the return type of the current subprogram \\ + & \\ +\axiomFun{returnTypeOf} & returns the return type of a subprogram \\ + & \\ +\axiomFunX{argumentList} & declares the argument list of the current subprogram \\ + & \\ +\axiomFun{argumentListOf} & returns the argument list of a subprogram \\ + & \\ +\axiomFunX{declare} & provides type declarations for parameters of the current subprogram \\ + & \\ +\axiomFun{symbolTableOf} & returns the symbol table of a subprogram \\ + & \\ +\axiomFun{printHeader} & produces the Fortran header for the current subprogram \\ +\end{tabular} +} +{ +\newline +\axiomFunX{returnType}\tab{25}declares the return type of the current subprogram \newline +\axiomFun{returnTypeOf}\tab{25}returns the return type of a subprogram \newline +\axiomFunX{argumentList}\tab{25}declares the argument list of the current subprogram \newline +\axiomFun{argumentListOf}\tab{25}returns the argument list of a subprogram \newline +\axiomFunX{declare}\tab{25}provides type declarations for parameters of the current subprogram \newline +\axiomFun{symbolTableOf}\tab{25}returns the symbol table of a subprogram \newline +\axiomFun{printHeader}\tab{25}produce the Fortran header for the current subprogram \newline +} +In addition there are versions of these commands which are parameterised by +the name of a subprogram, and others parameterised by both the name of a +subprogram and by an instance of \axiomType{TheSymbolTable}. +\xtc{ +}{ +\spadpaste{newSubProgram F \bound{forPleasure}} +} +\xtc{ +}{ +\spadpaste{argumentList!(F,[X])\free{forPleasure}} +} +\xtc{ +}{ +\spadpaste{returnType!(F,real)\free{forPleasure}} +} +\xtc{ +}{ +\spadpaste{declare!(X,fortranReal(),F)\free{forPleasure}} +} +\xtc{ +}{ +\spadpaste{printHeader F\free{forPleasure}} +} + +\subsubsection{Advanced Fortran Code Generation} + +This section describes facilities for representing Fortran statements, and +building up complete subprograms from them. + +\subsubsection{Switch} +\texht{\exptypeindex{Switch}}{} + +This domain is used to represent statements like {\tt x < y}. Although +these can be represented directly in Axiom, it is a little cumbersome, +since Axiom evaluates the last statement, for example, to \axiom{true} +(since \axiom{x} is lexicographically less than \axiom{y}). + +Instead we have a set of operations, such as \axiomFun{LT} to represent \axiom{<}, +to let us build such statements. The available constructors are: +\texht{ +\centerline{{\begin{tabular}{ll}}} +\centerline{{\axiomFun{LT} & $<$ }} +\centerline{{\axiomFun{GT} & $>$ }} +\centerline{{\axiomFun{LE} & $\leq$ }} +\centerline{{\axiomFun{GE} & $\geq$ }} +\centerline{{\axiomFun{EQ} & $=$ }} +\centerline{{\axiomFun{AND} & $and$}} +\centerline{{\axiomFun{OR} & $or$ }} +\centerline{{\axiomFun{NOT} & $not$ }} +\centerline{{\end{tabular}}} +} +{ +\newline +\axiomFun{LT}\tab{25}\texht{$<$}{<} \newline +\axiomFun{GT}\tab{25}\texht{$>$}{>} \newline +\axiomFun{LE}\tab{25}\texht{$\leq$}{<=} \newline +\axiomFun{GE}\tab{25}\texht{$\geq$}{>=} \newline +\axiomFun{EQ}\tab{25}\texht{$=$}{=} \newline +\axiomFun{AND}\tab{25}\texht{$and$}{{\tt and}}\newline +\axiomFun{OR}\tab{25}\texht{$or$}{{\tt or}} \newline +\axiomFun{NOT}\tab{25}\texht{$not$}{{\tt not}} \newline +} +\xtc{ +So for example: +}{ +\spadpaste{LT(x,y)} +} + +\subsubsection{FortranCode} + +This domain represents code segments or operations: currently assignments, +conditionals, blocks, comments, gotos, continues, various kinds of loops, +and return statements. +\xtc{ +For example we can create quite a complicated conditional statement using +assignments, and then turn it into Fortran code: +}{ +\spadpaste{c := cond(LT(X,Y),assign(F,X),cond(GT(Y,Z),assign(F,Y),assign(F,Z)))\bound{c}} +} +\xtc{ +}{ +\spadpaste{printCode c\free{c}} +} + +The Fortran code is printed +on the current Fortran output stream. + +\subsubsection{FortranProgram} +\texht{\exptypeindex{FortranProgram}}{} + +This domain is used to construct complete Fortran subprograms out of +elements of \axiomType{FortranCode}. It is parameterised by the name of the +target subprogram (a \axiomType{Symbol}), its return type (from +\axiomType{Union}(\axiomType{FortranScalarType},``void'')), +its arguments (from \axiomType{List Symbol}), and +its symbol table (from \axiomType{SymbolTable}). One can +\axiomFun{coerce} elements of either \axiomType{FortranCode} +or \axiomType{Expression} into it. + +\xtc{ +First of all we create a symbol table: +}{ +\spadpaste{symbols := empty()$SymbolTable\bound{symbols}} +} +\xtc{ +Now put some type declarations into it: +}{ +\spadpaste{declare!([X,Y],fortranReal(),symbols)\free{symbols}} +} +\xtc{ +Then (for convenience) +we set up the particular instantiation of \axiomType{FortranProgram} +}{ +\spadpaste{FP := FortranProgram(F,real,[X,Y],symbols)\free{symbols}\bound{FP}} +} +\xtc{ +Create an object of type \axiomType{Expression(Integer)}: +}{ +\spadpaste{asp := X*sin(Y)\bound{asp}} +} +\xtc{ +Now \axiomFun{coerce} it into \axiomType{FP}, and print its Fortran form: +}{ +\spadpaste{outputAsFortran(asp::FP)\free{FP asp}} +} + +We can generate a \axiomType{FortranProgram} using \axiom{FortranCode}. For +example: +\xtc{ +Augment our symbol table: +}{ +\spadpaste{declare!(Z,fortranReal(),symbols)\free{symbols}\bound{Z}} +} +\xtc{ +and transform the conditional expression we prepared earlier: +}{ +\spadpaste{outputAsFortran([c,returns()]::FP) \free{FP c Z}} +} + +%------------------------------------------------------------------------ +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\nagTechnicalTitle}{Some technical information} +\newcommand{\nagTechnicalNumber}{15.3.5.} + +@ +\section{Some technical information} +\label{nagTechnicalPage} +\index{pages!nagTechnicalPage!ug15.ht} +\index{ug15.ht!pages!nagTechnicalPage} +\index{nagTechnicalPage!ug15.ht!pages} +<>= +\begin{page}{nagTechnicalPage}{15.3.5. Some technical information} +\beginscroll +%------------------------------------------------------------------------ + +The model adopted for the link is a server-client configuration +-- Axiom acting as a client via a local agent +(a process called {\tt nagman}). The server side is implemented +by the {\tt nagd} daemon process which may run on a different host. +The {\tt nagman} local agent is started by default whenever you +start Axiom. The {\tt nagd} server must be started separately. +Instructions for installing and running the server are supplied +in the NAG documentation. +Use the \spadcmd{)set naglink host} system command +to point your local agent to a server in your network. + +On the Axiom side, one sees a set of {\em packages} +(ask \Browse{} for {\em Nag*}) for each chapter, each exporting +operations with the same name as a routine in the \naglib{}. +The arguments and return value of each operation belong to +standard Axiom types. + +The {\tt man} pages for the \naglib{} are accessible via the description +of each operation in \Browse{} (among other places). + +In the implementation of each operation, the set of inputs is passed +to the local agent {\tt nagman}, which makes a +Remote Procedure Call (RPC) to the +remote {\tt nagd} daemon process. The local agent receives the RPC +results and forwards them to the Axiom workspace where they +are interpreted appropriately. + +How are Fortran subroutines turned into RPC calls? For each Fortran +routine in the \naglib{}, a C main() routine is supplied. Its job is +to assemble the RPC input (numeric) data stream into the appropriate +Fortran data structures for the routine, call the Fortran routine from +C and serialize the results into an RPC output data stream. + +Many \naglib{} routines accept ASPs (Argument Subprogram Parameters). +These specify user-supplied Fortran routines (e.g. a routine to +supply values of a function is required for numerical integration). +How are they handled? There are new facilities in Axiom to help. +A set of Axiom domains has been provided to turn values in standard + Axiom types (such as Expression Integer) into the appropriate +piece of Fortran for each case (a filename pointing to Fortran source +for the ASP can always be supplied instead). +Ask \Browse{} for {\em Asp*} to see these domains. The Fortran fragments +are included in the outgoing RPC stream, but {\tt nagd} intercepts them, +compiles them, and links them with the main() C program before executing +the resulting program on the numeric part of the RPC stream. + + +%------------------------------------------------------------------------ +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugWhatsNewLanguageTitle}{Interactive Front-end and Language} +\newcommand{\ugWhatsNewLanguageNumber}{15.4.} + +@ +\section{Interactive Front-end and Language} +\label{ugWhatsNewLanguagePage} +\begin{itemize} +\item ugLangLoopsBreakPage \ref{ugLangLoopsBreakPage} on +page~\pageref{ugLangLoopsBreakPage} +\item ugLangBlocksPage \ref{ugLangBlocksPage} on +page~\pageref{ugLangBlocksPage} +\end{itemize} +\index{pages!ugWhatsNewLanguagePage!ug15.ht} +\index{ug15.ht!pages!ugWhatsNewLanguagePage} +\index{ugWhatsNewLanguagePage!ug15.ht!pages} +<>= +\begin{page}{ugWhatsNewLanguagePage}{15.4. Interactive Front-end and Language} +\beginscroll +%------------------------------------------------------------------------ + +The \axiom{leave} keyword has been replaced by the \axiom{break} +keyword for compatibility with the new Axiom extension language. See +section \downlink{``\ugLangLoopsBreakTitle''}{ugLangLoopsBreakPage} in +Section \ugLangLoopsBreakNumber\ignore{ugLangLoopsBreak} for more +information. + +Curly braces are no longer used to create sets. Instead, use +\axiomFun{set} followed by a bracketed expression. For example, +\xtc{ +}{ +\spadpaste{set [1,2,3,4]} +} + +Curly braces are now used to enclose a block (see section +\downlink{``\ugLangBlocksTitle''}{ugLangBlocksPage} in Section +\ugLangBlocksNumber\ignore{ugLangBlocks} for more information). For +compatibility, a block can still be enclosed by parentheses as well. + +``Free functions'' created by the \axiomxl{} compiler can now be +loaded and used within the Axiom interpreter. A {\it free +function} is a library function that is implemented outside a +domain or category constructor. + +New coercions to and from type \axiomType{Expression} have been +added. For example, it is now possible to map a polynomial +represented as an expression to an appropriate polynomial type. + +Various messages have been added or rewritten for clarity. + +%------------------------------------------------------------------------ +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugWhatsNewLibraryTitle}{Library} +\newcommand{\ugWhatsNewLibraryNumber}{15.5.} + +@ +\section{Library} +\label{ugWhatsNewLibraryPage} +\begin{itemize} +\item FullPartialFractionExpansionXmpPage +\ref{FullPartialFractionExpansionXmpPage} on +page~\pageref{FullPartialFractionExpansionXmpPage} +\end{itemize} +\index{pages!ugWhatsNewLibraryPage!ug15.ht} +\index{ug15.ht!pages!ugWhatsNewLibraryPage} +\index{ugWhatsNewLibraryPage!ug15.ht!pages} +<>= +\begin{page}{ugWhatsNewLibraryPage}{15.5. Library} +\beginscroll +%------------------------------------------------------------------------ + +The \axiomType{FullPartialFractionExpansion} +domain has been added. This domain computes factor-free full +partial fraction expansions. +See section +\downlink{`FullPartialFractionExpansion'} +{FullPartialFractionExpansionXmpPage}\ignore{FullPartialFractionExpansion} +for examples. + +We have implemented the Bertrand/Cantor algorithm for integrals of +hyperelliptic functions. This brings a major speedup for some +classes of algebraic integrals. + +We have implemented a new (direct) algorithm for integrating trigonometric +functions. This brings a speedup and an improvement in the answer +quality. + +The {\sf SmallFloat} domain has been renamed +\axiomType{DoubleFloat} and {\sf SmallInteger} has been renamed +\axiomType{SingleInteger}. The new abbreviations as +\axiomType{DFLOAT} and \axiomType{SINT}, respectively. +We have defined the macro {\sf SF}, the old abbreviation for {\sf +SmallFloat}, to expand to \axiomType{DoubleFloat} and modified +the documentation and input file examples to use the new names +and abbreviations. You should do the same in any private Axiom +files you have. + +There are many new categories, domains and packages related to the +NAG Library Link facility. See the file + +\unixcommand{\env{AXIOM}/../../src/algebra/exposed.lsp}{xterm\ -e\ vi\ +"/naglink"\ \env{AXIOM}/../../src/algebra/exposed.lsp} + +for a list of constructors in the {\bf naglink} Axiom exposure group. + +We have made improvements to the differential equation solvers +and there is a new facility for solving systems of first-order +linear differential equations. +In particular, an important fix was made to the solver for +inhomogeneous linear ordinary differential equations that +corrected the calculation of particular solutions. +We also made improvements to the polynomial +and transcendental equation solvers including the +ability to solve some classes of systems of transcendental +equations. + +The efficiency of power series have been improved and left and right +expansions of \spad{tan(f(x))} at \spad{x =} a pole of \spad{f(x)} +can now be computed. +A number of power series bugs were fixed and the \axiomType{GeneralUnivariatePowerSeries} +domain was added. +The power series variable can appear in the coefficients and when this +happens, you cannot differentiate or integrate the series. Differentiation +and integration with respect to other variables is supported. + +A domain was added for representing asymptotic expansions of a +function at an exponential singularity. + +For limits, the main new feature is the exponential expansion domain used +to treat certain exponential singularities. Previously, such singularities +were treated in an {\it ad hoc} way and only a few cases were covered. Now +Axiom can do things like + +\begin{verbatim} +limit( (x+1)**(x+1)/x**x - x**x/(x-1)**(x-1), x = %plusInfinity) +\end{verbatim} + +in a systematic way. It only does one level of nesting, though. In other +words, we can handle \spad{exp(} some function with a pole \spad{)}, but not +\texht{\linebreak}{} \spad{exp(exp(} some function with a pole \spad{)).} + +The computation of integral bases has been improved through careful +use of Hermite row reduction. A P-adic algorithm +for function fields of algebraic curves in finite characteristic has also +been developed. + +Miscellaneous: +There is improved conversion of definite and indefinite integrals to +\axiomType{InputForm}; +binomial coefficients are displayed in a new way; +some new simplifications of radicals have been implemented; +the operation \spadfun{complexForm} for converting to rectangular coordinates +has been added; +symmetric product operations have been added to \axiomType{LinearOrdinaryDifferentialOperator}. + +%------------------------------------------------------------------------ +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugWhatsNewHyperDocTitle}{\HyperName} +\newcommand{\ugWhatsNewHyperDocNumber}{15.6.} + +@ +\section{\HyperName} +\label{ugWhatsNewHyperDocPage} +\begin{itemize} +\item ugHyperKeysPage \ref{ugHyperKeysPage} on +page~\pageref{ugHyperKeysPage} +\end{itemize} +\index{pages!ugWhatsNewHyperDocPage!ug15.ht} +\index{ug15.ht!pages!ugWhatsNewHyperDocPage} +\index{ugWhatsNewHyperDocPage!ug15.ht!pages} +<>= +\begin{page}{ugWhatsNewHyperDocPage}{15.6. \HyperName} +\beginscroll +%------------------------------------------------------------------------ + +The buttons on the titlebar and scrollbar have been replaced +with ones which have a 3D effect. You can change the foreground and +background colors of these ``controls'' by including and modifying +the following lines in your {\bf .Xdefaults} file. +\begin{verbatim} +Axiom.hyperdoc.ControlBackground: White +Axiom.hyperdoc.ControlForeground: Black +\end{verbatim} + +For various reasons, \HyperName{} sometimes displays a +secondary window. You can control the size and placement of this +window by including and modifying +the following line in your {\bf .Xdefaults} file. +% +\begin{verbatim} +Axiom.hyperdoc.FormGeometry: =950x450+100+0 +\end{verbatim} +% +This setting is a standard X Window System geometry specification: +you are requesting a window 950 pixels wide by 450 deep and placed in +the upper left corner. + +Some key definitions have been changed to conform more closely with +the CUA guidelines. Press \texht{F9}{\downlink{F9}{ugHyperKeysPage}} +to see the current definitions. + +Input boxes (for example, in the Browser) now accept paste-ins from +the X Window System. Use the second button to paste in something +you have previously copied or cut. An example of how you can use this +is that you can paste the type from an Axiom computation +into the main Browser input box. + + +%------------------------------------------------------------------------ +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugWhatsNewDocumentationTitle}{Documentation} +\newcommand{\ugWhatsNewDocumentationNumber}{15.7.} + +@ +\section{Documentation} +\label{ugWhatsNewDocumentationPage} +\begin{itemize} +\item ugGraphTwoDbuildPage \ref{ugGraphTwoDbuildPage} on +page~\pageref{ugGraphTwoDbuildPage} +\item ugGraphTwoDappendPage \ref{ugGraphTwoDappendPage} on +page~\pageref{ugGraphTwoDappendPage} +\item ugIntroCallFunPage \ref{ugIntroCallFunPage} on +page~\pageref{ugIntroCallFunPage} +\item ugUserRulesPage \ref{ugUserRulesPage} on +page~\pageref{ugUserRulesPage} +\end{itemize} +\index{pages!ugWhatsNewDocumentationPage!ug15.ht} +\index{ug15.ht!pages!ugWhatsNewDocumentationPage} +\index{ugWhatsNewDocumentationPage!ug15.ht!pages} +<>= +\begin{page}{ugWhatsNewDocumentationPage}{15.7. Documentation} +\beginscroll +%------------------------------------------------------------------------ +\texht{ +We describe here a few additions to the on-line +version of the Axiom book which you can read with +HyperDoc. +}{} + +A section has been added to the graphics chapter, describing how to +build \twodim{} graphs from lists of points. An example is given +showing how to read the points from a file. See section +\downlink{``\ugGraphTwoDbuildTitle''}{ugGraphTwoDbuildPage} in Section +\ugGraphTwoDbuildNumber\ignore{ugGraphTwoDbuild} for details. + +A further section has been added to that same chapter, describing how +to add a \twodim{} graph to a viewport which already contains other +graphs. See section +\downlink{``\ugGraphTwoDappendTitle''}{ugGraphTwoDappendPage} in +Section \ugGraphTwoDappendNumber\ignore{ugGraphTwoDappend} for +details. + +Chapter 3 +and the on-line \HyperName{} help have been unified. + +An explanation of operation names ending in ``?'' and ``!'' has been +added to the first chapter. See the end of the section +\downlink{``\ugIntroCallFunTitle''}{ugIntroCallFunPage} in Section +\ugIntroCallFunNumber\ignore{ugIntroCallFun} for details. + +An expanded explanation of using predicates has been added to the +sixth chapter. See the example involving \userfun{evenRule} in the +middle of the section +\downlink{``\ugUserRulesTitle''}{ugUserRulesPage} in Section +\ugUserRulesNumber\ignore{ugUserRules} for details. + +Documentation for the \spadcmd{)compile}, \spadcmd{)library} and +\spadcmd{)load} commands has been greatly changed. This reflects +the ability of the \spadcmd{)compile} to now invoke the \axiomxl{} +compiler, the impending deletion of the \spadcmd{)load} command +and the new \spadcmd{)library} command. +The \spadcmd{)library} command replaces \spadcmd{)load} and is +compatible with the compiled output from both the old and new +compilers. + +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 16 (ug16.ht)} +<>= +\newcommand{\lanb}{{\tt [}} +\newcommand{\ranb}{{\tt ]}} +\newcommand{\vertline}{\texht{$|$}{{\tt |}}} +\newcommand{\ugSysCmdTitle}{Axiom System Commands} +\newcommand{\ugSysCmdNumber}{B.} + +@ +\section{Axiom System Commands} +\label{ugSysCmdPage} +\begin{itemize} +\item ugSysCmdOverviewPage \ref{ugSysCmdOverviewPage} on +page~\pageref{ugSysCmdOverviewPage} +\item ugSysCmdabbreviationPage \ref{ugSysCmdabbreviationPage} on +page~\pageref{ugSysCmdabbreviationPage} +\item ugSysCmdbootPage \ref{ugSysCmdbootPage} on +page~\pageref{ugSysCmdbootPage} +\item ugSysCmdcdPage \ref{ugSysCmdcdPage} on +page~\pageref{ugSysCmdcdPage} +\item ugSysCmdclosePage \ref{ugSysCmdclosePage} on +page~\pageref{ugSysCmdclosePage} +\item ugSysCmdclearPage \ref{ugSysCmdclearPage} on +page~\pageref{ugSysCmdclearPage} +\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on +page~\pageref{ugSysCmdcompilePage} +\item ugSysCmddisplayPage \ref{ugSysCmddisplayPage} on +page~\pageref{ugSysCmddisplayPage} +\item ugSysCmdeditPage \ref{ugSysCmdeditPage} on +page~\pageref{ugSysCmdeditPage} +\item ugSysCmdfinPage \ref{ugSysCmdfinPage} on +page~\pageref{ugSysCmdfinPage} +\item ugSysCmdframePage \ref{ugSysCmdframePage} on +page~\pageref{ugSysCmdframePage} +\item ugSysCmdhelpPage \ref{ugSysCmdhelpPage} on +page~\pageref{ugSysCmdhelpPage} +\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on +page~\pageref{ugSysCmdhistoryPage} +\item ugSysCmdlibraryPage \ref{ugSysCmdlibraryPage} on +page~\pageref{ugSysCmdlibraryPage} +\item ugSysCmdlispPage \ref{ugSysCmdlispPage} on +page~\pageref{ugSysCmdlispPage} +\item ugSysCmdloadPage \ref{ugSysCmdloadPage} on +page~\pageref{ugSysCmdloadPage} +\item ugSysCmdltracePage \ref{ugSysCmdltracePage} on +page~\pageref{ugSysCmdltracePage} +\item ugSysCmdpquitPage \ref{ugSysCmdpquitPage} on +page~\pageref{ugSysCmdpquitPage} +\item ugSysCmdquitPage \ref{ugSysCmdquitPage} on +page~\pageref{ugSysCmdquitPage} +\item ugSysCmdreadPage \ref{ugSysCmdreadPage} on +page~\pageref{ugSysCmdreadPage} +\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on +page~\pageref{ugSysCmdsetPage} +\item ugSysCmdshowPage \ref{ugSysCmdshowPage} on +page~\pageref{ugSysCmdshowPage} +\item ugSysCmdspoolPage \ref{ugSysCmdspoolPage} on +page~\pageref{ugSysCmdspoolPage} +\item ugSysCmdsynonymPage \ref{ugSysCmdsynonymPage} on +page~\pageref{ugSysCmdsynonymPage} +\item ugSysCmdsystemPage \ref{ugSysCmdsystemPage} on +page~\pageref{ugSysCmdsystemPage} +\item ugSysCmdtracePage \ref{ugSysCmdtracePage} on +page~\pageref{ugSysCmdtracePage} +\item ugSysCmdundoPage \ref{ugSysCmdundoPage} on +page~\pageref{ugSysCmdundoPage} +\item ugSysCmdwhatPage \ref{ugSysCmdwhatPage} on +page~\pageref{ugSysCmdwhatPage} +\end{itemize} +\index{pages!ugSysCmdPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdPage} +\index{ugSysCmdPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdPage}{B. Axiom System Commands} +\beginscroll + +\texht{\bgroup\baselineskip 10pt\ixpt{}\def\Isize{\SIsize}}{} + +This chapter describes system commands, the command-line +facilities used to control the Axiom environment. +The first section is an introduction and discusses the common +syntax of the commands available. + +\table{ + { \downlink{\menuitemstyle{A.1. Introduction}}{ugSysCmdOverviewPage} } + { \downlink{\menuitemstyle{A.2. )abbreviation}}{ugSysCmdabbreviationPage} } + { \downlink{\menuitemstyle{A.3. )boot}}{ugSysCmdbootPage} } + { \downlink{\menuitemstyle{A.4. )cd}}{ugSysCmdcdPage} } + { \downlink{\menuitemstyle{A.5. )close}}{ugSysCmdclosePage} } + { \downlink{\menuitemstyle{A.6. )clear}}{ugSysCmdclearPage} } + { \downlink{\menuitemstyle{A.7. )compile}}{ugSysCmdcompilePage} } + { \downlink{\menuitemstyle{A.8. )display}}{ugSysCmddisplayPage} } + { \downlink{\menuitemstyle{A.9. )edit}}{ugSysCmdeditPage} } + { \downlink{\menuitemstyle{A.10. )fin}}{ugSysCmdfinPage} } + { \downlink{\menuitemstyle{A.11. )frame}}{ugSysCmdframePage} } + { \downlink{\menuitemstyle{A.12. )help}}{ugSysCmdhelpPage} } + { \downlink{\menuitemstyle{A.13. )history}}{ugSysCmdhistoryPage} } + { \downlink{\menuitemstyle{A.14. )library}}{ugSysCmdlibraryPage} } + { \downlink{\menuitemstyle{A.15. )lisp}}{ugSysCmdlispPage} } + { \downlink{\menuitemstyle{A.16. )load}}{ugSysCmdloadPage} } + { \downlink{\menuitemstyle{A.17. )ltrace}}{ugSysCmdltracePage} } + { \downlink{\menuitemstyle{A.18. )pquit}}{ugSysCmdpquitPage} } + { \downlink{\menuitemstyle{A.19. )quit}}{ugSysCmdquitPage} } + { \downlink{\menuitemstyle{A.20. )read}}{ugSysCmdreadPage} } + { \downlink{\menuitemstyle{A.21. )set}}{ugSysCmdsetPage} } + { \downlink{\menuitemstyle{A.22. )show}}{ugSysCmdshowPage} } + { \downlink{\menuitemstyle{A.23. )spool}}{ugSysCmdspoolPage} } + { \downlink{\menuitemstyle{A.24. )synonym}}{ugSysCmdsynonymPage} } + { \downlink{\menuitemstyle{A.25. )system}}{ugSysCmdsystemPage} } + { \downlink{\menuitemstyle{A.26. )trace}}{ugSysCmdtracePage} } + { \downlink{\menuitemstyle{A.27. )undo}}{ugSysCmdundoPage} } + { \downlink{\menuitemstyle{A.28. )what}}{ugSysCmdwhatPage} } +} +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdOverviewTitle}{Introduction} +\newcommand{\ugSysCmdOverviewNumber}{B.1.} + +@ +\section{Introduction} +\label{ugSysCmdOverviewPage} +\begin{itemize} +\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on +page~\pageref{ugSysCmdsetPage} +\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on +page~\pageref{ugSysCmdcompilePage} +\end{itemize} +\index{pages!ugSysCmdOverviewPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdOverviewPage} +\index{ugSysCmdOverviewPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdOverviewPage}{B.1. Introduction} +\beginscroll + +System commands are used to perform Axiom environment management. +Among the commands are those that display what has been defined or +computed, set up multiple logical Axiom environments (frames), clear +definitions, read files of expressions and commands, show what +functions are available, and terminate Axiom. + +Some commands are restricted: the commands +\begin{verbatim} +)set userlevel interpreter +)set userlevel compiler +)set userlevel development +\end{verbatim} +set the user-access level to the three possible choices. All commands +are available at {\tt development} level and the fewest are available +at {\tt interpreter} level. The default user-level is {\tt +interpreter}. In addition to the \spadcmd{)set} command (discussed in +\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} in Section +\ugSysCmdsetNumber\ignore{ugSysCmdset}) you can use the \HyperName{} +settings facility to change the {\it user-level.} \texht{}{Click on +\lispmemolink{Settings}{(|htSystemVariables|)} here to immediately go +to the settings facility.} + +Each command listing begins with one or more syntax pattern +descriptions plus examples of related commands. The syntax +descriptions are intended to be easy to read and do not necessarily +represent the most compact way of specifying all possible arguments +and options; the descriptions may occasionally be redundant. + +All system commands begin with a right parenthesis which should be in +the first available column of the input line (that is, immediately +after the input prompt, if any). System commands may be issued +directly to Axiom or be included in {\bf .input} files. + +A system command {\it argument} is a word that directly follows the +command name and is not followed or preceded by a right parenthesis. +A system command {\it option} follows the system command and is +directly preceded by a right parenthesis. Options may have arguments: +they directly follow the option. This example may make it easier to +remember what is an option and what is an argument: + +\centerline{{{\tt )syscmd {\it arg1 arg2} )opt1 {\it opt1arg1 opt1arg2} )opt2 {\it opt2arg1} ...}}} + +In the system command descriptions, optional arguments and options are +enclosed in brackets (``\lanb'' and ``\ranb''). If an argument or +option name is in italics, it is meant to be a variable and must have +some actual value substituted for it when the system command call is +made. For example, the syntax pattern description + +\noindent +{\tt )read} {\it fileName} {\tt \lanb{})quietly\ranb{}} + +\noindent +would imply that you must provide an actual file name for +{\it fileName} but need not use the {\tt )quietly} option. +Thus +\begin{verbatim} +)read matrix.input +\end{verbatim} +is a valid instance of the above pattern. + +System command names and options may be abbreviated and may be in +upper or lower case. +The case of actual arguments may be significant, depending on the +particular situation (such as in file names). +System command names and options may be abbreviated to the minimum +number of starting letters so that the name or option is unique. +Thus +\begin{verbatim} +)s Integer +\end{verbatim} +is not a valid abbreviation for the {\tt )set} command, +because both {\tt )set} and {\tt )show} +begin with the letter ``s''. +Typically, two or three letters are sufficient for disambiguating names. +In our descriptions of the commands, we have used no abbreviations for +either command names or options. + +In some syntax descriptions we use a vertical line ``\vertline'' +to indicate that you must specify one of the listed choices. +For example, in +\begin{verbatim} +)set output fortran on | off +\end{verbatim} +only {\tt on} and {\tt off} are acceptable words for following +{\tt boot}. +We also sometimes use ``...'' to indicate that additional arguments +or options of the listed form are allowed. +Finally, in the syntax descriptions we may also list the syntax of +related commands. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdabbreviationTitle}{)abbreviation} +\newcommand{\ugSysCmdabbreviationNumber}{B.2.} + +@ +\section{)abbreviation} +\label{ugSysCmdabbreviationPage} +\index{pages!ugSysCmdabbreviationPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdabbreviationPage} +\index{ugSysCmdabbreviationPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdabbreviationPage}{B.2. )abbreviation} +\beginscroll + + +\par\noindent{\bf User Level Required:} compiler + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item {\tt )abbreviation query \lanb{}{\it nameOrAbbrev}\ranb{}} +\item {\tt )abbreviation category {\it abbrev fullname} \lanb{})quiet\ranb{}} +\item {\tt )abbreviation domain {\it abbrev fullname} \lanb{})quiet\ranb{}} +\item {\tt )abbreviation package {\it abbrev fullname} \lanb{})quiet\ranb{}} +\item {\tt )abbreviation remove {\it nameOrAbbrev}} +\end{items} + +\par\noindent{\bf Command Description:} + +This command is used to query, set and remove abbreviations for category, +domain and package constructors. +Every constructor must have a unique abbreviation. +This abbreviation is part of the name of the subdirectory +under which the components of the compiled constructor are +stored. +Furthermore, by issuing this command you +let the system know what file to load automatically if you use a new +constructor. +Abbreviations must start with a letter and then be followed by +up to seven letters or digits. +Any letters appearing in the abbreviation must be in uppercase. + +When used with the {\tt query} argument, +this command may be used to list the name +associated with a particular abbreviation or the abbreviation for a +constructor. +If no abbreviation or name is given, the names and corresponding +abbreviations for {\it all} constructors are listed. + +The following shows the abbreviation for the constructor \spadtype{List}: +\begin{verbatim} +)abbreviation query List +\end{verbatim} +The following shows the constructor name corresponding to the +abbreviation \spadtype{NNI}: +\begin{verbatim} +)abbreviation query NNI +\end{verbatim} +The following lists all constructor names and their abbreviations. +\begin{verbatim} +)abbreviation query +\end{verbatim} + +To add an abbreviation for a constructor, use this command with +{\tt category}, {\tt domain} or {\tt package}. +The following add abbreviations to the system for a +category, domain and package, respectively: +\begin{verbatim} +)abbreviation domain SET Set +)abbreviation category COMPCAT ComplexCategory +)abbreviation package LIST2MAP ListToMap +\end{verbatim} +If the {\tt )quiet} option is used, +no output is displayed from this command. +You would normally only define an abbreviation in a library source file. +If this command is issued for a constructor that has already been loaded, the +constructor will be reloaded next time it is referenced. In particular, you +can use this command to force the automatic reloading of constructors. + +To remove an abbreviation, the {\tt remove} argument is used. +This is usually +only used to correct a previous command that set an abbreviation for a +constructor name. +If, in fact, the abbreviation does exist, you are prompted +for confirmation of the removal request. +Either of the following commands +will remove the abbreviation \spadtype{VECTOR2} and the +constructor name \spadtype{VectorFunctions2} from the system: +\begin{verbatim} +)abbreviation remove VECTOR2 +)abbreviation remove VectorFunctions2 +\end{verbatim} + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} +in section \ugSysCmdcompileNumber + + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdbootTitle}{)boot} +\newcommand{\ugSysCmdbootNumber}{B.3.} + +@ +\section{)boot} +\label{ugSysCmdbootPage} +\begin{itemize} +\item ugSysCmdfinPage \ref{ugSysCmdfinPage} on +page~\pageref{ugSysCmdfinPage} +\item ugSysCmdlispPage \ref{ugSysCmdlispPage} on +page~\pageref{ugSysCmdlispPage} +\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on +page~\pageref{ugSysCmdsetPage} +\item ugSysCmdsystemPage \ref{ugSysCmdsystemPage} on +page~\pageref{ugSysCmdsystemPage} +\end{itemize} +\index{pages!ugSysCmdbootPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdbootPage} +\index{ugSysCmdbootPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdbootPage}{B.3. )boot} +\beginscroll + + +\par\noindent{\bf User Level Required:} development + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item {\tt )boot} {\it bootExpression} +\end{items} + +\par\noindent{\bf Command Description:} + +This command is used by Axiom system developers to execute +expressions written in the BOOT language. +For example, +\begin{verbatim} +)boot times3(x) == 3*x +\end{verbatim} +creates and compiles the \Lisp{} function ``times3'' +obtained by translating the BOOT code. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdfinTitle''}{ugSysCmdfinPage} in +section \ugSysCmdfinNumber +\downlink{``\ugSysCmdlispTitle''}{ugSysCmdlispPage} in +section \ugSysCmdlispNumber +\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} in +section \ugSysCmdsetNumber +\downlink{``\ugSysCmdsystemTitle''}{ugSysCmdsystemPage} in +section \ugSysCmdsystemNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdcdTitle}{)cd} +\newcommand{\ugSysCmdcdNumber}{B.4.} + +@ +\section{)cd} +\label{ugSysCmdcdPage} +\begin{itemize} +\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on +page~\pageref{ugSysCmdcompilePage} +\item ugSysCmdeditPage \ref{ugSysCmdeditPage} on +page~\pageref{ugSysCmdeditPage} +\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on +page~\pageref{ugSysCmdhistoryPage} +\item ugSysCmdlibraryPage \ref{ugSysCmdlibraryPage} on +page~\pageref{ugSysCmdlibraryPage} +\item ugSysCmdreadPage \ref{ugSysCmdreadPage} on +page~\pageref{ugSysCmdreadPage} +\item ugSysCmdspoolPage \ref{ugSysCmdspoolPage} on +page~\pageref{ugSysCmdspoolPage} +\end{itemize} +\index{pages!ugSysCmdcdPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdcdPage} +\index{ugSysCmdcdPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdcdPage}{B.4. )cd} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item {\tt )cd} {\it directory} +\end{items} + +\par\noindent{\bf Command Description:} + +This command sets the Axiom working current directory. +The current directory is used for looking for +input files (for {\tt )read}), +Axiom library source files (for {\tt )compile}), +saved history environment files (for {\tt )history )restore}), +compiled Axiom library files (for \spadcmd{)library}), and +files to edit (for {\tt )edit}). +It is also used for writing +spool files (via {\tt )spool}), +writing history input files (via {\tt )history )write}) and +history environment files (via {\tt )history )save}),and +compiled Axiom library files (via {\tt )compile}). + +If issued with no argument, this command sets the Axiom +current directory to your home directory. +If an argument is used, it must be a valid directory name. +Except for the ``{\tt )}'' at the beginning of the command, +this has the same syntax as the operating system {\tt cd} command. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} in +section \ugSysCmdcompileNumber +\downlink{``\ugSysCmdeditTitle''}{ugSysCmdeditPage} in +section \ugSysCmdeditNumber +\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} in +section \ugSysCmdhistoryNumber +\downlink{``\ugSysCmdlibraryTitle''}{ugSysCmdlibraryPage} in +section \ugSysCmdlibraryNumber +\downlink{``\ugSysCmdreadTitle''}{ugSysCmdreadPage} in +section \ugSysCmdreadNumber +\downlink{``\ugSysCmdspoolTitle''}{ugSysCmdspoolPage} in +section \ugSysCmdspoolNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdcloseTitle}{)close} +\newcommand{\ugSysCmdcloseNumber}{B.5.} + +@ +\section{)close} +\label{ugSysCmdclosePage} +\begin{itemize} +\item ugSysCmdquitPage \ref{ugSysCmdquitPage} on +page~\pageref{ugSysCmdquitPage} +\end{itemize} +\index{pages!ugSysCmdclosePage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdclosePage} +\index{ugSysCmdclosePage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdclosePage}{B.5. )close} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )close} +\item{\tt )close )quietly} +\end{items} +\par\noindent{\bf Command Description:} + +This command is used to close down interpreter client processes. +Such processes are started by \HyperName{} to run Axiom examples +when you click on their text. When you have finished examining or modifying the +example and you do not want the extra window around anymore, issue +\begin{verbatim} +)close +\end{verbatim} +to the Axiom prompt in the window. + +If you try to close down the last remaining interpreter client +process, Axiom will offer to close down the entire Axiom +session and return you to the operating system by displaying something +like +\begin{verbatim} + This is the last Axiom session. Do you want to kill Axiom? +\end{verbatim} +Type "y" (followed by the Return key) if this is what you had in mind. +Type "n" (followed by the Return key) to cancel the command. + +You can use the {\tt )quietly} option to force Axiom to +close down the interpreter client process without closing down +the entire Axiom session. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdquitTitle''}{ugSysCmdquitPage} in +section \ugSysCmdquitNumber +\downlink{``\ugSysCmdpquitTitle''}{ugSysCmdpquitPage} in +section \ugSysCmdpquitNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdclearTitle}{)clear} +\newcommand{\ugSysCmdclearNumber}{B.6.} + +@ +\section{)clear} +\label{ugSysCmdclearPage} +\begin{itemize} +\item ugSysCmddisplayPage \ref{ugSysCmddisplayPage} on +page~\pageref{ugSysCmddisplayPage} +\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on +page~\pageref{ugSysCmdhistoryPage} +\item ugSysCmdundoPage \ref{ugSysCmdundoPage} on +page~\pageref{ugSysCmdundoPage} +\end{itemize} +\index{pages!ugSysCmdclearPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdclearPage} +\index{ugSysCmdclearPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdclearPage}{B.6. )clear} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )clear all} +\item{\tt )clear completely} +\item{\tt )clear properties all} +\item{\tt )clear properties} {\it obj1 \lanb{}obj2 ...\ranb{}} +\item{\tt )clear value all} +\item{\tt )clear value} {\it obj1 \lanb{}obj2 ...\ranb{}} +\item{\tt )clear mode all} +\item{\tt )clear mode} {\it obj1 \lanb{}obj2 ...\ranb{}} +\end{items} +\par\noindent{\bf Command Description:} + +This command is used to remove function and variable declarations, definitions +and values from the workspace. +To empty the entire workspace and reset the +step counter to 1, issue +\begin{verbatim} +)clear all +\end{verbatim} +To remove everything in the workspace but not reset the step counter, issue +\begin{verbatim} +)clear properties all +\end{verbatim} +To remove everything about the object {\tt x}, issue +\begin{verbatim} +)clear properties x +\end{verbatim} +To remove everything about the objects {\tt x, y} and {\tt f}, issue +\begin{verbatim} +)clear properties x y f +\end{verbatim} + +The word {\tt properties} may be abbreviated to the single letter +``{\tt p}''. +\begin{verbatim} +)clear p all +)clear p x +)clear p x y f +\end{verbatim} +All definitions of functions and values of variables may be removed by either +\begin{verbatim} +)clear value all +)clear v all +\end{verbatim} +This retains whatever declarations the objects had. To remove definitions and +values for the specific objects {\tt x, y} and {\tt f}, issue +\begin{verbatim} +)clear value x y f +)clear v x y f +\end{verbatim} +To remove the declarations of everything while leaving the definitions and +values, issue +\begin{verbatim} +)clear mode all +)clear m all +\end{verbatim} +To remove declarations for the specific objects {\tt x, y} and {\tt f}, issue +\begin{verbatim} +)clear mode x y f +)clear m x y f +\end{verbatim} +The {\tt )display names} and {\tt )display properties} commands may be used +to see what is currently in the workspace. + +The command +\begin{verbatim} +)clear completely +\end{verbatim} +does everything that {\tt )clear all} does, and also clears the internal +system function and constructor caches. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmddisplayTitle''}{ugSysCmddisplayPage} +in section \ugSysCmddisplayNumber +\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} +in section \ugSysCmdhistoryNumber +\downlink{``\ugSysCmdundoTitle''}{ugSysCmdundoPage} +in section \ugSysCmdundoNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdcompileTitle}{)compile} +\newcommand{\ugSysCmdcompileNumber}{B.7.} + +@ +\section{)compile} +\label{ugSysCmdcompilePage} +\begin{itemize} +\item ugSysCmdcdPage \ref{ugSysCmdcdPage} on +page~\pageref{ugSysCmdcdPage} +\item ugSysCmdtracePage \ref{ugSysCmdtracePage} on +page~\pageref{ugSysCmdtracePage} +\item ugSysCmdabbreviationPage \ref{ugSysCmdabbreviationPage} on +page~\pageref{ugSysCmdabbreviationPage} +\item ugSysCmdeditPage \ref{ugSysCmdeditPage} on +page~\pageref{ugSysCmdeditPage} +\item ugSysCmdlibraryPage \ref{ugSysCmdlibraryPage} on +page~\pageref{ugSysCmdlibraryPage} +\end{itemize} +\index{pages!ugSysCmdcompilePage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdcompilePage} +\index{ugSysCmdcompilePage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdcompilePage}{B.7. )compile} +\beginscroll + + +\par\noindent{\bf User Level Required:} compiler + +\par\noindent{\bf Command Syntax:} + +\begin{items} +\item {\tt )compile} +\item {\tt )compile {\it fileName}} +\item {\tt )compile {\it fileName}.as} +\item {\tt )compile {\it directory/fileName}.as} +\item {\tt )compile {\it fileName}.ao} +\item {\tt )compile {\it directory/fileName}.ao} +\item {\tt )compile {\it fileName}.al} +\item {\tt )compile {\it directory/fileName}.al} +\item {\tt )compile {\it fileName}.lsp} +\item {\tt )compile {\it directory/fileName}.lsp} +\item {\tt )compile {\it fileName}.spad} +\item {\tt )compile {\it directory/fileName}.spad} +\item {\tt )compile {\it fileName} )new} +\item {\tt )compile {\it fileName} )old} +\item {\tt )compile {\it fileName} )translate} +\item {\tt )compile {\it fileName} )quiet} +\item {\tt )compile {\it fileName} )noquiet} +\item {\tt )compile {\it fileName} )moreargs} +\item {\tt )compile {\it fileName} )onlyargs} +\item {\tt )compile {\it fileName} )break} +\item {\tt )compile {\it fileName} )nobreak} +\item {\tt )compile {\it fileName} )library} +\item {\tt )compile {\it fileName} )nolibrary} +\item {\tt )compile {\it fileName} )vartrace} +\item {\tt )compile {\it fileName} )constructor} {\it nameOrAbbrev} +\end{items} + +\par\noindent{\bf Command Description:} + +You use this command to invoke the new Axiom library compiler or +the old Axiom system compiler. +The {\tt )compile} system command is actually a combination of +Axiom processing and a call to the \axiomxl{} compiler. +It is performing double-duty, acting as a front-end to +both the \axiomxl{} compiler and the old Axiom system +compiler. +(The old Axiom system compiler was written in Lisp and was +an integral part of the Axiom environment. +The \axiomxl{} compiler is written in C and executed by the operating system +when called from within Axiom.) + +The command compiles files with file extensions {\it .as, .ao} +and {\it .al} with the +\axiomxl{} compiler and files with file extension {\it .spad} with the +old Axiom system compiler. +It also can compile files with file extension {\it .lsp}. These +are assumed to be Lisp files genererated by the \axiomxl{} +compiler. +If you omit the file extension, the command looks to see if you +have specified the {\tt )new} or {\tt )old} option. +If you have given one of these options, the corresponding compiler +is used. +Otherwise, the command first looks in the standard system +directories for files with extension {\it .as, .ao} and {\it +.al} and then files with extension {\it .spad}. +The first file found has the appropriate compiler invoked on it. +If the command cannot find a matching file, an error message is +displayed and the command terminates. + +The {\tt )translate} option is used to invoke a special version +of the old system compiler that will translate a {\it .spad} file +to a {\it .as} file. That is, the {\it .spad} file will be parsed and +analyzed and a file using the new syntax will be created. By default, +the {\it .as} file is created in the same directory as the +{\it .spad} file. If that directory is not writable, the current +directory is used. If the current directory is not writable, an +error message is given and the command terminates. +Note that {\tt )translate} implies the {\tt )old} option so the +file extension can safely be omitted. If {\tt )translate} is +given, all other options are ignored. +Please be aware that the translation is not necessarily one +hundred percent complete or correct. +You should attempt to compile the output with the \axiomxl{} compiler +and make any necessary corrections. + +We now describe the options for the new \axiomxl{} compiler. + +The first thing {\tt )compile} does is look for a source code +filename among its arguments. +Thus +\begin{verbatim} +)compile mycode.as +)compile /u/jones/as/mycode.as +)compile mycode +\end{verbatim} +all invoke {\tt )compiler} on the file {\tt +/u/jones/as/mycode.as} if the current Axiom working +directory is {\tt /u/jones/as.} (Recall that you can set the +working directory via the {\tt )cd} command. If you don't set it +explicitly, it is the directory from which you started +Axiom.) + +This is frequently all you need to compile your file. +This simple command: +\indent{4} +\beginitems +\item[1. ] Invokes the \axiomxl{} compiler and produces Lisp output. +\item[2. ] Calls the Lisp compiler if the \axiomxl{} compilation was +successful. +\item[3. ] Uses the {\tt )library} command to tell Axiom about +the contents of your compiled file and arrange to have those +contents loaded on demand. +\enditems +\indent{0} + +Should you not want the {\tt )library} command automatically +invoked, call {\tt )compile} with the {\tt )nolibrary} option. +For example, +\begin{verbatim} +)compile mycode.as )nolibrary +\end{verbatim} + +The general description of \axiomxl{} command line arguments is in +the \axiomxl{} documentation. +The default options used by the {\tt )compile} command can be +viewed and set using the {\tt )set compiler args} Axiom +system command. +The current defaults are +\begin{verbatim} +-O -Fasy -Fao -Flsp -laxiom -Mno-AXL_W_WillObsolete -DAxiom +\end{verbatim} +These options mean: +\indent{4} +\beginitems +\item[-] {\tt -O}: perform all optimizations, +\item[-] {\tt -Fasy}: generate a {\tt .asy} file, +\item[-] {\tt -Fao}: generate a {\tt .ao} file, +\item[-] {\tt -Flsp}: generate a {\tt .lsp} (Lisp) +file, +\item[-] {\tt -laxiom}: use the {\tt axiom} library {\tt libaxiom.al}, +\item[-] {\tt -Mno-AXL\_W\_WillObsolete}: do not display messages +about older generated files becoming obsolete, and +\item[-] {\tt -DAxiom}: define the global assertion {\tt Axiom} so that the +\axiomxl{} libraries for generating stand-alone code +are not accidentally used with Axiom. +\enditems +\indent{0} + +To supplement these default arguments, use the {\tt )moreargs} option on +{\tt )compile.} +For example, +\begin{verbatim} +)compile mycode.as )moreargs "-v" +\end{verbatim} +uses the default arguments and appends the {\tt -v} (verbose) +argument flag. +The additional argument specification {\bf must be enclosed in +double quotes.} + +To completely replace these default arguments for a particular +use of {\tt )compile}, use the {\tt )onlyargs} option. +For example, +\begin{verbatim} +)compile mycode.as )onlyargs "-v -O" +\end{verbatim} +only uses the {\tt -v} (verbose) and {\tt -O} (optimize) +arguments. +The argument specification {\bf must be enclosed in double quotes.} +In this example, Lisp code is not produced and so the compilation +output will not be available to Axiom. + +To completely replace the default arguments for all calls to {\tt +)compile} within your Axiom session, use {\tt )set compiler args.} +For example, to use the above arguments for all compilations, issue +\begin{verbatim} +)set compiler args "-v -O" +\end{verbatim} +Make sure you include the necessary {\tt -l} and {\tt -Y} +arguments along with those needed for Lisp file creation. +As above, {\bf the argument specification must be enclosed in double +quotes.} + +By default, the {\tt )library} system command {\it exposes} all +domains and categories it processes. +This means that the Axiom intepreter will consider those +domains and categories when it is trying to resolve a reference +to a function. +Sometimes domains and categories should not be exposed. +For example, a domain may just be used privately by another +domain and may not be meant for top-level use. +The {\tt )library} command should still be used, though, so that +the code will be loaded on demand. +In this case, you should use the {\tt )nolibrary} option on {\tt +)compile} and the {\tt )noexpose} option in the {\tt )library} +command. For example, +\begin{verbatim} +)compile mycode.as )nolibrary +)library mycode )noexpose +\end{verbatim} + +Once you have established your own collection of compiled code, +you may find it handy to use the {\tt )dir} option on the +{\tt )library} command. +This causes {\tt )library} to process all compiled code in the +specified directory. For example, +\begin{verbatim} +)library )dir /u/jones/as/quantum +\end{verbatim} +You must give an explicit directory after {\tt )dir}, even if you +want all compiled code in the current working directory +processed, e.g. +\begin{verbatim} +)library )dir . +\end{verbatim} + +The {\tt )compile} command works with several file extensions. We saw +above what happens when it is invoked on a file with extension {\tt +.as.} A {\tt .ao} file is a portable binary compiled version of a +{\tt .as} file, and {\tt )compile} simply passes the {\tt .ao} file +onto \axiomxl{}. The generated Lisp file is compiled and {\tt )library} +is automatically called, just as if you had specified a {\tt .as} file. + +A {\tt .al} file is an archive file containing {\tt .ao} files. The +archive is created (on Unix systems) with the {\tt ar} program. When +{\tt )compile} is given a {\tt .al} file, it creates a directory whose +name is based on that of the archive. For example, if you issue +\begin{verbatim} +)compile mylib.al +\end{verbatim} +the directory {\tt mylib.axldir} is created. All +members of the archive are unarchived into the +directory and {\tt )compile} is called on each {\tt .ao} file found. It +is your responsibility to remove the directory and its contents, if you +choose to do so. + +A {\tt .lsp} file is a Lisp source file, presumably, in our context, +generated by \axiomxl{} when called with the {\tt -Flsp} option. When +{\tt )compile} is used with a {\tt .lsp} file, the Lisp file is +compiled and {\tt )library} is called. You must also have present a +{\tt .asy} generated from the same source file. + +The following are descriptions of options for the old system compiler. + +You can compile category, domain, and package constructors +contained in files with file extension {\it .spad}. +You can compile individual constructors or every constructor +in a file. + +The full filename is remembered between invocations of this command and +{\tt )edit} commands. +The sequence of commands +\begin{verbatim} +)compile matrix.spad +)edit +)compile +\end{verbatim} +will call the compiler, edit, and then call the compiler again on the +file {\bf matrix.spad.} If you do not specify a {\it directory,} the +working current directory (see +\downlink{``\ugSysCmdcdTitle''}{ugSysCmdcdPage} in Section +\ugSysCmdcdNumber\ignore{ugSysCmdcd}) is searched for the file. If +the file is not found, the standard system directories are searched. + +If you do not give any options, all constructors within a file are +compiled. Each constructor should have an {\tt )abbreviation} command +in the file in which it is defined. We suggest that you place the +{\tt )abbreviation} commands at the top of the file in the order in +which the constructors are defined. The list of commands serves as a +table of contents for the file. + +The {\tt )library} option causes directories containing the compiled +code for each constructor to be created in the working current +directory. The name of such a directory consists of the constructor +abbreviation and the {\bf .nrlib} file extension. For example, the +directory containing the compiled code for the \axiomType{MATRIX} +constructor is called {\bf MATRIX.nrlib.} The {\tt )nolibrary} option +says that such files should not be created. The default is {\tt +)library.} Note that the semantics of {\tt )library} and {\tt +)nolibrary} for the new \axiomxl{} compiler and for the old system +compiler are completely different. + +The {\tt )vartrace} option causes the compiler to generate extra code +for the constructor to support conditional tracing of variable +assignments. (see +\downlink{``\ugSysCmdtraceTitle''}{ugSysCmdtracePage} in Section +\ugSysCmdtraceNumber\ignore{ugSysCmdtrace}). Without this option, this +code is suppressed and one cannot use the {\tt )vars} option for the +trace command. + +The {\tt )constructor} option is used to +specify a particular constructor to compile. +All other constructors in the file are ignored. +The constructor name or abbreviation follows {\tt )constructor.} +Thus either +\begin{verbatim} +)compile matrix.spad )constructor RectangularMatrix +\end{verbatim} +or +\begin{verbatim} +)compile matrix.spad )constructor RMATRIX +\end{verbatim} +compiles the \axiomType{RectangularMatrix} constructor +defined in {\bf matrix.spad.} + +The {\tt )break} and {\tt )nobreak} options determine what the old +system compiler does when it encounters an error. {\tt )break} is the +default and it indicates that processing should stop at the first +error. The value of the {\tt )set break} variable then controls what +happens. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdabbreviationTitle''}{ugSysCmdabbreviationPage} +in section \ugSysCmdabbreviationNumber +\downlink{``\ugSysCmdeditTitle''}{ugSysCmdeditPage} +in section \ugSysCmdeditNumber +\downlink{``\ugSysCmdlibraryTitle''}{ugSysCmdlibraryPage} +in section \ugSysCmdlibraryNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmddisplayTitle}{)display} +\newcommand{\ugSysCmddisplayNumber}{B.8.} + +@ +\section{)display} +\label{ugSysCmddisplayPage} +\begin{itemize} +\item ugSysCmdclearPage \ref{ugSysCmdclearPage} on +page~\pageref{ugSysCmdclearPage} +\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on +page~\pageref{ugSysCmdhistoryPage} +\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on +page~\pageref{ugSysCmdsetPage} +\item ugSysCmdshowPage \ref{ugSysCmdshowPage} on +page~\pageref{ugSysCmdshowPage} +\item ugSysCmdwhatPage \ref{ugSysCmdwhatPage} on +page~\pageref{ugSysCmdwhatPage} +\end{itemize} +\index{pages!ugSysCmddisplayPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmddisplayPage} +\index{ugSysCmddisplayPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmddisplayPage}{B.8. )display} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item {\tt )display all} +\item {\tt )display properties} +\item {\tt )display properties all} +\item {\tt )display properties} {\it \lanb{}obj1 \lanb{}obj2 ...\ranb{}\ranb{}} +\item {\tt )display value all} +\item {\tt )display value} {\it \lanb{}obj1 \lanb{}obj2 ...\ranb{}\ranb{}} +\item {\tt )display mode all} +\item {\tt )display mode} {\it \lanb{}obj1 \lanb{}obj2 ...\ranb{}\ranb{}} +\item {\tt )display names} +\item {\tt )display operations} {\it opName} +\end{items} +\par\noindent{\bf Command Description:} + +This command is used to display the contents of the workspace and +signatures of functions with a given name.\footnote{A +\spadgloss{signature} gives the argument and return types of a +function.} + +The command +\begin{verbatim} +)display names +\end{verbatim} +lists the names of all user-defined objects in the workspace. This is useful +if you do not wish to see everything about the objects and need only be +reminded of their names. + +The commands +\begin{verbatim} +)display all +)display properties +)display properties all +\end{verbatim} +all do the same thing: show the values and types and declared modes of all +variables in the workspace. If you have defined functions, their signatures +and definitions will also be displayed. + +To show all information about a particular variable or user functions, +for example, something named {\tt d}, issue +\begin{verbatim} +)display properties d +\end{verbatim} +To just show the value (and the type) of {\tt d}, issue +\begin{verbatim} +)display value d +\end{verbatim} +To just show the declared mode of {\tt d}, issue +\begin{verbatim} +)display mode d +\end{verbatim} + +All modemaps for a given operation may be +displayed by using {\tt )display operations}. +A \spadgloss{modemap} is a collection of information about a particular +reference +to an operation. This includes the types of the arguments and the return +value, the location of the implementation and any conditions on the types. +The modemap may contain patterns. The following displays the modemaps for the +operation \spadfunFrom{complex}{ComplexCategory}: +\begin{verbatim} +)d op complex +\end{verbatim} + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdclearTitle''}{ugSysCmdclearPage} +in section \ugSysCmdclearNumber +\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} +in section \ugSysCmdhistoryNumber +\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} +in section \ugSysCmdsetNumber +\downlink{``\ugSysCmdshowTitle''}{ugSysCmdshowPage} +in section \ugSysCmdshowNumber +\downlink{``\ugSysCmdwhatTitle''}{ugSysCmdwhatPage} +in section \ugSysCmdwhatNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdeditTitle}{)edit} +\newcommand{\ugSysCmdeditNumber}{B.9.} + +@ +\section{)edit} +\label{ugSysCmdeditPage} +\begin{itemize} +\item ugSysCmdsystemPage \ref{ugSysCmdsystemPage} on +page~\pageref{ugSysCmdsystemPage} +\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on +page~\pageref{ugSysCmdcompilePage} +\item ugSysCmdreadPage \ref{ugSysCmdreadPage} on +page~\pageref{ugSysCmdreadPage} +\end{itemize} +\index{pages!ugSysCmdeditPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdeditPage} +\index{ugSysCmdeditPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdeditPage}{B.9. )edit} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )edit} \lanb{}{\it filename}\ranb{} +\end{items} +\par\noindent{\bf Command Description:} + +This command is used to edit files. +It works in conjunction with the {\tt )read} +and {\tt )compile} commands to remember the name +of the file on which you are working. +By specifying the name fully, you can edit any file you wish. +Thus +\begin{verbatim} +)edit /u/julius/matrix.input +\end{verbatim} +will place you in an editor looking at the file +{\tt /u/julius/matrix.input}. +By default, the editor is {\tt vi}, +but if you have an EDITOR shell environment variable defined, that editor +will be used. +When Axiom is running under the X Window System, +it will try to open a separate {\tt xterm} running your editor if +it thinks one is necessary. +For example, under the Korn shell, if you issue +\begin{verbatim} +export EDITOR=emacs +\end{verbatim} +then the emacs +editor will be used by \spadcmd{)edit}. + +If you do not specify a file name, the last file you edited, +read or compiled will be used. +If there is no ``last file'' you will be placed in the editor editing +an empty unnamed file. + +It is possible to use the {\tt )system} command to edit a file directly. +For example, +\begin{verbatim} +)system emacs /etc/rc.tcpip +\end{verbatim} +calls {\tt emacs} to edit the file. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdsystemTitle''}{ugSysCmdsystemPage} +in section \ugSysCmdsystemNumber +\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} +in section \ugSysCmdcompileNumber +\downlink{``\ugSysCmdreadTitle''}{ugSysCmdreadPage} +in section \ugSysCmdreadNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdfinTitle}{)fin} +\newcommand{\ugSysCmdfinNumber}{B.10.} + +@ +\section{)fin} +\label{ugSysCmdfinPage} +\begin{itemize} +\item ugSysCmdpquitPage \ref{ugSysCmdpquitPage} on +page~\pageref{ugSysCmdpquitPage} +\end{itemize} +\index{pages!ugSysCmdfinPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdfinPage} +\index{ugSysCmdfinPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdfinPage}{B.10. )fin} +\beginscroll + + +\par\noindent{\bf User Level Required:} development + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item {\tt )fin} +\end{items} +\par\noindent{\bf Command Description:} + +This command is used by Axiom +developers to leave the Axiom system and return +to the underlying \Lisp{} system. +To return to Axiom, issue the +``{\tt (\vertline{}spad\vertline{})}'' +function call to \Lisp{}. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdpquitTitle''}{ugSysCmdpquitPage} +in section \ugSysCmdpquitNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdframeTitle}{)frame} +\newcommand{\ugSysCmdframeNumber}{B.11.} + +@ +\section{)frame} +\label{ugSysCmdframePage} +\begin{itemize} +\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on +page~\pageref{ugSysCmdhistoryPage} +\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on +page~\pageref{ugSysCmdsetPage} +\end{itemize} +\index{pages!ugSysCmdframePage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdframePage} +\index{ugSysCmdframePage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdframePage}{B.11. )frame} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )frame new {\it frameName}} +\item{\tt )frame drop {\it \lanb{}frameName\ranb{}}} +\item{\tt )frame next} +\item{\tt )frame last} +\item{\tt )frame names} +\item{\tt )frame import {\it frameName} {\it \lanb{}objectName1 \lanb{}objectName2 ...\ranb{}\ranb{}}} +\item{\tt )set message frame on \vertline{} off} +\item{\tt )set message prompt frame} +\end{items} + +\par\noindent{\bf Command Description:} + +A {\it frame} can be thought of as a logical session within the +physical session that you get when you start the system. You can +have as many frames as you want, within the limits of your computer's +storage, paging space, and so on. +Each frame has its own {\it step number}, {\it environment} and {\it history.} +You can have a variable named {\tt a} in one frame and it will +have nothing to do with anything that might be called {\tt a} in +any other frame. + +Some frames are created by the \HyperName{} program and these can +have pretty strange names, since they are generated automatically. +To find out the names +of all frames, issue +\begin{verbatim} +)frame names +\end{verbatim} +It will indicate the name of the current frame. + +You create a new frame +``{\bf quark}'' by issuing +\begin{verbatim} +)frame new quark +\end{verbatim} +The history facility can be turned on by issuing either +{\tt )set history on} or {\tt )history )on}. +If the history facility is on and you are saving history information +in a file rather than in the Axiom environment +then a history file with filename {\bf quark.axh} will +be created as you enter commands. +If you wish to go back to what +you were doing in the +``{\bf initial}'' frame, use +\begin{verbatim} +)frame next +\end{verbatim} +or +\begin{verbatim} +)frame last +\end{verbatim} +to cycle through the ring of available frames to get back to +``{\bf initial}''. + +If you want to throw +away a frame (say ``{\bf quark}''), issue +\begin{verbatim} +)frame drop quark +\end{verbatim} +If you omit the name, the current frame is dropped. + +If you do use frames with the history facility on and writing to a file, +you may want to delete some of the older history files. +These are directories, so you may want to issue a command like +{\tt rm -r quark.axh} to the operating system. + +You can bring things from another frame by using +{\tt )frame import}. +For example, to bring the {\tt f} and {\tt g} from the frame ``{\bf quark}'' +to the current frame, issue +\begin{verbatim} +)frame import quark f g +\end{verbatim} +If you want everything from the frame ``{\bf quark}'', issue +\begin{verbatim} +)frame import quark +\end{verbatim} +You will be asked to verify that you really want everything. + +There are two {\tt )set} flags +to make it easier to tell where you are. +\begin{verbatim} +)set message frame on | off +\end{verbatim} +will print more messages about frames when it is set on. +By default, it is off. +\begin{verbatim} +)set message prompt frame +\end{verbatim} +will give a prompt +that looks like +\begin{verbatim} +initial (1) -> +\end{verbatim} +when you start up. In this case, the frame name and step make up the +prompt. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} +in section \ugSysCmdhistoryNumber +\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} +in section \ugSysCmdsetNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdhelpTitle}{)help} +\newcommand{\ugSysCmdhelpNumber}{B.12.} + +@ +\section{)help} +\label{ugSysCmdhelpPage} +\index{pages!ugSysCmdhelpPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdhelpPage} +\index{ugSysCmdhelpPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdhelpPage}{B.12. )help} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )help} +\item{\tt )help} {\it commandName} +\end{items} + +\par\noindent{\bf Command Description:} + +This command displays help information about system commands. +If you issue +\begin{verbatim} +)help +\end{verbatim} +then this very text will be shown. +You can also give the name or abbreviation of a system command +to display information about it. +For example, +\begin{verbatim} +)help clear +\end{verbatim} +will display the description of the {\tt )clear} system command. + +All this material is available in the Axiom User Guide +and in \HyperName{}. +In \HyperName{}, choose the {\bf Commands} item from the +{\bf Reference} menu. + + + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdhistoryTitle}{)history} +\newcommand{\ugSysCmdhistoryNumber}{B.13.} + +@ +\section{)history} +\label{ugSysCmdhistoryPage} +\begin{itemize} +\item ugSysCmdframePage \ref{ugSysCmdframePage} on +page~\pageref{ugSysCmdframePage} +\item ugSysCmdcdPage \ref{ugSysCmdcdPage} on +page~\pageref{ugSysCmdcdPage} +\item ugSysCmdreadPage \ref{ugSysCmdreadPage} on +page~\pageref{ugSysCmdreadPage} +\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on +page~\pageref{ugSysCmdsetPage} +\item ugSysCmdundoPage \ref{ugSysCmdundoPage} on +page~\pageref{ugSysCmdundoPage} +\end{itemize} +\index{pages!ugSysCmdhistoryPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdhistoryPage} +\index{ugSysCmdhistoryPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdhistoryPage}{B.13. )history} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )history )on} +\item{\tt )history )off} +\item{\tt )history )write} {\it historyInputFileName} +\item{\tt )history )show \lanb{}{\it n}\ranb{} \lanb{}both\ranb{}} +\item{\tt )history )save} {\it savedHistoryName} +\item{\tt )history )restore} \lanb{}{\it savedHistoryName}\ranb{} +\item{\tt )history )reset} +\item{\tt )history )change} {\it n} +\item{\tt )history )memory} +\item{\tt )history )file} +\item{\tt \%} +\item{\tt \%\%({\it n})} +\item{\tt )set history on \vertline{} off} +\end{items} + +\par\noindent{\bf Command Description:} + +The {\it history} facility within Axiom allows you to restore your +environment to that of another session and recall previous +computational results. +Additional commands allow you to review previous +input lines and to create an {\bf .input} file of the lines typed to +Axiom. + +Axiom saves your input and output if the history facility is +turned on (which is the default). +This information is saved if either of +\begin{verbatim} +)set history on +)history )on +\end{verbatim} +has been issued. +Issuing either +\begin{verbatim} +)set history off +)history )off +\end{verbatim} +will discontinue the recording of information. + +Whether the facility is disabled or not, the value of \spadSyntax{\%} +in Axiom always refers to the result of the last computation. If you +have not yet entered anything, \spadSyntax{\%} evaluates to an object +of type \spadtype{Variable('\%)}. The function \spadSyntax{\%\%} may +be used to refer to other previous results if the history facility is +enabled. In that case, {\tt \%\%(n)} is the output from step {\tt n} +if {\tt n > 0}. If {\tt n < 0}, the step is computed relative to the +current step. Thus {\tt \%\%(-1)} is also the previous step, {\tt +\%\%(-2)}, is the step before that, and so on. If an invalid step +number is given, Axiom will signal an error. + +The {\it environment} information can either be saved in a file or +entirely in memory (the default). Each frame +(\downlink{``\ugSysCmdframeTitle''}{ugSysCmdframePage} in Section +\ugSysCmdframeNumber\ignore{ugSysCmdframe}) has its own history +database. When it is kept in a file, some of it may also be kept in +memory for efficiency. When the information is saved in a file, the +name of the file is of the form {\bf FRAME.axh} where ``{\bf FRAME}'' +is the name of the current frame. The history file is placed in the +current working directory (see +\downlink{``\ugSysCmdcdTitle''}{ugSysCmdcdPage} in Section +\ugSysCmdcdNumber\ignore{ugSysCmdcd}). Note that these history +database files are not text files (in fact, they are directories +themselves), and so are not in human-readable format. + +The options to the {\tt )history} command are as follows: + +\indent{0} +\beginitems +\item[{\tt )change} {\it n}] +will set the number of steps that are saved in memory to {\it n}. +This option only has effect when the history data is maintained in a +file. +If you have issued {\tt )history )memory} (or not changed the default) +there is no need to use {\tt )history )change}. + +\item[{\tt )on}] +will start the recording of information. +If the workspace is not empty, you will be asked to confirm this +request. +If you do so, the workspace will be cleared and history data will begin +being saved. +You can also turn the facility on by issuing {\tt )set history on}. + +\item[{\tt )off}] +will stop the recording of information. +The {\tt )history )show} command will not work after issuing this +command. +Note that this command may be issued to save time, as there is some +performance penalty paid for saving the environment data. +You can also turn the facility off by issuing {\tt )set history off}. + +\item[{\tt )file}] +indicates that history data should be saved in an external file on disk. + +\item[{\tt )memory}] +indicates that all history data should be kept in memory rather than +saved in a file. +Note that if you are computing with very large objects it may not be +practical to kept this data in memory. + +\item[{\tt )reset}] +will flush the internal list of the most recent workspace calculations +so that the data structures may be garbage collected by the underlying +\Lisp{} system. +Like {\tt )history )change}, this option only has real effect when +history data is being saved in a file. + +\item[{\tt )restore} \lanb{}{\it savedHistoryName}\ranb{}] +completely clears the environment and restores it to a saved session, if +possible. +The {\tt )save} option below allows you to save a session to a file +with a given name. If you had issued +{\tt )history )save jacobi} +the command +{\tt )history )restore jacobi} +would clear the current workspace and load the contents of the named +saved session. If no saved session name is specified, the system looks +for a file called {\bf last.axh}. + +\item[{\tt )save} {\it savedHistoryName}] +is used to save a snapshot of the environment in a file. +This file is placed in the current working directory +(see \downlink{``\ugSysCmdcdTitle''}{ugSysCmdcdPage} +in Section \ugSysCmdcdNumber\ignore{ugSysCmdcd}). +Use {\tt )history )restore} to restore the environment to the state +preserved in the file. +This option also creates an input file containing all the lines of input +since you created the workspace frame (for example, by starting your +Axiom session) or last did a \spadcmd{)clear all} or +\spadcmd{)clear completely}. + +\item[{\tt )show} \lanb{}{\it n}\ranb{} \lanb{}{\tt both}\ranb{}] +can show previous input lines and output results. +{\tt )show} will display up to twenty of the last input lines +(fewer if you haven't typed in twenty lines). +{\tt )show} {\it n} will display up to {\it n} of the last input lines. +{\tt )show both} will display up to five of the last input lines and +output results. +{\tt )show} {\it n} {\tt both} will display up to {\it n} of the last +input lines and output results. + +\item[{\tt )write} {\it historyInputFile}] +creates an {\bf .input} file with the input lines typed since the start +of the session/frame or the last {\tt )clear all} or {\tt )clear +completely}. +If {\it historyInputFileName} does not +contain a period (``.'') in the filename, +{\bf .input} is appended to it. +For example, +{\tt )history )write chaos} +and +{\tt )history )write chaos.input} +both write the input lines to a file called {\bf chaos.input} in your +current working directory. +If you issued one or more {\tt )undo} commands, +{\tt )history )write} +eliminates all +input lines backtracked over as a result of {\tt )undo}. +You can edit this file and then use {\tt )read} to have Axiom process +the contents. +\enditems +\indent{0} + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdframeTitle''}{ugSysCmdframePage} +in section \ugSysCmdframeNumber +\downlink{``\ugSysCmdreadTitle''}{ugSysCmdreadPage} +in section \ugSysCmdreadNumber +\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} +in section \ugSysCmdsetNumber +\downlink{``\ugSysCmdundoTitle''}{ugSysCmdundoPage} +in section \ugSysCmdundoNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdlibraryTitle}{)library} +\newcommand{\ugSysCmdlibraryNumber}{B.14.} + +@ +\section{)library} +\label{ugSysCmdlibraryPage} +\begin{itemize} +\item ugSysCmdcdPage \ref{ugSysCmdcdPage} on +page~\pageref{ugSysCmdcdPage} +\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on +page~\pageref{ugSysCmdcompilePage} +\item ugSysCmdframePage \ref{ugSysCmdframePage} on +page~\pageref{ugSysCmdframePage} +\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on +page~\pageref{ugSysCmdsetPage} +\end{itemize} +\index{pages!ugSysCmdlibraryPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdlibraryPage} +\index{ugSysCmdlibraryPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdlibraryPage}{B.14. )library} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )library {\it libName1 \lanb{}libName2 ...\ranb{}}} +\item{\tt )library )dir {\it dirName}} +\item{\tt )library )only {\it objName1 \lanb{}objlib2 ...\ranb{}}} +\item{\tt )library )noexpose} +\end{items} + +\par\noindent{\bf Command Description:} + +This command replaces the {\tt )load} system command that +was available in Axiom releases before version 2.0. +The \spadcmd{)library} command makes available to Axiom the compiled +objects in the libraries listed. + +For example, if you {\tt )compile dopler.as} in your home +directory, issue {\tt )library dopler} to have Axiom look +at the library, determine the category and domain constructors present, +update the internal database with various properties of the +constructors, and arrange for the constructors to be +automatically loaded when needed. +If the {\tt )noexpose} option has not been given, the +constructors will be exposed (that is, available) in the current +frame. + +If you compiled a file with the old system compiler, you will +have an {\it nrlib} present, for example, {\it DOPLER.nrlib,} +where {\tt DOPLER} is a constructor abbreviation. +The command {\tt )library DOPLER} will then do the analysis and +database updates as above. + +To tell the system about all libraries in a directory, use +{\tt )library )dir dirName} where {\tt dirName} is an explicit +directory. +You may specify ``.'' as the directory, which means the current +directory from which you started the system or the one you set +via the \spadcmd{)cd} command. The directory name is required. + +You may only want to tell the system about particular +constructors within a library. In this case, use the {\tt )only} +option. The command {\tt )library dopler )only Test1} will only +cause the {\sf Test1} constructor to be analyzed, autoloaded, +etc.. + +Finally, each constructor in a library are usually automatically exposed when the +\spadcmd{)library} command is used. Use the {\tt )noexpose} +option if you not want them exposed. At a later time you can use +{\tt )set expose add constructor} to expose any hidden +constructors. + +{\bf Note for Axiom beta testers:} At various times this +command was called {\tt )local} and {\tt )with} before the name +{\tt )library} became the official name. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdcdTitle''}{ugSysCmdcdPage} in section \ugSysCmdcdNumber +\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} +in section \ugSysCmdcompileNumber +\downlink{``\ugSysCmdframeTitle''}{ugSysCmdframePage} +in section \ugSysCmdframeNumber +\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} +in section \ugSysCmdsetNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdlispTitle}{)lisp} +\newcommand{\ugSysCmdlispNumber}{B.15.} + +@ +\section{)lisp} +\label{ugSysCmdlispPage} +\begin{itemize} +\item ugSysCmdsystemPage \ref{ugSysCmdsystemPage} on +page~\pageref{ugSysCmdsystemPage} +\item ugSysCmdbootPage \ref{ugSysCmdbootPage} on +page~\pageref{ugSysCmdbootPage} +\item ugSysCmdfinPage \ref{ugSysCmdfinPage} on +page~\pageref{ugSysCmdfinPage} +\end{itemize} +\index{pages!ugSysCmdlispPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdlispPage} +\index{ugSysCmdlispPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdlispPage}{B.15. )lisp} +\beginscroll + + +\par\noindent{\bf User Level Required:} development + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item {\tt )lisp} {\it\lanb{}lispExpression\ranb{}} +\end{items} + +\par\noindent{\bf Command Description:} + +This command is used by Axiom system developers to have single +expressions evaluated by the \Lisp{} system on which +Axiom is built. +The {\it lispExpression} is read by the \Lisp{} reader and +evaluated. +If this expression is not complete (unbalanced parentheses, say), the reader +will wait until a complete expression is entered. + +Since this command is only useful for evaluating single expressions, the +{\tt )fin} +command may be used to drop out of Axiom into \Lisp{}. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdsystemTitle''}{ugSysCmdsystemPage} +in section \ugSysCmdsystemNumber +\downlink{``\ugSysCmdbootTitle''}{ugSysCmdbootPage} +in section \ugSysCmdbootNumber +\downlink{``\ugSysCmdfinTitle''}{ugSysCmdfinPage} +in section \ugSysCmdfinNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdloadTitle}{)load} +\newcommand{\ugSysCmdloadNumber}{B.16.} + +@ +\section{)load} +\label{ugSysCmdloadPage} +\index{pages!ugSysCmdloadPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdloadPage} +\index{ugSysCmdloadPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdloadPage}{B.16. )load} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +%% BEGIN OBSOLETE +%% END OBSOLETE + +\par\noindent{\bf Command Description:} + +This command is obsolete. Use \spadcmd{)library} instead. + +%% BEGIN OBSOLETE + +% +% +% +% + +%% END OBSOLETE + + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdltraceTitle}{)ltrace} +\newcommand{\ugSysCmdltraceNumber}{B.17.} + +@ +\section{)ltrace} +\label{ugSysCmdltracePage} +\begin{itemize} +\item ugSysCmdbootPage \ref{ugSysCmdbootPage} on +page~\pageref{ugSysCmdbootPage} +\item ugSysCmdlispPage \ref{ugSysCmdlispPage} on +page~\pageref{ugSysCmdlispPage} +\item ugSysCmdtracePage \ref{ugSysCmdtracePage} on +page~\pageref{ugSysCmdtracePage} +\end{itemize} +\index{pages!ugSysCmdltracePage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdltracePage} +\index{ugSysCmdltracePage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdltracePage}{B.17. )ltrace} +\beginscroll + + +\par\noindent{\bf User Level Required:} development + +\par\noindent{\bf Command Syntax:} + +This command has the same arguments as options as the +\spadcmd{)trace} command. + +\par\noindent{\bf Command Description:} + +This command is used by Axiom system developers to trace +\Lisp{} or +BOOT functions. +It is not supported for general use. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdbootTitle''}{ugSysCmdbootPage} +in section \ugSysCmdbootNumber +\downlink{``\ugSysCmdlispTitle''}{ugSysCmdlispPage} +in section \ugSysCmdlispNumber +\downlink{``\ugSysCmdtraceTitle''}{ugSysCmdtracePage} +in section \ugSysCmdtraceNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdpquitTitle}{)pquit} +\newcommand{\ugSysCmdpquitNumber}{B.18.} + +@ +\section{)pquit} +\label{ugSysCmdpquitPage} +\begin{itemize} +\item ugSysCmdfinPage \ref{ugSysCmdfinPage} on +page~\pageref{ugSysCmdfinPage} +\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on +page~\pageref{ugSysCmdhistoryPage} +\item ugSysCmdclosePage \ref{ugSysCmdclosePage} on +page~\pageref{ugSysCmdclosePage} +\item ugSysCmdquitPage \ref{ugSysCmdquitPage} on +page~\pageref{ugSysCmdquitPage} +\item ugSysCmdsystemPage \ref{ugSysCmdsystemPage} on +page~\pageref{ugSysCmdsystemPage} +\end{itemize} +\index{pages!ugSysCmdpquitPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdpquitPage} +\index{ugSysCmdpquitPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdpquitPage}{B.18. )pquit} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )pquit} +\end{items} + +\par\noindent{\bf Command Description:} + +This command is used to terminate Axiom and return to the +operating system. +Other than by redoing all your computations or by +using the {\tt )history )restore} +command to try to restore your working environment, +you cannot return to Axiom in the same state. + +{\tt )pquit} differs from the {\tt )quit} in that it always asks for +confirmation that you want to terminate Axiom (the ``p'' is for +``protected''). +When you enter the {\tt )pquit} command, Axiom responds +% +\centerline{{Please enter {\bf y} or {\bf yes} if you really want to leave the interactive }} +\centerline{{environment and return to the operating system:}} +% +If you respond with {\tt y} or {\tt yes}, you will see the message +% +\centerline{{You are now leaving the Axiom interactive environment. }} +\centerline{{Issue the command {\bf axiom} to the operating system to start a new session.}} +% +and Axiom will terminate and return you to the operating +system (or the environment from which you invoked the system). +If you responded with something other than {\tt y} or {\tt yes}, then +the message +% +\centerline{{You have chosen to remain in the Axiom interactive environment.}} +% +will be displayed and, indeed, Axiom would still be running. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdfinTitle''}{ugSysCmdfinPage} +in section \ugSysCmdfinNumber +\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} +in section \ugSysCmdhistoryNumber +\downlink{``\ugSysCmdcloseTitle''}{ugSysCmdclosePage} +in section \ugSysCmdcloseNumber +\downlink{``\ugSysCmdquitTitle''}{ugSysCmdquitPage} +in section \ugSysCmdquitNumber +\downlink{``\ugSysCmdsystemTitle''}{ugSysCmdsystemPage} +in section \ugSysCmdsystemNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdquitTitle}{)quit} +\newcommand{\ugSysCmdquitNumber}{B.19.} + +@ +\section{)quit} +\label{ugSysCmdquitPage} +\begin{itemize} +\item ugSysCmdfinPage \ref{ugSysCmdfinPage} on +page~\pageref{ugSysCmdfinPage} +\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on +page~\pageref{ugSysCmdhistoryPage} +\item ugSysCmdclosePage \ref{ugSysCmdclosePage} on +page~\pageref{ugSysCmdclosePage} +\item ugSysCmdpquitPage \ref{ugSysCmdpquitPage} on +page~\pageref{ugSysCmdpquitPage} +\item ugSysCmdsystemPage \ref{ugSysCmdsystemPage} on +page~\pageref{ugSysCmdsystemPage} +\end{itemize} +\index{pages!ugSysCmdquitPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdquitPage} +\index{ugSysCmdquitPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdquitPage}{B.19. )quit} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )quit} +\item{\tt )set quit protected \vertline{} unprotected} +\end{items} + +\par\noindent{\bf Command Description:} + +This command is used to terminate Axiom and return to the +operating system. +Other than by redoing all your computations or by +using the {\tt )history )restore} +command to try to restore your working environment, +you cannot return to Axiom in the same state. + +{\tt )quit} differs from the {\tt )pquit} in that it asks for +confirmation only if the command +\begin{verbatim} +)set quit protected +\end{verbatim} +has been issued. +Otherwise, {\tt )quit} will make Axiom terminate and return you +to the operating system (or the environment from which you invoked the +system). + +The default setting is {\tt )set quit protected} so that {\tt )quit} +and {\tt )pquit} behave in the same way. +If you do issue +\begin{verbatim} +)set quit unprotected +\end{verbatim} +we +suggest that you do not (somehow) assign {\tt )quit} to be +executed when you press, say, a function key. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdfinTitle''}{ugSysCmdfinPage} +in section \ugSysCmdfinNumber +\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} +in section \ugSysCmdhistoryNumber +\downlink{``\ugSysCmdcloseTitle''}{ugSysCmdclosePage} +in section \ugSysCmdcloseNumber +\downlink{``\ugSysCmdpquitTitle''}{ugSysCmdpquitPage} +in section \ugSysCmdpquitNumber +\downlink{``\ugSysCmdsystemTitle''}{ugSysCmdsystemPage} +in section \ugSysCmdsystemNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdreadTitle}{)read} +\newcommand{\ugSysCmdreadNumber}{B.20.} + +@ +\section{)read} +\label{ugSysCmdreadPage} +\begin{itemize} +\item ugInOutInPage \ref{ugInOutInPage} on +page~\pageref{ugInOutInPage} +\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on +page~\pageref{ugSysCmdcompilePage} +\item ugSysCmdeditPage \ref{ugSysCmdeditPage} on +page~\pageref{ugSysCmdeditPage} +\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on +page~\pageref{ugSysCmdhistoryPage} +\end{itemize} +\index{pages!ugSysCmdreadPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdreadPage} +\index{ugSysCmdreadPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdreadPage}{B.20. )read} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item {\tt )read} {\it \lanb{}fileName\ranb{}} +\item {\tt )read} {\it \lanb{}fileName\ranb{}} \lanb{}{\tt )quiet}\ranb{} \lanb{}{\tt )ifthere}\ranb{} +\end{items} +\par\noindent{\bf Command Description:} + +This command is used to read {\bf .input} files into Axiom. +The command +\begin{verbatim} +)read matrix.input +\end{verbatim} +will read the contents of the file {\bf matrix.input} into Axiom. The +``.input'' file extension is optional. See +\downlink{``\ugInOutInTitle''}{ugInOutInPage} in Section +\ugInOutInNumber\ignore{ugInOutIn} for more information about {\bf +.input} files. + +This command remembers the previous file you edited, read or compiled. +If you do not specify a file name, the previous file will be read. + +The {\tt )ifthere} option checks to see whether the {\bf .input} file +exists. If it does not, the {\tt )read} command does nothing. If you +do not use this option and the file does not exist, you are asked to +give the name of an existing {\bf .input} file. + +The {\tt )quiet} option suppresses output while the file is being read. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} +in section \ugSysCmdcompileNumber +\downlink{``\ugSysCmdeditTitle''}{ugSysCmdeditPage} +in section \ugSysCmdeditNumber +\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} +in section \ugSysCmdhistoryNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdsetTitle}{)set} +\newcommand{\ugSysCmdsetNumber}{B.21.} + +@ +\section{)set} +\label{ugSysCmdsetPage} +\begin{itemize} +\item ugSysCmdquitPage \ref{ugSysCmdquitPage} on +page~\pageref{ugSysCmdquitPage} +\end{itemize} +\index{pages!ugSysCmdsetPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdsetPage} +\index{ugSysCmdsetPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdsetPage}{B.21. )set} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item {\tt )set} +\item {\tt )set} {\it label1 \lanb{}... labelN\ranb{}} +\item {\tt )set} {\it label1 \lanb{}... labelN\ranb{} newValue} +\end{items} +\par\noindent{\bf Command Description:} + +The {\tt )set} command is used to view or set system variables that +control what messages are displayed, the type of output desired, the +status of the history facility, the way Axiom user functions are +cached, and so on. +Since this collection is very large, we will not discuss them here. +Rather, we will show how the facility is used. +We urge you to explore the {\tt )set} options to familiarize yourself +with how you can modify your Axiom working environment. +There is a \HyperName{} version of this same facility available from the +main \HyperName{} menu. +\texht{}{Click \lispmemolink{here}{(|htSystemVariables|)} to go to it.} + +The {\tt )set} command is command-driven with a menu display. +It is tree-structured. +To see all top-level nodes, issue {\tt )set} by itself. +\begin{verbatim} +)set +\end{verbatim} +Variables with values have them displayed near the right margin. +Subtrees of selections have ``{\tt ...}'' +displayed in the value field. +For example, there are many kinds of messages, so issue +{\tt )set message} to see the choices. +\begin{verbatim} +)set message +\end{verbatim} +The current setting for the variable that displays +whether computation times +are displayed is visible in the menu displayed by the last command. +To see more information, issue +\begin{verbatim} +)set message time +\end{verbatim} +This shows that time printing is on now. +To turn it off, issue +\begin{verbatim} +)set message time off +\end{verbatim} + +As noted above, not all settings have so many qualifiers. +For example, to change the {\tt )quit} command to being unprotected +(that is, you will not be prompted for verification), you need only issue +\begin{verbatim} +)set quit unprotected +\end{verbatim} + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdquitTitle''}{ugSysCmdquitPage} +in section \ugSysCmdquitNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdshowTitle}{)show} +\newcommand{\ugSysCmdshowNumber}{B.22.} + +@ +\section{)show} +\label{ugSysCmdshowPage} +\begin{itemize} +\item ugSysCmddisplayPage \ref{ugSysCmddisplayPage} on +page~\pageref{ugSysCmddisplayPage} +\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on +page~\pageref{ugSysCmdsetPage} +\item ugSysCmdwhatPage \ref{ugSysCmdwhatPage} on +page~\pageref{ugSysCmdwhatPage} +\end{itemize} +\index{pages!ugSysCmdshowPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdshowPage} +\index{ugSysCmdshowPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdshowPage}{B.22. )show} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )show {\it nameOrAbbrev}} +\item{\tt )show {\it nameOrAbbrev} )operations} +\item{\tt )show {\it nameOrAbbrev} )attributes} +\end{items} + +\par\noindent{\bf Command Description:} +This command displays information about Axiom +domain, package and category {\it constructors}. +If no options are given, the {\tt )operations} option is assumed. +For example, +\begin{verbatim} +)show POLY +)show POLY )operations +)show Polynomial +)show Polynomial )operations +\end{verbatim} +each display basic information about the +\spadtype{Polynomial} domain constructor and then provide a +listing of operations. +Since \spadtype{Polynomial} requires a \spadtype{Ring} (for example, +\spadtype{Integer}) as argument, the above commands all refer +to a unspecified ring {\tt R}. +In the list of operations, \spadSyntax{\$} means +\spadtype{Polynomial(R)}. + +The basic information displayed includes the {\it signature} +of the constructor (the name and arguments), the constructor +{\it abbreviation}, the {\it exposure status} of the constructor, and the +name of the {\it library source file} for the constructor. + +If operation information about a specific domain is wanted, +the full or abbreviated domain name may be used. +For example, +\begin{verbatim} +)show POLY INT +)show POLY INT )operations +)show Polynomial Integer +)show Polynomial Integer )operations +\end{verbatim} +are among the combinations that will +display the operations exported by the +domain \spadtype{Polynomial(Integer)} (as opposed to the general +{\it domain constructor} \spadtype{Polynomial}). +Attributes may be listed by using the {\tt )attributes} option. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmddisplayTitle''}{ugSysCmddisplayPage} +in section \ugSysCmddisplayNumber +\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} +in section \ugSysCmdsetNumber +\downlink{``\ugSysCmdwhatTitle''}{ugSysCmdwhatPage} +in section \ugSysCmdwhatNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdspoolTitle}{)spool} +\newcommand{\ugSysCmdspoolNumber}{B.23.} + +@ +\section{)spool} +\label{ugSysCmdspoolPage} +\begin{itemize} +\item ugSysCmdcdPage \ref{ugSysCmdcdPage} on +page~\pageref{ugSysCmdcdPage} +\end{itemize} +\index{pages!ugSysCmdspoolPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdspoolPage} +\index{ugSysCmdspoolPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdspoolPage}{B.23. )spool} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )spool} \lanb{}{\it fileName}\ranb{} +\item{\tt )spool} +\end{items} + +\par\noindent{\bf Command Description:} + +This command is used to save {\it (spool)} all Axiom input and output +into a file, called a {\it spool file.} +You can only have one spool file active at a time. +To start spool, issue this command with a filename. For example, +\begin{verbatim} +)spool integrate.out +\end{verbatim} +To stop spooling, issue {\tt )spool} with no filename. + +If the filename is qualified with a directory, then the output will +be placed in that directory. +If no directory information is given, the spool file will be placed in the +{\it current directory.} +The current directory is the directory from which you started +Axiom or is the directory you specified using the +{\tt )cd} command. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdcdTitle''}{ugSysCmdcdPage} in section \ugSysCmdcdNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdsynonymTitle}{)synonym} +\newcommand{\ugSysCmdsynonymNumber}{B.24.} + +@ +\section{)synonym} +\label{ugSysCmdsynonymPage} +\begin{itemize} +\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on +page~\pageref{ugSysCmdsetPage} +\item ugSysCmdwhatPage \ref{ugSysCmdwhatPage} on +page~\pageref{ugSysCmdwhatPage} +\end{itemize} +\index{pages!ugSysCmdsynonymPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdsynonymPage} +\index{ugSysCmdsynonymPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdsynonymPage}{B.24. )synonym} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )synonym} +\item{\tt )synonym} {\it synonym fullCommand} +\item{\tt )what synonyms} +\end{items} + +\par\noindent{\bf Command Description:} + +This command is used to create short synonyms for system command expressions. +For example, the following synonyms might simplify commands you often +use. +\begin{verbatim} +)synonym save history )save +)synonym restore history )restore +)synonym mail system mail +)synonym ls system ls +)synonym fortran set output fortran +\end{verbatim} +Once defined, synonyms can be +used in place of the longer command expressions. +Thus +\begin{verbatim} +)fortran on +\end{verbatim} +is the same as the longer +\begin{verbatim} +)set fortran output on +\end{verbatim} +To list all defined synonyms, issue either of +\begin{verbatim} +)synonyms +)what synonyms +\end{verbatim} +To list, say, all synonyms that contain the substring +``{\tt ap}'', issue +\begin{verbatim} +)what synonyms ap +\end{verbatim} + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} +in section \ugSysCmdsetNumber +\downlink{``\ugSysCmdwhatTitle''}{ugSysCmdwhatPage} +in section \ugSysCmdwhatNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdsystemTitle}{)system} +\newcommand{\ugSysCmdsystemNumber}{B.25.} + +@ +\section{)system} +\label{ugSysCmdsystemPage} +\begin{itemize} +\item ugSysCmdbootPage \ref{ugSysCmdbootPage} on +page~\pageref{ugSysCmdbootPage} +\item ugSysCmdfinPage \ref{ugSysCmdfinPage} on +page~\pageref{ugSysCmdfinPage} +\item ugSysCmdlispPage \ref{ugSysCmdlispPage} on +page~\pageref{ugSysCmdlispPage} +\item ugSysCmdpquitPage \ref{ugSysCmdpquitPage} on +page~\pageref{ugSysCmdpquitPage} +\item ugSysCmdquitPage \ref{ugSysCmdquitPage} on +page~\pageref{ugSysCmdquitPage} +\end{itemize} +\index{pages!ugSysCmdsystemPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdsystemPage} +\index{ugSysCmdsystemPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdsystemPage}{B.25. )system} +\beginscroll + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )system} {\it cmdExpression} +\end{items} + +\par\noindent{\bf Command Description:} + +This command may be used to issue commands to the operating system while +remaining in Axiom. +The {\it cmdExpression} is passed to the operating system for +execution. + +To get an operating system shell, issue, for example, +\spadcmd{)system sh}. +When you enter the key combination, +\texht{\fbox{\bf Ctrl}--\fbox{\bf D}}{{\bf Ctrl-D}} +(pressing and holding the +\texht{\fbox{\bf Ctrl}}{{\bf Ctrl}} key and then pressing the +\texht{\fbox{\bf D}}{{\bf D}} key) +the shell will terminate and you will return to Axiom. +We do not recommend this way of creating a shell because +\Lisp{} may field some interrupts instead of the shell. +If possible, use a shell running in another window. + +If you execute programs that misbehave you may not be able to return to +Axiom. +If this happens, you may have no other choice than to restart +Axiom and restore the environment via {\tt )history )restore}, if +possible. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdbootTitle''}{ugSysCmdbootPage} +in section \ugSysCmdbootNumber +\downlink{``\ugSysCmdfinTitle''}{ugSysCmdfinPage} +in section \ugSysCmdfinNumber +\downlink{``\ugSysCmdlispTitle''}{ugSysCmdlispPage} +in section \ugSysCmdlispNumber +\downlink{``\ugSysCmdpquitTitle''}{ugSysCmdpquitPage} +in section \ugSysCmdpquitNumber +\downlink{``\ugSysCmdquitTitle''}{ugSysCmdquitPage} +in section \ugSysCmdquitNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdtraceTitle}{)trace} +\newcommand{\ugSysCmdtraceNumber}{B.26.} + +@ +\section{)trace} +\label{ugSysCmdtracePage} +\begin{itemize} +\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on +page~\pageref{ugSysCmdcompilePage} +\item ugSysCmdbootPage \ref{ugSysCmdbootPage} on +page~\pageref{ugSysCmdbootPage} +\item ugSysCmdlispPage \ref{ugSysCmdlispPage} on +page~\pageref{ugSysCmdlispPage} +\item ugSysCmdltracePage \ref{ugSysCmdltracePage} on +page~\pageref{ugSysCmdltracePage} +\end{itemize} +\index{pages!ugSysCmdtracePage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdtracePage} +\index{ugSysCmdtracePage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdtracePage}{B.26. )trace} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )trace} +\item{\tt )trace )off} + +\item{\tt )trace} {\it function \lanb{}options\ranb{}} +\item{\tt )trace} {\it constructor \lanb{}options\ranb{}} +\item{\tt )trace} {\it domainOrPackage \lanb{}options\ranb{}} +\end{items} +% +where options can be one or more of +% +\begin{items} +\item{\tt )after} {\it S-expression} +\item{\tt )before} {\it S-expression} +\item{\tt )break after} +\item{\tt )break before} +\item{\tt )cond} {\it S-expression} +\item{\tt )count} +\item{\tt )count} {\it n} +\item{\tt )depth} {\it n} +\item{\tt )local} {\it op1 \lanb{}... opN\ranb{}} +\item{\tt )nonquietly} +\item{\tt )nt} +\item{\tt )off} +\item{\tt )only} {\it listOfDataToDisplay} +\item{\tt )ops} +\item{\tt )ops} {\it op1 \lanb{}... opN \ranb{}} +\item{\tt )restore} +\item{\tt )stats} +\item{\tt )stats reset} +\item{\tt )timer} +\item{\tt )varbreak} +\item{\tt )varbreak} {\it var1 \lanb{}... varN \ranb{}} +\item{\tt )vars} +\item{\tt )vars} {\it var1 \lanb{}... varN \ranb{}} +\item{\tt )within} {\it executingFunction} +\end{items} + +\par\noindent{\bf Command Description:} + +This command is used to trace the execution of functions that make +up the Axiom system, functions defined by users, +and functions from the system library. +Almost all options are available for each type of function but +exceptions will be noted below. + +To list all functions, constructors, domains and packages that are +traced, simply issue +\begin{verbatim} +)trace +\end{verbatim} +To untrace everything that is traced, issue +\begin{verbatim} +)trace )off +\end{verbatim} +When a function is traced, the default system action is to display +the arguments to the function and the return value when the +function is exited. +Note that if a function is left via an action such as a {\tt THROW}, no +return value will be displayed. +Also, optimization of tail recursion may decrease the number of +times a function is actually invoked and so may cause less trace +information to be displayed. +Other information can be displayed or collected when a function is +traced and this is controlled by the various options. +Most options will be of interest only to Axiom system +developers. +If a domain or package is traced, the default action is to trace +all functions exported. + +Individual interpreter, lisp or boot +functions can be traced by listing their names after +{\tt )trace}. +Any options that are present must follow the functions to be +traced. +\begin{verbatim} +)trace f +\end{verbatim} +traces the function {\tt f}. +To untrace {\tt f}, issue +\begin{verbatim} +)trace f )off +\end{verbatim} +Note that if a function name contains a special character, it will +be necessary to escape the character with an underscore +% +\begin{verbatim} +)trace _/D_,1 +\end{verbatim} +% +To trace all domains or packages that are or will be created from a particular +constructor, give the constructor name or abbreviation after +{\tt )trace}. +% +\begin{verbatim} +)trace MATRIX +)trace List Integer +\end{verbatim} +% +The first command traces all domains currently instantiated with +\spadtype{Matrix}. +If additional domains are instantiated with this constructor +(for example, if you have used \spadtype{Matrix(Integer)} and +\spadtype{Matrix(Float)}), they will be automatically traced. +The second command traces \spadtype{List(Integer)}. +It is possible to trace individual functions in a domain or +package. +See the {\tt )ops} option below. + +The following are the general options for the {\tt )trace} +command. + +%!! system command parser doesn't treat general s-expressions correctly, +%!! I recommand not documenting )after )before and )cond +\indent{0} +\beginitems +%\item[{\tt )after} {\it S-expression}] +%causes the given \Lisp{} {\it S-expression} to be +%executed after exiting the traced function. + +%\item[{\tt )before} {\it S-expression}] +%causes the given \Lisp{} {\it S-expression} to be +%executed before entering the traced function. + +\item[{\tt )break after}] +causes a \Lisp{} break loop to be entered after +exiting the traced function. + +\item[{\tt )break before}] +causes a \Lisp{} break loop to be entered before +entering the traced function. + +\item[{\tt )break}] +is the same as \spadcmd{)break before}. + +%\item[{\tt )cond} {\it S-expression}] +%causes trace information to be shown only if the given +%\Lisp{} {\it S-expression} evaluates to non-NIL. For +%example, the following command causes the system function +%{\tt resolveTT} to be traced but to have the information +%displayed only if the value of the variable +%{\tt \$reportBottomUpFlag} is non-NIL. +%\begin{verbatim} +%)trace resolveTT )cond \_\$reportBottomUpFlag} +%\end{verbatim} + +\item[{\tt )count}] +causes the system to keep a count of the number of times the +traced function is entered. The total can be displayed with +{\tt )trace )stats} and cleared with {\tt )trace )stats reset}. + +\item[{\tt )count} {\it n}] +causes information about the traced function to be displayed for +the first {\it n} executions. After the \eth{\it n} execution, the +function is untraced. + +\item[{\tt )depth} {\it n}] +causes trace information to be shown for only {\it n} levels of +recursion of the traced function. The command +\begin{verbatim} +)trace fib )depth 10 +\end{verbatim} +will cause the display of only 10 levels of trace information for +the recursive execution of a user function \userfun{fib}. + +\item[{\tt )math}] +causes the function arguments and return value to be displayed in the +Axiom monospace two-dimensional math format. + +\item[{\tt )nonquietly}] +causes the display of additional messages when a function is +traced. + +\item[{\tt )nt}] +This suppresses all normal trace information. This option is +useful if the {\tt )count} or {\tt )timer} options are used and +you are interested in the statistics but not the function calling +information. + +\item[{\tt )off}] +causes untracing of all or specific functions. Without an +argument, all functions, constructors, domains and packages are +untraced. Otherwise, the given functions and other objects +are untraced. To +immediately retrace the untraced functions, issue {\tt )trace +)restore}. + +\item[{\tt )only} {\it listOfDataToDisplay}] +causes only specific trace information to be shown. The items are +listed by using the following abbreviations: +\indent{0} +\beginitems +\item[a] display all arguments +\item[v] display return value +\item[1] display first argument +\item[2] display second argument +\item[15] display the 15th argument, and so on +\enditems +\indent{0} +\enditems +\indent{0} +\indent{0} +\beginitems + +\item[{\tt )restore}] +causes the last untraced functions to be retraced. If additional +options are present, they are added to those previously in effect. + +\item[{\tt )stats}] +causes the display of statistics collected by the use of the +{\tt )count} and {\tt )timer} options. + +\item[{\tt )stats reset}] +resets to 0 the statistics collected by the use of the +{\tt )count} and {\tt )timer} options. + +\item[{\tt )timer}] +causes the system to keep a count of execution times for the +traced function. The total can be displayed with {\tt )trace +)stats} and cleared with {\tt )trace )stats reset}. + +%!! only for lisp, boot, may not work in any case, recommend removing +%\item[{\tt )varbreak}] +%causes a \Lisp{} break loop to be entered after +%the assignment to any variable in the traced function. + +\item[{\tt )varbreak} {\it var1 \lanb{}... varN\ranb{}}] +causes a \Lisp{} break loop to be entered after +the assignment to any of the listed variables in the traced +function. + +\item[{\tt )vars}] +causes the display of the value of any variable after it is assigned +in the traced function. Note that library code must have been +compiled (see +\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} in Section +\ugSysCmdcompileNumber\ignore{ugSysCmdcompile}) using the {\tt +)vartrace} option in order to support this option. + +\item[{\tt )vars} {\it var1 \lanb{}... varN\ranb{}}] +causes the display of the value of any of the specified variables +after they are assigned in the traced function. Note that library +code must have been compiled (see +\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} in Section +\ugSysCmdcompileNumber\ignore{ugSysCmdcompile}) using the {\tt +)vartrace} option in order to support this option. + +\item[{\tt )within} {\it executingFunction}] +causes the display of trace information only if the traced +function is called when the given {\it executingFunction} is running. +\enditems +\indent{0} + +The following are the options for tracing constructors, domains +and packages. + +\indent{0} +\beginitems +\item[{\tt )local} {\it \lanb{}op1 \lanb{}... opN\ranb{}\ranb{}}] +causes local functions of the constructor to be traced. Note that +to untrace an individual local function, you must use the fully +qualified internal name, using the escape character +\spadSyntax{\_} before the semicolon. +\begin{verbatim} +)trace FRAC )local +)trace FRAC_;cancelGcd )off +\end{verbatim} + +\item[{\tt )ops} {\it op1 \lanb{}... opN\ranb{}}] +By default, all operations from a domain or package are traced +when the domain or package is traced. This option allows you to +specify that only particular operations should be traced. The +command +% +\begin{verbatim} +)trace Integer )ops min max _+ _- +\end{verbatim} +% +traces four operations from the domain \spadtype{Integer}. Since +{\tt +} and {\tt -} are special +characters, it is necessary +to escape them with an underscore. +\enditems +\indent{0} + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdbootTitle''}{ugSysCmdbootPage} +in section \ugSysCmdbootNumber +\downlink{``\ugSysCmdlispTitle''}{ugSysCmdlispPage} +in section \ugSysCmdlispNumber +\downlink{``\ugSysCmdltraceTitle''}{ugSysCmdltracePage} +in section \ugSysCmdltraceNumber + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdundoTitle}{)undo} +\newcommand{\ugSysCmdundoNumber}{B.27.} + +@ +\section{)undo} +\label{ugSysCmdundoPage} +\begin{itemize} +\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on +page~\pageref{ugSysCmdhistoryPage} +\end{itemize} +\index{pages!ugSysCmdundoPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdundoPage} +\index{ugSysCmdundoPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdundoPage}{B.27. )undo} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )undo} +\item{\tt )undo} {\it integer} +\item{\tt )undo} {\it integer \lanb{}option\ranb{}} +\item{\tt )undo} {\tt )redo} +\end{items} +% +where {\it option} is one of +% +\begin{items} +\item{\tt )after} +\item{\tt )before} +\end{items} + +\par\noindent{\bf Command Description:} + +This command is used to +restore the state of the user environment to an earlier +point in the interactive session. +The argument of an {\tt )undo} is an integer which must designate some +step number in the interactive session. + +\begin{verbatim} +)undo n +)undo n )after +\end{verbatim} +These commands return the state of the interactive +environment to that immediately after step {\tt n}. +If {\tt n} is a positive number, then {\tt n} refers to step nummber +{\tt n}. If {\tt n} is a negative number, it refers to the \eth{\tt n} +previous command (that is, undoes the effects of the last \smath{-n} +commands). + +A {\tt )clear all} resets the {\tt )undo} facility. +Otherwise, an {\tt )undo} undoes the effect of {\tt )clear} with +options {\tt properties}, {\tt value}, and {\tt mode}, and +that of a previous {\tt undo}. +If any such system commands are given between steps \smath{n} and +\smath{n + 1} (\smath{n > 0}), their effect is undone +for {\tt )undo m} for any \texht{\smath{0 < m \leq n}.}{0 < m <= n}. + +The command {\tt )undo} is equivalent to {\tt )undo -1} (it undoes +the effect of the previous user expression). +The command {\tt )undo 0} undoes any of the above system commands +issued since the last user expression. + +\begin{verbatim} +)undo n )before +\end{verbatim} +This command returns the state of the interactive +environment to that immediately before step {\tt n}. +Any {\tt )undo} or {\tt )clear} system commands +given before step {\tt n} will not be undone. + +\begin{verbatim} +)undo )redo +\end{verbatim} +This command reads the file {\tt redo.input}. +created by the last {\tt )undo} command. +This file consists of all user input lines, excluding those +backtracked over due to a previous {\tt )undo}. + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} +in section \ugSysCmdhistoryNumber +The command {\tt )history )write} will eliminate the ``undone'' command +lines of your program. + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugSysCmdwhatTitle}{)what} +\newcommand{\ugSysCmdwhatNumber}{B.28.} + +@ +\section{)what} +\label{ugSysCmdwhatPage} +\begin{itemize} +\item ugSysCmddisplayPage \ref{ugSysCmddisplayPage} on +page~\pageref{ugSysCmddisplayPage} +\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on +page~\pageref{ugSysCmdsetPage} +\item ugSysCmdshowPage \ref{ugSysCmdshowPage} on +page~\pageref{ugSysCmdshowPage} +\end{itemize} +\index{pages!ugSysCmdwhatPage!ug16.ht} +\index{ug16.ht!pages!ugSysCmdwhatPage} +\index{ugSysCmdwhatPage!ug16.ht!pages} +<>= +\begin{page}{ugSysCmdwhatPage}{B.28. )what} +\beginscroll + + +\par\noindent{\bf User Level Required:} interpreter + +\par\noindent{\bf Command Syntax:} +\begin{items} +\item{\tt )what categories} {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} +\item{\tt )what commands } {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} +\item{\tt )what domains } {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} +\item{\tt )what operations} {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} +\item{\tt )what packages } {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} +\item{\tt )what synonym } {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} +\item{\tt )what things } {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} +\item{\tt )apropos } {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} +\end{items} + +\par\noindent{\bf Command Description:} + +This command is used to display lists of things in the system. The +patterns are all strings and, if present, restrict the contents of the +lists. Only those items that contain one or more of the strings as +substrings are displayed. For example, +\begin{verbatim} +)what synonym +\end{verbatim} +displays all command synonyms, +\begin{verbatim} +)what synonym ver +\end{verbatim} +displays all command synonyms containing the substring ``{\tt ver}'', +\begin{verbatim} +)what synonym ver pr +\end{verbatim} +displays all command synonyms +containing the substring ``{\tt ver}'' or the substring +``{\tt pr}''. +Output similar to the following will be displayed +\begin{verbatim} +---------------- System Command Synonyms ----------------- + +user-defined synonyms satisfying patterns: + ver pr + + )apr ........................... )what things + )apropos ....................... )what things + )prompt ........................ )set message prompt + )version ....................... )lisp *yearweek* +\end{verbatim} + +Several other things can be listed with the {\tt )what} command: + +\indent{0} +\beginitems +\item[{\tt categories}] displays a list of category constructors. +\item[{\tt commands}] displays a list of system commands available at your +user-level. +Your user-level +is set via the {\tt )set userlevel} command. +To get a description of a particular command, such as ``{\tt )what}'', issue +{\tt )help what}. +\item[{\tt domains}] displays a list of domain constructors. +\item[{\tt operations}] displays a list of operations in the system library. +It is recommended that you qualify this command with one or +more patterns, as there are thousands of operations available. For +example, say you are looking for functions that involve computation of +eigenvalues. To find their names, try {\tt )what operations eig}. +A rather large list of operations is loaded into the workspace when +this command is first issued. This list will be deleted when you +clear the workspace via {\tt )clear all} or {\tt )clear completely}. +It will be re-created if it is needed again. +\item[{\tt packages}] displays a list of package constructors. +\item[{\tt synonym}] lists system command synonyms. +\item[{\tt things}] displays all of the above types for items containing +the pattern strings as substrings. +The command synonym {\tt )apropos} is equivalent to +{\tt )what things}. +\enditems +\indent{0} + +\par\noindent{\bf Also See:} +\downlink{``\ugSysCmddisplayTitle''}{ugSysCmddisplayPage} +in section \ugSysCmddisplayNumber +\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} +in section \ugSysCmdsetNumber +\downlink{``\ugSysCmdshowTitle''}{ugSysCmdshowPage} +in section \ugSysCmdshowNumber + +\texht{\egroup}{} +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Users Guide Chapter 21 (ug21.ht)} +<>= +\newcommand{\ugAppGraphicsTitle}{Programs for Axiom Images} +\newcommand{\ugAppGraphicsNumber}{G.} + +@ +\section{Programs for Axiom Images} +\label{ugAppGraphicsPage} +\index{pages!ugAppGraphicsPage!ug21.ht} +\index{ug21.ht!pages!ugAppGraphicsPage} +\index{ugAppGraphicsPage!ug21.ht!pages} +<>= +\begin{page}{ugAppGraphicsPage}{G. Programs for Axiom Images} +\beginscroll +% +This appendix contains the Axiom programs used to generate +the images in the \Gallery{} color insert of this book. +All these input files are included +with the Axiom system. +To produce the images +on page 6 of the \Gallery{} insert, for example, issue the command: +\begin{verbatim} +)read images6 +\end{verbatim} + +These images were produced on an IBM RS/6000 model 530 with a +standard color graphics adapter. The smooth shaded images +were made from X Window System screen dumps. +The remaining images were produced with Axiom-generated +PostScript output. The images were reproduced from slides made on an Agfa +ChromaScript PostScript interpreter with a Matrix Instruments QCR camera. + +\beginmenu + \menudownlink{{F.1. images1.input}}{ugFimagesOnePage} + \menudownlink{{F.2. images2.input}}{ugFimagesTwoPage} + \menudownlink{{F.3. images3.input}}{ugFimagesThreePage} + \menudownlink{{F.4. images5.input}}{ugFimagesFivePage} + \menudownlink{{F.5. images6.input}}{ugFimagesSixPage} + \menudownlink{{F.6. images7.input}}{ugFimagesSevenPage} + \menudownlink{{F.7. images8.input}}{ugFimagesEightPage} + \menudownlink{{F.8. conformal.input}}{ugFconformalPage} + \menudownlink{{F.9. tknot.input}}{ugFtknotPage} + \menudownlink{{F.10. ntube.input}}{ugFntubePage} + \menudownlink{{F.11. dhtri.input}}{ugFdhtriPage} + \menudownlink{{F.12. tetra.input}}{ugFtetraPage} + \menudownlink{{F.13. antoine.input}}{ugFantoinePage} + \menudownlink{{F.14. scherk.input}}{ugFscherkPage} +\endmenu +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFimagesOneTitle}{images1.input} +\newcommand{\ugFimagesOneNumber}{G.1.} + +@ +\section{images1.input} +\label{ugFimagesOnePage} +\index{pages!ugFimagesOnePage!ug21.ht} +\index{ug21.ht!pages!ugFimagesOnePage} +\index{ugFimagesOnePage!ug21.ht!pages} +<>= +\begin{page}{ugFimagesOnePage}{G.1. images1.input} +\beginscroll + +\labelSpace{3pc} + + +\noindent +{\tt 1.\ \ \ )read\ tknot}\newline +{\tt 2.\ \ \ }\newline +{\tt 3.\ \ \ torusKnot(15,17,\ 0.1,\ 6,\ 700)}\newline + +\noindent + +\newpage +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFimagesTwoTitle}{images2.input} +\newcommand{\ugFimagesTwoNumber}{G.2.} + +@ +\section{images2.input} +\label{ugFimagesTwoPage} +\index{pages!ugFimagesTwoPage!ug21.ht} +\index{ug21.ht!pages!ugFimagesTwoPage} +\index{ugFimagesTwoPage!ug21.ht!pages} +<>= +\begin{page}{ugFimagesTwoPage}{G.2. images2.input} +\beginscroll + +These images illustrate how Newton's method converges when computing the +complex cube roots of 2. Each point in the \smath{(x,y)}-plane represents the +complex number \smath{x + iy,} which is given as a starting point for Newton's +method. The poles in these images represent bad starting values. +The flat areas are the regions of convergence to the three roots. + + +\noindent +{\tt 1.\ \ \ )read\ newton}\newline +{\tt 2.\ \ \ )read\ vectors}\newline +{\tt 3.\ \ \ f\ :=\ newtonStep(x**3\ -\ 2)}\newline +{\tt 4.\ \ \ }\newline + +\noindent + +The function \texht{$f^n$}{f**n} computes $n$ steps of Newton's method. + + +\noindent +{\tt 1.\ \ \ clipValue\ :=\ 4}\newline +{\tt 2.\ \ \ drawComplexVectorField(f**3,\ -3..3,\ -3..3)}\newline +{\tt 3.\ \ \ drawComplex(f**3,\ -3..3,\ -3..3)}\newline +{\tt 4.\ \ \ drawComplex(f**4,\ -3..3,\ -3..3)}\newline + +\noindent + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFimagesThreeTitle}{images3.input} +\newcommand{\ugFimagesThreeNumber}{G.3.} + +@ +\section{images3.input} +\label{ugFimagesThreePage} +\index{pages!ugFimagesThreePage!ug21.ht} +\index{ug21.ht!pages!ugFimagesThreePage} +\index{ugFimagesThreePage!ug21.ht!pages} +<>= +\begin{page}{ugFimagesThreePage}{G.3. images3.input} +\beginscroll + + +\noindent +{\tt 1.\ \ \ )r\ tknot}\newline +{\tt 2.\ \ \ for\ i\ in\ 0..4\ repeat\ torusKnot(2,\ 2\ +\ i/4,\ 0.5,\ 25,\ 250)}\newline + +\noindent + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFimagesFiveTitle}{images5.input} +\newcommand{\ugFimagesFiveNumber}{G.4.} + +@ +\section{images5.input} +\label{ugFimagesFivePage} +\index{pages!ugFimagesFivePage!ug21.ht} +\index{ug21.ht!pages!ugFimagesFivePage} +\index{ugFimagesFivePage!ug21.ht!pages} +<>= +\begin{page}{ugFimagesFivePage}{G.4. images5.input} +\beginscroll + +The parameterization of the Etruscan Venus is due to George Frances. + + +\noindent +{\tt 1.\ \ \ venus(a,r,steps)\ ==}\newline +{\tt 2.\ \ \ \ \ surf\ :=\ (u:DFLOAT,\ v:DFLOAT):\ Point\ DFLOAT\ +->}\newline +{\tt 3.\ \ \ \ \ \ \ cv\ :=\ cos(v)}\newline +{\tt 4.\ \ \ \ \ \ \ sv\ :=\ sin(v)}\newline +{\tt 5.\ \ \ \ \ \ \ cu\ :=\ cos(u)}\newline +{\tt 6.\ \ \ \ \ \ \ su\ :=\ sin(u)}\newline +{\tt 7.\ \ \ \ \ \ \ x\ :=\ r\ *\ cos(2*u)\ *\ cv\ +\ sv\ *\ cu}\newline +{\tt 8.\ \ \ \ \ \ \ y\ :=\ r\ *\ sin(2*u)\ *\ cv\ -\ sv\ *\ su}\newline +{\tt 9.\ \ \ \ \ \ \ z\ :=\ a\ *\ cv}\newline +{\tt 10.\ \ \ \ \ \ point\ [x,y,z]}\newline +{\tt 11.\ \ \ \ draw(surf,\ 0..\%pi,\ -\%pi..\%pi,\ var1Steps==steps,}\newline +{\tt 12.\ \ \ \ \ \ \ \ \ var2Steps==steps,\ title\ ==\ "Etruscan\ Venus")}\newline +{\tt 13.\ \ }\newline +{\tt 14.\ \ venus(5/2,\ 13/10,\ 50)}\newline + +\noindent + +The Figure-8 Klein Bottle +parameterization is from +``Differential Geometry and Computer Graphics'' by Thomas Banchoff, +in {\it Perspectives in Mathematics,} Anniversary of Oberwolfasch 1984, +Birkh\"{a}user-Verlag, Basel, pp. 43-60. + + +\noindent +{\tt 1.\ \ \ klein(x,y)\ ==}\newline +{\tt 2.\ \ \ \ \ cx\ :=\ cos(x)}\newline +{\tt 3.\ \ \ \ \ cy\ :=\ cos(y)}\newline +{\tt 4.\ \ \ \ \ sx\ :=\ sin(x)}\newline +{\tt 5.\ \ \ \ \ sy\ :=\ sin(y)}\newline +{\tt 6.\ \ \ \ \ sx2\ :=\ sin(x/2)}\newline +{\tt 7.\ \ \ \ \ cx2\ :=\ cos(x/2)}\newline +{\tt 8.\ \ \ \ \ sq2\ :=\ sqrt(2.0@DFLOAT)}\newline +{\tt 9.\ \ \ \ \ point\ [cx\ *\ (cx2\ *\ (sq2\ +\ cy)\ +\ (sx2\ *\ sy\ *\ cy)),\ \_}\newline +{\tt 10.\ \ \ \ \ \ \ \ \ \ \ sx\ *\ (cx2\ *\ (sq2\ +\ cy)\ +\ (sx2\ *\ sy\ *\ cy)),\ \_}\newline +{\tt 11.\ \ \ \ \ \ \ \ \ \ \ -sx2\ *\ (sq2\ +\ cy)\ +\ cx2\ *\ sy\ *\ cy]}\newline +{\tt 12.\ \ }\newline +{\tt 13.\ \ draw(klein,\ 0..4*\%pi,\ 0..2*\%pi,\ var1Steps==50,}\newline +{\tt 14.\ \ \ \ \ \ \ var2Steps==50,title=="Figure\ Eight\ Klein\ Bottle")}\newline + +\noindent + +The next two images are examples of generalized tubes. + + +\noindent +{\tt 15.\ \ )read\ ntube}\newline +{\tt 16.\ \ rotateBy(p,\ theta)\ ==}\newline +{\tt 17.\ \ \ \ c\ :=\ cos(theta)}\newline +{\tt 18.\ \ \ \ s\ :=\ sin(theta)}\newline +{\tt 19.\ \ \ \ point\ [p.1*c\ -\ p.2*s,\ p.1*s\ +\ p.2*c]}\newline +{\tt 20.\ \ }\newline +{\tt 21.\ \ bcircle\ t\ ==\ }\newline +{\tt 22.\ \ \ \ point\ [3*cos\ t,\ 3*sin\ t,\ 0]}\newline +{\tt 23.\ \ \ }\newline +{\tt 24.\ \ twist(u,\ t)\ ==}\newline +{\tt 25.\ \ \ \ theta\ :=\ 4*t}\newline +{\tt 26.\ \ \ \ p\ :=\ point\ [sin\ u,\ cos(u)/2]}\newline +{\tt 27.\ \ \ \ rotateBy(p,\ theta)}\newline +{\tt 28.\ \ \ }\newline +{\tt 29.\ \ ntubeDrawOpt(bcircle,\ twist,\ 0..2*\%pi,\ 0..2*\%pi,}\newline +{\tt 30.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ var1Steps\ ==\ 70,\ var2Steps\ ==\ 250)}\newline +{\tt 31.\ \ }\newline +{\tt 32.\ \ twist2(u,\ t)\ ==}\newline +{\tt 33.\ \ \ \ theta\ :=\ t}\newline +{\tt 34.\ \ \ \ p\ :=\ point\ [sin\ u,\ cos(u)]}\newline +{\tt 35.\ \ \ \ rotateBy(p,\ theta)}\newline +{\tt 36.\ \ }\newline +{\tt 37.\ \ cf(u,v)\ ==\ sin(21*u)}\newline +{\tt 38.\ \ }\newline +{\tt 39.\ \ ntubeDrawOpt(bcircle,\ twist2,\ 0..2*\%pi,\ 0..2*\%pi,}\newline +{\tt 40.\ \ \ \ colorFunction\ ==\ cf,\ var1Steps\ ==\ 168,}\newline +{\tt 41.\ \ \ \ var2Steps\ ==\ 126)}\newline + +\noindent + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFimagesSixTitle}{images6.input} +\newcommand{\ugFimagesSixNumber}{G.5.} + +@ +\section{images6.input} +\label{ugFimagesSixPage} +\index{pages!ugFimagesSixPage!ug21.ht} +\index{ug21.ht!pages!ugFimagesSixPage} +\index{ugFimagesSixPage!ug21.ht!pages} +<>= +\begin{page}{ugFimagesSixPage}{G.5. images6.input} +\beginscroll + +\labelSpace{3pc} + +\noindent +{\tt 1.\ \ \ gam(x,y)\ ==\ }\newline +{\tt 2.\ \ \ \ \ g\ :=\ Gamma\ complex(x,y)}\newline +{\tt 3.\ \ \ \ \ point\ [x,y,max(min(real\ g,\ 4),\ -4),\ argument\ g]}\newline +{\tt 4.\ \ \ }\newline +{\tt 5.\ \ \ }\newline +{\tt 6.\ \ \ draw(gam,\ -\%pi..\%pi,\ -\%pi..\%pi,\ }\newline +{\tt 7.\ \ \ \ \ \ \ \ title\ ==\ "Gamma(x\ +\ \%i*y)",\ \_}\newline +{\tt 8.\ \ \ \ \ \ \ \ var1Steps\ ==\ 100,\ var2Steps\ ==\ 100)}\newline +{\tt 9.\ \ \ }\newline +{\tt 10.\ \ b(x,y)\ ==\ Beta(x,y)}\newline +{\tt 11.\ \ }\newline +{\tt 12.\ \ draw(b,\ -3.1..3,\ -3.1\ ..\ 3,\ title\ ==\ "Beta(x,y)")}\newline +{\tt 13.\ \ }\newline +{\tt 14.\ \ atf(x,y)\ ==\ }\newline +{\tt 15.\ \ \ \ a\ :=\ atan\ complex(x,y)}\newline +{\tt 16.\ \ \ \ point\ [x,y,real\ a,\ argument\ a]}\newline +{\tt 17.\ \ }\newline +{\tt 18.\ \ draw(atf,\ -3.0..\%pi,\ -3.0..\%pi)}\newline + +\noindent + + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFimagesSevenTitle}{images7.input} +\newcommand{\ugFimagesSevenNumber}{G.6.} + +@ +\section{images7.input} +\label{ugFimagesSevenPage} +\index{pages!ugFimagesSevenPage!ug21.ht} +\index{ug21.ht!pages!ugFimagesSevenPage} +\index{ugFimagesSevenPage!ug21.ht!pages} +<>= +\begin{page}{ugFimagesSevenPage}{G.6. images7.input} +\beginscroll + +First we look at the conformal +map \texht{$z \mapsto z + 1/z$}{z +-> z + 1/z}. +\labelSpace{2pc} + +\noindent +{\tt 1.\ \ \ )read\ conformal}\newline +{\tt 2.\ \ \ }\newline +{\tt 3.\ \ \ }\newline +{\tt 4.\ \ \ f\ z\ ==\ z}\newline +{\tt 5.\ \ \ }\newline +{\tt 6.\ \ \ conformalDraw(f,\ -2..2,\ -2..2,\ 9,\ 9,\ "cartesian")}\newline +{\tt 7.\ \ \ }\newline +{\tt 8.\ \ \ f\ z\ ==\ z\ +\ 1/z}\newline +{\tt 9.\ \ \ \ }\newline +{\tt 10.\ \ conformalDraw(f,\ -2..2,\ -2..2,\ 9,\ 9,\ "cartesian")}\newline + +\noindent + +The map \texht{$z \mapsto -(z+1)/(z-1)$}{z +-> -(z+1)/(z-1)} maps +the unit disk to the right half-plane, as shown +on the Riemann sphere. + + +\noindent +{\tt 1.\ \ \ f\ z\ ==\ z}\newline +{\tt 2.\ \ \ }\newline +{\tt 3.\ \ \ riemannConformalDraw(f,0.1..0.99,0..2*\%pi,7,11,"polar")}\newline +{\tt 4.\ \ \ }\newline +{\tt 5.\ \ \ f\ z\ ==\ -(z+1)/(z-1)}\newline +{\tt 6.\ \ \ }\newline +{\tt 7.\ \ \ riemannConformalDraw(f,0.1..0.99,0..2*\%pi,7,11,"polar")}\newline +{\tt 8.\ \ \ }\newline +{\tt 9.\ \ \ riemannSphereDraw(-4..4,\ -4..4,\ 7,\ 7,\ "cartesian")}\newline + +\noindent + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFimagesEightTitle}{images8.input} +\newcommand{\ugFimagesEightNumber}{G.7.} + +@ +\section{images8.input} +\label{ugFimagesEightPage} +\index{pages!ugFimagesEightPage!ug21.ht} +\index{ug21.ht!pages!ugFimagesEightPage} +\index{ugFimagesEightPage!ug21.ht!pages} +<>= +\begin{page}{ugFimagesEightPage}{G.7. images8.input} +\beginscroll + +\labelSpace{1pc} + +\noindent +{\tt 1.\ \ \ )read\ dhtri}\newline +{\tt 2.\ \ \ )read\ tetra}\newline +{\tt 3.\ \ \ drawPyramid\ 4}\newline +{\tt 4.\ \ \ }\newline +{\tt 5.\ \ \ )read\ antoine}\newline +{\tt 6.\ \ \ drawRings\ 2}\newline +{\tt 7.\ \ \ }\newline +{\tt 8.\ \ \ )read\ scherk}\newline +{\tt 9.\ \ \ drawScherk(3,3)}\newline +{\tt 10.\ \ }\newline +{\tt 11.\ \ )read\ ribbonsnew}\newline +{\tt 12.\ \ drawRibbons([x**i\ for\ i\ in\ 1..5],\ x=-1..1,\ y=0..2)}\newline + +\noindent + + +%\input{gallery/conformal.htex} +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFconformalTitle}{conformal.input} +\newcommand{\ugFconformalNumber}{G.8.} + +@ +\section{conformal.input} +\label{ugFconformalPage} +\index{pages!ugFconformalPage!ug21.ht} +\index{ug21.ht!pages!ugFconformalPage} +\index{ugFconformalPage!ug21.ht!pages} +<>= +\begin{page}{ugFconformalPage}{G.8. conformal.input} +\beginscroll +% +The functions in this section draw conformal maps both on the +plane and on the Riemann sphere. + +%-- Compile, don't interpret functions. +%\xmpLine{)set fun comp on}{} + +\noindent +{\tt 1.\ \ \ C\ :=\ Complex\ DoubleFloat}\newline +{\tt 2.\ \ \ S\ :=\ Segment\ DoubleFloat}\newline +{\tt 3.\ \ \ R3\ :=\ Point\ DFLOAT}\newline +{\tt 4.\ \ \ \ }\newline + +\noindent + +\userfun{conformalDraw}{\it (f, rRange, tRange, rSteps, tSteps, coord)} +draws the image of the coordinate grid under {\it f} in the complex plane. +The grid may be given in either polar or Cartesian coordinates. +Argument {\it f} is the function to draw; +{\it rRange} is the range of the radius (in polar) or real (in Cartesian); +{\it tRange} is the range of \texht{$\theta$}{\theta} (in polar) or imaginary (in Cartesian); +{\it tSteps, rSteps}, are the number of intervals in the {\it r} and +\texht{$\theta$}{\theta} directions; and +{\it coord} is the coordinate system to use (either {\tt "polar"} or +{\tt "cartesian"}). + + +\noindent +{\tt 1.\ \ \ conformalDraw:\ (C\ ->\ C,\ S,\ S,\ PI,\ PI,\ String)\ ->\ VIEW3D}\newline +{\tt 2.\ \ \ conformalDraw(f,rRange,tRange,rSteps,tSteps,coord)\ ==}\newline +{\tt 3.\ \ \ \ \ transformC\ :=}\newline +{\tt 4.\ \ \ \ \ \ \ coord\ =\ "polar"\ =>\ polar2Complex}\newline +{\tt 5.\ \ \ \ \ \ \ cartesian2Complex}\newline +{\tt 6.\ \ \ \ \ cm\ :=\ makeConformalMap(f,\ transformC)}\newline +{\tt 7.\ \ \ \ \ sp\ :=\ createThreeSpace()}\newline +{\tt 8.\ \ \ \ \ adaptGrid(sp,\ cm,\ rRange,\ tRange,\ rSteps,\ tSteps)}\newline +{\tt 9.\ \ \ \ \ makeViewport3D(sp,\ "Conformal\ Map")}\newline + +\noindent + +\userfun{riemannConformalDraw}{\it (f, rRange, tRange, rSteps, tSteps, coord)} +draws the image of the coordinate grid under {\it f} on the Riemann sphere. +The grid may be given in either polar or Cartesian coordinates. +Its arguments are the same as those for \userfun{conformalDraw}. + +\noindent +{\tt 10.\ \ riemannConformalDraw:(C->C,S,S,PI,PI,String)->VIEW3D}\newline +{\tt 11.\ \ riemannConformalDraw(f,\ rRange,\ tRange,}\newline +{\tt 12.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ rSteps,\ tSteps,\ coord)\ ==}\newline +{\tt 13.\ \ \ \ transformC\ :=}\newline +{\tt 14.\ \ \ \ \ \ coord\ =\ "polar"\ =>\ polar2Complex}\newline +{\tt 15.\ \ \ \ \ \ cartesian2Complex}\newline +{\tt 16.\ \ \ \ sp\ :=\ createThreeSpace()}\newline +{\tt 17.\ \ \ \ cm\ :=\ makeRiemannConformalMap(f,\ transformC)}\newline +{\tt 18.\ \ \ \ adaptGrid(sp,\ cm,\ rRange,\ tRange,\ rSteps,\ tSteps)}\newline +{\tt 19.\ \ \ \ curve(sp,[point\ [0,0,2.0@DFLOAT,0],point\ [0,0,2.0@DFLOAT,0]])}\newline +{\tt 20.\ \ \ \ makeViewport3D(sp,"Map\ on\ the\ Riemann\ Sphere")}\newline +{\tt 21.\ \ }\newline +{\tt 22.\ \ adaptGrid(sp,\ f,\ uRange,\ vRange,\ \ uSteps,\ vSteps)\ ==}\newline +{\tt 23.\ \ \ \ delU\ :=\ (hi(uRange)\ -\ lo(uRange))/uSteps}\newline +{\tt 24.\ \ \ \ delV\ :=\ (hi(vRange)\ -\ lo(vRange))/vSteps}\newline +{\tt 25.\ \ \ \ uSteps\ :=\ uSteps\ +\ 1;\ vSteps\ :=\ vSteps\ +\ 1}\newline +{\tt 26.\ \ \ \ u\ :=\ lo\ uRange}\newline +{\tt 27.\ \ \ \ for\ i\ in\ 1..uSteps\ repeat}\newline +{\tt 28.\ \ \ \ \ \ c\ :=\ curryLeft(f,u)}\newline +{\tt 29.\ \ \ \ \ \ cf\ :=\ (t:DFLOAT):DFLOAT\ +->\ 0}\newline +{\tt 30.\ \ \ \ \ \ makeObject(c,vRange::SEG\ Float,colorFunction==cf,}\newline +{\tt 31.\ \ \ \ \ \ \ \ space\ ==\ sp,\ tubeRadius\ ==\ .02,\ tubePoints\ ==\ 6)}\newline +{\tt 32.\ \ \ \ \ \ u\ :=\ u\ +\ delU}\newline +{\tt 33.\ \ \ \ v\ :=\ lo\ vRange}\newline +{\tt 34.\ \ \ \ for\ i\ in\ 1..vSteps\ repeat}\newline +{\tt 35.\ \ \ \ \ \ c\ :=\ curryRight(f,v)}\newline +{\tt 36.\ \ \ \ \ \ cf\ :=\ (t:DFLOAT):DFLOAT\ +->\ 1}\newline +{\tt 37.\ \ \ \ \ \ makeObject(c,uRange::SEG\ Float,colorFunction==cf,}\newline +{\tt 38.\ \ \ \ \ \ \ \ space\ ==\ sp,\ tubeRadius\ ==\ .02,\ tubePoints\ ==\ 6)}\newline +{\tt 39.\ \ \ \ \ \ v\ :=\ v\ +\ delV}\newline +{\tt 40.\ \ \ \ void()}\newline +{\tt 41.\ \ }\newline +{\tt 42.\ \ riemannTransform(z)\ ==}\newline +{\tt 43.\ \ \ \ r\ :=\ sqrt\ norm\ z}\newline +{\tt 44.\ \ \ \ cosTheta\ :=\ (real\ z)/r}\newline +{\tt 45.\ \ \ \ sinTheta\ :=\ (imag\ z)/r}\newline +{\tt 46.\ \ \ \ cp\ :=\ 4*r/(4+r**2)}\newline +{\tt 47.\ \ \ \ sp\ :=\ sqrt(1-cp*cp)}\newline +{\tt 48.\ \ \ \ if\ r>2\ then\ sp\ :=\ -sp}\newline +{\tt 49.\ \ \ \ point\ [cosTheta*cp,\ sinTheta*cp,\ -sp\ +\ 1]}\newline +{\tt 50.\ \ \ }\newline +{\tt 51.\ \ cartesian2Complex(r:DFLOAT,\ i:DFLOAT):C\ ==}\newline +{\tt 52.\ \ \ \ complex(r,\ i)}\newline +{\tt 53.\ \ }\newline +{\tt 54.\ \ polar2Complex(r:DFLOAT,\ th:DFLOAT):C\ ==\ }\newline +{\tt 55.\ \ \ \ complex(r*cos(th),\ r*sin(th))}\newline +{\tt 56.\ \ }\newline +{\tt 57.\ \ makeConformalMap(f,\ transformC)\ ==}\newline +{\tt 58.\ \ \ \ (u:DFLOAT,v:DFLOAT):R3\ +->\ }\newline +{\tt 59.\ \ \ \ \ \ z\ :=\ f\ transformC(u,\ v)}\newline +{\tt 60.\ \ \ \ \ \ point\ [real\ z,\ imag\ z,\ 0.0@DFLOAT]}\newline +{\tt 61.\ \ \ }\newline +{\tt 62.\ \ makeRiemannConformalMap(f,\ transformC)\ ==}\newline +{\tt 63.\ \ \ \ (u:DFLOAT,\ v:DFLOAT):R3\ +->}\newline +{\tt 64.\ \ \ \ \ \ riemannTransform\ f\ transformC(u,\ v)}\newline +{\tt 65.\ \ }\newline +{\tt 66.\ \ riemannSphereDraw:\ (S,\ S,\ PI,\ PI,\ String)\ ->\ VIEW3D}\newline +{\tt 67.\ \ riemannSphereDraw(rRange,tRange,rSteps,tSteps,coord)\ ==}\newline +{\tt 68.\ \ \ \ transformC\ :=}\newline +{\tt 69.\ \ \ \ \ \ coord\ =\ "polar"\ =>\ polar2Complex}\newline +{\tt 70.\ \ \ \ \ \ cartesian2Complex}\newline +{\tt 71.\ \ \ \ grid\ :=\ (u:DFLOAT,\ v:DFLOAT):\ R3\ +->\ }\newline +{\tt 72.\ \ \ \ \ \ z1\ :=\ transformC(u,\ v)}\newline +{\tt 73.\ \ \ \ \ \ point\ [real\ z1,\ imag\ z1,\ 0]}\newline +{\tt 74.\ \ \ \ sp\ :=\ createThreeSpace()}\newline +{\tt 75.\ \ \ \ adaptGrid(sp,\ grid,\ rRange,\ tRange,\ rSteps,\ tSteps)}\newline +{\tt 76.\ \ \ \ connectingLines(sp,grid,rRange,tRange,rSteps,tSteps)}\newline +{\tt 77.\ \ \ \ makeObject(riemannSphere,0..2*\%pi,0..\%pi,space==sp)}\newline +{\tt 78.\ \ \ \ f\ :=\ (z:C):C\ +->\ z}\newline +{\tt 79.\ \ \ \ cm\ :=\ makeRiemannConformalMap(f,\ transformC)}\newline +{\tt 80.\ \ \ \ adaptGrid(sp,\ cm,\ rRange,\ tRange,\ rSteps,\ tSteps)}\newline +{\tt 81.\ \ \ \ makeViewport3D(sp,\ "Riemann\ Sphere")}\newline +{\tt 82.\ \ \ }\newline +{\tt 83.\ \ connectingLines(sp,f,uRange,vRange,uSteps,vSteps)\ ==}\newline +{\tt 84.\ \ \ \ delU\ :=\ (hi(uRange)\ -\ lo(uRange))/uSteps}\newline +{\tt 85.\ \ \ \ delV\ :=\ (hi(vRange)\ -\ lo(vRange))/vSteps}\newline +{\tt 86.\ \ \ \ uSteps\ :=\ uSteps\ +\ 1;\ vSteps\ :=\ vSteps\ +\ 1}\newline +{\tt 87.\ \ \ \ u\ :=\ lo\ uRange}\newline +{\tt 88.\ \ \ \ for\ i\ in\ 1..uSteps\ repeat}\newline +{\tt 89.\ \ \ \ \ \ v\ :=\ lo\ vRange}\newline +{\tt 90.\ \ \ \ \ \ for\ j\ in\ 1..vSteps\ repeat}\newline +{\tt 91.\ \ \ \ \ \ \ \ p1\ :=\ f(u,v)}\newline +{\tt 92.\ \ \ \ \ \ \ \ p2\ :=\ riemannTransform\ complex(p1.1,\ p1.2)}\newline +{\tt 93.\ \ \ \ \ \ \ \ fun\ :=\ lineFromTo(p1,p2)}\newline +{\tt 94.\ \ \ \ \ \ \ \ cf\ :=\ (t:DFLOAT):DFLOAT\ +->\ 3}\newline +{\tt 95.\ \ \ \ \ \ \ \ makeObject(fun,\ 0..1,space==sp,tubePoints==4,}\newline +{\tt 96.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ tubeRadius==0.01,colorFunction==cf)}\newline +{\tt 97.\ \ \ \ \ \ \ \ v\ :=\ v\ +\ delV}\newline +{\tt 98.\ \ \ \ \ \ u\ :=\ u\ +\ delU}\newline +{\tt 99.\ \ \ \ void()}\newline +{\tt 100.\ \ }\newline +{\tt 101.\ riemannSphere(u,v)\ ==\ }\newline +{\tt 102.\ \ \ sv\ :=\ sin(v)}\newline +{\tt 103.\ \ \ 0.99@DFLOAT*(point\ [cos(u)*sv,sin(u)*sv,cos(v),0.0@DFLOAT])+}\newline +{\tt 104.\ \ \ \ \ point\ [0.0@DFLOAT,\ 0.0@DFLOAT,\ 1.0@DFLOAT,\ 4.0@DFLOAT]}\newline +{\tt 105.\ \ }\newline +{\tt 106.\ lineFromTo(p1,\ p2)\ ==}\newline +{\tt 107.\ \ \ d\ :=\ p2\ -\ p1}\newline +{\tt 108.\ \ \ (t:DFLOAT):Point\ DFLOAT\ +->}\newline +{\tt 109.\ \ \ \ \ p1\ +\ t*d}\newline + +\noindent + +%\input{gallery/tknot.htex} +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFtknotTitle}{tknot.input} +\newcommand{\ugFtknotNumber}{G.9.} + +@ +\section{tknot.input} +\label{ugFtknotPage} +\index{pages!ugFtknotPage!ug21.ht} +\index{ug21.ht!pages!ugFtknotPage} +\index{ugFtknotPage!ug21.ht!pages} +<>= +\begin{page}{ugFtknotPage}{G.9. tknot.input} +\beginscroll +% +Create a $(p,q)$ torus-knot with radius $r$ around the curve. +The formula was derived by Larry Lambe. + + +\noindent +{\tt 1.\ \ \ )read\ ntube}\newline +{\tt 2.\ \ \ torusKnot:\ (DFLOAT,\ DFLOAT,\ DFLOAT,\ PI,\ PI)\ ->\ VIEW3D}\newline +{\tt 3.\ \ \ torusKnot(p,\ q\ ,r,\ uSteps,\ tSteps)\ ==}\newline +{\tt 4.\ \ \ \ \ knot\ :=\ (t:DFLOAT):Point\ DFLOAT\ +->\ }\newline +{\tt 5.\ \ \ \ \ \ \ fac\ :=\ 4/(2.2@DFLOAT-sin(q*t))}\newline +{\tt 6.\ \ \ \ \ \ \ fac\ *\ point\ [cos(p*t),\ sin(p*t),\ cos(q*t)]}\newline +{\tt 7.\ \ \ \ \ circle\ :=\ (u:DFLOAT,\ t:DFLOAT):\ Point\ DFLOAT\ +->}\newline +{\tt 8.\ \ \ \ \ \ \ r\ *\ point\ [cos\ u,\ sin\ u]}\newline +{\tt 9.\ \ \ \ \ ntubeDrawOpt(knot,\ circle,\ 0..2*\%pi,\ 0..2*\%pi,}\newline +{\tt 10.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ var1Steps\ ==\ uSteps,\ var2Steps\ ==\ tSteps)}\newline +{\tt 11.\ \ }\newline + +\noindent + +%\input{gallery/ntube.htex} +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFntubeTitle}{ntube.input} +\newcommand{\ugFntubeNumber}{G.10.} + +@ +\section{ntube.input} +\label{ugFntubePage} +\begin{itemize} +\item ugFimagesFivePage \ref{ugFimagesFivePage} on +page~\pageref{ugFimagesFivePage} +\end{itemize} +\index{pages!ugFntubePage!ug21.ht} +\index{ug21.ht!pages!ugFntubePage} +\index{ugFntubePage!ug21.ht!pages} +<>= +\begin{page}{ugFntubePage}{G.10. ntube.input} +\beginscroll +% +The functions in this file create generalized tubes (also known as generalized +cylinders). +These functions draw a 2-d curve in the normal +planes around a 3-d curve. + + +\noindent +{\tt 1.\ \ \ R3\ :=\ Point\ DFLOAT}\newline +{\tt 2.\ \ \ R2\ :=\ Point\ DFLOAT}\newline +{\tt 3.\ \ \ S\ :=\ Segment\ Float}\newline +{\tt 4.\ \ \ }\newline +{\tt 5.\ \ \ ThreeCurve\ :=\ DFLOAT\ ->\ R3}\newline +{\tt 6.\ \ \ TwoCurve\ :=\ (DFLOAT,\ DFLOAT)\ ->\ R2}\newline +{\tt 7.\ \ \ Surface\ :=\ (DFLOAT,\ DFLOAT)\ ->\ R3}\newline +{\tt 8.\ \ \ }\newline +{\tt 9.\ \ \ FrenetFrame\ :=\ }\newline +{\tt 10.\ \ \ \ \ Record(value:R3,tangent:R3,normal:R3,binormal:R3)}\newline +{\tt 11.\ \ frame:\ FrenetFrame}\newline +{\tt 12.\ \ }\newline + +\noindent + +\userfun{ntubeDraw}{\it (spaceCurve, planeCurve,} +$u_0 .. u_1,$ $t_0 .. t_1)$ +draws {\it planeCurve} in the normal planes of {\it spaceCurve.} +The parameter $u_0 .. u_1$ specifies +the parameter range for {\it planeCurve} +and $t_0 .. t_1$ specifies the parameter range for {\it spaceCurve}. +Additionally, the plane curve function takes +a second parameter: the current parameter of {\it spaceCurve}. +This allows the plane curve to change shape +as it goes around the space curve. +See \downlink{``\ugFimagesFiveTitle''}{ugFimagesFivePage} +in Section \ugFimagesFiveNumber\ignore{ugFimagesFive} for an example of this. +% + +\noindent +{\tt 1.\ \ \ ntubeDraw:\ (ThreeCurve,TwoCurve,S,S)\ ->\ VIEW3D}\newline +{\tt 2.\ \ \ ntubeDraw(spaceCurve,planeCurve,uRange,tRange)\ ==}\newline +{\tt 3.\ \ \ \ \ ntubeDrawOpt(spaceCurve,\ planeCurve,\ uRange,\ \_}\newline +{\tt 4.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ tRange,\ []\$List\ DROPT)}\newline +{\tt 5.\ \ \ \ }\newline +{\tt 6.\ \ \ ntubeDrawOpt:\ (ThreeCurve,TwoCurve,S,S,List\ DROPT)}\newline +{\tt 7.\ \ \ \ \ \ \ ->\ VIEW3D}\newline +{\tt 8.\ \ \ ntubeDrawOpt(spaceCurve,planeCurve,uRange,tRange,l)\ ==}\newline +{\tt 9.\ \ \ \ \ \ \ \ \ \ \ \ \ }\newline +{\tt 10.\ \ \ \ delT:DFLOAT\ :=\ (hi(tRange)\ -\ lo(tRange))/10000}\newline +{\tt 11.\ \ \ \ oldT:DFLOAT\ :=\ lo(tRange)\ -\ 1}\newline +{\tt 12.\ \ \ \ fun\ :=\ ngeneralTube(spaceCurve,planeCurve,delT,oldT)}\newline +{\tt 13.\ \ \ \ draw(fun,\ uRange,\ tRange,\ l)}\newline +{\tt 14.\ \ }\newline + +\noindent + +\userfun{nfrenetFrame}{\it (c, t, delT)} +numerically computes the Frenet frame +about the curve {\it c} at {\it t}. +Parameter {\it delT} is a small number used to +compute derivatives. + +\noindent +{\tt 15.\ \ nfrenetFrame(c,\ t,\ delT)\ ==}\newline +{\tt 16.\ \ \ \ f0\ :=\ c(t)}\newline +{\tt 17.\ \ \ \ f1\ :=\ c(t+delT)}\newline +{\tt 18.\ \ \ \ t0\ :=\ f1\ -\ f0}\newline +{\tt 19.\ \ \ \ n0\ :=\ f1\ +\ f0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\newline +{\tt 20.\ \ \ \ b\ :=\ cross(t0,\ n0)}\newline +{\tt 21.\ \ \ \ n\ :=\ cross(b,t0)}\newline +{\tt 22.\ \ \ \ ln\ :=\ length\ n}\newline +{\tt 23.\ \ \ \ lb\ :=\ length\ b}\newline +{\tt 24.\ \ \ \ ln\ =\ 0\ or\ lb\ =\ 0\ =>}\newline +{\tt 25.\ \ \ \ \ \ \ \ error\ "Frenet\ Frame\ not\ well\ defined"}\newline +{\tt 26.\ \ \ \ n\ :=\ (1/ln)*n}\newline +{\tt 27.\ \ \ \ b\ :=\ (1/lb)*b}\newline +{\tt 28.\ \ \ \ [f0,\ t0,\ n,\ b]\$FrenetFrame}\newline + +\noindent + +\userfun{ngeneralTube}{\it (spaceCurve, planeCurve,}{\it delT, oltT)} +creates a function that can be passed to the system axiomFun{draw} command. +The function is a parameterized surface for the general tube +around {\it spaceCurve}. {\it delT} is a small number used to compute +derivatives. {\it oldT} is used to hold the current value of the +{\it t} parameter for {\it spaceCurve.} This is an efficiency measure +to ensure that frames are only computed once for each value of {\it t}. + +\noindent +{\tt 29.\ \ ngeneralTube:\ (ThreeCurve,\ TwoCurve,\ DFLOAT,\ DFLOAT)\ ->\ Surface}\newline +{\tt 30.\ \ ngeneralTube(spaceCurve,\ planeCurve,\ delT,\ oldT)\ ==}\newline +{\tt 31.\ \ \ \ free\ frame}\newline +{\tt 32.\ \ \ \ (v:DFLOAT,\ t:\ DFLOAT):\ R3\ +->}\newline +{\tt 33.\ \ \ \ \ \ if\ (t\ \texht{$\sim$}{~}=\ oldT)\ then}\newline +{\tt 34.\ \ \ \ \ \ \ \ frame\ :=\ nfrenetFrame(spaceCurve,\ t,\ delT)}\newline +{\tt 35.\ \ \ \ \ \ \ \ oldT\ :=\ t}\newline +{\tt 36.\ \ \ \ \ \ p\ :=\ planeCurve(v,\ t)}\newline +{\tt 37.\ \ \ \ \ \ frame.value\ +\ p.1*frame.normal\ +\ p.2*frame.binormal}\newline + +\noindent + +%\input{gallery/dhtri.htex} +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFdhtriTitle}{dhtri.input} +\newcommand{\ugFdhtriNumber}{G.11.} + +@ +\section{dhtri.input} +\label{ugFdhtriPage} +\index{pages!ugFdhtriPage!ug21.ht} +\index{ug21.ht!pages!ugFdhtriPage} +\index{ugFdhtriPage!ug21.ht!pages} +<>= +\begin{page}{ugFdhtriPage}{G.11. dhtri.input} +\beginscroll +% +Create affine transformations (DH matrices) that transform +a given triangle into another. + + +\noindent +{\tt 1.\ \ \ tri2tri:\ (List\ Point\ DFLOAT,\ List\ Point\ DFLOAT)\ ->\ DHMATRIX(DFLOAT)}\newline +{\tt 2.\ \ \ tri2tri(t1,\ t2)\ ==}\newline +{\tt 3.\ \ \ \ \ n1\ :=\ triangleNormal(t1)}\newline +{\tt 4.\ \ \ \ \ n2\ :=\ triangleNormal(t2)}\newline +{\tt 5.\ \ \ \ \ tet2tet(concat(t1,\ n1),\ concat(t2,\ n2))}\newline +{\tt 6.\ \ \ \ }\newline +{\tt 7.\ \ \ tet2tet:\ (List\ Point\ DFLOAT,\ List\ Point\ DFLOAT)\ ->\ DHMATRIX(DFLOAT)}\newline +{\tt 8.\ \ \ tet2tet(t1,\ t2)\ ==}\newline +{\tt 9.\ \ \ \ \ m1\ :=\ makeColumnMatrix\ t1}\newline +{\tt 10.\ \ \ \ m2\ :=\ makeColumnMatrix\ t2}\newline +{\tt 11.\ \ \ \ m2\ *\ inverse(m1)}\newline +{\tt 12.\ \ \ }\newline +{\tt 13.\ \ makeColumnMatrix(t)\ ==}\newline +{\tt 14.\ \ \ \ m\ :=\ new(4,4,0)\$DHMATRIX(DFLOAT)}\newline +{\tt 15.\ \ \ \ for\ x\ in\ t\ for\ i\ in\ 1..repeat}\newline +{\tt 16.\ \ \ \ \ \ for\ j\ in\ 1..3\ repeat}\newline +{\tt 17.\ \ \ \ \ \ \ \ m(j,i)\ :=\ x.j}\newline +{\tt 18.\ \ \ \ \ \ m(4,i)\ :=\ 1}\newline +{\tt 19.\ \ \ \ m}\newline +{\tt 20.\ \ \ }\newline +{\tt 21.\ \ triangleNormal(t)\ ==}\newline +{\tt 22.\ \ \ \ a\ :=\ triangleArea\ t}\newline +{\tt 23.\ \ \ \ p1\ :=\ t.2\ -\ t.1}\newline +{\tt 24.\ \ \ \ p2\ :=\ t.3\ -\ t.2}\newline +{\tt 25.\ \ \ \ c\ :=\ cross(p1,\ p2)}\newline +{\tt 26.\ \ \ \ len\ :=\ length(c)}\newline +{\tt 27.\ \ \ \ len\ =\ 0\ =>\ error\ "degenerate\ triangle!"}\newline +{\tt 28.\ \ \ \ c\ :=\ (1/len)*c}\newline +{\tt 29.\ \ \ \ t.1\ +\ sqrt(a)\ *\ c}\newline +{\tt 30.\ \ \ }\newline +{\tt 31.\ \ triangleArea\ t\ ==}\newline +{\tt 32.\ \ \ \ a\ :=\ length(t.2\ -\ t.1)}\newline +{\tt 33.\ \ \ \ b\ :=\ length(t.3\ -\ t.2)}\newline +{\tt 34.\ \ \ \ c\ :=\ length(t.1\ -\ t.3)}\newline +{\tt 35.\ \ \ \ s\ :=\ (a+b+c)/2}\newline +{\tt 36.\ \ \ \ sqrt(s*(s-a)*(s-b)*(s-c))}\newline + +\noindent + + +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFtetraTitle}{tetra.input} +\newcommand{\ugFtetraNumber}{G.12.} + +@ +\section{tetra.input} +\label{ugFtetraPage} +\index{pages!ugFtetraPage!ug21.ht} +\index{ug21.ht!pages!ugFtetraPage} +\index{ugFtetraPage!ug21.ht!pages} +<>= +\begin{page}{ugFtetraPage}{G.12. tetra.input} +\beginscroll +% +%\input{gallery/tetra.htex} +%\outdent{Sierpinsky's Tetrahedron} + +\labelSpace{3pc} + + +\noindent +{\tt 1.\ \ \ )set\ expose\ add\ con\ DenavitHartenbergMatrix}\newline +{\tt 2.\ \ \ }\newline +{\tt 3.\ \ \ x1:DFLOAT\ :=\ sqrt(2.0@DFLOAT/3.0@DFLOAT)}\newline +{\tt 4.\ \ \ x2:DFLOAT\ :=\ sqrt(3.0@DFLOAT)/6}\newline +{\tt 5.\ \ \ }\newline +{\tt 6.\ \ \ p1\ :=\ point\ [-0.5@DFLOAT,\ -x2,\ 0.0@DFLOAT]}\newline +{\tt 7.\ \ \ p2\ :=\ point\ [0.5@DFLOAT,\ -x2,\ 0.0@DFLOAT]}\newline +{\tt 8.\ \ \ p3\ :=\ point\ [0.0@DFLOAT,\ 2*x2,\ 0.0@DFLOAT]}\newline +{\tt 9.\ \ \ p4\ :=\ point\ [0.0@DFLOAT,\ 0.0@DFLOAT,\ x1]}\newline +{\tt 10.\ \ \ }\newline +{\tt 11.\ \ baseTriangle\ \ :=\ [p2,\ p1,\ p3]}\newline +{\tt 12.\ \ }\newline +{\tt 13.\ \ mt\ \ :=\ [0.5@DFLOAT*(p2+p1),\ 0.5@DFLOAT*(p1+p3),\ 0.5@DFLOAT*(p3+p2)]}\newline +{\tt 14.\ \ }\newline +{\tt 15.\ \ bt1\ :=\ [mt.1,\ p1,\ mt.2]}\newline +{\tt 16.\ \ bt2\ :=\ [p2,\ mt.1,\ mt.3]}\newline +{\tt 17.\ \ bt3\ :=\ [mt.2,\ p3,\ mt.3]}\newline +{\tt 18.\ \ bt4\ :=\ [0.5@DFLOAT*(p2+p4),\ 0.5@DFLOAT*(p1+p4),\ 0.5@DFLOAT*(p3+p4)]}\newline +{\tt 19.\ \ }\newline +{\tt 20.\ \ tt1\ :=\ tri2tri(baseTriangle,\ bt1)}\newline +{\tt 21.\ \ tt2\ :=\ tri2tri(baseTriangle,\ bt2)}\newline +{\tt 22.\ \ tt3\ :=\ tri2tri(baseTriangle,\ bt3)}\newline +{\tt 23.\ \ tt4\ :=\ tri2tri(baseTriangle,\ bt4)}\newline +{\tt 24.\ \ }\newline +{\tt 25.\ \ drawPyramid(n)\ ==}\newline +{\tt 26.\ \ \ \ s\ :=\ createThreeSpace()}\newline +{\tt 27.\ \ \ \ dh\ :=\ rotatex(0.0@DFLOAT)}\newline +{\tt 28.\ \ \ \ drawPyramidInner(s,\ n,\ dh)}\newline +{\tt 29.\ \ \ \ makeViewport3D(s,\ "Sierpinsky\ Tetrahedron")}\newline +{\tt 30.\ \ }\newline +{\tt 31.\ \ drawPyramidInner(s,\ n,\ dh)\ ==}\newline +{\tt 32.\ \ \ \ n\ =\ 0\ =>\ makeTetrahedron(s,\ dh,\ n)}\newline +{\tt 33.\ \ \ \ drawPyramidInner(s,\ n-1,\ dh\ *\ tt1)}\newline +{\tt 34.\ \ \ \ drawPyramidInner(s,\ n-1,\ dh\ *\ tt2)}\newline +{\tt 35.\ \ \ \ drawPyramidInner(s,\ n-1,\ dh\ *\ tt3)}\newline +{\tt 36.\ \ \ \ drawPyramidInner(s,\ n-1,\ dh\ *\ tt4)}\newline +{\tt 37.\ \ }\newline +{\tt 38.\ \ makeTetrahedron(sp,\ dh,\ color)\ ==}\newline +{\tt 39.\ \ \ \ w1\ :=\ dh*p1}\newline +{\tt 40.\ \ \ \ w2\ :=\ dh*p2}\newline +{\tt 41.\ \ \ \ w3\ :=\ dh*p3}\newline +{\tt 42.\ \ \ \ w4\ :=\ dh*p4}\newline +{\tt 43.\ \ \ \ polygon(sp,\ [w1,\ w2,\ w4])}\newline +{\tt 44.\ \ \ \ polygon(sp,\ [w1,\ w3,\ w4])}\newline +{\tt 45.\ \ \ \ polygon(sp,\ [w2,\ w3,\ w4])}\newline +{\tt 46.\ \ \ \ void()}\newline + +\noindent + + +%\input{gallery/antoine.htex} +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFantoineTitle}{antoine.input} +\newcommand{\ugFantoineNumber}{G.13.} + +@ +\section{antoine.input} +\label{ugFantoinePage} +\index{pages!ugFantoinePage!ug21.ht} +\index{ug21.ht!pages!ugFantoinePage} +\index{ugFantoinePage!ug21.ht!pages} +<>= +\begin{page}{ugFantoinePage}{G.13. antoine.input} +\beginscroll +% +Draw Antoine's Necklace. +Thank you to Matthew Grayson at IBM's T.J Watson Research Center for the idea. + + +\noindent +{\tt 1.\ \ \ )set\ expose\ add\ con\ DenavitHartenbergMatrix}\newline +{\tt 2.\ \ \ }\newline +{\tt 3.\ \ \ torusRot:\ DHMATRIX(DFLOAT)}\newline +{\tt 4.\ \ \ }\newline +{\tt 5.\ \ \ }\newline +{\tt 6.\ \ \ drawRings(n)\ ==}\newline +{\tt 7.\ \ \ \ \ s\ :=\ createThreeSpace()}\newline +{\tt 8.\ \ \ \ \ dh:DHMATRIX(DFLOAT)\ :=\ identity()}\newline +{\tt 9.\ \ \ \ \ drawRingsInner(s,\ n,\ dh)}\newline +{\tt 10.\ \ \ \ makeViewport3D(s,\ "Antoine's\ Necklace")}\newline +{\tt 11.\ \ }\newline + +\noindent + +In order to draw Antoine rings, we take one ring, scale it down to +a smaller size, rotate it around its central axis, translate it +to the edge of the larger ring and rotate it around the edge to +a point corresponding to its count (there are 10 positions around +the edge of the larger ring). For each of these new rings we +recursively perform the operations, each ring becoming 10 smaller +rings. Notice how the \axiomType{DHMATRIX} operations are used to build up +the proper matrix composing all these transformations. + + +\noindent +{\tt 1.\ \ \ drawRingsInner(s,\ n,\ dh)\ ==}\newline +{\tt 2.\ \ \ \ \ n\ =\ 0\ =>}\newline +{\tt 3.\ \ \ \ \ \ \ drawRing(s,\ dh)}\newline +{\tt 4.\ \ \ \ \ \ \ void()}\newline +{\tt 5.\ \ \ \ \ t\ :=\ 0.0@DFLOAT}\newline +{\tt 6.\ \ \ \ \ p\ :=\ 0.0@DFLOAT}\newline +{\tt 7.\ \ \ \ \ tr\ :=\ 1.0@DFLOAT}\newline +{\tt 8.\ \ \ \ \ inc\ :=\ 0.1@DFLOAT}\newline +{\tt 9.\ \ \ \ \ for\ i\ in\ 1..10\ repeat}\newline +{\tt 10.\ \ \ \ \ \ tr\ :=\ tr\ +\ inc}\newline +{\tt 11.\ \ \ \ \ \ inc\ :=\ -inc}\newline +{\tt 12.\ \ \ \ \ \ dh'\ :=\ dh*rotatez(t)*translate(tr,0.0@DFLOAT,0.0@DFLOAT)*}\newline +{\tt 13.\ \ \ \ \ \ \ \ \ \ \ \ \ rotatey(p)*scale(0.35@DFLOAT,\ 0.48@DFLOAT,\ 0.4@DFLOAT)}\newline +{\tt 14.\ \ \ \ \ \ drawRingsInner(s,\ n-1,\ dh')}\newline +{\tt 15.\ \ \ \ \ \ t\ :=\ t\ +\ 36.0@DFLOAT}\newline +{\tt 16.\ \ \ \ \ \ p\ :=\ p\ +\ 90.0@DFLOAT}\newline +{\tt 17.\ \ \ \ void()}\newline +{\tt 18.\ \ }\newline +{\tt 19.\ \ drawRing(s,\ dh)\ ==}\newline +{\tt 20.\ \ \ \ free\ torusRot}\newline +{\tt 21.\ \ \ \ torusRot\ :=\ dh}\newline +{\tt 22.\ \ \ \ makeObject(torus,\ 0..2*\%pi,\ 0..2*\%pi,\ var1Steps\ ==\ 6,}\newline +{\tt 23.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ space\ ==\ s,\ var2Steps\ ==\ 15)}\newline +{\tt 24.\ \ }\newline +{\tt 25.\ \ torus(u\ ,v)\ ==}\newline +{\tt 26.\ \ \ \ cu\ :=\ cos(u)/6}\newline +{\tt 27.\ \ \ \ torusRot*point\ [(1+cu)*cos(v),(1+cu)*sin(v),(sin\ u)/6]}\newline + +\noindent + +%\input{gallery/scherk.htex} +\endscroll +\autobuttons +\end{page} + +@ +<>= +\newcommand{\ugFscherkTitle}{scherk.input} +\newcommand{\ugFscherkNumber}{G.14.} + +@ +\section{scherk.input} +\label{ugFscherkPage} +\index{pages!ugFscherkPage!ug21.ht} +\index{ug21.ht!pages!ugFscherkPage} +\index{ugFscherkPage!ug21.ht!pages} +<>= +\begin{page}{ugFscherkPage}{G.14. scherk.input} +\beginscroll +% + +Scherk's minimal surface, defined by: +\texht{$e^z \cos(x) = \cos(y)$}{\axiom{exp(z) * cos(x) = cos(y)}}. +See: {\it A Comprehensive Introduction to Differential Geometry,} Vol. 3, +by Michael Spivak, Publish Or Perish, Berkeley, 1979, pp. 249-252. + + +\noindent +{\tt 1.\ \ \ (xOffset,\ yOffset):DFLOAT}\newline +{\tt 2.\ \ \ \ }\newline +{\tt 3.\ \ \ }\newline +{\tt 4.\ \ \ drawScherk(m,n)\ ==}\newline +{\tt 5.\ \ \ \ \ free\ xOffset,\ yOffset}\newline +{\tt 6.\ \ \ \ \ space\ :=\ createThreeSpace()}\newline +{\tt 7.\ \ \ \ \ for\ i\ in\ 0..m-1\ repeat}\newline +{\tt 8.\ \ \ \ \ \ \ xOffset\ :=\ i*\%pi}\newline +{\tt 9.\ \ \ \ \ \ \ for\ j\ in\ 0\ ..\ n-1\ repeat}\newline +{\tt 10.\ \ \ \ \ \ \ \ rem(i+j,\ 2)\ =\ 0\ =>\ 'iter}\newline +{\tt 11.\ \ \ \ \ \ \ \ yOffset\ :=\ j*\%pi}\newline +{\tt 12.\ \ \ \ \ \ \ \ drawOneScherk(space)}\newline +{\tt 13.\ \ \ \ makeViewport3D(space,\ "Scherk's\ Minimal\ Surface")}\newline +{\tt 14.\ \ }\newline +{\tt 15.\ \ scherk1(u,v)\ ==}\newline +{\tt 16.\ \ \ \ x\ :=\ cos(u)/exp(v)}\newline +{\tt 17.\ \ \ \ point\ [xOffset\ +\ acos(x),\ yOffset\ +\ u,\ v,\ abs(v)]}\newline +{\tt 18.\ \ \ }\newline +{\tt 19.\ \ scherk2(u,v)\ ==}\newline +{\tt 20.\ \ \ \ x\ :=\ cos(u)/exp(v)}\newline +{\tt 21.\ \ \ \ point\ [xOffset\ -\ acos(x),\ yOffset\ +\ u,\ v,\ abs(v)]}\newline +{\tt 22.\ \ \ }\newline +{\tt 23.\ \ scherk3(u,v)\ ==\ }\newline +{\tt 24.\ \ \ \ x\ :=\ exp(v)\ *\ cos(u)}\newline +{\tt 25.\ \ \ \ point\ [xOffset\ +\ u,\ yOffset\ +\ acos(x),\ v,\ abs(v)]}\newline +{\tt 26.\ \ \ }\newline +{\tt 27.\ \ scherk4(u,v)\ ==\ }\newline +{\tt 28.\ \ \ \ x\ :=\ exp(v)\ *\ cos(u)}\newline +{\tt 29.\ \ \ \ point\ [xOffset\ +\ u,\ yOffset\ -\ acos(x),\ v,\ abs(v)]}\newline +{\tt 30.\ \ \ }\newline +{\tt 31.\ \ drawOneScherk(s)\ ==}\newline +{\tt 32.\ \ \ \ makeObject(scherk1,-\%pi/2..\%pi/2,0..\%pi/2,space==s,}\newline +{\tt 33.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ var1Steps\ ==\ 28,\ var2Steps\ ==\ 28)}\newline +{\tt 34.\ \ \ \ makeObject(scherk2,-\%pi/2..\%pi/2,0..\%pi/2,space==s,}\newline +{\tt 35.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ var1Steps\ ==\ 28,\ var2Steps\ ==\ 28)}\newline +{\tt 36.\ \ \ \ makeObject(scherk3,-\%pi/2..\%pi/2,-\%pi/2..0,space==s,}\newline +{\tt 37.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ var1Steps\ ==\ 28,\ var2Steps\ ==\ 28)}\newline +{\tt 38.\ \ \ \ makeObject(scherk4,-\%pi/2..\%pi/2,-\%pi/2..0,space==s,}\newline +{\tt 39.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ var1Steps\ ==\ 28,\ var2Steps\ ==\ 28)}\newline +{\tt 40.\ \ \ \ void()}\newline + +\noindent +\endscroll +\autobuttons +\end{page} + +@ +\chapter{Hypertex Language Pages} +\section{hyperdoc.ht} +\subsection{Creating Hyperdoc Pages} +\label{Hyperdoc} +\begin{itemize} +\item ViewportPage \ref{ViewportPage} on +page~\pageref{ViewportPage} +\item BitMaps \ref{BitMaps} on +page~\pageref{BitMaps} +\item CPHelp \ref{CPHelp} on +page~\pageref{CPHelp} +\end{itemize} +\index{pages!Hyperdoc!hyperdoc.ht} +\index{hyperdoc.ht!pages!Hyperdoc} +\index{Hyperdoc!hyperdoc.ht!pages} +<>= +\begin{page}{Hyperdoc}{Creating Hyperdoc Pages} + +\beginscroll +This document tells how to create \HyperName pages. +To start with, it is rather meager but it will grow with time. +\beginmenu +\menulink{Viewports}{ViewportPage} Including live graphics in documents. +\menulink{Gadjets}{BitMaps} Bitmaps for use in macros. +\menulink{Control Panel Bits}{CPHelp} Development page for help +facility for viewports. yuck. +%\menulink{Test Pages}{TestPage} Some test pages left by J.M. +%\menulink{Paste Pages}{PastePage} Examples of how to use paste in areas. +\endmenu + +\endscroll +\autobuttons +\end{page} + +@ +\section{htxadvpage1.ht} +\subsection{Input Areas} +\label{HTXAdvPage1} +See HTXAdvPage2 \ref{HTXAdvPage2} on page~\pageref{HTXAdvPage2} +\index{pages!HTXAdvPage1!htxadvpage1.ht} +\index{htxadvpage1.ht!pages!HTXAdvPage1} +\index{HTXAdvPage1!htxadvpage1.ht!pages} +<>= +\begin{page}{HTXAdvPage1}{Input areas} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +You have probably seen input areas in other \HyperName{} +pages. They provide {\it dynamic link} capabilities. +Instead of having a choice between certain actions, +they allow you to specify an action on--the--fly. +To use them, you need the following commands: +\beginImportant +\newline +{\tt \\inputstring\{{\it label}\}\{{\it length}\}\{{\it default value}\}} +\newline +{\tt \\stringvalue\{{\it label}\}} +\endImportant + +The first command puts up an input area of the {\it length} +specified. The {\it default value} is placed in it. +The first argument, {\it label} gives a name to the +contents of the input area. +You can refer to those contents by using +the second command. Never place a {\tt \\stringvalue} command +in an "exposed" part of the page. It is only meant +to be used as an argument to an {\it action}. +Here are some examples. + + + + + +\beginImportant +\begin{paste}{HTXAdvPage1xPaste1}{HTXAdvPage1xPatch1} +\pastebutton{HTXAdvPage1xPaste1}{Interpret} +\newline +{\tt Page name \\tab\{16\} } +{\tt \\inputstring\{pagetogo\}\{30\}\{RootPage\}}\newline +{\tt \\newline}\newline +{\tt \\downlink\{GO!\}\{\\stringvalue\{pagetogo\}\}}\newline +\end{paste} +\endImportant + +\beginImportant +\begin{paste}{HTXAdvPage1xPaste2}{HTXAdvPage1xPatch2} +\pastebutton{HTXAdvPage1xPaste2}{Interpret} +\newline +{\tt File to edit \\tab\{16\}}\newline +{\tt \\inputstring\{filetoedit\}\{30\}\{/etc/passwd\}}\newline +{\tt \\newline}\newline +{\tt \\unixcommand\{Ready!\}\{xterm -e vi \\stringvalue\{filetoedit\}\}} +\end{paste} +\endImportant + + +\end{scroll} +\beginmenu +\menulink{Next Page --- Radio boxes}{HTXAdvPage2} +\endmenu + +\end{page} + +@ +\subsection{HTXAdvPage1xPatch1 patch} +\label{HTXAdvPage1xPatch1} +\index{patch!HTXAdvPage1xPatch1!htxadvpage1.ht} +\index{htxadvpage1.ht!patch!HTXAdvPage1xPatch1} +\index{HTXAdvPage1xPatch1!htxadvpage1.ht!patch} +<>= +\begin{patch}{HTXAdvPage1xPatch1} +\begin{paste}{HTXAdvPage1xPaste1A}{HTXAdvPage1xPatch1A} +\pastebutton{HTXAdvPage1xPaste1A}{Source} +\newline +Page name \tab{16} +\inputstring{pagetogo}{30}{RootPage} +\newline +\downlink{GO!}{\stringvalue{pagetogo}} +\end{paste} +\end{patch} + +@ +\subsection{HTXAdvPage1xPatch1A patch} +\label{HTXAdvPage1xPatch1A} +\index{patch!HTXAdvPage1xPatch1A!htxadvpage1.ht} +\index{htxadvpage1.ht!patch!HTXAdvPage1xPatch1A} +\index{HTXAdvPage1xPatch1A!htxadvpage1.ht!patch} +<>= +\begin{patch}{HTXAdvPage1xPatch1A} +\begin{paste}{HTXAdvPage1xPaste1B}{HTXAdvPage1xPatch1} +\pastebutton{HTXAdvPage1xPaste1B}{Interpret} +\newline +{\tt Page name \\tab\{16\} } +{\tt \\inputstring\{pagetogo\}\{30\}\{RootPage\}}\newline +{\tt \\newline}\newline +{\tt \\downlink\{GO!\}\{\\stringvalue\{pagetogo\}\}}\newline +\end{paste} +\end{patch} + +@ +\subsection{HTXAdvPage1xPatch2 patch} +\label{HTXAdvPage1xPatch2} +\index{patch!HTXAdvPage1xPatch2!htxadvpage1.ht} +\index{htxadvpage1.ht!patch!HTXAdvPage1xPatch2} +\index{HTXAdvPage1xPatch2!htxadvpage1.ht!patch} +<>= +\begin{patch}{HTXAdvPage1xPatch2} +\begin{paste}{HTXAdvPage1xPaste2A}{HTXAdvPage1xPatch2A} +\pastebutton{HTXAdvPage1xPaste2A}{Source} +\newline +File to edit \tab{16} +\inputstring{filetoedit}{30}{/etc/passwd} +\newline +\unixcommand{Ready!}{xterm -e vi \stringvalue{filetoedit}} +\end{paste} +\end{patch} + +@ +\subsection{HTXAdvPage1xPatch2A patch} +\label{HTXAdvPage1xPatch2A} +\index{patch!HTXAdvPage1xPatch2A!htxadvpage1.ht} +\index{htxadvpage1.ht!patch!HTXAdvPage1xPatch2A} +\index{HTXAdvPage1xPatch2A!htxadvpage1.ht!patch} +<>= +\begin{patch}{HTXAdvPage1xPatch2A} +\begin{paste}{HTXAdvPage1xPaste2B}{HTXAdvPage1xPatch2} +\pastebutton{HTXAdvPage1xPaste2B}{Interpret} +\newline +{\tt File to edit \\tab\{16\}}\newline +{\tt \\inputstring\{filetoedit\}\{30\}\{/etc/passwd\}}\newline +{\tt \\newline}\newline +{\tt \\unixcommand\{Ready!\}\{xterm -e vi \\stringvalue\{filetoedit\}\}} +\end{paste} +\end{patch} + +@ +\section{htxadvpage2.ht} +\subsection{Radio buttons} +\label{HTXAdvPage2} +See HTXAdvPage3 \ref{HTXAdvPage3} on page~\pageref{HTXAdvPage3} +\index{pages!HTXAdvPage2!htxadvpage2.ht} +\index{htxadvpage2.ht!pages!HTXAdvPage2} +\index{HTXAdvPage2!htxadvpage2.ht!pages} +<>= +\begin{page}{HTXAdvPage2}{Radio buttons} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + + +If you just want to make a multiple-choice +type selection, why not use the {\it radio buttons}. + +You need to use bitmaps for the active areas (the buttons) but +\HyperName{} will keep track of the currently activated button. +You can use this boolean information somewhere else on your page. +The commands to use are: +\beginImportant +\newline +{\tt \\radioboxes\{{\it group name}\}\{{\it bitmap file1}\}\{{\it bitmap file0}\}} +\newline +{\tt \\radiobox[{\it initial state}]\{{\it label}\}\{{\it group name}\}} +\newline +{\tt \\boxvalue\{{\it label}\}} +\endImportant + +The {\tt \\radioboxes} command sets up a group of {\tt \\radiobox} +buttons. The {\it group name} is a label for the group. The filenames +for the bitmaps are specified in {\it bitmap file1} and {\it bitmap file0}. +The first one should denote an activated button and the second +a de-activated one. + +To display each button in a group, use {\tt \\radiobox}. +The {\it initial state} should be either {\tt 1} or {\tt 0} +depending on whether the button should first be displayed as activated or not. +The second {\it label} argument defines the name by which the +current state of the button can be referred to. +The third argument specifies which group this button belongs to. + +The {\tt \\boxvalue} command can then be used in various +actions. The value of it will +be either {\tt t} or {\tt nil}. + +In the example below, we use the {\tt \\htbmfile} macro +defined in {\bf util.ht} so that we do not have to write +the full bitmap file pathnames. + +This is how we set up the group. The {\tt \\radioboxes} command does not display +anything. +Note that these commands cannot be included in a {\it patch}. +This is why we display this time the source and the result +at the same time. +\beginImportant +\newline +{\tt \\radioboxes\{group\}\{\\htbmfile\{pick\}\}\{\\htbmfile\{unpick\}\}}\newline +{\tt \\newline \\table\{}\newline +{\tt \{\\radiobox[1]\{b1\}\{group\}\}}\newline +{\tt \{\\radiobox[0]\{b2\}\{group\}\}}\newline +{\tt \{\\radiobox[0]\{b3\}\{group\}\}\}}\newline +{\tt \\newline}\newline +{\tt \\lispcommand\{lisp\}\{(pprint (list}\newline +{\tt \\boxvalue\{b1\} \\boxvalue\{b2\} \\boxvalue\{b3\}))\}}\newline +{\tt \\newline}\newline +{\tt \\unixcommand\{unix\}\{echo '\\boxvalue\{b1\}}\newline +{\tt \\boxvalue\{b2\} \\boxvalue\{b3\}'\}} +\endImportant +\radioboxes{group}{\htbmfile{pick}}{\htbmfile{unpick}} +\table{ +{\radiobox[1]{b1}{group}} +{\radiobox[0]{b2}{group}} +{\radiobox[0]{b3}{group}}} +\newline +\lispcommand{lisp}{(pprint (list +\boxvalue{b1} \boxvalue{b2} \boxvalue{b3}))} +\newline +\unixcommand{unix}{echo '\boxvalue{b1} +\boxvalue{b2} \boxvalue{b3}'} +\endImportant + + + + +You can only set one radio button at a time. If you want +a non--exclusive selection, try {\tt \\inputbox}. +The syntax for this command is +\beginImportant +\newline +{\tt \\inputbox[{\it initial state}]\{{\it label}\}\{{\it bitmap file1}\}\{{\it bitmap file0}\}} +\endImportant + +There is no group command for these. +\beginImportant +\newline +{\tt \\table\{}\newline +{\tt \{\\inputbox[1]\{c1\}\{\\htbmfile\{pick\}\}\{\\htbmfile\{unpick\}\}\}}\newline +{\tt \{\\inputbox\{c2\}\{\\htbmfile\{pick\}\}\{\\htbmfile\{unpick\}\}\}}\newline +{\tt \{\\inputbox[1]\{c3\}\{\\htbmfile\{pick\}\}\{\\htbmfile\{unpick\}\}\}\}}\newline +{\tt \\newline}\newline +{\tt \\lispcommand\{lisp\}\{(pprint (list}\newline +{\tt \\boxvalue\{c1\} \\boxvalue\{c2\} \\boxvalue\{c3\}))\}}\newline +{\tt \\newline}\newline +{\tt \\unixcommand\{unix\}\{echo }\newline +{\tt '\\boxvalue\{c1\} \\boxvalue\{c2\} \\boxvalue\{c3\}'\}}\newline +\endImportant +\table{ +{\inputbox[1]{c1}{\htbmfile{pick}}{\htbmfile{unpick}}} +{\inputbox{c2}{\htbmfile{pick}}{\htbmfile{unpick}}} +{\inputbox[1]{c3}{\htbmfile{pick}}{\htbmfile{unpick}}}} +\newline +\lispcommand{lisp}{(pprint (list +\boxvalue{c1} \boxvalue{c2} \boxvalue{c3}))} +\newline +\unixcommand{unix}{echo +'\boxvalue{c1} \boxvalue{c2} \boxvalue{c3}'} +\endImportant + + +Note that the {\it initial state} is an +optional argument. If omitted +the button will initially +be deactivated. + +\end{scroll} +\beginmenu +\menulink{Next Page --- Macros}{HTXAdvPage3} +\endmenu + +\end{page} + +@ +\section{htxadvpage3.ht} +\subsection{Macros} +\label{HTXAdvPage3} +See HTXAdvPage4 \ref{HTXAdvPage4} on page~\ref{HTXAdvPage4}p +\index{pages!HTXAdvPage3!htxadvpage3.ht} +\index{htxadvpage3.ht!pages!HTXAdvPage3} +\index{HTXAdvPage3!htxadvpage3.ht!pages} +<>= +\begin{page}{HTXAdvPage3}{Macros} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + + +Sometimes you may find yourself having to +write +almost the same piece of \HyperName{} +text many times. Thankfully, there is a command to ease +the work. +It is the {\tt \\newcommand} command and provides +a macro facility for \HyperName{}. +In this way, you can give a short name to a sequence of \HyperName{} +text and use that name to include the sequence in your pages. +The way this works is the following +\beginImportant +\newline +\centerline{{\tt \\newcommand\{\\{\it name}\}[{\it number of arguments}]\{{\it \HyperName{} text}\}}} +\endImportant +and here is an example from {\bf util.ht} +\beginImportant +\newline +{\tt \\newcommand\{\\axiomSig\}[2]\{\\axiomType\{\#1\} \{\\tt ->\} \\axiomType\{\#2\}\}} +\newline +{\tt \\newcommand\{\\axiomType\}[1]\{\\lispdownlink\{\#1\}\{(|spadType| '|\#1|)\}\}} +\endImportant + +You see that a macro's definition can invoke another. +Don't create a circular definition though! +Notice how the arguments of the macro are used +in the definition. The {\tt \#{\it n}} construct +is the place--holder of the {\it n}'th argument. + +To use the macro, just treat it as an ordinary command. +For instance +\beginImportant +\newline +{\tt \\axiomSig\{Integer\}\{List Integer\}} +\endImportant +displays and acts like this +\beginImportant +\newline +\axiomSig{Integer}{List Integer} +\endImportant + +The best way to familiarise yourself to +macros is to study the macros defined in +\centerline{ +{\bf \env{AXIOM}/doc/hypertex/pages/util.ht} +} +It is highly probable that a good many of them +will prove useful to you. +Clever use of macros will allow you to +create \HyperName{} text that can be +formatted by other programs (such as TeX). +The Axiom User Guide was written +in such a way as to make translation in +\HyperName{} form and TeX form a mechanical process. + + + + +\end{scroll} +\beginmenu +\menulink{Next Page --- Patch and Paste}{HTXAdvPage4} +\endmenu + +\end{page} + +@ +\section{htxadvpage4.ht} +\subsection{Patch and Paste} +\label{HTXAdvPage4} +See HTXAdvPage5 \ref{HTXAdvPage5} on page~\pageref{HTXAdvPage5} +\index{pages!HTXAdvPage4!htxadvpage4.ht} +\index{htxadvpage4.ht!pages!HTXAdvPage4} +\index{HTXAdvPage4!htxadvpage4.ht!pages} +<>= +\begin{page}{HTXAdvPage4}{Patch and Paste} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + + +A powerful \HyperName{} feature is +the ability to {\it replace} +part of a displayed page with another part +when an active area is clicked. The group commands +{\it patch} and {\it paste} offer this facility. +A {\it paste} region can appear anywhere +within a page or a {\it patch}. A {\it patch} region must be defined +outside a page definition. + +We need a few objects to define the {\it paste} +region. These are a {\it name} with which to +refer to it, some way of specifying what it +is to be replaced by and a {\it trigger} for the +replacement. A {\it patch} is how we specify the +second of these objects. +The {\it patch} is generally a sequence of \HyperName{} +text. + +If we want to have the option of returning to the original +(or ,indeed, proceeding to a {\it third} alternative) +we clearly must include a {\it paste} in the {\it patch}. + +Let us start with a simple example. We wish to +have the word {\tt initial} somewhere on the page replaced by the +word {\tt final} at a click of a button. +Let us first define the {\it patch}. It will just contain +the word {\tt final}. Here is a definition of a +patch called {\tt patch1} (note that +the actual definition must be outside this page's definition). +\beginImportant +\newline +{\tt \\begin\{patch\}\{patch1\}} \newline +{\tt final}\newline +{\tt \\end\{patch\}} +\endImportant +We now define a {\it paste} region exactly where we +want the word {\tt initial} to appear. +\beginImportant +\newline +{\tt \\begin\{paste\}\{paste1\}\{patch1\}}\newline +{\tt initial}\newline +{\tt \\end\{paste\}} +\centerline{{\it results in}} +\begin{paste}{paste1}{patch1} +initial +\end{paste} +\endImportant +We have specified first the name of the {\it paste} region +which is {\tt paste1} and then the name of the +replacement {\it patch} which is {\tt patch1}. +Something is missing -- the trigger. +To include a trigger we write +\beginImportant +\newline +{\tt \\pastebutton\{paste1\}\{trigger\} +\centerline{{\it results in}} +\pastebutton{paste1}{trigger} +\endImportant +This new command {\tt \\pastebutton} displays the second argument +as an active area. The first argument specifies the {\it paste} +region it refers to. Clicking on {\tt trigger} above will +replace the word {\tt initial} with the word {\tt final}. + +We can, if we like, include the {\tt \\pastebutton} in the {\it paste} +region. +Let us improve on the situation by providing a way +of going back to the original word {\tt initial} on the page. +The {\it patch} must itself include a {\it paste}. +What will the replacement {\it patch} for this new {\it paste} +be ? Well, we have to define a second {\it patch} +that contains all the stuff in the original {\it paste} +region. Here is the updated {\it patch} for the first replacement. +The {\tt \\MenuDotBitmap} macro is defined in {\bf util.ht}. +It displays a button bitmap. +This time we put the {\tt \\pastebutton} +inside the {\it paste}. +\beginImportant +\newline +{\tt \\begin\{patch\}\{Patch1\}}\newline +{\tt \\begin\{paste\}\{Paste2\}\{Patch2\}}\newline +{\tt \\pastebutton\{Paste2\}\{\\MenuDotBitmap\}}\newline +{\tt final}\newline +{\tt \\end\{paste\}}\newline +{\tt \\end\{patch\}}\newline +\endImportant +and the new {\tt Patch2} {\it patch} +\beginImportant +\newline +{\tt \\begin\{patch\}\{Patch2\}}\newline +{\tt \\begin\{paste\}\{Paste3\}\{Patch1\}}\newline +{\tt \\pastebutton\{Paste3\}\{\\MenuDotBitmap\}}\newline +{\tt initial}\newline +{\tt \\end\{paste\}}\newline +{\tt \\end\{patch\}}\newline +\endImportant + +Remember that these {\it patch} definitons must +occur outside a {\tt \\begin\{page\} - \\end\{page\}} group. +What is left now is to define the starting {\it paste} +region. +\beginImportant +\newline +{\tt \\begin\{paste\}\{Paste1\}\{Patch1\}}\newline +{\tt \\pastebutton\{Paste1\}\{\\MenuDotBitmap\}}\newline +{\tt initial}\newline +{\tt \\end\{paste\}} +\centerline{{\it results in}} +\begin{paste}{Paste1}{Patch1} +\pastebutton{Paste1}{\MenuDotBitmap} +initial +\end{paste} +\endImportant + +Clicking on the button above next to {\tt initial} +will replace the {\tt Paste1} region with +{\tt Patch1}. That {\it patch} +also contains a {\it paste} region ({\tt Paste2}). +Clicking on {\it its} button will put up +{\tt Patch2} which has a {\it paste} region ({\tt Paste3}). +Clicking on {\it its} button will put up {\tt Patch1} +again. In that way, we close the chain of replacements. + + + + +\end{scroll} +\beginmenu +\menulink{Next Page --- Axiom paste-ins}{HTXAdvPage5} +\endmenu + +\end{page} + +@ +\subsection{patch1 patch} +\label{patch1} +\index{patch!patch1!htxadvpage4.ht} +\index{htxadvpage4.ht!patch!patch1} +\index{patch1!htxadvpage4.ht!patch} +<>= +\begin{patch}{patch1} +final +\end{patch} + +@ +\subsection{Patch1 patch} +\label{Patch1} +\index{patch!Patch1!htxadvpage4.ht} +\index{htxadvpage4.ht!patch!Patch1} +\index{Patch1!htxadvpage4.ht!patch} +<>= +\begin{patch}{Patch1} +\begin{paste}{Paste2}{Patch2} +\pastebutton{Paste2}{\MenuDotBitmap} +final +\end{paste} +\end{patch} + +@ +\subsection{Patch2 patch} +\label{Patch2} +\index{patch!Patch2!htxadvpage4.ht} +\index{htxadvpage4.ht!patch!Patch2} +\index{Patch2!htxadvpage4.ht!patch} +<>= +\begin{patch}{Patch2} +\begin{paste}{Paste3}{Patch1} +\pastebutton{Paste3}{\MenuDotBitmap} +initial +\end{paste} +\end{patch} + +@ +\section{htxadvpage5.ht} +\subsection{Axiom paste-ins} +\label{HTXAdvPage5} +See HTXAdvPage6 \ref{HTXAdvPage6} on page~\pageref{HTXAdvPage6} +\index{pages!HTXAdvPage5!htxadvpage5.ht} +\index{htxadvpage5.ht!pages!HTXAdvPage5} +\index{HTXAdvPage5!htxadvpage5.ht!pages} +<>= +\begin{page}{HTXAdvPage5}{Axiom paste-ins} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +The {\it paste} and {\it patch} facility (see \downlink{previous page}{HTXAdvPage4}) +is used to display (or hide) the Axiom output +of an Axiom command ({\tt\\axiomcommand}) +included in a +\HyperName{} page. + +A mechanism has been set up to {\it automatically} generate +these paste-ins. It amounts to replacing an +{\tt \\axiomcommand} by a {\tt \\pastecommand} in the +\HyperName{} page. + +In the case of a \axiomOp{draw} Axiom command +, where the result is to create an interactive viewport, +the appropriate command to use is {\tt \\pastegraph}. +The effect of this is to include (as the output) +the Axiom generated {\it image} of the graph +as an active area. Clicking on it will put up an +interactive viewport. +The {\tt \\pastegraph} command should be used only when +the result of the associated Axiom operation is +to {\it create} an interactive viewport. It is {\it not} necessarily +appropriate for all commands whose result +is a \axiomType{Two{}Dimensional{}Viewport} or \axiomType{Three{}Dimensional{}Viewport}. +The {\tt \\pastecommand} and {\tt \\pastegraph} +are macros defined in {\bf util.ht}. + + + +There is no automatic paste-in generation facility +for Axiom piles (the {\tt \\begin\{axiomsrc\}} command). + + +The automatic paste-in generation mechanism works +by invoking Axiom with a particular option. +\HyperName{} is also started automatically. It reads +the {\tt \\pastecommand} and {\tt \\pastegraph} +commands in all pages in a specified +{\bf somefile.ht} and passes them to +Axiom for evaluation. \HyperName{} +captures the output and writes it out (to a +file called {\bf somefile.pht}) as the body of +some {\it patch} definitions. The commands +encountered are written to a file +{\bf somefile.input} which you can {\tt )read} from an Axiom session. +It also creates directories for the graphics +images encountered. Those files and directories +will be written under the {\it current} directory. +The idea is that you then include the {\it patch} definitions +in {\bf somefile.pht} in your local database using {\bf htadd}. + + +You can try this feature now. Edit a file called, say, {\bf trypaste.ht} +in a directory, say {\bf /tmp}. Put the following \HyperName{} text +in it. +\beginImportant +\newline +{\tt \\begin\{page\}\{TryPaste\}\{Trying out paste-in generation\}}\newline +{\tt \\begin\{scroll\}}\newline +{\tt \\pastecommand\{f z == z**2 \\bound\{f\}\}}\newline +{\tt \\pastegraph\{draw(f,-1..1) \\free\{f\}\}}\newline +{\tt \\pastecommand\{x:= f 3 \\free\{f\}\}}\newline +{\tt \\end\{scroll\}}\newline +{\tt \\end\{page\}}\newline +\endImportant + +From the directory that contains the {\bf trypaste.ht}, +issue +\centerline{ +{\tt htadd -l ./trypaste.ht} +} +You will get the +{\bf ht.db} database file. +Set the environment variable {\tt HTPATH} so that +it points first to your directory and then the system directory. +In the {\bf /bin/csh}, you might use +\centerline{ +{\tt setenv HTPATH /tmp:\$AXIOM/doc/hypertex/pages} +} +Make sure that no {\bf trypaste.input} or {\bf trypaste.pht} +files exist in the directory. +Then issue +\centerline{ +{\tt axiom -paste trypaste.ht} +} + and wait for +Axiom to finish. + +There is a modification you will wish to make to +the {\bf trypaste.pht} file. +This is because the generated \HyperName{} text will assume that +the {\it viewport} data will be located in the +{\it system} directory. +\centerline{{\bf \env{AXIOM}/doc/viewports}} +You may want to place your images in a different directory, +say, {\bf /u/sugar/viewports}. +If so, then change all occurences of +\beginImportant +\newline +{\tt \\env\{AXIOM\}/doc/viewports/} +\centerline{{\it by}} +{\tt /u/sugar/viewports/} +\endImportant +in the file {\bf trypaste.pht}. The last step +is to include the {\it patch} definitions +in {\bf trypaste.pht} to your local database. +Issue +\centerline{ +{\tt htadd -l ./trypaste.pht} +} +to update the database. If you have provided +a link to your pages from the {\tt RootPage} +via the {\tt \\localinfo} macro, you should now +be able to start Axiom or \HyperName{} +and see the computed Axiom output whenever you +click on the buttons to the left of each command. + + + +\end{scroll} +\beginmenu +\menulink{Next Page --- Miscellaneous}{HTXAdvPage6} +\endmenu + +\end{page} + +@ +\section{htxadvpage6.ht} +\subsection{Miscellaneous} +\label{HTXAdvPage6} +See HTXAdvTopPage \ref{HTXAdvTopPage} on page~\pageref{HTXAdvTopPage} +\index{pages!HTXAdvPage6!htxadvpage6.ht} +\index{htxadvpage6.ht!pages!HTXAdvPage6} +\index{HTXAdvPage6!htxadvpage6.ht!pages} +<>= +\begin{page}{HTXAdvPage6}{Miscellaneous} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + + +We present here a few commands that may be of some use +to you. +You may want to know certain parameters so that you can pass +them to one of the action {\tt \\command}s. + +The {\tt \\thispage} command shows the name of the +current page. + +\beginImportant +\begin{paste}{HTXAdvPage6xPaste1}{HTXAdvPage6xPatch1} +\pastebutton{HTXAdvPage6xPaste1}{Interpret} +\newline +{\tt \\thispage}\newline +{\tt \\newline}\newline +{\tt \\lispcommand\{Lisp\}\{(pprint "\\thispage")\}}\newline +\end{paste} +\endImportant + + +The {\tt \\windowid} command shows the X Windows +{\it WindowID} of the current window. + +\beginImportant +\begin{paste}{HTXAdvPage6xPaste2}{HTXAdvPage6xPatch2} +\pastebutton{HTXAdvPage6xPaste2}{Interpret} +\newline +{\tt \\windowid}\newline +{\tt \\newline}\newline +{\tt \\lispcommand\{Lisp\}\{(pprint \\windowid)\}}\newline +\end{paste} +\endImportant + +% \examplenumber not documented + +The {\tt \\env} command gets the value of an environment +variable. It is an error to use {\tt \\env} with an undefined +environment variable. + +\beginImportant +\begin{paste}{HTXAdvPage6xPaste3}{HTXAdvPage6xPatch3} +\pastebutton{HTXAdvPage6xPaste3}{Interpret} +\newline +{\tt \\env\{AXIOM\}} +\end{paste} +\endImportant + + +The {\tt \\nolines} command, if included somewhere +in the page, eliminates the horizontal lines that +delimit the header and footer regions. + + +% \beep not documented + +%\returnbutton{homebutton}{ReturnPage} + +%\upbutton{upbutton}{UpPage} + + +\end{scroll} +\beginmenu +\menulink{Back to Menu}{HTXAdvTopPage} +\endmenu + +\end{page} + +@ +\subsection{HTXAdvPage6xPatch1 patch} +\label{HTXAdvPage6xPatch1} +\index{patch!HTXAdvPage6xPatch1!htxadvpage6.ht} +\index{htxadvpage6.ht!patch!HTXAdvPage6xPatch1} +\index{HTXAdvPage6xPatch1!htxadvpage6.ht!patch} +<>= +\begin{patch}{HTXAdvPage6xPatch1} +\begin{paste}{HTXAdvPage6xPaste1A}{HTXAdvPage6xPatch1A} +\pastebutton{HTXAdvPage6xPaste1A}{Source} +\newline +\thispage +\newline +\lispcommand{Lisp}{(pprint "\thispage")} +\end{paste} +\end{patch} + +@ +\subsection{HTXAdvPage6xPatch1A patch} +\label{HTXAdvPage6xPatch1A} +\index{patch!HTXAdvPage6xPatch1A!htxadvpage6.ht} +\index{htxadvpage6.ht!patch!HTXAdvPage6xPatch1A} +\index{HTXAdvPage6xPatch1A!htxadvpage6.ht!patch} +<>= +\begin{patch}{HTXAdvPage6xPatch1A} +\begin{paste}{HTXAdvPage6xPaste1B}{HTXAdvPage6xPatch1} +\pastebutton{HTXAdvPage6xPaste1B}{Interpret} +\newline +{\tt \\thispage}\newline +{\tt \\newline}\newline +{\tt \\lispcommand\{Lisp\}\{(pprint "\\thispage")\}}\newline +\end{paste} +\end{patch} + +@ +\subsection{HTXAdvPage6xPatch2 patch} +\label{HTXAdvPage6xPatch2} +\index{patch!HTXAdvPage6xPatch2!htxadvpage6.ht} +\index{htxadvpage6.ht!patch!HTXAdvPage6xPatch2} +\index{HTXAdvPage6xPatch2!htxadvpage6.ht!patch} +<>= +\begin{patch}{HTXAdvPage6xPatch2} +\begin{paste}{HTXAdvPage6xPaste2A}{HTXAdvPage6xPatch2A} +\pastebutton{HTXAdvPage6xPaste2A}{Source} +\newline +\windowid +\newline +\lispcommand{Lisp}{(pprint \windowid)} +\end{paste} +\end{patch} + +@ +\subsection{HTXAdvPage6xPatch2A patch} +\label{HTXAdvPage6xPatch2A} +\index{patch!HTXAdvPage6xPatch2A!htxadvpage6.ht} +\index{htxadvpage6.ht!patch!HTXAdvPage6xPatch2A} +\index{HTXAdvPage6xPatch2A!htxadvpage6.ht!patch} +<>= +\begin{patch}{HTXAdvPage6xPatch2A} +\begin{paste}{HTXAdvPage6xPaste2B}{HTXAdvPage6xPatch2} +\pastebutton{HTXAdvPage6xPaste2B}{Interpret} +\newline +{\tt \\windowid}\newline +{\tt \\newline}\newline +{\tt \\lispcommand\{Lisp\}\{(pprint \\windowid)\}}\newline +\end{paste} +\end{patch} + +@ +\subsection{HTXAdvPage6xPatch3 patch} +\label{HTXAdvPage6xPatch3} +\index{patch!HTXAdvPage6xPatch3!htxadvpage6.ht} +\index{htxadvpage6.ht!patch!HTXAdvPage6xPatch3} +\index{HTXAdvPage6xPatch3!htxadvpage6.ht!patch} +<>= +\begin{patch}{HTXAdvPage6xPatch3} +\begin{paste}{HTXAdvPage6xPaste3A}{HTXAdvPage6xPatch3A} +\pastebutton{HTXAdvPage6xPaste3A}{Source} +\newline +\env{AXIOM} +\end{paste} +\end{patch} + +@ +\subsection{HTXAdvPage6xPatch3A patch} +\label{HTXAdvPage6xPatch3A} +\index{patch!HTXAdvPage6xPatch3A!htxadvpage6.ht} +\index{htxadvpage6.ht!patch!HTXAdvPage6xPatch3A} +\index{HTXAdvPage6xPatch3A!htxadvpage6.ht!patch} +<>= +\begin{patch}{HTXAdvPage6xPatch3A} +\begin{paste}{HTXAdvPage6xPaste3B}{HTXAdvPage6xPatch3} +\pastebutton{HTXAdvPage6xPaste3B}{Interpret} +\newline +{\tt \\env\{AXIOM\}}\newline +\end{paste} +\end{patch} + +@ +\section{htxadvtoppage.ht} +\subsection{Advanced features in Hyperdoc} +\label{HTXAdvTopPage} +\begin{itemize} +\item HTXAdvPage1 \ref{HTXAdvPage1} on page~\pageref{HTXAdvPage1} +\item HTXAdvPage2 \ref{HTXAdvPage2} on page~\pageref{HTXAdvPage2} +\item HTXAdvPage3 \ref{HTXAdvPage3} on page~\pageref{HTXAdvPage3} +\item HTXAdvPage4 \ref{HTXAdvPage4} on page~\pageref{HTXAdvPage4} +\item HTXAdvPage5 \ref{HTXAdvPage5} on page~\pageref{HTXAdvPage5} +\item HTXAdvPage6 \ref{HTXAdvPage6} on page~\pageref{HTXAdvPage6} +\end{itemize} +\index{pages!HTXAdvTopPage!htxadvtoppage.ht} +\index{htxadvtoppage.ht!pages!HTXAdvTopPage} +\index{HTXAdvTopPage!htxadvtoppage.ht!pages} +<>= +\begin{page}{HTXAdvTopPage}{Advanced features in Hyperdoc} +\centerline{\fbox{{\tt \thispage}}}\newline +\beginscroll +\beginmenu +\menudownlink{Creating input areas}{HTXAdvPage1} +\menudownlink{Creating radio boxes}{HTXAdvPage2} +\menudownlink{Define new macros }{HTXAdvPage3} +\menudownlink{Using patch and paste}{HTXAdvPage4} +\menudownlink{Generate paste-ins for Axiom commands}{HTXAdvPage5} +\menudownlink{Miscellaneous}{HTXAdvPage6} +\endmenu +\endscroll +\end{page} + +@ +\section{htxformatpage1.ht} +\subsection{Using the special characters} +\label{HTXFormatPage1} +See HTXFormatPage2 \ref{HTXFormatPage2} on page~\pageref{HTXFormatPage2} +\index{pages!HTXFormatPage1!htxformatpage1.ht} +\index{htxformatpage1.ht!pages!HTXFormatPage1} +\index{HTXFormatPage1!htxformatpage1.ht!pages} +<>= +\begin{page}{HTXFormatPage1}{Using the special characters} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +You can display the special characters ({\tt \$ \\ \{ \{ \[ \] \% \#}) +by simply inserting the backslash {\tt \\} character just before any +one of them. So, +\beginImportant +\begin{paste}{HTXFormatPage1xPaste1}{HTXFormatPage1xPatch1} +\pastebutton{HTXFormatPage1xPaste1}{Interpret} +\newline +{\tt the characters \\\$, \\\\, \\\{, \\\}, \\\[, \\\], \\\%, \\\# } +\end{paste} +\endImportant + + +The {\tt \%} character is used in \HyperName{} as a comment marker. +If it is encountered on any line (without being preceded by the {\tt \\} + character, +of course), \HyperName{} will ignore all remaining characters on that line. +\beginImportant +\begin{paste}{HTXFormatPage1xPaste2}{HTXFormatPage1xPatch2} +\pastebutton{HTXFormatPage1xPaste2}{Interpret} +\newline +{\tt the latest figures indicate \% GET THE LATEST FIGURES}\newline +{\tt a steady rise}\indent{0} +\end{paste} +\endImportant + +Earlier versions of \HyperName{} merged the words "indicate" and "a" +into one word in the example above. This no longer occurs. + +%The two lines below are from Release 1.x +%Note that you must leave a space at the beginning of the line after the comment, +%otherwise \HyperName{} would treat "indicate" and "a" as one word. + + +\end{scroll} +\beginmenu +\menulink{Next -- Formatting without commands}{HTXFormatPage2} +\endmenu + +\end{page} + +@ +\subsection{HTXFormatPage1xPatch1 patch} +\label{HTXFormatPage1xPatch1} +\index{patch!HTXFormatPage1xPatch1!htxformatpage1.ht} +\index{htxformatpage1.ht!patch!HTXFormatPage1xPatch1} +\index{HTXFormatPage1xPatch1!htxformatpage1.ht!patch} +<>= +\begin{patch}{HTXFormatPage1xPatch1} +\begin{paste}{HTXFormatPage1xPaste1A}{HTXFormatPage1xPatch1A} +\pastebutton{HTXFormatPage1xPaste1A}{Source} +\newline +the characters \$, \\, \{, \}, \[, \], \%, \# +\end{paste} +\end{patch} +\begin{patch}{HTXFormatPage1xPatch1A} +\begin{paste}{HTXFormatPage1xPaste1B}{HTXFormatPage1xPatch1} +\pastebutton{HTXFormatPage1xPaste1B}{Interpret} +\newline +{\tt the characters \\\$, \\\\, \\\{, \\\}, \\\[, \\\], \\\%, \\\# } +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage1xPatch2 patch} +\label{HTXFormatPage1xPatch2} +\index{patch!HTXFormatPage1xPatch2!htxformatpage1.ht} +\index{htxformatpage1.ht!patch!HTXFormatPage1xPatch2} +\index{HTXFormatPage1xPatch2!htxformatpage1.ht!patch} +<>= +\begin{patch}{HTXFormatPage1xPatch2} +\begin{paste}{HTXFormatPage1xPaste2A}{HTXFormatPage1xPatch2A} +\pastebutton{HTXFormatPage1xPaste2A}{Source} +\newline +the latest figures indicate % GET THE LATEST FIGURES +a steady rise +\end{paste} +\end{patch} +\begin{patch}{HTXFormatPage1xPatch2A} +\begin{paste}{HTXFormatPage1xPaste2B}{HTXFormatPage1xPatch2} +\pastebutton{HTXFormatPage1xPaste2B}{Interpret} +\newline +{\tt the latest figures indicate \% GET THE LATEST FIGURES}\newline +{\tt a steady rise}\indent{0} +\end{paste} +\end{patch} + +@ +\section{htxformatpage2.ht} +\subsection{Formatting without commands} +\label{HTXFormatPage2} +\index{pages!HTXFormatPage2!htxformatpage2.ht} +\index{htxformatpage2.ht!pages!HTXFormatPage2} +\index{HTXFormatPage2!htxformatpage2.ht!pages} +<>= +\begin{page}{HTXFormatPage2}{Formatting without commands} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +\HyperName{} will interpret normal text in a {\em source file} +according to the following rules. \newline +\menuitemstyle{\indentrel{4} +Spaces mark the ends of words. The number of spaces between +words is {\em not} significant, that is, you cannot control word spacing +by inserting or removing extra space characters. +\indentrel{-4}} +\beginImportant +\begin{paste}{HTXFormatPage2xxPaste1}{HTXFormatPage2xPatch1} +\pastebutton{HTXFormatPage2xxPaste1}{Interpret} +\begin{verbatim} +word spacing is not important +\end{verbatim} +\end{paste} +\endImportant +\menuitemstyle{\indentrel{4} +End-of-line characters are not significant. +You can break up lines in the source file as you like. The end-of-line +will be interpreted as a space. +Take advantage of this feature to improve the readability of the +source file. +\indentrel{-4}} +\beginImportant +\begin{paste}{HTXFormatPage2xxPaste2}{HTXFormatPage2xPatch2} +\pastebutton{HTXFormatPage2xxPaste2}{Interpret} +\begin{verbatim} +This is +one +sentence. +\end{verbatim} +\end{paste} +\endImportant +\menuitemstyle{\indentrel{4} +A blank line marks the end of a paragraph. +Leaving more blank lines that necessary has no effect. +\indentrel{-4}} +\beginImportant +\begin{paste}{HTXFormatPage2xxPaste3}{HTXFormatPage2xPatch3} +\pastebutton{HTXFormatPage2xxPaste3}{Interpret} +\begin{verbatim} +some end.% A COMMENT + + +Start a paragraph + +Start another paragraph. +\end{verbatim} +\end{paste} +\endImportant +\menuitemstyle{\indentrel{4} +The two-character combination {\tt \{\}} can be used to indicate +possible breaking of long words. It does not affect the formatting +in any other way. +\indentrel{-4}} +\beginImportant +\begin{paste}{HTXFormatPage2xxPaste4}{HTXFormatPage2xPatch4} +\pastebutton{HTXFormatPage2xxPaste4}{Interpret} +\begin{verbatim} +Generalized{}Multivariate{}Factorize +One{}Dimensional{}Array{}Aggregate +Elementary{}Function{}Definite{}Integration +Elementary{}Functions{}Univariate{}Puiseux{}Series +Finite{}Field{}Cyclic{}Group{}Extension{}ByPolynomial +\end{verbatim} +\end{paste} +\endImportant + + + + +\end{scroll} +\beginmenu +\menulink{Next -- Using different fonts}{HTXFormatPage3} +\endmenu + +\end{page} + +@ +\subsection{HTXFormatPage2xPatch1 patch} +\label{HTXFormatPage2xPatch1} +\index{patch!HTXFormatPage2xPatch1!htxformatpage2.ht} +\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch1} +\index{HTXFormatPage2xPatch1!htxformatpage2.ht!patch} +<>= +\begin{patch}{HTXFormatPage2xPatch1} +\begin{paste}{HTXFormatPage2xxPaste1A}{HTXFormatPage2xPatch1A} +\pastebutton{HTXFormatPage2xxPaste1A}{Source} +\newline +word spacing is not important +\end{paste} +\end{patch} +\begin{patch}{HTXFormatPage2xPatch1A} +\begin{paste}{HTXFormatPage2xxPaste1B}{HTXFormatPage2xPatch1} +\pastebutton{HTXFormatPage2xxPaste1B}{Interpret} +\begin{verbatim} +word spacing is not important +\end{verbatim} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage2xPatch2 patch} +\label{HTXFormatPage2xPatch2} +\index{patch!HTXFormatPage2xPatch2!htxformatpage2.ht} +\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch2} +\index{HTXFormatPage2xPatch2!htxformatpage2.ht!patch} +<>= +\begin{patch}{HTXFormatPage2xPatch2} +\begin{paste}{HTXFormatPage2xxPaste2A}{HTXFormatPage2xPatch2A} +\pastebutton{HTXFormatPage2xxPaste2A}{Source} +\newline +This is +one +sentence. +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage2xPatch2A patch} +\label{HTXFormatPage2xPatch2A} +\index{patch!HTXFormatPage2xPatch2A!htxformatpage2.ht} +\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch2A} +\index{HTXFormatPage2xPatch2A!htxformatpage2.ht!patch} +<>= +\begin{patch}{HTXFormatPage2xPatch2A} +\begin{paste}{HTXFormatPage2xxPaste2B}{HTXFormatPage2xPatch2} +\pastebutton{HTXFormatPage2xxPaste2B}{Interpret} +\begin{verbatim} +This is +one +sentence. +\end{verbatim} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage2xPatch3 patch} +\label{HTXFormatPage2xPatch3} +\index{patch!HTXFormatPage2xPatch3!htxformatpage2.ht} +\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch3} +\index{HTXFormatPage2xPatch3!htxformatpage2.ht!patch} +<>= +\begin{patch}{HTXFormatPage2xPatch3} +\begin{paste}{HTXFormatPage2xxPaste3A}{HTXFormatPage2xPatch3A} +\pastebutton{HTXFormatPage2xxPaste3A}{Source} +\newline +some end.% A COMMENT + + +Start a paragraph. + +Start another paragraph. +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage2xPatch3A patch} +\label{HTXFormatPage2xPatch3A} +\index{patch!HTXFormatPage2xPatch3A!htxformatpage2.ht} +\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch3A} +\index{HTXFormatPage2xPatch3A!htxformatpage2.ht!patch} +<>= +\begin{patch}{HTXFormatPage2xPatch3A} +\begin{paste}{HTXFormatPage2xxPaste3B}{HTXFormatPage2xPatch3} +\pastebutton{HTXFormatPage2xxPaste3B}{Interpret} +\begin{verbatim} +some end.% A COMMENT + + +Start a paragraph + +Start another paragraph. +\end{verbatim} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage2xPatch4 patch} +\label{HTXFormatPage2xPatch4} +\index{patch!HTXFormatPage2xPatch4!htxformatpage2.ht} +\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch4} +\index{HTXFormatPage2xPatch4!htxformatpage2.ht!patch} +<>= +\begin{patch}{HTXFormatPage2xPatch4} +\begin{paste}{HTXFormatPage2xxPaste4A}{HTXFormatPage2xPatch4A} +\pastebutton{HTXFormatPage2xxPaste4A}{Source} +\newline +Generalized{}Multivariate{}Factorize +One{}Dimensional{}Array{}Aggregate +Elementary{}Function{}Definite{}Integration +Elementary{}Functions{}Univariate{}Puiseux{}Series +Finite{}Field{}Cyclic{}Group{}Extension{}ByPolynomial +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage2xPatch4A patch} +\label{HTXFormatPage2xPatch4A} +\index{patch!HTXFormatPage2xPatch4A!htxformatpage2.ht} +\index{htxformatpage2.ht!patch!HTXFormatPage2xPatch4A} +\index{HTXFormatPage2xPatch4A!htxformatpage2.ht!patch} +<>= +\begin{patch}{HTXFormatPage2xPatch4A} +\begin{paste}{HTXFormatPage2xxPaste4B}{HTXFormatPage2xPatch4} +\pastebutton{HTXFormatPage2xxPaste4B}{Interpret} +\begin{verbatim} +Generalized{}Multivariate{}Factorize +One{}Dimensional{}Array{}Aggregate +Elementary{}Function{}Definite{}Integration +Elementary{}Functions{}Univariate{}Puiseux{}Series +Finite{}Field{}Cyclic{}Group{}Extension{}ByPolynomial +\end{verbatim} +\end{paste} +\end{patch} + +@ +\section{htxformatpage3.ht} +\subsection{Using different fonts} +\label{HTXFormatPage3} +\index{pages!HTXFormatPage3!htxformatpage3.ht} +\index{htxformatpage3.ht!pages!HTXFormatPage3} +\index{HTXFormatPage3!htxformatpage3.ht!pages} +<>= +\begin{page}{HTXFormatPage3}{Using different fonts} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +You can use various fonts for the text. \HyperName{} makes +four {\em logical} fonts available to you: a {\em roman} font, an +{\em emphasised} font, a {\em bold} font and a +{\em typewriter} font. The actual font that corresponds to +each logical font is determined by the end user via a +defaults file. The colour for each of these fonts can also +be specified. + +Normal text is displayed with the roman font. +If you want to emphasize some text, use the {\tt \\em} +command in the following way. +\beginImportant +\begin{paste}{HTXFormatPage3xPaste1}{HTXFormatPage3xPatch1} +\pastebutton{HTXFormatPage3xPaste1}{Interpret} +\newline +{\tt this is \{\\em emphasised\} text} +\end{paste} +\endImportant + +Note the use of the braces to enclose command and "arguments". +All font commands are specified in the same way. The {\tt \\em} command +will in fact {\em switch} between roman and emphasised +font every time it is used. +\beginImportant +\begin{paste}{HTXFormatPage3xPaste2}{HTXFormatPage3xPatch2} +\pastebutton{HTXFormatPage3xPaste2}{Interpret} +\newline +{\tt \{\\em this is \{\\em emphasised\} text\}} +\end{paste} +\endImportant + +If you want to be sure that the emphasized font will be used, specify +the {\tt \\it} command. Similarly, you can explicitly select the roman font +with the {\tt \\rm} command. +\beginImportant +\begin{paste}{HTXFormatPage3xPaste3}{HTXFormatPage3xPatch3} +\pastebutton{HTXFormatPage3xPaste3}{Interpret} +\newline +{\tt \{\\em this is \{\\it emphasised\} text and this is \{\\rm roman\}\}} +\end{paste} +\endImportant + + +The bold font is selected with the {\tt \\bf} command and the typewriter +font with the {\tt \\tt} command. All these commands can be applied to +individual characters, words, sentences etc. +\beginImportant +\begin{paste}{HTXFormatPage3xPaste4}{HTXFormatPage3xPatch4} +\pastebutton{HTXFormatPage3xPaste4}{Interpret} +\newline +{\tt \{\\bf U\}\{\\tt g\}\{\\it l\}\{\\rm y\}} +\end{paste} +\endImportant + + +Currently, \HyperName{} does not adjust its internal spacing rules +to each font individually. This means that, for consistent results, +users are encouraged to specify (in the defaults file) +"character-cell" fonts that are not +too small or too large for \HyperName{}. Here is the correspondence +between the above font commands and the defaults names:\newline +\menuitemstyle{RmFont \tab{26} {\tt \\rm} or {\tt \\em} }\newline +\menuitemstyle{BoldFont \tab{26} {\tt \\bf} }\newline +\menuitemstyle{EmphasizeFont \tab{26} {\tt \\it} or {\tt \\em} }\newline +\menuitemstyle{Ttfont \tab{26} {\tt \\tt} }\newline + +\HyperName{} uses two more logical fonts that can be specified by +the end user : AxiomFont and ActiveFont. However, you cannot +explicitly use these fonts in your text. The ActiveFont is automatically +used for active area text and the AxiomFont is reserved for +active Axiom commands. + + + + +\end{scroll} +\beginmenu +\menulink{Next -- Indentation}{HTXFormatPage4} +\endmenu + +\end{page} + +@ +\subsection{HTXFormatPage3xPatch1 patch} +\label{HTXFormatPage3xPatch1} +\index{patch!HTXFormatPage3xPatch1!htxformatpage3.ht} +\index{htxformatpage3.ht!patch!HTXFormatPage3xPatch1} +\index{HTXFormatPage3xPatch1!htxformatpage3.ht!patch} +<>= +\begin{patch}{HTXFormatPage3xPatch1} +\begin{paste}{HTXFormatPage3xPaste1A}{HTXFormatPage3xPatch1A} +\pastebutton{HTXFormatPage3xPaste1A}{Source} +\newline +this is {\em emphasised} text +\end{paste} +\end{patch} +\begin{patch}{HTXFormatPage3xPatch1A} +\begin{paste}{HTXFormatPage3xPaste1B}{HTXFormatPage3xPatch1} +\pastebutton{HTXFormatPage3xPaste1B}{Interpret} +\newline +{\tt this is \{\\em emphasised\} text} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage3xPatch2 patch} +\label{HTXFormatPage3xPatch2} +\index{patch!HTXFormatPage3xPatch2!htxformatpage3.ht} +\index{htxformatpage3.ht!patch!HTXFormatPage3xPatch2} +\index{HTXFormatPage3xPatch2!htxformatpage3.ht!patch} +<>= +\begin{patch}{HTXFormatPage3xPatch2} +\begin{paste}{HTXFormatPage3xPaste2A}{HTXFormatPage3xPatch2A} +\pastebutton{HTXFormatPage3xPaste2A}{Source} +\newline +{\em this is {\em emphasised} text} +\end{paste} +\end{patch} +\begin{patch}{HTXFormatPage3xPatch2A} +\begin{paste}{HTXFormatPage3xPaste2B}{HTXFormatPage3xPatch2} +\pastebutton{HTXFormatPage3xPaste2B}{Interpret} +\newline +{\tt \{\\em this is \{\\em emphasised\} text\}} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage3xPatch3 patch} +\label{HTXFormatPage3xPatch3} +\index{patch!HTXFormatPage3xPatch3!htxformatpage3.ht} +\index{htxformatpage3.ht!patch!HTXFormatPage3xPatch3} +\index{HTXFormatPage3xPatch3!htxformatpage3.ht!patch} +<>= +\begin{patch}{HTXFormatPage3xPatch3} +\begin{paste}{HTXFormatPage3xPaste3A}{HTXFormatPage3xPatch3A} +\pastebutton{HTXFormatPage3xPaste3A}{Source} +\newline +{\em this is {\it emphasised} text and this is {\rm roman}} +\end{paste} +\end{patch} +\begin{patch}{HTXFormatPage3xPatch3A} +\begin{paste}{HTXFormatPage3xPaste3B}{HTXFormatPage3xPatch3} +\pastebutton{HTXFormatPage3xPaste3B}{Interpret} +\newline +{\tt \{\\em this is \{\\it emphasised\} text and this is \{\\rm roman\}\}} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage3xPatch4 patch} +\label{HTXFormatPage3xPatch4} +\index{patch!HTXFormatPage3xPatch4!htxformatpage3.ht} +\index{htxformatpage3.ht!patch!HTXFormatPage3xPatch4} +\index{HTXFormatPage3xPatch4!htxformatpage3.ht!patch} +<>= +\begin{patch}{HTXFormatPage3xPatch4} +\begin{paste}{HTXFormatPage3xPaste4A}{HTXFormatPage3xPatch4A} +\pastebutton{HTXFormatPage3xPaste4A}{Source} +\newline +{\bf U}{\tt g}{\it l}{\rm y} +\end{paste} +\end{patch} +\begin{patch}{HTXFormatPage3xPatch4A} +\begin{paste}{HTXFormatPage3xPaste4B}{HTXFormatPage3xPatch4} +\pastebutton{HTXFormatPage3xPaste4B}{Interpret} +\newline +{\tt \{\\bf U\}\{\\tt g\}\{\\it l\}\{\\rm y\}} +\end{paste} +\end{patch} + +@ +\section{htxformatpage4.ht} +\subsection{Indentation} +\label{HTXFormatPage4} +\index{pages!HTXFormatPage4!htxformatpage4.ht} +\index{htxformatpage4.ht!pages!HTXFormatPage4} +\index{HTXFormatPage4!htxformatpage4.ht!pages} +<>= +\begin{page}{HTXFormatPage4}{Indentation} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +You can control the indentation of lines of text in \HyperName{} with +some useful commands. +Use the command {\tt \\par} to force a new paragraph if you don't want +to use the blank-line rule. The first line of a new paragraph +will normally be indented by a standard small amount. If you +just want to start on a new line, use the {\tt \\newline} +command. +\beginImportant +\begin{paste}{HTXFormatPage4xPaste1}{HTXFormatPage4xPatch1} +\pastebutton{HTXFormatPage4xPaste1}{Interpret} +\newline +{\tt let us start a new line \\newline here } +\end{paste} +\endImportant + +The command {\tt \\indent\{{\it value}\}} will +set the left-page-margin {\it value} characters +to the right of the standard left-page-margin. +The initial (standard) state of a page can be reset by the +{\tt \\indent\{0\}} command. +The first lines of paragraphs will be indented +by the {\it extra} standard amount. The {\tt \\indent\{{\it value}\}} +command does {\em not} force a new line or paragraph. + +You can also use the {\tt \\indentrel\{{\it value}\}} command. +Here, the {\it value} argument is a {\em relative} indentation +which can be positive or negative. +Otherwise, it behaves in the same way as the {\tt \\indent} command. +\beginImportant +\begin{paste}{HTXFormatPage4xPaste2}{HTXFormatPage4xPatch2} +\pastebutton{HTXFormatPage4xPaste2}{Interpret} +\newline +{\tt let us start a new line \\newline \\indent\{10\} here }\newline +{\tt \\newline \\indentrel\{-5\} there}\newline +{\tt \\newline \\indentrel\{-5\} back} +\end{paste} +\endImportant + +The {\tt \\centerline\{{\it some text}\}} command will center its +argument between the current left and right margins. The argument of +the command should not be more than a paragraph of text and should not contain +any commands that change the left margin. The centered text will +start on a new line. +\beginImportant +\begin{paste}{HTXFormatPage4xPaste3}{HTXFormatPage4xPatch3} +\pastebutton{HTXFormatPage4xPaste3}{Interpret} +\newline +{\tt previous text. \\centerline\{This could}\newline +{\tt be some heading.\} Carry on} +\end{paste} +\endImportant + +Placing text in vertically aligned columns is easily done with the +{\tt \\tab\{{\it value}\}} command. The {\tt \\tab} command has the +immediate effect of placing the next word {\it value} characters to +the right of the current left margin. +\beginImportant +\begin{paste}{HTXFormatPage4xPaste4}{HTXFormatPage4xPatch4} +\pastebutton{HTXFormatPage4xPaste4}{Interpret} +\newline +{\tt \\indent\{5\}\\newline}\newline +{\tt Team A \\tab\{17\}Score\\tab\{25\}Team B\\tab\{42\}Score\\newline}\newline +{\tt 012345678901234567890123456789012345678901234567890\\newline}\newline +{\tt Green-Red\\tab\{17\}4\\tab\{25\}Blue-Black\\tab\{42\}6\\newline}\newline +{\tt \\indent\{0\}} +\end{paste} +\endImportant + +If you wish to preserve the indentation of a piece of text +you can use the {\tt verbatim} group command. Simply place +a {\tt \\begin\{verbatim\}} and {\tt \\end\{verbatim\}} around +the text. Note that \HyperName{} commands will +not be interpreted within the {\tt verbatim} group. +\beginImportant +\begin{paste}{HTXFormatPage4xPaste5}{HTXFormatPage4xPatch5} +\pastebutton{HTXFormatPage4xPaste5}{Interpret} +\newline +{\tt \\begin\{verbatim\}} +\begin{verbatim} +This spacing will be preserved + {\bf is} preserved +\end{verbatim} +{\tt \\end\{verbatim\}}\newline +\end{paste} + + + + + + + +\end{scroll} +\beginmenu +\menulink{Next -- Creating Lists and Tables}{HTXFormatPage5} +\endmenu + +\end{page} + +@ +\subsection{HTXFormatPage4xPatch1 patch} +\label{HTXFormatPage4xPatch1} +\index{patch!HTXFormatPage4xPatch1!htxformatpage4.ht} +\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch1} +\index{HTXFormatPage4xPatch1!htxformatpage4.ht!patch} +<>= +\begin{patch}{HTXFormatPage4xPatch1} +\begin{paste}{HTXFormatPage4xPaste1A}{HTXFormatPage4xPatch1A} +\pastebutton{HTXFormatPage4xPaste1A}{Source} +\newline +let us start a new line \newline here +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage4xPatch1A patch} +\label{HTXFormatPage4xPatch1A} +\index{patch!HTXFormatPage4xPatch1A!htxformatpage4.ht} +\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch1A} +\index{HTXFormatPage4xPatch1A!htxformatpage4.ht!patch} +<>= +\begin{patch}{HTXFormatPage4xPatch1A} +\begin{paste}{HTXFormatPage4xPaste1B}{HTXFormatPage4xPatch1} +\pastebutton{HTXFormatPage4xPaste1B}{Interpret} +\newline +{\tt let us start a new line \\newline here } +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage4xPatch2 patch} +\label{HTXFormatPage4xPatch2} +\index{patch!HTXFormatPage4xPatch2!htxformatpage4.ht} +\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch2} +\index{HTXFormatPage4xPatch2!htxformatpage4.ht!patch} +<>= +\begin{patch}{HTXFormatPage4xPatch2} +\begin{paste}{HTXFormatPage4xPaste2A}{HTXFormatPage4xPatch2A} +\pastebutton{HTXFormatPage4xPaste2A}{Source} +\newline +let us start a new line\newline\indent{10} here +\newline\indentrel{-5} there +\newline\indentrel{-5} back +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage4xPatch2A patch} +\label{HTXFormatPage4xPatch2A} +\index{patch!HTXFormatPage4xPatch2A!htxformatpage4.ht} +\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch2A} +\index{HTXFormatPage4xPatch2A!htxformatpage4.ht!patch} +<>= +\begin{patch}{HTXFormatPage4xPatch2A} +\begin{paste}{HTXFormatPage4xPaste2B}{HTXFormatPage4xPatch2} +\pastebutton{HTXFormatPage4xPaste2B}{Interpret} +\newline +{\tt let us start a new line \\newline \\indent\{10\} here }\newline +{\tt \\newline \\indentrel\{-5\} there}\newline +{\tt \\newline \\indentrel\{-5\} back} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage4xPatch3 patch} +\label{HTXFormatPage4xPatch3} +\index{patch!HTXFormatPage4xPatch3!htxformatpage4.ht} +\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch3} +\index{HTXFormatPage4xPatch3!htxformatpage4.ht!patch} +<>= +\begin{patch}{HTXFormatPage4xPatch3} +\begin{paste}{HTXFormatPage4xPaste3A}{HTXFormatPage4xPatch3A} +\pastebutton{HTXFormatPage4xPaste3A}{Source} +\newline +previous text. \centerline{This could +be some heading.} Carry on +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage4xPatch3A patch} +\label{HTXFormatPage4xPatch3A} +\index{patch!HTXFormatPage4xPatch3A!htxformatpage4.ht} +\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch3A} +\index{HTXFormatPage4xPatch3A!htxformatpage4.ht!patch} +<>= +\begin{patch}{HTXFormatPage4xPatch3A} +\begin{paste}{HTXFormatPage4xPaste3B}{HTXFormatPage4xPatch3} +\pastebutton{HTXFormatPage4xPaste3B}{Interpret} +\newline +{\tt previous text. \\centerline\{This could}\newline +{\tt be some heading.\} Carry on} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage4xPatch4 patch} +\label{HTXFormatPage4xPatch4} +\index{patch!HTXFormatPage4xPatch4!htxformatpage4.ht} +\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch4} +\index{HTXFormatPage4xPatch4!htxformatpage4.ht!patch} +<>= +\begin{patch}{HTXFormatPage4xPatch4} +\begin{paste}{HTXFormatPage4xPaste4A}{HTXFormatPage4xPatch4A} +\pastebutton{HTXFormatPage4xPaste4A}{Source} +\newline +\indent{5}\newline +Team A \tab{17}Score\tab{25}Team B\tab{42}Score\newline +012345678901234567890123456789012345678901234567890\newline +Green-Red\tab{17}4\tab{25}Blue-Black\tab{42}6\newline +\indent{0} +\end{paste} +\end{patch} +\begin{patch}{HTXFormatPage4xPatch4A} +\begin{paste}{HTXFormatPage4xPaste4B}{HTXFormatPage4xPatch4} +\pastebutton{HTXFormatPage4xPaste4B}{Interpret} +\newline +{\tt \\indent\{5\}\\newline}\newline +{\tt Team A \\tab\{17\}Score\\tab\{25\}Team B\\tab\{42\}Score\\newline}\newline +{\tt 012345678901234567890123456789012345678901234567890\\newline}\newline +{\tt Green-Red\\tab\{17\}4\\tab\{25\}Blue-Black\\tab\{42\}6\\newline}\newline +{\tt \\indent\{0\}} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage4xPatch5 patch} +\label{HTXFormatPage4xPatch5} +\index{patch!HTXFormatPage4xPatch5!htxformatpage4.ht} +\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch5} +\index{HTXFormatPage4xPatch5!htxformatpage4.ht!patch} +<>= +\begin{patch}{HTXFormatPage4xPatch5} +\begin{paste}{HTXFormatPage4xPaste5A}{HTXFormatPage4xPatch5A} +\pastebutton{HTXFormatPage4xPaste5A}{Source} +\begin{verbatim} +This spacing will be preserved + {\bf is} preserved +\end{verbatim} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage4xPatch5A patch} +\label{HTXFormatPage4xPatch5A} +\index{patch!HTXFormatPage4xPatch5A!htxformatpage4.ht} +\index{htxformatpage4.ht!patch!HTXFormatPage4xPatch5A} +\index{HTXFormatPage4xPatch5A!htxformatpage4.ht!patch} +<>= +\begin{patch}{HTXFormatPage4xPatch5A} +\begin{paste}{HTXFormatPage4xPaste5B}{HTXFormatPage4xPatch5} +\pastebutton{HTXFormatPage4xPaste5B}{Interpret} +\newline +{\tt \\begin\{verbatim\}} +\begin{verbatim} +This spacing will be preserved + {\bf is} preserved +\end{verbatim} +{\tt \\end\{verbatim\}}\newline +\end{paste} +\end{patch} + +@ +\section{htxformatpage5.ht} +\subsection{Creating Lists and Tables} +\label{HTXFormatPage5} +See HTXFormatPage6 \ref{HTXFormatPage6} on page~\pageref{HTXFormatPage6} +\index{pages!HTXFormatPage5!htxformatpage5.ht} +\index{htxformatpage5.ht!pages!HTXFormatPage5} +\index{HTXFormatPage5!htxformatpage5.ht!pages} +<>= +\begin{page}{HTXFormatPage5}{Creating Lists and Tables} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +The {\tt \\begin\{items\} {\rm -} \\end\{items\}} +group command constructs itemized lists. +The {\tt \\item} command separates the items in the list. +The indentation rules for the list group are different from those +of a paragraph. The first line of an item will +normally extend further to the left than the rest of the lines. +Both commands accept {\em optional} arguments. +Optional arguments are enclosed in square brackets ({\tt \[ \]}) rather +than braces. + +The indentation of subsequent lines in an item is determined by the +optional argument {\it some text} in the +{\tt \\begin\{items\}\[{\it some text}\]} +command. The optional argument is {\em not} displayed. Its width is calculated +and used to indent all subsequent lines in the group except from the +first line of each new item. This indentation rule applies to all text +{\em before} the first {\tt \\item} command as well. + +The {\tt \\item\[{\it some text}\]} command specifies the start of a new item. +The {\it some text} optional argument will be displayed in {\em bold} +font at the current left-page-margin. Then, the text following the command +will be displayed in normal fashion with the above indentation rule. +\beginImportant +\begin{paste}{HTXFormatPage5xPaste1}{HTXFormatPage5xPatch1} +\pastebutton{HTXFormatPage5xPaste1}{Interpret} +\newline +{\tt \\indent\{5\}}\newline +{\tt \\begin\{items\}\[how wide am I\]}\newline +{\tt Here we carry on but a \\newline} \newline +{\tt new line will be indented } \newline +{\tt \\item\[how wide am I\] fits nicely. +Here is a \\newline new line in an item.}\newline +{\tt \\item\[again\] to show another item}\newline +{\tt \\item\[\\\\tab\]\\tab\{0\} can be used \\tab\{15\} effectively}\newline +{\tt \\end\{items\}}\newline +{\tt \\indent\{0\}}\newline +\end{paste} +\endImportant + + +Note that the {\tt \\begin\{items\}} command immediately sets the left- +page-margin to a new value. Subsequent +{\tt \\tab} or {\tt \\centerline} commands +refer to this new margin. +Any explicit margin setting commands included +in the group {\em will} have the normal effect. +The {\tt \\par} command does not produce +the standard paragraph indentation within a list group --- it behaves +instead like {\tt \\newline}. + + +You can nest list groups like the following example suggests. +\beginImportant +\begin{paste}{HTXFormatPage5xPaste2}{HTXFormatPage5xPatch2} +\pastebutton{HTXFormatPage5xPaste2}{Interpret} +\newline +{\tt \\begin\{items\}\[quitealot\]}\newline +{\tt A nested list:}\newline +{\tt \\item\[The first\] item of an itemized list is on this line.}\newline +{\tt \\item\[The second\] item of the list starts here. It contains another}\newline +{\tt list nested inside it.}\newline +{\tt \\begin\{items\}\[somuchmore\]}\newline +{\tt \\item \[First\]\\tab\{0\}This is the first item of an enumerated}\newline +{\tt list that is nested within the itemized list.}\newline +{\tt \\item \[Second\]\\tab\{0\}This is the second item of the inner list.}\newline +{\tt \\end\{items\}}\newline +{\tt This is the rest of the second item of the outer list. It}\newline +{\tt is no more interesting than any other part of the item.}\newline +{\tt \\item\[The third\] item of the list.}\newline +{\tt \\end\{items\}}\newline +\end{paste} +\endImportant + +Another facility for presenting lists is the {\tt \\table} command. +The correct syntax for it is : {\tt \\table\{\{{\it item a}\} \{{\it item b}\} {\it ..}\}}. +The items in the braces will be placed in as many aligned columns +as is possible for the current window dimensions or page width. +If one item is particularly long there will probably be only one column +in the table. Here is a table of color names. +\beginImportant +\begin{paste}{HTXFormatPage5xPaste3}{HTXFormatPage5xPatch3} +\pastebutton{HTXFormatPage5xPaste3}{Interpret} +\newline +{\tt +\\table\{ +\{Dark Orchid\} \{Dark Salmon\} \{Dark Sea Green\} \{Dark Slate Blue\} +\{Dark Slate Gray\} \{Dark Turquoise\} \{Dark Violet\} \{Deep Pink\} +\{Deep Sky Blue\} \{Dodger Blue\} \{Floral White\} \{Forest Green\} +\{Ghost White\} \{Hot Pink\} \{Indian Red\} \{Lavender Blush\} +\} +} +\end{paste} +\endImportant + + + + +\end{scroll} +\beginmenu +\menulink{Next -- Boxes and Lines}{HTXFormatPage6} +\endmenu + +\end{page} + +@ +\subsection{HTXFormatPage5xPatch1 patch} +\label{HTXFormatPage5xPatch1} +\index{patch!HTXFormatPage5xPatch1!htxformatpage5.ht} +\index{htxformatpage5.ht!patch!HTXFormatPage5xPatch1} +\index{HTXFormatPage5xPatch1!htxformatpage5.ht!patch} +<>= +\begin{patch}{HTXFormatPage5xPatch1} +\begin{paste}{HTXFormatPage5xPaste1A}{HTXFormatPage5xPatch1A} +\pastebutton{HTXFormatPage5xPaste1A}{Source} +\newline +\indent{5} +\begin{items}[how wide am I] +Here we carry on but a \newline +new line will be indented +\item[how wide am I] fits nicely. Here is a \newline new line in an item. +\item[again] to show another item +\item[\\tab]\tab{0} can be used \tab{15} effectively +\end{items} +\indent{0} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage5xPatch1A patch} +\label{HTXFormatPage5xPatch1A} +\index{patch!HTXFormatPage5xPatch1A!htxformatpage5.ht} +\index{htxformatpage5.ht!patch!HTXFormatPage5xPatch1A} +\index{HTXFormatPage5xPatch1A!htxformatpage5.ht!patch} +<>= +\begin{patch}{HTXFormatPage5xPatch1A} +\begin{paste}{HTXFormatPage5xPaste1B}{HTXFormatPage5xPatch1} +\pastebutton{HTXFormatPage5xPaste1B}{Interpret} +\newline +{\tt \\indent\{5\}}\newline +{\tt \\begin\{items\}\[how wide am I\]}\newline +{\tt Here we carry on but a \\newline} \newline +{\tt new line will be indented } \newline +{\tt \\item\[how wide am I\] fits nicely. Here is a \\newline new line in an item.}\newline +{\tt \\item\[again\] to show another item}\newline +{\tt \\item\[\\\\tab\]\\tab\{0\} can be used \\tab\{15\} effectively}\newline +{\tt \\end\{items\}}\newline +{\tt \\indent\{0\}}\newline +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage5xPatch2 patch} +\label{HTXFormatPage5xPatch2} +\index{patch!HTXFormatPage5xPatch2!htxformatpage5.ht} +\index{htxformatpage5.ht!patch!HTXFormatPage5xPatch2} +\index{HTXFormatPage5xPatch2!htxformatpage5.ht!patch} +<>= +\begin{patch}{HTXFormatPage5xPatch2} +\begin{paste}{HTXFormatPage5xPaste2A}{HTXFormatPage5xPatch2A} +\pastebutton{HTXFormatPage5xPaste2A}{Source} +\newline +\begin{items}[quitealot] +A nested list: +\item[The first] item of an itemized list is on this line. +\item[The second] item of the list starts here. It contains another +list nested inside it. +\begin{items}[somuchmore] +\item [First]\tab{0}This is the first item of the +list that is nested within the itemized list. +\item [Second]\tab{0}This is the second item of the inner list. +\end{items} +This is the rest of the second item of the outer list. It +is no more interesting than any other part of the item. +\item [The third] item of the list. +\end{items} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage5xPatch2A patch} +\label{HTXFormatPage5xPatch2A} +\index{patch!HTXFormatPage5xPatch2A!htxformatpage5.ht} +\index{htxformatpage5.ht!patch!HTXFormatPage5xPatch2A} +\index{HTXFormatPage5xPatch2A!htxformatpage5.ht!patch} +<>= +\begin{patch}{HTXFormatPage5xPatch2A} +\begin{paste}{HTXFormatPage5xPaste2B}{HTXFormatPage5xPatch2} +\pastebutton{HTXFormatPage5xPaste2B}{Interpret} +\newline +{\tt \\begin\{items\}\[quitealot\]}\newline +{\tt A nested list:}\newline +{\tt \\item\[The first\] item of an itemized list is on this line.}\newline +{\tt \\item\[The second\] item of the list starts here. It contains another}\newline +{\tt list nested inside it.}\newline +{\tt \\begin\{items\}\[somuchmore\]}\newline +{\tt \\item \[First\]\\tab\{0\}This is the first item of an enumerated}\newline +{\tt list that is nested within the itemized list.}\newline +{\tt \\item \[Second\]\\tab\{0\}This is the second item of the inner list.}\newline +{\tt \\end\{items\}}\newline +{\tt This is the rest of the second item of the outer list. It}\newline +{\tt is no more interesting than any other part of the item.}\newline +{\tt \\item\[The third\] item of the list.}\newline +{\tt \\end\{items\}}\newline +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage5xPatch3 patch} +\label{HTXFormatPage5xPatch3} +\index{patch!HTXFormatPage5xPatch3!htxformatpage5.ht} +\index{htxformatpage5.ht!patch!HTXFormatPage5xPatch3} +\index{HTXFormatPage5xPatch3!htxformatpage5.ht!patch} +<>= +\begin{patch}{HTXFormatPage5xPatch3} +\begin{paste}{HTXFormatPage5xPaste3A}{HTXFormatPage5xPatch3A} +\pastebutton{HTXFormatPage5xPaste3A}{Source} +\newline +\table{ +{Dark Orchid} {Dark Salmon} {Dark Sea Green} {Dark Slate Blue} {Dark Slate Gray} +{Dark Turquoise} {Dark Violet} {Deep Pink} {Deep Sky Blue} {Dodger Blue} +{Floral White} {Forest Green} {Ghost White} {Hot Pink} {Indian Red} +{Lavender Blush} +} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage5xPatch3A patch} +\label{HTXFormatPage5xPatch3A} +\index{patch!HTXFormatPage5xPatch3A!htxformatpage5.ht} +\index{htxformatpage5.ht!patch!HTXFormatPage5xPatch3A} +\index{HTXFormatPage5xPatch3A!htxformatpage5.ht!patch} +<>= +\begin{patch}{HTXFormatPage5xPatch3A} +\begin{paste}{HTXFormatPage5xPaste3B}{HTXFormatPage5xPatch3} +\pastebutton{HTXFormatPage5xPaste3B}{Interpret} +\newline +{\tt +\\table\{ +\{Dark Orchid\} \{Dark Salmon\} \{Dark Sea Green\} \{Dark Slate Blue\} +\{Dark Slate Gray\} \{Dark Turquoise\} \{Dark Violet\} \{Deep Pink\} +\{Deep Sky Blue\} \{Dodger Blue\} \{Floral White\} \{Forest Green\} +\{Ghost White\} \{Hot Pink\} \{Indian Red\} \{Lavender Blush\} +\} +} +\end{paste} +\end{patch} + +@ +\section{htxformatpage6} +\subsection{Boxes and Lines} +\label{HTXFormatPage6} +\index{pages!HTXFormatPage6!htxformatpage6.ht} +\index{htxformatpage6.ht!pages!HTXFormatPage6} +\index{HTXFormatPage6!htxformatpage6.ht!pages} +<>= +\begin{page}{HTXFormatPage6}{Boxes and Lines} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +The {\tt \\fbox} command can be used to place a box around one or more +words. The argument of the {\tt \\fbox} command is the text that will be +placed in the box. This command should only be used for text that can fit +in one line. + +\beginImportant +\begin{paste}{HTXFormatPage6xPaste1}{HTXFormatPage6xPatch1} +\pastebutton{HTXFormatPage6xPaste1}{Interpret} +\newline +{\tt \\fbox\{Boxed!\}}\newline +\end{paste} +\endImportant + + +Use the {\tt \\horizontalline} command to draw a horizontal line +across the window. This might be useful for added emphasis. + +\beginImportant +\begin{paste}{HTXFormatPage6xPaste2}{HTXFormatPage6xPatch2} +\pastebutton{HTXFormatPage6xPaste2}{Interpret} +\newline +{\tt \\horizontalline}\newline +\end{paste} +\endImportant + +\end{scroll} +\beginmenu +\menulink{Next -- Micro-Spacing}{HTXFormatPage7} +\endmenu + +\end{page} + +@ +\subsection{HTXFormatPage6xPatch1 patch} +\label{HTXFormatPage6xPatch1} +\index{patch!HTXFormatPage6xPatch1!htxformatpage6.ht} +\index{htxformatpage6.ht!patch!HTXFormatPage6xPatch1} +\index{HTXFormatPage6xPatch1!htxformatpage6.ht!patch} +<>= +\begin{patch}{HTXFormatPage6xPatch1} +\begin{paste}{HTXFormatPage6xPaste1A}{HTXFormatPage6xPatch1A} +\pastebutton{HTXFormatPage6xPaste1A}{Source} +\newline +\fbox{Boxed!} +\end{paste} +\end{patch} +\begin{patch}{HTXFormatPage6xPatch1A} +\begin{paste}{HTXFormatPage6xPaste1B}{HTXFormatPage6xPatch1} +\pastebutton{HTXFormatPage6xPaste1B}{Interpret} +\newline +{\tt \\fbox\{Boxed!\}}\newline +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage6xPatch2 patch} +\label{HTXFormatPage6xPatch2} +\index{patch!HTXFormatPage6xPatch2!htxformatpage6.ht} +\index{htxformatpage6.ht!patch!HTXFormatPage6xPatch2} +\index{HTXFormatPage6xPatch2!htxformatpage6.ht!patch} +<>= +\begin{patch}{HTXFormatPage6xPatch2} +\begin{paste}{HTXFormatPage6xPaste2A}{HTXFormatPage6xPatch2A} +\pastebutton{HTXFormatPage6xPaste2A}{Source} +\newline +\horizontalline +\end{paste} +\end{patch} +\begin{patch}{HTXFormatPage6xPatch2A} +\begin{paste}{HTXFormatPage6xPaste2B}{HTXFormatPage6xPatch2} +\pastebutton{HTXFormatPage6xPaste2B}{Interpret} +\newline +{\tt \\horizontalline}\newline +\end{paste} +\end{patch} + +@ +\section{htxformatpage7} +\subsection{Micro-Spacing} +\label{HTXFormatPage7} +\index{pages!HTXFormatPage7!htxformatpage7.ht} +\index{htxformatpage7.ht!pages!HTXFormatPage7} +\index{HTXFormatPage7!htxformatpage7.ht!pages} +<>= +\begin{page}{HTXFormatPage7}{Micro-Spacing} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +There are three commands that one can use to exercise finer control +over the appearance of text on a page: {\tt \\space}, {\tt \\hspace} +and {\tt \\vspace}. + +The {\tt \\space\{{\it value}\}} command accepts an integer argument and simply +changes the position of the next character to the right or to the left. +A negative argument will move the next character to the left and a +positive one to the right. The unit of movement is {\it the width +of a character}. In this way one can overstrike characters to produce +various effects. + +\beginImportant +\begin{paste}{HTXFormatPage7xPaste1}{HTXFormatPage7xPatch1} +\pastebutton{HTXFormatPage7xPaste1}{Interpret} +\newline +{\tt 0\\space\{-1\}\\}\newline +{\tt underlined\\space\{-10\}__________}\newline +\end{paste} +\endImportant + + +The {\tt \\hspace\{{\it value}\}} command +is similar to the {\tt \\space\{{\it value}\}} command. +It also accepts an integer argument and +changes the position of the next character to the right or to the left. +A negative argument will move the next character to the left and a +positive one to the right. The unit of movement is {\it a pixel}. +The {\it value} argument specifies an offset from the default placement +of the character. + +\beginImportant +\begin{paste}{HTXFormatPage7xPaste2}{HTXFormatPage7xPatch2} +\pastebutton{HTXFormatPage7xPaste2}{Interpret} +\newline +{\tt x\\hspace\{-4\}x\\hspace\{-3\}x\\hspace\{-2\}x\\hspace\{-1\}x\%}\newline +{\tt x\\hspace\{1\}x\\hspace\{2\}x\\hspace\{3\}x\\hspace\{4\}x} +\end{paste} +\endImportant + +The {\tt \\vspace\{{\it value}\}} command is similar to the +{\tt \\hspace\{{\it value}\}} command but (as the name suggests) +works in the vertical direction. The unit of movement is {\it a +pixel}. The {\it value} argument specifies an offset from {\it +the next line}. A negative argument moves the next character up +and a positive down. This command can be used for subscripts and +superscripts. One drawback in the use of {\tt \\vspace} is that +it can only work with a particular font at a time. This is +because the inter-line spacing depends on the font being used +and the value of it is needed to get "back" on the line. +In general, the command {\tt \\vspace\{{\it - ils}\}} will +have a null effect when {\it ils} = ( font ascent + font descent + 5 ). +The example below assumes that {\it ils} = 25 e.g. the Rom14 font +on the RISC System/6000. + +\beginImportant +\begin{paste}{HTXFormatPage7xPaste3}{HTXFormatPage7xPatch3} +\pastebutton{HTXFormatPage7xPaste3}{Interpret} +\newline +{\tt CO\\vspace\{-18\}2\\vspace\{-32\} + CaO ->}\newline +{\tt CaCO\\vspace\{-18\}3\\vspace\{-32\}\\newline}\newline +{\tt R\\space\{-1\}~\\vspace\{-18\}æv\\vspace\{-32\}}\newline +{\tt \\hspace\{4\}-\\hspace\{8\}---\\hspace\{-12\}}\newline +{\tt \\vspace\{-32\}1\\space\{-1\}\\vspace\{-7\}2}\newline +{\tt \\vspace\{-36\}\\hspace\{8\}g\\space\{-1\}~}\newline +{\tt \\vspace\{-18\}æv\\vspace\{-32\}\\hspace\{2\}R}\newline +{\tt \\space\{-1\}~ = T\\vspace\{-18\}æv\\vspace\{-32\}}\newline +{\tt \\vspace\{-25\}} +\end{paste} +\endImportant + + +\end{scroll} +\beginmenu +\menulink{Next -- Bitmaps and Images}{HTXFormatPage8} +\endmenu + +\end{page} + +@ +\subsection{HTXFormatPage7xPatch1 patch} +\label{HTXFormatPage7xPatch1} +\index{patch!HTXFormatPage7xPatch1!htxformatpage7.ht} +\index{htxformatpage7.ht!patch!HTXFormatPage7xPatch1} +\index{HTXFormatPage7xPatch1!htxformatpage7.ht!patch} +<>= +\begin{patch}{HTXFormatPage7xPatch1} +\begin{paste}{HTXFormatPage7xPaste1A}{HTXFormatPage7xPatch1A} +\pastebutton{HTXFormatPage7xPaste1A}{Source} +\newline +0\space{-1}\\ +underlined\space{-10}__________ +\end{paste} +\end{patch} +\begin{patch}{HTXFormatPage7xPatch1A} +\begin{paste}{HTXFormatPage7xPaste1B}{HTXFormatPage7xPatch1} +\pastebutton{HTXFormatPage7xPaste1B}{Interpret} +\newline +{\tt 0\\space\{-1\}\\}\newline +{\tt underlined\\space\{-10\}__________}\newline +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage7xPatch2 patch} +\label{HTXFormatPage7xPatch2} +\index{patch!HTXFormatPage7xPatch2!htxformatpage7.ht} +\index{htxformatpage7.ht!patch!HTXFormatPage7xPatch2} +\index{HTXFormatPage7xPatch2!htxformatpage7.ht!patch} +<>= +\begin{patch}{HTXFormatPage7xPatch2} +\begin{paste}{HTXFormatPage7xPaste2A}{HTXFormatPage7xPatch2A} +\pastebutton{HTXFormatPage7xPaste2A}{Source} +\newline +x\hspace{-4}x\hspace{-3}x\hspace{-2}x\hspace{-1}x% +x\hspace{1}x\hspace{2}x\hspace{3}x\hspace{4}x +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage7xPatch2A patch} +\label{HTXFormatPage7xPatch2A} +\index{patch!HTXFormatPage7xPatch2A!htxformatpage7.ht} +\index{htxformatpage7.ht!patch!HTXFormatPage7xPatch2A} +\index{HTXFormatPage7xPatch2A!htxformatpage7.ht!patch} +<>= +\begin{patch}{HTXFormatPage7xPatch2A} +\begin{paste}{HTXFormatPage7xPaste2B}{HTXFormatPage7xPatch2} +\pastebutton{HTXFormatPage7xPaste2B}{Interpret} +\newline +{\tt x\\hspace\{-4\}x\\hspace\{-3\}x\\hspace\{-2\}x\\hspace\{-1\}x\%}\newline +{\tt x\\hspace\{1\}x\\hspace\{2\}x\\hspace\{3\}x\\hspace\{4\}x} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage7xPatch3 patch} +\label{HTXFormatPage7xPatch3} +\index{patch!HTXFormatPage7xPatch3!htxformatpage7.ht} +\index{htxformatpage7.ht!patch!HTXFormatPage7xPatch3} +\index{HTXFormatPage7xPatch3!htxformatpage7.ht!patch} +<>= +\begin{patch}{HTXFormatPage7xPatch3} +\begin{paste}{HTXFormatPage7xPaste3A}{HTXFormatPage7xPatch3A} +\pastebutton{HTXFormatPage7xPaste3A}{Source} +\newline +CO\vspace{-18}2\vspace{-32} + CaO -> +CaCO\vspace{-18}3\vspace{-32}\newline +R\space{-1}~\vspace{-18}æv\vspace{-32} +\hspace{4}-\hspace{8}---\hspace{-12} +\vspace{-32}1\space{-1}\vspace{-7}2 +\vspace{-36}\hspace{8}g\space{-1}~ +\vspace{-18}æv\vspace{-32}\hspace{2}R +\space{-1}~ = T\vspace{-18}æv\vspace{-32} +\vspace{-25} +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage7xPatch3A patch} +\label{HTXFormatPage7xPatch3A} +\index{patch!HTXFormatPage7xPatch3A!htxformatpage7.ht} +\index{htxformatpage7.ht!patch!HTXFormatPage7xPatch3A} +\index{HTXFormatPage7xPatch3A!htxformatpage7.ht!patch} +<>= +\begin{patch}{HTXFormatPage7xPatch3A} +\begin{paste}{HTXFormatPage7xPaste3B}{HTXFormatPage7xPatch3} +\pastebutton{HTXFormatPage7xPaste3B}{Interpret} +\newline +{\tt CO\\vspace\{-18\}2\\vspace\{-32\} + CaO ->}\newline +{\tt CaCO\\vspace\{-18\}3\\vspace\{-32\}\\newline}\newline +{\tt R\\space\{-1\}~\\vspace\{-18\}æv\\vspace\{-32\}}\newline +{\tt \\hspace\{4\}-\\hspace\{8\}---\\hspace\{-12\}}\newline +{\tt \\vspace\{-32\}1\\space\{-1\}\\vspace\{-7\}2}\newline +{\tt \\vspace\{-36\}\\hspace\{8\}g\\space\{-1\}~}\newline +{\tt \\vspace\{-18\}æv\\vspace\{-32\}\\hspace\{2\}R}\newline +{\tt \\space\{-1\}~ = T\\vspace\{-18\}æv\\vspace\{-32\}}\newline +{\tt \\vspace\{-25\}} +\end{paste} +\end{patch} + +@ +\section{htxformatpage8} +\subsection{Bitmaps and Images} +\label{HTXFormatPage8} +\index{pages!HTXFormatPage8!htxformatpage8.ht} +\index{htxformatpage8.ht!pages!HTXFormatPage8} +\index{HTXFormatPage8!htxformatpage8.ht!pages} +<>= +\begin{page}{HTXFormatPage8}{Bitmaps and Images} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +The commands {\tt \\inputbitmap\{{\it filename}\}} +and {\tt \\inputimage\{{\it filename}\}} +allow you to include an X11 bitmap or an +Axiom-generated viewport in a \HyperName{} +page. + +In the case of the {\tt \\inputbitmap} command +the {\it filename} parameter must be the full pathname +of an X11 bitmap file. + +\beginImportant +\begin{paste}{HTXFormatPage8xPaste1}{HTXFormatPage8xPatch1} +\pastebutton{HTXFormatPage8xPaste1}{Interpret} +\newline +{\tt \\inputbitmap\{\env{AXIOM}/doc/hypertex/bitmaps/sup.bitmap\} } +\end{paste} +\endImportant + +The {\it filename} parameter of the {\tt \\inputimage} +command must be the full pathname of a {\it compressed XPM image} file without the name extensions. +\HyperName{} always adds ".xpm.Z" to whatever filename you give and looks for the augmented filename. +Such files can be generated by Axiom command +\axiomOp{write} with the {\tt "image"} or {\tt "pixmap"} +options. + +\beginImportant +\begin{paste}{HTXFormatPage8xPaste2}{HTXFormatPage8xPatch2} +\pastebutton{HTXFormatPage8xPaste2}{Interpret} +\newline +{\tt \\inputimage\{\env{AXIOM}/doc/viewports/ugProblemNumericPage30.view/image\}} +\end{paste} +\endImportant + +Be careful not to break the pathname across lines. + +The {\tt \\inputimage} command will automatically select +the {\it image.xpm} or the {\it image.bm} file for you +based on the capabilities of your X server. + +For your convenience, there are two macros defined +in \centerline{ {\bf \env{AXIOM}{}/doc/hypertex/pages/util.ht}.} +The {\tt \\viewport} macro eliminates the need to specify +the {\tt .view/image} part and the +{\tt \\axiomViewport} macro automatically selects viewport +files in the system directories. The above {\tt \\inputimage} +could have been written +\beginImportant +{\tt \\viewport\{\env{AXIOM}/doc/viewports/ugProblemNumericPage30\}} +\endImportant +or +\beginImportant +{\tt \\axiomViewport\{ugProblemNumericPage30\}} +\endImportant + + + +\end{scroll} +\beginmenu +\menulink{Back to Formatting menu}{HTXFormatTopPage} +\endmenu + +\end{page} + +@ +\subsection{HTXFormatPage8xPatch1 patch} +\label{HTXFormatPage8xPatch1} +\index{patch!HTXFormatPage8xPatch1!htxformatpage8.ht} +\index{htxformatpage8.ht!patch!HTXFormatPage8xPatch1} +\index{HTXFormatPage8xPatch1!htxformatpage8.ht!patch} +<>= +\begin{patch}{HTXFormatPage8xPatch1} +\begin{paste}{HTXFormatPage8xPaste1A}{HTXFormatPage8xPatch1A} +\pastebutton{HTXFormatPage8xPaste1A}{Source} +\newline +\inputbitmap{\env{AXIOM}/doc/hypertex/bitmaps/sup.bitmap} +\end{paste} +\end{patch} +\begin{patch}{HTXFormatPage8xPatch1A} +\begin{paste}{HTXFormatPage8xPaste1B}{HTXFormatPage8xPatch1} +\pastebutton{HTXFormatPage8xPaste1B}{Interpret} +\newline +{\tt \\inputbitmap\{\env{AXIOM}/doc/hypertex/bitmaps/sup.bitmap\} } +\end{paste} +\end{patch} + +@ +\subsection{HTXFormatPage8xPatch2 patch} +\label{HTXFormatPage8xPatch2} +\index{patch!HTXFormatPage8xPatch2!htxformatpage8.ht} +\index{htxformatpage8.ht!patch!HTXFormatPage8xPatch2} +\index{HTXFormatPage8xPatch2!htxformatpage8.ht!patch} +<>= +\begin{patch}{HTXFormatPage8xPatch2} +\begin{paste}{HTXFormatPage8xPaste2A}{HTXFormatPage8xPatch2A} +\pastebutton{HTXFormatPage8xPaste2A}{Source} +\newline +\inputimage{\env{AXIOM}/doc/viewports/ugProblemNumericPage30.view/image} +\end{paste} +\end{patch} +@ +\subsection{HTXFormatPage8xPatch2A patch} +\label{HTXFormatPage8xPatch2A} +\index{patch!HTXFormatPage8xPatch2A!htxformatpage8.ht} +\index{htxformatpage8.ht!patch!HTXFormatPage8xPatch2A} +\index{HTXFormatPage8xPatch2A!htxformatpage8.ht!patch} +<>= +\begin{patch}{HTXFormatPage8xPatch2A} +\begin{paste}{HTXFormatPage8xPaste2B}{HTXFormatPage8xPatch2} +\pastebutton{HTXFormatPage8xPaste2B}{Interpret} +\newline +{\tt \\inputimage\{\env{AXIOM}/doc/viewports/ugProblemNumericPage30.view/image\}} +\end{paste} +\end{patch} + +@ +\section{htxformattoppage.ht} +\subsection{Formatting in Hyperdoc} +\begin{itemize} +\item HTXFormatPage1 \ref{HTXFormatPage1} on page~\pageref{HTXFormatPage1} +\item HTXFormatPage2 \ref{HTXFormatPage2} on page~\pageref{HTXFormatPage2} +\item HTXFormatPage3 \ref{HTXFormatPage3} on page~\pageref{HTXFormatPage3} +\item HTXFormatPage4 \ref{HTXFormatPage4} on page~\pageref{HTXFormatPage4} +\item HTXFormatPage5 \ref{HTXFormatPage5} on page~\pageref{HTXFormatPage5} +\item HTXFormatPage6 \ref{HTXFormatPage6} on page~\pageref{HTXFormatPage6} +\item HTXFormatPage7 \ref{HTXFormatPage7} on page~\pageref{HTXFormatPage7} +\item HTXFormatPage8 \ref{HTXFormatPage8} on page~\pageref{HTXFormatPage8} +\end{itemize} +\label{HTXFormatTopPage} +\index{pages!HTXFormatTopPage!htxformattoppage.ht} +\index{htxformattoppage.ht!pages!HTXFormatTopPage} +\index{HTXFormatTopPage!htxformattoppage.ht!pages} +<>= +\begin{page}{HTXFormatTopPage}{Formatting in Hyperdoc} +\centerline{\fbox{{\tt \thispage}}}\newline + +\HyperName{} offers various facilities for formatting text and images. +You can learn about these facilities by clicking on the topics below. +\begin{scroll} +\beginmenu +\menudownlink{Special Characters}{HTXFormatPage1} +\menudownlink{Formatting without commands}{HTXFormatPage2} +\menudownlink{Using different fonts}{HTXFormatPage3} +\menudownlink{Indentation}{HTXFormatPage4} +\menudownlink{Creating Lists and Tables}{HTXFormatPage5} +\menudownlink{Boxes and Lines}{HTXFormatPage6} +\menudownlink{Micro-Spacing}{HTXFormatPage7} +\menudownlink{Bitmaps and Images}{HTXFormatPage8} +\endmenu +\end{scroll} +\end{page} + + +@ +\section{htxintropage1.ht} +\subsection{What Hyperdoc does} +\label{HTXIntroPage1} +\begin{itemize} +\item HTXIntroPage2 \ref{HTXIntroPage2} on page~\pageref{HTXIntroPage2} +\item ugHyperPage \ref{ugHyperPage} on page~\pageref{ugHyperPage} +\end{itemize} +\index{pages!HTXIntroPage1!htxintropage1.ht} +\index{htxintropage1.ht!pages!HTXIntroPage1} +\index{HTXIntroPage1!htxintropage1.ht!pages} +<>= +\begin{page}{HTXIntroPage1}{What Hyperdoc does} +\centerline{\fbox{{\tt \thispage}}}\newline +\beginscroll + +Take a close look at the objects in the \HyperName{} window you are now reading. +Most of them are text. Resize the window using the window manager +facilities. The text is reformatted to fit the window +border. This action is performed by \HyperName{}. At the simplest +level, it provides a method for {\em formatting} text in a window. +In fact, it can place other things on the window as well, such as +bitmaps or color images. The {\em buttons} you see at either +side at the top of the window are bitmaps. + +Move the cursor so that it rests on one of those buttons. You notice that +the cursor has changed appearance. This indicates that there is an action associated +with the button. This action will be performed when you click the mouse button +over the {\em active area}. If you are familiar with \HyperName{}, you know +that the active area can be words, bitmaps, images or {\em input areas}. In +fact, anything that can be displayed in a \HyperName{} window can be an +active area. + +So, what can the action associated with an active area be? \HyperName{} +allows quite a bit of freedom in defining that action. We will have a close +look at this issue \downlink{later on}{HTXLinkTopPage}. For now, recall +the various actions that you have encountered so far --- executing Axiom +commands, popping up new windows, providing parameters for other active areas, +and replacing or changing the contents of the window. The most common action +is to bring up some \HyperName{} text in the same or a different window. +This lets us create {\em links} between pieces of text and images. A +system with such capability is usually called a {\em hypertext} system. +\HyperName{} is in fact much more. + +\endscroll +\beginmenu +\menulink{Next -- How \HyperName{} does it}{HTXIntroPage2} +\menuwindowlink{Review some features of \HyperName{}}{ugHyperPage} +\endmenu + +\helppage{ugHyperPage} +\end{page} + +@ +\section{htxintropage2.ht} +\subsection{How Hyperdoc does it} +\label{HTXIntroPage2} +See HTXIntroPage3 \ref{HTXIntroPage3} on page~\pageref{HTXIntroPage3} +\index{pages!HTXIntroPage2!htxintropage2.ht} +\index{htxintropage2.ht!pages!HTXIntroPage2} +\index{HTXIntroPage2!htxintropage2.ht!pages} +<>= +\begin{page}{HTXIntroPage2}{How Hyperdoc does it} +{\centerline{\fbox{{\tt \thispage}}}\newline} +\beginscroll + +\HyperName{} can read the {\em hypertext} information from standard text +files. This means that you can create or change this information with any +text editor. Once this information has been entered into the files, a +special program, called {\bf htadd}, scans these files and produces +a database (another file called {\bf ht.db}) of {\em objects} +encountered in the files. \HyperName{} +consults this database when it first starts and so knows where it might +find the definitions of these objects. You can maintain several such +databases on different directories. You indicate which database you +want \HyperName{} to consult by setting an {\em environment variable} +called {\bf HTPATH}. + +In general, hypertext must obviously use some kind of special (that is, +non-textual) marks for all the extra functionality it provides. In +\HyperName{}, these marks are some special characters --- special +in the sense that they are not interpreted as ordinary displayable text. +These characters, however, are part of the standard ASCII set. +There is also a way to display these special characters as text . +The \HyperName{} special characters are : + +\beginImportant +\noindent{\em Special Characters}: {\tt \table{{\$}{\\}{\{}{\}}{\[}{\]}{\%}{\#}}} +\endImportant + + + +\HyperName{} uses the special characters to distinguish between +{\em text} and {\em commands} (by {\em text}, we mean here anything +displayable). The commands are instructions to +\HyperName{} to treat some text in a particular way. Some commands +define special \HyperName{} objects. The most important objects +are {\em pages}, {\em patches}, and {\em macros}. +A {\em page} is a description of the contents of a +\HyperName{} window. A {\em patch} is a portion of a page. +A {\em macro} is a user-defined new \HyperName{} command. +Some commands allow special text {\em formatting} and others +associate some text with an action. + +In order to display anything at all in \HyperName, you must define a +{\em page}. The next section explains how to define a {\em page} and put +some simple text into it. +\endscroll +\beginmenu +\menudownlink{Next -- Define a simple text page}{HTXIntroPage3} +\endmenu + +\end{page} + + +@ +\section{htxintropage3.ht} +\subsection{A simple text page} +\begin{itemize} +\item HTXLinkPage6 \ref{HTXLinkPage6} on page~\pageref{HTXLinkPage6} +\item HTXTryPage \ref{HTXTryPage} on page~\pageref{HTXTryPage} +\item HTXFormatTopPage \ref{HTXFormatTopPage} on +page~\pageref{HTXFormatTopPage} +\end{itemize} +\label{HTXIntroPage3} +\index{pages!HTXIntroPage3!htxintropage3.ht} +\index{htxintropage3.ht!pages!HTXIntroPage3} +\index{HTXIntroPage3!htxintropage3.ht!pages} +<>= +\begin{page}{HTXIntroPage3}{A simple text page} +{\centerline{\fbox{{\tt \thispage}}}\newline} +\begin{scroll} + + +A page is defined by a {\em group} command. Group commands are used to +delimit a group, that is, to declare where a group starts and where it +ends. The proper syntax for a page definition is as follows: +\beginImportant +{\tt \\begin\{page\}\{{\it name}\}\{{\it a title}\}} +\newline +. +\newline +. +\newline +. +\newline +{\tt \\end\{page\}} +\beginImportant + +Note the use of the special characters {\tt \\}, {\tt \{} and {\tt +\}}. The {\tt \\} (backslash) character introduces a command, in this +case, {\tt begin}. The {\tt \{ \}} (braces) delimit the {\em +parameters} to the command. The first parameter (the word {\tt page}) +specifies this as a page definition command. + +The second parameter can be any single unbroken word consisting of +alphanumeric characters only, and specifies the name of the page by which +it can be referred to by other commands. You should choose +this internal name with care so as to avoid potential conflict with +page names that are defined by the Axiom system. This caveat only +applies in the case where you have started \HyperName{} with the Axiom +database --- see \downlink{later on}{HTXLinkPage6}. It is suggested that +the page names you define start with the letters {\tt UX} (standing for +{\tt U}ser e{\tt X}tensions). You can have a look at the Axiom +system database file {\centerline{\bf \env{AXIOM}/doc/hypertex/pages/ht.db} } +which contains the names of all pages, macros and patches used by Axiom. + +The third parameter specifies a title for the page. +The title of a page is the area at the very top +of the window, between the buttons. Virtually anything +that can be put in the main page can also be put in the +title. As an example, {\em this} page's +declaration is like this:\newline +{\tt \\begin\{page\}\{\thispage\}\{A simple text page\}} + +Everything you type between the {\tt \\begin\{page\}} command and the next +{\tt \\end\{page\}} command will become the body of the page. It is +an error to insert another {\tt \\begin\{page\}} between the two, that is, +this group command cannot be nested. + +There is another useful group command that should be mentioned here +--- the {\em scroll} command. It controls the portion of the page that +will be scrollable. \HyperName{} will split a page in three sections: +a {\em header}, a {\em scroll region} and a {\em footer}. \HyperName{} +will always try to keep the header and footer regions visible on the +page; the header at the top and the footer at the bottom. The middle +scroll region will be truncated and a scroll bar will be automatically +provided if the window becomes too small for the whole contents of the +page. Only one scroll region can be defined in a page and the correct +syntax is as follows: +\beginImportant +{\tt \\begin\{scroll\}} +\newline +. +\newline +. +\newline +. +\newline +{\tt \\end\{scroll\}} +\beginImportant + +This group should be placed inside the relevant page group. The text +between the {\tt \\begin\{page\}} and {\tt \\begin\{scroll\}} commands +defines the header region, the text inside the scroll group defines +the scroll region and the text between the {\tt \\end\{scroll\}} and +{\tt \\end\{page\}} commands defines the footer region. It is +important to keep the header and footer areas small. Use them to +display information that might be needed at any time by the user. If +you don't define a scroll region in your page, you may find that a +portion of the page is truncated. + +You are now ready to experiment with a page of your own. If you just +want to display some text on a page, you don't need any other +\HyperName{} commands. Just make sure that the text you type for the +title, header, scroll and footer regions does not contain (for the +moment) any of the \HyperName{} special characters. + +\end{scroll} +\beginmenu +\menuwindowlink{Try out what you learned}{HTXTryPage} +\menudownlink{Next -- Learn how to format text}{HTXFormatTopPage} +\endmenu +\end{page} + + +@ +\section{htxintrotoppage.ht} +\subsection{First Steps} +\begin{itemize} +\item HTXIntroPage1 \ref{HTXIntroPage1} on page~\pageref{HTXIntroPage1} +\item HTXIntroPage2 \ref{HTXIntroPage2} on page~\pageref{HTXIntroPage2} +\item HTXIntroPage3 \ref{HTXIntroPage3} on page~\pageref{HTXIntroPage3} +\end{itemize} +\label{HTXIntroTopPage} +\index{pages!HTXIntroTopPage!htxintrotoppage.ht} +\index{htxintrotoppage.ht!pages!HTXIntroTopPage} +\index{HTXIntroTopPage!htxintrotoppage.ht!pages} +<>= +\begin{page}{HTXIntroTopPage}{First Steps} +\centerline{\fbox{{\tt \thispage}}}\newline +\beginscroll + +\HyperName{} is both a way of presenting information and +a customisable front-end. Axiom uses +it for its own purpose as a front-end and documentation system. +\HyperName{} has special facilities that allow it to interact +very closely with Axiom. The \Browse{} facility, the Basic +Commands section and the ability to execute Axiom commands +by clicking on \HyperName{} text are witness to this. + +These pages will show you the features of \HyperName{} that might +make it appropriate for your own use in, for example, providing +documentation for Axiom code that you write or some other purpose. + +It is recommended that you get familiar with the {\em use} of +\HyperName{} before proceeding. + +\endscroll +\beginmenu +\menudownlink{What \HyperName{} does}{HTXIntroPage1} +\menudownlink{How \HyperName{} does it}{HTXIntroPage2} +\menudownlink{Define a simple text page}{HTXIntroPage3} +\endmenu + +\end{page} + +@ +\section{htxlinkpage1.ht} +\subsection{Linking to a named page} +\label{HTXLinkPage1} +\begin{itemize} +\item HTXLinkTopPage \ref{HTXLinkTopPage} on page~\pageref{HTXLinkTopPage} +\item TestHelpPage \ref{TestHelpPage} on page~\pageref{TestHelpPage} +\item HTXLinkPage2 \ref{HTXLinkPage2} on page~pageref{HTXLinkPage2} +\end{itemize} +\index{pages!HTXLinkPage1!htxlinkpage1.ht} +\index{htxlinkpage1.ht!pages!HTXLinkPage1} +\index{HTXLinkPage1!htxlinkpage1.ht!pages} +<>= +\begin{page}{HTXLinkPage1}{Linking to a named page} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +In \HyperName{}, hypertext links are specified by different +flavors of the {\tt \\link} command. These commands take two +arguments. One argument specifies the active area, that +is, the {\it trigger} of the link. The second argument specifies the +{\it target} of the link, that is, a page. The trigger can be quite arbitrary +\HyperName{} text and can include images or whole paragraphs. The trigger +text will be formatted in the normal fashion but its default font will be +the font specified by the ActiveFont resource. + +The simplest kind of \HyperName{} link is a link to a named page. +Clicking on the trigger will cause the named page to appear in a +\HyperName{} window. +There are three flavors for such a link. +\begin{items}[123456] +\item\menuitemstyle{{\tt \\windowlink\{{\it trigger}\}\{{\it page name}\}}} +\newline +This link command, when activated, will create a new window for the named page. +\newline +There will be no \centerline{\UpBitmap{} or \ReturnBitmap{}} +buttons on the new page. +The new page will have a \centerline{\ExitBitmap{}} button, however. +The original page containing the {\tt \\windowlink} command will be unaffected. +\item\menuitemstyle{{\tt \\downlink\{{\it trigger}\}\{{\it page name}\}} } +\newline This link command, when activated, will cause the +current page to be replaced by the target page +in the same \HyperName{} window. +A \centerline{\UpBitmap{}} button will automatically be placed +on the new page allowing you to get back to the page +containing the {\tt \\downlink} command. +If the current page has a \centerline{\ReturnBitmap{}} button then +the target page will also carry it. The associated +target page of that button will be the same as it is +in the current page. +\item\menuitemstyle{{\tt \\memolink\{{\it trigger}\}\{{\it page name}\}}} +\newline This link command is similar to the {\tt \\downlink} command. +In addition, it will cause a \centerline{\ReturnBitmap{}} +button to be included in +the target page and all pages {\tt \\downlink}ed from it. +This button will act as a +direct link to the page containing the {\tt \\memolink} command allowing +a short-cut to be taken. +\end{items} + +\beginImportant +\begin{paste}{HTXLinkPage1xPaste1}{HTXLinkPage1xPatch1} +\pastebutton{HTXLinkPage1xPaste1}{Interpret} +\newline +{\tt \\windowlink\{windowlink to Actions menu\}\{HTXLinkTopPage\}\\newline}\newline +{\tt \\downlink\{downlink to Actions menu\}\{HTXLinkTopPage\}\\newline}\newline +{\tt \\memolink\{memolink to Actions menu\}\{HTXLinkTopPage\}} +\end{paste} +\endImportant + + +There is a fourth button that can appear at the top of the page +next to the \centerline{\ExitBitmap{}} button. +Its purpose is to provide access to a particular {\it help page} +associated with the current page. +That is the \centerline{\HelpBitmap{}} button. The command to use +is +\centerline{{\tt \\helppage\{{\it help page name}\}}} +The {\tt \\helppage} command {\it must } be placed +just before the {\tt \\end\{page\}} command. +For instance, to get a help button on this page +the following command is used. +\centerline{{\tt {\\helppage\{TestHelpPage\}}}} +Clicking on the help button at the top +will display the {\tt TestHelpPage} page in a new window. + +\end{scroll} +\beginmenu +\menulink{Next -- Standard Pages}{HTXLinkPage2} +\endmenu + +\helppage{TestHelpPage} +\end{page} + +@ +\subsection{HTXLinkPage1xPatch1 patch} +\label{HTXLinkPage1xPatch1} +\index{patch!HTXLinkPage1xPatch1!htxlinkpage1.ht} +\index{htxlinkpage1.ht!patch!HTXLinkPage1xPatch1} +\index{HTXLinkPage1xPatch1!htxlinkpage1.ht!patch} +<>= +\begin{patch}{HTXLinkPage1xPatch1} +\begin{paste}{HTXLinkPage1xPaste1A}{HTXLinkPage1xPatch1A} +\pastebutton{HTXLinkPage1xPaste1A}{Source} +\newline +\windowlink{windowlink to Actions +menu}{HTXLinkTopPage}\newline +\downlink{downlink to Actions menu}{HTXLinkTopPage}\newline +\memolink{memolink to Actions menu}{HTXLinkTopPage} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage1xPatch1A patch} +\label{HTXLinkPage1xPatch1A} +\index{patch!HTXLinkPage1xPatch1A!htxlinkpage1.ht} +\index{htxlinkpage1.ht!patch!HTXLinkPage1xPatch1A} +\index{HTXLinkPage1xPatch1A!htxlinkpage1.ht!patch} +<>= +\begin{patch}{HTXLinkPage1xPatch1A} +\begin{paste}{HTXLinkPage1xPaste1B}{HTXLinkPage1xPatch1} +\pastebutton{HTXLinkPage1xPaste1B}{Interpret} +\newline +{\tt \\windowlink\{windowlink to Actions menu\}\{HTXLinkTopPage\}\\newline}\newline +{\tt \\downlink\{downlink to Actions menu\}\{HTXLinkTopPage\}\\newline}\newline +{\tt \\memolink\{memolink to Actions menu\}\{HTXLinkTopPage\}} +\end{paste} +\end{patch} + +@ +\subsection{Test Help Page} +\label{TestHelpPage} +\index{pages!TestHelpPage!htxlinkpage1.ht} +\index{htxlinkpage1.ht!pages!TestHelpPage} +\index{TestHelpPage!htxlinkpage1.ht!pages} +<>= +\begin{page}{TestHelpPage}{Test Help Page} +\begin{scroll} + +\vspace{100} +\centerline{Is this any help?} +\end{scroll} +\end{page} + +@ +\section{htxlinkpage2.ht} +\subsection{Standard Pages} +\label{HTXLinkPage2} +\begin{itemize} +\item HTXLinkPage6 \ref{HTXLinkPage6} on page~\pageref{HTXLinkPage6} +\item SpadNotConnectedPage \ref{SpadNotConnectedPage} on +page~\pageref{SpadNotConnectedPage} +\item UnknownPage \ref{UnknownPage} on page~\pageref{UnknownPage} +\item ErrorPage \ref{ErrorPage} on page~\pageref{ErrorPage} +\item ProtectedQuitPage \ref{ProtectedQuitPage} on +page~\pageref{ProtectedQuitPage} +\item HTXLinkPage3 \ref{HTXLinkPage3} on page~\pageref{HTXLinkPage3} +\end{itemize} +\index{pages!HTXLinkPage2!htxlinkpage2.ht} +\index{htxlinkpage2.ht!pages!HTXLinkPage2} +\index{HTXLinkPage2!htxlinkpage2.ht!pages} +<>= +\begin{page}{HTXLinkPage2}{Standard Pages} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +You have reached this page after performing +a series of mouse clicks on \HyperName{} +active areas. Each time, a {\tt \\link} +command was activated. Well, how does it all +start? +The answer is that \HyperName{} always puts up +a particular page called {\tt RootPage} when +it starts up. If this page is not found in the database, +\HyperName{} will immediately exit. +It is, of course, desirable that the {\tt RootPage} +contains links to other pages! +It is possible to override +Axiom's choice of {\tt RootPage} and provide your own +to \HyperName{}. This is done in the same way as +you would override any Axiom-defined page and is +discussed in \downlink{How to use your pages with \HyperName{}}{HTXLinkPage6}. + + + +You may have noticed that \HyperName{} +uses some pages when certain events occur. +There is a page that is put up, for instance, +whenever \HyperName{} cannot connect to Axiom. +Another page is put up whenever there is a formatting +error and yet another when a request for an unknown page +is made. Finally, there is a page that prompts +for confirmation when you press the +exit button on the initial page. + + +These pages have standard names and must be provided +in the \HyperName{} page database. +They are already defined in the Axiom system +\HyperName{} page database so that you do not have to +define them yourself. + +Here are the pages required by \HyperName{}. You can click on any of these +to see their contents. Click on their exit buttons when you are finished. + +\beginImportant +\begin{paste}{HTXLinkPage2xPaste1}{HTXLinkPage2xPatch1} +\pastebutton{HTXLinkPage2xPaste1}{Interpret} +\newline +{\tt \\table\{}\newline +{\tt \{\\windowlink\{SpadNotConnectedPage\}\{SpadNotConnectedPage\}\}}\newline +{\tt \{\\windowlink\{UnknownPage\}\{UnknownPage\}\}}\newline +{\tt \{\\windowlink\{ErrorPage\}\{ErrorPage\}\}}\newline +{\tt \{\\windowlink\{ProtectedQuitPage\}\{ProtectedQuitPage\}\}}\newline +{\tt \}}\newline +\end{paste} +\endImportant + + +In addition, \HyperName{} uses certain bitmaps for its buttons. +They are also provided in the Axiom system +bitmap directory and \HyperName{} knows where to find them. + +The bitmap files required by \HyperName{} are the following. +\newline +\tab{7}{\it exit.bitmap}\tab{22} = \tab{25}{\ExitBitmap{}} \newline +\tab{7}{\it help2.bitmap}\tab{22} = \tab{25}{\HelpBitmap{}} \newline +\tab{7}{\it up3.bitmap}\tab{22} = \tab{25}{\UpBitmap{}}\newline +\tab{7}{\it return3.bitmap}\tab{22} = \tab{25}{\ReturnBitmap{}}\newline +\tab{7}{\it noop.bitmap}\tab{22} = \tab{25}{\NoopBitmap{}} + +These files must exist in your current directory if +the {\tt AXIOM} environment variable is not set. +If it is, then \HyperName{} will assume that it points +to the Axiom system directory and will look for +these files in +{\bf \$AXIOM/doc/hypertex/bitmaps}. + + + + +\end{scroll} +\beginmenu +\menulink{Next -- Active Axiom commands}{HTXLinkPage3} +\endmenu + +\end{page} + +@ +\subsection{HTXLinkPage2xPatch1 patch} +\label{HTXLinkPage2xPatch1} +\index{patch!HTXLinkPage2xPatch1!htxlinkpage2.ht} +\index{htxlinkpage2.ht!patch!HTXLinkPage2xPatch1} +\index{HTXLinkPage2xPatch1!htxlinkpage2.ht!patch} +<>= +\begin{patch}{HTXLinkPage2xPatch1} +\begin{paste}{HTXLinkPage2xPaste1A}{HTXLinkPage2xPatch1A} +\pastebutton{HTXLinkPage2xPaste1A}{Source} +\newline +\table{ +{\windowlink{SpadNotConnectedPage}{SpadNotConnectedPage}} +{\windowlink{UnknownPage}{UnknownPage}} +{\windowlink{ErrorPage}{ErrorPage}} +{\windowlink{ProtectedQuitPage}{ProtectedQuitPage}} +} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage2xPatch1A patch} +\label{HTXLinkPage2xPatch1A} +\index{patch!HTXLinkPage2xPatch1A!htxlinkpage2.ht} +\index{htxlinkpage2.ht!patch!HTXLinkPage2xPatch1A} +\index{HTXLinkPage2xPatch1A!htxlinkpage2.ht!patch} +<>= +\begin{patch}{HTXLinkPage2xPatch1A} +\begin{paste}{HTXLinkPage2xPaste1B}{HTXLinkPage2xPatch1} +\pastebutton{HTXLinkPage2xPaste1B}{Interpret} +\newline +{\tt \\table\{}\newline +{\tt \{\\windowlink\{SpadNotConnectedPage\}\{SpadNotConnectedPage\}\}}\newline +{\tt \{\\windowlink\{UnknownPage\}\{UnknownPage\}\}}\newline +{\tt \{\\windowlink\{ErrorPage\}\{ErrorPage\}\}}\newline +{\tt \{\\windowlink\{ProtectedQuitPage\}\{ProtectedQuitPage\}\}}\newline +{\tt \}}\newline +\end{paste} +\end{patch} + +@ +\section{htxlinkpage3.ht} +\subsection{Active Axiom commands} +\label{HTXLinkPage3} +See HTXLinkPage4 \ref{HTXLinkPage4} on page~\pageref{HTXLinkPage4} +\index{pages!HTXLinkPage3!htxlinkpage3.ht.ht} +\index{htxlinkpage3.ht.ht!pages!HTXLinkPage3} +\index{HTXLinkPage3!htxlinkpage3.ht.ht!pages} +<>= +\begin{page}{HTXLinkPage3}{Active Axiom commands} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +This section explains how to include Axiom +commands in your page. The commands we will +introduce are actually {\it macros} that are defined +in +\centerline{{\bf \env{AXIOM}/doc/hypertex/pages/util.ht}} +This means that you can use them only if you include +this file in your \HyperName{} database. + +The first command to learn is +\horizontalline +{\tt \\axiomcommand\{ {\it command }{\tt \ \\free\{}{\it var1 var2 ...}{\tt \}\ \\bound\{}{\it var}{\tt \}\ \}} } +\horizontalline + + +The {\tt \\free\{\}} and {\tt \\bound\{\}} directives are optional. +We will come to them in a minute. The {\it command} above is the +text of the Axiom command. Only single line commands are allowed +here. +This text will be displayed in the reserved AxiomFont logical +font. The area of the text will be active and clicking on it +will attempt to send the command to Axiom for evaluation. +A new Axiom interpreter window (and Axiom frame) +will be created if this was the first Axiom command +activated in the current page. If not, the command will be sent +to the already opened Axiom interpreter window for the current page. +Note that it {\it is} necessary to escape special +\HyperName{} characters with the {\tt '\\'} backslash character. +The exceptions are the characters {\tt \[\]}; they do not +need to be escaped in this context. + +\beginImportant +\begin{paste}{HTXLinkPage3xPaste1}{HTXLinkPage3xPatch1} +\pastebutton{HTXLinkPage3xPaste1}{Interpret} +\newline +{\tt \\axiomcommand\{ l:=brace[1,2,3] ; length:=\\\# l ; m:=[1,2]\}} +\end{paste} +\endImportant + + +The optional {\tt \\free\{\}} and {\tt \\bound\{\}} directives +provide dependency control. The reader of a \HyperName{} +page is not forced to click on the commands in the +order in which in they appear on the page. If the +correct {\tt \\free\{\}} and {\tt \\bound\{\}} +specifications are made, clicking on a command +will result in execution of all those other +commands that should be executed before it. +This will {\it only} happen the first time the command is +clicked. + +So, how are the dependencies specified? +The arguments of the {\tt \\free\{\}} directive must +be space-separated words (labels). The argument of {\tt \\bound\{\}} +must be a single (unique for the page) label. Each label in the {\tt \\free\{\}} list +must exist as an argument to one (and only one) {\tt \\bound\{\}} directive +somewhere in the current page. +When the command is activated, \HyperName{} will look +in the {\tt \\free\{\}} list and check each label. +For each label, it will find the command that specifies that label +in its {\tt \\bound\{\}} directive and +execute it if it has not been already executed. +The order of labels in the {\tt \\free\{\}} directive list +is respected. \HyperName{} will follow all +dependency links recursively. + +Here is an example. +Clicking on the third command will automatically +execute all of them in the correct sequence. +Note that in this case the order of labels in the last +line is immaterial since {\tt v2} explicitly depends on {\tt v1}. + +\beginImportant +\begin{paste}{HTXLinkPage3xPaste2}{HTXLinkPage3xPatch2} +\pastebutton{HTXLinkPage3xPaste2}{Interpret} +\newline +{\tt \\axiomcommand\{a:=1;d:=4 \\bound\{v1\}\}}\newline +{\tt \\newline}\newline +{\tt \\axiomcommand\{b:=a+3 \\free\{v1\} \\bound\{v2\}\}}\newline +{\tt \\newline}\newline +{\tt \\axiomcommand\{c:=b+d \\free\{v1 v2\} \\bound\{v3\}\}}\newline +\end{paste} +\endImportant + +The second command deals with multi-line Axiom +code. This is the command to use for execution of +an Axiom {\it pile}. It is a {\it group} +command. The proper syntax for it is as follows: +\horizontalline +{\tt \\begin\{spadsrc\}\ [\\free\{{\it var1 var2} ...\}\ \\bound\{{\it var}\}]} +\newline +. +\newline +. +\newline +{\tt \\end\{spadsrc\}} +\horizontalline + +Again, the {\tt \\free} and {\tt \\bound} directives are +optional. If they are specified (in exactly the same way +as {\tt \\axiomcommand}), they must be enclosed in +square brackets {\tt []}. +The lines between the {\tt \\begin} and {\tt \\end} +contain the Axiom statements. Indentation +will be respected. \HyperName{} will +actually save this part in a temporary file +and instruct Axiom to read the file +with the {\tt )read} system command. + +Here is an example. The execution of the following +fragment is dependent on the {\tt v3} label. +Make sure that previous commands are active (and +hence the label {\tt v3} is "visible") before +trying to execute it. If the label {\tt v3} +is not seen in the page, \HyperName{} will +print an error message on standard output +and ignore the dependency. + + +\beginImportant +\begin{paste}{HTXLinkPage3xPaste3}{HTXLinkPage3xPatch3} +\pastebutton{HTXLinkPage3xPaste3}{Interpret} +\newline +{\tt \\begin\{spadsrc\}\ [\\free\{v3\}\ \\bound\{v4\}]}\newline +{\tt f\ x\ ==}\newline +{\tt \ \ \ x+c}\newline +{\tt f\ 3}\newline +{\tt \\end\{spadsrc\}} +\end{paste} +\endImportant + +There is, in fact, more that one can do +with Axiom commands. In pages elsewhere +in the system, Axiom commands appear next +to button like this \ \MenuDotBitmap{}. +Clicking on this button, one can see the output +for that command. The output has been +pre-computed and is also stored in +\HyperName{} files. This is done using +{\it patch} and {\it paste}. +It is the same mechanism that +is used to alternatively display +\HyperName{} source and interpreted +result in this and other pages. +It is explained \downlink{later on}{HTXAdvPage5}. + + +\end{scroll} +\beginmenu +\menulink{Next -- Linking to Lisp}{HTXLinkPage4} +\endmenu + +\end{page} + +@ +\subsection{HTXLinkPage3xPatch1 patch} +\label{HTXLinkPage3xPatch1} +\index{patch!HTXLinkPage3xPatch1!htxlinkpage3.ht} +\index{htxlinkpage3.ht!patch!HTXLinkPage3xPatch1} +\index{HTXLinkPage3xPatch1!htxlinkpage3.ht!patch} +<>= +\begin{patch}{HTXLinkPage3xPatch1} +\begin{paste}{HTXLinkPage3xPaste1A}{HTXLinkPage3xPatch1A} +\pastebutton{HTXLinkPage3xPaste1A}{Source} +\newline +\axiomcommand{ l:=brace[1,2,3] ; length:=\# l ; m:=[1,2]} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage3xPatch1A patch} +\label{HTXLinkPage3xPatch1A} +\index{patch!HTXLinkPage3xPatch1A!htxlinkpage3.ht} +\index{htxlinkpage3.ht!patch!HTXLinkPage3xPatch1A} +\index{HTXLinkPage3xPatch1A!htxlinkpage3.ht!patch} +<>= +\begin{patch}{HTXLinkPage3xPatch1A} +\begin{paste}{HTXLinkPage3xPaste1B}{HTXLinkPage3xPatch1} +\pastebutton{HTXLinkPage3xPaste1B}{Interpret} +\newline +{\tt \\axiomcommand\{ l:=brace[1,2,3] ; length:=\\\# l ; m:=[1,2]\}} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage3xPatch2 patch} +\label{HTXLinkPage3xPatch2} +\index{patch!HTXLinkPage3xPatch2!htxlinkpage3.ht} +\index{htxlinkpage3.ht!patch!HTXLinkPage3xPatch2} +\index{HTXLinkPage3xPatch2!htxlinkpage3.ht!patch} +<>= +\begin{patch}{HTXLinkPage3xPatch2} +\begin{paste}{HTXLinkPage3xPaste2A}{HTXLinkPage3xPatch2A} +\pastebutton{HTXLinkPage3xPaste2A}{Source} +\newline +\axiomcommand{a:=1;d:=4 \bound{v1}} +\newline +\axiomcommand{b:=a+3 \free{v1} \bound{v2}} +\newline +\axiomcommand{c:=b+d \free{v1 v2} \bound{v3}} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage3xPatch2A patch} +\label{HTXLinkPage3xPatch2A} +\index{patch!HTXLinkPage3xPatch2A!htxlinkpage3.ht} +\index{htxlinkpage3.ht!patch!HTXLinkPage3xPatch2A} +\index{HTXLinkPage3xPatch2A!htxlinkpage3.ht!patch} +<>= +\begin{patch}{HTXLinkPage3xPatch2A} +\begin{paste}{HTXLinkPage3xPaste2B}{HTXLinkPage3xPatch2} +\pastebutton{HTXLinkPage3xPaste2B}{Interpret} +\newline +{\tt \\axiomcommand\{a:=1;d:=4 \\bound\{v1\}\}}\newline +{\tt \\newline}\newline +{\tt \\axiomcommand\{b:=a+3 \\free\{v1\} \\bound\{v2\}\}}\newline +{\tt \\newline}\newline +{\tt \\axiomcommand\{c:=b+d \\free\{v1 v2\} \\bound\{v3\}\}}\newline +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage3xPatch3 patch} +\label{HTXLinkPage3xPatch3} +\index{patch!HTXLinkPage3xPatch3!htxlinkpage3.ht} +\index{htxlinkpage3.ht!patch!HTXLinkPage3xPatch3} +\index{HTXLinkPage3xPatch3!htxlinkpage3.ht!patch} +<>= +\begin{patch}{HTXLinkPage3xPatch3} +\begin{paste}{HTXLinkPage3xPaste3A}{HTXLinkPage3xPatch3A} +\pastebutton{HTXLinkPage3xPaste3A}{Source} +\newline +\begin{spadsrc} [\free{v3} \bound{v4}] +f x == + x+c +f 3 +\end{spadsrc} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage3xPatch3A patch} +\label{HTXLinkPage3xPatch3A} +\index{patch!HTXLinkPage3xPatch3A!htxlinkpage3.ht} +\index{htxlinkpage3.ht!patch!HTXLinkPage3xPatch3A} +\index{HTXLinkPage3xPatch3A!htxlinkpage3.ht!patch} +<>= +\begin{patch}{HTXLinkPage3xPatch3A} +\begin{paste}{HTXLinkPage3xPaste3B}{HTXLinkPage3xPatch3} +\pastebutton{HTXLinkPage3xPaste3B}{Interpret} +\newline +{\tt \\begin\{spadsrc\}\ [\\free\{v3\}\ \\bound\{v4\}]}\newline +{\tt f\ x\ ==}\newline +{\tt \ \ \ x+c}\newline +{\tt f\ 3}\newline +{\tt \\end\{spadsrc\}} +\end{paste} +\end{patch} + +@ +\section{htxlinkpage4.ht} +\subsection{Linking to Lisp} +\label{HTXLinkPage4} +See HTXLinkPage5 \ref{HTXLinkPage5} on page~\pageref{HTXLinkPage5} +\index{pages!HTXLinkPage4!htxlinkpage4.ht} +\index{htxlinkpage4.ht!pages!HTXLinkPage4} +\index{HTXLinkPage4!htxlinkpage4.ht!pages} +<>= +\begin{page}{HTXLinkPage4}{Linking to Lisp} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +Another feature of the Axiom\hspace{2}--\HyperName{} +link is the ability to execute {\it Lisp} +code at a click of a button. +There are two things one can do. + +The first is to cause the evaluation +of a {\it Lisp} form and ignore (as far as \HyperName{} +is concerned) its value. The evaluation of the function +might have an effect however on your Axiom session. + +The command for this is +\horizontalline +\centerline{ {\tt \\lispcommand\{{\it text}\}\{{\it Lisp form}\}}} +\horizontalline + +Here is an example. We will first define a {\it Lisp} function +and then execute it. Notice that the \HyperName{} +special characters must be escaped (this is on top +of {\it Lisp} escaping conventions). + + +\beginImportant +\begin{paste}{HTXLinkPage4xPaste1}{HTXLinkPage4xPatch1} +\pastebutton{HTXLinkPage4xPaste1}{Interpret} +\newline +{\tt \\lispcommand\{Definition\}\{(defun HTXTESTFUNCTION ()}\newline +{\tt (print "Hello from HyperDoc \\\\\\\\ \\\% \\\{ \\\}"))\}} \newline +{\tt \\newline}\newline +{\tt \\lispcommand\{Execution\}\{(HTXTESTFUNCTION)\}} \newline +\end{paste} +\endImportant + +Your command will be executed as soon as +Axiom completes any computation it might be +carrying out. + + +%\axiomcommand{)lisp (defun f () (pprint "hello"))} +%\lispcommand{f}{(|f|)} + + +The second thing you can do is quite powerful. It allows you +to delegate to a {\it Lisp} function +the {\it dynamic} creation of a page. This is used +in \Browse{} to present +the Axiom Library in a hypertext form. + +The command to use is a lot like the {\tt link} commands +you encountered \downlink{earlier}{HTXLinkPage1} and comes in three flavours. +\centerline{{\tt \\lispwindowlink\{{\it trigger}\}\{{\it Lisp form}\}}} +\centerline{{\tt \\lispdownlink\{{\it trigger}\}\{{\it Lisp form}\}}} +\centerline{{\tt \\lispmemolink\{{\it trigger}\}\{{\it Lisp form}\}}} + +The difference between the three versions is the same as before. +When such a link is activated, \HyperName{} issues the +{\it Lisp form} to Axiom and waits for a full +page definition. An important point to note is that +\HyperName{} does {\it not} use +the value of the {\it Lisp form} but, instead, it +depends on its {\it side-effects}. +What {\it must} happen during evaluation +of the form is enough evaluations of a special {\it Lisp} +function called {\bf issueHT} to define a page. +The argument of {\bf issueHT} is a string +containing \HyperName{} text. Perhaps an example will clarify +matters. + +First we will define a {\it Lisp} function that accepts +a string argument and calls {\bf issueHT} a few times. +The strings that are passed to {\bf issueHT} construct +a \HyperName{} page that would just contain our +original argument centered roughly on the page. +Then we write the {\tt \\lisplink} with a call to +the function. Finally, we execute a {\it Lisp} +command that just pretty--prints the function's definition. + + + +\beginImportant +\begin{paste}{HTXLinkPage4xPaste2}{HTXLinkPage4xPatch2} +\pastebutton{HTXLinkPage4xPaste2}{Interpret} +\newline +{\tt \\lispcommand\{Definition\}\{(defun HTXTESTPAGE (x) (|issueHT|}\newline +{\tt "\\\\\\\\begin\\\{page\\\}\\\{LispTestPage\\\}\\\{Lisp Test Page\\\}}\newline +{\tt \\\\\\\\vspace\\\{150\\\} \\\\\\\\centerline\\\{") (|issueHT| x) (|issueHT|}\newline +{\tt "\\\} \\\\\\\\end\\\{page\\\}" ) ) \}}\newline +{\tt \\newline}\newline +{\tt \\lispwindowlink\{Link to it\}\{(HTXTESTPAGE "Hi there")\}}\newline +{\tt \\newline}\newline +{\tt \\lispcommand\{Show Lisp definition\}\{(pprint (symbol-function 'HTXTESTPAGE))\}}\newline +\end{paste} +\endImportant + +The {\tt '\\\{'} and {\tt '\\\}'} is required to escape +\HyperName{}'s special characters {\tt '\{'} and {\tt '\}'}. +The {\tt '\\\\\\\\'} has the following rationale. +We need to send to \HyperName{} (from {\it Lisp}) the sequence +{\tt \\begin}. But {\tt '\\'} is a special {\it Lisp} +character. Therefore the {\it Lisp} string must be +{\tt '\\\\begin'}. But to specify this +in \HyperName{} we need to escape the two {\tt '\\'}. +Therefore, we write {\tt '\\\\\\\\begin'}. + + +The definition of {\tt HTXTESTPAGE} would have been written in {\it Lisp} +as follows. +\begin{verbatim} +(defun HTXTESTPAGE (X) + (|issueHT| + "\\begin{page}{LispTestPage}{Lisp Test Page} \\vspace{200} \\centerline{") + (|issueHT| X) + (|issueHT| "} \\end{page}")) +\end{verbatim} + + + +You should not execute {\tt HTXTESTPAGE} in the +{\it Lisp} environment manually. It is meant to +be executed {\it only} in response to a +\HyperName{} request. + +Can you pop-up a named page from {\it Lisp} regardless of +user action? Yes --- use {\it Lisp} function {\bf linkToHTPage} +with the page name as a string argument. Click on the +{\tt \\axiomcommand} below. Then, in your Axiom +session, you can repeat it if you like. + +\beginImportant +\begin{paste}{HTXLinkPage4xPaste3}{HTXLinkPage4xPatch3} +\pastebutton{HTXLinkPage4xPaste3}{Interpret} +\newline +{\tt \\axiomcommand\{)lisp (|linkToHTPage| "RootPage")\}} +\end{paste} +\endImportant + +You can also pop-up a {\it dynamic} page regardless of user action. +To do this, make sure you evaluate the {\it Lisp form} +{\bf (|startHTPage| 50)} before using {\bf issueHT}. +The example below requires the {\tt HTXTESTPAGE} function +to be defined in {\it Lisp} so you should make sure +you have executed the command above that defines it. + +\beginImportant +\begin{paste}{HTXLinkPage4xPaste4}{HTXLinkPage4xPatch4} +\pastebutton{HTXLinkPage4xPaste4}{Interpret} +\newline +{\tt \\axiomcommand\{)lisp (progn (|startHTPage| 50)(HTXTESTPAGE "Immediately"))\}} +\end{paste} +\endImportant + +Now, the most important use of this facility +so far has been in the \Browse{} and Basic Commands components of +\HyperName{}. Instead of giving you details of the various +\Browse{} {\it Lisp} functions, a few macros are defined in +\centerline{{\bf \$AXIOM/doc/hypertex/pages/util.ht}} + +The most important defined macros are +\beginImportant +\table{ +{ {\tt \\axiomType\{{\it constructor}\}} } +{ {\tt \\axiomOp\{{\it operation}\}} } +{ {\tt \\axiomOpFrom\{{\it operation }\}\{{\it constructor}\}}} +} +\endImportant + +Here are some examples of their use. +\beginImportant +\begin{paste}{HTXLinkPage4xPaste5}{HTXLinkPage4xPatch5} +\pastebutton{HTXLinkPage4xPaste5}{Interpret} +\newline +{\tt \\axiomType\{Expression Integer\}}\newline +{\tt \newline}\newline +{\tt \\axiomType\{Expression\}}\newline +{\tt \newline}\newline +{\tt \\axiomType\{EXPR\}}\newline +{\tt \newline}\newline +{\tt \\axiomOp\{reduce\}}\newline +{\tt \newline}\newline +{\tt \\axiomOp\{as*\}}\newline +{\tt \newline}\newline +{\tt \\axiomOpFrom\{reduce\}\{Expression\}}\newline +\end{paste} +\endImportant + +The macro {\tt \\axiomType} brings up the \Browse{} +constructor page for the constructor specified. +You can specify a full name, or an abbreviation +or just the top level name. +The macro {\tt \\axiomOp} brings up a list of operations +matching the argument. +The macro {\tt \\axiomOpFrom} shows documentation +about the specified operation whose origin is +constructor. No wildcard in the operation name +or type abbreviation is +allowed here. You should also specify just the top level type. + + + + + + + +\end{scroll} +\beginmenu +\menulink{Next -- Linking to Unix}{HTXLinkPage5} +\endmenu + +\end{page} + +@ +\subsection{HTXLinkPage4xPatch1 patch} +\label{HTXLinkPage4xPatch1} +\index{patch!HTXLinkPage4xPatch1!htxlinkpage4.ht} +\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch1} +\index{HTXLinkPage4xPatch1!htxlinkpage4.ht!patch} +<>= +\begin{patch}{HTXLinkPage4xPatch1} +\begin{paste}{HTXLinkPage4xPaste1A}{HTXLinkPage4xPatch1A} +\pastebutton{HTXLinkPage4xPaste1A}{Source} +\newline +\lispcommand{Definition}{(defun HTXTESTFUNCTION () +(print "Hello from HyperDoc \\\\ \% \{ \}"))} +\newline +\lispcommand{Execution}{(HTXTESTFUNCTION)} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage4xPatch1A patch} +\label{HTXLinkPage4xPatch1A} +\index{patch!HTXLinkPage4xPatch1A!htxlinkpage4.ht} +\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch1A} +\index{HTXLinkPage4xPatch1A!htxlinkpage4.ht!patch} +<>= +\begin{patch}{HTXLinkPage4xPatch1A} +\begin{paste}{HTXLinkPage4xPaste1B}{HTXLinkPage4xPatch1} +\pastebutton{HTXLinkPage4xPaste1B}{Interpret} +\newline +{\tt \\lispcommand\{Definition\}\{(defun HTXTESTFUNCTION () (print "Hello from HyperDoc \\\\\\\\ \\\% \\\{ \\\}"))\}} \newline +{\tt \\newline}\newline +{\tt \\lispcommand\{Execution\}\{(HTXTESTFUNCTION)\}} \newline +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage4xPatch2 patch} +\label{HTXLinkPage4xPatch2} +\index{patch!HTXLinkPage4xPatch2!htxlinkpage4.ht} +\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch2} +\index{HTXLinkPage4xPatch2!htxlinkpage4.ht!patch} +<>= +\begin{patch}{HTXLinkPage4xPatch2} +\begin{paste}{HTXLinkPage4xPaste2A}{HTXLinkPage4xPatch2A} +\pastebutton{HTXLinkPage4xPaste2A}{Source} +\newline +\lispcommand{Definition}{(defun HTXTESTPAGE (x) (|issueHT| +"\\\\begin\{page\}\{LispTestPage\}\{Lisp Test Page\} +\\\\vspace\{150\} \\\\centerline\{") (|issueHT| x) (|issueHT| +"\} \\\\end\{page\}" ) ) } +\newline +\lispwindowlink{Link to it}{(HTXTESTPAGE "Hi there")} +\newline +\lispcommand{Show Lisp definition}{(pprint (symbol-function 'HTXTESTPAGE))} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage4xPatch2A patch} +\label{HTXLinkPage4xPatch2A} +\index{patch!HTXLinkPage4xPatch2A!htxlinkpage4.ht} +\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch2A} +\index{HTXLinkPage4xPatch2A!htxlinkpage4.ht!patch} +<>= +\begin{patch}{HTXLinkPage4xPatch2A} +\begin{paste}{HTXLinkPage4xPaste2B}{HTXLinkPage4xPatch2} +\pastebutton{HTXLinkPage4xPaste2B}{Interpret} +\newline +{\tt \\lispcommand\{Definition\}\{(defun HTXTESTPAGE (x) (|issueHT|}\newline +{\tt "\\\\\\\\begin\\\{page\\\}\\\{LispTestPage\\\}\\\{Lisp Test Page\\\}}\newline +{\tt \\\\\\\\vspace\\\{150\\\} \\\\\\\\centerline\\\{") (|issueHT| x) (|issueHT|}\newline +{\tt "\\\} \\\\\\\\end\\\{page\\\}" ) ) \}}\newline +{\tt \\newline}\newline +{\tt \\lispwindowlink\{Link to it\}\{(HTXTESTPAGE "Hi there")\}}\newline +{\tt \\newline}\newline +{\tt \\lispcommand\{Show Lisp definition\}\{(pprint (symbol-function 'HTXTESTPAGE))\}}\newline +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage4xPatch3 patch} +\label{HTXLinkPage4xPatch3} +\index{patch!HTXLinkPage4xPatch3!htxlinkpage4.ht} +\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch3} +\index{HTXLinkPage4xPatch3!htxlinkpage4.ht!patch} +<>= +\begin{patch}{HTXLinkPage4xPatch3} +\begin{paste}{HTXLinkPage4xPaste3A}{HTXLinkPage4xPatch3A} +\pastebutton{HTXLinkPage4xPaste3A}{Source} +\newline +\axiomcommand{)lisp (|linkToHTPage| "RootPage")} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage4xPatch3A patch} +\label{HTXLinkPage4xPatch3A} +\index{patch!HTXLinkPage4xPatch3A!htxlinkpage4.ht} +\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch3A} +\index{HTXLinkPage4xPatch3A!htxlinkpage4.ht!patch} +<>= +\begin{patch}{HTXLinkPage4xPatch3A} +\begin{paste}{HTXLinkPage4xPaste3B}{HTXLinkPage4xPatch3} +\pastebutton{HTXLinkPage4xPaste3B}{Interpret} +\newline +{\tt \\axiomcommand\{)lisp (|linkToHTPage| "RootPage")\}} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage4xPatch4 patch} +\label{HTXLinkPage4xPatch4} +\index{patch!HTXLinkPage4xPatch4!htxlinkpage4.ht} +\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch4} +\index{HTXLinkPage4xPatch4!htxlinkpage4.ht!patch} +<>= +\begin{patch}{HTXLinkPage4xPatch4} +\begin{paste}{HTXLinkPage4xPaste4A}{HTXLinkPage4xPatch4A} +\pastebutton{HTXLinkPage4xPaste4A}{Source} +\newline +\axiomcommand{)lisp (progn (|startHTPage| 50)(HTXTESTPAGE "Immediately"))} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage4xPatch4A patch} +\label{HTXLinkPage4xPatch4A} +\index{patch!HTXLinkPage4xPatch4A!htxlinkpage4.ht} +\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch4A} +\index{HTXLinkPage4xPatch4A!htxlinkpage4.ht!patch} +<>= +\begin{patch}{HTXLinkPage4xPatch4A} +\begin{paste}{HTXLinkPage4xPaste4B}{HTXLinkPage4xPatch4} +\pastebutton{HTXLinkPage4xPaste4B}{Interpret} +\newline +{\tt \\axiomcommand\{)lisp (progn (|startHTPage| 50)(HTXTESTPAGE "Immediately"))\}} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage4xPatch5 patch} +\label{HTXLinkPage4xPatch5} +\index{patch!HTXLinkPage4xPatch5!htxlinkpage4.ht} +\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch5} +\index{HTXLinkPage4xPatch5!htxlinkpage4.ht!patch} +<>= +\begin{patch}{HTXLinkPage4xPatch5} +\begin{paste}{HTXLinkPage4xPaste5A}{HTXLinkPage4xPatch5A} +\pastebutton{HTXLinkPage4xPaste5A}{Source} +\newline +\axiomType{Expression Integer} +\newline +\axiomType{Expression} +\newline +\axiomType{EXPR} +\newline +\axiomOp{reduce} +\newline +\axiomOp{as*} +\newline +\axiomOpFrom{reduce}{Expression} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage4xPatch5A patch} +\label{HTXLinkPage4xPatch5A} +\index{patch!HTXLinkPage4xPatch5A!htxlinkpage4.ht} +\index{htxlinkpage4.ht!patch!HTXLinkPage4xPatch5A} +\index{HTXLinkPage4xPatch5A!htxlinkpage4.ht!patch} +<>= +\begin{patch}{HTXLinkPage4xPatch5A} +\begin{paste}{HTXLinkPage4xPaste5B}{HTXLinkPage4xPatch5} +\pastebutton{HTXLinkPage4xPaste5B}{Interpret} +\newline +{\tt \\axiomType\{Expression Integer\}}\newline +{\tt \newline}\newline +{\tt \\axiomType\{Expression\}}\newline +{\tt \newline}\newline +{\tt \\axiomType\{EXPR\}}\newline +{\tt \newline}\newline +{\tt \\axiomOp\{reduce\}}\newline +{\tt \newline}\newline +{\tt \\axiomOp\{as*\}}\newline +{\tt \newline}\newline +{\tt \\axiomOpFrom\{reduce\}\{Expression\}}\newline +\end{paste} +\end{patch} + +@ +\section{htxlinkpage5.ht} +\subsection{Linking to Unix} +\label{HTXLinkPage5} +\index{pages!HTXLinkPage5!htxlinkpage5.ht} +\index{htxlinkpage5.ht!pages!HTXLinkPage5} +\index{HTXLinkPage5!htxlinkpage5.ht!pages} +<>= +\begin{page}{HTXLinkPage5}{Linking to Unix} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +Let us conclude the tour of \HyperName{} +actions that can be triggered with a click of a button +with two more facilities. These are +\beginImportant +\table{ +{ {\tt \\unixcommand\{{\it trigger text}\}\{{\it unix command}\}}} +{ {\tt \\unixlink\{{\it trigger text}\}\{{\it unix command}\}}} +} +\endImportant + + +The first one, {\tt \\unixcommand}, is very much like +{\tt \\axiomcommand} and {\tt \\lispcommand}. +The trigger text becomes an active area. Clicking on it +will force \HyperName{} to pass the second argument +to the system as a shell command to be executed. +The shell used is {\bf /bin/sh}. +\HyperName{} ignores the output of the command. + + +\beginImportant +\begin{paste}{HTXLinkPage5xPaste1}{HTXLinkPage5xPatch1} +\pastebutton{HTXLinkPage5xPaste1}{Interpret} +\newline +{\tt \\unixcommand\{List \\\$HOME directory\}\{ls \\\$HOME\}}\newline +\end{paste} +\endImportant + +The {\tt \\unixlink} command delegates to a another +program the creation of a dynamic page. When the trigger +text is activated, \HyperName{} will invoke the command +specified in the second argument. It will then start reading +the {\it standard output} of the command until +a complete page has been received. It is important that +a single page and nothing more is written by the command. +This command is essentially a {\tt \\downlink}, i.e. +the new page replaces the current page in the window. +There aren't any other flavours of {\tt \\unixlink}. +A trivial example is to use {\bf cat} on a \HyperName{} +file known to contain just one page. + +\beginImportant +\begin{paste}{HTXLinkPage5xPaste2}{HTXLinkPage5xPatch2} +\pastebutton{HTXLinkPage5xPaste2}{Interpret} +\newline +{\tt \\unixlink\{Some file\}} \newline +{\tt \{cat\\ \\env\{AXIOM\}/doc/hypertex/pages/HTXplay.ht\}} +\end{paste} +\endImportant + + +Two things to notice in the second argument of +{\tt \\unixlink}: You must use a {\it hard space} +{\tt '\\\ '} to preserve the spacing in the command. +Also, the {\tt \\env} command allows you to use +an environment variable in \HyperName{} text. + +With a little ingenuity (and maybe some shell and {\bf awk} scripts !) +, one can use these +facilities to create, say, a point-and-click +directory viewer which allows you to edit +a file by clicking on its name. + +\end{scroll} +\beginmenu +\menulink{Next -- How to use your pages with \HyperName{}}{HTXLinkPage6} +\endmenu + +\end{page} + +@ +\subsection{HTXLinkPage5xPatch1 patch} +\label{HTXLinkPage5xPatch1} +\index{patch!HTXLinkPage5xPatch1!htxlinkpage5.ht} +\index{htxlinkpage5.ht!patch!HTXLinkPage5xPatch1} +\index{HTXLinkPage5xPatch1!htxlinkpage5.ht!patch} +<>= +\begin{patch}{HTXLinkPage5xPatch1} +\begin{paste}{HTXLinkPage5xPaste1A}{HTXLinkPage5xPatch1A} +\pastebutton{HTXLinkPage5xPaste1A}{Source} +\newline +\unixcommand{List \$HOME directory}{ls \$HOME} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage5xPatch1A patch} +\label{HTXLinkPage5xPatch1A} +\index{patch!HTXLinkPage5xPatch1A!htxlinkpage5.ht} +\index{htxlinkpage5.ht!patch!HTXLinkPage5xPatch1A} +\index{HTXLinkPage5xPatch1A!htxlinkpage5.ht!patch} +<>= +\begin{patch}{HTXLinkPage5xPatch1A} +\begin{paste}{HTXLinkPage5xPaste1B}{HTXLinkPage5xPatch1} +\pastebutton{HTXLinkPage5xPaste1B}{Interpret} +\newline +{\tt \\unixcommand\{List \\\$HOME directory\}\{ls \\\$HOME\}}\newline +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage5xPatch2 patch} +\label{HTXLinkPage5xPatch2} +\index{patch!HTXLinkPage5xPatch2!htxlinkpage5.ht} +\index{htxlinkpage5.ht!patch!HTXLinkPage5xPatch2} +\index{HTXLinkPage5xPatch2!htxlinkpage5.ht!patch} +<>= +\begin{patch}{HTXLinkPage5xPatch2} +\begin{paste}{HTXLinkPage5xPaste2A}{HTXLinkPage5xPatch2A} +\pastebutton{HTXLinkPage5xPaste2A}{Source} +\newline +\unixlink{Some file} +{cat\ \env{AXIOM}/doc/hypertex/pages/HTXplay.ht} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage5xPatch2A patch} +\label{HTXLinkPage5xPatch2A} +\index{patch!HTXLinkPage5xPatch2A!htxlinkpage5.ht} +\index{htxlinkpage5.ht!patch!HTXLinkPage5xPatch2A} +\index{HTXLinkPage5xPatch2A!htxlinkpage5.ht!patch} +<>= +\begin{patch}{HTXLinkPage5xPatch2A} +\begin{paste}{HTXLinkPage5xPaste2B}{HTXLinkPage5xPatch2} +\pastebutton{HTXLinkPage5xPaste2B}{Interpret} +\newline +{\tt \\unixlink\{Some file\}} \newline +{\tt \{cat\\ \\env\{AXIOM\}/doc/hypertex/pages/HTXplay.ht\}} +\end{paste} +\end{patch} + +@ +\section{htxlinkpage6.ht} +\subsection{How to use your pages with Hyperdoc} +\label{HTXLinkPage6} +\index{pages!HTXLinkPage6!htxlinkpage6.ht} +\index{htxlinkpage6.ht!pages!HTXLinkPage6} +\index{HTXLinkPage6!htxlinkpage6.ht!pages} +<>= +\begin{page}{HTXLinkPage6}{How to use your pages with Hyperdoc} +\centerline{\fbox{{\tt \thispage}}}\newline +\begin{scroll} + +Let us say that you have written a few \HyperName{} +pages and you would like to incorporate them in the system. +Here is what you should do. + +Put all your files in some directory and make sure that +they all have the {\bf .ht} extension. + +You will need a way of "hooking" into a system--defined +\HyperName{} page. The proper way to do this is to use +the {\tt \\localinfo} macro. The Axiom system +\HyperName{} page database includes, as it should, +a {\tt RootPage}. This is the page that first comes up +when you start \HyperName{}. This page contains +a line like this. +\beginImportant +\newline +{\tt \\localinfo} +\endImportant + +This macro is defined in +\centerline{ {\bf \env{AXIOM}/doc/hypertex/pages/util.ht}} +to be (see \downlink{Macros}{HTXAdvPage3} to learn how to define macros): +\beginImportant +\newline +{\tt \\newcommand\{\\localinfo\}\{\}} +\endImportant +which is an empty definition (the second argument of {\tt \\newcommand}). +The idea then is that you {\it override} this definition of the macro +with your own. +To do that, include a definition like the following in one (possibly the +one that contains your top--level page) of your files. You can +put this definition in its own file if you like. +\beginImportant +\newline +{\tt \\newcommand\{\\localinfo\}\{\\menuwindowlink\{{\it active text}\}} \newline +{\tt \{{\it page name}\} \\tab\{16\}{\it short description}\}} +\endImportant + +If you have a look at the initial \HyperName{} page, you will +probably be able to decipher what this does. The macro +{\tt \\menuwindowlink} is defined (again in {\bf util.ht}) +and is responsible for putting the little square to the left of the +active area. +Specify a word or two for {\it active text}. That will become the +trigger of the {\tt \\link}. Specify the page name of your top--level page +in {\it page name}. Finally, you can give a comment about the topic +under {\it short description}. That will appear to the right of the +{\it active text}. + +The next thing you need to do is to create a {\it local database} +for your files. You will use the {\bf \env{AXIOM}/bin/htadd} program. +This program will create an {\bf ht.db} file that summarises your +definitions and acts as an index. Let us present an example +of its use. Suppose you have two files {\bf user1.ht} and {\bf user2.ht} +in directory {\bf /u/sugar/\HyperName{}}. You should create the {\bf ht.db} +in that same directory. To create the {\bf ht.db} file you issue to +the unix shell: +\beginImportant +\newline +{\tt htadd -f /u/sugar/\HyperName{} /u/sugar/\HyperName{}/user1.ht /u/sugar/\HyperName{}/user2.ht} +\centerline{or ,if you are already in /u/sugar/\HyperName{}} +{\tt htadd -l ./user1.ht ./user2.ht} +\endImportant + + +The options and conventions for {\bf htadd} will be explained below. +To start \HyperName{} with your own pages, you now need to tell +it where to search for {\bf ht.db} files and \HyperName{} {\bf .ht} +files. To do this, define the shell environment variable +{\bf HTPATH}. The value should be a colon {\tt ':'} separated +list of directory full pathnames. +The order of the directories is respected with earlier entries overriding +later ones. Since we want all the Axiom pages but need to override the +{\tt \\localinfo} macro, we should use the value +\centerline{{\bf /u/sugar/\HyperName{}:\env{AXIOM}/doc/hypertex/pages}} +The way that you define environment variables depends on the shell +you are using. In the {\bf /bin/csh}, it would be +\newline +{\bf setenv HTPATH /u/sugar/\HyperName{}:\env{AXIOM}{}/doc{}/hypertex{}/pages} + + + +\beginImportant +\begin{paste}{HTXLinkPage6xPaste1}{HTXLinkPage6xPatch1} +\pastebutton{HTXLinkPage6xPaste1}{Options for {\bf htadd}} +\newline +\end{paste} +\endImportant + + +\beginImportant +\begin{paste}{HTXLinkPage6xPaste2}{HTXLinkPage6xPatch2} +\pastebutton{HTXLinkPage6xPaste2}{Where does \HyperName{} look for files} +\newline +\end{paste} +\endImportant + + + +\end{scroll} +\beginmenu +\menulink{Back to Actions menu}{HTXLinkTopPage} +\endmenu + +\end{page} + +@ +\subsection{HTXLinkPage6xPatch1 patch} +\label{HTXLinkPage6xPatch1} +\index{patch!HTXLinkPage6xPatch1!htxlinkpage6.ht} +\index{htxlinkpage6.ht!patch!HTXLinkPage6xPatch1} +\index{HTXLinkPage6xPatch1!htxlinkpage6.ht!patch} +<>= +\begin{patch}{HTXLinkPage6xPatch1} +\begin{paste}{HTXLinkPage6xPaste1A}{HTXLinkPage6xPatch1A} +\pastebutton{HTXLinkPage6xPaste1A}{Hide} +\newline +Name: + +{\tt htadd - create or modify a \HyperName{} database} +\vspace{} +\newline +Syntax: + +{\tt htadd [ -l | -s | -f\ }{\it path}{\tt ] [ -d | -n ]\ }{\it filename ...} +\vspace{} +\newline +Options:\indentrel{4}\newline +{\tt -l}\tab{8}\indentrel{8} +build {\bf ht.db} database in current working directory. +This is the default behaviour if no {\tt -l}, {\tt -s} or {\tt -f} +is specified. + +\indentrel{-8}\newline +{\tt -s}\tab{8}\indentrel{8} +build {\bf ht.db} database in {\it system} directory. The +system directory is built as follows. If the {\tt AXIOM} +variable is defined, the {\bf \$AXIOM/doc/hypertex/pages} directory +is used. If {\tt AXIOM} is not defined, the +{\bf /usr/local/axiom/doc/hypertex/pages} directory is used. + + +\indentrel{-8}\newline +{\tt -f\ }{\it path}\newline\tab{8}\indentrel{8} +build {\bf ht.db} database in specified {\it path}. + +\indentrel{-8}\newline +{\tt -d}\tab{8}\indentrel{8} +delete the entries in the specified files from {\bf ht.db}. + +\indentrel{-8}\newline +{\tt -n}\tab{8}\indentrel{8} +delete {\bf ht.db} and create a new one using only the files +specified. + +If none of {\tt -n} and {\tt -d} is specified, the {\bf ht.db} +is updated with the entries in the file specified. + + +\indentrel{-8} +\indentrel{-4} +\vspace{}\newline +Filename interpretation : +\indentrel{12}\newline +A full pathname (i.e. anything that has a {\tt '/'} in it) +will be taken do be a completely specified file. +Otherwise, the following interpretation will occur: +If the {\tt HTPATH} variable is defined, the directories +specified in it will be tried in order. If {\tt HTPATH} +is not defined, then, if {\tt AXIOM} is defined, the +{\bf \$AXIOM/doc/hypertex/pages} will be tried, else +the file will be deemed missing and {\bf htadd} will fail. +\indentrel{-12} +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage6xPatch1A patch} +\label{HTXLinkPage6xPatch1A} +\index{patch!HTXLinkPage6xPatch1A!htxlinkpage6.ht} +\index{htxlinkpage6.ht!patch!HTXLinkPage6xPatch1A} +\index{HTXLinkPage6xPatch1A!htxlinkpage6.ht!patch} +<>= +\begin{patch}{HTXLinkPage6xPatch1A} +\begin{paste}{HTXLinkPage6xPaste1B}{HTXLinkPage6xPatch1} +\pastebutton{HTXLinkPage6xPaste1B}{Options for {\bf htadd}} +\newline +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage6xPatch2 patch} +\label{HTXLinkPage6xPatch2} +\index{patch!HTXLinkPage6xPatch2!htxlinkpage6.ht} +\index{htxlinkpage6.ht!patch!HTXLinkPage6xPatch2} +\index{HTXLinkPage6xPatch2!htxlinkpage6.ht!patch} +<>= +\begin{patch}{HTXLinkPage6xPatch2} +\begin{paste}{HTXLinkPage6xPaste2A}{HTXLinkPage6xPatch2A} +\pastebutton{HTXLinkPage6xPaste2A}{Hide} +\indentrel{12}\newline +The \HyperName{} program is +\centerline{{\bf \env{AXIOM}/lib/hypertex}} +If {\tt AXIOM} is defined and {\tt HTPATH} is not +(this is the case when Axiom starts \HyperName{}) +\HyperName{} will look in +\centerline{{\bf \env{AXIOM}/doc/hypertex/pages}} +for the {\bf ht.db} file and all \HyperName{} pages. +If {\tt HTPATH} is defined, it is assumed that +it alone points to the directories to be searched +(the above default will NOT be searched unless +explicitly specified in {\tt HTPATH}). +For each directory in {\tt HTPATH}, the {\bf ht.db} +file, if there, will be read. +Each file listed in {\bf ht.db} will +then be searched for in the complete sequence +of directories in {\tt HTPATH}. Note that +the {\bf ht.db} does not keep full pathnames + of files. +If a {\it page}, {\it macro} or {\it patch} +(specified in some {\bf ht.db}) happens +to be (in a file) in more than one of the directories +specified in {\tt HTPATH}, \HyperName{} +will print a warning and explain which version +in which file is ignored. Generally, earlier +directories in {\tt HTPATH} are preferred over later +ones. +\indentrel{-12}\newline +\end{paste} +\end{patch} + +@ +\subsection{HTXLinkPage6xPatch2A patch} +\label{HTXLinkPage6xPatch2A} +\index{patch!HTXLinkPage6xPatch2A!htxlinkpage6.ht} +\index{htxlinkpage6.ht!patch!HTXLinkPage6xPatch2A} +\index{HTXLinkPage6xPatch2A!htxlinkpage6.ht!patch} +<>= +\begin{patch}{HTXLinkPage6xPatch2A} +\begin{paste}{HTXLinkPage6xPaste2B}{HTXLinkPage6xPatch2} +\pastebutton{HTXLinkPage6xPaste2B}{Where does \HyperName{} look for files}} +\newline +\end{paste} +\end{patch} + +@ +\section{htxlinktoppage.ht} +\subsection{Actions in Hyperdoc} +\label{HTXLinkTopPage} +\begin{itemize} +\item HTXLinkPage1 \ref{HTXLinkPage1} on page~\pageref{HTXLinkPage1} +\item HTXLinkPage2 \ref{HTXLinkPage2} on page~\pageref{HTXLinkPage2} +\item HTXLinkPage3 \ref{HTXLinkPage3} on page~\pageref{HTXLinkPage3} +\item HTXLinkPage4 \ref{HTXLinkPage4} on page~\pageref{HTXLinkPage4} +\item HTXLinkPage5 \ref{HTXLinkPage5} on page~\pageref{HTXLinkPage5} +\item HTXLinkPage6 \ref{HTXLinkPage6} on page~\pageref{HTXLinkPage6} +\end{itemize} +\index{pages!HTXLinkTopPage!htxlinktoppage.ht} +\index{htxlinktoppage.ht!pages!HTXLinkTopPage} +\index{HTXLinkTopPage!htxlinktoppage.ht!pages} +<>= +\begin{page}{HTXLinkTopPage}{Actions in Hyperdoc} +\centerline{\fbox{{\tt \thispage}}}\newline +\HyperName{} offers various types of hypertext links. +You can learn about these facilities by clicking on the topics below. +\begin{scroll} +\beginmenu +\menudownlink{Linking to a named page}{HTXLinkPage1} +\menudownlink{Standard pages}{HTXLinkPage2} +\menudownlink{Active Axiom commands}{HTXLinkPage3} +\menudownlink{Linking to Lisp}{HTXLinkPage4} +\menudownlink{Linking to Unix}{HTXLinkPage5} +\menudownlink{How to use your pages with \HyperName{}}{HTXLinkPage6} +\endmenu +\end{scroll} +\end{page} + +@ +\section{htxtoppage.ht} +\subsection{Extending Hyperdoc} +\label{HTXTopPage} +\begin{itemize} +\item HTXIntroTopPage \ref{HTXIntroTopPage} on page~\pageref{HTXIntroTopPage} +\item HTXFormatTopPage \ref{HTXFormatTopPage} on +page~\pageref{HTXFormatTopPage} +\item HTXLinkTopPage \ref{HTXLinkTopPage} on page~\pageref{HTXLinkTopPage} +\item HTXAdvTopPage \ref{HTXAdvTopPage} on page~\pageref{HTXAdvTopPage} +\item HTXTryPage \ref{HTXTryPage} on page~\pageref{HTXTryPage} +\end{itemize} +\index{pages!HTXTopPage!htxtoppage.ht} +\index{htxtoppage.ht!pages!HTXTopPage} +\index{HTXTopPage!htxtoppage.ht!pages} +<>= +\begin{page}{HTXTopPage}{Extending Hyperdoc} +\centerline{\fbox{{\tt \thispage}}}\newline +This is a guide to extending \HyperName{}. You can learn +how to write your own \HyperName{} pages and link them to the +\HyperName{} page database that Axiom uses. +\begin{scroll} +\beginmenu +\menumemolink{Introduction}{HTXIntroTopPage} \tab{20} An easy start. +\menumemolink{Formatting}{HTXFormatTopPage} \tab{20} Learn how to format text. +\menumemolink{Actions}{HTXLinkTopPage} \tab{20} Learn how to define actions. +\menumemolink{Advanced features}{HTXAdvTopPage} \tab{20} More effects. +\menuwindowlink{Try it!}{HTXTryPage} \tab{20} Try out what you learn. +\endmenu +\end{scroll} +\end{page} + +@ +\section{htxtrypage.ht} +\subsection{Try out Hyperdoc} +\label{HTXTryPage} +\index{pages!HTXTryPage!htxtrypage.ht} +\index{htxtrypage.ht!pages!HTXTryPage} +\index{HTXTryPage!htxtrypage.ht!pages} +<>= +\begin{page}{HTXTryPage}{Try out Hyperdoc} +\centerline{\fbox{{\tt \thispage}}}\newline + +This page allows you to quickly experiment with \HyperName{}. +It is a good idea to keep it handy as you learn about various commands. + +\beginscroll + +We are going to use here the \HyperName{} facilities that allow +us to communicate with external programs and files. For more +information see \downlink{later on}{HTXLinkPage5}. +\beginmenu +\item\menuitemstyle{ +In order to use the buttons at the bottom of this page, you must +first specify a name for the file you are going to use to hold +\HyperName{} commands. Edit the input area below to change the +name of the file.} +\item\menuitemstyle{ +If the file you specified does not yet exist, click on the +{\bf Initialize} button below. This action will fill the file +with the minimum of \HyperName{} commands necessary to define a page.} +\item\menuitemstyle{ +If you want to edit the file, just click on the {\bf Edit} button. +This action will pop up a window, and invoke the {\it vi} +editor on the file. Alternatively, use an editor of your choice.} +\item\menuitemstyle{ +Once you have finished making the changes to the file, update it and +click on the {\bf Link} button. \HyperName{} will then read +the file, interpret it as a new page, and display the page on +this window. If you change the file and want to display it again, +just get back to this page and click on {\bf Link} again. } +\endmenu +\endscroll +\beginmenu +{\it Filename: }{\inputstring{filename}{40}{\env{HOME}/HTXplay.ht}} +\menuunixcommand{Initialize}{cp\space{1}\env{AXIOM}/doc/hypertex/pages/HTXplay.ht \stringvalue{filename}} \tab{20} Get a fresh copy from the system. +\menuunixcommand{Edit}{xterm -T "\stringvalue{filename}" -e vi \stringvalue{filename}} \tab{20} Edit the file. +\menuunixwindow{Link}{cat \space{1}\stringvalue{filename}} \tab{20} Link to the page defined in the file. +\endmenu +{\it Important : The file must contain +one and only one page definition and must not contain any macro or patch +definitions.} +\end{page} + +@ +\chapter{NAG Library Routines} \section{nagaux.ht} \subsection{NAG On-line Documentation} \label{manpageXXonline} @@ -44467,8 +82172,9 @@ D02KEF(3NAG) D02KEF D02KEF(3NAG) \endscroll \end{page} +@ \section{nage.ht} -\subsection{ Interpolation} +\subsection{Interpolation} \label{manpageXXe01} \index{pages!manpageXXe01!nage.ht} \index{nage.ht!pages!manpageXXe01} @@ -53411,8 +91117,8 @@ D02KEF(3NAG) D02KEF D02KEF(3NAG) \end{page} @ -\subsection{} -\label{manpageXXe04 Minimizing or Maximizing a Function} +\subsection{Minimizing or Maximizing a Function} +\label{manpageXXe04} \index{pages!manpageXXe04!nage.ht} \index{nage.ht!pages!manpageXXe04} \index{manpageXXe04!nage.ht!pages} @@ -61207,8 +98913,9 @@ D02KEF(3NAG) D02KEF D02KEF(3NAG) \endscroll \end{page} +@ \section{nagf.ht} -\subsection{ Linear Algebra} +\subsection{Linear Algebra} \label{manpageXXf} \index{pages!manpageXXf!nagf.ht} \index{nagf.ht!pages!manpageXXf} @@ -84492,39462 +122199,1890 @@ D02KEF(3NAG) D02KEF D02KEF(3NAG) \end{page} @ -\section{newuser.ht} -\subsection{No More Help :-(} -\label{NoMoreHelpPage} -\index{pages!NoMoreHelpPage!newuser.ht} -\index{newuser.ht!pages!NoMoreHelpPage} -\index{NoMoreHelpPage!newuser.ht!pages} -<>= -\begin{page}{NoMoreHelpPage}{No More Help :-(} -\beginscroll\vspace{2} -\centerline{No additional or specific help information is available.} -\centerline{Click on \ \ExitButton{QuitPage} \ to get back.} -\endscroll -\end{page} - -@ -\subsection{You Tried It!} -\label{YouTriedIt} -\index{pages!YouTriedIt!newuser.ht} -\index{newuser.ht!pages!YouTriedIt} -\index{YouTriedIt!newuser.ht!pages} -<>= -\begin{page}{YouTriedIt}{You Tried It!} -\beginscroll -\upbutton{Click here}{UpPage} to get back. -\endscroll -\end{page} - -% Getting Started - -%% % Now using text from book - -%% % -------------------------------------------------------------------- -%% \begin{page}{GettingStarted}{Getting Started} -%% % -------------------------------------------------------------------- -%% \beginscroll -%% \par -%% \HyperName{} is the gateway to Axiom. -%% It's both an on-line tutorial and an on-line reference. It also enables you -%% to use Axiom simply by using the mouse and filling in templates. -%% \HyperName{} is available to you if you are running Axiom under the -%% X Window System. -%% \par -%% Pages usually have active areas, marked in \downlink{this -%% font.}{YouTriedIt} -%% As you move the mouse pointer to an active area, the pointer changes from a -%% filled dot to an open circle. -%% The active areas are usually linked to other pages. -%% When you click on an active area, you move to the linked page. -%% Try clicking \downlink{here}{YouTriedIt} now. -%% \par -%% Now we suggest that you learn more about other features of -%% \HyperName{} by clicking on an active area in the menu below: -%% % -%% \beginmenu -%% \menumemolink{Headings}{ugHyperHeadingsPage}\tab{15}How to use the headings at the top of the page -%% \menulink{Scroll Bars}{ugHyperScrollPage}\tab{15}All about {\it scroll bars} on \HyperName{} pages -%% \menulink{Input Areas}{ugHyperInputPage}\tab{15}All about {\it input areas} in \HyperName{} -%% \menulink{Buttons}{ugHyperButtonsPage}\tab{15}Learn about {\it radio buttons} and {\it toggles} -%% \menulink{Search Strings}{SearchStrings}\tab{15}Learn about {\it search strings} in \HyperName{} -%% \menulink{Example Pages}{ugHyperExamplePage}\tab{15}How to view or run {\it examples} on \HyperName{} pages -%% \menulink{Settings}{ugHyperResourcesPage}\tab{15}X Window Resources for \HyperName{} -%% \endmenu -%% \endscroll -%% \end{page} - -%% % -------------------------------------------------------------------- -%% \begin{page}{ExamplesIntro}{Axiom Examples} -%% % -------------------------------------------------------------------- -%% \pp -%% \beginscroll -%% Many pages have Axiom examples. -%% Here are two: -%% \spadpaste{a:= x**2 + 1 \bound{a}} \newline -%% \spadpaste{(a - 2)**2 \free{a}} \newline -%% Each example has an active ``button'' along the left margin. -%% When you click on this button the output for the -%% command is ``pasted-in.'' -%% Try it! -%% Click again on the button and you'll see -%% that the pasted-in output disappears. Got the idea? -%% \par -%% Maybe you would like to run an example? -%% To do so, just click on any part of it! -%% When you do, the example line is copied into a new interactive Axiom -%% buffer for this \HyperName{} page. -%% \par -%% Sometimes one example line cannot be run before you run an earlier one. -%% Don't worry---this is all automatic! -%% For instance, the second example line above refers to \spad{a} which is -%% assigned in the first example line. -%% What happens if you first click on the second example line? -%% Axiom first issues the first line (to assign \spad{a}), then the -%% second (to do the computation using \spad{a}). -%% \par -%% The new interactive Axiom buffer will disappear when you leave -%% \HyperName{}. -%% If you want to get rid of it beforehand, -%% use the ``Cancel'' button of the X window manager. -%% \endscroll -%% %\autobutt{HelpHelp} -%% \end{page} - -%% % -------------------------------------------------------------------- -%% \begin{page}{RadioButtons}{Radio Buttons and Toggles} -%% % -------------------------------------------------------------------- -%% \beginscroll -%% \radioboxes{sample}{\htbmfile{pick}}{\htbmfile{unpick}} -%% \par -%% Radio buttons are a group of round buttons like those on car radios: you can -%% select only one. -%% Here are three radio buttons: -%% \centerline{ -%% {\em\radiobox[1]{rone}{sample}\space{}The first one}\space{3} -%% {\em\radiobox[0]{rtwo}{sample}\space{}The second one}\space{3} -%% {\em\radiobox[0]{rthree}{sample}\space{}The third one} -%% } -%% \newline -%% The selected button has an {\it X} in the box. -%% The others which are not selected are open, i.e. they have no {\it X}. -%% To change the selection, move the cursor with the mouse to an -%% alternate radio button and click. Try it now. -%% %\vspace{1}\centerline{To see another kind of button click on:} -%% %\centerline{\box{\downlink{Next Page}{ToggleButton}}} -%% %\endscroll -%% %\autobuttons\end{page} -%% %\begin{page}{ToggleButton}{Toggles} -%% %\beginscroll -%% \vspace{1} -%% \par -%% A toggle is a square button you can either select (it has an {\it X}) or -%% not (it has no {\it X}). -%% Unlike radio buttons, you can set a group of them any way you like. -%% Here are three: -%% \centerline{ -%% {\em\inputbox[1]{one}{\htbmfile{pick}}{\htbmfile{unpick}}\space{}The first one} -%% \space{3} -%% {\em\inputbox[0]{two}{\htbmfile{pick}}{\htbmfile{unpick}}\space{}The second one} -%% \space{3} -%% {\em\inputbox[1]{three}{\htbmfile{pick}}{\htbmfile{unpick}}\space{}The third one} -%% } -%% \newline -%% To change the selections, move the cursor with the mouse -%% to a toggle and click. -%% \endscroll -%% \autobuttons\end{page} - -%% % -------------------------------------------------------------------- -%% \begin{page}{InputAreas}{Input Areas} -%% % -------------------------------------------------------------------- -%% \beginscroll -%% \par Input areas are boxes that you can fill in. -%% Here is one: -%% \centerline{\inputstring{one}{40}{some text}} -%% \newline As you can see, the input area has some initial text {\it some text} -%% followed by an underscore (the character {\it _}). -%% First, make sure that the mouse cursor is -%% on this page. Now type some -%% characters at the keyboard. -%% The characters that you type are now inserted in front of the underscore. -%% You may type as many characters as you like. -%% The input area will grow to accomodate as many characters as you type. -%% Use the {\it Backspace} key to erase -%% characters to the left. -%% Use the keys {\it Insert}, {\it Delete}, {\it Home} and {\it End} -%% to modify what you type. -%% Also try right- and left-arrow keys immediately to the right of the -%% standard keyboard. -%% \vspace{1}\newline\centerline{\box{\downlink{Next Page}{MultipleugHyperInputPage}}} -%% \endscroll -%% \end{page} - - -%% % -------------------------------------------------------------------- -%% \begin{page}{MultipleInputAreas}{Multiple Input Areas} -%% % -------------------------------------------------------------------- -%% \beginscroll -%% Here is a large input area like the one on the last page: -%% \centerline{\inputstring{one}{40}{one}} -%% \newline -%% and here are two smaller ones: -%% \centerline{\inputstring{two}{15}{two}\space{8}\inputstring{three}{7}{three}} -%% Move your mouse cursor to somewhere within this page. -%% Note that only the first input area has an underscore cursor. -%% This means that when you type characters at your keyboard, they -%% will go into this first input area. Try it! -%% \par -%% To type information into another input area, -%% use the {\it Enter} or {\it Tab} key to move from one input area to another. -%% To move in the reverse order, use {\it Shift + Tab}. -%% \par -%% You can also move from one input area to another using your mouse. -%% Notice that each input area is active. Click on one of the areas. -%% As you can see, the underscore cursor now moves to that window. -%% \endscroll -%% \end{page} - -%% % Now using text from the book -%% -%% % -------------------------------------------------------------------- -%% \begin{page}{ScrollBars}{Using Scroll Bars} -%% % -------------------------------------------------------------------- -%% When all of the text does not fit within a window, part of the window -%% is like a ``looking glass'' you can -%% move up and down over the length of the text. -%% The text seen by the looking glass has a {\it scroll bar} -%% down its right side. -%% The {\it scroll bar} allows you to move this looking glass. -%% It also tells you the position of the looking glass -%% relative to the whole text. -%% \beginscroll -%% \par -%% The part of this \HyperName{} window beginning with this line has a -%% {\it scroll bar} along its right side. -%% Move the cursor with the mouse to the scroll bar. -%% Now move the cursor to the `down-arrow' at the -%% bottom of the scroll bar and click. See that the looking glass moves -%% down one line. Do it again and again. Each time you click, the -%% looking glass moves down one line. -%% \par -%% Now move the mouse to the 'up-arrow' at the top of the scroll -%% bar and click. The looking glass moves up one line each time you click. -%% \par -%% Next move the mouse to any position along the middle of the -%% scroll bar and click. -%% This will attempt to move the top of the looking glass to the point where you -%% click. -%% However, you cannot make the looking glass to go off the bottom edge. -%% For this example page, the looking glass region is approximately -%% half of the whole region. So the lowest point you can -%% set top of the looking glass is halfway down. -%% Get the idea? -%% \par -%% Want to use the keyboard instead of the mouse? -%% Then use the {\it Page Up} and {\it Page Down} keys on your -%% keyboard. They move the visible part of the region up and down -%% one page each time you type them. Try them! -%% \par -%% If a page does not have an input area, you can also use the {\it Home} -%% and up and down arrow keys to move the visible part of the region. -%% The {\it Home} key moves the region to the very top of the page. -%% The up and down arrow keys move the region up and down one line, -%% respectively. -%% (If a page does have an input area, these three keys operate on the -%% input area.) -%% \endscroll -%% \autobuttons\end{page} - - -%% % -------------------------------------------------------------------- -%% \begin{page}{StartingButtonHelp}{Know These Buttons} -%% % -------------------------------------------------------------------- -%% \beginscroll -%% Most pages have a standard set of buttons at the top of the page. -%% \newline -%% This is what they mean: -%% \par \ExitBitmap \space{} {\it Exit} from \HyperName{} -%% \par \HelpBitmap \space{} Get {\it Help} -%% \par \ReturnBitmap \space{} {\it Jump back} to main page -%% \par \UpBitmap \space{} {\it Go back} one page -%% \newline -%% \pp -%% The {\it Help} button shows you pages that can give you additional -%% information. You can always -%% click on {\it Help} while you're -%% exploring. -%% You can always make forays into new topics. -%% \HyperName{} remembers where you came from. -%% Don't worry about how to get back. Just click on either the ``up arrow'' -%% or the ``HOME'' button. Now click on the ``up arrow'' to go back one page. -%% \endscroll -%% \autobutt{DummyHelp}\end{page} - -%% % -------------------------------------------------------------------- -%% \begin{page}{StartingMenuHelp}{Menus} -%% % -------------------------------------------------------------------- -%% \pp -%% \beginscroll -%% A `menu' is a list of topics. Each topic has at least one active area. -%% Clicking on the active area marked {\it Menus} is how you got here. -%% \horizontalline -%% Here is another menu to practice on: -%% \newline -%% \beginmenu -%% %\menulink{Riddle}{RiddlePage} -%% % A classic riddle. -%% %\menulink{\HyperName{}}{WhatIsHyperName} -%% % What is \HyperName{} -%% \menulink{Buttons}{ButtonHelp} -%% Buttons in \HyperName{}. -%% \endmenu -%% \endscroll -%% \autobuttons\end{page} - - -@ -\section{none.ht} -<>= -\newcommand{\NoneXmpTitle}{None} -\newcommand{\NoneXmpNumber}{9.55} - -@ -\subsection{None} -\label{NoneXmpPage} -\index{pages!NoneXmpPage!none.ht} -\index{none.ht!pages!NoneXmpPage} -\index{NoneXmpPage!none.ht!pages} -<>= -\begin{page}{NoneXmpPage}{None} -\beginscroll -The \spadtype{None} domain is not very useful for interactive -work but it is provided nevertheless for completeness of the -Axiom type system. -\xtc{ -Probably the only place you will ever see it is if you enter an -empty list with no type information. -}{ -\spadpaste{[]} -} -\xtc{ -Such an empty list can be converted into an empty list -of any other type. -}{ -\spadpaste{[] :: List Float} -} -\xtc{ -If you wish to produce an empty list of a particular -type directly, such as \spadtype{List NonNegativeInteger}, do it this way. -}{ -\spadpaste{[]\$List(NonNegativeInteger)} -} -\endscroll -\autobuttons -\end{page} - -@ -\section{numbers.ht} -\subsection{Axiom Number Types} -\label{NumberPage} -\begin{itemize} -\item IntegerPage \ref{IntegerPage} on -page~\pageref{IntegerPage} -\item FractionPage \ref{FractionPage} on -page~\pageref{FractionPage} -\item DoubleFloatXmpPage \ref{DoubleFloatXmpPage} on -page~\pageref{DoubleFloatXmpPage} -\item FloatXmpPage \ref{FloatXmpPage} on -page~\pageref{FloatXmpPage} -\item ComplexXmpPage \ref{ComplexXmpPage} on -page~\pageref{ComplexXmpPage} -\item ugProblemFinitePage \ref{ugProblemFinitePage} on -page~\pageref{ugProblemFinitePage} -\item ugProblemNumericPage \ref{ugProblemNumericPage} on -page~\pageref{ugProblemNumericPage} -\item CardinalNumberXmpPage \ref{CardinalNumberXmpPage} on -page~\pageref{CardinalNumberXmpPage} -\item SingleIntegerXmpPage \ref{SingleIntegerXmpPage} on -page~\pageref{SingleIntegerXmpPage} -\item RomanNumeralXmpPage \ref{RomanNumeralXmpPage} on -page~\pageref{RomanNumeralXmpPage} -\item ContinuedFractionXmpPage \ref{ContinuedFractionXmpPage} on -page~\pageref{ContinuedFractionXmpPage} -\item PartialFractionXmpPage \ref{PartialFractionXmpPage} on -page~\pageref{PartialFractionXmpPage} -\item QuaternionXmpPage \ref{QuaternionXmpPage} on -page~\pageref{QuaternionXmpPage} -\item OctonionXmpPage \ref{OctonionXmpPage} on -page~\pageref{OctonionXmpPage} -\item DecimalExpansionXmpPage \ref{DecimalExpansionXmpPage} on -page~\pageref{DecimalExpansionXmpPage} -\item BinaryExpansionXmpPage \ref{BinaryExpansionXmpPage} on -page~\pageref{BinaryExpansionXmpPage} -\item HexadecimalExpansionXmpPage \ref{HexadecimalExpansionXmpPage} on -page~\pageref{HexadecimalExpansionXmpPage} -\item RadixExpansionXmpPage \ref{RadixExpansionXmpPage} on -page~\pageref{RadixExpansionXmpPage} -\item PAdicPage \ref{PAdicPage} on -page~\pageref{PAdicPage} -\end{itemize} -\index{pages!NumberPage!numbers.ht} -\index{numbers.ht!pages!NumberPage} -\index{NumberPage!numbers.ht!pages} -<>= -\begin{page}{NumberPage}{Axiom Number Types} -\beginscroll -The following types of numbers are among those available in Axiom. -\beginmenu - -\menulink{Integers}{IntegerPage}\tab{16} -Arithmetic with arbitrarily large integers. - -\menulink{Fractions}{FractionPage} \tab{16} -Rational numbers and general fractions. - -\menulink{Machine Floats}{DoubleFloatXmpPage} \tab{16} -Fixed precision machine floating-point. - -\menulink{Real Numbers}{FloatXmpPage} \tab{16} -Arbitrary precision decimal arithmetic. - -\menulink{Complex Numbers}{ComplexXmpPage} \tab{16} -Complex numbers in general. - -\menulink{Finite Fields}{ugProblemFinitePage} \tab{16} -Arithmetic in characteristic \spad{p}. -\endmenu -\horizontalline\newline -Additional Topics -\beginmenu - -\menulink{Numeric Functions}{ugProblemNumericPage} -\menulink{Cardinal Numbers}{CardinalNumberXmpPage} -\menulink{Machine-sized Integers}{SingleIntegerXmpPage} -\menulink{Roman Numerals}{RomanNumeralXmpPage} -\menulink{Continued Fractions}{ContinuedFractionXmpPage} -\menulink{Partial Fractions}{PartialFractionXmpPage} -\menulink{Quaternions}{QuaternionXmpPage} -\menulink{Octonions}{OctonionXmpPage} -\menulink{Repeating Decimals}{DecimalExpansionXmpPage} -\menulink{Repeating Binary Expansions}{BinaryExpansionXmpPage} -\menulink{Repeating Hexadecimal Expansions}{HexadecimalExpansionXmpPage} -\menulink{Expansions in other Bases}{RadixExpansionXmpPage} - -%\menulink{p-adic Numbers}{PAdicPage} -%\menulink{Algebraic Numbers}{AlgebraicNumberPage} -\endmenu - -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Fraction} -\label{FractionPage} -\begin{itemize} -\item RationalNumberPage \ref{RationalNumberPage} on -page~pageref{RationalNumberPage} -\item FractionXmpPage \ref{FractionXmpPage} on -page~pageref{FractionXmpPage} -\end{itemize} -\index{pages!FractionPage!numbers.ht} -\index{numbers.ht!pages!FractionPage} -\index{FractionPage!numbers.ht!pages} -<>= -\begin{page}{FractionPage}{Fractions} - -\beginscroll -Axiom handles fractions in many different contexts -and will automatically simplify fractions whenever possible. -Here are some examples: -\spadpaste{1/4 - 1/5} -\spadpaste{f := (x**2 + 1)/(x - 1) \bound{f}} -\spadpaste{g := (x**2 - 3*x + 2)/(x + 2) \bound{g}} -\spadpaste{f * g \free{f g}} -\endscroll -Additional Topics: -\beginmenu - -\menulink{Rational Numbers}{RationalNumberPage} \tab{18} -Quotients of integers - -\menulink{Quotient Fields}{FractionXmpPage} \tab{18} -Quotients over an arbitrary integral domain - -%\menulink{Localizations}{LocalizationPage} \tab{18} -%Fractions in the most general setting -\endmenu -\autobuttons -\end{page} - -@ -\subsection{Rational Number} -\label{RationalNumberPage} -\index{pages!RationalNumberPage!numbers.ht} -\index{numbers.ht!pages!RationalNumberPage} -\index{RationalNumberPage!numbers.ht!pages} -<>= -\begin{page}{RationalNumberPage}{Rational Numbers} -\beginscroll -Like integers, rational numbers can be arbitrarily large. -For example: -\spadpaste{61657 ** 10 / 999983 ** 12} -Rational numbers will not be converted to decimals unless you explicitly -ask Axiom to do so. -To convert a rational number to a decimal, use the function -\spadfun{numeric}. -Here's an example: -\spadpaste{x := 104348/33215 \bound{x}} -\spadpaste{numeric x \free{x}} -You can find the numerator and denominator of rational numbers using -the functions \spadfun{numer} and \spadfun{denom}, respectively. -\spadpaste{numer(x) \free{x}} -\spadpaste{denom(x) \free{x}} -To factor the numerator and denominator of a fraction, use the following -command: -\spadpaste{factor(numer x) / factor(denom x) \free{x}} -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Integers} -\label{IntegerPage} -\begin{itemize} -\item IntegerXmpPage \ref{IntegerXmpPage} on -page~pageref{IntegerXmpPage} -\item ugxIntegerPrimesPage \ref{ugxIntegerPrimesPage} on -page~pageref{ugxIntegerPrimesPage} -\item IntegerNumberTheoryFunctionsXmpPage -\ref{IntegerNumberTheoryFunctionsXmpPage} on -page~pageref{IntegerNumberTheoryFunctionsXmpPage} -\item IntegerExamplePage \ref{IntegerExamplePage} on -page~pageref{IntegerExamplePage} -\item IntegerProblemPage \ref{IntegerProblemPage} on -page~pageref{IntegerProblemPage} -\end{itemize} -\index{pages!IntegerPage!numbers.ht} -\index{numbers.ht!pages!IntegerPage} -\index{IntegerPage!numbers.ht!pages} -<>= -\begin{page}{IntegerPage}{Integers} -\beginscroll -In Axiom, integers can be as large as you like. -Try the following examples: -\spadpaste{x := factorial(200) \bound{x}} -\spadpaste{y := 2**90 - 1 \bound{y}} -Of course, you can now do arithmetic as usual on these (very) -large integers: -\spadpaste{x + y \free{x y}} -\spadpaste{x - y \free{x y}} -\spadpaste{x * y \free{x y}} -Axiom can factor integers, but numbers with small prime factors -\spadpaste{factor(x) \free{x}} -will factor more rapidly than numbers with large prime factors. -\spadpaste{factor(y) \free{y}} -\horizontalline -Additional Topics -\beginmenu - -\menulink{General Info}{IntegerXmpPage} \tab{16} -General information and examples of integers. - -\menulink{Factorization}{ugxIntegerPrimesPage} \tab{16} -Primes and factorization. - -\menulink{Functions}{IntegerNumberTheoryFunctionsXmpPage} \tab{16} -Number theoretic functions. - -\menulink{Examples}{IntegerExamplePage} \tab{16} -Examples from number theory. - -\menulink{Problems}{IntegerProblemPage} \tab{16} -Problems from number theory. - -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Integer Examples} -\label{IntegerExamplePage} -\begin{itemize} -\item IntegerExampleProofPage \ref{IntegerExampleProofPage} on -page~pageref{IntegerExampleProofPage} -\end{itemize} -\index{pages!IntegerExamplePage!numbers.ht} -\index{numbers.ht!pages!IntegerExamplePage} -\index{IntegerExamplePage!numbers.ht!pages} -<>= -\begin{page}{IntegerExamplePage}{Integer Examples} -\beginscroll -One can show that if an integer of the form 2**k + 1 is prime, then -k must be a power of 2. -\downlink{Proof}{IntegerExampleProofPage} -\par -Pierre Fermat conjectured that every integer of the forn 2**(2**n) + 1 -is prime. -Let's look for a counterexample. -First define a function: -\spadpaste{f: NNI -> INT \bound{f1}} -\spadpaste{f(n) == 2**(2**n) + 1 \bound{f} \free{f1}} -Now try commands like: -\spadpaste{factor f(1) \free{f}} -\spadpaste{factor f(2) \free{f}} -until you find an integer of this form which is composite. -You can also try the following command: -\spadpaste{for n in 1..6 repeat output factor f(n) \free{f}} -Obviously, Fermat didn't have access to Axiom! -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Integer Example Proof} -\label{IntegerExampleProofPage} -\index{pages!IntegerExampleProofPage!numbers.ht} -\index{numbers.ht!pages!IntegerExampleProofPage} -\index{IntegerExampleProofPage!numbers.ht!pages} -<>= -\begin{page}{IntegerExampleProofPage}{Integer Example Proof} -\beginscroll -Proposition. If 2**k + 1 is prime, then k is a power of 2. -\newline -Proof. Suppose that k = m * n with m > 1 odd. Then -% -\centerline{2**n = -1 (mod (2**n + 1))} -\centerline{2**(n * m) = (-1)**m = -1 (mod (2**n + 1))} -\centerline{2**k + 1 = 0 (mod (2**n + 1))} -% -Therefore, 2**k + 1 is divisible by 2**n + 1. -Now 1 < 2**n + 1 and since m > 1, 2**n + 1 < 2**k + 1. -Hence, 2**k + 1 has a non-trivial factor. -\newline -QED -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Integer Problems} -\label{IntegerProblemPage} -\begin{itemize} -\item IntegerProblemProofPage \ref{IntegerProblemProofPage} on -page~pageref{IntegerProblemProofPage} -\item IntegerProblemAnswerPage1 \ref{IntegerProblemAnswerPage1} on -page~pageref{IntegerProblemAnswerPage1} -\item IntegerProblemAnswerPage2 \ref{IntegerProblemAnswerPage2} on -page~pageref{IntegerProblemAnswerPage2} -\end{itemize} -\index{pages!IntegerProblemPage!numbers.ht} -\index{numbers.ht!pages!IntegerProblemPage} -\index{IntegerProblemPage!numbers.ht!pages} -<>= -\begin{page}{IntegerProblemPage}{Integer Problems} -\beginscroll -One can show that if an integer of the form 2**k - 1 is prime, then -k must be prime. -\downlink{Proof}{IntegerProblemProofPage} -\newline -Problem \#1: Find the smallest prime p such that \spad{2**p - 1} is not prime. -\downlink{Answer}{IntegerProblemAnswerPage1} -\newline -Problem \#2: Find the smallest positive integer \spad{n} such that -\spad{n**2 - n + 41} isn't prime. -\downlink{Answer}{IntegerProblemAnswerPage2} -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Integer Problem Proof} -\label{IntegerProblemProofPage} -\index{pages!IntegerProblemProofPage!numbers.ht} -\index{numbers.ht!pages!IntegerProblemProofPage} -\index{IntegerProblemProofPage!numbers.ht!pages} -<>= -\begin{page}{IntegerProblemProofPage}{Integer Problem Proof} -\beginscroll -Proposition. If \spad{2**k - 1} is prime, then \spad{k} is prime. -\newline -Proof. Suppose that k = m * n is a non-trivial factorization. -Then -% -\centerline{2**m = 1 (mod (2**m - 1))} -\centerline{2**(m * n) = 1 (mod (2**m - 1))} -\newline -and 2**m - 1 is a non-trivial factor of 2**k - 1. -\newline -QED -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Solution to Problem \#1} -\label{IntegerProblemAnswerPage1} -\index{pages!IntegerProblemAnswerPage1!numbers.ht} -\index{numbers.ht!pages!IntegerProblemAnswerPage1} -\index{IntegerProblemAnswerPage1!numbers.ht!pages} -<>= -\begin{page}{IntegerProblemAnswerPage1}{Solution to Problem \#1} -\beginscroll -Problem \#1: Find the smallest prime p such that \spad{2**p - 1} -is not prime. -\newline -First, define a function: -\spadpaste{f: NNI -> INT \bound{f1}} -\spadpaste{f(n) == 2**n - 1 \bound{f} \free{f1}} -You can try factoring f(p) as p ranges through the set of primes. -For example, -\spadpaste{factor f(7) \free{f}} -This gets tedious after a while, so let's use Axiom's stream -facility. (A stream is essentially an infinite sequence.) -\newline -First, we create a stream consisting of the positive integers: -\spadpaste{ints := [n for n in 1..] \bound{ints}} -Now, we create a stream consisting of the primes: -\spadpaste{primes := [x for x in ints | prime? x] \bound{primes} \free{ints}} -Here's the 25th prime: -\spadpaste{primes.25 \free{primes}} -Next, create the stream of numbers of the form 2**p - 1 with p prime: -\spadpaste{numbers := [f(n) for n in primes] \bound{numbers} \free{primes f}} -Finally, form -the stream of factorizations of the elements of \spad{numbers}: -\spadpaste{factors := [factor n for n in numbers] \bound{factors} -\free{numbers}} -You can see that the fifth number in the stream (2047 = 23*89) -is the first one that has a non-trivial factorization. -Since 2**11 = 2048, the solution to the problem is 11. -\newline -Here's another way to see that 2047 is the first number in the stream that -is composite: -\spadpaste{nums := [x for x in numbers | not prime? x] \bound{nums} -\free{numbers}} -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Solution to Problem \#2} -\label{IntegerProblemAnswerPage2} -\index{pages!IntegerProblemAnswerPage2!numbers.ht} -\index{numbers.ht!pages!IntegerProblemAnswerPage2} -\index{IntegerProblemAnswerPage2!numbers.ht!pages} -<>= -\begin{page}{IntegerProblemAnswerPage2}{Solution to Problem \#2} -\beginscroll -Problem \#2: Find the smallest positive integer n such that -\spad{n**2 - n + 41} is not prime. -\newline -When n = 41, n**2 - n + 41 = 41**2, which certainly isn't prime. -Let's see if any smaller integer works. -Here are the first 40 values: -\spadpaste{numbers := [n**2 - n + 41 for n in 0..40] \bound{numbers}} -Now have Axiom factor the numbers on this list: -\spadpaste{[factor n for n in numbers] \free{numbers}} -You can see that 41 is the smallest positive integer n such that -n**n - n + 41 is not prime. -\endscroll -\autobuttons -\end{page} - -@ -\section{oct.ht} -<>= -\newcommand{\OctonionXmpTitle}{Octonion} -\newcommand{\OctonionXmpNumber}{9.56} - -@ -\subsection{Octonion} -\label{OctonionXmpPage} -See QuaternionXmpPage \ref{QuaternionXmpPage} on -page~\pageref{QuaternionXmpPage} -\index{pages!OctonionXmpPage!oct.ht} -\index{oct.ht!pages!OctonionXmpPage} -\index{OctonionXmpPage!oct.ht!pages} -<>= -\begin{page}{OctonionXmpPage}{Octonion} -\beginscroll - -The Octonions, also called the Cayley-Dixon algebra, defined over a -commutative ring are an eight-dimensional non-associative algebra. -Their construction from quaternions is similar to the construction -of quaternions from complex numbers -(see \downlink{`Quaternion'}{QuaternionXmpPage}\ignore{Quaternion}). -% -\xtc{ -As \spadtype{Octonion} creates an eight-dimensional algebra, you have to -give eight components to construct an octonion. -}{ -\spadpaste{oci1 := octon(1,2,3,4,5,6,7,8) \bound{oci1}} -} -\xtc{ -}{ -\spadpaste{oci2 := octon(7,2,3,-4,5,6,-7,0) \bound{oci2}} -} -% -% -\xtc{ -Or you can use two quaternions to create an octonion. -}{ -\spadpaste{oci3 := octon(quatern(-7,-12,3,-10), quatern(5,6,9,0)) \bound{oci3}} -} -% -% -\xtc{ -You can easily demonstrate the non-associativity of multiplication. -}{ -\spadpaste{(oci1 * oci2) * oci3 - oci1 * (oci2 * oci3) \free{oci1 oci2 oci3}} -} -% -As with the quaternions, we have a real part, the imaginary -parts \spad{i}, \spad{j}, \spad{k}, and four -additional imaginary parts \spad{E}, \spad{I}, \spad{J} and \spad{K}. -These parts correspond to the canonical basis -\spad{(1,i,j,k,E,I,J,K)}. -\xtc{ -For each basis element there is a component operation to extract -the coefficient of the basis element for a given octonion. -%\spadfunFrom{real}{Octonion}, -%\spadfunFrom{imagi}{Octonion}, -%\spadfunFrom{imagj}{Octonion}, -%\spadfunFrom{imagk}{Octonion}, -%\spadfunFrom{imagE}{Octonion}, -%\spadfunFrom{imagI}{Octonion}, -%\spadfunFrom{imagJ}{Octonion}, and -%\spadfunFrom{imagK}{Octonion}. -}{ -\spadpaste{[real oci1, imagi oci1, imagj oci1, imagk oci1, imagE oci1, imagI oci1, imagJ oci1, imagK oci1] \free{oci1}} -} -% -A basis with respect to the -quaternions is given by \spad{(1,E)}. -However, you might ask, what then are the commuting rules? -To answer this, we create some generic elements. -% -\xtc{ -We do this in Axiom -by simply changing the ground ring from \spadtype{Integer} to -\spadtype{Polynomial Integer}. -}{ -\spadpaste{q : Quaternion Polynomial Integer := quatern(q1, qi, qj, qk) \bound{q}} -} -\xtc{ -}{ -\spadpaste{E : Octonion Polynomial Integer:= octon(0,0,0,0,1,0,0,0) \bound{E}} -} -% -\xtc{ -Note that quaternions are automatically converted to octonions in the -obvious way. -}{ -\spadpaste{q * E \free{q E}} -} -\xtc{ -}{ -\spadpaste{E * q \free{E q}} -} -\xtc{ -}{ -\spadpaste{q * 1\$(Octonion Polynomial Integer) \free{q}} -} -\xtc{ -}{ -\spadpaste{1\$(Octonion Polynomial Integer) * q \free{q}} -} -\xtc{ -Finally, we check that the \spadfunFrom{norm}{Octonion}, -defined as the sum of the squares of the coefficients, -is a multiplicative map. -}{ -\spadpaste{o : Octonion Polynomial Integer := octon(o1, oi, oj, ok, oE, oI, oJ, oK) \bound{o}} -} -\xtc{ -}{ -\spadpaste{norm o \free{o}} -} -\xtc{ -}{ -\spadpaste{p : Octonion Polynomial Integer := octon(p1, pi, pj, pk, pE, pI, pJ, pK) \bound{p}} -} -\xtc{ -Since the result is \spad{0}, the norm is multiplicative. -}{ -\spadpaste{norm(o*p)-norm(p)*norm(p)\free{o p} } -} -\showBlurb{Octonion} -\endscroll -\autobuttons -\end{page} - -@ -\section{odpol.ht} -<>= -\newcommand{\OrderlyDifferentialPolynomialXmpTitle} -{OrderlyDifferentialPolynomial} -\newcommand{\OrderlyDifferentialPolynomialXmpNumber}{9.60} - -@ -\subsection{OrderlyDifferentialPolynomial} -\label{OrderlyDifferentialPolynomialXmpPage} -\index{pages!OrderlyDifferentialPolynomialXmpPage!odpol.ht} -\index{odpol.ht!pages!OrderlyDifferentialPolynomialXmpPage} -\index{OrderlyDifferentialPolynomialXmpPage!odpol.ht!pages} -<>= -\begin{page}{OrderlyDifferentialPolynomialXmpPage} -{OrderlyDifferentialPolynomial} -\beginscroll - -Many systems of differential equations may be transformed to equivalent -systems of ordinary differential equations where the equations are -expressed polynomially in terms of the unknown functions. -In Axiom, the domain constructors -\spadtype{OrderlyDifferentialPolynomial} -(abbreviated \spadtype{ODPOL}) and -\spadtype{SequentialDifferentialPolynomial} (abbreviation -\spadtype{SDPOL}) implement two domains of ordinary differential -polynomials over any differential ring. -In the simplest case, this differential ring is usually either the ring of -integers, or the field of rational numbers. -However, Axiom can handle ordinary differential polynomials over a -field of rational functions in a single indeterminate. - -The two domains \spadtype{ODPOL} and \spadtype{SDPOL} are almost -identical, the only difference being the choice of a different ranking, -which is an ordering of the derivatives of the indeterminates. -The first domain uses an orderly ranking, that is, derivatives of higher -order are ranked higher, and derivatives of the same order are ranked -alphabetically. -The second domain uses a sequential ranking, where derivatives are ordered -first alphabetically by the differential indeterminates, and then by -order. -A more general domain constructor, -\spadtype{DifferentialSparseMultivariatePolynomial} (abbreviation -\spadtype{DSMP}) allows both a user-provided list of differential -indeterminates as well as a user-defined ranking. -We shall illustrate \spadtype{ODPOL(FRAC INT)}, which constructs a domain -of ordinary differential polynomials in an arbitrary number of -differential indeterminates with rational numbers as coefficients. -\xtc{ -}{ -\spadpaste{dpol:= ODPOL(FRAC INT) \bound{dpol}} -} - -\xtc{ -A differential indeterminate \spad{w} may be viewed as an infinite -sequence of algebraic indeterminates, which are the derivatives of -\spad{w}. -To facilitate referencing these, Axiom provides the operation -\spadfunFrom{makeVariable}{OrderlyDifferentialPolynomial} to convert an -element of type \spadtype{Symbol} to a map from the natural numbers to the -differential polynomial ring. -}{ -\spadpaste{w := makeVariable('w)\$dpol \free{dpol}\bound{w}} -} -\xtc{ -}{ -\spadpaste{z := makeVariable('z)\$dpol \free{dpol}\bound{z}} -} -\xtc{ -The fifth derivative of \spad{w} can be obtained by applying the map -\spad{w} to the number \spad{5.} -Note that the order of differentiation is given as a subscript (except -when the order is 0). -}{ -\spadpaste{w.5 \free{w}} -} -\xtc{ -}{ -\spadpaste{w 0 \free{w}} -} -\xtc{ -The first five derivatives of \spad{z} can be generated by a list. -}{ -\spadpaste{[z.i for i in 1..5] \free{z}} -} -\xtc{ -The usual arithmetic can be used to form a differential polynomial from -the derivatives. -}{ -\spadpaste{f:= w.4 - w.1 * w.1 * z.3 \free{w}\free{z}\bound{f}} -} -\xtc{ -}{ -\spadpaste{g:=(z.1)**3 * (z.2)**2 - w.2 \free{z}\free{w}\bound{g}} -} -\xtc{ -The operation \spadfunFrom{D}{OrderlyDifferentialPolynomial} -computes the derivative of any differential polynomial. -}{ -\spadpaste{D(f) \free{f}} -} -\xtc{ -The same operation can compute higher derivatives, like the -fourth derivative. -}{ -\spadpaste{D(f,4) \free{f}} -} -\xtc{ -The operation \spadfunFrom{makeVariable}{OrderlyDifferentialPolynomial} -creates a map to facilitate referencing the derivatives of \spad{f}, -similar to the map \spad{w}. -}{ -\spadpaste{df:=makeVariable(f)\$dpol \free{f}\bound{df}} -} -\xtc{ -The fourth derivative of f may be referenced easily. -}{ -\spadpaste{df.4 \free{df}} -} -\xtc{ -The operation \spadfunFrom{order}{OrderlyDifferentialPolynomial} -returns the order of a differential polynomial, or the order -in a specified differential indeterminate. -}{ -\spadpaste{order(g) \free{g}} -} -\xtc{ -}{ -\spadpaste{order(g, 'w) \free{g}} -} -\xtc{ -The operation -\spadfunFrom{differentialVariables}{OrderlyDifferentialPolynomial} returns -a list of differential indeterminates occurring in a differential -polynomial. -}{ -\spadpaste{differentialVariables(g) \free{g}} -} -\xtc{ -The operation \spadfunFrom{degree}{OrderlyDifferentialPolynomial} returns -the degree, or the degree in the differential indeterminate specified. -}{ -\spadpaste{degree(g) \free{g}} -} -\xtc{ -}{ -\spadpaste{degree(g, 'w) \free{g}} -} -\xtc{ -The operation \spadfunFrom{weights}{OrderlyDifferentialPolynomial} returns -a list of weights of differential monomials appearing in differential -polynomial, or a list of weights in a specified differential -indeterminate. -}{ -\spadpaste{weights(g) \free{g}} -} -\xtc{ -}{ -\spadpaste{weights(g,'w) \free{g}} -} -\xtc{ -The operation \spadfunFrom{weight}{OrderlyDifferentialPolynomial} returns -the maximum weight of all differential monomials appearing in the -differential polynomial. -}{ -\spadpaste{weight(g) \free{g}} -} -\xtc{ -A differential polynomial is {\em isobaric} if the weights of all -differential monomials appearing in it are equal. -}{ -\spadpaste{isobaric?(g) \free{g}} -} -\xtc{ -To substitute {\em differentially}, use -\spadfunFrom{eval}{OrderlyDifferentialPolynomial}. -Note that we must coerce \spad{'w} to \spadtype{Symbol}, since in -\spadtype{ODPOL}, differential indeterminates belong to the domain -\spadtype{Symbol}. -Compare this result to the next, which substitutes {\em algebraically} (no -substitution is done since \spad{w.0} does not appear in \spad{g}). -}{ -\spadpaste{eval(g,['w::Symbol],[f]) \free{f}\free{g}} -} -\xtc{ -}{ -\spadpaste{eval(g,variables(w.0),[f]) \free{f}\free{g}} -} -\xtc{ -Since \spadtype{OrderlyDifferentialPolynomial} belongs to -\spadtype{PolynomialCategory}, all the operations defined in the latter -category, or in packages for the latter category, are available. -}{ -\spadpaste{monomials(g) \free{g}} -} -\xtc{ -}{ -\spadpaste{variables(g) \free{g}} -} -\xtc{ -}{ -\spadpaste{gcd(f,g) \free{f}\free{g}} -} -\xtc{ -}{ -\spadpaste{groebner([f,g]) \free{f}\free{g}} -} -\xtc{ -The next three operations are essential for elimination procedures in -differential polynomial rings. -The operation \spadfunFrom{leader}{OrderlyDifferentialPolynomial} returns -the leader of a differential polynomial, which is the highest ranked -derivative of the differential indeterminates that occurs. -}{ -\spadpaste{lg:=leader(g) \free{g}\bound{lg}} -} -\xtc{ -The operation \spadfunFrom{separant}{OrderlyDifferentialPolynomial} returns -the separant of a differential polynomial, which is the partial derivative -with respect to the leader. -}{ -\spadpaste{sg:=separant(g) \free{g}\bound{sg}} -} -\xtc{ -The operation \spadfunFrom{initial}{OrderlyDifferentialPolynomial} returns -the initial, which is the leading coefficient when the given differential -polynomial is expressed as a polynomial in the leader. -}{ -\spadpaste{ig:=initial(g) \free{g}\bound{ig}} -} -\xtc{ -Using these three operations, it is possible to reduce \spad{f} modulo the -differential ideal generated by \spad{g}. -The general scheme is to first reduce the order, then reduce the degree in -the leader. -First, eliminate \spad{z.3} using the derivative of \spad{g}. -}{ -\spadpaste{g1 := D g \free{g}\bound{g1}} -} -\xtc{ -Find its leader. -}{ -\spadpaste{lg1:= leader g1 \free{g1}\bound{lg1}} -} -\xtc{ -Differentiate \spad{f} partially with respect to this leader. -}{ -\spadpaste{pdf:=D(f, lg1) \free{f}\free{lg1}\bound{pdf}} -} -\xtc{ -Compute the partial remainder of \spad{f} with respect to \spad{g}. -}{ -\spadpaste{prf:=sg * f- pdf * g1 \free{f}\free{sg}\free{pdf}\free{g1}\bound{prf}} -} -\xtc{ -Note that high powers of \spad{lg} still appear in \spad{prf}. -Compute the leading coefficient of \spad{prf} -as a polynomial in the leader of \spad{g}. -}{ -\spadpaste{lcf:=leadingCoefficient univariate(prf, lg) \free{prf}\free{lg}\bound{lcf}} -} -\xtc{ -Finally, continue eliminating the high powers of \spad{lg} appearing in -\spad{prf} to obtain the (pseudo) remainder of \spad{f} modulo \spad{g} -and its derivatives. -}{ -\spadpaste{ig * prf - lcf * g * lg \free{ig}\free{prf}\free{lcf}\free{g}\free{lg}} -} -\showBlurb{OrderlyDifferentialPolyomial} -\showBlurb{SequentialDifferentialPolynomial} -\endscroll -\autobuttons -\end{page} - -@ -\section{op.ht} -<>= -\newcommand{\OperatorXmpTitle}{Operator} -\newcommand{\OperatorXmpNumber}{9.58} - -@ -\subsection{Operator} -\label{OperatorXmpPage} -\index{pages!OperatorXmpPage!alist.ht} -\index{alist.ht!pages!OperatorXmpPage} -\index{OperatorXmpPage!alist.ht!pages} -<>= -\begin{page}{OperatorXmpPage}{Operator} -\beginscroll -Given any ring \spad{R}, the ring of the \spadtype{Integer}-linear operators -over \spad{R} is called \spadtype{Operator(R)}. -To create an operator over \spad{R}, first create a basic operator using the -operation \spadfun{operator}, and then convert it to \spadtype{Operator(R)} -for the \spad{R} you want. -% -\xtc{ -We choose \spad{R} to be the two by two matrices over the integers. -}{ -\spadpaste{R := SQMATRIX(2, INT)\bound{r}} -} -\xtc{ -Create the operator \spad{tilde} on \spad{R}. -}{ -\spadpaste{t := operator("tilde") :: OP(R) \free{r}\bound{t}} -} -% -Since \spadtype{Operator} is unexposed we must either package-call operations -from it, or expose it explicitly. For convenience we will do the latter. -% -\noOutputXtc{ -Expose \spad{Operator}. -}{ -\spadpaste{)set expose add constructor Operator \free{t}\bound{expose}} -} -% -To attach an evaluation function (from \spad{R} to \spad{R}) to an -operator over \spad{R}, use \spad{evaluate(op, f)} where \spad{op} -is an operator over \spad{R} and \spad{f} is a function \spad{R -> -R}. -This needs to be done only once when the operator is defined. -Note that \spad{f} must be \spadtype{Integer}-linear (that is, -\spad{f(ax+y) = a f(x) + f(y)} for any integer \spad{a}, and any -\spad{x} and \spad{y} in \spad{R}). -% -\xtc{ -We now attach the transpose map to the above operator \spad{t}. -}{ -\spadpaste{evaluate(t, m +-> transpose m)\free{expose}\free{t}\bound{evt}} -} -% -Operators can be manipulated formally as in any ring: \spadop{+} is the -pointwise addition and \spadop{*} is composition. -Any element \spad{x} of \spad{R} can be converted to an operator -\subscriptText{\tt op}{\tt x} -over \spad{R}, and the evaluation function of -\subscriptText{\tt op}{\tt x} -is left-multiplication by \spad{x}. -% -\xtc{ -Multiplying on the -left by this matrix swaps the two rows. -}{ -\spadpaste{s : R := matrix [[0, 1], [1, 0]]\bound{s}} -} -% -\xtc{ -Can you guess what is the action of the following operator? -}{ -\spadpaste{rho := t * s\free{evt s}\bound{rho}} -} -% -% -\xtc{ -Hint: applying \spad{rho} four times gives the identity, so -\spad{rho**4-1} should return 0 when applied to any two by two matrix. -}{ -\spadpaste{z := rho**4 - 1\free{rho}\bound{z}} -} -% -% -\xtc{ -Now check with this matrix. -}{ -\spadpaste{m:R := matrix [[1, 2], [3, 4]]\bound{m}} -} -\xtc{ -}{ -\spadpaste{z m\free{z m}} -} -% -% -\xtc{ -As you have probably guessed by now, \spad{rho} acts on matrices -by rotating the elements clockwise. -}{ -\spadpaste{rho m\free{rho m}} -} -\xtc{ -}{ -\spadpaste{rho rho m\free{rho m}} -} -\xtc{ -}{ -\spadpaste{(rho**3) m\free{rho m}} -} -% -% -\xtc{ -Do the swapping of rows and transposition commute? -We can check by computing their bracket. -}{ -\spadpaste{b := t * s - s * t\free{s evt}\bound{b}} -} -% -% -\xtc{ -Now apply it to \spad{m}. -}{ -\spadpaste{b m \free{b m}} -} -% - -Next we demonstrate how to define a differential operator -on a polynomial ring. -\xtc{ -This is the recursive definition of the \spad{n}-th Legendre polynomial. -}{ -\begin{spadsrc}[\bound{l}] -L n == - n = 0 => 1 - n = 1 => x - (2*n-1)/n * x * L(n-1) - (n-1)/n * L(n-2) -\end{spadsrc} -} -\xtc{ -Create the differential operator \texht{$d \over {dx}$}{\spad{d/dx}} on -polynomials in \spad{x} over the rational numbers. -}{ -\spadpaste{dx := operator("D") :: OP(POLY FRAC INT) \bound{dx}} -} -\xtc{ -Now attach the map to it. -}{ -\spadpaste{evaluate(dx, p +-> D(p, 'x)) \free{dx}\bound{edx}} -} -\xtc{ -This is the differential equation satisfied by the \spad{n}-th -Legendre polynomial. -}{ -\spadpaste{E n == (1 - x**2) * dx**2 - 2 * x * dx + n*(n+1) \free{edx}\bound{E}} -} -\xtc{ -Now we verify this for \spad{n = 15}. -Here is the polynomial. -}{ -\spadpaste{L 15 \free{L}} -} -\xtc{ -Here is the operator. -}{ -\spadpaste{E 15 \free{E}} -} -\xtc{ -Here is the evaluation. -}{ -\spadpaste{(E 15)(L 15) \free{L E}} -} -\endscroll -\autobuttons -\end{page} - -@ -\section{ovar.ht} -<>= -\newcommand{\OrderedVariableListXmpTitle}{OrderedVariableList} -\newcommand{\OrderedVariableListXmpNumber}{9.59} - -@ -\subsection{OrderedVariableList} -\label{OrderedVariableListXmpPage} -\index{pages!OrderedVariableListXmpPage!ovar.ht} -\index{ovar.ht!pages!OrderedVariableListXmpPage} -\index{OrderedVariableListXmpPage!ovar.ht!pages} -<>= -\begin{page}{OrderedVariableListXmpPage}{OrderedVariableList} -\beginscroll - -The domain \spadtype{OrderedVariableList} provides symbols -which are restricted to a particular list and have a definite -ordering. Those two features are specified by a \spadtype{List Symbol} -object that is the argument to the domain. -\xtc{ -This is a sample ordering of three symbols. -}{ -\spadpaste{ls:List Symbol:=['x,'a,'z] \bound{ls}} -} -\xtc{ -Let's build the domain -}{ -\spadpaste{Z:=OVAR ls \bound{Z} \free{ls}} -} -\xtc{ -How many variables does it have? -}{ -\spadpaste{size()$Z \free{Z}} -} -\xtc{ -They are (in the imposed order) -}{ -\spadpaste{lv:=[index(i::PI)$Z for i in 1..size()$Z] \bound{lv}\free{Z}} -} -\xtc{ -Check that the ordering is right -}{ -\spadpaste{sorted?(>,lv) \free{lv}} -} -\endscroll -\autobuttons -\end{page} - -@ -\section{perman.ht} -<>= -\newcommand{\PermanentXmpTitle}{Permanent} -\newcommand{\PermanentXmpNumber}{9.62} - -@ -\subsection{Permanent} -\label{PermanentXmpPage} -\index{pages!PermanentXmpPage!perman.ht} -\index{perman.ht!pages!PermanentXmpPage} -\index{PermanentXmpPage!perman.ht!pages} -<>= -\begin{page}{PermanentXmpPage}{Permanent} -\beginscroll -The package \spadtype{Permanent} provides the function -\spadfunFrom{permanent}{Permanent} for square matrices. -The \spadfunFrom{permanent}{Permanent} of a square matrix can be computed -in the same way as the determinant by expansion of minors except that for -the permanent the sign for each element is \spad{1}, rather than being -\spad{1} if the row plus column indices is positive and \spad{-1} -otherwise. -This function is much more difficult to compute efficiently than the -\spadfunFrom{determinant}{Matrix}. -An example of the use of \spadfunFrom{permanent}{Permanent} is the -calculation of the \eth{\spad{n}} derangement number, defined to be the number -of different possibilities for \spad{n} couples to dance but never with -their own spouse. -\xtc{ -Consider an \spad{n} by \spad{n} matrix with entries -\spad{0} on the diagonal and -\spad{1} elsewhere. -Think of the rows as one-half of each couple (for example, the males) and the -columns the other half. -The permanent of such a matrix gives the desired derangement number. -}{ -\begin{spadsrc}[\bound{kn}] -kn n == - r : MATRIX INT := new(n,n,1) - for i in 1..n repeat - r.i.i := 0 - r -\end{spadsrc} -} -\xtc{ -Here are some derangement numbers, which you see grow quite fast. -}{ -\spadpaste{permanent(kn(5) :: SQMATRIX(5,INT)) \free{kn}} -} -\xtc{ -}{ -\spadpaste{[permanent(kn(n) :: SQMATRIX(n,INT)) for n in 1..13] \free{kn}} -} -\endscroll -\autobuttons -\end{page} - -@ -\section{pfr.ht} -<>= -\newcommand{\PartialFractionXmpTitle}{PartialFraction} -\newcommand{\PartialFractionXmpNumber}{9.61} - -@ -\subsection{PartialFraction} -\label{PartialFractionXmpPage} -See FullPartialFractionExpansionXmpPage -\ref{FullPartialFractionExpansionXmpPage} on -page~\pageref{FullPartialFractionExpansionXmpPage} -\index{pages!PartialFractionXmpPage!pfr.ht} -\index{pfr.ht!pages!PartialFractionXmpPage} -\index{PartialFractionXmpPage!pfr.ht!pages} -<>= -\begin{page}{PartialFractionXmpPage}{PartialFraction} -\beginscroll - -A {\it partial fraction} is a decomposition of a quotient into -a sum -of quotients where the denominators of the summands are powers of -primes.\footnote{Most people first encounter partial fractions when they -are learning integral calculus. -For a technical discussion of partial fractions, see, for example, Lang's {\it -Algebra.}} For example, the rational number \spad{1/6} is decomposed into -\spad{1/2 -1/3}. -You can compute partial fractions of quotients of objects from domains -belonging to the category \spadtype{EuclideanDomain}. -For example, \spadtype{Integer}, \spadtype{Complex Integer}, and -\spadtype{UnivariatePolynomial(x, Fraction Integer)} all belong to -\spadtype{EuclideanDomain}. -In the examples following, we demonstrate how to decompose quotients of -each of these kinds of object into partial fractions. -Issue the system command -\spadcmd{)show PartialFraction} -to display the full list of operations defined by \spadtype{PartialFraction}. - -It is necessary that we know how to factor the denominator when we want to -compute a partial fraction. -Although the interpreter can often do this automatically, it may be -necessary for you to include a call to \spadfun{factor}. -In these examples, it is not necessary to factor the -denominators explicitly. -% -\xtc{ -The main operation for computing partial fractions is called -\spadfunFrom{partialFraction}{PartialFraction} and we use this to -compute a decomposition of \spad{1 / 10!}. -The first argument to \spadfunFrom{partialFraction}{PartialFraction} is -the numerator of the quotient and the second argument is the factored -denominator. -}{ -\spadpaste{partialFraction(1,factorial 10) \bound{prev1}} -} -\xtc{ -Since the denominators are powers of primes, it may be possible -to expand the numerators further with respect to those primes. Use the -operation \spadfunFrom{padicFraction}{PartialFraction} to do this. -}{ -\spadpaste{f := padicFraction(\%) \free{prev1}\bound{f}} -} -% -% -\xtc{ -The operation \spadfunFrom{compactFraction}{PartialFraction} returns an -expanded fraction into the usual form. -The compacted version is used internally for computational efficiency. -}{ -\spadpaste{compactFraction(f) \free{f}} -} -% -\xtc{ -You can add, subtract, multiply -and divide partial fractions. In addition, you can extract the parts -of the decomposition. -\spadfunFrom{numberOfFractionalTerms}{PartialFraction} computes -the number of terms in the fractional part. -This does not include the whole part of the fraction, -which you get by calling \spadfunFrom{wholePart}{PartialFraction}. -In this example, the whole part is just \spad{0}. -}{ -\spadpaste{numberOfFractionalTerms(f) \free{f}} -} -\xtc{ -The operation -\spadfunFrom{nthFractionalTerm}{PartialFraction} returns the individual terms in the -decomposition. -Notice that the object returned is a partial fraction itself. -\spadfunFrom{firstNumer}{PartialFraction} and -\spadfunFrom{firstDenom}{PartialFraction} extract the numerator and -denominator of the first term of the fraction. -}{ -\spadpaste{nthFractionalTerm(f,3) \free{f}} -} -% - -% -\xtc{ -Given two gaussian integers (see \downlink{`Complex'}{ComplexXmpPage}\ignore{Complex}), you can -decompose their quotient into a partial fraction. -}{ -\spadpaste{partialFraction(1,- 13 + 14 * \%i) \bound{prev2}} -} -% -\xtc{ -To convert back to a quotient, simply use a conversion. -}{ -\spadpaste{\% :: Fraction Complex Integer \free{prev2}} -} - -To conclude this section, we compute the decomposition of -\texht{\narrowDisplay{1 \over {{(x + 1)}{(x + 2)}^2{(x + 3)}^3{(x + 4)}^4}}}{ -\begin{verbatim} - 1 - ------------------------------- - 2 3 4 - (x + 1)(x + 2) (x + 3) (x + 4) -\end{verbatim} -} -The polynomials in this object have type -\spadtype{UnivariatePolynomial(x, Fraction Integer)}. -% -\xtc{ -We use the \spadfunFrom{primeFactor}{Factored} operation (see -\downlink{`Factored'}{FactoredXmpPage}\ignore{Factored}) to create the denominator in factored form directly. -}{ -\spadpaste{u : FR UP(x, FRAC INT) := reduce(*,[primeFactor(x+i,i) for i in 1..4]) \bound{u}} -} -% -% -\xtc{ -These are the compact and expanded partial fractions for the quotient. -}{ -\spadpaste{partialFraction(1,u) \free{u}\bound{prev3}} -} -\xtc{ -}{ -\spadpaste{padicFraction \% \free{prev3}} -} - -All see \downlink{`FullPartialFractionExpansion'}{FullPartialFractionExpansionXmpPage}\ignore{FullPartialFractionExpansion} for examples of -factor-free conversion of quotients to full partial fractions. -\endscroll -\autobuttons -\end{page} - -@ -\section{poly.ht} -\subsection{Polynomials} -\label{PolynomialPage} -\begin{itemize} -\item PolynomialBasicPage \ref{PolynomialBasicPage} on -page~\pageref{PolynomialBasicPage} -\item PolynomialSubstitutionPage \ref{PolynomialSubstitutionPage} on -page~\pageref{PolynomialSubstitutionPage} -\item ugProblemFactorPage \ref{ugProblemFactorPage} on -page~\pageref{ugProblemFactorPage} -\item PolynomialGCDPage \ref{PolynomialGCDPage} on -page~\pageref{PolynomialGCDPage} -\item PolynomialRootPage \ref{PolynomialRootPage} on -page~\pageref{PolynomialRootPage} -\item PolynomialTypesPage \ref{PolynomialTypesPage} on -page~\pageref{PolynomialTypesPage} -\end{itemize} -\index{pages!PolynomialPage!poly.ht} -\index{poly.ht!pages!PolynomialPage} -\index{PolynomialPage!poly.ht!pages} -<>= -\begin{page}{PolynomialPage}{Polynomials} -\beginscroll -\beginmenu -\menulink{Basic Functions}{PolynomialBasicPage} \tab{18} -Create and manipulate polynomials. -\menulink{Substitutions}{PolynomialSubstitutionPage} \tab{18} -Evaluate polynomials. -\menulink{Factorization}{ugProblemFactorPage} \tab{18} -Factor in different contexts. -\menulink{GCDs and Friends}{PolynomialGCDPage} \tab{18} -Greatest common divisors etc.. -\menulink{Roots}{PolynomialRootPage}\tab{18} -Work with and solve for roots. -\menulink{Specific Types}{PolynomialTypesPage}\tab{18} -More specific information. -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -\subsection{The Specific Polynomial Types} -\label{PolynomialTypesPage} -\index{pages!PolynomialTypesPage!poly.ht} -\index{poly.ht!pages!PolynomialTypesPage} -\index{PolynomialTypesPage!poly.ht!pages} -<>= -\begin{page}{PolynomialTypesPage}{The Specific Polynomial Types} -\beginscroll -\beginmenu -\menulink{Polynomial}{PolynomialXmpPage} \newline -The general type. -\menulink{UnivariatePolynomial}{UnivariatePolynomialXmpPage} \newline -One variable polynomials. -\menulink{MultivariatePolynomial}{MultivariatePolynomialXmpPage} \newline -Multiple variable polynomials, recursive structure. -\menulink{DistributedMultivariatePolynomial}{DistributedMultivariatePolynomialXmpPage} -\newline -Multiple variable polynomials, non-recursive structure. -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Basic Operations On Polynomials} -\label{PolynomialBasicPage} -\index{pages!PolynomialBasicPage!poly.ht} -\index{poly.ht!pages!PolynomialBasicPage} -\index{PolynomialBasicPage!poly.ht!pages} -<>= -\begin{page}{PolynomialBasicPage}{Basic Operations On Polynomials} -\beginscroll -You create -polynomials using the usual operations of \spadopFrom{+}{Polynomial}, -\spadopFrom{-}{Polynomial}, \spadopFrom{*}{Polynomial} -(for multiplication), and \spadopFrom{**}{Polynomial} (for exponentiation). -Here are two examples: \newline -\spadpaste{p := a*x**2 + b*x*y + c*y**2 \bound{p}} -\spadpaste{q := 13*x**2 + 3*z \bound{q}} -These operations can also be used to combine polynomials. -Try the following: -\spadpaste{p + q \free{p q}} -\spadpaste{p - 3*q \free{p q}} -\spadpaste{p**2 + p*q \free{p q}} -\spadpaste{r := (p + q)**2 \bound{r} \free{p q}} -As you can see from the above examples, the variables are ordered -by defaults \spad{z > y > x > c > b > a}, -that is, \spad{z} is the main variable, then -\spad{y} and so on in reverse alphabetical order. -You can redefine this -ordering (for display purposes only) with the \spadfun{setVariableOrder} -command. -For example, the following -makes \spad{a} the main variable, then \spad{b}, and so on: -\spadpaste{setVariableOrder [a,b,c,x,y,z] \bound{vord}} -Now compare the way polynomials are displayed: -\spadpaste{p \free{p vord}} -\spadpaste{q \free{q vord}} -\spadpaste{r \free{r vord}} -To return to the system's default ordering, -use \spadfun{resetVariableOrder}. -\spadpaste{resetVariableOrder() \bound{rvord}} -\spadpaste{p \free{p rvord}} -Polynomial coefficients can be pulled out -using the function \spadfun{coefficient}. \newline -For example: -\spadpaste{coefficient(q,x,2) \free{q}} -will give you the coefficient of \spad{x**2} in the polynomial \spad{q}. -\newline -Try these commands: -\spadpaste{coefficient(r,x,3) \free{r}} -\spadpaste{c := coefficient(r,z,1) \free{r} \bound{c}} -\spadpaste{coefficient(c,x,2) \free{c}} -Coefficients of monomials can be obtained as follows: -\spadpaste{coefficient(q**2, [x,z], [2,1]) \free{q}} -This will return the coefficient of x**2 * z in the polynomial q**2. -Also, -\spadpaste{coefficient(r, [x,y], [2,2]) \free{r}} -will return the coefficient of \spad{x**2 * y**2} -in the polynomial \spad{r(x,y)}. -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Polynomial Evaluation and Substitution} -\label{PolynomialSubstitutionPage} -\index{pages!PolynomialSubstitutionPage!poly.ht} -\index{poly.ht!pages!PolynomialSubstitutionPage} -\index{PolynomialSubstitutionPage!poly.ht!pages} -<>= -\begin{page}{PolynomialSubstitutionPage} -{Polynomial Evaluation and Substitution} -\beginscroll -The function \spadfun{eval} is used to substitute values into polynomials. -Here's an example of how to use it: -\spadpaste{p := x**2 + y**2 \bound{p}} -\spadpaste{eval(p,x=5) \free{p}} -\newline -This example would give you the value of the polynomial \spad{p} at 5. -You can also substitute into polynomials with -several variables. First, specify the polynomial, then give -a list of bindings of the form \spad{variable = value}. For example: -\spadpaste{eval(p,[x = a + b,y = c + d]) \free{p}} -Here \spad{x} was replaced by \spad{a + b}, -and \spad{y} was replaced by \spad{c + d}. -Here's another example: -\spadpaste{q := x**3 + 5*x - y**4 \bound{q}} -\spadpaste{eval(q,[x=y,y=x]) \free{q}} -Substitution is done ``in parallel.'' -That is, Axiom takes -\spad{q(x,y)} and returns \spad{q(y,x)}. -\newline -You can also substitute numerical values for some or all of the -variables: -\spadpaste{px := eval(p, y = sin(2.0)) \bound{px} \free{p}} -\spadpaste{eval(px, x = cos(2.0)) \free{px}} -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Greatest Common Divisors, Resultants, and Discriminants} -\label{PolynomialGCDPage} -\index{pages!PolynomialGCDPage!poly.ht} -\index{poly.ht!pages!PolynomialGCDPage} -\index{PolynomialGCDPage!poly.ht!pages} -<>= -\begin{page}{PolynomialGCDPage} -{Greatest Common Divisors, Resultants, and Discriminants} -\beginscroll -You can compute the greatest common divisor of two polynomials using the -function \spadfun{gcd}. -Here's an example: -\spadpaste{p := 3*x**8 + 2*x**7 + 6*x**2 + 7*x + 2 \bound{p}} -\spadpaste{q := 2*x**13 + 9*x**7 + 2*x**6 + 10*x + 5 \bound{q}} -\spadpaste{gcd(p,q) \free{p q}} -You could -also see that \spad{p} and \spad{q} have a factor in common by using the -function \spadfun{resultant}: -\spadpaste{resultant(p,q,x) \free{p q}} -The resultant of two polynomials vanishes precisely when they have a -factor in common. -(In the example above -we specified the variable with -which we wanted to compute the resultant because the -polynomials could have involved variables other than x.) -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Roots of Polynomials} -\label{PolynomialRootPage} -\index{pages!PolynomialRootPage!poly.ht} -\index{poly.ht!pages!PolynomialRootPage} -\index{PolynomialRootPage!poly.ht!pages} -<>= -\begin{page}{PolynomialRootPage}{Roots of Polynomials} -\beginscroll -\beginmenu -\menulink{Using a Single Root of a Polynomial}{ugxProblemSymRootOnePage} -\newline -Working with a single root of a polynomial. -\menulink{Using All Roots of a Polynomial}{ugxProblemSymRootAllPage} -\newline -Working with all the roots of a polynomial. -\menulink{Solution of a Single Polynomial Equation}{ugxProblemOnePolPage} -\newline -Finding the roots of one polynomial. -\menulink{Solution of Systems of Polynomial Equations}{ugxProblemPolSysPage} -\newline -Finding the roots of a system of polynomials. -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -\section{poly1.ht} -<>= -\newcommand{\PolynomialXmpTitle}{Polynomial} -\newcommand{\PolynomialXmpNumber}{9.63} - -@ -\subsection{Polynomial} -\label{PolynomialXmpPage} -\begin{itemize} -\item DistributedMultivariatePolynomialXmpPage \ref{DistributedMultivariatePolynomialXmpPage} on -page~pageref{DistributedMultivariatePolynomialXmpPage} -\item MultivariatePolynomialXmpPage \ref{MultivariatePolynomialXmpPage} on -page~pageref{MultivariatePolynomialXmpPage} -\item UnivariatePolynomialXmpPage \ref{UnivariatePolynomialXmpPage} on -page~pageref{UnivariatePolynomialXmpPage} -\item FactoredXmpPage \ref{FactoredXmpPage} on -page~pageref{FactoredXmpPage} -\item upProblemFactorPage \ref{upProblemFactorPage} on -page~pageref{upProblemFactorPage} -\end{itemize} -\index{pages!PolynomialXmpPage!poly1.ht} -\index{poly1.ht!pages!PolynomialXmpPage} -\index{PolynomialXmpPage!poly1.ht!pages} -<>= -\begin{page}{PolynomialXmpPage}{Polynomial} -\beginscroll - -The domain constructor \spadtype{Polynomial} (abbreviation: \spadtype{POLY}) -provides polynomials with an arbitrary number of unspecified -variables. - -\xtc{ -It is used to create the default polynomial domains -in Axiom. -Here the coefficients are integers. -}{ -\spadpaste{x + 1} -} -\xtc{ -Here the coefficients have type \spadtype{Float}. -}{ -\spadpaste{z - 2.3} -} -\xtc{ -And here we have a polynomial in two variables with coefficients which -have type \spadtype{Fraction Integer}. -}{ -\spadpaste{y**2 - z + 3/4} -} - -The representation of objects of domains created by \spadtype{Polynomial} -is that of recursive univariate polynomials.\footnote{The term -\spad{univariate} means ``one variable.'' \spad{multivariate} means -``possibly more than one variable.''} -\xtc{ -This recursive structure is sometimes obvious from the display of -a polynomial. -}{ -\spadpaste{y **2 + x*y + y \bound{prev}} -} -In this example, you see that the polynomial is stored as a polynomial in -\spad{y} with coefficients that are polynomials in \spad{x} with integer -coefficients. -In fact, you really don't need to worry about the representation unless -you are working on an advanced application where it is critical. -The polynomial types created from -\spadtype{DistributedMultivariatePolynomial} and -\spadtype{NewDistributedMultivariatePolynomial} (discussed in -\downlink{`DistributedMultivariatePolynomial'} -{DistributedMultivariatePolynomialXmpPage} -\ignore{DistributedMultivariatePolynomial}) are stored and displayed in a -non-recursive manner. -\xtc{ -You see a ``flat'' display of the above -polynomial by converting to one of those types. -}{ -\spadpaste{\% :: DMP([y,x],INT) \free{prev}} -} - -We will demonstrate many of the polynomial facilities by using two -polynomials with integer coefficients. -\xtc{ -By default, the interpreter expands polynomial expressions, even if they -are written in a factored format. -}{ -\spadpaste{p := (y-1)**2 * x * z \bound{p}} -} -\xtc{ -See \downlink{`Factored'}{FactoredXmpPage}\ignore{Factored} to see -how to create objects in factored form directly. -}{ -\spadpaste{q := (y-1) * x * (z+5) \bound{q}} -} -\xtc{ -The fully factored form can be recovered by using -\spadfunFrom{factor}{Polynomial}. -}{ -\spadpaste{factor(q) \free{q}} -} -This is the same name used for the operation to factor integers. -Such reuse of names is called \spadglos{overloading} and makes it much easier -to think of solving problems in general ways. -Axiom facilities for factoring polynomials created with -\spadtype{Polynomial} are currently restricted to -the integer and rational number coefficient cases. -There are more complete facilities for factoring univariate polynomials: -see \downlink{``\ugProblemFactorTitle''}{ugProblemFactorPage} -in Section \ugProblemFactorNumber\ignore{ugProblemFactor}. - -\xtc{ -The standard arithmetic operations are available for polynomials. -}{ -\spadpaste{p - q**2\free{p q}} -} -\xtc{ -The operation \spadfunFrom{gcd}{Polynomial} is used to compute the -greatest common divisor of two polynomials. -}{ -\spadpaste{gcd(p,q) \free{p q}\bound{prev4}} -} -\xtc{ -In the case of \spad{p} and \spad{q}, the gcd is obvious from their -definitions. -We factor the gcd to show this relationship better. -}{ -\spadpaste{factor \% \free{prev4}} -} -\xtc{ -The least common multiple is computed by using \spadfunFrom{lcm}{Polynomial}. -}{ -\spadpaste{lcm(p,q) \free{p q}} -} -\xtc{ -Use \spadfunFrom{content}{Polynomial} to compute the -greatest common divisor of the -coefficients of the polynomial. -}{ -\spadpaste{content p \free{p}} -} - -Many of the operations on polynomials require you to specify a variable. -For example, \spadfunFrom{resultant}{Polynomial} requires you to give the -variable in which the polynomials should be expressed. -\xtc{ -This computes the resultant of the values of \spad{p} and -\spad{q}, considering them as polynomials in the variable \spad{z}. -They do not share a root when thought of as polynomials in \spad{z}. -}{ -\spadpaste{resultant(p,q,z) \free{p q}} -} -\xtc{ -This value is \spad{0} because as polynomials in \spad{x} the polynomials -have a common root. -}{ -\spadpaste{resultant(p,q,x) \free{p}\free{q}} -} -The data type used for the variables created by \spadtype{Polynomial} is -\spadtype{Symbol}. -As mentioned above, the representation used by \spadtype{Polynomial} is -recursive and so there is a main variable for nonconstant polynomials. -\xtc{ -The operation \spadfunFrom{mainVariable}{Polynomial} returns this -variable. -The return type is actually a union of \spadtype{Symbol} and -\spad{"failed"}. -}{ -\spadpaste{mainVariable p \free{p}} -} -\xtc{ -The latter branch of the union is be used if the polynomial has no -variables, that is, is a constant. -}{ -\spadpaste{mainVariable(1 :: POLY INT)} -} -\xtc{ -You can also use the predicate \spadfunFrom{ground?}{Polynomial} to test -whether a polynomial is in fact a member of its ground ring. -}{ -\spadpaste{ground? p \free{p}} -} -\xtc{ -}{ -\spadpaste{ground?(1 :: POLY INT)} -} -\xtc{ -The complete list of variables actually used in a particular polynomial is -returned by \spadfunFrom{variables}{Polynomial}. -For constant polynomials, this list is empty. -}{ -\spadpaste{variables p \free{p}} -} - -\xtc{ -The \spadfunFrom{degree}{Polynomial} operation returns the -degree of a polynomial in a specific variable. -}{ -\spadpaste{degree(p,x) \free{p}} -} -\xtc{ -}{ -\spadpaste{degree(p,y) \free{p}} -} -\xtc{ -}{ -\spadpaste{degree(p,z) \free{p}} -} -\xtc{ -If you give a list of variables for the second argument, a list -of the degrees in those variables is returned. -}{ -\spadpaste{degree(p,[x,y,z]) \free{p}} -} -\xtc{ -The minimum degree of a variable in a polynomial is computed using -\spadfunFrom{minimumDegree}{Polynomial}. -}{ -\spadpaste{minimumDegree(p,z) \free{p}} -} -\xtc{ -The total degree of a polynomial is returned by -\spadfunFrom{totalDegree}{Polynomial}. -}{ -\spadpaste{totalDegree p \free{p}} -} - -\xtc{ -It is often convenient to think of a polynomial as a leading monomial plus -the remaining terms. -}{ -\spadpaste{leadingMonomial p \free{p}} -} -\xtc{ -The \spadfunFrom{reductum}{Polynomial} operation returns a polynomial -consisting of the sum of the monomials after the first. -}{ -\spadpaste{reductum p \free{p}} -} -\xtc{ -These have the obvious relationship that the original polynomial -is equal to the leading monomial plus the reductum. -}{ -\spadpaste{p - leadingMonomial p - reductum p \free{p}} -} -\xtc{ -The value returned by \spadfunFrom{leadingMonomial}{Polynomial} includes -the coefficient of that term. -This is extracted by using -\spadfunFrom{leadingCoefficient}{Polynomial} on the original polynomial. -}{ -\spadpaste{leadingCoefficient p \free{p}} -} -\xtc{ -The operation \spadfunFrom{eval}{Polynomial} is used to substitute a value -for a variable in a polynomial. -}{ -\spadpaste{p \free{p}} -} -\xtc{ -This value may be another variable, a constant or a polynomial. -}{ -\spadpaste{eval(p,x,w) \free{p}} -} -\xtc{ -}{ -\spadpaste{eval(p,x,1) \free{p}} -} -\xtc{ -Actually, all the things being substituted are just polynomials, -some more trivial than others. -}{ -\spadpaste{eval(p,x,y**2 - 1) \free{p}} -} - -\xtc{ -Derivatives are computed using the \spadfunFrom{D}{Polynomial} -operation. -}{ -\spadpaste{D(p,x) \free{p}} -} -\xtc{ -The first argument is the polynomial and the second is the variable. -}{ -\spadpaste{D(p,y) \free{p}} -} -\xtc{ -Even if the polynomial has only one variable, you must specify it. -}{ -\spadpaste{D(p,z) \free{p}} -} - -Integration of polynomials is similar and the -\spadfunFrom{integrate}{Polynomial} operation is used. - -\xtc{ -Integration requires that the coefficients support division. -Consequently, -Axiom converts polynomials over the integers to polynomials over -the rational numbers before integrating them. -}{ -\spadpaste{integrate(p,y) \free{p}} -} - -It is not possible, in general, to divide two polynomials. -In our example using polynomials over the integers, the operation -\spadfunFrom{monicDivide}{Polynomial} divides a polynomial by a monic -polynomial (that is, a polynomial with leading coefficient equal to 1). -The result is a record of the quotient and remainder of the -division. -\xtc{ -You must specify the variable in which to express the polynomial. -}{ -\spadpaste{qr := monicDivide(p,x+1,x) \free{p}\bound{qr}} -} -\xtc{ -The selectors of the components of the record are -\spad{quotient} and \spad{remainder}. -Issue this to extract the remainder. -}{ -\spadpaste{qr.remainder \free{qr}} -} -\xtc{ -Now that we can extract the components, we can demonstrate the -relationship among them and the arguments to our original expression -\spad{qr := monicDivide(p,x+1,x)}. -}{ -\spadpaste{p - ((x+1) * qr.quotient + qr.remainder) \free{p}\free{qr}} -} - -\xtc{ -If the \spadopFrom{/}{Fraction} operator is used with polynomials, a -fraction object is created. -In this example, the result is an object of type \spadtype{Fraction -Polynomial Integer}. -}{ -\spadpaste{p/q \free{p}\free{q}} -} -\xtc{ -If you use rational numbers as polynomial coefficients, the -resulting object is of type \spadtype{Polynomial Fraction Integer}. -}{ -\spadpaste{(2/3) * x**2 - y + 4/5 \bound{prev1}} -} -\xtc{ -This can be converted to a fraction of polynomials and back again, if -required. -}{ -\spadpaste{\% :: FRAC POLY INT \free{prev1}\bound{prev2}} -} -\xtc{ -}{ -\spadpaste{\% :: POLY FRAC INT \free{prev2}\bound{prev3}} -} -\xtc{ -To convert the coefficients to floating point, -map the \spadfun{numeric} operation on the coefficients of the polynomial. -}{ -\spadpaste{map(numeric,\%) \free{prev3}} -} - -For more information on related topics, see -\downlink{`UnivariatePolynomial'}{UnivariatePolynomialXmpPage}\ignore{UnivariatePolynomial}, -\downlink{`MultivariatePolynomial'}{MultivariatePolynomialXmpPage}\ignore{MultivariatePolynomial}, and -\downlink{`DistributedMultivariatePolynomial'}{DistributedMultivariatePolynomialXmpPage}\ignore{DistributedMultivariatePolynomial}. -You can also issue the system command -\spadcmd{)show Polynomial} -to display the full list of operations defined by -\spadtype{Polynomial}. -\endscroll -\autobuttons -\end{page} - -@ -\section{quat.ht} -<>= -\newcommand{\QuaternionXmpTitle}{Quaternion} -\newcommand{\QuaternionXmpNumber}{9.64} - -@ -\subsection{Quaternion} -\label{QuaternionXmpPage} -\index{pages!QuaternionXmpPage!quat.ht} -\index{quat.ht!pages!QuaternionXmpPage} -\index{QuaternionXmpPage!quat.ht!pages} -<>= -\begin{page}{QuaternionXmpPage}{Quaternion} -% ===================================================================== -\beginscroll -The domain constructor \spadtype{Quaternion} implements quaternions over -commutative rings. -For information on related topics, see -%\menuxmpref{CliffordAlgebra} -\downlink{`Complex'}{ComplexXmpPage}\ignore{Complex} and -\downlink{`Octonion'}{OctonionXmpPage}\ignore{Octonion}. -You can also issue the system command -\spadcmd{)show Quaternion} -to display the full list of operations defined by -\spadtype{Quaternion}. - -\xtc{ -The basic operation for creating quaternions is -\spadfunFrom{quatern}{Quaternion}. -This is a quaternion over the rational numbers. -}{ -\spadpaste{q := quatern(2/11,-8,3/4,1) \bound{q}} -} -\xtc{ -The four arguments are the real part, the \spad{i} imaginary part, the -\spad{j} imaginary part, and the \spad{k} imaginary part, respectively. -}{ -\spadpaste{[real q, imagI q, imagJ q, imagK q] \free{q}} -} -\xtc{ -Because \spad{q} is over the rationals (and nonzero), you can invert it. -}{ -\spadpaste{inv q \free{q}} -} -\xtc{ -The usual arithmetic (ring) operations are available -}{ -\spadpaste{q**6 \free{q}} -} -\xtc{ -}{ -\spadpaste{r := quatern(-2,3,23/9,-89); q + r \bound{r}\free{q}} -} -% -\xtc{ -In general, multiplication is not commutative. -}{ -\spadpaste{q * r - r * q\free{q r}} -} -\xtc{ -There are no predefined constants for the imaginary \spad{i, j}, -and \spad{k} parts, but you can easily define them. -}{ -\spadpaste{i:=quatern(0,1,0,0); j:=quatern(0,0,1,0); k:=quatern(0,0,0,1) \bound{i j k}} -} -\xtc{ -These satisfy the normal identities. -}{ -\spadpaste{[i*i, j*j, k*k, i*j, j*k, k*i, q*i] \free{i j k q}} -} -\xtc{ -The norm is the quaternion times its conjugate. -}{ -\spadpaste{norm q \free{q}} -} -\xtc{ -}{ -\spadpaste{conjugate q \free{q} \bound{prev}} -} -\xtc{ -}{ -\spadpaste{q * \% \free{q prev}} -} -\endscroll -\autobuttons -\end{page} - -@ -\section{radix.ht} -<>= -\newcommand{\RadixExpansionXmpTitle}{RadixExpansion} -\newcommand{\RadixExpansionXmpNumber}{9.65} - -@ -\subsection{RadixExpansion} -\label{RadixExpansionXmpPage} -\begin{itemize} -\item HexadecimalExpansionXmpPage \ref{HexadecimalExpansionXmpPage} on -page~pageref{HexadecimalExpansionXmpPage} -\item DecimalExpansion \ref{DecimalExpansion} on -page~pageref{DecimalExpansion} -\item BinaryExpansion \ref{BinaryExpansion} on -page~pageref{BinaryExpansion} -\end{itemize} -\index{pages!RadixExpansionXmpPage!radix.ht} -\index{radix.ht!pages!RadixExpansionXmpPage} -\index{RadixExpansionXmpPage!radix.ht!pages} -<>= -\begin{page}{RadixExpansionXmpPage}{RadixExpansion} -\beginscroll - -It possible to expand numbers in general bases. - -\labelSpace{2pc} -\xtc{ -Here we expand \spad{111} in base \spad{5}. -This means -\texht{$10^2+10^1+10^0 = 4 \cdot 5^2+2 \cdot 5^1 + 5^0.$}{% -\spad{10**2+10**1+10**0 = 4*5**2+2*5**1+5**0.}} -}{ -\spadpaste{111::RadixExpansion(5)} -} - -\xtc{ -You can expand fractions to form repeating expansions. -}{ -\spadpaste{(5/24)::RadixExpansion(2)} -} -\xtc{ -}{ -\spadpaste{(5/24)::RadixExpansion(3)} -} -\xtc{ -}{ -\spadpaste{(5/24)::RadixExpansion(8)} -} -\xtc{ -}{ -\spadpaste{(5/24)::RadixExpansion(10)} -} -\xtc{ -For bases from 11 to 36 the letters A through Z are used. -}{ -\spadpaste{(5/24)::RadixExpansion(12)} -} -\xtc{ -}{ -\spadpaste{(5/24)::RadixExpansion(16)} -} -\xtc{ -}{ -\spadpaste{(5/24)::RadixExpansion(36)} -} -\xtc{ -For bases greater than 36, the ragits are separated by blanks. -}{ -\spadpaste{(5/24)::RadixExpansion(38)} -} -\xtc{ -The \spadtype{RadixExpansion} type provides operations to obtain the -individual ragits. -Here is a rational number in base \spad{8}. -}{ -\spadpaste{a := (76543/210)::RadixExpansion(8) \bound{a}} -} -\xtc{ -The operation \spadfunFrom{wholeRagits}{RadixExpansion} returns a list of the -ragits for the integral part of the number. -}{ -\spadpaste{w := wholeRagits a \free{a}\bound{w}} -} -\xtc{ -The operations \spadfunFrom{prefixRagits}{RadixExpansion} and \spadfunFrom{cycleRagits}{RadixExpansion} -return lists of the initial and repeating ragits in the -fractional part of the number. -}{ -\spadpaste{f0 := prefixRagits a \free{a}\bound{f0}} -} -\xtc{ -}{ -\spadpaste{f1 := cycleRagits a \free{a}\bound{f1}} -} -\xtc{ -You can construct any radix expansion by giving the -whole, prefix and cycle parts. -The declaration is necessary to let Axiom -know the base of the ragits. -}{ -\spadpaste{u:RadixExpansion(8):=wholeRadix(w)+fractRadix(f0,f1) \free{w f0 f1}\bound{u}} -} -\xtc{ -If there is no repeating part, then the list \spad{[0]} should be used. -}{ -\spadpaste{v: RadixExpansion(12) := fractRadix([1,2,3,11], [0]) \bound{v}} -} -\xtc{ -If you are not interested in the repeating nature of the expansion, -an infinite stream of ragits can be obtained using -\spadfunFrom{fractRagits}{RadixExpansion}. -}{ -\spadpaste{fractRagits(u) \free{u}} -} -\xtc{ -Of course, it's possible to recover the fraction representation: -}{ -\spadpaste{a :: Fraction(Integer) \free{a}} -} - -\showBlurb{RadixExpansion} -More examples of expansions are available in -\downlink{`DecimalExpansion'}{DecimalExpansionXmpPage}\ignore{DecimalExpansion}, -\downlink{`BinaryExpansion'}{BinaryExpansionXmpPage}\ignore{BinaryExpansion}, and -\downlink{`HexadecimalExpansion'}{HexadecimalExpansionXmpPage}\ignore{HexadecimalExpansion}. -\endscroll -\autobuttons -\end{page} -% - -@ -\section{reclos.ht} -<>= -\newcommand{\RealClosureXmpTitle}{RealClosure} -\newcommand{\RealClosureXmpNumber}{9.66} - -@ -\subsection{RealClosure} -\label{RealClosureXmpPage} -\index{pages!RealClosureXmpPage!reclos.ht} -\index{reclos.ht!pages!RealClosureXmpPage} -\index{RealClosureXmpPage!reclos.ht!pages} -<>= -\begin{page}{RealClosureXmpPage}{RealClosure} -\beginscroll - -The Real Closure 1.0 package provided by -Renaud Rioboo (Renaud.Rioboo@lip6.fr) consists of different -packages, categories and domains : - -\begin{items} -\item The package \axiomType{RealPolynomialUtilitiesPackage} which needs -a \axiomType{Field} {\em F} and a -\axiomType{UnivariatePolynomialCategory} domain with coefficients in {\em F}. -It computes some -simple functions such as Sturm and Sylvester sequences -(\axiomOpFrom{sturmSequence}{RealPolynomialUtilitiesPackage}, -\axiomOpFrom{sylvesterSequence}{RealPolynomialUtilitiesPackage}). - -\item The category \axiomType{RealRootCharacterizationCategory} provides -abstract -functions to work with "real roots" of univariate polynomials. These -resemble variables with some functionality needed to compute important -operations. - -\item The category \axiomType{RealClosedField} provides common operations -available over -real closed fiels. These include finding all the roots of a univariate -polynomial, taking square (and higher) roots, ... - -\item The domain \axiomType{RightOpenIntervalRootCharacterization} is the -main code that -provides the functionality of \axiomType{RealRootCharacterizationCategory} -for the case -of archimedean fields. Abstract roots are encoded with a left closed right -open interval containing the root together with a defining polynomial for the -root. - -\item The \axiomType{RealClosure} domain is the end-user code. It provides -usual arithmetic -with real algebraic numbers, along with the functionality of a real closed -field. It also provides functions to approximate a real algebraic number by an -element of the base field. This approximation may either be absolute -(\axiomOpFrom{approximate}{RealClosure}) or relative -(\axiomOpFrom{relativeApprox}{RealClosure}). - - -\end{items} - -\centerline{CAVEATS} - -Since real algebraic expressions are stored as depending on "real roots" which -are managed like variables, there is an ordering on these. This ordering is -dynamical in the sense that any new algebraic takes precedence over older -ones. In particular every creation function raises a new "real root". This has -the effect that when you type something like -\spad{sqrt(2) + sqrt(2)} you have two -new variables which happen to be equal. To avoid this name the expression such -as in \spad{s2 := sqrt(2) ; s2 + s2} - -Also note that computing times depend strongly on the ordering you implicitly -provide. Please provide algebraics in the order -which seems most natural to you. - -\centerline{LIMITATIONS} - -This packages uses -algorithms which are published in [1] and [2] which are based on field -arithmetics, in particular for polynomial gcd related algorithms. This can be -quite slow for high degree polynomials and subresultants methods usually work -best. Beta versions of the package try to use these techniques in a better -way and work significantly faster. These are mostly based on unpublished -algorithms and cannot be distributed. Please contact the author if you have a -particular problem to solve or want to use these versions. - -Be aware that approximations behave as post-processing and that all -computations are done exactly. They can thus be quite time consuming when -depending on several "real roots". - -\centerline{REFERENCES} - - -[1] R. Rioboo : Real Algebraic Closure of an ordered Field : Implementation - in Axiom. - In proceedings of the ISSAC'92 Conference, Berkeley 1992 pp. 206-215. - -[2] Z. Ligatsikas, R. Rioboo, M. F. Roy : Generic computation of the real - closure of an ordered field. - In Mathematics and Computers in Simulation Volume 42, Issue 4-6, - November 1996. - -\centerline{EXAMPLES} -\xtc{ -We shall work with the real closure of the ordered field of -rational numbers. -}{ -\spadpaste{Ran := RECLOS(FRAC INT) \bound{Ran}} -} -\xtc{ -Some simple signs for square roots, these correspond to an extension -of degree 16 of the rational numbers. Examples provided by J. Abbot. -}{ -\spadpaste{fourSquares(a:Ran,b:Ran,c:Ran,d:Ran):Ran == sqrt(a)+sqrt(b) - sqrt(c)-sqrt(d) \free{Ran} \bound{fs}} -} -\xtc{ -These produce values very close to zero. -}{ -\spadpaste{squareDiff1 := fourSquares(73,548,60,586) \free{fs}\bound{sd1}} -} -\xtc{ -}{ -\spadpaste{recip(squareDiff1)\free{sd1}} -} -\xtc{ -}{ -\spadpaste{sign(squareDiff1)\free{sd1}} -} -\xtc{ -}{ -\spadpaste{squareDiff2 := fourSquares(165,778,86,990) \free{fs}\bound{sd2}} -} -\xtc{ -}{ -\spadpaste{recip(squareDiff2)\free{sd2}} -} -\xtc{ -}{ -\spadpaste{sign(squareDiff2)\free{sd2}} -} -\xtc{ -}{ -\spadpaste{squareDiff3 := fourSquares(217,708,226,692) \free{fs}\bound{sd3}} -} -\xtc{ -}{ -\spadpaste{recip(squareDiff3)\free{sd3}} -} -\xtc{ -}{ -\spadpaste{sign(squareDiff3)\free{sd3}} -} -\xtc{ -}{ -\spadpaste{squareDiff4 := fourSquares(155,836,162,820) \free{fs}\bound{sd4}} -} -\xtc{ -}{ -\spadpaste{recip(squareDiff4)\free{sd4}} -} -\xtc{ -}{ -\spadpaste{sign(squareDiff4)\free{sd4}} -} -\xtc{ -}{ -\spadpaste{squareDiff5 := fourSquares(591,772,552,818) \free{fs}\bound{sd5}} -} -\xtc{ -}{ -\spadpaste{recip(squareDiff5)\free{sd5}} -} -\xtc{ -}{ -\spadpaste{sign(squareDiff5)\free{sd5}} -} -\xtc{ -}{ -\spadpaste{squareDiff6 := fourSquares(434,1053,412,1088) \free{fs}\bound{sd6}} -} -\xtc{ -}{ -\spadpaste{recip(squareDiff6)\free{sd6}} -} -\xtc{ -}{ -\spadpaste{sign(squareDiff6)\free{sd6}} -} -\xtc{ -}{ -\spadpaste{squareDiff7 := fourSquares(514,1049,446,1152) \free{fs}\bound{sd7}} -} -\xtc{ -}{ -\spadpaste{recip(squareDiff7)\free{sd7}} -} -\xtc{ -}{ -\spadpaste{sign(squareDiff7)\free{sd7}} -} -\xtc{ -}{ -\spadpaste{squareDiff8 := fourSquares(190,1751,208,1698) \free{fs}\bound{sd8}} -} -\xtc{ -}{ -\spadpaste{recip(squareDiff8)\free{sd8}} -} -\xtc{ -}{ -\spadpaste{sign(squareDiff8)\free{sd8}} -} -\xtc{ -This should give three digits of precision -}{ -\spadpaste{relativeApprox(squareDiff8,10**(-3))::Float \free{sd8}} -} -\xtc{ -The sum of these 4 roots is 0 -}{ -\spadpaste{l := allRootsOf((x**2-2)**2-2)$Ran \free{Ran} \bound{l}} -} -\xtc{ -Check that they are all roots of the same polynomial -}{ -\spadpaste{removeDuplicates map(mainDefiningPolynomial,l) \free{l}} -} -\xtc{ -We can see at a glance that they are separate roots -}{ -\spadpaste{map(mainCharacterization,l) \free{l}} -} -\xtc{ -Check the sum and product -}{ -\spadpaste{[reduce(+,l),reduce(*,l)-2] \free{l}} -} -\xtc{ -A more complicated test that involve an extension of degree 256. -This is a way of checking nested radical identities. -}{ -\spadpaste{(s2, s5, s10) := (sqrt(2)$Ran, sqrt(5)$Ran, sqrt(10)$Ran) \free{Ran}\bound{s2}\bound{s5}\bound{s10}} -} -\xtc{ -}{ -\spadpaste{eq1:=sqrt(s10+3)*sqrt(s5+2) - sqrt(s10-3)*sqrt(s5-2) = sqrt(10*s2+10) \free{s2}\free{s5}\free{s10}\bound{eq1}} -} -\xtc{ -}{ -\spadpaste{eq1::Boolean \free{eq1}} -} -\xtc{ -}{ -\spadpaste{eq2:=sqrt(s5+2)*sqrt(s2+1) - sqrt(s5-2)*sqrt(s2-1) = sqrt(2*s10+2)\free{s2}\free{s5}\free{s10}\bound{eq2}} -} -\xtc{ -}{ -\spadpaste{eq2::Boolean \free{eq2}} -} -\xtc{ -Some more examples from J. M. Arnaudies -}{ -\spadpaste{s3 := sqrt(3)$Ran \free{Ran}\bound{s3}} -} -\xtc{ -}{ -\spadpaste{s7:= sqrt(7)$Ran \free{Ran}\bound{s7}} -} -\xtc{ -}{ -\spadpaste{e1 := sqrt(2*s7-3*s3,3) \free{s7} \free{s3} \bound{e1}} -} -\xtc{ -}{ -\spadpaste{e2 := sqrt(2*s7+3*s3,3) \free{s7} \free{s3} \bound{e2}} -} -\xtc{ -This should be null -}{ -\spadpaste{e2-e1-s3 \free{e2} \free{e1} \free{s3}} -} -\xtc{ -A quartic polynomial -}{ -\spadpaste{pol : UP(x,Ran) := x**4+(7/3)*x**2+30*x-(100/3) \free{Ran} \bound{pol}} -} -\xtc{ -Add some cubic roots -}{ -\spadpaste{r1 := sqrt(7633)$Ran \free{Ran}\bound{r1}} -} -\xtc{ -}{ -\spadpaste{alpha := sqrt(5*r1-436,3)/3 \free{r1} \bound{alpha}} -} -\xtc{ -}{ -\spadpaste{beta := -sqrt(5*r1+436,3)/3 \free{r1} \bound{beta}} -} -\xtc{ -this should be null -}{ -\spadpaste{pol.(alpha+beta-1/3) \free{pol} \free{alpha} \free{beta}} -} -\xtc{ -A quintic polynomial -}{ -\spadpaste{qol : UP(x,Ran) := x**5+10*x**3+20*x+22 \free{Ran}\bound{qol}} -} -\xtc{ -Add some cubic roots -}{ -\spadpaste{r2 := sqrt(153)$Ran \free{Ran}\bound{r2}} -} -\xtc{ -}{ -\spadpaste{alpha2 := sqrt(r2-11,5) \free{r2}\bound{alpha2}} -} -\xtc{ -}{ -\spadpaste{beta2 := -sqrt(r2+11,5) \free{r2}\bound{beta2}} -} -\xtc{ -this should be null -}{ -\spadpaste{qol(alpha2+beta2) \free{qol}\free{alpha2}\free{beta2}} -} -\xtc{ -Finally, some examples from the book Computer Algebra by -Davenport, Siret and Tournier (page 77). -The last one is due to Ramanujan. -}{ -\spadpaste{dst1:=sqrt(9+4*s2)=1+2*s2 \free{s2}\bound{dst1}} -} -\xtc{ -}{ -\spadpaste{dst1::Boolean \free{dst1}} -} -\xtc{ -}{ -\spadpaste{s6:Ran:=sqrt 6 \free{Ran}\bound{s6}} -} -\xtc{ -}{ -\spadpaste{dst2:=sqrt(5+2*s6)+sqrt(5-2*s6) = 2*s3 \free{s6}\free{s3}\bound{dst2}} -} -\xtc{ -}{ -\spadpaste{dst2::Boolean \free{dst2}} -} -\xtc{ -}{ -\spadpaste{s29:Ran:=sqrt 29 \free{Ran}\bound{s29}} -} -\xtc{ -}{ -\spadpaste{dst4:=sqrt(16-2*s29+2*sqrt(55-10*s29)) = sqrt(22+2*s5)-sqrt(11+2*s29)+s5 \free{s29}\free{s5}\bound{dst4}} -} -\xtc{ -}{ -\spadpaste{dst4::Boolean \free{dst4}} -} -\xtc{ -}{ -\spadpaste{dst6:=sqrt((112+70*s2)+(46+34*s2)*s5) = (5+4*s2)+(3+s2)*s5 \free{s2}\free{s5}\bound{dst6}} -} -\xtc{ -}{ -\spadpaste{dst6::Boolean \free{dst6}} -} -\xtc{ -}{ -\spadpaste{f3:Ran:=sqrt(3,5) \free{Ran}\bound{f3}} -} -\xtc{ -}{ -\spadpaste{f25:Ran:=sqrt(1/25,5) \free{Ran}\bound{f25}} -} -\xtc{ -}{ -\spadpaste{f32:Ran:=sqrt(32/5,5) \free{Ran}\bound{f32}} -} -\xtc{ -}{ -\spadpaste{f27:Ran:=sqrt(27/5,5) \free{Ran}\bound{f27}} -} -\xtc{ -}{ -\spadpaste{dst5:=sqrt((f32-f27,3)) = f25*(1+f3-f3**2)\free{f32}\free{f27}\free{f25}\free{f3}\bound{dst5}} -} -\xtc{ -}{ -\spadpaste{dst5::Boolean \free{dst5}} -} - -\endscroll -\autobuttons -\end{page} - -@ -\section{record.ht} -\subsection{Domain {\bf Record(a:A,...,b:B)}} -\label{DomainRecord} -\index{pages!DomainRecord!record.ht} -\index{record.ht!pages!DomainRecord} -\index{DomainRecord!record.ht!pages} -<>= -\begin{page}{DomainRecord}{Domain {\em Record(a:A,...,b:B)}} -\beginscroll -{\em Record} takes any number of selector-domain pairs as arguments: -\indentrel{2} -\newline \spad{a}, a selector, an element of domain \spadtype{Symbol} -\newline \spad{A}, a domain of category \spadtype{SetCategory} -\newline\tab{10}... -\newline \spad{b}, a selector, an element of domain \spadtype{Symbol} -\newline \spad{B}, a domain of category \spadtype{SetCategory} -\indentrel{-2}\newline -This constructor is a primitive in Axiom. -\newline -\beginmenu -\item\menulispdownlink{Description}{(|dbSpecialDescription| '|Record|)}\tab{15}General description -\item\menulispdownlink{Operations}{(|dbSpecialOperations| '|Record|)}\tab{15}All exported operations of {\em Record(a:A,b:B)} -%\item\menudownlink{Examples} {RecordExamples} \tab{15}Examples illustrating use -%\item\menudownlink{Exports} {RecordExports} \tab{15}Explicit categories and operations -\endmenu -\vspace{1}\newline -The selectors {\em a,...,b} of a \spad{Record} type must be distinct. -\endscroll\end{page} - -@ -\subsection{Domain Constructor {\bf Record}} -\label{RecordDescription} -\index{pages!RecordDescription!record.ht} -\index{record.ht!pages!RecordDescription} -\index{RecordDescription!record.ht!pages} -<>= -\begin{page}{RecordDescription}{Domain Constructor {\em Record}} -\beginscroll -\newline\menuitemstyle{}\tab{2}Record({\em a:A},{\em b:B}) -\newline\tab{2}{\em Arguments:}\indent{17}\tab{-2} -{\em a}, a selector, an element of domain \spadtype{Symbol} -\newline\tab{-2} -{\em A}, a domain of category \spadtype{SetCategory} -\newline\tab{10}... -\newline\tab{-2} -{\em b}, a selector, an element of domain \spadtype{Symbol} -\newline\tab{-2} -{\em B}, a domain of category \spadtype{SetCategory} -\indent{0}\newline\tab{2}{\em Returns:}\indent{15}\tab{0} -a record object with component objects of type {\em A},...,{\em B} with -correponding selectors {\em a},...,{\em b} -as described below. -\indent{0}\newline\tab{2}{\em Description:}\indent{15}\tab{0} -{\em Record(a:A,b:B)} is used to create the class of pairs of objects made -up of a value of type {\em A} selected by the symbol {\em a} and -a value of type {\em B} selected by the symbol {\em b}. -In general, the {\em Record} constructor can take any number of arguments and thus can -be used to create aggregates of -heterogeneous components of arbitrary size selectable by name. -{\em Record} is a primitive domain of Axiom which cannot be -defined in the Axiom language. -\endscroll -\end{page} - - -@ -\section{regset.ht} -<>= -\newcommand{\RegularTriangularSetXmpTitle}{RegularTriangularSet} -\newcommand{\RegularTriangularSetXmpNumber}{9.67} - -@ -\subsection{RegularTriangularSet} -\label{RegularTriangularSetXmpPage} -\index{pages!RegularTriangularSetXmpPage!regset.ht} -\index{regset.ht!pages!RegularTriangularSetXmpPage} -\index{RegularTriangularSetXmpPage!regset.ht!pages} -<>= -\begin{page}{RegularTriangularSetXmpPage}{RegularTriangularSet} -\beginscroll -The \spadtype{RegularTriangularSet} domain constructor implements -regular triangular sets. -These particular triangular sets were introduced by M. Kalkbrener (1991) -in his PhD Thesis under the name regular chains. -Regular chains and their related concepts are presented in -the paper "On the Theories of Triangular sets" By P. Aubry, D. Lazard -and M. Moreno Maza (to appear in the Journal of Symbolic Computation). -The \spadtype{RegularTriangularSet} -constructor also provides a new method (by the third author) -for solving polynomial system by means of regular chains. -This method has two ways of solving. -One has the same specifications as Kalkbrener's algorithm (1991) -and the other is closer to Lazard's method (Discr. App. Math, 1991). -Moreover, this new method removes redundant component from the -decompositions when this is not {\em too expensive}. -This is always the case with square-free regular chains. -So if you want to obtain decompositions without redundant components -just use the \spadtype{SquareFreeRegularTriangularSet} domain constructor -or the \spadtype{LazardSetSolvingPackage} package constructor. -See also the \spadtype{LexTriangularPackage} and -\spadtype{ZeroDimensionalSolvePackage} for the case of -algebraic systems with a finite number of (complex) solutions. - -One of the main features of regular triangular sets is that they -naturally define towers of simple extensions of a field. -This allows to perform with multivariate polynomials the -same kind of operations as one can do in an \spadtype{EuclideanDomain}. - -The \spadtype{RegularTriangularSet} constructor takes four arguments. -The first one, {\bf R}, is the coefficient ring of the polynomials; -it must belong to the category \spadtype{GcdDomain}. -The second one, {\bf E}, is the exponent monoid of the polynomials; -it must belong to the category \spadtype{OrderedAbelianMonoidSup}. -the third one, {\bf V}, is the ordered set of variables; -it must belong to the category \spadtype{OrderedSet}. -The last one is the polynomial ring; -it must belong to the category \spadtype{RecursivePolynomialCategory(R,E,V)}. -The abbreviation for \spadtype{RegularTriangularSet} is -\spadtype{REGSET}. -See also the constructor \spadtype{RegularChain} which only takes -two arguments, the coefficient ring and the ordered set of variables; -in that case, polynomials are necessarily built with the -\spadtype{NewSparseMultivariatePolynomial} domain constructor. - -We shall explain now how to use the constructor \spadtype{REGSET} -and how to read the decomposition of a polynomial system by means -of regular sets. - -Let us give some examples. -We start with an easy one (Donati-Traverso) -in order to understand the two ways of -solving polynomial systems provided by the \spadtype{REGSET} constructor. -\xtc{ -Define the coefficient ring. -}{ -\spadpaste{R := Integer \bound{R}} -} -\xtc{ -Define the list of variables, -}{ -\spadpaste{ls : List Symbol := [x,y,z,t] \bound{ls}} -} -\xtc{ -and make it an ordered set; -}{ -\spadpaste{V := OVAR(ls) \free{ls} \bound{V}} -} -\xtc{ -then define the exponent monoid. -}{ -\spadpaste{E := IndexedExponents V \free{V} \bound{E}} -} -\xtc{ -Define the polynomial ring. -}{ -\spadpaste{P := NSMP(R, V) \free{R} \free{V} \bound{P}} -} -\xtc{ -Let the variables be polynomial. -}{ -\spadpaste{x: P := 'x \free{P} \bound{x}} -} -\xtc{ -}{ -\spadpaste{y: P := 'y \free{P} \bound{y}} -} -\xtc{ -}{ -\spadpaste{z: P := 'z \free{P} \bound{z}} -} -\xtc{ -}{ -\spadpaste{t: P := 't \free{P} \bound{t}} -} -\xtc{ -Now call the \spadtype{RegularTriangularSet} domain constructor. -}{ -\spadpaste{T := REGSET(R,E,V,P) \free{R} \free{E} \free{V} \free{P} \bound{T} } -} -\xtc{ -Define a polynomial system. -}{ -\spadpaste{p1 := x ** 31 - x ** 6 - x - y \free{x} \free{y} \bound{p1}} -} -\xtc{ -}{ -\spadpaste{p2 := x ** 8 - z \free{x} \free{z} \bound{p2}} -} -\xtc{ -}{ -\spadpaste{p3 := x ** 10 - t \free{x} \free{t} \bound{p3}} -} -\xtc{ -}{ -\spadpaste{lp := [p1, p2, p3] \free{p1} \free{p2} \free{p3} \bound{lp}} -} -\xtc{ -First of all, let us solve this system in the sense of Kalkbrener. -}{ -\spadpaste{zeroSetSplit(lp)$T \free{lp} \free{T}} -} -\xtc{ -And now in the sense of Lazard (or Wu and other authors). -}{ -\spadpaste{lts := zeroSetSplit(lp,false)$T \free{lp} \free{T} \bound{lts}} -} - -We can see that the first decomposition is a subset of the second. -So how can both be correct ? - -Recall first that polynomials from a domain of the category -\spadtype{RecursivePolynomialCategory} are regarded -as univariate polynomials in their main variable. -For instance the second polynomial in the first set -of each decomposition has main variable {\bf y} -and its initial (i.e. its leading coefficient w.r.t. its main -variable) is {\bf t z}. - -Now let us explain how to read the second decomposition. -Note that the non-constant initials of the first set are -\texht{$t^4-t$}{{\bf t^4 - t}} and \texht{$t z$}{{\bf t z}}. -Then the solutions described by this first set are the common -zeros of its polynomials that do not cancel the polynomials -\texht{$t^4-t$}{{\bf t^4 - t}} and \texht{$ty z$}{{\bf t z}}. -Now the solutions of the input system {\bf lp} satisfying -these equations are described by the second and the third -sets of the decomposition. -Thus, in some sense, they can be considered as degenerated -solutions. -The solutions given by the first set are called the generic -points of the system; they give the general form of the -solutions. -The first decomposition only provides these generic points. -This latter decomposition is useful when they are many degenerated -solutions (which is sometimes hard to compute) and when -one is only interested in general informations, like -the dimension of the input system. - -\xtc{ -We can get the dimensions of each component -of a decomposition as follows. -}{ -\spadpaste{[coHeight(ts) for ts in lts] \free{lts}} -} - -Thus the first set has dimension one. -Indeed {\bf t} can take any value, except {\bf 0} -or any third root of {\bf 1}, whereas {\bf z} -is completely determined from {\bf t}, -{\bf y} is given by {\bf z} and {\bf t}, -and finally {\bf x} is given by the other three variables. -In the second and the third sets of the second decomposition -the four variables are completely determined and thus -these sets have dimension zero. - -We give now the precise specifications of each decomposition. -This assume some mathematical knowledge. -However, for the non-expert user, the above explanations will -be sufficient to understand the other features of the -\spadtype{RSEGSET} constructor. - -The input system {\bf lp} is decomposed in the sense -of Kalkbrener as finitely many regular sets {\bf T1,...,Ts} -such that the radical ideal generated by {\bf lp} -is the intersection of the radicals of the -saturated ideals of {\bf T1,...,Ts}. -In other words, the affine variety associated with {\bf lp} -is the union of the closures (w.r.t. Zarisky topology) -of the regular-zeros sets of {\bf T1,...,Ts}. - -{\bf N. B.} The prime ideals associated with the -radical of the saturated ideal of -a regular triangular set have all the same dimension; -moreover these prime ideals can be given by characteristic -sets with the same main variables. -Thus a decomposition in the sense of Kalkbrener -is unmixed dimensional. -Then it can be viewed as a {\em lazy} -decomposition into prime ideals (some of these -prime ideals being merged into unmixed dimensional ideals). - -Now we explain the other way of solving by means of regular -triangular sets. -The input system {\bf lp} is decomposed in the sense -of Lazard as finitely many regular triangular sets {\bf T1,...,Ts} -such that the affine variety associated with {\bf lp} -is the union of the regular-zeros sets of {\bf T1,...,Ts}. -Thus a decomposition in the sense of Lazard is also -a decomposition in the sense of Kalkbrener; the converse -is false as we have seen before. - -When the input system has a finite number of solutions, -both ways of solving provide similar decompositions as -we shall see with this second example (Caprasse). - - -\xtc{ -Define a polynomial system. -}{ -\spadpaste{f1 := y**2*z+2*x*y*t-2*x-z \free{z} \free{x} \free{y} \free{t} \bound{f1}} -} -\xtc{ -}{ -\spadpaste{f2 := -x**3*z+ 4*x*y**2*z+ 4*x**2*y*t+ 2*y**3*t+ 4*x**2- 10*y**2+ 4*x*z- 10*y*t+ 2 \free{z} \free{x} \free{y} \free{t} \bound{f2}} -} -\xtc{ -}{ -\spadpaste{f3 := 2*y*z*t+x*t**2-x-2*z \free{z} \free{x} \free{y} \free{t} \bound{f3}} -} -\xtc{ -}{ -\spadpaste{f4 := -x*z**3+ 4*y*z**2*t+ 4*x*z*t**2+ 2*y*t**3+ 4*x*z+ 4*z**2-10*y*t- 10*t**2+2 \free{z} \free{x} \free{y} \free{t} \bound{f4}} -} -\xtc{ -}{ -\spadpaste{lf := [f1, f2, f3, f4] \free{f1} \free{f2} \free{f3} \free{f4} \bound{lf}} -} - -\xtc{ -First of all, let us solve this system in the sense of Kalkbrener. -}{ -\spadpaste{zeroSetSplit(lf)$T \free{lf} \free{T}} -} -\xtc{ -And now in the sense of Lazard (or Wu and other authors). -}{ -\spadpaste{lts2 := zeroSetSplit(lf,false)$T \free{lf} \free{T} \bound{lts2}} -} - -Up to the ordering of the components, both decompositions are identical. - -\xtc{ -Let us check that each component has a finite number of solutions. -}{ -\spadpaste{[coHeight(ts) for ts in lts2] \free{lts2}} -} - -\xtc{ -Let us count the degrees of each component, -}{ -\spadpaste{degrees := [degree(ts) for ts in lts2] \free{lts2} \bound{degrees}} -} -\xtc{ -and compute their sum. -}{ -\spadpaste{reduce(+,degrees) \free{degrees}} -} - -We study now the options of the \spadfun{zeroSetSplit} operation. -As we have seen yet, there is an optional second argument -which is a boolean value. If this value is true (this -is the default) then the decomposition is computed -in the sense of Kalkbrener, otherwise it is computed -in the sense of Lazard. - -There is a second boolean optional argument that -can be used (in that case the first optional -argument must be present). -This second option allows you to get some information -during the computations. - -Therefore, we need to understand a little what is -going on during the computations. -An important feature of the algorithm is that -the intermediate computations are managed in some sense -like the processes of a Unix system. -Indeed, each intermediate computation may generate -other intermediate computations and the management -of all these computations is a crucial task for -the efficiency. -Thus any intermediate computation may be suspended, -killed or resumed, depending on algebraic considerations -that determine priorities for these processes. -The goal is of course to go as fast as possible -towards the final decomposition which means to avoid -as much as possible unnecessary computations. - -To follow the computations, one needs to set to -\spad{true} the second argument. -Then a lot of numbers and letters are displayed. -Between a \spad{[} and a \spad{]} one has -the state of the processes at a given time. -Just after \spad{[} one can see the number of -processes. -Then each process is represented by two numbers -between \spad{<} and \spad{>}. -A process consists of a list of polynomial {\bf ps} -and a triangular set {\bf ts}; its goal is to compute -the common zeros of {\bf ps} that belong to the -regular-zeros set of {\bf ts}. -After the processes, the number between pipes -gives the total number of polynomials -in all the sets \spad{ps}. -Finally, the number between braces gives the number -of components of a decomposition that are already -computed. This number may decrease. - -Let us take a third example (Czapor-Geddes-Wang) to see how these -informations are displayed. - -\xtc{ -Define a polynomial system. -}{ -\spadpaste{u : R := 2 \free{R} \bound{u}} -} -\xtc{ -}{ -\spadpaste{q1 := 2*(u-1)**2+ 2*(x-z*x+z**2)+ y**2*(x-1)**2- 2*u*x+ 2*y*t*(1-x)*(x-z)+ 2*u*z*t*(t-y)+ u**2*t**2*(1-2*z)+ 2*u*t**2*(z-x)+ 2*u*t*y*(z-1)+ 2*u*z*x*(y+1)+ (u**2-2*u)*z**2*t**2+ 2*u**2*z**2+ 4*u*(1-u)*z+ t**2*(z-x)**2 \free{z} \free{x} \free{y} \free{t} \free{u} \bound{q1}} -} -\xtc{ -}{ -\spadpaste{q2 := t*(2*z+1)*(x-z)+ y*(z+2)*(1-x)+ u*(u-2)*t+ u*(1-2*u)*z*t+ u*y*(x+u-z*x-1)+ u*(u+1)*z**2*t \free{z} \free{x} \free{y} \free{t} \free{u} \bound{q2}} -} -\xtc{ -}{ -\spadpaste{q3 := -u**2*(z-1)**2+ 2*z*(z-x)-2*(x-1) \free{z} \free{x} \free{y} \free{t} \free{u} \bound{q3}} -} -\xtc{ -}{ -\spadpaste{q4 := u**2+4*(z-x**2)+3*y**2*(x-1)**2- 3*t**2*(z-x)**2 +3*u**2*t**2*(z-1)**2+u**2*z*(z-2)+6*u*t*y*(z+x+z*x-1) \free{z} \free{x} \free{y} \free{t} \free{u} \bound{q4}} -} -\xtc{ -}{ -\spadpaste{lq := [q1, q2, q3, q4] \free{q1} \free{q2} \free{q3} \free{q4} \bound{lq}} -} - - -\xtc{ -Let us try the information option. -N.B. The timing should be between 1 and 10 minutes, depending on your machine. -}{ -\spadpaste{zeroSetSplit(lq,true,true)$T \free{lq} \free{T}} -} - -Between a sequence of processes, thus between a \spad{]} and a \spad{[} -you can see capital letters \spad{W, G, I} and lower case letters -\spad{i, w}. Each time a capital letter appears a non-trivial computation -has be performed and its result is put in a hash-table. -Each time a lower case letter appears a needed result has been -found in an hash-table. -The use of these hash-tables generally speed up the computations. -However, on very large systems, it may happen that these hash-tables -become too big to be handle by your Axiom configuration. -Then in these exceptional cases, you may prefer getting a result -(even if it takes a long time) than getting nothing. -Hence you need to know how to prevent the \spadtype{RSEGSET} constructor -from using these hash-tables. -In that case you will be using the \spadfun{zeroSetSplit} with five arguments. -The first one is the input system {\bf lp} as above. -The second one is a boolean value \spad{hash?} which is \spad{true} -iff you want to use hash-tables. -The third one is boolean value \spad{clos?} which is \spad{true} -iff you want to solve your system in the sense of Kalkbrener, -the other way remaining that of Lazard. -The fourth argument is boolean value \spad{info?} which is \spad{true} -iff you want to display information during the computations. -The last one is boolean value \spad{prep?} which is \spad{true} -iff you want to use some heuristics that are performed on the -input system before starting the real algorithm. -The value of this flag is \spad{true} when you are using \spadfun{zeroSetSplit} -with less than five arguments. -Note that there is no available signature for \spadfun{zeroSetSplit} with -four arguments. - -We finish this section by some remarks about both ways of -solving, in the sense of Kalkbrener or in the sense of Lazard. -For problems with a finite number of solutions, there are -theoretically equivalent and the resulting decompositions -are identical, up to the ordering of the components. -However, when solving in the sense of Lazard, the algorithm -behaves differently. -In that case, it becomes more incremental than in the sense -of Kalkbrener. That means the polynomials of the input system -are considered one after another whereas in the sense of Kalkbrener -the input system is treated more globally. - -This makes an important difference in positive dimension. -Indeed when solving in the sense of Kalkbrener, the -{\em Primeidealkettensatz} of Krull is used. -That means any regular triangular containing more polynomials -than the input system can be deleted. -This is not possible when solving in the sense of Lazard. -This explains why Kalkbrener's decompositions -usually contain less components than those of Lazard. -However, it may happen with some examples that the incremental process -(that cannot be used when solving in the sense of Kalkbrener) -provide a more efficient way of solving than the global one -even if the {\em Primeidealkettensatz} is used. -Thus just try both, with the various options, before concluding -that you cannot solve your favorite system with \spadfun{zeroSetSplit}. -There exist more options at the development level that are not -currently available in this public version. -So you are welcome to contact {\em marc@nag.co.uk} for more -information and help. - -\endscroll -\autobuttons -\end{page} - -@ -\section{roman.ht} -<>= -\newcommand{\RomanNumeralXmpTitle}{RomanNumeral} -\newcommand{\RomanNumeralXmpNumber}{9.68} - -@ -\subsection{RomanNumeral} -\label{RomanNumeralXmpPage} -\index{pages!RomanNumeralXmpPage!roman.ht} -\index{roman.ht!pages!RomanNumeralXmpPage} -\index{RomanNumeralXmpPage!roman.ht!pages} -<>= -\begin{page}{RomanNumeralXmpPage}{RomanNumeral} -\beginscroll - -The Roman numeral package was added to Axiom in MCMLXXXVI -for use in denoting higher order derivatives. - -\xtc{ -For example, let \spad{f} be a symbolic operator. -}{ -\spadpaste{f := operator 'f \bound{f}} -} -\xtc{ -This is the seventh derivative of \spad{f} with respect to \spad{x}. -}{ -\spadpaste{D(f x,x,7) \free{f}} -} -\xtc{ -You can have integers printed as Roman numerals by declaring variables to -be of type \spadtype{RomanNumeral} (abbreviation \spadtype{ROMAN}). -}{ -\spadpaste{a := roman(1978 - 1965) \bound{a}} -} - -This package now has a small but devoted group of followers that claim -this domain has shown its efficacy in many other contexts. -They claim that Roman numerals are every bit as useful as ordinary -integers. -\xtc{ -In a sense, they are correct, because Roman numerals form a ring and you -can therefore construct polynomials with Roman numeral coefficients, -matrices over Roman numerals, etc.. -}{ -\spadpaste{x : UTS(ROMAN,'x,0) := x \bound{x}} -} -\xtc{ -Was Fibonacci Italian or ROMAN? -}{ -\spadpaste{recip(1 - x - x**2) \free{x}} -} -\xtc{ -You can also construct fractions with Roman numeral numerators and -denominators, as this matrix Hilberticus illustrates. -}{ -\spadpaste{m : MATRIX FRAC ROMAN \bound{m}} -} -\xtc{ -}{ -\spadpaste{m := matrix [[1/(i + j) for i in 1..3] for j in 1..3] \free{m} \bound{m1}} -} -\xtc{ -Note that the inverse of the matrix has integral \spadtype{ROMAN} entries. -}{ -\spadpaste{inverse m \free{m1}} -} -\xtc{ -Unfortunately, the spoil-sports say that the fun stops when -the numbers get big---mostly -because the Romans didn't establish conventions about representing -very large numbers. -}{ -\spadpaste{y := factorial 10 \bound{y}} -} -\xtc{ -You work it out! -}{ -\spadpaste{roman y \free{y}} -} -Issue the system command -\spadcmd{)show RomanNumeral} -to display the full list of operations defined by -\spadtype{RomanNumeral}. -\endscroll -\autobuttons -\end{page} - -@ -\section{seg.ht} -<>= -\newcommand{\SegmentXmpTitle}{Segment} -\newcommand{\SegmentXmpNumber}{9.69} - -@ -\subsection{Segment} -\label{SegmentXmpPage} -\begin{itemize} -\item SegmentBindingXmpPage \ref{SegmentBindingXmpPage} on -page~pageref{SegmentBindingXmpPage} -\item UniversalSegmentXmpPage \ref{UniversalSegmentXmpPage} on -page~pageref{UniversalSegmentXmpPage} -\end{itemize} -\index{pages!SegmentXmpPage!seg.ht} -\index{seg.ht!pages!SegmentXmpPage} -\index{SegmentXmpPage!seg.ht!pages} -<>= -\begin{page}{SegmentXmpPage}{Segment} -\beginscroll - -The \spadtype{Segment} domain provides a generalized interval type. - -\labelSpace{2pc} -\xtc{ -Segments are created using the \spadSyntax{..} construct -by indicating the (included) end points. -}{ -\spadpaste{s := 3..10 \bound{s}} -} -\xtc{ -The first end point is called the \spadfunFrom{lo}{Segment} -and the second is called \spadfunFrom{hi}{Segment}. -}{ -\spadpaste{lo s \free{s}} -} -\xtc{ -These names are used even though the end points might belong to an -unordered set. -}{ -\spadpaste{hi s \free{s}} -} - -\xtc{ -In addition to the end points, each segment has an integer ``increment.'' -An increment can be specified using the ``\spad{by}'' construct. -\spadkey{by} -}{ -\spadpaste{t := 10..3 by -2 \bound{t}} -} -\xtc{ -This part can be obtained using the \spadfunFrom{incr}{Segment} function. -}{ -\spadpaste{incr s \free{s}} -} -\xtc{ -Unless otherwise specified, the increment is \spad{1}. -}{ -\spadpaste{incr t \free{t}} -} - -\xtc{ -A single value can be converted to a segment with equal end points. -This happens if segments and single values are mixed in a list. -}{ -\spadpaste{l := [1..3, 5, 9, 15..11 by -1] \bound{l}} -} - -\xtc{ -If the underlying type is an ordered ring, it is possible to perform -additional operations. -The \spadfunFrom{expand}{Segment} operation creates a list of -points in a segment. -}{ -\spadpaste{expand s \free{s}} -} -\xtc{ -If \spad{k > 0}, then \spad{expand(l..h by k)} creates the list -\spad{[l, l+k, ..., lN]} where \spad{lN <= h < lN+k}. -If \spad{k < 0}, then \spad{lN >= h > lN+k}. -}{ -\spadpaste{expand t \free{t}} -} - -\xtc{ -It is also possible to expand a list of segments. This is equivalent -to appending lists obtained by expanding each segment individually. -}{ -\spadpaste{expand l \free{l}} -} - -For more information on related topics, see -\downlink{`SegmentBinding'}{SegmentBindingXmpPage}\ignore{SegmentBinding} and -\downlink{`UniversalSegment'}{UniversalSegmentXmpPage} -\ignore{UniversalSegment}. -% -\showBlurb{Segment} -\endscroll -\autobuttons -\end{page} - -@ -\section{segbind.ht} -<>= -\newcommand{\SegmentBindingXmpTitle}{SegmentBinding} -\newcommand{\SegmentBindingXmpNumber}{9.70} - -@ -\subsection{SegmentBinding} -\label{SegmentBindingXmpPage} -\begin{itemize} -\item SegmentXmpPage \ref{SegmentXmpPage} on -page~pageref{SegmentXmpPage} -\item UniversalSegmentXmpPage \ref{UniversalSegmentXmpPage} on -page~pageref{UniversalSegmentXmpPage} -\end{itemize} -\index{pages!SegmentBindingXmpPage!segbind.ht} -\index{segbind.ht!pages!SegmentBindingXmpPage} -\index{SegmentBindingXmpPage!segbind.ht!pages} -<>= -\begin{page}{SegmentBindingXmpPage}{SegmentBinding} -\beginscroll - -The \spadtype{SegmentBinding} type is used -to indicate a range for a named symbol. - -\labelSpace{2pc} -\xtc{ -First give the symbol, then an \spadSyntax{=} and finally a -segment of values. -}{ -\spadpaste{x = a..b} -} -\xtc{ -This is used to provide a convenient -syntax for arguments to certain operations. -}{ -\spadpaste{sum(i**2, i = 0..n)} -} -\graphpaste{draw(x**2, x = -2..2)} - -\xtc{ -The left-hand side must be of type \spadtype{Symbol} but the -right-hand side can be a segment over any type. -}{ -\spadpaste{sb := y = 1/2..3/2 \bound{sb}} -} -\xtc{ -The left- and right-hand sides can be obtained using the -\spadfunFrom{variable}{SegmentBinding} and -\spadfunFrom{segment}{SegmentBinding} operations. -}{ -\spadpaste{variable(sb) \free{sb}} -} -\xtc{ -}{ -\spadpaste{segment(sb) \free{sb}} -} - -For more information on related topics, see -\downlink{`Segment'}{SegmentXmpPage}\ignore{Segment} and -\downlink{`UniversalSegment'}{UniversalSegmentXmpPage} -\ignore{UniversalSegment}. -% -\showBlurb{SegmentBinding} -\endscroll -\autobuttons -\end{page} -% - -@ -\section{set.ht} -<>= -\newcommand{\SetXmpTitle}{Set} -\newcommand{\SetXmpNumber}{9.71} - -@ -\subsection{Set} -\label{SetXmpPage} -See ListXmpPage \ref{ListXmpPage} on page~\pageref{ListXmpPage} -\index{pages!SetXmpPage!set.ht} -\index{set.ht!pages!SetXmpPage} -\index{SetXmpPage!set.ht!pages} -<>= -\begin{page}{SetXmpPage}{Set} -\beginscroll - -The \spadtype{Set} domain allows one to represent explicit finite -sets of values. -These are similar to lists, but duplicate elements are not allowed. -\xtc{ -Sets can be created by giving a fixed set of values \ldots -}{ -\spadpaste{s := set [x**2-1, y**2-1, z**2-1] \bound{s}} -} -\xtc{ -or by using a collect form, just as for lists. -In either case, the set is formed from a finite collection of values. -}{ -\spadpaste{t := set [x**i - i+1 for i in 2..10 | prime? i] \bound{t}} -} - -\xtc{ -The basic operations on sets are -\spadfunFrom{intersect}{Set}, \spadfunFrom{union}{Set}, -\spadfunFrom{difference}{Set}, -and \spadfunFrom{symmetricDifference}{Set}. -}{ -\spadpaste{i := intersect(s,t) \free{s t}\bound{i}} -} -\xtc{ -}{ -\spadpaste{u := union(s,t) \free{s t}\bound{u}} -} -\xtc{ -The set \spad{difference(s,t)} contains those members of \spad{s} which -are not in \spad{t}. -}{ -\spadpaste{difference(s,t) \free{s t}} -} -\xtc{ -The set \spad{symmetricDifference(s,t)} contains those elements which are -in \spad{s} or \spad{t} but not in both. -}{ -\spadpaste{symmetricDifference(s,t) \free{s t}} -} - -\xtc{ -Set membership is tested using the \spadfunFrom{member?}{Set} operation. -}{ -\spadpaste{member?(y, s) \free{s}} -} -\xtc{ -}{ -\spadpaste{member?((y+1)*(y-1), s) \free{s}} -} -\xtc{ -The \spadfunFrom{subset?}{Set} function determines whether one set is a subset -of another. -}{ -\spadpaste{subset?(i, s) \free{i s}} -} -\xtc{ -}{ -\spadpaste{subset?(u, s) \free{u s}} -} - -\xtc{ -When the base type is finite, the absolute complement of a set is -defined. -This finds the set of all multiplicative generators of -\spadtype{PrimeField 11}---the integers mod \spad{11.} -}{ -\spadpaste{gs := set [g for i in 1..11 | primitive?(g := i::PF 11)] \bound{gs}} -} -\xtc{ -The following values are not generators. -}{ -\spadpaste{complement gs \free{gs}} -} - -Often the members of a set are computed individually; in addition, -values can be inserted or removed from a set over the course of a -computation. -\xtc{ -There are two ways to do this: -}{ -\spadpaste{a := set [i**2 for i in 1..5] \bound{a}} -} -\xtc{ -One is to view a set as a data structure and to apply updating operations. -}{ -\spadpaste{insert!(32, a) \free{a}\bound{ainsert}} -} -\xtc{ -}{ -\spadpaste{remove!(25, a) \free{a}\bound{aremove}} -} -\xtc{ -}{ -\spadpaste{a \free{aremove ainsert}} -} -\xtc{ -The other way is to view a set as a mathematical entity and to -create new sets from old. -}{ -\spadpaste{b := b0 := set [i**2 for i in 1..5] \bound{b}} -} -\xtc{ -}{ -\spadpaste{b := union(b, {32}) \free{b}\bound{binsert}} -} -\xtc{ -}{ -\spadpaste{b := difference(b, {25}) \free{binsert}\bound{bremove}} -} -\xtc{ -}{ -\spadpaste{b0 \free{bremove}} -} - -For more information about lists, see -\downlink{`List'}{ListXmpPage}\ignore{List}. -\showBlurb{Set} -\endscroll -\autobuttons -\end{page} -% - -@ -\section{sint.ht} -<>= -\newcommand{\SingleIntegerXmpTitle}{SingleInteger} -\newcommand{\SingleIntegerXmpNumber}{9.72} - -@ -\subsection{SingleInteger} -\label{SingleIntegerXmpPage} -\begin{itemize} -\item ugTypesDeclare \ref{ugTypesDeclare} on -page~pageref{ugTypesDeclare} -\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on -page~pageref{ugTypesPkgCallPage} -\item ugBrowsePage \ref{ugBrowsePage} on -page~pageref{ugBrowsePage} -\end{itemize} -\index{pages!SingleIntegerXmpPage!sint.ht} -\index{sint.ht!pages!SingleIntegerXmpPage} -\index{SingleIntegerXmpPage!sint.ht!pages} -<>= -\begin{page}{SingleIntegerXmpPage}{SingleInteger} -\beginscroll - -The \axiomType{SingleInteger} domain is intended to provide support -in Axiom for machine integer arithmetic. -It is generally much faster than (bignum) \axiomType{Integer} arithmetic -but suffers from a limited range of values. -Since Axiom can be implemented on top of various -dialects of Lisp, the actual representation of small integers -may not correspond exactly to the host machines integer representation. - -In the CCL implementation of Axiom (Release 2.1 onwards) the underlying -representation of \axiomType{SingleInteger} -is the same as \axiomType{Integer}. -The underlying Lisp primitives treat machine-word sized computations -specially. - -\xtc{ -You can discover the minimum and maximum values in your implementation -by using \spadfunFrom{min}{SingleInteger} and \spadfunFrom{max}{SingleInteger}. -}{ -\spadpaste{min()\$SingleInteger} -} -\xtc{ -}{ -\spadpaste{max()\$SingleInteger} -} -\xtc{ -To avoid confusion with \axiomType{Integer}, which is the default -type for integers, you usually need to work with declared variables -(\downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} -in Section \ugTypesDeclareNumber\ignore{ugTypesDeclare}) \ldots -}{ -\spadpaste{a := 1234 :: SingleInteger \bound{a}} -} -\xtc{ -or use package calling -(\downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} -in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall}). -}{ -\spadpaste{b := 124\$SingleInteger \bound{b}} -} -\xtc{ -You can add, multiply and subtract \axiomType{SingleInteger} objects, -and ask for the greatest common divisor (\spadfun{gcd}). -}{ -\spadpaste{gcd(a,b) \free{a}\free{b}} -} -\xtc{ -The least common multiple (\spadfun{lcm}) is also available. -}{ -\spadpaste{lcm(a,b) \free{a}\free{b}} -} - -\xtc{ -Operations \spadfunFrom{mulmod}{SingleInteger}, -\spadfunFrom{addmod}{SingleInteger}, -\spadfunFrom{submod}{SingleInteger}, and -\spadfunFrom{invmod}{SingleInteger} are similar---they provide -arithmetic modulo a given small integer. -Here is \spad{5 * 6 {\tt mod} 13}. -}{ -\spadpaste{mulmod(5,6,13)\$SingleInteger} -} -\xtc{ -To reduce a small integer modulo a prime, use -\spadfunFrom{positiveRemainder}{SingleInteger}. -}{ -\spadpaste{positiveRemainder(37,13)\$SingleInteger} -} -\xtc{ -Operations -\spadfunFrom{And}{SingleInteger}, -\spadfunFrom{Or}{SingleInteger}, -\spadfunFrom{xor}{SingleInteger}, -and \spadfunFrom{Not}{SingleInteger} -provide bit level operations on small integers. -}{ -\spadpaste{And(3,4)\$SingleInteger} -} -\xtc{ -Use -\spad{shift(int,numToShift)} to shift bits, where -\spad{i} is shifted left if \spad{numToShift} is positive, right -if negative. -}{ -\spadpaste{shift(1,4)\$SingleInteger} -} -\xtc{ -}{ -\spadpaste{shift(31,-1)\$SingleInteger} -} - -Many other operations are available for small integers, including -many of those provided for \axiomType{Integer}. -To see the other operations, use the Browse \HyperName{} facility -(\downlink{``\ugBrowseTitle''}{ugBrowsePage} in Section -\ugBrowseNumber\ignore{ugBrowse}). -\showBlurb{SingleInteger}. -\endscroll -\autobuttons -\end{page} - -@ -\section{sqmatrix.ht} -<>= -\newcommand{\SquareMatrixXmpTitle}{SquareMatrix} -\newcommand{\SquareMatrixXmpNumber}{9.74} - -@ -\subsection{SquareMatrix} -\label{SquareMatrixXmpPage} -\begin{itemize} -\item MatrxiXmpPage \ref{MatrxiXmpPage} on -page~pageref{MatrxiXmpPage} -\item ugTypesWritingModesPage \ref{ugTypesWritingModesPage} on -page~pageref{ugTypesWritingModesPage} -\item ugTypesExposePage \ref{ugTypesExposePage} on -page~pageref{ugTypesExposePage} -\end{itemize} -\index{pages!SquareMatrixXmpPage!sqmatrix.ht} -\index{sqmatrix.ht!pages!SquareMatrixXmpPage} -\index{SquareMatrixXmpPage!sqmatrix.ht!pages} -<>= -\begin{page}{SquareMatrixXmpPage}{SquareMatrix} -\beginscroll - -The top level matrix type in Axiom is \spadtype{Matrix} -(see \downlink{`Matrix'}{MatrixXmpPage}\ignore{Matrix}), which -provides basic arithmetic and linear algebra functions. -However, since the matrices can be of any size it is not true that any pair -can be added or multiplied. -Thus \spadtype{Matrix} has little algebraic structure. - -Sometimes you want to use matrices as coefficients for polynomials -or in other algebraic contexts. In this case, \spadtype{SquareMatrix} -should be used. The domain \spadtype{SquareMatrix(n,R)} gives the ring of -\spad{n} by \spad{n} square matrices over \spad{R}. - -\xtc{ -Since \spadtype{SquareMatrix} is not normally exposed at the top level, -you must expose it before it can be used. -}{ -\spadpaste{)set expose add constructor SquareMatrix \bound{SQ}} -} -\xtc{ -Once \spad{SQMATRIX} has been exposed, -values can be created using the \spadfunFrom{squareMatrix}{SquareMatrix} -function. -}{ -\spadpaste{m := squareMatrix [[1,-\%i],[\%i,4]] \bound{m}\free{SQ}} -} -\xtc{ -The usual arithmetic operations are available. -}{ -\spadpaste{m*m - m \free{m}} -} -\xtc{ -Square matrices can be used where ring elements are required. -For example, here is a matrix with matrix entries. -}{ -\spadpaste{mm := squareMatrix [[m, 1], [1-m, m**2]] \free{m}\bound{mm}} -} -\xtc{ -Or you can construct a polynomial with square matrix coefficients. -}{ -\spadpaste{p := (x + m)**2 \free{m}\bound{p}} -} -\xtc{ -This value can be converted to a square matrix with polynomial coefficients. -}{ -\spadpaste{p::SquareMatrix(2, ?) \free{p}} -} - -For more information on related topics, see -\downlink{``\ugTypesWritingModesTitle''}{ugTypesWritingModesPage} -in Section \ugTypesWritingModesNumber\ignore{ugTypesWritingModes}, -\downlink{``\ugTypesExposeTitle''}{ugTypesExposePage} -in Section \ugTypesExposeNumber\ignore{ugTypesExpose}, and -\downlink{`Matrix'}{MatrixXmpPage}\ignore{Matrix}. -\showBlurb{SquareMatrix} -\endscroll -\autobuttons -\end{page} - -@ -\section{sregset.ht} -<>= -\newcommand{\SquareFreeRegularTriangularSetXmpTitle}{SquareFreeRegularTriangularSet} -\newcommand{\SquareFreeRegularTriangularSetXmpNumber}{9.75} - -@ -\subsection{SquareFreeRegularTriangularSet} -\label{SquareFreeRegularTriangularSetXmpPage} -\index{pages!SquareFreeRegularTriangularSetXmpPage!sregset.ht} -\index{sregset.ht!pages!SquareFreeRegularTriangularSetXmpPage} -\index{SquareFreeRegularTriangularSetXmpPage!sregset.ht!pages} -<>= -\begin{page}{SquareFreeRegularTriangularSetXmpPage} -{SquareFreeRegularTriangularSet} -\beginscroll -The \spadtype{SquareFreeRegularTriangularSet} domain constructor implements -square-free regular triangular sets. -See the \spadtype{RegularTriangularSet} domain constructor -for general regular triangular sets. -Let {\em T} be a regular triangular set consisting of polynomials -{\em t1, ..., tm} ordered by increasing main variables. -The regular triangular set {\em T} is square-free if {\em T} -is empty or if {\em t1, ..., tm-1} is square-free and if -the polynomial {\em tm} is square-free as -a univariate polynomial with coefficients in the tower -of simple extensions associated with {\em t1, ..., tm-1}. - -The main interest of square-free regular triangular sets -is that their associated towers of simple extensions -are product of fields. -Consequently, the saturated ideal of a square-free regular triangular set -is radical. -This property simplifies some of the operations related -to regular triangular sets. -However, building square-free regular triangular sets -is generally more expensive than building -general regular triangular sets. - -As the \spadtype{RegularTriangularSet} domain constructor, -the \spadtype{SquareFreeRegularTriangularSet} -domain constructor also implements -a method for solving polynomial systems by means of regular triangular sets. -This is in fact the same method with some adaptations to take into -account the fact that the computed regular chains are square-free. -Note that it is also possible to pass from a decomposition -into general regular triangular sets to a decomposition into -square-free regular triangular sets. -This conversion is used internally by the -\spadtype{LazardSetSolvingPackage} package constructor. - -{\bf N.B.} When solving polynomial systems with the -\spadtype{SquareFreeRegularTriangularSet} domain constructor -or the \spadtype{LazardSetSolvingPackage} package constructor, -decompositions have no redundant components. -See also \spadtype{LexTriangularPackage} and -\spadtype{ZeroDimensionalSolvePackage} for the case of -algebraic systems with a finite number of (complex) solutions. - -We shall explain now how to use the constructor -\spadtype{SquareFreeRegularTriangularSet}. - -This constructor takes four arguments. -The first one, {\bf R}, is the coefficient ring of the polynomials; -it must belong to the category \spadtype{GcdDomain}. -The second one, {\bf E}, is the exponent monoid of the polynomials; -it must belong to the category \spadtype{OrderedAbelianMonoidSup}. -the third one, {\bf V}, is the ordered set of variables; -it must belong to the category \spadtype{OrderedSet}. -The last one is the polynomial ring; -it must belong to the category \spadtype{RecursivePolynomialCategory(R,E,V)}. -The abbreviation for \spadtype{SquareFreeRegularTriangularSet} is -\spadtype{SREGSET}. - -Note that the way of understanding triangular decompositions -is detailed in the example of the \spadtype{RegularTriangularSet} -constructor. - -\xtc{ -Let us illustrate the use of this constructor -with one example (Donati-Traverso). -Define the coefficient ring. -}{ -\spadpaste{R := Integer \bound{R}} -} -\xtc{ -Define the list of variables, -}{ -\spadpaste{ls : List Symbol := [x,y,z,t] \bound{ls}} -} -\xtc{ -and make it an ordered set; -}{ -\spadpaste{V := OVAR(ls) \free{ls} \bound{V}} -} -\xtc{ -then define the exponent monoid. -}{ -\spadpaste{E := IndexedExponents V \free{V} \bound{E}} -} -\xtc{ -Define the polynomial ring. -}{ -\spadpaste{P := NSMP(R, V) \free{R} \free{V} \bound{P}} -} -\xtc{ -Let the variables be polynomial. -}{ -\spadpaste{x: P := 'x \free{P} \bound{x}} -} -\xtc{ -}{ -\spadpaste{y: P := 'y \free{P} \bound{y}} -} -\xtc{ -}{ -\spadpaste{z: P := 'z \free{P} \bound{z}} -} -\xtc{ -}{ -\spadpaste{t: P := 't \free{P} \bound{t}} -} -\xtc{ -Now call the \spadtype{SquareFreeRegularTriangularSet} domain constructor. -}{ -\spadpaste{ST := SREGSET(R,E,V,P) \free{R} \free{E} \free{V} \free{P} \bound{ST} } -} -\xtc{ -Define a polynomial system. -}{ -\spadpaste{p1 := x ** 31 - x ** 6 - x - y \free{x} \free{y} \bound{p1}} -} -\xtc{ -}{ -\spadpaste{p2 := x ** 8 - z \free{x} \free{z} \bound{p2}} -} -\xtc{ -}{ -\spadpaste{p3 := x ** 10 - t \free{x} \free{t} \bound{p3}} -} -\xtc{ -}{ -\spadpaste{lp := [p1, p2, p3] \free{p1} \free{p2} \free{p3} \bound{lp}} -} - -\xtc{ -First of all, let us solve this system in the sense of Kalkbrener. -}{ -\spadpaste{zeroSetSplit(lp)$ST \free{lp} \free{ST}} -} -\xtc{ -And now in the sense of Lazard (or Wu and other authors). -}{ -\spadpaste{zeroSetSplit(lp,false)$ST \free{lp} \free{ST} \bound{lts}} -} - -Now to see the difference with the \spadtype{RegularTriangularSet} domain constructor, -\xtc{ -we define: -}{ -\spadpaste{T := REGSET(R,E,V,P) \free{R} \free{E} \free{V} \free{P} \bound{T} } -} -\xtc{ -and compute: -}{ -\spadpaste{lts := zeroSetSplit(lp,false)$T \free{lp} \free{T} \bound{lts}} -} -If you look at the second set in both decompositions in the sense of Lazard, -you will see that the polynomial with main variable {\bf y} is not the same. - -Let us understand what has happened. -\xtc{ -We define: -}{ -\spadpaste{ts := lts.2 \free{lts} \bound{ts}} -} -\xtc{ -}{ -\spadpaste{pol := select(ts,'y)$T \free{ts} \free{y} \free{T} \bound{pol}} -} -\xtc{ -}{ -\spadpaste{tower := collectUnder(ts,'y)$T \free{ts} \free{y} \free{T} \bound{tower}} -} -\xtc{ -}{ -\spadpaste{pack := RegularTriangularSetGcdPackage(R,E,V,P,T) \free{R} \free{E} \free{V} \free{P} \free{T} \bound{pack}} -} -\xtc{ -Then we compute: -}{ -\spadpaste{toseSquareFreePart(pol,tower)$pack \free{pol} \free{tower} \free{pack}} -} -\endscroll -\autobuttons -\end{page} - -@ -\section{stbl.ht} -<>= -\newcommand{\SparseTableXmpTitle}{SparseTable} -\newcommand{\SparseTableXmpNumber}{9.73} - -@ -\subsection{SparseTable} -\label{SparseTableXmpPage} -\begin{itemize} -\item TableXmpPage \ref{TableXmpPage} on -page~pageref{TableXmpPage} -\item GeneralSparseTableXmpPage \ref{GeneralSparseTableXmpPage} on -page~pageref{GeneralSparseTableXmpPage} -\end{itemize} -\index{pages!SparseTableXmpPage!stbl.ht} -\index{stbl.ht!pages!SparseTableXmpPage} -\index{SparseTableXmpPage!stbl.ht!pages} -<>= -\begin{page}{SparseTableXmpPage}{SparseTable} -\beginscroll -% -The \spadtype{SparseTable} domain provides a general purpose -table type with default entries. -\xtc{ -Here we create a table to save strings under integer keys. -The value \spad{"Try again!"} is returned if no other value has been -stored for a key. -}{ -\spadpaste{t: SparseTable(Integer, String, "Try again!") := table() \bound{t}} -} -\xtc{ -Entries can be stored in the table. -}{ -\spadpaste{t.3 := "Number three" \free{t}\bound{t1}} -} -\xtc{ -}{ -\spadpaste{t.4 := "Number four" \free{t}\bound{t2}} -} -\xtc{ -These values can be retrieved as usual, but if a look up fails -the default entry will be returned. -}{ -\spadpaste{t.3 \free{t1}} -} -\xtc{ -}{ -\spadpaste{t.2 \free{t}} -} -\xtc{ -To see which values are explicitly stored, the -\spadfunFrom{keys}{SparseTable} and \spadfunFrom{entries}{SparseTable} -functions can be used. -}{ -\spadpaste{keys t \free{t1 t2}} -} -\xtc{ -}{ -\spadpaste{entries t \free{t1 t2}} -} -If a specific table representation -is required, the \spadtype{GeneralSparseTable} constructor should be used. -The domain \spadtype{SparseTable(K, E, dflt)} is equivalent to -\spadtype{GeneralSparseTable(K,E, Table(K,E), dflt)}. -For more information, see -\downlink{`Table'}{TableXmpPage}\ignore{Table} and -\downlink{`GeneralSparseTable'}{GeneralSparseTableXmpPage} -\ignore{GeneralSparseTable}. -\showBlurb{SparseTable} -\endscroll -\autobuttons -\end{page} - -@ -\section{stream.ht} -<>= -\newcommand{\StreamXmpTitle}{Stream} -\newcommand{\StreamXmpNumber}{9.76} - -@ -\subsection{Stream} -\label{StreamXmpPage} -\begin{itemize} -\item ugLangItsPage \ref{ugLangItsPage} on -page~pageref{ugLangItsPage} -\item ugProblemSeriesPage \ref{ugProblemSeriesPage} on -page~pageref{ugProblemSeriesPage} -\item ContinuedFractionXmpPage \ref{ContinuedFractionXmpPage} on -page~pageref{ContinuedFractionXmpPage} -\item ListXmpPage \ref{ListXmpPage} on -page~pageref{ListXmpPage} -\end{itemize} -\index{pages!StreamXmpPage!stream.ht} -\index{stream.ht!pages!StreamXmpPage} -\index{StreamXmpPage!stream.ht!pages} -<>= -\begin{page}{StreamXmpPage}{Stream} -\beginscroll - -A \spadtype{Stream} object is represented as a list whose -last element contains the -wherewithal to create the next element, should it ever be required. -\xtc{ -Let \spad{ints} be the infinite stream of non-negative integers. -}{ -\spadpaste{ints := [i for i in 0..] \bound{ints}} -} -By default, ten stream elements are calculated. -This number may be changed to something else by the system command -\spadcmd{)set streams calculate}. -For the display purposes of this book, we have chosen a smaller value. -\xtc{ -More generally, you can construct a stream by specifying its initial -value and a function which, when given an element, creates the next element. -}{ -\spadpaste{f : List INT -> List INT \bound{fdec}} -} -\xtc{ -}{ -\spadpaste{f x == [x.1 + x.2, x.1] \bound{f}\free{fdec}} -} -\xtc{ -}{ -\spadpaste{fibs := [i.2 for i in [generate(f,[1,1])]] \bound{fibs}\free{f}} -} -\xtc{ -You can create the stream of odd non-negative integers by either filtering -them from the integers, or by evaluating an expression for each integer. -}{ -\spadpaste{[i for i in ints | odd? i] \free{ints}} -} -\xtc{ -}{ -\spadpaste{odds := [2*i+1 for i in ints]\bound{odds}\free{ints}} -} -\xtc{ -You can accumulate the initial segments of a stream using the -\spadfunFrom{scan}{StreamFunctions2} operation. -}{ -\spadpaste{scan(0,+,odds) \free{odds}} -} -\xtc{ -The corresponding elements of -two or more streams can be combined in this way. -}{ -\spadpaste{[i*j for i in ints for j in odds]\free{ints} \free{odds}} -} -\xtc{ -}{ -\spadpaste{map(*,ints,odds)\free{ints odds}} -} -\xtc{ -Many operations similar to those applicable to lists are available for -streams. -}{ -\spadpaste{first ints \free{ints}} -} -\xtc{ -}{ -\spadpaste{rest ints \free{ints}} -} -\xtc{ -}{ -\spadpaste{fibs 20 \free{fibs}} -} -The packages \spadtype{StreamFunctions1}, -\spadtype{StreamFunctions2} and -\spadtype{StreamFunctions3} export some useful stream manipulation -operations. -For more information, see -\downlink{``\ugLangItsTitle''}{ugLangItsPage} in Section -\ugLangItsNumber\ignore{ugLangIts}, -\downlink{``\ugProblemSeriesTitle''}{ugProblemSeriesPage} -in Section \ugProblemSeriesNumber\ignore{ugProblemSeries}, -\downlink{`ContinuedFraction'}{ContinuedFractionXmpPage} -\ignore{ContinuedFraction}, and -\downlink{`List'}{ListXmpPage}\ignore{List}. -% -\showBlurb{Stream} -\endscroll -\autobuttons -\end{page} - -@ -\section{string.ht} -<>= -\newcommand{\StringXmpTitle}{String} -\newcommand{\StringXmpNumber}{9.77} - -@ -\subsection{String} -\label{StringXmpPage} -\begin{itemize} -\item CharacterXmpPage \ref{CharacterXmpPage} on -page~pageref{CharacterXmpPage} -\item CharacterClassXmpPage \ref{CharacterClassXmpPage} on -page~pageref{CharacterClassXmpPage} -\end{itemize} -\index{pages!StringXmpPage!string.ht} -\index{string.ht!pages!StringXmpPage} -\index{StringXmpPage!string.ht!pages} -<>= -\begin{page}{StringXmpPage}{String} -\beginscroll - -The type \spadtype{String} provides character strings. Character -strings provide all the operations for a one-dimensional array of -characters, plus additional operations for manipulating text. For -more information on related topics, see -\downlink{`Character'}{CharacterXmpPage}\ignore{Character} and -\downlink{`CharacterClass'}{CharacterClassXmpPage}\ignore{CharacterClass}. -You can also issue the system command \spadcmd{)show String} to -display the full list of operations defined by \spadtype{String}. - -\xtc{ -String values can be created using double quotes. -}{ -\spadpaste{hello := "Hello, I'm Axiom!" \bound{hello}} -} -\xtc{ -Note, however, that double quotes and underscores must be preceded by -an extra underscore. -}{ -\spadpaste{said := "Jane said, _"Look!_"" \bound{said}} -} -\xtc{ -}{ -\spadpaste{saw := "She saw exactly one underscore: __." \bound{saw}} -} -\xtc{ -It is also possible to use \spadfunFrom{new}{String} to create a string of any size -filled with a given character. -Since there are many \spadfun{new} functions -it is necessary to indicate the desired type. -}{ -\spadpaste{gasp: String := new(32, char "x") \bound{gasp}} -} -\xtc{ -The length of a string is given by \spadopFrom{\#}{List}. -}{ -\spadpaste{\#gasp \free{gasp}} -} -\xtc{ -Indexing operations allow characters to be extracted or replaced in strings. -For any string \spad{s}, indices lie in the range \spad{1..\#s}. -}{ -\spadpaste{hello.2 \free{hello}} -} -\xtc{ -Indexing is really just the application of a string to a subscript, -so any application syntax works. -}{ -\spadpaste{hello 2 \free{hello}} -} -\xtc{ -}{ -\spadpaste{hello(2) \free{hello}} -} -\xtc{ -If it is important not to modify a given string, it should be copied -before any updating operations are used. -}{ -\spadpaste{hullo := copy hello \free{hello}\bound{hullo0}} -} -\xtc{ -}{ -\spadpaste{hullo.2 := char "u"; [hello, hullo] \free{hullo0 hello}\bound{hullo}} -} - -\xtc{ -Operations are provided to split and join strings. -The \spadfunFrom{concat}{String} operation allows several strings to be joined -together. -}{ -\spadpaste{saidsaw := concat ["alpha","---","omega"] \bound{saidsaw}} -} -\xtc{ -There is a version of \spadfunFrom{concat}{String} that works with -two strings. -}{ -\spadpaste{concat("hello ","goodbye")} -} -\xtc{ -Juxtaposition can also be used to concatenate strings. -}{ -\spadpaste{"This " "is " "several " "strings " "concatenated."} -} -\xtc{ -Substrings are obtained by giving an index range. -}{ -\spadpaste{hello(1..5) \free{hello}} -} -\xtc{ -}{ -\spadpaste{hello(8..) \free{hello}} -} -\xtc{ -A string can be split into several substrings by giving a separation character -or character class. -}{ -\spadpaste{split(hello, char " ") \free{hello}} -} -\xtc{ -}{ -\spadpaste{other := complement alphanumeric(); \bound{other}} -} -\xtc{ -}{ -\spadpaste{split(saidsaw, other) \free{saidsaw other}} -} -\xtc{ -Unwanted characters can be trimmed from the beginning or end of a string -using the operations \spadfunFrom{trim}{String}, \spadfunFrom{leftTrim}{String} -and \spadfunFrom{rightTrim}{String}. -}{ -\spadpaste{trim ("\#\# ++ relax ++ \#\#", char "\#")} -} -\xtc{ -Each of these functions takes a string and a second argument to specify -the characters to be discarded. -}{ -\spadpaste{trim ("\#\# ++ relax ++ \#\#", other) \free{other}} -} -\xtc{ -The second argument can be given -either as a single character or as a character class. -}{ -\spadpaste{leftTrim ("\#\# ++ relax ++ \#\#", other) \free{other}} -} -\xtc{ -}{ -\spadpaste{rightTrim("\#\# ++ relax ++ \#\#", other) \free{other}} -} - -\xtc{ -Strings can be changed to upper case or lower case using the operations -\spadfunFrom{upperCase}{String}, \spadfunFromX{upperCase}{String}, -\spadfunFrom{lowerCase}{String} and -\spadfunFromX{lowerCase}{String}. -}{ -\spadpaste{upperCase hello \free{hello}} -} -\xtc{ -The versions with the exclamation mark -change the original string, while the others produce a copy. -}{ -\spadpaste{lowerCase hello \free{hello}} -} - -\xtc{ -Some basic string matching is provided. -The function \spadfunFrom{prefix?}{String} -tests whether one string is an initial prefix of another. -}{ -\spadpaste{prefix?("He", "Hello")} -} -\xtc{ -}{ -\spadpaste{prefix?("Her", "Hello")} -} -\xtc{ -A similar function, \spadfunFrom{suffix?}{String}, tests for suffixes. -}{ -\spadpaste{suffix?("", "Hello")} -} -\xtc{ -}{ -\spadpaste{suffix?("LO", "Hello")} -} -\xtc{ -The function \spadfunFrom{substring?}{String} tests for a substring -given a starting -position. -}{ -\spadpaste{substring?("ll", "Hello", 3)} -} -\xtc{ -}{ -\spadpaste{substring?("ll", "Hello", 4)} -} - -\xtc{ -A number of \spadfunFrom{position}{String} functions locate things in strings. -If the first argument to position is a string, then \spad{position(s,t,i)} -finds the location of \spad{s} as a substring of \spad{t} starting the -search at position \spad{i}. -}{ -\spadpaste{n := position("nd", "underground", 1) \bound{n}} -} -\xtc{ -}{ -\spadpaste{n := position("nd", "underground", n+1) \free{n} \bound{n1}} -} -\xtc{ -If \spad{s} is not found, then \spad{0} is returned (\spad{minIndex(s)-1} -in \spadtype{IndexedString}). -}{ -\spadpaste{n := position("nd", "underground", n+1) \free{n1}\bound{n2}} -} -\xtc{ -To search for a specific character or a member of a character class, -a different first argument is used. -}{ -\spadpaste{position(char "d", "underground", 1)} -} -\xtc{ -}{ -\spadpaste{position(hexDigit(), "underground", 1)} -} - -\endscroll -\autobuttons -\end{page} - -@ -\section{strtbl.ht} -<>= -\newcommand{\StringTableXmpTitle}{StringTable} -\newcommand{\StringTableXmpNumber}{9.78} - -@ -\subsection{StringTable} -\label{StringTableXmpPage} -See TableXmpPage \ref{TableXmpPage} on page~\pageref{TableXmpPage} -\index{pages!StringTableXmpPage!strtbl.ht} -\index{strtbl.ht!pages!StringTableXmpPage} -\index{StringTableXmpPage!strtbl.ht!pages} -<>= -\begin{page}{StringTableXmpPage}{StringTable} -\beginscroll -% -This domain provides a table type in which the keys are known to -be strings so special techniques can be used. -Other than performance, the type \spadtype{StringTable(S)} should -behave exactly the same way as \spadtype{Table(String,S)}. -See \downlink{`Table'}{TableXmpPage}\ignore{Table} -for general information about tables. -\showBlurb{StringTable} - -\xtc{ -This creates a new table whose keys are strings. -}{ -\spadpaste{t: StringTable(Integer) := table() \bound{t}} -} -\xtc{ -The value associated with each string key is the number of -characters in the string. -}{ -\begin{spadsrc}[\free{t}\bound{h}] -for s in split("My name is Ian Watt.",char " ") - repeat - t.s := #s -\end{spadsrc} -} -\xtc{ -}{ -\spadpaste{for key in keys t repeat output [key, t.key] \free{t h}} -} -\endscroll -\autobuttons -\end{page} -% - -@ -\section{symbol.ht} -<>= -\newcommand{\SymbolXmpTitle}{Symbol} -\newcommand{\SymbolXmpNumber}{9.79} - -@ -\subsection{Symbol} -\label{SymbolXmpPage} -\index{pages!SymbolXmpPage!symbol.ht} -\index{symbol.ht!pages!SymbolXmpPage} -\index{SymbolXmpPage!symbol.ht!pages} -<>= -\begin{page}{SymbolXmpPage}{Symbol} -\beginscroll - -Symbols are one of the basic types manipulated by Axiom. -The \spadtype{Symbol} domain provides ways to create -symbols of many varieties. -\showBlurb{Symbol} - -\xtc{ -The simplest way to create a symbol is to ``single quote'' an identifier. -}{ -\spadpaste{X: Symbol := 'x \bound{X}} -} -\xtc{ -This gives the symbol even if \spad{x} has been assigned a value. -If \spad{x} has not been assigned a value, then it is possible to omit -the quote. -}{ -\spadpaste{XX: Symbol := x} -} -\xtc{ -Declarations must be used when working -with symbols, because otherwise the interpreter tries to place -values in a more specialized type \spadtype{Variable}. -}{ -\spadpaste{A := 'a} -} -\xtc{ -}{ -\spadpaste{B := b} -} -\xtc{ -The normal way of entering polynomials uses this fact. -}{ -\spadpaste{x**2 + 1} -} - -\xtc{ -Another convenient way to create symbols is to convert a string. -This is useful when the name is to be constructed by a program. -}{ -\spadpaste{"Hello"::Symbol} -} -\xtc{ -Sometimes it is necessary to generate new unique symbols, for example, to -name constants of integration. -The expression \spad{new()} generates a symbol starting with \spad{\%}. -}{ -\spadpaste{new()\$Symbol} -} -\xtc{ -Successive calls to \spadfunFrom{new}{Symbol} produce different symbols. -}{ -\spadpaste{new()\$Symbol} -} -\xtc{ -The expression \spad{new("s")} produces a symbol starting with \spad{\%s}. -}{ -\spadpaste{new("xyz")\$Symbol} -} - -\xtc{ -A symbol can be adorned in various ways. -The most basic thing is applying a symbol to a list -of subscripts. -}{ -\spadpaste{X[i,j] \free{X}} -} - -\xtc{ -Somewhat less pretty is to attach subscripts, superscripts or arguments. -}{ -\spadpaste{U := subscript(u, [1,2,1,2]) \bound{U}} -} -\xtc{ -}{ -\spadpaste{V := superscript(v, [n]) \bound{V}} -} -\xtc{ -}{ -\spadpaste{P := argscript(p, [t]) \bound{P}} -} - -\xtc{ -It is possible to test whether a symbol has scripts using the -\spadfunFrom{scripted?}{Symbol} test. -}{ -\spadpaste{scripted? U \free{U}} -} -\xtc{ -}{ -\spadpaste{scripted? X \free{X}} -} -\xtc{ -If a symbol is not scripted, then it may be converted to a string. -}{ -\spadpaste{string X \free{X}} -} -\xtc{ -The basic parts can always be extracted using the -\spadfunFrom{name}{Symbol} and \spadfunFrom{scripts}{Symbol} operations. -}{ -\spadpaste{name U \free{U}} -} -\xtc{ -}{ -\spadpaste{scripts U \free{U}} -} -\xtc{ -}{ -\spadpaste{name X \free{X}} -} -\xtc{ -}{ -\spadpaste{scripts X \free{X}} -} - -\xtc{ -The most general form is obtained using the \spadfunFrom{script}{Symbol} -operation. -This operation takes an argument which is a list containing, in this order, -lists of subscripts, superscripts, presuperscripts, presubscripts and -arguments to a symbol. -}{ -\spadpaste{M := script(Mammoth, [[i,j],[k,l],[0,1],[2],[u,v,w]]) \bound{M}} -} -\xtc{ -}{ -\spadpaste{scripts M \free{M}} -} -\xtc{ -If trailing lists of scripts are omitted, they are assumed to be empty. -}{ -\spadpaste{N := script(Nut, [[i,j],[k,l],[0,1]]) \bound{N}} -} -\xtc{ -}{ -\spadpaste{scripts N \free{N}} -} -\endscroll -\autobuttons -\end{page} - -@ -\section{table.ht} -<>= -\newcommand{\TableXmpTitle}{Table} -\newcommand{\TableXmpNumber}{9.80} - -@ -\subsection{Table} -\label{TableXmpPage} -\begin{itemize} -\item AssociationList \ref{AssociationList} on -page~pageref{AssociationList} -\item EqTableXmpPage \ref{EqTableXmpPage} on -page~pageref{EqTableXmpPage} -\item StringTableXmpPage \ref{StringTableXmpPage} on -page~pageref{StringTableXmpPage} -\item SparseTableXmpPage \ref{SparseTableXmpPage} on -page~pageref{SparseTableXmpPage} -\item KeyedAccessFileXmpPage \ref{KeyedAccessFileXmpPage} on -page~pageref{KeyedAccessFileXmpPage} -\end{itemize} -\index{pages!TableXmpPage!table.ht} -\index{table.ht!pages!TableXmpPage} -\index{TableXmpPage!table.ht!pages} -<>= -\begin{page}{TableXmpPage}{Table} -\beginscroll - -The \spadtype{Table} constructor provides a general structure -for associative storage. -This type provides hash tables in which data objects -can be saved according to keys of any type. -For a given table, specific types must be chosen for the keys and entries. - -\xtc{ -In this example the keys to the table are polynomials with -integer coefficients. -The entries in the table are strings. -}{ -\spadpaste{t: Table(Polynomial Integer, String) := table() \bound{t}} -} -\xtc{ -To save an entry in the table, the \spadfunFrom{setelt}{Table} operation is used. -This can be called directly, giving the table a key and an entry. -}{ -\spadpaste{setelt(t, x**2 - 1, "Easy to factor") \bound{p1}\free{t}} -} -\xtc{ -Alternatively, you can use assignment syntax. -}{ -\spadpaste{t(x**3 + 1) := "Harder to factor" \bound{p2}\free{p1}} -} -\xtc{ -}{ -\spadpaste{t(x) := "The easiest to factor" \bound{p3}\free{p2}} -} -\xtc{ -Entries are retrieved from the table by calling the -\spadfunFrom{elt}{Table} operation. -}{ -\spadpaste{elt(t, x) \free{p3}} -} -\xtc{ -This operation is called when a table is ``applied'' to a key using -this or the following syntax. -}{ -\spadpaste{t.x \free{p3}} -} -\xtc{ -}{ -\spadpaste{t x \free{p3}} -} -\xtc{ -Parentheses are used only for grouping. They are needed if the key is -an infixed expression. -}{ -\spadpaste{t.(x**2 - 1) \free{p3}} -} -\xtc{ -Note that the \spadfunFrom{elt}{Table} operation is used only when the -key is known to be in the table---otherwise an error is generated. -}{ -\spadpaste{t (x**3 + 1) \free{p3}} -} - -\xtc{ -You can get a list of all the keys to a table using the -\spadfunFrom{keys}{Table} operation. -}{ -\spadpaste{keys t \free{p3}} -} -\xtc{ -If you wish to test whether a key is in a table, the -\spadfunFrom{search}{Table} operation is used. -This operation returns either an entry or \spad{"failed"}. -}{ -\spadpaste{search(x, t) \free{p3}} -} -\xtc{ -}{ -\spadpaste{search(x**2, t) \free{p3}} -} -\xtc{ -The return type is a union so the success of the search can be tested -using \spad{case}. -\spadkey{case} -}{ -\spadpaste{search(x**2, t) case "failed" \free{p3}} -} -\xtc{ -The \spadfunFromX{remove}{Table} operation is used to delete values from a -table. -}{ -\spadpaste{remove!(x**2-1, t) \free{p3} \bound{p4}} -} -\xtc{ -If an entry exists under the key, then it is returned. Otherwise -\spadfunFromX{remove}{Table} returns \spad{"failed"}. -}{ -\spadpaste{remove!(x-1, t) \free{p4}\bound{p5}} -} - -\xtc{ -The number of key-entry pairs can be found using the -\spadfunFrom{\#}{Table} operation. -}{ -\spadpaste{\#t \free{p5}} -} -\xtc{ -Just as \spadfunFrom{keys}{Table} returns a list of keys to the table, a -list of all the entries can be obtained using the -\spadfunFrom{members}{Table} operation. -}{ -\spadpaste{members t \free{p5}} -} -\xtc{ -A number of useful operations take functions and map them on to the -table to compute the result. Here we count the entries which -have \spad{"Hard"} as a prefix. -}{ -\spadpaste{count(s: String +-> prefix?("Hard", s), t) \free{p5}} -} - -Other table types are provided to support various needs. -\indent{4} -\beginitems -\item[-] \spadtype{AssociationList} gives a list with a table view. -This allows new entries to be appended onto the front of the list -to cover up old entries. -This is useful when table entries need to be stacked or when -frequent list traversals are required. -See -\downlink{`AssociationList'}{AssociationListXmpPage}\ignore{AssociationList} -for more information. -\item[-] \spadtype{EqTable} gives tables in which keys are considered -equal only when they are in fact the same instance of a structure. -See \downlink{`EqTable'}{EqTableXmpPage}\ignore{EqTable} for more information. -\item[-] \spadtype{StringTable} should be used when the keys are known to -be strings. -See \downlink{`StringTable'}{StringTableXmpPage}\ignore{StringTable} -for more information. -\item[-] \spadtype{SparseTable} provides tables with default -entries, so -lookup never fails. The \spadtype{GeneralSparseTable} constructor -can be used to make any table type behave this way. -See \downlink{`SparseTable'}{SparseTableXmpPage}\ignore{SparseTable} -for more information. -\item[-] \spadtype{KeyedAccessFile} allows values to be saved in a file, -accessed as a table. -See -\downlink{`KeyedAccessFile'}{KeyedAccessFileXmpPage}\ignore{KeyedAccessFile} -for more information. -\enditems -\indent{0} -% -\showBlurb{Table} -\endscroll -\autobuttons -\end{page} - -@ -\section{textfile.ht} -<>= -\newcommand{\TextFileXmpTitle}{TextFile} -\newcommand{\TextFileXmpNumber}{9.81} - -@ -\subsection{TextFile} -\label{TextFileXmpPage} -\begin{itemize} -\item FileXmpPage \ref{FileXmpPage} on -page~pageref{FileXmpPage} -\item KeyedAccessFileXmpPage \ref{KeyedAccessFileXmpPage} on -page~pageref{KeyedAccessFileXmpPage} -\item LibraryXmpPage \ref{LibraryXmpPage} on -page~pageref{LibraryXmpPage} -\end{itemize} -\index{pages!TextFileXmpPage!textfile.ht} -\index{textfile.ht!pages!TextFileXmpPage} -\index{TextFileXmpPage!textfile.ht!pages} -<>= -\begin{page}{TextFileXmpPage}{TextFile} -\beginscroll - -The domain \spadtype{TextFile} allows Axiom to read and write -character data and exchange text with other programs. -This type behaves in Axiom much like a \spadtype{File} of strings, -with additional operations to cause new lines. -We give an example of how to produce an upper case copy of a file. -\xtc{ -This is the file from which we read the text. -}{ -\spadpaste{f1: TextFile := open("/etc/group", "input") \bound{f1}} -} -\xtc{ -This is the file to which we read the text. -}{ -\spadpaste{f2: TextFile := open("/tmp/MOTD", "output") \bound{f2}} -} -\xtc{ -Entire lines are handled using the \spadfunFromX{readLine}{TextFile} and -\spadfunFromX{writeLine}{TextFile} operations. -}{ -\spadpaste{l := readLine! f1 \free{f1}\bound{l}} -} -\xtc{ -}{ -\spadpaste{writeLine!(f2, upperCase l) \free{f2 l}} -} -\xtc{ -Use the -\spadfunFrom{endOfFile?}{TextFile} operation to check if you have -reached the end of the file. -}{ -\begin{spadsrc}[\free{f1 f2}\bound{Copied}] -while not endOfFile? f1 repeat - s := readLine! f1 - writeLine!(f2, upperCase s) -\end{spadsrc} -} -\xtc{ -The file \spad{f1} is exhausted and should be closed. -}{ -\spadpaste{close! f1 \free{Copied}\bound{closed1}} -} - -\xtc{ -It is sometimes useful to write lines a bit at a time. -The \spadfunFromX{write}{TextFile} operation allows this. -}{ -\spadpaste{write!(f2, "-The-") \free{Copied}\bound{tthhee}} -} -\xtc{ -}{ -\spadpaste{write!(f2, "-End-") \free{tthhee}\bound{eenndd}} -} -\xtc{ -This ends the line. -This is done in a machine-dependent manner. -}{ -\spadpaste{writeLine! f2 \free{eenndd}\bound{LastLine}} -} -\xtc{ -}{ -\spadpaste{close! f2 \free{LastLine}\bound{closed2}} -} -\noOutputXtc{ -Finally, clean up. -}{ -\spadpaste{)system rm /tmp/MOTD \free{closed2}} -} - -For more information on related topics, see -\downlink{`File'}{FileXmpPage}\ignore{File}, -\downlink{`KeyedAccessFile'}{KeyedAccessFileXmpPage}\ignore{KeyedAccessFile}, and -\downlink{`Library'}{LibraryXmpPage}\ignore{Library}. -\showBlurb{TextFile} -\endscroll -\autobuttons -\end{page} -% - -@ -\section{topics.ht} -\subsection{Axiom Topics} -\label{TopicPage} -\includegraphics[scale=.5]{ps/v71topics.eps} -\index{images!topics} -\begin{itemize} -\item ``Numbers'' (NumberPage) \ref{NumberPage} on page~\pageref{NumberPage} -\item ``Polynomials'' (PolynomialPage) -\ref{PolynomialPage} on page~\pageref{PolynomialPage} -\item ``Functions'' (FunctionPage) -\ref{FunctionPage} on page~\pageref{FunctionPage} -\item ``Solving Equations'' (EquationPage) -\ref{EquationPage} on page~\pageref{EquationPage} -\item ``Calculus'' (CalculusPage) -\ref{CalculusPage} on page~\pageref{CalculusPage} -\item ``Linear Algebra'' (LinAlgPage) -\ref{LinAlgPage} on page~\pageref{LinAlgPage} -\item ``Graphics'' (GraphicsPage) -\ref{GraphicsPage} on page~\pageref{GraphicsPage} -\item ``Algebra'' (AlgebraPage) -\ref{AlgebraPage} on page~\pageref{AlgebraPage} -\end{itemize} -\index{pages!TopicPage!topics.ht} -\index{topics.ht!pages!TopicPage} -\index{TopicPage!topics.ht!pages} -<>= -\begin{page}{TopicPage}{Axiom Topics} -\beginscroll -Select a topic below: % or -%\lispmemolink{search}{(|htTutorialSearch| '|\stringvalue{pattern}|))} -%for string (use {\em *} for wild card): -%\newline\inputstring{pattern}{58}{} -\beginmenu -\menumemolink{Numbers}{NumberPage}\tab{18} -A look at different types of numbers - -\menumemolink{Polynomials}{PolynomialPage}\tab{18} -Polynomials in Axiom -% -\menumemolink{Functions}{FunctionPage}\tab{18} -Built-in and user-defined functions -% -\menumemolink{Solving Equations}{EquationPage}\tab{18} -Facilities for solving equations -% -\menumemolink{Calculus}{CalculusPage}\tab{18} -Using Axiom to do calculus -% -\menumemolink{Linear Algebra}{LinAlgPage}\tab{18} -Axiom's linear algebra facilities -% -\menumemolink{Graphics}{GraphicsPage}\tab{18} -Axiom's graphics facilities -% -\menumemolink{Algebra}{AlgebraPage}\tab{18} -Axiom's abstract algebra facilities -% -\endmenu -\endscroll -\end{page} - -@ -\subsection{Solving Equations} -\label{EquationPage} -\begin{itemize} -\item ugxProblemLinSysPage \ref{ugxProblemLinSysPage} on -page~\pageref{ugxProblemLinSysPage} -\item ugxProblemOnePolPage \ref{ugxProblemOnePolPage} on -page~\pageref{ugxProblemOnePolPage} -\item ugxProblemPolySysPage \ref{ugxProblemPolySysPage} on -page~\pageref{ugxProblemPolySysPage} -\item ugProblemDEQPage \ref{ugProblemDEQPage} on -page~\pageref{ugProblemDEQPage} -\end{itemize} -\index{pages!EquationPage!topics.ht} -\index{topics.ht!pages!EquationPage} -\index{EquationPage!topics.ht!pages} -<>= -\begin{page}{EquationPage}{Solving Equations} -\beginscroll -Axiom lets you solve equations of various types: -\beginmenu - \menulink{Solution of Systems of Linear Equations}{ugxProblemLinSysPage} - \newline Solve systems of linear equations. - \menulink{Solution of a Single Polynomial Equation}{ugxProblemOnePolPage} - \newline Find roots of polynomials. - \menulink{Solution of Systems of Polynomial Equations}{ugxProblemPolSysPage} - \newline Solve systems of polynomial equations. - \menulink{Solution of Differential Equations}{ugProblemDEQPage} - \newline Closed form and series solutions of differential equations. -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Linear Algebra} -\label{LinAlgPage} -\begin{itemize} -\item ugIntroTwoDimPage \ref{ugIntroTwoDimPage} on -page~\pageref{ugIntroTwoDimPage} -\item ugMatrixCreatePage \ref{ugMatrixCreatePage} on -page~\pageref{ugMatrixCreatePage} -\item ugxMatrixOpsPage \ref{ugxMatrixOpsPage} on -page~\pageref{ugxMatrixOpsPage} -\item ugProblemEigenPage \ref{ugProblemEigenPage} on -page~\pageref{ugProblemEigenPage} -\item ugxFloatHilbertPage \ref{ugxFloatHilbertPage} on -page~\pageref{ugxFloatHilbertPage} -\item PermanentXmpPage \ref{PermanentXmpPage} on -page~\pageref{PermanentXmpPage} -\item VectorXmpPage \ref{VectorXmpPage} on page~\pageref{VectorXmpPage} -\item SquareMatrixXmpPage \ref{SquareMatrixXmpPage} on -page~\pageref{SquareMatrixXmpPage} -\item OneDimensionalArrayXmpPage \ref{OneDimensionalArrayXmpPage} on -page~\pageref{OneDimensionalArrayXmpPage} -\item TwoDimensionalArrayXmpPage \ref{TwoDimensionalArrayXmpPage} on -page~\pageref{TwoDimensionalArrayXmpPage} -\item ugTypesConvertPage \ref{ugTypesConvertPage} on -page~\pageref{ugTypesConvertPage} -\end{itemize} -\index{pages!LinAlgPage!topics.ht} -\index{topics.ht!pages!LinAlgPage} -\index{LinAlgPage!topics.ht!pages} -<>= -\begin{page}{LinAlgPage}{Linear Algebra} -\beginscroll -\beginmenu - -\menulink{Introduction}{ugIntroTwoDimPage}\newline - -Create and manipulate matrices. -Work with the entries of a matrix. -Perform matrix arithmetic. - -\menulink{Creating Matrices}{ugxMatrixCreatePage} \newline - -Create matrices from scratch and from other matrices. - -\menulink{Operations on Matrices}{ugxMatrixOpsPage} \newline - -Algebraic manipulations with matrices. -Compute the inverse, determinant and trace of a matrix. -Find the rank, nullspace and row echelon form of a matrix. - -\menulink{Eigenvalues and Eigenvectors}{ugProblemEigenPage} \newline - -How to compute eigenvalues and eigenvectors. -\endmenu -\horizontalline\newline -Additional Topics: -\beginmenu -\menulink{Example: Determinant of a Hilbert Matrix}{ugxFloatHilbertPage} -\menulink{Computing the Permanent}{PermanentXmpPage} -\menulink{Working with Vectors}{VectorXmpPage} -\menulink{Working with Square Matrices}{SquareMatrixXmpPage} -\menulink{Working with One-Dimensional Arrays}{OneDimensionalArrayXmpPage} -\menulink{Working with Two-Dimensional Arrays}{TwoDimensionalArrayXmpPage} -\menulink{Conversion (Polynomials of Matrices)}{ugTypesConvertPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -\subsection{Calculus} -\label{CalculusPage} -\begin{itemize} -\item ugProblemLimitsPage \ref{ugProblemLimitsPage} on -page~\pageref{ugProblemLimitsPage} -\item ugIntroCalcDerivPage \ref{ugIntroCalcDerivPage} on -page~\pageref{ugIntroCalcDerivPage} -\item ugIntroIntegratePage \ref{ugIntroIntegratePage} on -page~\pageref{ugIntroIntegratePage} -\item ugProblemIntegrationPage \ref{ugProblemIntegrationPage} on -page~\pageref{ugProblemIntegrationPage} -\item ugProblemLaplacePage \ref{ugProblemLaplacePage} on -page~\pageref{ugProblemLaplacePage} -\item ugProblemSeriesPage \ref{ugProblemSeriesPage} on -page~\pageref{ugProblemSeriesPage} -\item ugProblemDEQPage \ref{ugProblemDEQPage} on -page~\pageref{ugProblemDEQPage} -\end{itemize} -\index{pages!CalculusPage!topics.ht} -\index{topics.ht!pages!CalculusPage} -\index{CalculusPage!topics.ht!pages} -<>= -\begin{page}{CalculusPage}{Calculus} -\beginscroll -\beginmenu -\menulink{Limits}{ugProblemLimitsPage} \tab{17} -Compute limits of functional expressions. -\menulink{Derivatives}{ugIntroCalcDerivPage}\tab{17} -Compute derivatives and partial derivatives. -\menulink{Integrals}{ugIntroIntegratePage}\tab{17} -Introduction to Axiom's symbolic integrator. -\menulink{More Integrals}{ugProblemIntegrationPage}\tab{17} -More information about symbolic integration. -\menulink{Laplace}{ugProblemLaplacePage}\tab{17} -Computing Laplace transforms. -\menulink{Series}{ugProblemSeriesPage}\tab{17} -Compute series expansions of expressions. -\menulink{Differential Eqns}{ugProblemDEQPage}\tab{17} -Solve differential equations. -\endmenu -\endscroll -\autobuttons \end{page} - -@ -\section{type.ht} -@ -\subsection{Category {\bf Type}} -\label{CategoryType} -\index{pages!CategoryType!type.ht} -\index{type.ht!pages!CategoryType} -\index{CategoryType!type.ht!pages} -<>= -\begin{page}{CategoryType}{Category {\em Type}} -\beginscroll -{\em Type} is a primitive category in Axiom, -one which is an ancestor of all Axiom categories. - -{\em Type} is the root of Axiom's category hierarchy, -a category with no properties (exported operations -and attributes) of which all other categories are descendants. -Two important children of {\em Type} are -\spadtype{SetCategory}, the category of all algebraic domains, -and \spadtype{Aggregate}, the category of all data structures. -\endscroll - -@ -\section{ug.ht} -DO NOT MODIFY THIS FILE BY HAND !! Created by chapmenu.awk. -\subsection{Users Guide} -\label{UsersGuidePage} -\begin{itemize} -\item ugWhatsNewTwoTwoPage \ref{ugWhatsNewTwoTwoPage} on -page~\pageref{ugWhatsNewTwoTwoPage} -\item ugIntroPage \ref{ugIntroPage} on page~\pageref{ugIntroPage} -\item ugTypesPage \ref{ugTypesPage} on page~\pageref{ugTypesPage} -\item ugHyperPage \ref{ugHyperPage} on page~\pageref{ugHyperPage} -\item ugInOutPage \ref{ugInOutPage} on page~\pageref{ugInOutPage} -\item ugLangPage \ref{ugLangPage} on page~\pageref{ugLangPage} -\item ugUserPage \ref{ugUserPage} on page~\pageref{ugUserPage} -\item ugGraphPage \ref{ugGraphPage} on page~\pageref{ugGraphPage} -\item ugProblemPage \ref{ugProblemPage} on page~\pageref{ugProblemPage} -\item ExamplesExposedPage \ref{ExamplesExposedPage} on -page~\pageref{ExamplesExposedPage} -\item ugIntProgPage \ref{ugIntProgPage} on page~\pageref{ugIntProgPage} -\item ugPackagesPage \ref{ugPackagesPage} on page~\pageref{ugPackagesPage} -\item ugCategoriesPage \ref{ugCategoriesPage} on -page~\pageref{ugCategoriesPage} -\item ugDomainsPage \ref{ugDomainsPage} on page~\pageref{ugDomainsPage} -\item ugBrowsePage \ref{ugBrowsePage} on page~\pageref{ugBrowsePage} -\item ugWhatsNewPage \ref{ugWhatsNewPage} on page~\pageref{ugWhatsNewPage} -\item ugSysCmdPage \ref{ugSysCmdPage} on page~\pageref{ugSysCmdPage} -\item ugAppGraphicsPage \ref{ugAppGraphicsPage} on -page~\pageref{ugAppGraphicsPage} -\end{itemize} -\index{pages!UsersGuidePage!ug.ht} -\index{ug.ht!pages!UsersGuidePage} -\index{UsersGuidePage!ug.ht!pages} -<>= -\begin{page}{UsersGuidePage}{Users Guide} -This is the table of contents for the Users Guide. -Click on any item below to see that section. -\beginscroll -\indent{3} -\beginmenu -\menudownlink{{0. What's New in Axiom Version 2.2}}{ugWhatsNewTwoTwoPage} -\endmenu -\indent{0} -Part I. Basic Features of Axiom -\indent{3} -\beginmenu -\menudownlink{{1. An Overview of Axiom}}{ugIntroPage} -\menudownlink{{2. Using Types and Modes}}{ugTypesPage} -\menudownlink{{3. Using \HyperName{}}}{ugHyperPage} -\menudownlink{{4. Input Files and Output Styles}}{ugInOutPage} -\menudownlink{{5. Introduction to the Axiom Interactive Language}}{ugLangPage} -\menudownlink{{6. User-Defined Functions, Macros and Rules}}{ugUserPage} -\menudownlink{{7. Graphics}}{ugGraphPage} -\endmenu -\indent{0} -Part II. Advanced Problem Solving and Examples -\indent{3} -\beginmenu -\menudownlink{{8. Advanced Problem Solving}}{ugProblemPage} -\menudownlink{{9. Some Examples for Domains and Packages}}{ExamplesExposedPage} -\endmenu -\indent{0} -Part III. Advanced Programming in Axiom -\indent{3} -\beginmenu -\menudownlink{{10. Interactive Programming}}{ugIntProgPage} -\menudownlink{{11. Packages}}{ugPackagesPage} -\menudownlink{{12. Categories}}{ugCategoriesPage} -\menudownlink{{13. Domains}}{ugDomainsPage} -\menudownlink{{14. Browse}}{ugBrowsePage} -\menudownlink{{15. What's New in Axiom Version 2.0}}{ugWhatsNewPage} -\endmenu -\indent{0} -Appendices. -\indent{3} -\beginmenu -\menudownlink{{A. Axiom System Commands}}{ugSysCmdPage} -\menudownlink{{F. Programs for Axiom Images}}{ugAppGraphicsPage} -\menudownlink{{G. Glossary}}{GlossaryPage} -\endmenu -\indent{0} -\endscroll -\autobuttons -\end{page} - -@ -\section{ug00.ht} -<>= -\newcommand{\ugWhatsNewTwoTwoTitle}{What's New in Axiom Version 2.2} -\newcommand{\ugWhatsNewTwoTwoNumber}{0.} - -@ -\subsection{0. What's New in Axiom Version 2.2} -\label{ugWhatsNewTwoTwoPage} -\begin{itemize} -\item ugTwoTwoAldorPage \ref{ugTwoTwoAldorPage} on -page~\pageref{ugTwoTwoAldorPage} -\item ugTwoTwoPolynomialsPage \ref{ugTwoTwoPolynomialsPage} on -page~\pageref{ugTwoTwoPolynomialsPage} -\item ugTwoTwoHyperdocPage \ref{ugTwoTwoHyperdocPage} on -page~\pageref{ugTwoTwoHyperdocPage} -\item ugTwoTwoNAGLinkPage \ref{ugTwoTwoNAGLinkPage} on -page~\pageref{ugTwoTwoNAGLinkPage} -\item ugTwoTwoCCLPage \ref{ugTwoTwoCCLPage} on -page~\pageref{ugTwoTwoCCLPage} -\end{itemize} -\index{pages!ugWhatsNewTwoTwoPage!ug00.ht} -\index{ug00.ht!pages!ugWhatsNewTwoTwoPage} -\index{ugWhatsNewTwoTwoPage!ug00.ht!pages} -<>= -\begin{page}{ugWhatsNewTwoTwoPage}{0. What's New in Axiom Version 2.2} -\beginscroll - -\beginmenu - \menudownlink{{0.1. \axiomxl{} compiler - Enhancements and Additions}} -{ugTwoTwoAldorPage} - \menudownlink{{0.2. New polynomial domains and algorithms}} -{ugTwoTwoPolynomialsPage} - \menudownlink{{0.3. Enhancements to HyperDoc and Graphics}} -{ugTwoTwoHyperdocPage} - \menudownlink{{0.4. Enhancements to NAGLink}}{ugTwoTwoNAGLinkPage} - \menudownlink{{0.5. Enhancements to the Lisp system}}{ugTwoTwoCCLPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTwoTwoAldorTitle}{\axiomxl{} compiler - Enhancements and Additions} -\newcommand{\ugTwoTwoAldorNumber}{0.1.} - -@ -\subsection{0.1. Aldor compiler - Enhancements and Additions} -\label{ugTwoTwoAldorPage} -\index{pages!ugTwoTwoAldorPage!ug00.ht} -\index{ug00.ht!pages!ugTwoTwoAldorPage} -\index{ugTwoTwoAldorPage!ug00.ht!pages} -<>= -\begin{page}{ugTwoTwoAldorPage}{0.1. \axiomxl{} compiler - Enhancements and Additions} -\beginscroll - -Numerous bug fixes and improvements have been implemented in version 1.1.12 -of \axiomxl{} which is included in this release. You may also notice the name -{\it Aldor} being used when referring to \axiomxl{}. - -The format of {\bf .ao} files has changed somewhat so you need -to recompile your {\bf .as} source files. - -An updated User's Guide is included for on-line use. We provide -TeX {\bf .dvi} format (including hyper-references), Acrobat {\bf .pdf} -format, PostScript {\bf .ps} format and plain ASCII {bf .txt}. -An up-to-date {\bf .dvi} -viewer should be able to allow you to follow the cross-references. -These files can be found in -{\bf \env{AXIOM}/compiler/doc/axlugII.*}. - -An exception mechanism has been implemented. You can now throw and -catch exceptions which are fully-fledged domains that can carry information. -See Chapter 31 in the on-line guide for details. - -Support for linking with Fortran-77 code has been added. You can call -Fortran-77 code from {\it Aldor} and vice-versa. See Chapter 32 -in the on-line guide for details. - -The \spad{ref} keyword has been added. You must use \spad{_ref} to -enable use as an identifier. - -A generic configurable C compiler and linker driver i{\bf unicl} has been -implemented. You can now select C compiler and linker options with -greater ease and you can give names to specific configurations. -See Chapter 28 in the on-line guide for details. - -There is now support for accessing IEEE floating-point rounding modes -and exception flags. You must ensure however that your C compiler -and linker will respect the IEEE standard by enabling the appropriate -options through {\bf unicl}. -See BasicIeeeControlPackage (26.7) in the on-line guide. - -Special runtime libraries ({\bf libfoam-gmp.a}) have been prepared to enable -a drop-in replacement of Aldor's big-integer arithmetic with the GNU gmp -big-integer library. The executable script {\bf axiomxl.gmp} (in the same place -as {\bf axiomxl}) expects the {\bf GmpDir} environment variable to be set -to the directory where a compiled GNU gmp library resides ({\bf libgmp.a}) and -arranges for the appropriate libraries to be linked in when generating -a stand-alone executable. - -The language-defined type TrailingArray has been introduced. See -TrailingArray (13.7) in the on-line guide. - -The supplied library {\bf libaxllib.al}, supporting stand-alone programs, -has been updated. Automatically -generated documentation can be found in Chapters 25 and 26 of the on-line -guide. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTwoTwoPolynomialsTitle}{New polynomial domains and algorithms} -\newcommand{\ugTwoTwoPolynomialsNumber}{0.2.} - -@ -\subsection{0.2. New polynomial domains and algorithms} -\label{ugTwoTwoPolynomialsPage} -\index{pages!ugTwoTwoPolynomialsPage!ug00.ht} -\index{ug00.ht!pages!ugTwoTwoPolynomialsPage} -\index{ugTwoTwoPolynomialsPage!ug00.ht!pages} -<>= -\begin{page}{ugTwoTwoPolynomialsPage}{0.2. New polynomial domains and algorithms} -\beginscroll - -Univariate polynomial factorisation over the integers has been -enhanced by updates to the \spadtype{GaloisGroupFactorizer} type -and friends from Frederic Lehobey (Frederic.Lehobey@lifl.fr, University of -Lille I, France). - -The package constructor \spadtype{PseudoRemainderSequence} -provides efficient algorithms by Lionel Ducos -(Lionel.Ducos@mathlabo.univ-poitiers.fr, University of Poitiers, France) -for computing sub-resultants. -This leads to a speed up in many places in Axiom where -sub-resultants are computed (polynomial system solving, -algebraic factorization, integration). - -Based on this package, the domain constructor -\spadtype{NewSparseUnivariatePolynomial} -extends the constructor \spadtype{SparseUnivariatePolynomial}. -In a similar way, the \spadtype{NewSparseMultivariatePolynomial} extends -the constructor \spadtype{SparseUnivariatePolynomial}; -it also provides some additional operations related -to polynomial system solving by means of triangular sets. - -Several domain constructors implement -regular triangular sets (or regular chains). -Among them \spadtype{RegularTriangularSet} -and \spadtype{SquareFreeRegularTriangularSet}. -They also implement an algorithm by Marc Moreno Maza (marc@nag.co.uk, NAG) -for computing triangular decompositions of polynomial systems. -This method is refined in the package \spadtype{LazardSetSolvingPackage} -in order to produce decompositions by means of Lazard triangular sets. -For the case of polynomial systems with finitely many solutions, -these decompositions can also be computed by -the package \spadtype{LexTriangularPackage}. - -The domain constructor \spadtype{RealClosure} by Renaud Rioboo -(Renaud.Rioboo@lip6.fr, University of Paris 6, France) -provides the real closure of an ordered field. -The implementation is based on interval arithmetic. -Moreover, the design of this constructor and its related -packages allows an easy use of other codings for real algebraic numbers. - -Based on triangular decompositions and the \spadtype{RealClosure} constructor, -the package \spadtype{ZeroDimensionalSolvePackage} -provides operations for computing symbolically the real or complex roots -of polynomial systems with finitely many solutions. - -Polynomial arithmetic with non-commutative variables -has been improved too by a contribution of Michel Petitot -(Michel.Petitot@lifl.fr, University of Lille I, France). -The domain constructors \spadtype{XRecursivePolynomial} -and \spadtype{XDistributedPolynomial} provide -recursive and distributed representations for these polynomials. -They are the non-commutative equivalents for -the \spadtype{SparseMultivariatePolynomial} -and \spadtype{DistributedMultivariatePolynomial} constructors. -The constructor \spadtype{LiePolynomial} implement Lie -polynomials in the Lyndon basis. -The constructor \spadtype{XPBWPolynomial} manage polynomials -with non-commutative variables in -the \texht{Poincar\'e}{Poincare\space{-1}'}-Birkhoff-Witt basis from the Lyndon basis. -This allows to compute in the Lie Group associated with a -free nilpotent Lie algebra by using the \spadtype{LieExponentials} -domain constructor. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTwoTwoHyperdocTitle}{Enhancements to HyperDoc and Graphics} -\newcommand{\ugTwoTwoHyperdocNumber}{0.3.} - -@ -\subsection{0.3. Enhancements to HyperDoc and Graphics} -\label{ugTwoTwoHyperdocPage} -\index{pages!ugTwoTwoHyperdocPage!ug00.ht} -\index{ug00.ht!pages!ugTwoTwoHyperdocPage} -\index{ugTwoTwoHyperdocPage!ug00.ht!pages} -<>= -\begin{page}{ugTwoTwoHyperdocPage}{0.3. Enhancements to HyperDoc and Graphics} -\beginscroll - -From this version of Axiom onwards, the pixmap format used to save graphics -images in color and to display them in HyperDoc has been changed to the -industry-standard XPM format. See {\tt ftp://koala.inria.fr/pub/xpm}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTwoTwoNAGLinkTitle}{Enhancements to NAGLink} -\newcommand{\ugTwoTwoNAGLinkNumber}{0.4.} - -@ -\subsection{0.4. Enhancements to NAGLink} -\label{ugTwoTwoNAGLinkPage} -\index{pages!ugTwoTwoNAGLinkPage!ug00.ht} -\index{ug00.ht!pages!ugTwoTwoNAGLinkPage} -\index{ugTwoTwoNAGLinkPage!ug00.ht!pages} -<>= -\begin{page}{ugTwoTwoNAGLinkPage}{0.4. Enhancements to NAGLink} -\beginscroll - -This version of Axiom incorporates the Axiom/NAG Numerical Analyst (ANNA) -software developed in the University of Bath. ANNA is an expert system which -uses Axiom algebra functionality in choosing the most appropriate NAG Fortran Library -routine for a particular problem. Documentation is provided on-line on the main HyperDoc page. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTwoTwoCCLTitle}{Enhancements to the Lisp system} -\newcommand{\ugTwoTwoCCLNumber}{0.5.} - -@ -\subsection{0.5. Enhancements to the Lisp system} -\label{ugTwoTwoCCLPage} -\index{pages!ugTwoTwoCCLPage!ug00.ht} -\index{ug00.ht!pages!ugTwoTwoCCLPage} -\index{ugTwoTwoCCLPage!ug00.ht!pages} -<>= -\begin{page}{ugTwoTwoCCLPage}{0.5. Enhancements to the Lisp system} -\beginscroll - -In this version of Axiom, certain Library operations have been -accelerated by converting their Lisp implementations into kernel -operations implemented directly in C. Here is a list of the -accelerated operations. The given names encode the abbreviated type -the operation comes from, the name of the operation and, in the case -of exported functions, an encoded signature and numerical index. - +\chapter{NAG ASP Example Code} +\section{aspex.ht} +\subsection{Asp1 Example Code} +\label{Asp1ExampleCode} +\index{pages!Asp1ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp1ExampleCode} +\index{Asp1ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp1ExampleCode}{Asp1 Example Code} \begin{verbatim} -|A1AGG-;=;2AB;28| -|A1AGG-;copy;2A;19| -|A1AGG-;sort!;M2A;2| -|ABELGRP-;*;Nni2S;3| -|ABELGRP-;-;3S;1| -|ABELMON-;*;Pi2S;2| -|ABELMON-;zero?;SB;1| -|AGG-;empty?;SB;3| -|AGG-;size?;SNniB;6| -|ALIST;keys;$L;6| -|ALIST;search;Key$U;15| -|ARR2CAT-;copy;2S;10| -|BOP;<;2$B;29| -|BOP;=;2$B;27| -|BOP;has?;$SB;9| -|BOP;is?;$SB;1| -|BOP;name;$S;2| -|BOP;properties;$Al;3| -|BOP;property;$SU;7| -|BOP;weight;$Nni;28| -|COMPCAT-;*;R2S;18| -|COMPCAT-;-;2S;17| -|COMPCAT-;=;2SB;15| -|COMPCAT-;exquo;SRU;46| -|COMPCAT-;recip;SU;48| -|COMPCAT-;rem;3S;53| -|COMPCAT-;unitNormal;SR;49| -|COMPLEX;*;3$;10| -|COMPLEX;+;3$;9| -|COMPLEX;coerce;R$;5| -|COMPLEX;exquo;2$U;11| -|COMPLEX;one?;$B;4| -|COMPLEX;zero?;$B;3| -|DIRPROD;<;2$B;18| -|DIRPROD;subtractIfCan;2$U;14| -|ELAGG-;removeDuplicates;2A;12| -|ELTAGG-;qelt;SDomIm;1| -|ELTAGG-;qsetelt!;SDom2Im;2| -|EUCDOM-;gcd;3S;5| -|EUCDOM-;unitNormalizeIdealElt| -|EXPR;*;3$;11| -|EXPR;+;3$;12| -|EXPR;-;2$;8| -|EXPR;/;3$;14| -|EXPR;=;2$B;21| -|EXPR;algkernels!0| -|EXPR;algkernels| -|EXPR;coerce;I$;10| -|EXPR;coerce;Smp$;24| -|EXPR;commonk0| -|EXPR;commonk| -|EXPR;denom;$Smp;23| -|EXPR;numer;$Smp;22| -|EXPR;reduc| -|EXPR;zero?;$B;7| -|FACUTIL;lowerPolynomial;SupSup;1| -|FAMR-;coefficients;SL;4| -|FAMR-;ground;SR;2| -|FFP;*;3$;21| -|FFP;+;3$;22| -|FFP;-;3$;23| -|FFP;=;2$B;24| -|FIELD-;/;3S;11| -|FIELD-;inv;2S;4| -|FLAGG-;sort!;2A;8| -|FLAGG-;sort;M2A;6| -|FLASORT;QuickSort| -|FLASORT;partition| -|FLASORT;quickSort;M2V;1| -|FM;*;R2$;1| -|FRAC;*;3$;18| -|FRAC;*;I2$;19| -|FRAC;+;3$;16| -|FRAC;=;2$B;22| -|FRAC;cancelGcd| -|FRAC;coerce;S$;1| -|FRAC;normalize| -|FRAC;one?;$B;23| -|FRAC;recip;$U;13| -|FRAC;zero?;$B;2| -|FSAGG-;brace;LA;3| -|GDMP;univariate;$OvlSup;21| -|HDP;<;2$B;1| -|IARRAY1;#;$Nni;1| -|IARRAY1;elt;$IS;16| -|IARRAY1;fill!;$S$;2| -|IARRAY1;map;M3$;8| -|IARRAY1;maxIndex;$I;13| -|IARRAY1;minIndex;$I;3| -|IARRAY1;new;NniS$;5| -|IARRAY1;qelt;$IS;14| -|IARRAY1;qsetelt!;$I2S;15| -|IARRAY1;setelt;$I2S;17| -|IDPAM;+;3$;4| -|IDPAM;map;M2$;7| -|IDPAM;monomial;AS$;6| -|IDPO;=;2$B;1| -|IFARRAY;#;$Nni;4| -|IFARRAY;concat!;$S$;21| -|IFARRAY;elt;$IS;17| -|IFARRAY;empty;$;3| -|IFARRAY;growAndFill| -|IFARRAY;growWith| -|IFARRAY;maxIndex;$I;6| -|IFARRAY;minIndex;$I;7| -|IFARRAY;new;NniS$;8| -|IFARRAY;removeDuplicates!;2$;30| -|IFARRAY;setelt;$I2S;18| -|IIARRAY2;elt;$2IR;11| -|IIARRAY2;empty?;$B;1| -|IIARRAY2;maxColIndex;$I;7| -|IIARRAY2;maxRowIndex;$I;6| -|IIARRAY2;minColIndex;$I;5| -|IIARRAY2;minRowIndex;$I;4| -|IIARRAY2;ncols;$Nni;9| -|IIARRAY2;nrows;$Nni;8| -|IIARRAY2;qelt;$2IR;10| -|IIARRAY2;qsetelt!;$2I2R;12| -|ILIST;concat!;3$;25| -|ILIST;copy;2$;20| -|ILIST;empty;$;6| -|ILIST;first;$S;4| -|ILIST;member?;S$B;24| -|ILIST;mergeSort| -|ILIST;minIndex;$I;18| -|ILIST;removeDuplicates!;2$;26| -|ILIST;rest;$Nni$;19| -|ILIST;sort!;M2$;27| -|ILIST;split!;$I$;29| -|IMATLIN;rowEchelon;2M;3| -|INS-;symmetricRemainder;3S;27| -|INT;exquo;2$U;44| -|INT;one?;$B;2| -|INT;positiveRemainder;3$;23| -|INT;unitNormal;$R;47| -|INTDOM-;unitCanonical;2S;2| -|ISTRING;<;2$B;6| -|KDAGG-;key?;KeySB;1| -|KERNEL;<;2$B;14| -|KERNEL;=;2$B;13| -|KERNEL;B2Z| -|KERNEL;argument;$L;6| -|KERNEL;operator;$Bo;5| -|KERNEL;position;$Nni;7| -|KERNEL;triage| -|LO;-;2$;3| -|LO;=;2$B;4| -|LSAGG-;<;2AB;25| -|LSAGG-;reduce;MA2S;16| -|LSAGG-;select!;M2A;5| -|MATCAT-;*;3S;29| -|MATCAT-;*;S2Col;32| -|MDDFACT;reduction!0| -|MDDFACT;reduction| -|MODRING;reduce;RMod$;6| -|MODRING;zero?;$B;10| -|MONOID-;one?;SB;2| -|NNI;subtractIfCan;2$U;3| -|NSMP;mvar;$VarSet;5| -|OVAR;<;2$B;10| -|PERMGRP;inv| -|PERMGRP;orbitWithSvc| -|PERMGRP;testIdentity| -|PERMGRP;times| -|PGCD;better| -|PGCD;gcd;3P;15| -|PGCD;gcdTermList| -|POLYCATQ;variables;FL;5| -|PR;*;3$;20| -|PR;addm!| -|PR;coerce;R$;12| -|PR;degree;$E;4| -|PR;leadingCoefficient;$R;6| -|PR;reductum;2$;8| -|PRIMARR;#;$Nni;1| -|PRIMARR;fill!;$S$;9| -|PRIMARR;new;NniS$;4| -|PRTITION;<;2$B;5| -|REPSQ;expt;SPiS;1| -|RING-;coerce;IS;1| -|SAE;*;3$;15| -|SAE;+;3$;13| -|SAE;-;2$;14| -|SAE;=;2$B;12| -|SAE;reduce;UP$;11| -|SCACHE;enterInCache;SMS;5| -|SET;construct;L$;19| -|SET;empty;$;4| -|SGROUP-;**;SPiS;1| -|SINT;zero?;$B;33| -|SMP;*;3$;29| -|SMP;*;R2$;25| -|SMP;+;3$;26| -|SMP;-;2$;23| -|SMP;=;2$B;28| -|SMP;coerce;R$;20| -|SMP;coerce;VarSet$;7| -|SMP;exquo;2$U;35| -|SMP;exquo;2$U;36| -|SMP;gcd;3$;41| -|SMP;gcd;3$;44| -|SMP;gcd;3$;48| -|SMP;gcd;3$;51| -|SMP;ground?;$B;15| -|SMP;leadingCoefficient;$R;73| -|SMP;mainVariable;$U;59| -|SMP;one?;$B;4| -|SMP;retract;$R;55| -|SMP;unitNormal;$R;31| -|SMP;variables;$L;58| -|SMP;zero?;$B;3| -|STAGG-;c2| -|STAGG-;concat;3A;7| -|STAGG-;elt;AIS;5| -|STAGG-;first;ANniA;3| -|STREAM2;map;MSS;2| -|STREAM2;mapp!0| -|STREAM2;mapp| -|STREAM;empty;$;33| -|STREAM;lazyEval| -|STREAM;setfrst!| -|STREAM;setrst!| -|STTAYLOR;+;3S;2| -|SUP;exquo;2$U;19| -|SUP;exquo;2$U;20| -|SUP;fmecg;$NniR2$;21| -|SUP;ground?;$B;3| -|SUP;monicDivide;2$R;28| -|URAGG-;tail;2A;16| -|ZMOD;*;3$;30| -|ZMOD;+;3$;32| -|ZMOD;-;2$;36| -|ZMOD;-;3$;33| + DOUBLE PRECISION FUNCTION F(X) + DOUBLE PRECISION X + F=DSIN(X) + RETURN + END \end{verbatim} -\endscroll -\autobuttons \end{page} @ -\section{ug01.ht} -<>= -\newcommand{\ugIntroTitle}{An Overview of Axiom} -\newcommand{\ugIntroNumber}{1.} - -@ -\subsection{1. An Overview of Axiom} -\label{ugIntroPage} -\begin{itemize} -\item ugIntroTypoPage \ref{ugIntroTypoPage} on -page~\pageref{ugIntroTypoPage} -\item ugIntroStartPage \ref{ugIntroStartPage} on -page~\pageref{ugIntroStartPage} -\item ugIntroTypoPage \ref{ugIntroTypoPage} on -page~\pageref{ugIntroTypoPage} -\item ugIntroExpressionsPage \ref{ugIntroExpressionsPage} on -page~\pageref{ugIntroExpressionsPage} -\item ugIntroGraphicsPage \ref{ugIntroGraphicsPage} on -page~\pageref{ugIntroGraphicsPage} -\item ugIntroNumbersPage \ref{ugIntroNumbersPage} on -page~\pageref{ugIntroNumbersPage} -\item ugIntroCollectPage \ref{ugIntroCollectPage} on -page~\pageref{ugIntroCollectPage} -\item ugIntroTwoDimPage \ref{ugIntroTwoDimPage} on -page~\pageref{ugIntroTwoDimPage} -\item ugIntroYouPage \ref{ugIntroYouPage} on -page~\pageref{ugIntroYouPage} -\item ugIntroVariablesPage \ref{ugIntroVariablesPage} on -page~\pageref{ugIntroVariablesPage} -\item ugIntroCalcLimitsPage \ref{ugIntroCalcLimitsPage} on -page~\pageref{ugIntroCalcLimitsPage} -\item ugIntroSeriesPage \ref{ugIntroSeriesPage} on -page~\pageref{ugIntroSeriesPage} -\item ugIntroCalcDerivPage \ref{ugIntroCalcDerivPage} on -page~\pageref{ugIntroCalcDerivPage} -\item ugIntroIntegratePage \ref{ugIntroIntegratePage} on -page~\pageref{ugIntroIntegratePage} -\item ugIntroDiffEqnsPage \ref{ugIntroDiffEqnsPage} on -page~\pageref{ugIntroDiffEqnsPage} -\item ugIntroSolutionPage \ref{ugIntroSolutionPage} on -page~\pageref{ugIntroSolutionPage} -\item ugIntroSysCmmandsPage \ref{ugIntroSysCmmandsPage} on -page~\pageref{ugIntroSysCmmandsPage} -\end{itemize} -\index{pages!ugIntroPage!ug01.ht} -\index{ug01.ht!pages!ugIntroPage} -\index{ugIntroPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroPage}{1. An Overview of Axiom} - -\beginscroll - -Welcome to the Axiom environment for interactive computation -and problem solving. -Consider this chapter a brief, whirlwind tour of the Axiom -world. -We introduce you to Axiom's graphics and the Axiom -language. -Then we give a sampling of the large variety of facilities -in the Axiom system, ranging from the various kinds of -numbers, to data types (like lists, arrays, and sets) and -mathematical objects (like matrices, integrals, and differential -equations). -We conclude with the discussion of system commands and an -interactive ``undo.'' - -Before embarking on the tour, we need to brief those readers -working interactively with Axiom on some details. -Others can skip right immediately to -\downlink{``\ugIntroTypoTitle''}{ugIntroTypoPage} in -Section \ugIntroTypoNumber\ignore{ugIntroTypo}. - -\beginmenu - \menudownlink{{1.1. Starting Up and Winding Down}}{ugIntroStartPage} - \menudownlink{{1.2. Typographic Conventions}}{ugIntroTypoPage} - \menudownlink{{1.3. The Axiom Language}}{ugIntroExpressionsPage} - \menudownlink{{1.4. Graphics}}{ugIntroGraphicsPage} - \menudownlink{{1.5. Numbers}}{ugIntroNumbersPage} - \menudownlink{{1.6. Data Structures}}{ugIntroCollectPage} - \menudownlink{{1.7. Expanding to Higher Dimensions}}{ugIntroTwoDimPage} - \menudownlink{{1.8. Writing Your Own Functions}}{ugIntroYouPage} - \menudownlink{{1.9. Polynomials}}{ugIntroVariablesPage} - \menudownlink{{1.10. Limits}}{ugIntroCalcLimitsPage} - \menudownlink{{1.11. Series}}{ugIntroSeriesPage} - \menudownlink{{1.12. Derivatives}}{ugIntroCalcDerivPage} - \menudownlink{{1.13. Integration}}{ugIntroIntegratePage} - \menudownlink{{1.14. Differential Equations}}{ugIntroDiffEqnsPage} - \menudownlink{{1.15. Solution of Equations}}{ugIntroSolutionPage} - \menudownlink{{1.16. System Commands}}{ugIntroSysCmmandsPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroStartTitle}{Starting Up and Winding Down} -\newcommand{\ugIntroStartNumber}{1.1.} - -@ -\subsection{1.1. Starting Up and Winding Down} -\label{ugIntroStartPage} -\begin{itemize} -\item ugHyperPage \ref{ugHyperPage} on -page~\pageref{ugHyperPage} -\item ugSysCmdPage \ref{ugSysCmdPage} on -page~\pageref{ugSysCmdPage} -\item ugAvailCLEFPage \ref{ugAvailCLEFPage} on -page~\pageref{ugAvailCLEFPage} -\end{itemize} -\index{pages!ugIntroStartPage!ug01.ht} -\index{ug01.ht!pages!ugIntroStartPage} -\index{ugIntroStartPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroStartPage}{1.1. Starting Up and Winding Down} -\beginscroll - -You need to know how to start the Axiom system and how to stop it. -We assume that Axiom has been correctly installed on your -machine (as described in another Axiom document). - -To begin using Axiom, issue the command {\bf axiom} to the -operating system shell. -There is a brief pause, some start-up messages, and then one -or more windows appear. - -If you are not running Axiom under the X Window System, there is -only one window (the console). -At the lower left of the screen there is a prompt that -looks like +\subsection{Asp10 Example Code} +\label{Asp10ExampleCode} +\index{pages!Asp10ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp10ExampleCode} +\index{Asp10ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp10ExampleCode}{Asp10 Example Code} \begin{verbatim} -(1) -> + SUBROUTINE COEFFN(P,Q,DQDL,X,ELAM,JINT) + DOUBLE PRECISION ELAM,P,Q,X,DQDL + INTEGER JINT + P=1.0D0 + Q=((-1.0D0*X**3)+ELAM*X*X-2.0D0)/(X*X) + DQDL=1.0D0 + RETURN + END \end{verbatim} -%%--> do you want to talk about equation numbers on the right, etc. -When you want to enter input to Axiom, you do so on the same line -after the prompt. -The ``1'' in ``(1)'' is the computation step number and is incremented -after you enter Axiom statements. -Note, however, that a system command -such as \spadsys{)clear all} -may change the step number in other ways. -We talk about step numbers more when we discuss system commands -and the workspace history facility. - -If you are running Axiom under the X Window System, there may be two -windows: the console window (as just described) and the \HyperName{} -main menu. -\HyperName{} is a multiple-window hypertext system that lets you -view Axiom documentation and examples on-line, -execute Axiom expressions, and generate graphics. -If you are in a graphical windowing environment, -it is usually started automatically when Axiom begins. -If it is not running, issue \spadsys{)hd} to start it. -We discuss the basics of \HyperName{} in -\downlink{``\ugHyperTitle''}{ugHyperPage} in Chapter -\ugHyperNumber\ignore{ugHyper}. - -To interrupt an Axiom computation, hold down the -\texht{\fbox{\bf Ctrl}}{{\bf Ctrl}} (control) key and press -\texht{\fbox{\bf c}}{{\bf c}}. -This brings you back to the Axiom prompt. - -\beginImportant -To exit from Axiom, move to the console window, -type \spadsys{)quit} -at the input prompt and press the \texht{\fbox{\bf Enter}}{{\bf Enter}} key. -You will probably be prompted with the following message: -\centerline{{Please enter {\bf y} or {\bf yes} if you really want to leave the }} -\centerline{{interactive environment and return to the operating system}} -You should respond {\bf yes}, for example, to exit Axiom. -\endImportant - -We are purposely vague in describing exactly what your screen -looks like or what messages Axiom displays. -Axiom runs on a number of different machines, operating -systems and window environments, and these differences all affect -the physical look of the system. -You can also change the way that Axiom behaves via -\spadgloss{system commands} described later in this chapter and in -\downlink{``\ugSysCmdTitle''}{ugSysCmdPage} -in Appendix \ugSysCmdNumber\ignore{ugSysCmd}. -System commands are special commands, like \spadcmd{)set}, that begin -with a closing parenthesis and are used to change your -environment. -For example, you can set a system variable so that you are not -prompted for confirmation when you want to leave Axiom. - -\beginmenu - \menudownlink{{1.1.1. \Clef{}}}{ugAvailCLEFPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugAvailCLEFTitle}{\Clef{}} -\newcommand{\ugAvailCLEFNumber}{1.1.1.} - -@ -\subsection{1.1.1. Clef} -\label{ugAvailCLEFPage} -\index{pages!ugAvailCLEFPage!ug01.ht} -\index{ug01.ht!pages!ugAvailCLEFPage} -\index{ugAvailCLEFPage!ug01.ht!pages} -<>= -\begin{page}{ugAvailCLEFPage}{1.1.1. \Clef{}} -\beginscroll -% -If you are using Axiom under the X Window System, the -\Clef{} command line editor is probably available and installed. -With this editor you can recall previous lines with the up and -down arrow keys\texht{ (\fbox{$\uparrow$} and -\fbox{$\downarrow$})}{}. -To move forward and backward on a line, use the right and -left arrows\texht{ (\fbox{$\rightarrow$} and -\fbox{$\leftarrow$})}{}. -You can use the -\texht{\fbox{\bf Insert}}{{\bf Insert}} -key to toggle insert mode on or off. -When you are in insert mode, -the cursor appears as a large block and if you type -anything, the characters are inserted into the line without -deleting the previous ones. - -If you press the -\texht{\fbox{\bf Home}}{{\bf Home}} -key, the cursor moves to the beginning of the line and if you press the -\texht{\fbox{\bf End}}{{\bf End}} -key, the cursor moves to the end of the line. -Pressing -\texht{\fbox{\bf Ctrl}--\fbox{\bf End}}{{\bf Ctrl-End}} -deletes all the text from the cursor to the end of the line. - -\Clef{} also provides Axiom operation name completion for -a limited set of operations. -If you enter a few letters and then press the -\texht{\fbox{\bf Tab}}{{\bf Tab}} key, -\Clef{} tries to use those letters as the prefix of an Axiom -operation name. -If a name appears and it is not what you want, press -\texht{\fbox{\bf Tab}}{{\bf Tab}} again -to see another name. - -You are ready to begin your journey into the world of Axiom. -Proceed to the first stop. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroTypoTitle}{Typographic Conventions} -\newcommand{\ugIntroTypoNumber}{1.2.} - -@ -\subsection{1.2. Typographic Conventions} -\label{ugIntroTypoPage} -\index{pages!ugIntroTypoPage!ug01.ht} -\index{ug01.ht!pages!ugIntroTypoPage} -\index{ugIntroTypoPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroTypoPage}{1.2. Typographic Conventions} -\beginscroll - -In this book we have followed these typographical conventions: -\indent{4} -\beginitems -% -\item[-] Categories, domains and packages are displayed in -\texht{a sans-serif typeface:}{this font:} -\axiomType{Ring}, \axiomType{Integer}, \axiomType{DiophantineSolutionPackage}. -% -\item[-] Prefix operators, infix operators, and punctuation symbols in the Axiom -language are displayed in the text like this: -\axiomOp{+}, \axiomSyntax{\$}, \axiomSyntax{+->}. -% -\item[-] Axiom expressions or expression fragments are displayed in -\texht{a mon\-o\-space typeface:}{this font:} -\axiom{inc(x) == x + 1}. -% -\item[-] For clarity of presentation, \TeX{} is often -used to format expressions\texht{: $g(x)=x^2+1.$}{.} -% -\item[-] Function names and \HyperName{} button names -are displayed in the text in -\texht{a bold typeface:}{this font:} -\axiomFun{factor}, \axiomFun{integrate}, {\bf Lighting}. -% -\item[-] Italics are used for emphasis and for words defined in the -glossary: \spadgloss{category}. -\enditems -\indent{0} - -This book contains over 2500 examples of Axiom input and output. -All examples were run though Axiom and their output was -created in \texht{\TeX{}}{TeX} form for this book by the Axiom -\axiomType{TexFormat} package. -We have deleted system messages from the example output if those -messages are not important for the discussions in which the examples -appear. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroExpressionsTitle}{The Axiom Language} -\newcommand{\ugIntroExpressionsNumber}{1.3.} - -@ -\subsection{1.3. The Axiom Language} -\label{ugIntroExpressionsPage} -\begin{itemize} -\item ugIntroArithmeticPage \ref{ugIntroArithmeticPage} on -page~\pageref{ugIntroArithmeticPage} -\item ugIntroPreviousPage \ref{ugIntroPreviousPage} on -page~\pageref{ugIntroPreviousPage} -\item ugIntroTypesPage \ref{ugIntroTypesPage} on -page~\pageref{ugIntroTypesPage} -\item ugIntroAssignPage \ref{ugIntroAssignPage} on -page~\pageref{ugIntroAssignPage} -\item ugIntroConversionPage \ref{ugIntroConversionPage} on -page~\pageref{ugIntroConversionPage} -\item ugIntroCallFunPage \ref{ugIntroCallFunPage} on -page~\pageref{ugIntroCallFunPage} -\item ugIntroMacrosPage \ref{ugIntroMacrosPage} on -page~\pageref{ugIntroMacrosPage} -\item ugIntroLongPage \ref{ugIntroLongPage} on -page~\pageref{ugIntroLongPage} -\item ugIntroCommentsPage \ref{ugIntroCommentsPage} on -page~\pageref{ugIntroCommentsPage} -\end{itemize} -\index{pages!ugIntroExpressionsPage!ug01.ht} -\index{ug01.ht!pages!ugIntroExpressionsPage} -\index{ugIntroExpressionsPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroExpressionsPage}{1.3. The Axiom Language} -\beginscroll -% - -The Axiom language is a rich language for performing -interactive computations and for building components of the -Axiom library. -Here we present only some basic aspects of the language that you -need to know for the rest of this chapter. -Our discussion here is intentionally informal, with details -unveiled on an ``as needed'' basis. -For more information on a particular construct, we suggest you -consult the index at the back of the book. - -\beginmenu - \menudownlink{{1.3.1. Arithmetic Expressions}}{ugIntroArithmeticPage} - \menudownlink{{1.3.2. Previous Results}}{ugIntroPreviousPage} - \menudownlink{{1.3.3. Some Types}}{ugIntroTypesPage} - \menudownlink{{1.3.4. Symbols, Variables, Assignments, and Declarations}}{ugIntroAssignPage} - \menudownlink{{1.3.5. Conversion}}{ugIntroConversionPage} - \menudownlink{{1.3.6. Calling Functions}}{ugIntroCallFunPage} - \menudownlink{{1.3.7. Some Predefined Macros}}{ugIntroMacrosPage} - \menudownlink{{1.3.8. Long Lines}}{ugIntroLongPage} - \menudownlink{{1.3.9. Comments}}{ugIntroCommentsPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroArithmeticTitle}{Arithmetic Expressions} -\newcommand{\ugIntroArithmeticNumber}{1.3.1.} - -@ -\subsection{1.3.1. Arithmetic Expressions} -\label{ugIntroArithmeticPage} -\index{pages!ugIntroArithmeticPage!ug01.ht} -\index{ug01.ht!pages!ugIntroArithmeticPage} -\index{ugIntroArithmeticPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroArithmeticPage}{1.3.1. Arithmetic Expressions} -\beginscroll - -For arithmetic expressions, use the \spadop{+} and \spadop{-} -\spadglossSee{operators}{operator} as in mathematics. -Use \spadop{*} for multiplication, and \spadop{**} for -exponentiation. -To create a fraction, use \spadop{/}. -When an expression contains several operators, those of highest -\spadgloss{precedence} are evaluated first. -For arithmetic operators, \spadop{**} has highest precedence, -\spadop{*} and \spadop{/} have the next highest -precedence, and \spadop{+} and \spadop{-} have the lowest -precedence. - -\xtc{ -Axiom puts implicit parentheses around operations of higher -precedence, and groups those of equal precedence from left to right. -}{ -\spadpaste{1 + 2 - 3 / 4 * 3 ** 2 - 1} -} -\xtc{ -The above expression is equivalent to this. -}{ -\spadpaste{((1 + 2) - ((3 / 4) * (3 ** 2))) - 1} -} -\xtc{ -If an expression contains subexpressions enclosed in parentheses, -the parenthesized subexpressions are evaluated first (from left to -right, from inside out). -}{ -\spadpaste{1 + 2 - 3/ (4 * 3 ** (2 - 1))} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroPreviousTitle}{Previous Results} -\newcommand{\ugIntroPreviousNumber}{1.3.2.} - -@ -\subsection{1.3.2. Previous Results} -\label{ugIntroPreviousPage} -\index{pages!ugIntroPreviousPage!ug01.ht} -\index{ug01.ht!pages!ugIntroPreviousPage} -\index{ugIntroPreviousPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroPreviousPage}{1.3.2. Previous Results} -\beginscroll - -Use the percent sign (\axiomSyntax{\%}) to refer to the last -result. -Also, use \axiomSyntax{\%\%} to refer to previous results. -\axiom{\%\%(-1)} is equivalent to \axiomSyntax{\%}, -\axiom{\%\%(-2)} returns the next to the last result, and so on. -\axiom{\%\%(1)} returns the result from step number 1, -\axiom{\%\%(2)} returns the result from step number 2, and so on. -\axiom{\%\%(0)} is not defined. - -\xtc{ -This is ten to the tenth power. -}{ -\spadpaste{10 ** 10 \bound{prev}} -} -\xtc{ -This is the last result minus one. -}{ -\spadpaste{\% - 1 \free{prev}\bound{prev1}} -} -\xtc{ -This is the last result. -}{ -\spadpaste{\%\%(-1) \free{prev1}\bound{prev2}} -} -\xtc{ -This is the result from step number 1. -}{ -\spadpaste{\%\%(1) \free{prev2}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroTypesTitle}{Some Types} -\newcommand{\ugIntroTypesNumber}{1.3.3.} - -@ -\subsection{1.3.3. Some Types} -\label{ugIntroTypesPage} -\begin{itemize} -\item ugTypesPage \ref{ugTypesPage} on -page~\pageref{ugTypesPage} -\end{itemize} -\index{pages!ugIntroTypesPage!ug01.ht} -\index{ug01.ht!pages!ugIntroTypesPage} -\index{ugIntroTypesPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroTypesPage}{1.3.3. Some Types} -\beginscroll - -Everything in Axiom has a type. -The type determines what operations you can perform on an object and -how the object can be used. -An entire chapter of this book (\downlink{``\ugTypesTitle''}{ugTypesPage} -in Chapter \ugTypesNumber\ignore{ugTypes}) is dedicated to -the interactive use of types. -Several of the final chapters discuss how types are built and how -they are organized in the Axiom library. - -\xtc{ -Positive integers are given type \spadtype{PositiveInteger}. -}{ -\spadpaste{8} -} -\xtc{ -Negative ones are given type \spadtype{Integer}. -This fine distinction is helpful to the -Axiom interpreter. -}{ -\spadpaste{-8} -} -\xtc{ -Here a positive integer exponent gives a polynomial result. -}{ -\spadpaste{x**8} -} -\xtc{ -Here a negative integer exponent produces a fraction. -}{ -\spadpaste{x**(-8)} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroAssignTitle}{Symbols, Variables, Assignments, and Declarations} -\newcommand{\ugIntroAssignNumber}{1.3.4.} - -@ -\subsection{1.3.4. Symbols, Variables, Assignments, and Declarations} -\label{ugIntroAssignPage} -\begin{itemize} -\item ugLangAssignPage \ref{ugLangAssignPage} on -page~\pageref{ugLangAssignPage} -\end{itemize} -\index{pages!ugIntroAssignPage!ug01.ht} -\index{ug01.ht!pages!ugIntroAssignPage} -\index{ugIntroAssignPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroAssignPage} -{1.3.4. Symbols, Variables, Assignments, and Declarations} -\beginscroll - -A \spadgloss{symbol} is a literal used for the input of things like -the ``variables'' in polynomials and power series. - -\labelSpace{2pc} -\xtc{ -We use the three symbols \axiom{x}, \axiom{y}, and \axiom{z} in -entering this polynomial. -}{ -\spadpaste{(x - y*z)**2} -} -A symbol has a name beginning with an uppercase or lowercase alphabetic -character, \axiomSyntax{\%}, or \axiomSyntax{!}. -Successive characters (if any) can be any of the above, digits, or -\axiomSyntax{?}. -Case is distinguished: the symbol \axiom{points} is different -from the symbol \axiom{Points}. - -A symbol can also be used in Axiom as a \spadgloss{variable}. -A variable refers to a value. -To \spadglossSee{assign}{assignment} -a value to a variable, -the operator \axiomSyntax{:=} -is used.\footnote{Axiom actually has two forms of assignment: -{\it immediate} assignment, as discussed here, -and {\it delayed assignment}. See -\downlink{``\ugLangAssignTitle''}{ugLangAssignPage} -in Section \ugLangAssignNumber\ignore{ugLangAssign} for details.} -A variable initially has no restrictions on the kinds of -values to which it can refer. - -\xtc{ -This assignment gives the value \axiom{4} (an integer) to -a variable named \axiom{x}. -}{ -\spadpaste{x := 4} -} -\xtc{ -This gives the value \axiom{z + 3/5} (a polynomial) to \axiom{x}. -}{ -\spadpaste{x := z + 3/5} -} -\xtc{ -To restrict the types of objects that can be assigned to a variable, -use a \spadgloss{declaration} -}{ -\spadpaste{y : Integer \bound{y}} -} -\xtc{ -After a variable is declared to be of some type, only values -of that type can be assigned to that variable. -}{ -\spadpaste{y := 89\bound{y1}\free{y}} -} -\xtc{ -The declaration for \axiom{y} forces values assigned to \axiom{y} to -be converted to integer values. -}{ -\spadpaste{y := sin \%pi} -} -\xtc{ -If no such conversion is possible, -Axiom refuses to assign a value to \axiom{y}. -}{ -\spadpaste{y := 2/3} -} -\xtc{ -A type declaration can also be given together with an assignment. -The declaration can assist Axiom in choosing the correct -operations to apply. -}{ -\spadpaste{f : Float := 2/3} -} - -Any number of expressions can be given on input line. -Just separate them by semicolons. -Only the result of evaluating the last expression is displayed. - -\xtc{ -These two expressions have the same effect as -the previous single expression. -}{ -\spadpaste{f : Float; f := 2/3 \bound{fff}} -} - -The type of a symbol is either \axiomType{Symbol} -or \axiomType{Variable({\it name})} where {\it name} is the name -of the symbol. - -\xtc{ -By default, the interpreter -gives this symbol the type \axiomType{Variable(q)}. -}{ -\spadpaste{q} -} -\xtc{ -When multiple symbols are involved, \axiomType{Symbol} is used. -}{ -\spadpaste{[q, r]} -} - -\xtc{ -What happens when you try to use a symbol that is the name of a variable? -}{ -\spadpaste{f \free{fff}} -} -\xtc{ -Use a single quote (\axiomSyntax{'}) before -the name to get the symbol. -}{ -\spadpaste{'f} -} - -Quoting a name creates a symbol by -preventing evaluation of the name as a variable. -Experience will teach you when you are most likely going to need to use -a quote. -We try to point out the location of such trouble spots. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroConversionTitle}{Conversion} -\newcommand{\ugIntroConversionNumber}{1.3.5.} - -@ -\subsection{1.3.5. Conversion} -\label{ugIntroConversionPage} -\begin{itemize} -\item ugTypesConvertPage \ref{ugTypesConvertPage} on -page~\pageref{ugTypesConvertPage} -\end{itemize} -\index{pages!ugIntroConversionPage!ug01.ht} -\index{ug01.ht!pages!ugIntroConversionPage} -\index{ugIntroConversionPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroConversionPage}{1.3.5. Conversion} -\beginscroll - -Objects of one type can usually be ``converted'' to objects of several -other types. -To \spadglossSee{convert}{conversion} -an object to a new type, use the \axiomSyntax{::} infix -operator.\footnote{Conversion is discussed in detail in -\downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} -in Section \ugTypesConvertNumber\ignore{ugTypesConvert}.} -For example, to display an object, it is necessary to -convert the object to type \spadtype{OutputForm}. - -\xtc{ -This produces a polynomial with rational number coefficients. -}{ -\spadpaste{p := r**2 + 2/3 \bound{p}} -} -\xtc{ -Create a quotient of polynomials with integer coefficients -by using \axiomSyntax{::}. -}{ -\spadpaste{p :: Fraction Polynomial Integer \free{p}} -} - -Some conversions can be performed automatically when -Axiom tries to evaluate your input. -Others conversions must be explicitly requested. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroCallFunTitle}{Calling Functions} -\newcommand{\ugIntroCallFunNumber}{1.3.6.} - -@ -\subsection{1.3.6. Calling Functions} -\label{ugIntroCallFunPage} -\index{pages!ugIntroCallFunPage!ug01.ht} -\index{ug01.ht!pages!ugIntroCallFunPage} -\index{ugIntroCallFunPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroCallFunPage}{1.3.6. Calling Functions} -\beginscroll - -As we saw earlier, when you want to add or subtract two values, -you place the arithmetic operator \spadop{+} -or \spadop{-} between the two -\spadglossSee{arguments}{argument} denoting the values. -To use most other Axiom operations, however, you use another syntax: -write the name -of the operation first, then an open parenthesis, then each of the -arguments separated by commas, and, finally, a closing parenthesis. -If the operation takes only one argument and the argument is a number -or a symbol, you can omit the parentheses. - -\xtc{ -This calls the operation \axiomFun{factor} with the single -integer argument \axiom{120}. -}{ -\spadpaste{factor(120)} -} -\xtc{ -This is a call to \axiomFun{divide} with the two integer arguments -\axiom{125} and \axiom{7}. -}{ -\spadpaste{divide(125,7)} -} -\xtc{ -This calls \axiomFun{quatern} with four floating-point arguments. -}{ -\spadpaste{quatern(3.4,5.6,2.9,0.1)} -} -\xtc{ -This is the same as \axiom{factorial(10)}. -}{ -\spadpaste{factorial 10} -} - -An operations that returns a \spadtype{Boolean} value (that is, -\spad{true} or \spad{false}) frequently has a name suffixed with -a question mark (``?''). For example, the \spadfun{even?} -operation returns \spad{true} if its integer argument is an even -number, \spad{false} otherwise. - -An operation that can be destructive on one or more arguments -usually has a name ending in a exclamation point (``!''). -This actually means that it is {\it allowed} to update its -arguments but it is not {\it required} to do so. For example, -the underlying representation of a collection type may not allow -the very last element to removed and so an empty object may be -returned instead. Therefore, it is important that you use the -object returned by the operation and not rely on a physical -change having occurred within the object. Usually, destructive -operations are provided for efficiency reasons. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroMacrosTitle}{Some Predefined Macros} -\newcommand{\ugIntroMacrosNumber}{1.3.7.} - -@ -\subsection{1.3.7. Some Predefined Macros} -\label{ugIntroMacrosPage} -\begin{itemize} -\item ugUserMacrosPage \ref{ugUserMacrosPage} on -page~\pageref{ugUserMacrosPage} -\end{itemize} -\index{pages!ugIntroMacrosPage!ug01.ht} -\index{ug01.ht!pages!ugIntroMacrosPage} -\index{ugIntroMacrosPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroMacrosPage}{1.3.7. Some Predefined Macros} -\beginscroll - -Axiom provides several \spadglossSee{macros}{macro} -for your convenience.\footnote{See -\downlink{``\ugUserMacrosTitle''}{ugUserMacrosPage} -in Section \ugUserMacrosNumber\ignore{ugUserMacros} -for a discussion on how to write your own macros.} -Macros are names -(or forms) that expand to larger expressions for commonly used values. - -\texht{ -\centerline{{\begin{tabular}{ll}}} -\centerline{{\spadgloss{\%i} & The square root of -1. }} -\centerline{{\spadgloss{\%e} & The base of the natural logarithm. }} -\centerline{{\spadgloss{\%pi} & $\pi$. }} -\centerline{{\spadgloss{\%infinity} & $\infty$. }} -\centerline{{\spadgloss{\%plusInfinity} & $+\infty$. }} -\centerline{{\spadgloss{\%minusInfinity} & $-\infty$.}} -\centerline{{\end{tabular}}} -}{ -\indent{0} -\beginitems -\item[\axiomSyntax{\%i}] \tab{17} The square root of -1. -\item[\axiomSyntax{\%e}] \tab{17} The base of the natural logarithm. -\item[\axiomSyntax{\%pi}] \tab{17} Pi. -\item[\axiomSyntax{\%infinity}] \tab{17} Infinity. -\item[\axiomSyntax{\%plusInfinity}] \tab{17} Plus infinity. -\item[\axiomSyntax{\%minusInfinity}] \tab{17} Minus infinity. -\enditems -\indent{0} -} - -%To display all the macros (along with anything you have -%defined in the workspace), issue the system command \spadsys{)display all}. - -\endscroll -\autobuttons \end{page} -@ -<>= -\newcommand{\ugIntroLongTitle}{Long Lines} -\newcommand{\ugIntroLongNumber}{1.3.8.} @ -\subsection{1.3.8. Long Lines} -\label{ugIntroLongPage} -\begin{itemize} -\item ugInOutInPage \ref{ugInOutInPage} on -page~\pageref{ugInOutInPage} -\item ugLangBlocksPage \ref{ugLangBlocksPage} on -page~\pageref{ugLangBlocksPage} -\end{itemize} -\index{pages!ugIntroLongPage!ug01.ht} -\index{ug01.ht!pages!ugIntroLongPage} -\index{ugIntroLongPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroLongPage}{1.3.8. Long Lines} -\beginscroll - -When you enter Axiom expressions from your keyboard, there -will be times when they are too long to fit on one line. -Axiom does not care how long your lines are, so you can let -them continue from the right margin to the left side of the -next line. - -Alternatively, you may want to enter several shorter lines and -have Axiom glue them together. -To get this glue, put an underscore (\_) at the end of -each line you wish to continue. -\begin{verbatim} -2_ -+_ -3 -\end{verbatim} -is the same as if you had entered +\subsection{Asp12 Example Code} +\label{Asp12ExampleCode} +\index{pages!Asp12ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp12ExampleCode} +\index{Asp12ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp12ExampleCode}{Asp12 Example Code} \begin{verbatim} -2+3 + SUBROUTINE MONIT (MAXIT,IFLAG,ELAM,FINFO) + DOUBLE PRECISION ELAM,FINFO(15) + INTEGER MAXIT,IFLAG + IF(MAXIT.EQ.-1)THEN + PRINT*,"Output from Monit" + ENDIF + PRINT*,MAXIT,IFLAG,ELAM,(FINFO(I),I=1,4) + RETURN + END \end{verbatim} - -If you are putting your Axiom statements in an input file -(see \downlink{``\ugInOutInTitle''}{ugInOutInPage} -in Section \ugInOutInNumber\ignore{ugInOutIn}), -you can use indentation to indicate the structure of your program. -(see \downlink{``\ugLangBlocksTitle''}{ugLangBlocksPage} -in Section \ugLangBlocksNumber\ignore{ugLangBlocks}). - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroCommentsTitle}{Comments} -\newcommand{\ugIntroCommentsNumber}{1.3.9.} - -@ -\subsection{1.3.9. Comments} -\label{ugIntroCommentsPage} -\index{pages!ugIntroCommentsPage!ug01.ht} -\index{ug01.ht!pages!ugIntroCommentsPage} -\index{ugIntroCommentsPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroCommentsPage}{1.3.9. Comments} -\beginscroll - -Comment statements begin with two consecutive hyphens or two -consecutive plus signs and continue until the end of the line. - -\xtc{ -The comment beginning with {\tt --} is ignored by Axiom. -}{ -\spadpaste{2 + 3 -- this is rather simple, no?} -} - -There is no way to write long multi-line comments -other than starting each line with \axiomSyntax{--} or -\axiomSyntax{++}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroGraphicsTitle}{Graphics} -\newcommand{\ugIntroGraphicsNumber}{1.4.} - -@ -\subsection{1.4. Graphics} -\label{ugIntroGraphicsPage} -\begin{itemize} -\item ugProblemNumericPage \ref{ugProblemNumericPage} on -page~\pageref{ugProblemNumericPage} -\item ugAppGraphicsPage \ref{ugAppGraphicsPage} on -page~\pageref{ugAppGraphicsPage} -\item ugGraphPage \ref{ugGraphPage} on -page~\pageref{ugGraphPage} -\end{itemize} -\index{pages!ugIntroGraphicsPage!ug01.ht} -\index{ug01.ht!pages!ugIntroGraphicsPage} -\index{ugIntroGraphicsPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroGraphicsPage}{1.4. Graphics} -\beginscroll -% - -Axiom has a two- and three-dimensional drawing and rendering -package that allows you to draw, shade, color, rotate, translate, map, -clip, scale and combine graphic output of Axiom computations. -The graphics interface is capable of plotting functions of one or more -variables and plotting parametric surfaces. -Once the graphics figure appears in a window, -move your mouse to the window and click. -A control panel appears immediately and allows you to -interactively transform the object. - -\psXtc{ -This is an example of Axiom's two-dimensional plotting. -From the 2D Control Panel you can rescale the plot, turn axes and units -on and off and save the image, among other things. -This PostScript image was produced by clicking on the -\texht{\fbox{\bf PS}}{{\bf PS}} 2D Control Panel button. -}{ -\graphpaste{draw(cos(5*t/8), t=0..16*\%pi, coordinates==polar)} -}{ -\epsffile[72 72 300 300]{../ps/rose-1.ps} -} - -\psXtc{ -This is an example of Axiom's three-dimensional plotting. -It is a monochrome graph of the complex arctangent -function. -The image displayed was rotated and had the ``shade'' and ``outline'' -display options set from the 3D Control Panel. -The PostScript output was produced by clicking on the -\texht{\fbox{\bf save}}{{\bf save}} 3D Control Panel button and then -clicking on the \texht{\fbox{\bf PS}}{{\bf PS}} button. -See \downlink{``\ugProblemNumericTitle''}{ugProblemNumericPage} -in Section \ugProblemNumericNumber\ignore{ugProblemNumeric} for -more details and examples -of Axiom's numeric and graphics capabilities. -}{ -\graphpaste{draw((x,y) +-> real atan complex(x,y), -\%pi..\%pi, -\%pi..\%pi, colorFunction == (x,y) +-> argument atan complex(x,y))} -}{ -\epsffile[72 72 285 285]{../ps/atan-1.ps} -} - -An exhibit of \Gallery{} is given in the -center section of this book. -For a description of the commands and programs that -produced these figures, see -\downlink{``\ugAppGraphicsTitle''}{ugAppGraphicsPage} -in Appendix \ugAppGraphicsNumber\ignore{ugAppGraphics}. -PostScript -output is available so that Axiom images can be -printed.\footnote{PostScript is a trademark of Adobe Systems Incorporated, -registered in the United States.} -See \downlink{``\ugGraphTitle''}{ugGraphPage} -in Chapter \ugGraphNumber\ignore{ugGraph} for -more examples and details about using -Axiom's graphics facilities. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroNumbersTitle}{Numbers} -\newcommand{\ugIntroNumbersNumber}{1.5.} - -@ -\subsection{1.5. Numbers} -\label{ugIntroNumbersPage} -\begin{itemize} -\item FloatXmpPage \ref{FloatXmpPage} on -page~\pageref{FloatXmpPage} -\item DoubleFloatXmpPage \ref{DoubleFloatXmpPage} on -page~\pageref{DoubleFloatXmpPage} -\item ComplexXmpPage \ref{ComplexXmpPage} on -page~\pageref{ComplexXmpPage} -\item DecimalExpansionXmpPage \ref{DecimalExpansionXmpPage} on -page~\pageref{DecimalExpansionXmpPage} -\item ContinuedFractionXmpPage \ref{ContinuedFractionXmpPage} on -page~\pageref{ContinuedFractionXmpPage} -\item PartialFractionXmpPage \ref{PartialFractionXmpPage} on -page~\pageref{PartialFractionXmpPage} -\item RadixExpansionXmpPage \ref{RadixExpansionXmpPage} on -page~\pageref{RadixExpansionXmpPage} -\item ugxProblemFinitePrimeTitle \ref{ugxProblemFinitePrimeTitle} on -page~\pageref{ugxProblemFinitePrimeTitle} -\end{itemize} -\index{pages!ugIntroNumbersPage!ug01.ht} -\index{ug01.ht!pages!ugIntroNumbersPage} -\index{ugIntroNumbersPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroNumbersPage}{1.5. Numbers} -\beginscroll -% - -Axiom distinguishes very carefully between different kinds -of numbers, how they are represented and what their properties -are. -Here are a sampling of some of these kinds of numbers and some -things you can do with them. - -\xtc{ -Integer arithmetic is always exact. -}{ -\spadpaste{11**13 * 13**11 * 17**7 - 19**5 * 23**3} -} -\xtc{ -Integers can be represented in factored form. -}{ -\spadpaste{factor 643238070748569023720594412551704344145570763243 \bound{ex1}} -} -\xtc{ -Results stay factored when you do arithmetic. -Note that the \axiom{12} is automatically factored for you. -}{ -\spadpaste{\% * 12 \free{ex1}} -} -\xtc{ -Integers can also be displayed to bases other than 10. -This is an integer in base 11. -}{ -\spadpaste{radix(25937424601,11)} -} -\xtc{ -Roman numerals are also available for those special occasions. -}{ -\spadpaste{roman(1992)} -} -\xtc{ -Rational number arithmetic is also exact. -}{ -\spadpaste{r := 10 + 9/2 + 8/3 + 7/4 + 6/5 + 5/6 + 4/7 + 3/8 + 2/9\bound{r}} -} -\xtc{ -To factor fractions, you have to -map \axiomFun{factor} onto the numerator and denominator. -}{ -\spadpaste{map(factor,r) \free{r}} -} -\xtc{ -Type \spadtype{SingleInteger} refers to machine word-length -integers. -In English, this expression means ``\axiom{11} as a small -integer''. -}{ -\spadpaste{11@SingleInteger} -} -\xtc{ -Machine double-precision floating-point numbers are also -available for numeric and graphical -applications. -}{ -\spadpaste{123.21@DoubleFloat} -} - -The normal floating-point type in Axiom, \spadtype{Float}, -is a software implementation of floating-point numbers in which -the exponent and the mantissa may have any number of -digits.\footnote{See -\downlink{`Float'}{FloatXmpPage}\ignore{Float} and -\downlink{`DoubleFloat'}{DoubleFloatXmpPage}\ignore{DoubleFloat} for -additional information on floating-point types.} -The types \spadtype{Complex(Float)} and -\spadtype{Complex(DoubleFloat)} are the corresponding software -implementations of complex floating-point numbers. - -\xtc{ -This is a floating-point approximation to about twenty digits. -The \axiomSyntax{::} -is used here to change from one kind of object -(here, a rational number) to another (a floating-point number). -}{ -\spadpaste{r :: Float \free{r}} -} -\xtc{ -Use \spadfunFrom{digits}{Float} to change the number of digits in -the representation. -This operation returns the previous value so you can reset it -later. -}{ -\spadpaste{digits(22) \bound{fewerdigits}} -} -\xtc{ -To \axiom{22} digits of precision, the number -\texht{$e^{\pi {\sqrt {163.0}}}$}{\axiom{exp(\%pi * sqrt 163.0)}} -appears to be an integer. -}{ -\spadpaste{exp(\%pi * sqrt 163.0) \free{fewerdigits}} -} -\xtc{ -Increase the precision to forty digits and try again. -}{ -\spadpaste{digits(40); exp(\%pi * sqrt 163.0) \free{moredigits}} -} -\xtc{ -Here are complex numbers with rational numbers as real and -imaginary parts. -}{ -\spadpaste{(2/3 + \%i)**3 \bound{gaussint}} -} -\xtc{ -The standard operations on complex numbers are available. -}{ -\spadpaste{conjugate \% \free{gaussint}} -} -\xtc{ -You can factor complex integers. -}{ -\spadpaste{factor(89 - 23 * \%i)} -} -\xtc{ -Complex numbers with floating point parts are also available. -}{ -\spadpaste{exp(\%pi/4.0 * \%i)} -} -%%--> These are not numbers: -%\xtc{ -%The real and imaginary parts can be symbolic. -%}{ -%\spadcommand{complex(u,v) \bound{cuv}} -%} -%\xtc{ -%Of course, you can do complex arithmetic with these also. -%See \downlink{`Complex'}{ComplexXmpPage}\ignore{Complex} -for more information. -%}{ -%\spadcommand{\% ** 2 \free{cuv}} -%} -\xtc{ -Every rational number has an exact representation as a -repeating decimal expansion -(see \downlink{`DecimalExpansion'}{DecimalExpansionXmpPage} -\ignore{DecimalExpansion}). -}{ -\spadpaste{decimal(1/352)} -} -\xtc{ -A rational number can also be expressed as a continued fraction (see -\downlink{`ContinuedFraction'}{ContinuedFractionXmpPage} -\ignore{ContinuedFraction}). -}{ -\spadpaste{continuedFraction(6543/210)} -} -\xtc{ -Also, partial fractions can be used and can be displayed in a -compact \ldots -}{ -\spadpaste{partialFraction(1,factorial(10)) \bound{partfrac}} -} -\xtc{ -or expanded format (see -\downlink{`PartialFraction'}{PartialFractionXmpPage}\ignore{PartialFraction}). -}{ -\spadpaste{padicFraction(\%) \free{partfrac}} -} -\xtc{ -Like integers, bases (radices) other than ten can be used for rational -numbers (see -\downlink{`RadixExpansion'}{RadixExpansionXmpPage}\ignore{RadixExpansion}). -Here we use base eight. -}{ -\spadpaste{radix(4/7, 8)\bound{rad}} -} -\xtc{ -Of course, there are complex versions of these as well. -Axiom decides to make the result a complex rational number. -}{ -\spadpaste{\% + 2/3*\%i\free{rad}} -} -\xtc{ -You can also use Axiom to manipulate fractional powers. -}{ -\spadpaste{(5 + sqrt 63 + sqrt 847)**(1/3)} -} -\xtc{ -You can also compute with integers modulo a prime. -}{ -\spadpaste{x : PrimeField 7 := 5 \bound{x}} -} -\xtc{ -Arithmetic is then done modulo \mathOrSpad{7}. -}{ -\spadpaste{x**3 \free{x}} -} -\xtc{ -Since \mathOrSpad{7} is prime, you can invert nonzero values. -}{ -\spadpaste{1/x \free{x}} -} -\xtc{ -You can also compute modulo an integer that is not a prime. -}{ -\spadpaste{y : IntegerMod 6 := 5 \bound{y}} -} -\xtc{ -All of the usual arithmetic operations are available. -}{ -\spadpaste{y**3 \free{y}} -} -\xtc{ -Inversion is not available if the modulus is not a prime -number. -Modular arithmetic and prime fields are discussed in -\downlink{``\ugxProblemFinitePrimeTitle''}{ugxProblemFinitePrimePage} -in Section \ugxProblemFinitePrimeNumber\ignore{ugxProblemFinitePrime}. -}{ -\spadpaste{1/y \free{y}} -} -\xtc{ -This defines \axiom{a} to be an algebraic number, that is, -a root of a polynomial equation. -}{ -\spadpaste{a := rootOf(a**5 + a**3 + a**2 + 3,a) \bound{a}} -} -\xtc{ -Computations with \axiom{a} are reduced according -to the polynomial equation. -}{ -\spadpaste{(a + 1)**10\free{a}} -} -\xtc{ -Define \axiom{b} to be an algebraic number involving \axiom{a}. -}{ -\spadpaste{b := rootOf(b**4 + a,b) \bound{b}\free{a}} -} -\xtc{ -Do some arithmetic. -}{ -\spadpaste{2/(b - 1) \free{b}\bound{check}} -} -\xtc{ -To expand and simplify this, call \axiomFun{ratDenom} -to rationalize the denominator. -}{ -\spadpaste{ratDenom(\%) \free{check}\bound{check1}} -} -\xtc{ -If we do this, we should get \axiom{b}. -}{ -\spadpaste{2/\%+1 \free{check1}\bound{check2}} -} -\xtc{ -But we need to rationalize the denominator again. -}{ -\spadpaste{ratDenom(\%) \free{check2}} -} -\xtc{ -Types \spadtype{Quaternion} and \spadtype{Octonion} are also available. -Multiplication of quaternions is non-commutative, as expected. -}{ -\spadpaste{q:=quatern(1,2,3,4)*quatern(5,6,7,8) - quatern(5,6,7,8)*quatern(1,2,3,4)} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroCollectTitle}{Data Structures} -\newcommand{\ugIntroCollectNumber}{1.6.} - -@ -\subsection{1.6. Data Structures} -\label{ugIntroCollectPage} -\begin{itemize} -\item ListXmpPage \ref{ListXmpPage} on -page~\pageref{ListXmpPage} -\item ugLangItsPage \ref{ugLangItsPage} on -page~\pageref{ugLangItsPage} -\item StreamXmpPage \ref{StreamXmpPage} on -page~\pageref{StreamXmpPage} -\item ugLangItsPage \ref{ugLangItsPage} on -page~\pageref{ugLangItsPage} -\item OneDimensionalArrayXmpPage \ref{OneDimensionalArrayXmpPage} on -page~\pageref{OneDimensionalArrayXmpPage} -\item FlexibleArrayXmpPage \ref{FlexibleArrayXmpPage} on -page~\pageref{FlexibleArrayXmpPage} -\item HeapXmpPage \ref{HeapXmpPage} on -page~\pageref{HeapXmpPage} -\item BinarySearchTreeXmpPage \ref{BinarySearchTreeXmpPage} on -page~\pageref{BinarySearchTreeXmpPage} -\item BalancedBinaryTreeXmpPage \ref{BalancedBinaryTreeXmpPage} on -page~\pageref{BalancedBinaryTreeXmpPage} -\item SetXmpPage \ref{SetXmpPage} on -page~\pageref{SetXmpPage} -\item MultiSetXmpPage \ref{MultiSetXmpPage} on -page~\pageref{MultiSetXmpPage} -\item AssociationListXmpPage \ref{AssociationListXmpPage} on -page~\pageref{AssociationListXmpPage} -\item KeyedAccessFileXmpPage \ref{KeyedAccessFileXmpPage} on -page~\pageref{KeyedAccessFileXmpPage} -\item LibraryXmpPage \ref{LibraryXmpPage} on -page~\pageref{LibraryXmpPage} -\item SparseTableXmpPage \ref{SparseTableXmpPage} on -page~\pageref{SparseTableXmpPage} -\item StringTableXmpPage \ref{StringTableXmpPage} on -page~\pageref{StringTableXmpPage} -\item TableXmpPage \ref{TableXmpPage} on -page~\pageref{TableXmpPage} -\item ugTypesRecordsPage \ref{ugTypesRecordsPage} on -page~\pageref{ugTypesRecordsPage} -\item ugTypesUnionsPage \ref{ugTypesUnionsPage} on -page~\pageref{ugTypesUnionsPage} -\item ugDomainsPage \ref{ugDomainsPage} on -page~\pageref{ugDomainsPage} -\end{itemize} -\index{pages!ugIntroCollectPage!ug01.ht} -\index{ug01.ht!pages!ugIntroCollectPage} -\index{ugIntroCollectPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroCollectPage}{1.6. Data Structures} -\beginscroll -% - -Axiom has a large variety of data structures available. -Many data structures are particularly useful for interactive -computation and others are useful for building applications. -The data structures of Axiom are organized into -\spadglossSee{category hierarchies}{hierarchy} as shown on -the inside back cover. - -A \spadgloss{list} is the most commonly used data structure in -Axiom for holding objects all of the same -type.\footnote{Lists are discussed in -\downlink{`List'}{ListXmpPage}\ignore{List} and in -\downlink{``\ugLangItsTitle''}{ugLangItsPage} -in Section \ugLangItsNumber\ignore{ugLangIts}.} -The name {\it list} is short for ``linked-list of nodes.'' Each -node consists of a value (\spadfunFrom{first}{List}) and a link -(\spadfunFrom{rest}{List}) that -\spadglossSee{points}{pointer} to the next node, or to a -distinguished value denoting the empty list. -To get to, say, the third element, Axiom starts at the front -of the list, then traverses across two links to the third node. - -\xtc{ -Write a list of elements using -square brackets with commas separating the elements. -}{ -\spadpaste{u := [1,-7,11] \bound{u}} -} -\xtc{ -This is the value at the third node. -Alternatively, you can say \axiom{u.3}. -}{ -\spadpaste{first rest rest u\free{u}} -} - -Many operations are defined on lists, such as: -\axiomFun{empty?}, to test that a list has no elements; -\axiomFun{cons}\axiom{(x,l)}, to create a new list with -\axiomFun{first} element \axiom{x} and \axiomFun{rest} \axiom{l}; -\axiomFun{reverse}, to create a new list with elements in reverse -order; and \axiomFun{sort}, to arrange elements in order. - -An important point about lists is that they are ``mutable'': their -constituent elements and links can be changed ``in place.'' -To do this, use any of the operations whose names end with the -character \axiomSyntax{!}. - -\xtc{ -The operation \spadfunFromX{concat}{List}\axiom{(u,v)} -replaces the last link of the list -\axiom{u} to point to some other list \axiom{v}. -Since \axiom{u} refers to the original list, -this change is seen by \axiom{u}. -}{ -\spadpaste{concat!(u,[9,1,3,-4]); u\free{u}\bound{u1}} -} -\xtc{ -A {\it cyclic list} is a list with a ``cycle'': -a link pointing back to an earlier node of the list. -To create a cycle, first get a node somewhere down -the list. -}{ -\spadpaste{lastnode := rest(u,3)\free{u1}\bound{u2}} -} -\xtc{ -Use \spadfunFromX{setrest}{List} to -change the link emanating from that node to point back to an -earlier part of the list. -}{ -\spadpaste{setrest!(lastnode,rest(u,2)); u\free{u2}} -} - -A \spadgloss{stream} -is a structure that (potentially) has an infinite number of -distinct elements.\footnote{Streams are discussed in -\downlink{`Stream'}{StreamXmpPage}\ignore{Stream} and in -\downlink{``\ugLangItsTitle''}{ugLangItsPage} -in Section \ugLangItsNumber\ignore{ugLangIts}.} -Think of a stream as an ``infinite list'' where elements are -computed successively. - -\xtc{ -Create an infinite stream of factored integers. -Only a certain number of initial elements are computed -and displayed. -}{ -\spadpaste{[factor(i) for i in 2.. by 2] \bound{stream1}} -} -\xtc{ -Axiom represents streams by a collection of already-computed -elements together with a function to compute the next element -``on demand.'' -Asking for the \eth{\axiom{n}} element causes elements \axiom{1} through -\axiom{n} to be evaluated. -}{ -\spadpaste{\%.36 \free{stream1}} -} - -Streams can also be finite or cyclic. -They are implemented by a linked list structure similar to lists -and have many of the same operations. -For example, \axiomFun{first} and \axiomFun{rest} are used to access -elements and successive nodes of a stream. -%%> reverse and sort do not exist for streams -%%Don't try to reverse or sort a stream: the -%%operation will generally run forever! - -A \spadgloss{one-dimensional array} is another data structure used -to hold objects of the same type.\footnote{See -\downlink{`OneDimensionalArray'}{OneDimensionalArrayXmpPage} -\ignore{OneDimensionalArray} for -details.} -Unlike lists, one-dimensional arrays are inflexible---they are -implemented using a fixed block of storage. -Their advantage is that they give quick and equal access time to -any element. - -\xtc{ -A simple way to create a one-dimensional array is to apply the -operation \axiomFun{oneDimensionalArray} to a list of elements. -}{ -\spadpaste{a := oneDimensionalArray [1, -7, 3, 3/2]\bound{a}} -} -\xtc{ -One-dimensional arrays are also mutable: -you can change their constituent elements ``in place.'' -}{ -\spadpaste{a.3 := 11; a\bound{a1}\free{a}} -} -\xtc{ -However, one-dimensional arrays are not flexible structures. -You cannot destructively \spadfunX{concat} them together. -}{ -\spadpaste{concat!(a,oneDimensionalArray [1,-2])\free{a1}} -} - -Examples of datatypes similar to \spadtype{OneDimensionalArray} -are: \spadtype{Vector} (vectors are mathematical structures -implemented by one-dimensional arrays), \spadtype{String} (arrays -of ``characters,'' represented by byte vectors), and -\spadtype{Bits} (represented by ``bit vectors''). - -\xtc{ -A vector of 32 bits, -each representing the \spadtype{Boolean} value \axiom{true}. -}{ -\spadpaste{bits(32,true)} -} - -A \spadgloss{flexible array} is a cross between a list -and a one-dimensional array.\footnote{See -\downlink{`FlexibleArray'}{FlexibleArrayXmpPage}\ignore{FlexibleArray} for -details.} -Like a one-dimensional array, a flexible array occupies a fixed -block of storage. -Its block of storage, however, has room to expand! -When it gets full, it grows (a new, larger block of storage is -allocated); when it has too much room, it contracts. - -\xtc{ -Create a flexible array of three elements. -}{ -\spadpaste{f := flexibleArray [2, 7, -5]\bound{f}} -} -\xtc{ -Insert some elements between the second and third elements. -}{ -\spadpaste{insert!(flexibleArray [11, -3],f,2)\free{f}} -} - -Flexible arrays are used to implement ``heaps.'' A -\spadgloss{heap} is an example of a data structure called a -\spadgloss{priority queue}, where elements are ordered with -respect to one another.\footnote{See -\downlink{`Heap'}{HeapXmpPage}\ignore{Heap} for more details. -Heaps are also examples of data structures called -\spadglossSee{bags}{bag}. -Other bag data structures are \spadtype{Stack}, \spadtype{Queue}, -and \spadtype{Dequeue}.} -A heap is organized -so as to optimize insertion and extraction of maximum elements. -The \spadfunX{extract} operation -returns the maximum element of the heap, after destructively -removing that element and -reorganizing the heap -so that the next maximum element is ready to be delivered. - -\xtc{ -An easy way to create a heap is to apply the -operation \spadfun{heap} to a list of values. -}{ -\spadpaste{h := heap [-4,7,11,3,4,-7]\bound{h}} -} -\xtc{ -This loop extracts elements one-at-a-time from \spad{h} -until the heap is exhausted, returning the elements -as a list in the order they were extracted. -}{ -\spadpaste{[extract!(h) while not empty?(h)]\free{h}} -} - -A \spadgloss{binary tree} is a ``tree'' with at most two branches -per node: it is either empty, or else is a node consisting of a -value, and a left and right subtree (again, binary trees).\footnote{Example of binary tree types are -\spadtype{BinarySearchTree} (see -\downlink{`BinarySearchTree'}{BinarySearchTreeXmpPage} -\ignore{BinarySearchTree}, -\spadtype{PendantTree}, \spadtype{TournamentTree}, -and \spadtype{BalancedBinaryTree} (see -\downlink{`BalancedBinaryTree'}{BalancedBinaryTreeXmpPage} -\ignore{BalancedBinaryTree}).} - -\xtc{ -A {\it binary search tree} is a binary tree such that, -for each node, the value of the node is -greater than all values (if any) in the left subtree, -and less than or equal all values (if any) in the right subtree. -}{ -\spadpaste{binarySearchTree [5,3,2,9,4,7,11]} -} - -\xtc{ -A {\it balanced binary tree} is useful for doing modular computations. -Given a list \axiom{lm} of moduli, -\axiomFun{modTree}\axiom{(a,lm)} produces a balanced binary -tree with the values \texht{$a \bmod m$}{a {\tt mod} m} -at its leaves. -}{ -\spadpaste{modTree(8,[2,3,5,7])} -} - -A \spadgloss{set} is a collection of elements where duplication -and order is irrelevant.\footnote{See -\downlink{`Set'}{SetXmpPage}\ignore{Set} for more -details.} -Sets are always finite and have no corresponding -structure like streams for infinite collections. - -\xtc{ -%Create sets using braces (\axiomSyntax{\{} and \axiomSyntax{\}}) -%rather than brackets. -}{ -\spadpaste{fs := set[1/3,4/5,-1/3,4/5] \bound{fs}} -} - -A \spadgloss{multiset} -is a set that keeps track of the number -of duplicate values.\footnote{See -\downlink{`MultiSet'}{MultiSetXmpPage}\ignore{MultiSet} for details.} -\xtc{ -For all the primes \axiom{p} between 2 and 1000, find the -distribution of \texht{$p \bmod 5$}{p mod 5}. -}{ -\spadpaste{multiset [x rem 5 for x in primes(2,1000)]} -} - -A \spadgloss{table} -is conceptually a set of ``key--value'' pairs and -is a generalization of a multiset.\footnote{For examples of tables, see -\spadtype{AssociationList} ( -\downlink{`AssociationList'}{AssociationListXmpPage}\ignore{AssociationList}), -\spadtype{HashTable}, -\spadtype{KeyedAccessFile} ( -\downlink{`KeyedAccessFile'}{KeyedAccessFileXmpPage}\ignore{KeyedAccessFile}), -\spadtype{Library} (\downlink{`Library'}{LibraryXmpPage}\ignore{Library}), -\spadtype{SparseTable} ( -\downlink{`SparseTable'}{SparseTableXmpPage}\ignore{SparseTable}), -\spadtype{StringTable} ( -\downlink{`StringTable'}{StringTableXmpPage}\ignore{StringTable}), -and \spadtype{Table} (\downlink{`Table'}{TableXmpPage}\ignore{Table}).} -The domain \spadtype{Table(Key, Entry)} provides a general-purpose -type for tables with {\it values} of type \axiom{Entry} indexed -by {\it keys} of type \axiom{Key}. - -\xtc{ -Compute the above distribution of primes using tables. -First, let \axiom{t} denote an empty table of keys and values, -each of type \spadtype{Integer}. -}{ -\spadpaste{t : Table(Integer,Integer) := empty()\bound{t}} -} - -We define a function \userfun{howMany} to return the number -of values of a given modulus \axiom{k} seen so far. -It calls \axiomFun{search}\axiom{(k,t)} which returns the number of -values stored under the key \axiom{k} in table \axiom{t}, or -\axiom{"failed"} if no such value is yet stored in \axiom{t} under -\axiom{k}. - -\xtc{ -In English, this says ``Define \axiom{howMany(k)} as follows. -First, let \smath{n} be the value of \axiomFun{search}\smath{(k,t)}. -Then, if \smath{n} has the value \smath{"failed"}, return the value -\smath{1}; otherwise return \smath{n + 1}.'' -}{ -\spadpaste{howMany(k) == (n:=search(k,t); n case "failed" => 1; n+1)\bound{how}} -} -\xtc{ -Run through the primes to create the table, then print the table. -The expression \axiom{t.m := howMany(m)} updates the value in table \axiom{t} -stored under key \axiom{m}. -}{ -\spadpaste{for p in primes(2,1000) repeat (m:= p rem 5; t.m:= howMany(m)); t\free{how t}} -} - -A {\it record} -is an example of an inhomogeneous collection -of objects.\footnote{See -\downlink{``\ugTypesRecordsTitle''}{ugTypesRecordsPage} -in Section \ugTypesRecordsNumber\ignore{ugTypesRecords} for details.} -A record consists of a set of named {\it selectors} that -can be used to access its components. - -\xtc{ -Declare that \axiom{daniel} can only be -assigned a record with two prescribed fields. -}{ -\spadpaste{daniel : Record(age : Integer, salary : Float) \bound{danieldec}} -} -\xtc{ -Give \axiom{daniel} a value, using square brackets to enclose the values of -the fields. -}{ -\spadpaste{daniel := [28, 32005.12] \free{danieldec}\bound{daniel}} -} -\xtc{ -Give \axiom{daniel} a raise. -}{ -\spadpaste{daniel.salary := 35000; daniel \free{daniel}} -} - -A {\it union} -is a data structure used when objects -have multiple types.\footnote{See -\downlink{``\ugTypesUnionsTitle''}{ugTypesUnionsPage} -in Section \ugTypesUnionsNumber\ignore{ugTypesUnions} for details.} - -\xtc{ -Let \axiom{dog} be either an integer or a string value. -}{ -\spadpaste{dog: Union(licenseNumber: Integer, name: String)\bound{xint}} -} -\xtc{ -Give \axiom{dog} a name. -}{ -\spadpaste{dog := "Whisper"\free{xint}} -} - -All told, there are over forty different data structures in -Axiom. -Using the domain constructors described in -\downlink{``\ugDomainsTitle''}{ugDomainsPage} -in Chapter \ugDomainsNumber\ignore{ugDomains}, you -can add your own data structure or extend an existing one. -Choosing the right data structure for your application may be the key -to obtaining good performance. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroTwoDimTitle}{Expanding to Higher Dimensions} -\newcommand{\ugIntroTwoDimNumber}{1.7.} - -@ -\subsection{1.7. Expanding to Higher Dimensions} -\label{ugIntroTwoDimPage} -\begin{itemize} -\item TwoDimensionalArrayXmpPage \ref{TwoDimensionalArrayXmpPage} on -page~\pageref{TwoDimensionalArrayXmpPage} -\item MatrixXmpPage \ref{MatrixXmpPage} on -page~\pageref{MatrixXmpPage} -\item PermanentXmpPage \ref{PermanentXmpPage} on -page~\pageref{PermanentXmpPage} -\item SquareMatrixXmpPage \ref{SquareMatrixXmpPage} on -page~\pageref{SquareMatrixXmpPage} -\item VectorXmpPage \ref{VectorXmpPage} on -page~\pageref{VectorXmpPage} -\item ugProblemEigenPage \ref{ugProblemEigenPage} on -page~\pageref{ugProblemEigenPage} -\item ugProblemLinPolEqnPage \ref{ugProblemLinPolEqnPage} on -page~\pageref{ugProblemLinPolEqnPage} -\item ugLangItsPage \ref{ugLangItsPage} on -page~\pageref{ugLangItsPage} -\end{itemize} -\index{pages!ugIntroTwoDimPage!ug01.ht} -\index{ug01.ht!pages!ugIntroTwoDimPage} -\index{ugIntroTwoDimPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroTwoDimPage}{1.7. Expanding to Higher Dimensions} -\beginscroll -% - -To get higher dimensional aggregates, you can create one-dimensional -aggregates with elements that are themselves -aggregates, for example, lists of lists, one-dimensional arrays of -lists of multisets, and so on. -For applications requiring two-dimensional homogeneous aggregates, -you will likely find {\it two-dimensional arrays} -and {\it matrices} most useful. - -The entries in \spadtype{TwoDimensionalArray} and -\spadtype{Matrix} objects -are all the same type, except that those for -\spadtype{Matrix} must belong to a \spadtype{Ring}. -You create and access elements in roughly the same way. -Since matrices have an understood algebraic structure, certain algebraic -operations are available for matrices but not for arrays. -Because of this, we limit our discussion here to -\spadtype{Matrix}, that can be regarded as an extension of -\spadtype{TwoDimensionalArray}.\footnote{See -\downlink{`TwoDimensionalArray'}{TwoDimensionalArrayXmpPage} -\ignore{TwoDimensionalArray} for more information about arrays. -For more information about Axiom's linear algebra -facilities, see \downlink{`Matrix'}{MatrixXmpPage}\ignore{Matrix}, -\downlink{`Permanent'}{PermanentXmpPage}\ignore{Permanent}, -\downlink{`SquareMatrix'}{SquareMatrixXmpPage}\ignore{SquareMatrix}, -\downlink{`Vector'}{VectorXmpPage}\ignore{Vector}, -\downlink{``\ugProblemEigenTitle''}{ugProblemEigenPage} -in Section \ugProblemEigenNumber\ignore{ugProblemEigen} -\texht{(computation of eigenvalues and -eigenvectors)}{}, and -\downlink{``\ugProblemLinPolEqnTitle''}{ugProblemLinPolEqnPage} -in Section \ugProblemLinPolEqnNumber\ignore{ugProblemLinPolEqn}\ -texht{(solution of linear and -polynomial equations)}{}.} - -\xtc{ -You can create a matrix from a list of lists, -where each of the inner lists represents a row of the matrix. -}{ -\spadpaste{m := matrix([[1,2], [3,4]]) \bound{m}} -} -\xtc{ -The ``collections'' construct (see -\downlink{``\ugLangItsTitle''}{ugLangItsPage} -in Section \ugLangItsNumber\ignore{ugLangIts}) is -useful for creating matrices whose entries are given by formulas. -}{ -\spadpaste{matrix([[1/(i + j - x) for i in 1..4] for j in 1..4]) \bound{hilb}} -} -\xtc{ -Let \axiom{vm} denote the three by three Vandermonde matrix. -}{ -\spadpaste{vm := matrix [[1,1,1], [x,y,z], [x*x,y*y,z*z]] \bound{vm}} -} -\xtc{ -Use this syntax to extract an entry in the matrix. -}{ -\spadpaste{vm(3,3) \free{vm}} -} -\xtc{ -You can also pull out a \axiomFun{row} or a \axiom{column}. -}{ -\spadpaste{column(vm,2) \free{vm}} -} -\xtc{ -You can do arithmetic. -}{ -\spadpaste{vm * vm \free{vm}} -} -\xtc{ -You can perform operations such as -\axiomFun{transpose}, \axiomFun{trace}, and \axiomFun{determinant}. -}{ -\spadpaste{factor determinant vm \free{vm}\bound{d}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroYouTitle}{Writing Your Own Functions} -\newcommand{\ugIntroYouNumber}{1.8.} - -@ -\subsection{1.8. Writing Your Own Functions} -\label{ugIntroYouPage} -\begin{itemize} -\item ugUserPage \ref{ugUserPage} on -page~\pageref{ugUserPage} -\item ugInOutInPage \ref{ugInOutInPage} on -page~\pageref{ugInOutInPage} -\end{itemize} -\index{pages!ugIntroYouPage!ug01.ht} -\index{ug01.ht!pages!ugIntroYouPage} -\index{ugIntroYouPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroYouPage}{1.8. Writing Your Own Functions} -\beginscroll -% - -Axiom provides you with a very large library of predefined -operations and objects to compute with. -You can use the Axiom library of constructors to create new -objects dynamically of quite arbitrary complexity. -For example, you can make lists of matrices of fractions of -polynomials with complex floating point numbers as coefficients. -Moreover, the library provides a wealth of operations that allow -you to create and manipulate these objects. - -For many applications, -you need to interact with the interpreter and write some -Axiom programs to tackle your application. -Axiom allows you to write functions interactively, -thereby effectively extending the system library. -Here we give a few simple examples, leaving the details to -\downlink{``\ugUserTitle''}{ugUserPage} in -Chapter \ugUserNumber\ignore{ugUser}. - -We begin by looking at several ways that you can define the -``factorial'' function in Axiom. -The first way is to give a -piece-wise definition of the function. -This method is best for a general recurrence -relation since the pieces are gathered together and compiled into -an efficient iterative function. -Furthermore, enough previously computed values are automatically -saved so that a subsequent call to the function can pick up from -where it left off. - -\xtc{ -Define the value of \userfun{fact} at \axiom{0}. -}{ -\spadpaste{fact(0) == 1 \bound{fact}} -} -\xtc{ -Define the value of \axiom{fact(n)} for general \axiom{n}. -}{ -\spadpaste{fact(n) == n*fact(n-1)\bound{facta}\free{fact}} -} -\xtc{ -Ask for the value at \axiom{50}. -The resulting function created by Axiom -computes the value by iteration. -}{ -\spadpaste{fact(50) \free{facta}} -} -\xtc{ -A second definition uses an \axiom{if-then-else} and recursion. -}{ -\spadpaste{fac(n) == if n < 3 then n else n * fac(n - 1) \bound{fac}} -} -\xtc{ -This function is less efficient than the previous version since -each iteration involves a recursive function call. -}{ -\spadpaste{fac(50) \free{fac}} -} -\xtc{ -A third version directly uses iteration. -}{ -\spadpaste{fa(n) == (a := 1; for i in 2..n repeat a := a*i; a) \bound{fa}} -} -\xtc{ -This is the least space-consumptive version. -}{ -\spadpaste{fa(50) \free{fa}} -} -\xtc{ -A final version appears to construct a large list and then reduces over -it with multiplication. -}{ -\spadpaste{f(n) == reduce(*,[i for i in 2..n]) \bound{f}} -} -\xtc{ -In fact, the resulting computation is optimized into an efficient -iteration loop equivalent to that of the third version. -}{ -\spadpaste{f(50) \free{f}} -} -\xtc{ -The library version uses an algorithm that is different from the four -above because it highly optimizes the recurrence relation definition of -\axiomFun{factorial}. -}{ -\spadpaste{factorial(50)} -} - -You are not limited to one-line functions in Axiom. -If you place your function definitions in {\bf .input} files -(see \downlink{``\ugInOutInTitle''}{ugInOutInPage} -in Section \ugInOutInNumber\ignore{ugInOutIn}), you can have -multi-line functions that use indentation for grouping. - -Given \axiom{n} elements, \axiomFun{diagonalMatrix} creates an -\axiom{n} by \axiom{n} matrix with those elements down the diagonal. -This function uses a permutation matrix -that interchanges the \axiom{i}th and \axiom{j}th rows of a matrix -by which it is right-multiplied. - -\xtc{ -This function definition shows a style of definition that can be used -in {\bf .input} files. -Indentation is used to create \spadglossSee{blocks}{block}\texht{\/}{}: -sequences of expressions that are evaluated in sequence except as -modified by control statements such as \axiom{if-then-else} and \axiom{return}. -}{ -\begin{spadsrc}[\bound{permMat}] -permMat(n, i, j) == - m := diagonalMatrix - [(if i = k or j = k then 0 else 1) - for k in 1..n] - m(i,j) := 1 - m(j,i) := 1 - m -\end{spadsrc} -} -\xtc{ -This creates a four by four matrix that interchanges the second and third -rows. -}{ -\spadpaste{p := permMat(4,2,3) \free{permMat}\bound{p}} -} -\xtc{ -Create an example matrix to permute. -}{ -\spadpaste{m := matrix [[4*i + j for j in 1..4] for i in 0..3]\bound{m}} -} -\xtc{ -Interchange the second and third rows of m. -}{ -\spadpaste{permMat(4,2,3) * m \free{p m}} -} - -A function can also be passed as an argument to another function, -which then applies the function or passes it off to some other -function that does. -You often have to declare the type of a function that has -functional arguments. - -\xtc{ -This declares \userfun{t} to be a two-argument function that -returns a \spadtype{Float}. -The first argument is a function that takes one \spadtype{Float} -argument and returns a \spadtype{Float}. -}{ -\spadpaste{t : (Float -> Float, Float) -> Float \bound{tdecl}} -} -\xtc{ -This is the definition of \userfun{t}. -}{ -\spadpaste{t(fun, x) == fun(x)**2 + sin(x)**2 \free{tdecl}\bound{t}} -} -\xtc{ -We have not defined a \axiomFun{cos} in the workspace. The one from the -Axiom library will do. -}{ -\spadpaste{t(cos, 5.2058) \free{t}} -} -\xtc{ -Here we define our own (user-defined) function. -}{ -\spadpaste{cosinv(y) == cos(1/y) \bound{cosinv}} -} -\xtc{ -Pass this function as an argument to \userfun{t}. -}{ -\spadpaste{t(cosinv, 5.2058) \free{t}\free{cosinv}} -} - -Axiom also has pattern matching capabilities for -simplification -of expressions and for defining new functions by rules. -For example, suppose that you want to apply regularly a transformation -that groups together products of radicals: -\texht{$$\sqrt{a}\:\sqrt{b} \mapsto \sqrt{ab}, \quad -(\forall a)(\forall b)$$}{\axiom{sqrt(a) * sqrt(b) by sqrt(a*b)} for any \axiom{a} and \axiom{b}} -Note that such a transformation is not generally correct. -Axiom never uses it automatically. - -\xtc{ -Give this rule the name \userfun{groupSqrt}. -}{ -\spadpaste{groupSqrt := rule(sqrt(a) * sqrt(b) == sqrt(a*b)) \bound{g}} -} -\xtc{ -Here is a test expression. -}{ -\spadpaste{a := (sqrt(x) + sqrt(y) + sqrt(z))**4 \bound{sxy}} -} -\xtc{ -The rule -\userfun{groupSqrt} successfully simplifies the expression. -}{ -\spadpaste{groupSqrt a \free{sxy} \free{g}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroVariablesTitle}{Polynomials} -\newcommand{\ugIntroVariablesNumber}{1.9.} - -@ -\subsection{1.9. Polynomials} -\label{ugIntroVariablesPage} -\index{pages!ugIntroVariablesPage!ug01.ht} -\index{ug01.ht!pages!ugIntroVariablesPage} -\index{ugIntroVariablesPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroVariablesPage}{1.9. Polynomials} -\beginscroll -% - -Polynomials are the commonly used algebraic types in symbolic -computation. -Interactive users of Axiom generally only see one type -of polynomial: \spadtype{Polynomial(R)}. -This type represents polynomials in any number of unspecified -variables over a particular coefficient domain \axiom{R}. -This type represents its coefficients -\spadglossSee{sparsely}{sparse}: only terms with non-zero -coefficients are represented. - -In building applications, many other kinds of polynomial -representations are useful. -Polynomials may have one variable or multiple variables, the -variables can be named or unnamed, the coefficients can be stored -sparsely or densely. -So-called ``distributed multivariate polynomials'' store -polynomials as coefficients paired with vectors of exponents. -This type is particularly efficient for use in algorithms for -solving systems of non-linear polynomial equations. - -\xtc{ -The polynomial constructor most familiar to the interactive user -is \spadtype{Polynomial}. -}{ -\spadpaste{(x**2 - x*y**3 +3*y)**2} -} -\xtc{ -If you wish to restrict the variables used, -\spadtype{UnivariatePolynomial} -provides polynomials in one variable. -}{ -\spadpaste{p: UP(x,INT) := (3*x-1)**2 * (2*x + 8)} -} -\xtc{ -The constructor -\spadtype{MultivariatePolynomial} provides polynomials in one or more -specified variables. -}{ -\spadpaste{m: MPOLY([x,y],INT) := (x**2-x*y**3+3*y)**2 \bound{m}} -} -\xtc{ -You can change the way the polynomial appears by modifying the variable -ordering in the explicit list. -}{ -\spadpaste{m :: MPOLY([y,x],INT) \free{m}} -} -\xtc{ -The constructor -\spadtype{DistributedMultivariatePolynomial} provides -polynomials in one or more specified variables with the monomials -ordered lexicographically. -}{ -\spadpaste{m :: DMP([y,x],INT) \free{m}} -} -\xtc{ -The constructor -\spadtype{HomogeneousDistributedMultivariatePolynomial} is similar except that -the monomials are ordered by total order refined by reverse -lexicographic order. -}{ -\spadpaste{m :: HDMP([y,x],INT) \free{m}} -} - -More generally, the domain constructor -\spadtype{GeneralDistributedMultivariatePolynomial} allows the -user to provide an arbitrary predicate to define his own term ordering. -These last three constructors are typically used in -\texht{Gr\"{o}bner}{Groebner} basis -applications and when a flat (that is, non-recursive) display is -wanted and the term ordering is critical for controlling the computation. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroCalcLimitsTitle}{Limits} -\newcommand{\ugIntroCalcLimitsNumber}{1.10.} - -@ -\subsection{1.10. Limits} -\label{ugIntroCalcLimitsPage} -\begin{itemize} -\item ugProblemLimitsPage \ref{ugProblemLimitsPage} on -page~\pageref{ugProblemLimitsPage} -\end{itemize} -\index{pages!ugIntroCalcLimitsPage!ug01.ht} -\index{ug01.ht!pages!ugIntroCalcLimitsPage} -\index{ugIntroCalcLimitsPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroCalcLimitsPage}{1.10. Limits} -\beginscroll -% - -Axiom's \axiomFun{limit} function is usually used to -evaluate limits of quotients where the numerator and denominator -both tend to zero or both tend to infinity. -To find the limit of an expression \axiom{f} as a real variable -\axiom{x} tends to a limit value \axiom{a}, enter \axiom{limit(f, x=a)}. -Use \axiomFun{complexLimit} if the variable is complex. -Additional information and examples of limits are in -\downlink{``\ugProblemLimitsTitle''}{ugProblemLimitsPage} -in Section \ugProblemLimitsNumber\ignore{ugProblemLimits}. - -\xtc{ -You can take limits of functions with parameters. -}{ -\spadpaste{g := csc(a*x) / csch(b*x) \bound{g}} -} -\xtc{ -As you can see, the limit is expressed in terms of the parameters. -}{ -\spadpaste{limit(g,x=0) \free{g}} -} -% -\xtc{ -A variable may also approach plus or minus infinity: -}{ -\spadpaste{h := (1 + k/x)**x \bound{h}} -} -\xtc{ -\texht{Use \axiom{\%plusInfinity} and \axiom{\%minusInfinity} to -denote $\infty$ and $-\infty$.}{} -}{ -\spadpaste{limit(h,x=\%plusInfinity) \free{h}} -} -\xtc{ -A function can be defined on both sides of a particular value, but -may tend to different limits as its variable approaches that value from the -left and from the right. -}{ -\spadpaste{limit(sqrt(y**2)/y,y = 0)} -} -\xtc{ -As \axiom{x} approaches \axiom{0} along the real axis, \axiom{exp(-1/x**2)} -tends to \axiom{0}. -}{ -\spadpaste{limit(exp(-1/x**2),x = 0)} -} -\xtc{ -However, if \axiom{x} is allowed to approach \axiom{0} along any path in the -complex plane, the limiting value of \axiom{exp(-1/x**2)} depends on the -path taken because the function has an essential singularity at \axiom{x=0}. -This is reflected in the error message returned by the function. -}{ -\spadpaste{complexLimit(exp(-1/x**2),x = 0)} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroSeriesTitle}{Series} -\newcommand{\ugIntroSeriesNumber}{1.11.} - -@ -\subsection{1.11. Series} -\label{ugIntroSeriesPage} -\begin{itemize} -\item ugProblemSeriesPage \ref{ugProblemSeriesPage} on -page~\pageref{ugProblemSeriesPage} -\end{itemize} -\index{pages!ugIntroSeriesPage!ug01.ht} -\index{ug01.ht!pages!ugIntroSeriesPage} -\index{ugIntroSeriesPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroSeriesPage}{1.11. Series} -\beginscroll -% - -Axiom also provides power series. -By default, Axiom tries to compute and display the first ten elements -of a series. -Use \spadsys{)set streams calculate} to change the default value -to something else. -For the purposes of this book, we have used this system command to display -fewer than ten terms. -For more information about working with series, see -\downlink{``\ugProblemSeriesTitle''}{ugProblemSeriesPage} -in Section \ugProblemSeriesNumber\ignore{ugProblemSeries}. - -\xtc{ -You can convert a functional expression to a power series by using the -operation \axiomFun{series}. -In this example, -\axiom{sin(a*x)} is expanded in powers of \axiom{(x - 0)}, -that is, in powers of \axiom{x}. -}{ -\spadpaste{series(sin(a*x),x = 0)} -} -\xtc{ -This expression expands -\axiom{sin(a*x)} in powers of \axiom{(x - \%pi/4)}. -}{ -\spadpaste{series(sin(a*x),x = \%pi/4)} -} -\xtc{ -Axiom provides -{\it Puiseux series:} -series with rational number exponents. -The first argument to \axiomFun{series} is an in-place function that -computes the \eth{\axiom{n}} coefficient. -(Recall that -the \axiomSyntax{+->} is an infix operator meaning ``maps to.'') -}{ -\spadpaste{series(n +-> (-1)**((3*n - 4)/6)/factorial(n - 1/3),x = 0,4/3..,2)} -} -\xtc{ -Once you have created a power series, you can perform arithmetic operations -on that series. -We compute the Taylor expansion of \axiom{1/(1-x)}. -}{ -\spadpaste{f := series(1/(1-x),x = 0) \bound{f}} -} -\xtc{ -Compute the square of the series. -}{ -\spadpaste{f ** 2 \free{f}} -} -\xtc{ -The usual elementary functions -(\axiomFun{log}, \axiomFun{exp}, trigonometric functions, and so on) -are defined for power series. -}{ -\spadpaste{f := series(1/(1-x),x = 0) \bound{f1}} -} -\xtc{ -}{ -\spadpaste{g := log(f) \free{f1}\bound{g}} -} -\xtc{ -}{ -\spadpaste{exp(g) \free{g}} -} -\xtc{ -Here is a way to obtain numerical approximations of -\axiom{e} from the Taylor series expansion of \axiom{exp(x)}. -First create the desired Taylor expansion. -}{ -\spadpaste{f := taylor(exp(x)) \bound{f2}} -} -\xtc{ -Evaluate the series at the value \axiom{1.0}. -As you see, you get a sequence of partial sums. -}{ -\spadpaste{eval(f,1.0) \free{f2}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroCalcDerivTitle}{Derivatives} -\newcommand{\ugIntroCalcDerivNumber}{1.12.} - -@ -\subsection{1.12. Derivatives} -\label{ugIntroCalcDerivPage} -\index{pages!ugIntroCalcDerivPage!ug01.ht} -\index{ug01.ht!pages!ugIntroCalcDerivPage} -\index{ugIntroCalcDerivPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroCalcDerivPage}{1.12. Derivatives} -\beginscroll -% -Use the Axiom function \axiomFun{D} to differentiate an -expression. - -\texht{\vskip 2pc}{} -\xtc{ -To find the derivative of an expression \axiom{f} with respect to a -variable \axiom{x}, enter \axiom{D(f, x)}. -}{ -\spadpaste{f := exp exp x \bound{f}} -} -\xtc{ -}{ -\spadpaste{D(f, x) \free{f}} -} -\xtc{ -An optional third argument \axiom{n} in \axiomFun{D} asks -Axiom for the \eth{\axiom{n}} derivative of \axiom{f}. -This finds the fourth derivative of \axiom{f} with respect to \axiom{x}. -}{ -\spadpaste{D(f, x, 4) \free{f}} -} -\xtc{ -You can also compute partial derivatives by specifying the order of -differentiation. -}{ -\spadpaste{g := sin(x**2 + y) \bound{g}} -} -\xtc{ -}{ -\spadpaste{D(g, y) \free{g}} -} -\xtc{ -}{ -\spadpaste{D(g, [y, y, x, x]) \free{g}} -} - -Axiom can manipulate the derivatives (partial and iterated) of -expressions involving formal operators. -All the dependencies must be explicit. -\xtc{ -This returns \axiom{0} since \axiom{F} (so far) -does not explicitly depend on \axiom{x}. -}{ -\spadpaste{D(F,x)} -} -Suppose that we have \axiom{F} a function of \axiom{x}, -\axiom{y}, and \axiom{z}, where \axiom{x} and \axiom{y} are themselves -functions of \axiom{z}. -\xtc{ -Start by declaring that \axiom{F}, \axiom{x}, and \axiom{y} -are operators. -}{ -\spadpaste{F := operator 'F; x := operator 'x; y := operator 'y\bound{F x y}} -} -\xtc{ -You can use \axiom{F}, \axiom{x}, and \axiom{y} in expressions. -}{ -\spadpaste{a := F(x z, y z, z**2) + x y(z+1) \bound{a}\free{F}\free{x}\free{y}} -} -\xtc{ -Differentiate formally with respect to \axiom{z}. -The formal derivatives appearing in \axiom{dadz} are not just formal symbols, -but do represent the derivatives of \axiom{x}, \axiom{y}, and \axiom{F}. -}{ -\spadpaste{dadz := D(a, z)\bound{da}\free{a}} -} -\xtc{ -You can evaluate the above for particular functional -values of \axiom{F}, \axiom{x}, and \axiom{y}. -If \axiom{x(z)} is \axiom{exp(z)} and \axiom{y(z)} is \axiom{log(z+1)}, then -this evaluates \axiom{dadz}. -}{ -\spadpaste{eval(eval(dadz, 'x, z +-> exp z), 'y, z +-> log(z+1))\free{da}} -} -\xtc{ -You obtain the same result by first evaluating \axiom{a} and -then differentiating. -}{ -\spadpaste{eval(eval(a, 'x, z +-> exp z), 'y, z +-> log(z+1)) \free{a}\bound{eva}} -} -\xtc{ -}{ -\spadpaste{D(\%, z)\free{eva}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroIntegrateTitle}{Integration} -\newcommand{\ugIntroIntegrateNumber}{1.13.} - -@ -\subsection{1.13. Integration} -\label{ugIntroIntegratePage} -\begin{itemize} -\item ugProblemIntegrationPage \ref{ugProblemIntegrationPage} on -page~\pageref{ugProblemIntegrationPage} -\end{itemize} -\index{pages!ugIntroIntegratePage!ug01.ht} -\index{ug01.ht!pages!ugIntroIntegratePage} -\index{ugIntroIntegratePage!ug01.ht!pages} -<>= -\begin{page}{ugIntroIntegratePage}{1.13. Integration} -\beginscroll -% - -Axiom has extensive library facilities for integration. - -The first example is the integration of a fraction with -denominator that factors into a quadratic and a quartic -irreducible polynomial. -The usual partial fraction approach used by most other computer -algebra systems either fails or introduces expensive unneeded -algebraic numbers. - -\xtc{ -We use a factorization-free algorithm. -}{ -\spadpaste{integrate((x**2+2*x+1)/((x+1)**6+1),x)} -} - -When real parameters are present, the form of the integral can depend on -the signs of some expressions. - -\xtc{ -Rather than query the user or make sign assumptions, Axiom returns -all possible answers. -}{ -\spadpaste{integrate(1/(x**2 + a),x)} -} - -The \axiomFun{integrate} operation generally assumes that all -parameters are real. -The only exception is when the integrand has complex valued -quantities. - -\xtc{ -If the parameter is complex instead of real, then the notion of sign is -undefined and there is a unique answer. -You can request this answer by ``prepending'' the word ``complex'' to the -command name: -}{ -\spadpaste{complexIntegrate(1/(x**2 + a),x)} -} - -The following two examples illustrate the limitations of -table-based approaches. -The two integrands are very similar, but the answer to one of them -requires the addition of two new algebraic numbers. - -\xtc{ -This one is the easy one. -The next one looks very similar -but the answer is much more complicated. -}{ -\spadpaste{integrate(x**3 / (a+b*x)**(1/3),x)} -} -\xtc{ -Only an algorithmic approach -is guaranteed to find what new constants must be added in order to -find a solution. -}{ -\spadpaste{integrate(1 / (x**3 * (a+b*x)**(1/3)),x)} -} - -Some computer algebra systems use heuristics or table-driven -approaches to integration. -When these systems cannot determine the answer to an integration -problem, they reply ``I don't know.'' Axiom uses a -algorithm for integration. -that conclusively proves that an integral cannot be expressed in -terms of elementary functions. - -\xtc{ -When Axiom returns an integral sign, it has proved -that no answer exists as an elementary function. -}{ -\spadpaste{integrate(log(1 + sqrt(a*x + b)) / x,x)} -} -Axiom can handle complicated mixed functions much beyond what you -can find in tables. -\xtc{ -Whenever possible, Axiom tries to express the answer using the functions -present in the integrand. -}{ -\spadpaste{integrate((sinh(1+sqrt(x+b))+2*sqrt(x+b)) / (sqrt(x+b) * (x + cosh(1+sqrt(x + b)))), x)} -} -\xtc{ -A strong structure-checking algorithm in Axiom finds hidden algebraic -relationships between functions. -}{ -\spadpaste{integrate(tan(atan(x)/3),x)} -} -\noindent -%%--> Bob---> please make these formulas in this section smaller. -The discovery of this algebraic relationship is necessary for correct -integration of this function. -Here are the details: -\indent{4} -\beginitems -\item[1. ] -If \texht{$x=\tan t$}{\axiom{x=tan(t)}} and -\texht{$g=\tan (t/3)$}{\axiom{g=tan(t/3)}} then the following -algebraic relation is true: -\texht{$${g^3-3xg^2-3g+x=0}$$}{\centerline{\axiom{g**3 - 3*x*g**2 - 3*g + x = 0}}} -\item[2. ] -Integrate \axiom{g} using this algebraic relation; this produces: -\texht{$${% -{(24g^2 - 8)\log(3g^2 - 1) + (81x^2 + 24)g^2 + 72xg - 27x^2 - 16} -\over{54g^2 - 18}}$$}{\centerline{\axiom{(24g**2 - 8)log(3g**2 - 1) + -(81x**2 + 24)g**2 + 72xg - 27x**2 - 16/ (54g**2 - 18)}}} -\item[3. ] -Rationalize the denominator, producing: -\texht{\narrowDisplay{{8\log(3g^2-1) - 3g^2 + 18xg + 16} \over -{18}}}{\centerline{\axiom{(8*log(3*g**2-1) - 3*g**2 + 18*x*g + 16)/18}}} -Replace \axiom{g} by the initial definition -\texht{$g = \tan(\arctan(x)/3)$}{\axiom{g = tan(arctan(x)/3)}} -to produce the final result. -\enditems -\indent{0} - -\xtc{ -This is an example of a mixed function where -the algebraic layer is over the transcendental one. -}{ -\spadpaste{integrate((x + 1) / (x*(x + log x) ** (3/2)), x)} -} -\xtc{ -While incomplete for non-elementary functions, Axiom can -handle some of them. -}{ -\spadpaste{integrate(exp(-x**2) * erf(x) / (erf(x)**3 - erf(x)**2 - erf(x) + 1),x)} -} - -More examples of Axiom's integration capabilities are discussed in -\downlink{``\ugProblemIntegrationTitle''}{ugProblemIntegrationPage} -in Section \ugProblemIntegrationNumber\ignore{ugProblemIntegration}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroDiffEqnsTitle}{Differential Equations} -\newcommand{\ugIntroDiffEqnsNumber}{1.14.} - -@ -\subsection{1.14. Differential Equations} -\label{ugIntroDiffEqnsPage} -\index{pages!ugIntroDiffEqnsPage!ug01.ht} -\index{ug01.ht!pages!ugIntroDiffEqnsPage} -\index{ugIntroDiffEqnsPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroDiffEqnsPage}{1.14. Differential Equations} -\beginscroll -% -The general approach used in integration also carries over to the -solution of linear differential equations. - -\labelSpace{2pc} -\xtc{ -Let's solve some differential equations. -Let \axiom{y} be the unknown function in terms of \axiom{x}. -}{ -\spadpaste{y := operator 'y \bound{y}} -} -\xtc{ -Here we solve a third order equation with polynomial coefficients. -}{ -\spadpaste{deq := x**3 * D(y x, x, 3) + x**2 * D(y x, x, 2) - 2 * x * D(y x, x) + 2 * y x = 2 * x**4 \bound{e3}\free{y}} -} -\xtc{ -}{ -\spadpaste{solve(deq, y, x) \free{e3}\free{y}} -} -\xtc{ -Here we find all the algebraic function solutions of the equation. -}{ -\spadpaste{deq := (x**2 + 1) * D(y x, x, 2) + 3 * x * D(y x, x) + y x = 0 \bound{e5}\free{y}} -} -\xtc{ -}{ -\spadpaste{solve(deq, y, x) \free{e5}\free{y}} -} - -Coefficients of differential equations can come from arbitrary -constant fields. -For example, coefficients can contain algebraic numbers. - -\xtc{ -This example has solutions -whose logarithmic derivative is an algebraic function of -degree two. -}{ -\spadpaste{eq := 2*x**3 * D(y x,x,2) + 3*x**2 * D(y x,x) - 2 * y x\bound{eq}\free{y}} -} -\xtc{ -}{ -\spadpaste{solve(eq,y,x).basis\free{eq}} -} - -\xtc{ -Here's another differential equation to solve. -}{ -\spadpaste{deq := D(y x, x) = y(x) / (x + y(x) * log y x) \bound{deqi}\free{y}} -} -\xtc{ -}{ -\spadpaste{solve(deq, y, x) \free{deqi y}} -} - -Rather than attempting to get a closed form solution of -a differential equation, you instead might want to find an -approximate solution in the form of a series. - -\xtc{ -Let's solve a system of nonlinear first order equations and get a -solution in power series. -Tell Axiom that \axiom{x} is also an operator. -}{ -\spadpaste{x := operator 'x\bound{x}} -} -\xtc{ -Here are the two equations forming our system. -}{ -\spadpaste{eq1 := D(x(t), t) = 1 + x(t)**2\free{x}\free{y}\bound{eq1}} -} -\xtc{ -}{ -\spadpaste{eq2 := D(y(t), t) = x(t) * y(t)\free{x}\free{y}\bound{eq2}} -} -\xtc{ -We can solve the system around \axiom{t = 0} with the initial conditions -\axiom{x(0) = 0} and \axiom{y(0) = 1}. -Notice that since we give the unknowns in the -order \axiom{[x, y]}, the answer is a list of two series in the order -\axiom{[series for x(t), series for y(t)]}. -}{ -\spadpaste{seriesSolve([eq2, eq1], [x, y], t = 0, [y(0) = 1, x(0) = 0])\free{x}\free{y}\free{eq1}\free{eq2}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroSolutionTitle}{Solution of Equations} -\newcommand{\ugIntroSolutionNumber}{1.15.} - -@ -\subsection{1.15. Solution of Equations} -\label{ugIntroSolutionPage} -\index{pages!ugIntroSolutionPage!ug01.ht} -\index{ug01.ht!pages!ugIntroSolutionPage} -\index{ugIntroSolutionPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroSolutionPage}{1.15. Solution of Equations} -\beginscroll -% - -Axiom also has state-of-the-art algorithms for the solution -of systems of polynomial equations. -When the number of equations and unknowns is the same, and you -have no symbolic coefficients, you can use \spadfun{solve} for -real roots and \spadfun{complexSolve} for complex roots. -In each case, you tell Axiom how accurate you want your -result to be. -All operations in the \spadfun{solve} family return answers in -the form of a list of solution sets, where each solution set is a -list of equations. - -\xtc{ -A system of two equations involving a symbolic -parameter \axiom{t}. -}{ -\spadpaste{S(t) == [x**2-2*y**2 - t,x*y-y-5*x + 5]\bound{S1}} -} -\xtc{ -Find the real roots of \spad{S(19)} with -rational arithmetic, correct to within \smath{1/10^{20}}. -}{ -\spadpaste{solve(S(19),1/10**20)\free{S1}} -} -\xtc{ -Find the complex roots of \spad{S(19)} with floating -point coefficients to \spad{20} digits accuracy in the mantissa. -}{ -\spadpaste{complexSolve(S(19),10.e-20)\free{S1}} -} -\xtc{ -If a system of equations has symbolic coefficients and you want -a solution in radicals, try \spadfun{radicalSolve}. -}{ -\spadpaste{radicalSolve(S(a),[x,y])\free{S1}} -} -For systems of equations with symbolic coefficients, you can -apply \spadfun{solve}, listing the variables that you want -Axiom to solve for. -For polynomial equations, a solution cannot usually be expressed -solely in terms of the other variables. -Instead, the solution is presented as a ``triangular'' system of -equations, where each polynomial has coefficients involving -only the succeeding variables. This is analogous to converting a linear system -of equations to ``triangular form''. -\xtc{ -A system of three equations in five variables. -}{ -\spadpaste{eqns := [x**2 - y + z,x**2*z + x**4 - b*y, y**2 *z - a - b*x]\bound{e}} -} -\xtc{ -Solve the system for unknowns \smath{[x,y,z]}, -reducing the solution to triangular form. -}{ -\spadpaste{solve(eqns,[x,y,z])\free{e}} -} -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntroSysCmmandsTitle}{System Commands} -\newcommand{\ugIntroSysCmmandsNumber}{1.16.} - -@ -\subsection{1.16. System Commands} -\label{ugIntroSysCmmandsPage} -\begin{itemize} -\item ugSysCmdPage \ref{ugSysCmdPage} on -page~\pageref{ugSysCmdPage} -\end{itemize} -\index{pages!ugIntroSysCmmandsPage!ug01.ht} -\index{ug01.ht!pages!ugIntroSysCmmandsPage} -\index{ugIntroSysCmmandsPage!ug01.ht!pages} -<>= -\begin{page}{ugIntroSysCmmandsPage}{1.16. System Commands} -\beginscroll -% - -We conclude our tour of Axiom with a brief discussion -of \spadgloss{system commands}. -System commands are special statements that start with a -closing parenthesis (\axiomSyntax{)}). They are used to control or -display your Axiom environment, start the \HyperName{} -system, issue operating system commands and leave Axiom. -For example, \spadsys{)system} is used -to issue commands to the operating system from Axiom. -Here is a brief description of some of these commands. -For more information on specific commands, see -\downlink{``\ugSysCmdTitle''}{ugSysCmdPage} -in Appendix \ugSysCmdNumber\ignore{ugSysCmd}. - -Perhaps the most important user command is the \spadsys{)clear all} -command that initializes your environment. -Every section and subsection in this book has an invisible -\spadsys{)clear all} that is read prior to the examples given in -the section. -\spadsys{)clear all} gives you a fresh, empty environment with no -user variables defined and the step number reset to \axiom{1}. -The \spadsys{)clear} command can also be used to selectively clear -values and properties of system variables. - -Another useful system command is \spadsys{)read}. -A preferred way to develop an application in Axiom is to put -your interactive commands into a file, say {\bf my.input} file. -To get Axiom to read this file, you use the system command -\spadsys{)read my.input}. -If you need to make changes to your approach or definitions, go -into your favorite editor, change {\bf my.input}, then -\spadsys{)read my.input} again. - -Other system commands include: \spadsys{)history}, to display -previous input and/or output lines; \spadsys{)display}, to display -properties and values of workspace variables; and \spadsys{)what}. - -\xtc{ -Issue \spadsys{)what} to get a list of Axiom objects that -contain a given substring in their name. -}{ -\spadpaste{)what operations integrate} -} - -%\head{subsection}{Undo}{ugIntroUndo} - -A useful system command is \spadcmd{)undo}. -Sometimes while computing interactively with Axiom, you make -a mistake and enter an incorrect definition or assignment. -Or perhaps you -need to try one of several alternative approaches, one after -another, to find the best way to approach an application. -For this, you will find the \spadgloss{undo} facility of -Axiom helpful. - -System command \spadsys{)undo n} means ``undo back to step \axiom{n}''; it -restores the values of user variables to those that existed -immediately after input expression \axiom{n} was evaluated. -Similarly, \spadsys{)undo -n} undoes changes caused by the last -\axiom{n} input expressions. -Once you have done an \spadsys{)undo}, -you can continue on from there, or make a change and -{\bf redo} all your input expressions from the point -of the \spadsys{)undo} forward. -The \spadsys{)undo} is completely general: it changes the environment -like any user expression. -Thus you can \spadsys{)undo} any previous undo. - -Here is a sample dialogue between user and Axiom. -\xtc{ -``Let me define -two mutually dependent functions \axiom{f} and \axiom{g} piece-wise.'' -}{ -\spadpaste{f(0) == 1; g(0) == 1\bound{u1}} -} -\xtc{ -``Here is the general term for \axiom{f}.'' -}{ -\spadpaste{f(n) == e/2*f(n-1) - x*g(n-1)\bound{u2}\free{u1}} -} -\xtc{ -``And here is the general term for \axiom{g}.'' -}{ -\spadpaste{g(n) == -x*f(n-1) + d/3*g(n-1)\bound{u3}\free{u2}} -} -\xtc{ -``What is value of \axiom{f(3)}?'' -}{ -\spadpaste{f(3)\bound{u4}\free{u3}} -} -\noOutputXtc{ -``Hmm, I think I want to define \axiom{f} differently. -Undo to the environment right after I defined \axiom{f}.'' -}{ -\spadpaste{)undo 2\bound{u5}\free{u4}} -} -\xtc{ -``Here is how I think I want \axiom{f} to be defined instead.'' -}{ -\spadpaste{f(n) == d/3*f(n-1) - x*g(n-1)\bound{u6}\free{u5}} -} -\noOutputXtc{ -Redo the computation from expression \axiom{3} forward. -}{ -\spadpaste{)undo )redo\bound{u7}\free{u6}} -} -\noOutputXtc{ -``I want my old definition of -\axiom{f} after all. Undo the undo and restore -the environment to that immediately after \axiom{(4)}.'' -}{ -\spadpaste{)undo 4\bound{u8}\free{u7}} -} -\xtc{ -``Check that the value of \axiom{f(3)} is restored.'' -}{ -\spadpaste{f(3)\bound{u9}\free{u8}} -} - -After you have gone off on several tangents, then backtracked to -previous points in your conversation using \spadsys{)undo}, you -might want to save all the ``correct'' input commands you issued, -disregarding those undone. -The system command \spadsys{)history )write mynew.input} writes a -clean straight-line program onto the file {\bf mynew.input} on -your disk. - -This concludes your tour of Axiom. -To disembark, issue the system command \spadsys{)quit} to leave Axiom -and return to the operating system. -\endscroll -\autobuttons -\end{page} -% -@ -\section{ug02.ht} -<>= -\newcommand{\ugTypesTitle}{Using Types and Modes} -\newcommand{\ugTypesNumber}{2.} - -@ -\subsection{2. Using Types and Modes} -\label{ugTypesPage} -\begin{itemize} -\item ugTypesBasicPage \ref{ugTypesBasicPage} on -page~\pageref{ugTypesBasicPage} -\item ugTypesWritingPage \ref{ugTypesWritingPage} on -page~\pageref{ugTypesWritingPage} -\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on -page~\pageref{ugTypesDeclarePage} -\item ugTypesRecordsPage \ref{ugTypesRecordsPage} on -page~\pageref{ugTypesRecordsPage} -\item ugTypesUnionsPage \ref{ugTypesUnionsPage} on -page~\pageref{ugTypesUnionsPage} -\item ugTypesAnyNonePage \ref{ugTypesAnyNonePage} on -page~\pageref{ugTypesAnyNonePage} -\item ugTypesConvertPage \ref{ugTypesConvertPage} on -page~\pageref{ugTypesConvertPage} -\item ugTypesSubdomainsPage \ref{ugTypesSubdomainsPage} on -page~\pageref{ugTypesSubdomainsPage} -\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on -page~\pageref{ugTypesPkgCallPage} -\item ugTypesResolvePage \ref{ugTypesResolvePage} on -page~\pageref{ugTypesResolvePage} -\item ugTypesExposePage \ref{ugTypesExposePage} on -page~\pageref{ugTypesExposePage} -\item ugAvailSnoopPage \ref{ugAvailSnoopPage} on -page~\pageref{ugAvailSnoopPage} -\end{itemize} -\index{pages!ugTypesPage!ug02.ht} -\index{ug02.ht!pages!ugTypesPage} -\index{ugTypesPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesPage}{2. Using Types and Modes} -\beginscroll - -In this chapter we look at the key notion of \spadgloss{type} and its -generalization \spadgloss{mode}. -We show that every Axiom object has a type that -determines what you can do with the object. -In particular, we explain how to use types to call specific functions -from particular parts of the library and how types and modes can be used -to create new objects from old. -We also look at \pspadtype{Record} and \pspadtype{Union} types and -the special type \axiomType{Any}. -Finally, we give you an idea of how Axiom manipulates types and -modes internally to resolve ambiguities. - -\beginmenu - \menudownlink{{2.1. The Basic Idea}}{ugTypesBasicPage} - \menudownlink{{2.2. Writing Types and Modes}}{ugTypesWritingPage} - \menudownlink{{2.3. Declarations}}{ugTypesDeclarePage} - \menudownlink{{2.4. Records}}{ugTypesRecordsPage} - \menudownlink{{2.5. Unions}}{ugTypesUnionsPage} - \menudownlink{{2.6. The ``Any'' Domain}}{ugTypesAnyNonePage} - \menudownlink{{2.7. Conversion}}{ugTypesConvertPage} - \menudownlink{{2.8. Subdomains Again}}{ugTypesSubdomainsPage} - \menudownlink{{2.9. Package Calling and Target Types}}{ugTypesPkgCallPage} - \menudownlink{{2.10. Resolving Types}}{ugTypesResolvePage} - \menudownlink{{2.11. Exposing Domains and Packages}}{ugTypesExposePage} - \menudownlink{{2.12. Commands for Snooping}}{ugAvailSnoopPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesBasicTitle}{The Basic Idea} -\newcommand{\ugTypesBasicNumber}{2.1.} - -@ -\subsection{2.1. The Basic Idea} -\label{ugTypesBasicPage} -\begin{itemize} -\item ugTypesBasicDomainConsPage \ref{ugTypesBasicDomainConsPage} on -page~\pageref{ugTypesBasicDomainConsPage} -\end{itemize} -\index{pages!ugTypesBasicPage!ug02.ht} -\index{ug02.ht!pages!ugTypesBasicPage} -\index{ugTypesBasicPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesBasicPage}{2.1. The Basic Idea} -\beginscroll - -The Axiom world deals with many kinds of objects. -There are mathematical objects such as numbers and polynomials, -data structure objects such as lists and arrays, and graphics -objects such as points and graphic images. -Functions are objects too. - -Axiom organizes objects using the notion of \spadglossSee{domain of -computation}{domain}, or simply \spadgloss{domain}. -Each domain denotes a class of objects. -The class of objects it denotes is usually given by the name of the -domain: \axiomType{Integer} for the integers, \axiomType{Float} for -floating-point numbers, and so on. -The convention is that the first letter of a domain name is capitalized. -Similarly, the domain \axiomType{Polynomial(Integer)} denotes ``polynomials -with integer coefficients.'' -Also, \axiomType{Matrix(Float)} denotes ``matrices with floating-point -entries.'' - -Every basic Axiom object belongs to a unique domain. -The integer \axiom{3} belongs to the domain \axiomType{Integer} and -the polynomial \axiom{x + 3} belongs to the domain -\axiomType{Polynomial(Integer)}. -The domain of an object is also called its \spadgloss{type}. -Thus we speak of ``the type \axiomType{Integer}'' -and ``the type \axiomType{Polynomial(Integer)}.'' - -\xtc{ -After an Axiom computation, the type is displayed toward the -right-hand side of the page (or screen). -}{ -\spadpaste{-3} -} -\xtc{ -Here we create a rational number but it looks like the last result. -The type however tells you it is different. -You cannot identify the type of an object by how Axiom -displays the object. -}{ -\spadpaste{-3/1} -} -\xtc{ -When a computation produces a result of a simpler type, Axiom leaves -the type unsimplified. -Thus no information is lost. -}{ -\spadpaste{x + 3 - x \bound{three}} -} -\xtc{ -This seldom matters since Axiom retracts the answer to the -simpler type if it is necessary. -}{ -\spadpaste{factorial(\%) \free{three}} -} -\xtc{ -When you issue a positive number, the type \axiomType{PositiveInteger} is -printed. -Surely, \axiom{3} also has type \axiomType{Integer}! -The curious reader may now have two questions. -First, is the type of an object not unique? -Second, how is \axiomType{PositiveInteger} related to \axiomType{Integer}? -Read on! -}{ -\spadpaste{3} -} - -Any domain can be refined to a \spadgloss{subdomain} by a membership -\spadgloss{predicate}.\footnote{A predicate is a function that, -when applied to an object of the domain, returns either -\axiom{true} or \axiom{false}.} -For example, the domain \axiomType{Integer} can be refined to the -subdomain \axiomType{PositiveInteger}, the set of integers -\axiom{x} such that \axiom{x > 0}, by giving the Axiom -predicate \axiom{x +-> x > 0}. -Similarly, Axiom can define subdomains such as ``the -subdomain of diagonal matrices,'' ``the subdomain of lists of length -two,'' ``the subdomain of monic irreducible polynomials in -\axiom{x},'' and so on. -Trivially, any domain is a subdomain of itself. - -While an object belongs to a unique domain, it can belong to any -number of subdomains. -Any subdomain of the domain of an object can be used as the -{\it type} of that object. -The type of \axiom{3} is indeed both \axiomType{Integer} and -\axiomType{PositiveInteger} as well as any other subdomain of -integer whose predicate is satisfied, such as ``the prime -integers,'' ``the odd positive integers between 3 and 17,'' and so -on. - -\beginmenu - \menudownlink{{2.1.1. Domain Constructors}}{ugTypesBasicDomainConsPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesBasicDomainConsTitle}{Domain Constructors} -\newcommand{\ugTypesBasicDomainConsNumber}{2.1.1.} - -@ -\subsection{2.1.1. Domain Constructors} -\label{ugTypesBasicDomainConsPage} -\begin{itemize} -\item ugCategoriesPage \ref{ugCategoriesPage} on -page~\pageref{ugCategoriesPage} -\item ugTypesConvertPage \ref{ugTypesConvertPage} on -page~\pageref{ugTypesConvertPage} -\end{itemize} -\index{pages!ugTypesBasicDomainConsPage!ug02.ht} -\index{ug02.ht!pages!ugTypesBasicDomainConsPage} -\index{ugTypesBasicDomainConsPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesBasicDomainConsPage}{2.1.1. Domain Constructors} -\beginscroll - -In Axiom, domains are objects. -You can create them, pass them to functions, and, as we'll see later, test -them for certain properties. - -In Axiom, you ask for a value of a function by applying its name -to a set of arguments. - -\xtc{ -To ask for ``the factorial of 7'' you enter this expression to -Axiom. -This applies the function \axiom{factorial} to the value \axiom{7} -to compute the result. -}{ -\spadpaste{factorial(7)} -} -\xtc{ -Enter the type \axiomType{Polynomial (Integer)} as an expression to -Axiom. -This looks much like a function call as well. -It is! -The result is appropriately stated to be of type -\axiomType{Domain}, which -according to our usual convention, denotes the class of all domains. -}{ -\spadpaste{Polynomial(Integer)} -} - -The most basic operation involving domains is that of building a new -domain from a given one. -To create the domain of ``polynomials over the integers,'' Axiom -applies the function \axiomType{Polynomial} to the domain -\axiomType{Integer}. -A function like \axiomType{Polynomial} is called a \spadgloss{domain -constructor} or, -more simply, a -\spadgloss{constructor}. -A domain constructor is a function that creates a domain. -An argument to a domain constructor can be another domain or, in general, -an arbitrary kind of object. -\axiomType{Polynomial} takes a single domain argument while -\axiomType{SquareMatrix} takes a positive integer as an argument -to give its dimension and -a domain argument to give the type of its components. - -What kinds of domains can you use as the argument to -\axiomType{Polynomial} or \axiomType{SquareMatrix} or -\axiomType{List}? -Well, the first two are mathematical in nature. -You want to be able to perform algebraic operations like -\axiomOp{+} and \axiomOp{*} on polynomials and square matrices, -and operations such as \axiomFun{determinant} on square matrices. -So you want to allow polynomials of integers {\it and} polynomials -of square matrices with complex number coefficients and, in -general, anything that ``makes sense.'' At the same time, you -don't want Axiom to be able to build nonsense domains such -as ``polynomials of strings!'' - -In contrast to algebraic structures, data structures can hold any -kind of object. -Operations on lists such as \axiomFunFrom{insert}{List}, -\axiomFunFrom{delete}{List}, and \axiomFunFrom{concat}{List} just -manipulate the list itself without changing or operating on its -elements. -Thus you can build \axiomType{List} over almost any datatype, -including itself. -\xtc{ -Create a complicated algebraic domain. -}{ -\spadpaste{List (List (Matrix (Polynomial (Complex (Fraction (Integer))))))} -} -\xtc{ -Try to create a meaningless domain. -}{ -\spadpaste{Polynomial(String)} -} -Evidently from our last example, Axiom has some mechanism -that tells what a constructor can use as an argument. -This brings us to the notion of \spadgloss{category}. -As domains are objects, they too have a domain. -The domain of a domain is a category. -A category is simply a type whose members are domains. - -A common algebraic category is \axiomType{Ring}, the class of all domains -that are ``rings.'' -A ring is an algebraic structure with constants \axiom{0} and \axiom{1} and -operations \axiomOpFrom{+}{Ring}, \axiomOpFrom{-}{Ring}, and -\axiomOpFrom{*}{Ring}. -These operations are assumed ``closed'' with respect to the domain, -meaning that they take two objects of the domain and produce a result -object also in the domain. -The operations are understood to satisfy certain ``axioms,'' certain -mathematical principles providing the algebraic foundation for rings. -For example, the {\it additive inverse axiom} for rings states: -\centerline{{Every element \axiom{x} has an additive inverse \axiom{y} such}} -\centerline{{that \axiom{x + y = 0}.}} -The prototypical example of a domain that is a ring is the integers. -Keep them in mind whenever we mention \axiomType{Ring}. - -Many algebraic domain constructors such as \axiomType{Complex}, -\axiomType{Polynomial}, \axiomType{Fraction}, take rings as -arguments and return rings as values. -You can use the infix operator ``\axiom{has}'' -\spadkey{has} -to ask a domain if it belongs to a particular category. - -\xtc{ -All numerical types are rings. -Domain constructor \axiomType{Polynomial} builds ``the ring of polynomials -over any other ring.'' -}{ -\spadpaste{Polynomial(Integer) has Ring} -} -\xtc{ -Constructor \axiomType{List} never produces a ring. -}{ -\spadpaste{List(Integer) has Ring} -} -\xtc{ -The constructor \axiomType{Matrix(R)} builds ``the domain of all matrices -over the ring \axiom{R}.'' This domain is never a ring since the operations -\axiomSyntax{+}, \axiomSyntax{-}, and \axiomSyntax{*} on matrices of arbitrary -shapes are undefined. -}{ -\spadpaste{Matrix(Integer) has Ring} -} -\xtc{ -Thus you can never build polynomials over matrices. -}{ -\spadpaste{Polynomial(Matrix(Integer))} -} -\xtc{ -Use \axiomType{SquareMatrix(n,R)} instead. -For any positive integer \axiom{n}, it builds ``the ring of \axiom{n} by -\axiom{n} matrices over \axiom{R}.'' -}{ -\spadpaste{Polynomial(SquareMatrix(7,Complex(Integer)))} -} - -Another common category is \axiomType{Field}, the class of all fields. -A field is a ring with additional operations. -For example, a field has commutative multiplication and -a closed operation \axiomOpFrom{/}{Field} for the -division of two elements. -\axiomType{Integer} is not a field since, for example, \axiom{3/2} does not -have an integer result. -The prototypical example of a field is the rational numbers, that is, the -domain \axiomType{Fraction(Integer)}. -In general, the constructor \axiomType{Fraction} takes a ring as an -argument and returns a field.\footnote{Actually, -the argument domain must have some additional -properties so as to belong to category \axiomType{IntegralDomain}.} -Other domain constructors, such as \axiomType{Complex}, build fields only if -their argument domain is a field. - -\xtc{ -The complex integers (often called the ``Gaussian integers'') do not form -a field. -}{ -\spadpaste{Complex(Integer) has Field} -} -\xtc{ -But fractions of complex integers do. -}{ -\spadpaste{Fraction(Complex(Integer)) has Field} -} -\xtc{ -The algebraically equivalent domain of complex rational numbers is a field -since domain constructor \axiomType{Complex} produces a field whenever its -argument is a field. -}{ -\spadpaste{Complex(Fraction(Integer)) has Field} -} - -The most basic category is \axiomType{Type}. -It denotes the class of all domains and -subdomains.\footnote{\axiomType{Type} does not denote the class of -all types. -The type of all categories is \axiomType{Category}. -The type of \axiomType{Type} itself is undefined.} -Domain constructor \axiomType{List} is able to build ``lists of -elements from domain \axiom{D}'' for arbitrary \axiom{D} simply by -requiring that \axiom{D} belong to category \axiomType{Type}. - -Now, you may ask, what exactly is a category? -Like domains, categories can be defined in the Axiom language. -A category is defined by three components: -% -\indent{4} -\beginitems -\item[1. ] a name (for example, \axiomType{Ring}), -used to refer to the class of domains that the category represents; -\item[2. ] a set of operations, used to refer to the operations that -the domains of this class support -(for example, \axiomOp{+}, \axiomOp{-}, and \axiomOp{*} for rings); and -\item[3. ] an optional list of other categories that this category extends. -\enditems -\indent{0} -% -This last component is a new idea. -And it is key to the design of Axiom! -Because categories can extend one another, they form hierarchies. -\texht{Detailed charts showing the category hierarchies in Axiom are -displayed in the endpages of this book. -There you see that all categories are extensions of \axiomType{Type} and that -\axiomType{Field} is an extension of \axiomType{Ring}.}{} - -The operations supported by the domains of a category are called the -\spadglossSee{exports}{export} of that category because these are the -operations made available for system-wide use. -The exports of a domain of a given category are not only the ones -explicitly mentioned by the category. -Since a category extends other categories, the operations of these other -categories---and all categories these other categories extend---are also -exported by the domains. - -For example, polynomial domains belong to \axiomType{PolynomialCategory}. -This category explicitly mentions some twenty-nine -operations on polynomials, but it -extends eleven other categories (including \axiomType{Ring}). -As a result, the current system has over one hundred operations on polynomials. - -If a domain belongs to a category that extends, say, \axiomType{Ring}, it -is convenient to say that the domain exports \axiomType{Ring}. -The name of the category thus provides a convenient shorthand for the list -of operations exported by the category. -Rather than listing operations such as \axiomOpFrom{+}{Ring} and -\axiomOpFrom{*}{Ring} of \axiomType{Ring} each time they are needed, the -definition of a type simply asserts that it exports category -\axiomType{Ring}. - -The category name, however, is more than a shorthand. -The name \axiomType{Ring}, in fact, implies that the operations exported by -rings are required to satisfy a set of ``axioms'' associated with the name -\axiomType{Ring}.\footnote{This subtle -but important feature distinguishes Axiom from -other abstract datatype designs.} - -Why is it not correct to assume that some type is a ring if it exports all -of the operations of \axiomType{Ring}? -Here is why. -Some languages such as {\bf APL} -denote the \axiomType{Boolean} constants \axiom{true} and -\axiom{false} by the integers \axiom{1} and \axiom{0} -respectively, then use \axiomOp{+} and \axiomOp{*} to denote the -logical operators \axiomFun{or} and \axiomFun{and}. -But with these definitions -\axiomType{Boolean} is not a ring since the additive inverse -axiom is violated.\footnote{There is no inverse element \axiom{a} -such that \axiom{1 + a = 0}, or, in the usual terms: \axiom{true -or a = false}.} -This alternative definition of \axiomType{Boolean} can be easily -and correctly implemented in Axiom, since -\axiomType{Boolean} simply does not assert that it is of category -\axiomType{Ring}. -This prevents the system from building meaningless domains such as -\axiomType{Polynomial(Boolean)} and then wrongfully applying -algorithms that presume that the ring axioms hold. - - -Enough on categories. To learn more about them, see -\downlink{``\ugCategoriesTitle''}{ugCategoriesPage} -in Chapter \ugCategoriesNumber\ignore{ugCategories}. -We now return to our discussion of domains. - -Domains \spadgloss{export} a set of operations to make them -available for system-wide use. -\axiomType{Integer}, for example, exports the operations -\axiomOpFrom{+}{Integer} and \axiomOpFrom{=}{Integer} given by -the \spadglossSee{signatures}{signature} -\axiomOpFrom{+}{Integer}: \spadsig{(Integer,Integer)}{Integer} and -\axiomOpFrom{=}{Integer}: \spadsig{(Integer,Integer)}{Boolean}, -respectively. -Each of these operations takes two \axiomType{Integer} arguments. -The \axiomOpFrom{+}{Integer} operation also returns an \axiomType{Integer} but -\axiomOpFrom{=}{Integer} returns a \axiomType{Boolean}: \axiom{true} or -\axiom{false}. -The operations exported by a domain usually manipulate objects of -the domain---but not always. - -The operations of a domain may actually take as arguments, and return as -values, objects from any domain. -For example, \axiomType{Fraction (Integer)} exports the operations -\axiomOpFrom{/}{Fraction}: \spadsig{(Integer,Integer)}{Fraction(Integer)} -and \axiomFunFrom{characteristic}{Fraction}: -\spadsig{}{NonNegativeInteger}. - -Suppose all operations of a domain take as arguments and return -as values, only objects from {\it other} domains. -This kind of domain -is what Axiom calls a \spadgloss{package}. - -A package does not designate a class of objects at all. -Rather, a package is just a collection of operations. -Actually the bulk of the Axiom library of algorithms consists -of packages. -The facilities for factorization; integration; solution of linear, -polynomial, and differential equations; computation of limits; and so -on, are all defined in packages. -Domains needed by algorithms can be passed to a package as arguments or -used by name if they are not ``variable.'' -Packages are useful for defining operations that convert objects of one -type to another, particularly when these types have different -parameterizations. -As an example, the package \axiomType{PolynomialFunction2(R,S)} defines -operations that convert polynomials over a domain \axiom{R} to polynomials -over \axiom{S}. -To convert an object from \axiomType{Polynomial(Integer)} to -\axiomType{Polynomial(Float)}, Axiom builds the package -\axiomType{PolynomialFunctions2(Integer,Float)} in order to create the -required conversion function. -(This happens ``behind the scenes'' for you: see -\downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} -in Section \ugTypesConvertNumber\ignore{ugTypesConvert} -for details on how to convert objects.) - -Axiom categories, domains and packages and all their contained -functions are written in the Axiom programming language and have -been compiled into machine code. -This is what comprises the Axiom \spadgloss{library}. -In the rest of this book we show you how to use these domains and -their functions and how to write your own functions. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesWritingTitle}{Writing Types and Modes} -\newcommand{\ugTypesWritingNumber}{2.2.} - -@ -\subsection{2.2. Writing Types and Modes} -\label{ugTypesWritingPage} -\begin{itemize} -\item ugTypesBasicPage \ref{ugTypesBasicPage} on -page~\pageref{ugTypesBasicPage} -\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on -page~\pageref{ugTypesDeclarePage} -\item ugTypesConvertPage \ref{ugTypesConvertPage} on -page~\pageref{ugTypesConvertPage} -\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on -page~\pageref{ugTypesPkgCallPage} -\item ugTypesWritingZeroPage \ref{ugTypesWritingZeroPage} on -page~\pageref{ugTypesWritingZeroPage} -\item ugTypesWritingOnePage \ref{ugTypesWritingOnePage} on -page~\pageref{ugTypesWritingOnePage} -\item ugTypesWritingMorePage \ref{ugTypesWritingMorePage} on -page~\pageref{ugTypesWritingMorePage} -\item ugTypesWritingModesPage \ref{ugTypesWritingModesPage} on -page~\pageref{ugTypesWritingModesPage} -\item ugTypesWritingAbbrPage \ref{ugTypesWritingAbbrPage} on -page~\pageref{ugTypesWritingAbbrPage} -\end{itemize} -\index{pages!ugTypesWritingPage!ug02.ht} -\index{ug02.ht!pages!ugTypesWritingPage} -\index{ugTypesWritingPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesWritingPage}{2.2. Writing Types and Modes} -\beginscroll -% - -We have already seen in \texht{the last -section}{\downlink{``\ugTypesBasicTitle''}{ugTypesBasicPage} -in Section \ugTypesBasicNumber\ignore{ugTypesBasic}} several examples of types. -Most of these examples had either no arguments (for example, -\axiomType{Integer}) or one argument (for example, -\axiomType{Polynomial (Integer)}). -In this section we give details about writing arbitrary types. -We then define \spadglossSee{modes}{mode} and discuss how to write -them. -We conclude the section with a discussion on constructor -abbreviations. - -\xtc{ -When might you need to write a type or mode? -You need to do so when you declare variables. -}{ -\spadpaste{a : PositiveInteger} -} -\xtc{ -You need to do so when you declare functions -(\downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} -in Section \ugTypesDeclareNumber\ignore{ugTypesDeclare}), -}{ -\spadpaste{f : Integer -> String} -} -\xtc{ -You need to do so when you convert an object from one type to another -(\downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} -in Section \ugTypesConvertNumber\ignore{ugTypesConvert}). -}{ -\spadpaste{factor(2 :: Complex(Integer))} -} -\xtc{ -}{ -\spadpaste{(2 = 3)\$Integer} -} -\xtc{ -You need to do so when you give computation target type information -(\downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} -in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall}). -}{ -\spadpaste{(2 = 3)@Boolean} -} - -\beginmenu - \menudownlink{{2.2.1. Types with No Arguments}}{ugTypesWritingZeroPage} - \menudownlink{{2.2.2. Types with One Argument}}{ugTypesWritingOnePage} - \menudownlink{{2.2.3. Types with More Than One Argument}} -{ugTypesWritingMorePage} - \menudownlink{{2.2.4. Modes}}{ugTypesWritingModesPage} - \menudownlink{{2.2.5. Abbreviations}}{ugTypesWritingAbbrPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesWritingZeroTitle}{Types with No Arguments} -\newcommand{\ugTypesWritingZeroNumber}{2.2.1.} - -@ -\subsection{2.2.1. Types with No Arguments} -\label{ugTypesWritingZeroPage} -\index{pages!ugTypesWritingZeroPage!ug02.ht} -\index{ug02.ht!pages!ugTypesWritingZeroPage} -\index{ugTypesWritingZeroPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesWritingZeroPage}{2.2.1. Types with No Arguments} -\beginscroll - -A constructor with no arguments can be written either -with or without -trailing opening and closing parentheses (\axiomSyntax{()}). -\texht{ -\centerline{{\begin{tabular}{ccc}}} -\centerline{{\axiomType{Boolean()} is the same as \axiomType{Boolean} & \quad &}} -\centerline{{\axiomType{Integer()} is the same as \axiomType{Integer} }} -\centerline{{\axiomType{String()} is the same as \axiomType{String} & \quad &}} -\centerline{{\axiomType{Void()} is the same as \axiomType{Void} }} -\centerline{{\end{tabular}}} -}{ -\centerline{{\axiomType{Boolean()} is the same as \axiomType{Boolean} }} -\centerline{{\axiomType{Integer()} is the same as \axiomType{Integer} }} -\centerline{{\axiomType{String()} is the same as \axiomType{String} }} -\centerline{{\axiomType{Void()} is the same as \axiomType{Void} }} -and so on. -} -It is customary to omit the parentheses. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesWritingOneTitle}{Types with One Argument} -\newcommand{\ugTypesWritingOneNumber}{2.2.2.} - -@ -\subsection{2.2.2. Types with One Argument} -\label{ugTypesWritingOnePage} -\begin{itemize} -\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on -page~\pageref{ugTypesPkgCallPage} -\end{itemize} -\index{pages!ugTypesWritingOnePage!ug02.ht} -\index{ug02.ht!pages!ugTypesWritingOnePage} -\index{ugTypesWritingOnePage!ug02.ht!pages} -<>= -\begin{page}{ugTypesWritingOnePage}{2.2.2. Types with One Argument} -\beginscroll - -A constructor with one argument can frequently be -written with no -parentheses. -Types nest from right to left so that \axiomType{Complex Fraction -Polynomial Integer} is the same as -\axiomType{Complex (Fraction (Polynomial (Integer)))}. -You need to use parentheses to force the application of a constructor -to the correct argument, but you need not use any more than is -necessary to remove ambiguities. - -Here are some guidelines for using parentheses (they are possibly slightly -more restrictive than they need to be). -\xtc{ -If the argument is an expression like \axiom{2 + 3} -then you must enclose the argument in parentheses. -}{ -\spadpaste{e : PrimeField(2 + 3)} -} -% -\xtc{ -If the type is to be used with package calling -then you must enclose the argument in parentheses. -}{ -\spadpaste{content(2)\$Polynomial(Integer)} -} -\xtc{ -Alternatively, you can write the type without parentheses -then enclose the whole type expression with parentheses. -}{ -\spadpaste{content(2)\$(Polynomial Complex Fraction Integer)} -} -\xtc{ -If you supply computation target type information -(\downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} -in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall}) -then you should enclose the argument in parentheses. -}{ -\spadpaste{(2/3)@Fraction(Polynomial(Integer))} -} -% -\xtc{ -If the type itself has parentheses around it and we are -not in the case of the first example above, -then the parentheses can usually be omitted. -}{ -\spadpaste{(2/3)@Fraction(Polynomial Integer)} -} -% -\xtc{ -If the type is used in a declaration and the argument is a single-word -type, integer or symbol, -then the parentheses can usually be omitted. -}{ -\spadpaste{(d,f,g) : Complex Polynomial Integer} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesWritingMoreTitle}{Types with More Than One Argument} -\newcommand{\ugTypesWritingMoreNumber}{2.2.3.} - -@ -\subsection{2.2.3. Types with More Than One Argument} -\label{ugTypesWritingMorePage} -\index{pages!ugTypesWritingMorePage!ug02.ht} -\index{ug02.ht!pages!ugTypesWritingMorePage} -\index{ugTypesWritingMorePage!ug02.ht!pages} -<>= -\begin{page}{ugTypesWritingMorePage}{2.2.3. Types with More Than One Argument} -\beginscroll - -If a constructor -has more than -one argument, you must use parentheses. -Some examples are -\centerline{{\axiomType{UnivariatePolynomial(x, Float)} }} -\centerline{{\axiomType{MultivariatePolynomial([z,w,r], Complex Float)} }} -\centerline{{\axiomType{SquareMatrix(3, Integer)} }} -\centerline{{\axiomType{FactoredFunctions2(Integer,Fraction Integer)}}} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesWritingModesTitle}{Modes} -\newcommand{\ugTypesWritingModesNumber}{2.2.4.} - -@ -\subsection{2.2.4. Modes} -\label{ugTypesWritingModesPage} -\begin{itemize} -\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on -page~\pageref{ugTypesDeclarePage} -\item ugTypesConvertPage \ref{ugTypesConvertPage} on -page~\pageref{ugTypesConvertPage} -\end{itemize} -\index{pages!ugTypesWritingModesPage!ug02.ht} -\index{ug02.ht!pages!ugTypesWritingModesPage} -\index{ugTypesWritingModesPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesWritingModesPage}{2.2.4. Modes} -\beginscroll - -A \spadgloss{mode} is a type that possibly is a -question mark (\axiomSyntax{?}) or contains one in an argument -position. -For example, the following are all modes. -\texht{ -\centerline{{\begin{tabular}{ccc}}} -\centerline{{\axiomType{?} & \quad &}} -\centerline{{\axiomType{Polynomial ?} }} -\centerline{{\axiomType{Matrix Polynomial ?} & \quad &}} -\centerline{{\axiomType{SquareMatrix(3,?)} }} -\centerline{{\axiomType{Integer} & \quad &}} -\centerline{{\axiomType{OneDimensionalArray(Float)}}} -\centerline{{\end{tabular}}} -}{ -\centerline{{\axiomType{?} }} -\centerline{{\axiomType{Polynomial ?} }} -\centerline{{\axiomType{Matrix Polynomial ?} }} -\centerline{{\axiomType{SquareMatrix(3,?)} }} -\centerline{{\axiomType{Integer} }} -\centerline{{\axiomType{OneDimensionalArray(Float)}}} -} -As is evident from these examples, a mode is a type with a -part that is not specified (indicated by a question mark). -Only one \axiomSyntax{?} is allowed per mode and it must appear in the -most deeply nested argument that is a type. Thus -\nonLibAxiomType{?(Integer)}, -\nonLibAxiomType{Matrix(? (Polynomial))}, -\nonLibAxiomType{SquareMatrix(?, Integer)} and -\nonLibAxiomType{SquareMatrix(?, ?)} are all invalid. -The question mark must take the place of a domain, not data (for example, -the integer that is the dimension of a square matrix). -This rules out, for example, the two \axiomType{SquareMatrix} -expressions. - -Modes can be used for declarations -(\downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} -in Section \ugTypesDeclareNumber\ignore{ugTypesDeclare}) -and conversions -(\downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} -in Section \ugTypesConvertNumber\ignore{ugTypesConvert}). -However, you cannot use a mode for package calling or giving target -type information. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesWritingAbbrTitle}{Abbreviations} -\newcommand{\ugTypesWritingAbbrNumber}{2.2.5.} - -@ -\subsection{2.2.5. Abbreviations} -\label{ugTypesWritingAbbrPage} -\begin{itemize} -\item ugSysCmdwhatPage \ref{ugSysCmdwhatPage} on -page~\pageref{ugSysCmdwhatPage} -\end{itemize} -\index{pages!ugTypesWritingAbbrPage!ug02.ht} -\index{ug02.ht!pages!ugTypesWritingAbbrPage} -\index{ugTypesWritingAbbrPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesWritingAbbrPage}{2.2.5. Abbreviations} -\beginscroll - -Every constructor has an abbreviation that -you can freely -substitute for the constructor name. -In some cases, the abbreviation is nothing more than the -capitalized version of the constructor name. - -\beginImportant -Aside from allowing types to be written more concisely, -abbreviations are used by Axiom to name various system -files for constructors (such as library filenames, test input -files and example files). -Here are some common abbreviations. -\texht{}{\table{ -{\axiomType{COMPLEX} abbreviates \axiomType{Complex} } -{\axiomType{DFLOAT} abbreviates \axiomType{DoubleFloat} } -{\axiomType{EXPR} abbreviates \axiomType{Expression} } -{\axiomType{FLOAT} abbreviates \axiomType{Float} } -{\axiomType{FRAC} abbreviates \axiomType{Fraction} } -{\axiomType{INT} abbreviates \axiomType{Integer} } -{\axiomType{MATRIX} abbreviates \axiomType{Matrix} } -{\axiomType{NNI} abbreviates \axiomType{NonNegativeInteger} } -{\axiomType{PI} abbreviates \axiomType{PositiveInteger} } -{\axiomType{POLY} abbreviates \axiomType{Polynomial} } -{\axiomType{STRING} abbreviates \axiomType{String} } -{\axiomType{UP} abbreviates \axiomType{UnivariatePolynomial} } -}} -\endImportant - -You can combine both full constructor names and abbreviations -in a type expression. -Here are some types using abbreviations. -\centerline{{\axiomType{POLY INT} is the same as -\axiomType{Polynomial(INT)} }} -\centerline{{\axiomType{POLY(Integer)} is the same -as \axiomType{Polynomial(Integer)} }} -\centerline{{\axiomType{POLY(Integer)} is the same -as \axiomType{Polynomial(INT)} }} -\centerline{{\axiomType{FRAC(COMPLEX(INT))} is the -same as \axiomType{Fraction Complex Integer} }} -\centerline{{\axiomType{FRAC(COMPLEX(INT))} is the -same as \axiomType{FRAC(Complex Integer)} }} - -There are several ways of finding the names of constructors and -their abbreviations. -For a specific constructor, use \spadcmd{)abbreviation query}. -You can also use the \spadcmd{)what} system command to see the names -and abbreviations of constructors. -For more information about \spadcmd{)what}, see -\downlink{``\ugSysCmdwhatTitle''}{ugSysCmdwhatPage} -in Section \ugSysCmdwhatNumber\ignore{ugSysCmdwhat}. -\xtc{ -\spadcmd{)abbreviation query} can be -abbreviated (no pun intended) to \spadcmd{)abb q}. -}{ -\spadpaste{)abb q Integer} -} -\xtc{ -The \spadcmd{)abbreviation query} command lists -the constructor name if you give the abbreviation. -Issue \spadcmd{)abb q} if you want to see the names and abbreviations -of all Axiom constructors. -}{ -\spadpaste{)abb q DMP} -} -\xtc{ -Issue this to see all packages whose names contain the string ``ode''. -}{ -\spadpaste{)what packages ode} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesDeclareTitle}{Declarations} -\newcommand{\ugTypesDeclareNumber}{2.3.} - -@ -\subsection{2.3. Declarations} -\label{ugTypesDeclarePage} -\begin{itemize} -\item ugLangAssignPage \ref{ugLangAssignPage} on -page~\pageref{ugLangAssignPage} -\item ugUserDeclarePage \ref{ugUserDeclarePage} on -page~\pageref{ugUserDeclarePage} -\item ugTypesConvertPageugIntroAssignPage \ref{ugTypesConvertPageugIntroAssignPage} on -page~\pageref{ugTypesConvertPageugIntroAssignPage} -\end{itemize} -\index{pages!ugTypesDeclarePage!ug02.ht} -\index{ug02.ht!pages!ugTypesDeclarePage} -\index{ugTypesDeclarePage!ug02.ht!pages} -<>= -\begin{page}{ugTypesDeclarePage}{2.3. Declarations} -\beginscroll -% -A \spadgloss{declaration} is an expression used -to restrict the type of values that can be assigned to variables. -A colon (\axiomSyntax{:}) is always used after a variable or -list of variables to be declared. - -\beginImportant -For a single variable, the syntax for declaration is -\centerline{{{\it variableName \axiom{:} typeOrMode}}} -For multiple variables, the syntax is -\centerline{{{\tt (\subscriptIt{variableName}{1}, \subscriptIt{variableName}{2}, \ldots \subscriptIt{variableName}{N}): {\it typeOrMode}}}} -\endImportant - -You can always combine a declaration with an assignment. -When you do, it is equivalent to first giving a declaration statement, -then giving an assignment. -For more information on assignment, see -\downlink{``\ugIntroAssignTitle''}{ugIntroAssignPage} -in Section \ugIntroAssignNumber\ignore{ugIntroAssign} and -\downlink{``\ugLangAssignTitle''}{ugLangAssignPage} -in Section \ugLangAssignNumber\ignore{ugLangAssign}. -To see how to declare your own functions, see -\downlink{``\ugUserDeclareTitle''}{ugUserDeclarePage} -in Section \ugUserDeclareNumber\ignore{ugUserDeclare}. - -\xtc{ -This declares one variable to have a type. -}{ -\spadpaste{a : Integer \bound{a}} -} -\xtc{ -This declares several variables to have a type. -}{ -\spadpaste{(b,c) : Integer \bound{b c}} -} -\xtc{ -\axiom{a, b} and \axiom{c} can only hold integer values. -}{ -\spadpaste{a := 45 \free{a}} -} -\xtc{ -If a value cannot be converted to a declared type, -an error message is displayed. -}{ -\spadpaste{b := 4/5 \free{b}} -} -\xtc{ -This declares a variable with a mode. -}{ -\spadpaste{n : Complex ? \bound{n}} -} -\xtc{ -This declares several variables with a mode. -}{ -\spadpaste{(p,q,r) : Matrix Polynomial ? \bound{p q r}} -} -\xtc{ -This complex object has integer real and imaginary parts. -}{ -\spadpaste{n := -36 + 9 * \%i \free{n}} -} -\xtc{ -This complex object has fractional symbolic real and imaginary parts. -}{ -\spadpaste{n := complex(4/(x + y),y/x) \free{n}} -} -\xtc{ -This matrix has entries that are polynomials with integer -coefficients. -}{ -\spadpaste{p := [[1,2],[3,4],[5,6]] \free{p}} -} -\xtc{ -This matrix has a single entry that is a polynomial with -rational number coefficients. -}{ -\spadpaste{q := [[x - 2/3]] \free{q}} -} -\xtc{ -This matrix has entries that are polynomials with complex integer -coefficients. -}{ -\spadpaste{r := [[1-\%i*x,7*y+4*\%i]] \free{r}} -} -% -\xtc{ -Note the difference between this and the next example. -This is a complex object with polynomial real and imaginary parts. -}{ -\spadpaste{f : COMPLEX POLY ? := (x + y*\%i)**2} -} -\xtc{ -This is a polynomial with complex integer coefficients. -The objects are convertible from one to the other. -See \downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} -in Section \ugTypesConvertNumber\ignore{ugTypesConvert} for more information. -}{ -\spadpaste{g : POLY COMPLEX ? := (x + y*\%i)**2} -} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugTypesRecordsTitle}{Records} -\newcommand{\ugTypesRecordsNumber}{2.4.} - -@ -\subsection{2.4. Records} -\label{ugTypesRecordsPage} -\index{pages!ugTypesRecordsPage!ug02.ht} -\index{ug02.ht!pages!ugTypesRecordsPage} -\index{ugTypesRecordsPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesRecordsPage}{2.4. Records} -\beginscroll -% -A \pspadtype{Record} is an object composed of one or more other objects, -each of which is referenced -with -a \spadgloss{selector}. -Components can all belong to the same type or each can have a different type. - -\beginImportant -The syntax for writing a \pspadtype{Record} type is -\centerline{{{\tt Record(\subscriptIt{selector}{1}:\subscriptIt{type}{1}, \subscriptIt{selector}{2}:\subscriptIt{type}{2}, \ldots, \subscriptIt{selector}{N}:\subscriptIt{type}{N})}}} -You must be careful if a selector has the same name as a variable in the -workspace. -If this occurs, precede the selector name by a single -quote. -\endImportant - -Record components are implicitly ordered. -All the components of a record can -be set at once by assigning the record a -bracketed \spadgloss{tuple} of values of the proper length -(for example, \axiom{r : Record(a: Integer, b: String) := [1, "two"]}). -To access a component of a record \axiom{r}, -write the name \axiom{r}, followed by a period, followed by a selector. - -% -\xtc{ -The object returned by this computation is a record with two components: a -\axiom{quotient} part and a \axiom{remainder} part. -}{ -\spadpaste{u := divide(5,2) \bound{u}} -} -% -\xtc{ -This is the quotient part. -}{ -\spadpaste{u.quotient \free{u}} -} -\xtc{ -This is the remainder part. -}{ -\spadpaste{u.remainder \free{u}} -} -% -\xtc{ -You can use selector expressions on the left-hand side of an assignment -to change destructively the components of a record. -}{ -\spadpaste{u.quotient := 8978 \free{u}\bound{u1}} -} -\xtc{ -The selected component \axiom{quotient} has the value \axiom{8978}, -which is what is returned by the assignment. -Check that the value of \axiom{u} was modified. -}{ -\spadpaste{u \free{u}\free{u1}} -} -\xtc{ -Selectors are evaluated. -Thus you can use variables that evaluate to selectors instead of the -selectors themselves. -}{ -\spadpaste{s := 'quotient \bound{s}} -} -\xtc{ -Be careful! -A selector could have the same name as a variable in the workspace. -If this occurs, precede the selector name by a single quote, as in -\axiom{u.'quotient}. -}{ -\spadpaste{divide(5,2).s \free{s}} -} -\xtc{ -Here we declare that the value of \axiom{bd} -has two components: a string, -to be accessed via \axiom{name}, and an integer, -to be accessed via \axiom{birthdayMonth}. -}{ -\spadpaste{bd : Record(name : String, birthdayMonth : Integer) \bound{bddec}} -} -\xtc{ -You must initially set the value of the entire \pspadtype{Record} -at once. -}{ -\spadpaste{bd := ["Judith", 3] \free{bddec}\bound{bd}} -} -\xtc{ -Once set, you can change any of the individual components. -}{ -\spadpaste{bd.name := "Katie" \free{bd}} -} -\xtc{ -Records may be nested and the selector names can be shared at -different levels. -}{ -\spadpaste{r : Record(a : Record(b: Integer, c: Integer), b: Integer) \bound{rdec}} -} -\xtc{ -The record \axiom{r} has a \axiom{b} selector at two different levels. -Here is an initial value for \axiom{r}. -}{ -\spadpaste{r := [[1,2],3] \bound{r}\free{rdec}} -} -\xtc{ -This extracts the \axiom{b} component from the \axiom{a} component of \axiom{r}. -}{ -\spadpaste{r.a.b \free{r}} -} -\xtc{ -This extracts the \axiom{b} component from \axiom{r}. -}{ -\spadpaste{r.b \free{r}} -} -% -\xtc{ -You can also use spaces or parentheses to refer to \pspadtype{Record} -components. -This is the same as \axiom{r.a}. -}{ -\spadpaste{r(a) \free{r}} -} -\xtc{ -This is the same as \axiom{r.b}. -}{ -\spadpaste{r b \free{r}} -} -\xtc{ -This is the same as \axiom{r.b := 10}. -}{ -\spadpaste{r(b) := 10 \free{r}\bound{r1}} -} -\xtc{ -Look at \axiom{r} to make sure it was modified. -}{ -\spadpaste{r \free{r1}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesUnionsTitle}{Unions} -\newcommand{\ugTypesUnionsNumber}{2.5.} - -@ -\subsection{2.5. Unions} -\label{ugTypesUnionsPage} -\begin{itemize} -\item ugTypesUnionsWOSelPage \ref{ugTypesUnionsWOSelPage} on -page~\pageref{ugTypesUnionsWOSelPage} -\item ugTypesUnionsWSelPage \ref{ugTypesUnionsWSelPage} on -page~\pageref{ugTypesUnionsWSelPage} -\end{itemize} -\index{pages!ugTypesUnionsPage!ug02.ht} -\index{ug02.ht!pages!ugTypesUnionsPage} -\index{ugTypesUnionsPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesUnionsPage}{2.5. Unions} -\beginscroll -% -Type \pspadtype{Union} is used for objects that -can be of any of a specific finite set of types. -Two versions of unions are available, -one with selectors (like records) and one without. - -\beginmenu - \menudownlink{{2.5.1. Unions Without Selectors}}{ugTypesUnionsWOSelPage} - \menudownlink{{2.5.2. Unions With Selectors}}{ugTypesUnionsWSelPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesUnionsWOSelTitle}{Unions Without Selectors} -\newcommand{\ugTypesUnionsWOSelNumber}{2.5.1.} - -@ -\subsection{2.5.1. Unions Without Selectors} -\label{ugTypesUnionsWOSelPage} -\index{pages!ugTypesUnionsWOSelPage!ug02.ht} -\index{ug02.ht!pages!ugTypesUnionsWOSelPage} -\index{ugTypesUnionsWOSelPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesUnionsWOSelPage}{2.5.1. Unions Without Selectors} -\beginscroll - -The declaration \axiom{x : Union(Integer, String, Float)} -states that \axiom{x} can have values that are integers, -strings or ``big'' floats. -If, for example, the \pspadtype{Union} object is an integer, the object is -said to belong to the \axiomType{Integer} {\it branch} -of the \pspadtype{Union}.\footnote{ -Note that we are being a bit careless with the language here. -Technically, the type of \axiom{x} is always -\pspadtype{Union(Integer, String, Float)}. -If it belongs to the \axiomType{Integer} branch, \axiom{x} -may be converted to an object of type \axiomType{Integer}.} - -\beginImportant -The syntax for writing a \pspadtype{Union} type without selectors is -\centerline{{{\tt Union(\subscriptIt{type}{1}, \subscriptIt{type}{2}, \ldots, \subscriptIt{type}{N})}}} -The types in a union without selectors must be distinct. -\endImportant - -It is possible to create unions like -\pspadtype{Union(Integer, PositiveInteger)} but they are -difficult to work with because of the overlap in the branch -types. -See below for the rules Axiom uses for converting something -into a union object. - -The \axiom{case} infix -\spadkey{case} -operator returns a \axiomType{Boolean} -and can be used to determine the branch in which an object lies. - -\xtc{ -This function displays a message stating in which -branch of the \pspadtype{Union} the object (defined as \axiom{x} -above) lies. -}{ -\begin{spadsrc}[\bound{sayBranch}] -sayBranch(x : Union(Integer,String,Float)) : Void == - output - x case Integer => "Integer branch" - x case String => "String branch" - "Float branch" -\end{spadsrc} -} -% -\xtc{ -This tries \userfun{sayBranch} with an integer. -}{ -\spadpaste{sayBranch 1 \free{sayBranch}} -} -\xtc{ -This tries \userfun{sayBranch} with a string. -}{ -\spadpaste{sayBranch "hello" \free{sayBranch}} -} -\xtc{ -This tries \userfun{sayBranch} with a floating-point number. -}{ -\spadpaste{sayBranch 2.718281828 \free{sayBranch}} -} -% - -There are two things of interest about this particular -example to which we would like to draw your attention. -\indent{4} -\beginitems -% -\item[1. ] Axiom normally converts a result to the target value -before passing it to the function. -If we left the declaration information out of this function definition -then the \axiom{sayBranch} call would have been attempted with an -\axiomType{Integer} rather than a \pspadtype{Union}, and an error would have -resulted. -% -\item[2. ] The types in a \pspadtype{Union} are searched in the order given. -So if the type were given as - -\noindent -{\small\axiom{sayBranch(x: Union(String,Integer,Float,Any)): Void}} - -\noindent -then the result would have been ``String branch'' because there -is a conversion from \axiomType{Integer} to \axiomType{String}. -\enditems -\indent{0} - -Sometimes \pspadtype{Union} types can have extremely -long names. -Axiom therefore abbreviates the names of unions by printing -the type of the branch first within the \pspadtype{Union} and then -eliding the remaining types with an ellipsis (\axiomSyntax{...}). - -\xtc{ -Here the \axiomType{Integer} branch is displayed first. -Use \axiomSyntax{::} to create a \pspadtype{Union} object from an object. -}{ -\spadpaste{78 :: Union(Integer,String)} -} -\xtc{ -Here the \axiomType{String} branch is displayed first. -}{ -\spadpaste{s := "string" :: Union(Integer,String) \bound{s}} -} -\xtc{ -Use \axiom{typeOf} to see the full and actual \pspadtype{Union} type. -\spadkey{typeOf} -}{ -\spadpaste{typeOf s} -} -\xtc{ -A common operation that returns a union is \axiomFunFrom{exquo}{Integer} -which returns the ``exact quotient'' if the quotient is exact,... -}{ -\spadpaste{three := exquo(6,2) \bound{three}} -} -\xtc{ -and \axiom{"failed"} if the quotient is not exact. -}{ -\spadpaste{exquo(5,2)} -} -\xtc{ -A union with a \axiom{"failed"} is frequently used to indicate the failure -or lack of applicability of an object. -As another example, assign an integer a variable \axiom{r} declared to be a -rational number. -}{ -\spadpaste{r: FRAC INT := 3 \bound{r}\bound{rdec}} -} -\xtc{ -The operation \axiomFunFrom{retractIfCan}{Fraction} tries to retract the -fraction to the underlying domain \axiomType{Integer}. -It produces a union object. -Here it succeeds. -}{ -\spadpaste{retractIfCan(r) \free{r}} -} -\xtc{ -Assign it a rational number. -}{ -\spadpaste{r := 3/2 \bound{r1}\free{rdec}} -} -\xtc{ -Here the retraction fails. -}{ -\spadpaste{retractIfCan(r) \free{r1}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesUnionsWSelTitle}{Unions With Selectors} -\newcommand{\ugTypesUnionsWSelNumber}{2.5.2.} - -@ -\subsection{2.5.2. Unions With Selectors} -\label{ugTypesUnionsWSelPage} -\begin{itemize} -\item ugTypesRecordsPage \ref{ugTypesRecordsPage} on -page~\pageref{ugTypesRecordsPage} -\item ugTypesUnionsWOSelPage \ref{ugTypesUnionsWOSelPage} on -page~\pageref{ugTypesUnionsWOSelPage} -\end{itemize} -\index{pages!ugTypesUnionsWSelPage!ug02.ht} -\index{ug02.ht!pages!ugTypesUnionsWSelPage} -\index{ugTypesUnionsWSelPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesUnionsWSelPage}{2.5.2. Unions With Selectors} -\beginscroll - -Like records ( -\downlink{``\ugTypesRecordsTitle''}{ugTypesRecordsPage} -in Section \ugTypesRecordsNumber\ignore{ugTypesRecords}), -you can write \pspadtype{Union} types -with selectors. - -\beginImportant -The syntax for writing a \pspadtype{Union} type with selectors is -\centerline{{{\tt Union(\subscriptIt{selector}{1}:\subscriptIt{type}{1}, \subscriptIt{selector}{2}:\subscriptIt{type}{2}, \ldots, \subscriptIt{selector}{N}:\subscriptIt{type}{N})}}} -You must be careful if a selector has the same name as a variable in the -workspace. -If this occurs, precede the selector name by a single -quote. -It is an error to use a selector that does not correspond to the branch of -the \pspadtype{Union} in which the element actually lies. -\endImportant - -Be sure to understand the difference between records and unions -with selectors. -Records can have more than one component and the selectors are -used to refer to the components. -Unions always have one component but the type of that one -component can vary. -An object of type \pspadtype{Record(a: Integer, b: Float, c: -String)} contains an integer {\it and} a float {\it and} a -string. -An object of type \pspadtype{Union(a: Integer, b: Float, c: -String)} contains an integer {\it or} a float {\it or} a -string. - -Here is a version of the \userfun{sayBranch} function (cf. -\downlink{``\ugTypesUnionsWOSelTitle''}{ugTypesUnionsWOSelPage} -in Section \ugTypesUnionsWOSelNumber\ignore{ugTypesUnionsWOSel}) -that works with a union with selectors. -It displays a message stating in which branch of the \pspadtype{Union} the -object lies. +\subsection{Asp19 Example Code} +\label{Asp19ExampleCode} +\index{pages!Asp19ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp19ExampleCode} +\index{Asp19ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp19ExampleCode}{Asp19 Example Code} \begin{verbatim} -sayBranch(x:Union(i:Integer,s:String,f:Float)):Void== - output - x case i => "Integer branch" - x case s => "String branch" - "Float branch" + SUBROUTINE LSFUN2(M,N,XC,FVECC,FJACC,LJC) + DOUBLE PRECISION FVECC(M),FJACC(LJC,N),XC(N) + INTEGER M,N,LJC + INTEGER I,J + DO 25003 I=1,LJC + DO 25004 J=1,N + FJACC(I,J)=0.0D0 +25004 CONTINUE +25003 CONTINUE + FVECC(1)=((XC(1)-0.14D0)*XC(3)+(15.0D0*XC(1)-2.1D0)*XC(2)+1.0D0)/( + &XC(3)+15.0D0*XC(2)) + FVECC(2)=((XC(1)-0.18D0)*XC(3)+(7.0D0*XC(1)-1.26D0)*XC(2)+1.0D0)/( + &XC(3)+7.0D0*XC(2)) + FVECC(3)=((XC(1)-0.22D0)*XC(3)+(4.333333333333333D0*XC(1)-0.953333 + &3333333333D0)*XC(2)+1.0D0)/(XC(3)+4.333333333333333D0*XC(2)) + FVECC(4)=((XC(1)-0.25D0)*XC(3)+(3.0D0*XC(1)-0.75D0)*XC(2)+1.0D0)/( + &XC(3)+3.0D0*XC(2)) + FVECC(5)=((XC(1)-0.29D0)*XC(3)+(2.2D0*XC(1)-0.6379999999999999D0)* + &XC(2)+1.0D0)/(XC(3)+2.2D0*XC(2)) + FVECC(6)=((XC(1)-0.32D0)*XC(3)+(1.666666666666667D0*XC(1)-0.533333 + &3333333333D0)*XC(2)+1.0D0)/(XC(3)+1.666666666666667D0*XC(2)) + FVECC(7)=((XC(1)-0.35D0)*XC(3)+(1.285714285714286D0*XC(1)-0.45D0)* + &XC(2)+1.0D0)/(XC(3)+1.285714285714286D0*XC(2)) + FVECC(8)=((XC(1)-0.39D0)*XC(3)+(XC(1)-0.39D0)*XC(2)+1.0D0)/(XC(3)+ + &XC(2)) + FVECC(9)=((XC(1)-0.37D0)*XC(3)+(XC(1)-0.37D0)*XC(2)+1.285714285714 + &286D0)/(XC(3)+XC(2)) + FVECC(10)=((XC(1)-0.58D0)*XC(3)+(XC(1)-0.58D0)*XC(2)+1.66666666666 + &6667D0)/(XC(3)+XC(2)) + FVECC(11)=((XC(1)-0.73D0)*XC(3)+(XC(1)-0.73D0)*XC(2)+2.2D0)/(XC(3) + &+XC(2)) + FVECC(12)=((XC(1)-0.96D0)*XC(3)+(XC(1)-0.96D0)*XC(2)+3.0D0)/(XC(3) + &+XC(2)) + FVECC(13)=((XC(1)-1.34D0)*XC(3)+(XC(1)-1.34D0)*XC(2)+4.33333333333 + &3333D0)/(XC(3)+XC(2)) + FVECC(14)=((XC(1)-2.1D0)*XC(3)+(XC(1)-2.1D0)*XC(2)+7.0D0)/(XC(3)+X + &C(2)) + FVECC(15)=((XC(1)-4.39D0)*XC(3)+(XC(1)-4.39D0)*XC(2)+15.0D0)/(XC(3 + &)+XC(2)) + FJACC(1,1)=1.0D0 + FJACC(1,2)=-15.0D0/(XC(3)**2+30.0D0*XC(2)*XC(3)+225.0D0*XC(2)**2) + FJACC(1,3)=-1.0D0/(XC(3)**2+30.0D0*XC(2)*XC(3)+225.0D0*XC(2)**2) + FJACC(2,1)=1.0D0 + FJACC(2,2)=-7.0D0/(XC(3)**2+14.0D0*XC(2)*XC(3)+49.0D0*XC(2)**2) + FJACC(2,3)=-1.0D0/(XC(3)**2+14.0D0*XC(2)*XC(3)+49.0D0*XC(2)**2) + FJACC(3,1)=1.0D0 + FJACC(3,2)=((-0.1110223024625157D-15*XC(3))-4.333333333333333D0)/( + &XC(3)**2+8.666666666666666D0*XC(2)*XC(3)+18.77777777777778D0*XC(2) + &**2) + FJACC(3,3)=(0.1110223024625157D-15*XC(2)-1.0D0)/(XC(3)**2+8.666666 + &666666666D0*XC(2)*XC(3)+18.77777777777778D0*XC(2)**2) + FJACC(4,1)=1.0D0 + FJACC(4,2)=-3.0D0/(XC(3)**2+6.0D0*XC(2)*XC(3)+9.0D0*XC(2)**2) + FJACC(4,3)=-1.0D0/(XC(3)**2+6.0D0*XC(2)*XC(3)+9.0D0*XC(2)**2) + FJACC(5,1)=1.0D0 + FJACC(5,2)=((-0.1110223024625157D-15*XC(3))-2.2D0)/(XC(3)**2+4.399 + &999999999999D0*XC(2)*XC(3)+4.839999999999998D0*XC(2)**2) + FJACC(5,3)=(0.1110223024625157D-15*XC(2)-1.0D0)/(XC(3)**2+4.399999 + &999999999D0*XC(2)*XC(3)+4.839999999999998D0*XC(2)**2) + FJACC(6,1)=1.0D0 + FJACC(6,2)=((-0.2220446049250313D-15*XC(3))-1.666666666666667D0)/( + &XC(3)**2+3.333333333333333D0*XC(2)*XC(3)+2.777777777777777D0*XC(2) + &**2) + FJACC(6,3)=(0.2220446049250313D-15*XC(2)-1.0D0)/(XC(3)**2+3.333333 + &333333333D0*XC(2)*XC(3)+2.777777777777777D0*XC(2)**2) + FJACC(7,1)=1.0D0 + FJACC(7,2)=((-0.5551115123125783D-16*XC(3))-1.285714285714286D0)/( + &XC(3)**2+2.571428571428571D0*XC(2)*XC(3)+1.653061224489796D0*XC(2) + &**2) + FJACC(7,3)=(0.5551115123125783D-16*XC(2)-1.0D0)/(XC(3)**2+2.571428 + &571428571D0*XC(2)*XC(3)+1.653061224489796D0*XC(2)**2) + FJACC(8,1)=1.0D0 + FJACC(8,2)=-1.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) + FJACC(8,3)=-1.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) + FJACC(9,1)=1.0D0 + FJACC(9,2)=-1.285714285714286D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)* + &*2) + FJACC(9,3)=-1.285714285714286D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)* + &*2) + FJACC(10,1)=1.0D0 + FJACC(10,2)=-1.666666666666667D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2) + &**2) + FJACC(10,3)=-1.666666666666667D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2) + &**2) + FJACC(11,1)=1.0D0 + FJACC(11,2)=-2.2D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) + FJACC(11,3)=-2.2D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) + FJACC(12,1)=1.0D0 + FJACC(12,2)=-3.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) + FJACC(12,3)=-3.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) + FJACC(13,1)=1.0D0 + FJACC(13,2)=-4.333333333333333D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2) + &**2) + FJACC(13,3)=-4.333333333333333D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2) + &**2) + FJACC(14,1)=1.0D0 + FJACC(14,2)=-7.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) + FJACC(14,3)=-7.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) + FJACC(15,1)=1.0D0 + FJACC(15,2)=-15.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) + FJACC(15,3)=-15.0D0/(XC(3)**2+2.0D0*XC(2)*XC(3)+XC(2)**2) + RETURN + END \end{verbatim} -Note that \axiom{case} uses the selector name as its right-hand argument. -\spadkey{case} -If you accidentally use the branch type on the right-hand side of -\axiom{case}, \axiom{false} will be returned. - -\xtc{ -Declare variable \axiom{u} to have a union type with selectors. -}{ -\spadpaste{u : Union(i : Integer, s : String) \bound{undec}} -} -\xtc{ -Give an initial value to \axiom{u}. -}{ -\spadpaste{u := "good morning" \bound{u}\free{undec}} -} -\xtc{ -Use \axiom{case} to determine in which -branch of a \pspadtype{Union} an object lies. -}{ -\spadpaste{u case i \free{u}} -} -\xtc{ -}{ -\spadpaste{u case s \free{u}} -} -\xtc{ -To access the element in a particular branch, use the selector. -}{ -\spadpaste{u.s \free{u}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesAnyNoneTitle}{The ``Any'' Domain} -\newcommand{\ugTypesAnyNoneNumber}{2.6.} - -@ -\subsection{2.6. The ``Any'' Domain} -\label{ugTypesAnyNonePage} -\index{pages!ugTypesAnyNonePage!ug02.ht} -\index{ug02.ht!pages!ugTypesAnyNonePage} -\index{ugTypesAnyNonePage!ug02.ht!pages} -<>= -\begin{page}{ugTypesAnyNonePage}{2.6. The ``Any'' Domain} -\beginscroll - -With the exception of objects of type \pspadtype{Record}, all Axiom -data structures are homogenous, that is, they hold objects all of the same -type. -If you need to get around this, you can use type \axiomType{Any}. -Using \axiomType{Any}, for example, you can create lists whose -elements are integers, rational numbers, strings, and even other lists. - -\xtc{ -Declare \axiom{u} to have type \axiomType{Any}. -}{ -\spadpaste{u: Any\bound{uany}} -} -\xtc{ -Assign a list of mixed type values to \axiom{u} -}{ -\spadpaste{u := [1, 7.2, 3/2, x**2, "wally"]\free{uany}\bound{u}} -} -\xtc{ -When we ask for the elements, Axiom displays these types. -}{ -\spadpaste{u.1 \free{u}} -} -\xtc{ -Actually, these objects belong to \axiomType{Any} but Axiom -automatically converts them to their natural types for you. -}{ -\spadpaste{u.3 \free{u}} -} -\xtc{ -Since type \axiomType{Any} can be anything, -it can only belong to type \axiomType{Type}. -Therefore it cannot be used in algebraic domains. -}{ -\spadpaste{v : Matrix(Any)} -} - -Perhaps you are wondering how Axiom internally represents -objects of type \axiomType{Any}. -An object of type \axiomType{Any} consists not only a data part -representing its normal value, but also a type part (a {\it badge}) giving -its type. -For example, the value \axiom{1} of type \axiomType{PositiveInteger} as an -object of type \axiomType{Any} internally looks like -\axiom{[1,\axiomType{PositiveInteger()}]}. - -%When should you use \axiomType{Any} instead of a \pspadtype{Union} type? -%Can you plan ahead? -%For a \pspadtype{Union}, you must know in advance exactly which types you -%are -%\index{union!vs. Any@{vs. \protect\nonLibAxiomType{Any}}} -%going to allow. -%For \axiomType{Any}, anything that comes along can be accommodated. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesConvertTitle}{Conversion} -\newcommand{\ugTypesConvertNumber}{2.7.} - -@ -\subsection{2.7. Conversion} -\label{ugTypesConvertPage} -\begin{itemize} -\item ugTypesBasicPage \ref{ugTypesBasicPage} on -page~\pageref{ugTypesBasicPage} -\end{itemize} -\index{pages!ugTypesConvertPage!ug02.ht} -\index{ug02.ht!pages!ugTypesConvertPage} -\index{ugTypesConvertPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesConvertPage}{2.7. Conversion} -\beginscroll -% -\beginImportant -\spadglossSee{Conversion}{conversion} -is the process of changing an object of one type -into an object of another type. -The syntax for conversion is: -\centerline{{{\it object} {\tt ::} {\it newType}}} -\endImportant - -\xtc{ -By default, \axiom{3} has the type \axiomType{PositiveInteger}. -}{ -\spadpaste{3} -} -\xtc{ -We can change this into an object of type \axiomType{Fraction Integer} -by using \axiomSyntax{::}. -}{ -\spadpaste{3 :: Fraction Integer} -} - -A \spadgloss{coercion} is a special kind of conversion that Axiom is -allowed to do automatically when you enter an expression. -Coercions are usually somewhat safer than more general conversions. -The Axiom library contains operations called -\axiomFun{coerce} and \axiomFun{convert}. -Only the \axiomFun{coerce} operations can be used by the -interpreter to change an object into an object of another type unless -you explicitly use a \axiomSyntax{::}. - -By now you will be quite familiar with what types and modes look like. -It is useful to think of a type or mode as a pattern -for what you want the result to be. -\xtc{ -Let's start with a square matrix of polynomials with complex rational number -coefficients. -}{ -\spadpaste{m : SquareMatrix(2,POLY COMPLEX FRAC INT) \bound{mdec}} -} -\xtc{ -}{ -\spadpaste{m := matrix [[x-3/4*\%i,z*y**2+1/2],[3/7*\%i*y**4 - x,12-\%i*9/5]] \bound{m}\free{mdec}} -} -\xtc{ -We first want to interchange the \axiomType{Complex} and -\axiomType{Fraction} layers. -We do the conversion by doing the interchange in the type expression. -}{ -\spadpaste{m1 := m :: SquareMatrix(2,POLY FRAC COMPLEX INT) \free{m}\bound{m1}} -} -\xtc{ -Interchange the \axiomType{Polynomial} and the -\axiomType{Fraction} levels. -}{ -\spadpaste{m2 := m1 :: SquareMatrix(2,FRAC POLY COMPLEX INT) \free{m1}\bound{m2}} -} -\xtc{ -Interchange the \axiomType{Polynomial} and the -\axiomType{Complex} levels. -}{ -\spadpaste{m3 := m2 :: SquareMatrix(2,FRAC COMPLEX POLY INT) \free{m2}\bound{m3}} -} - -All the entries have changed types, although in comparing the -last two results only the entry in the lower left corner looks different. -We did all the intermediate steps to show you what Axiom can do. - -\xtc{ -In fact, we could have combined all these into one conversion. -}{ -\spadpaste{m :: SquareMatrix(2,FRAC COMPLEX POLY INT) \free{m}} -} - -There are times when Axiom is not be able to do the conversion -in one step. -You may need to break up the transformation into several conversions -in order to get an object of the desired type. - -We cannot move either \axiomType{Fraction} or \axiomType{Complex} -above (or to the left of, depending on how you look at it) -\axiomType{SquareMatrix} because each of these levels requires that its -argument type have commutative multiplication, whereas -\axiomType{SquareMatrix} does not.\footnote{\axiomType{Fraction} requires -that its argument belong to the category \axiomType{IntegralDomain} and -\axiomType{Complex} requires that its argument belong to -\axiomType{CommutativeRing}. See -\downlink{``\ugTypesBasicTitle''}{ugTypesBasicPage} -in Section \ugTypesBasicNumber\ignore{ugTypesBasic} -for a brief discussion of categories.} -The \axiomType{Integer} level did not move anywhere -because it does not allow any arguments. -We also did not move the \axiomType{SquareMatrix} part anywhere, but -we could have. -\xtc{ -Recall that \axiom{m} looks like this. -}{ -\spadpaste{m \free{m}} -} -\xtc{ -If we want a polynomial with matrix coefficients rather than a matrix -with polynomial entries, we can just do the conversion. -}{ -\spadpaste{m :: POLY SquareMatrix(2,COMPLEX FRAC INT) \free{m}} -} -\xtc{ -We have not yet used modes for any conversions. -Modes are a great shorthand for indicating the type of the -object you want. -Instead of using the long type expression in the -last example, we could have simply said this. -}{ -\spadpaste{m :: POLY ? \free{m}} -} -\xtc{ -We can also indicate more structure if we want the entries -of the matrices to be fractions. -}{ -\spadpaste{m :: POLY SquareMatrix(2,FRAC ?) \free{m}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesSubdomainsTitle}{Subdomains Again} -\newcommand{\ugTypesSubdomainsNumber}{2.8.} - -@ -\subsection{2.8. Subdomains Again} -\label{ugTypesSubdomainsPage} -\index{pages!ugTypesSubdomainsPage!ug02.ht} -\index{ug02.ht!pages!ugTypesSubdomainsPage} -\index{ugTypesSubdomainsPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesSubdomainsPage}{2.8. Subdomains Again} -\beginscroll - -A \spadgloss{subdomain} \axiom{S} of a domain \axiom{D} is a domain -consisting of -\indent{4} -\beginitems -\item[1. ] those elements of \axiom{D} that satisfy some -\spadgloss{predicate} (that is, a test that returns \axiom{true} or -\axiom{false}) and -\item[2. ] a subset of the operations of \axiom{D}. -\enditems -\indent{0} -Every domain is a subdomain of itself, trivially satisfying the -membership test: \axiom{true}. - -Currently, there are only two system-defined subdomains in Axiom that receive -substantial use. -\axiomType{PositiveInteger} and -\axiomType{NonNegativeInteger} are subdomains of \axiomType{Integer}. -An element \axiom{x} of \axiomType{NonNegativeInteger} is an integer -that is greater than or equal to zero, that is, satisfies -\axiom{x >= 0.} -An element \axiom{x} of \axiomType{PositiveInteger} is a nonnegative integer -that is, in fact, greater than zero, that is, satisfies \axiom{x > 0.} -Not all operations from \axiomType{Integer} are available for these -subdomains. -For example, negation and subtraction are not provided since the subdomains -are not closed under those operations. -When you use an integer in an expression, Axiom assigns to it the -type that is the most specific subdomain whose predicate is satisfied. -\xtc{ -This is a positive integer. -}{ -\spadpaste{5} -} -\xtc{ -This is a nonnegative integer. -}{ -\spadpaste{0} -} -\xtc{ -This is neither of the above. -}{ -\spadpaste{-5} -} -\xtc{ -Furthermore, unless you are assigning an integer to a declared variable -or using a conversion, any integer result has as type the most -specific subdomain. -}{ -\spadpaste{(-2) - (-3)} -} -\xtc{ -}{ -\spadpaste{0 :: Integer} -} -\xtc{ -}{ -\spadpaste{x : NonNegativeInteger := 5} -} - -When necessary, Axiom converts an integer object into one belonging -to a less specific subdomain. -For example, in \axiom{3-2}, the arguments to \axiomOpFrom{-}{Integer} are both -elements of \axiomType{PositiveInteger}, but this type does not provide -a subtraction operation. -Neither does \axiomType{NonNegativeInteger}, so \axiom{3} and \axiom{2} -are viewed as elements of \axiomType{Integer}, where their difference -can be calculated. -The result is \axiom{1}, which Axiom then automatically assigns -the type \axiomType{PositiveInteger}. - -\xtc{ -Certain operations are very sensitive to the subdomains to which their -arguments belong. -This is an element of \axiomType{PositiveInteger}. -}{ -\spadpaste{2 ** 2} -} -\xtc{ -This is an element of \axiomType{Fraction Integer}. -}{ -\spadpaste{2 ** (-2)} -} -\xtc{ -It makes sense then that this -is a list of elements of \axiomType{PositiveInteger}. -}{ -\spadpaste{[10**i for i in 2..5]} -} -What should the type of \axiom{[10**(i-1) for i in 2..5]} be? -On one hand, \axiom{i-1} is always an integer greater than zero -as \axiom{i} ranges from \axiom{2} to \axiom{5} and so \axiom{10**i} -is also always a positive integer. -On the other, \axiom{i-1} is a very simple function of \axiom{i}. -Axiom does not try to analyze every such function over the -index's range of values to determine whether it is always positive -or nowhere negative. -For an arbitrary Axiom function, this analysis is not possible. - -\xtc{ -So, to be consistent no such analysis is done and we get this. -}{ -\spadpaste{[10**(i-1) for i in 2..5]} -} -\xtc{ -To get a list of elements of \axiomType{PositiveInteger} instead, you -have two choices. -You can use a conversion. -}{ -\spadpaste{[10**((i-1) :: PI) for i in 2..5]} -} -\xtc{ -Or you can use \axiom{pretend}. -\spadkey{pretend} -}{ -\spadpaste{[10**((i-1) pretend PI) for i in 2..5]} -} - -The operation \axiom{pretend} is used to defeat the Axiom -type system. -The expression \axiom{object pretend D} means ``make a new object -(without copying) of type \axiom{D} from \axiom{object}.'' -If \axiom{object} were an integer and you told Axiom -to pretend it was a list, you would probably see a message about a -fatal error being caught and memory possibly being damaged. -Lists do not have the same internal representation as integers! - -You use \axiom{pretend} at your peril. - -\xtc{ -Use \axiom{pretend} with great care! -Axiom trusts you that the value is of the specified type. -}{ -\spadpaste{(2/3) pretend Complex Integer} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesPkgCallTitle}{Package Calling and Target Types} -\newcommand{\ugTypesPkgCallNumber}{2.9.} - -@ -\subsection{2.9. Package Calling and Target Types} -\label{ugTypesPkgCallPage} -\begin{itemize} -\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on -page~\pageref{ugTypesDeclarePage} -\item ugUserUsePage \ref{ugUserUsePage} on -page~\pageref{ugUserUsePage} -\end{itemize} -\index{pages!ugTypesPkgCallPage!ug02.ht} -\index{ug02.ht!pages!ugTypesPkgCallPage} -\index{ugTypesPkgCallPage!ug02.ht!pages} -<>= -\begin{page}{ugTypesPkgCallPage}{2.9. Package Calling and Target Types} -\beginscroll - -Axiom works hard to figure out what you mean by an -expression without your having to qualify it with type -information. -Nevertheless, there are times when you need to help it along by -providing hints (or even orders!) to get Axiom to do what -you want. - -We saw in \downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} -in Section \ugTypesDeclareNumber\ignore{ugTypesDeclare} that -declarations using types -and modes control the type of the results produced. -For example, we can either produce a complex object with -polynomial real and imaginary parts or a polynomial with complex -integer coefficients, depending on the declaration. - -\spadglossSee{Package calling}{package call} is how you tell -Axiom to use a particular function from a particular part of -the library. - -\xtc{ -Use the \axiomOpFrom{/}{Fraction} from \axiomType{Fraction Integer} -to create a fraction of two integers. -}{ -\spadpaste{2/3} -} -\xtc{ -If we wanted a floating point number, we can say ``use the -\axiomOpFrom{/}{Float} in \axiomType{Float}.'' -}{ -\spadpaste{(2/3)\$Float} -} -\xtc{ -Perhaps we actually wanted a fraction of complex integers. -}{ -\spadpaste{(2/3)\$Fraction(Complex Integer)} -} - -In each case, Axiom used the indicated operations, sometimes -first needing to convert the two integers into objects of an -appropriate type. -In these examples, \axiomOpFrom{/}{Fraction} is written as an -infix operator. - -\beginImportant -To use package calling with an infix operator, use the -following syntax: -\centerline{{{\tt ( \subscriptIt{arg}{1} {\it op} \subscriptIt{arg}{1} )\${\it type} }}} -\endImportant - -We used, for example, \axiom{(2/3)\$Float}. -The expression \axiom{2 + 3 + 4} is equivalent to \axiom{(2+3) + 4.} -Therefore in the expression -\axiom{(2 + 3 + 4)\$Float} the second -\axiomOp{+} comes from the \axiomType{Float} domain. -Can you guess whether the first \axiomOp{+} comes from -\axiomType{Integer} or \axiomType{Float}?\footnote{\axiomType{Float}, -because the package call causes Axiom to convert -\axiom{(2 + 3)} and \axiom{4} to type \axiomType{Float}. -Before the sum is converted, it is given a target type (see below) of -\axiomType{Float} by Axiom and then evaluated. -The target type causes the \axiomOp{+} from \axiomType{Float} to be used.} - -\beginImportant -For an operator written before its arguments, you must use -parentheses around the arguments (even if there is only one), -and follow the closing parenthesis by a \axiomSyntax{\$} -and then the type. -\centerline{{{\tt {\it fun} ( \subscriptIt{arg}{1}, \subscriptIt{arg}{1}, \ldots, \subscriptIt{arg}{N} )\${\it type}}}} -\endImportant - -For example, to call the ``minimum'' function from \axiomType{DoubleFloat} -on two integers, you could write \axiom{min(4,89)\$DoubleFloat}. -Another use of package calling is to tell Axiom to use a library -function rather than a function you defined. -We discuss this in \downlink{``\ugUserUseTitle''}{ugUserUsePage} -in Section \ugUserUseNumber\ignore{ugUserUse}. - -Sometimes rather than specifying where an operation comes from, you just -want to say what type the result should be. -We say that you provide -a -\spadglossSee{target type}{target} for the expression. -Instead of using a \axiomSyntax{\$}, use a \axiomSyntax{@} to specify -the requested target type. -Otherwise, the syntax is the same. -Note that giving a target type is not the same as explicitly doing a -conversion. -The first says ``try to pick operations so that the result has -such-and-such a type.'' -The second says ``compute the result and then convert to an object of -such-and-such a type.'' - -\xtc{ -Sometimes it makes sense, as in this expression, -to say ``choose the operations in this expression so that -the final result is a \axiomType{Float}.'' -}{ -\spadpaste{(2/3)@Float} -} - -Here we used \axiomSyntax{@} to say that the target type of the -left-hand side was \axiomType{Float}. -In this simple case, there was no real difference -between using \axiomSyntax{\$} and \axiomSyntax{@}. -You can see the difference if you try the following. -\xtc{ -This says to try to choose \axiomOp{+} so that the result is -a string. -Axiom cannot do this. -}{ -\spadpaste{(2 + 3)@String} -} -\xtc{ -This says to get the \axiomOp{+} from \axiomType{String} and apply -it to the two integers. -Axiom also cannot do this because there is no \axiomOp{+} -exported by \axiomType{String}. -}{ -\spadpaste{(2 + 3)\$String} -} -(By the way, the operation \axiomFunFrom{concat}{String} or juxtaposition -is used to concatenate two strings.) - -When we have more than one operation in an expression, the -difference is even more evident. -The following two expressions show that Axiom uses the -target type to create different objects. -The \axiomOp{+}, \axiomOp{*} and \axiomOp{**} operations are all -chosen so that an object of the correct final type is created. - -\xtc{ -This says that the operations should be chosen so -that the result is a \axiomType{Complex} object. -}{ -\spadpaste{((x + y * \%i)**2)@(Complex Polynomial Integer)} -} -\xtc{ -This says that the operations should be chosen so -that the result is a \axiomType{Polynomial} object. -}{ -\spadpaste{((x + y * \%i)**2)@(Polynomial Complex Integer)} -} -\xtc{ -What do you think might happen if we left off all -target type and package call information in this last example? -}{ -\spadpaste{(x + y * \%i)**2 \bound{prevC}} -} -\xtc{ -We can convert it to \axiomType{Complex} as an afterthought. -But this is more work than just saying making what we want in the first -place. -}{ -\spadpaste{\% :: Complex ? \free{prevC}} -} - -Finally, another use of package calling is to qualify fully an -operation that is passed as an argument to a function. - -\xtc{ -Start with a small matrix of integers. -}{ -\spadpaste{h := matrix [[8,6],[-4,9]] \bound{h}} -} -% -\xtc{ -We want to produce a new matrix that has for entries the multiplicative -inverses of the entries of \axiom{h}. -One way to do this is by calling -\axiomFunFrom{map}{MatrixCategoryFunctions2} with the -\axiomFunFrom{inv}{Fraction} function from \axiomType{Fraction (Integer)}. -}{ -\spadpaste{map(inv\$Fraction(Integer),h) \free{h}} -} -\xtc{ -We could have been a bit less verbose and used abbreviations. -}{ -\spadpaste{map(inv\$FRAC(INT),h) \free{h}\bound{h1}} -} -% -\xtc{ -As it turns out, Axiom is smart enough to know what we mean -anyway. -We can just say this. -}{ -\spadpaste{map(inv,h) \free{h}} -} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugTypesResolveTitle}{Resolving Types} -\newcommand{\ugTypesResolveNumber}{2.10.} - -@ -\subsection{2.10. Resolving Types} -\label{ugTypesResolvePage} -\index{pages!ugTypesResolvePage!ug02.ht} -\index{ug02.ht!pages!ugTypesResolvePage} -\index{ugTypesResolvePage!ug02.ht!pages} -<>= -\begin{page}{ugTypesResolvePage}{2.10. Resolving Types} -\beginscroll - -In this section we briefly describe an internal process by which -Axiom determines a type to which two objects of possibly -different types can be converted. -We do this to give you further insight into how Axiom takes -your input, analyzes it, and produces a result. - -What happens when you enter \axiom{x + 1} to Axiom? -Let's look at what you get from the two terms of this expression. - -\xtc{ -This is a symbolic object whose type indicates the name. -}{ -\spadpaste{x} -} -\xtc{ -This is a positive integer. -}{ -\spadpaste{1} -} - -There are no operations in \axiomType{PositiveInteger} that add -positive integers to objects of type \axiomType{Variable(x)} nor -are there any in \axiomType{Variable(x)}. -Before it can add the two parts, Axiom must come up with -a common type to which both \axiom{x} and \axiom{1} can be -converted. -We say that Axiom must {\it resolve} the two types -into a common type. -In this example, the common type is \axiomType{Polynomial(Integer)}. - -\xtc{ -Once this is determined, both parts are converted into polynomials, -and the addition operation from \axiomType{Polynomial(Integer)} is used to -get the answer. -}{ -\spadpaste{x + 1} -} -\xtc{ -Axiom can always resolve two types: if nothing resembling -the original types can be found, then \axiomType{Any} is be used. -This is fine and useful in some cases. -}{ -\spadpaste{["string",3.14159]} -} -\xtc{ -In other cases objects of type \axiomType{Any} can't be used -by the operations you specified. -}{ -\spadpaste{"string" + 3.14159} -} -Although this example was contrived, your expressions may need -to be qualified slightly to help Axiom resolve the -types involved. -You may need to declare a few variables, do some package calling, -provide some target type information or do some explicit -conversions. - -We suggest that you just enter the expression you want evaluated and -see what Axiom does. -We think you will be impressed with its ability to ``do what I -mean.'' -If Axiom is still being obtuse, give it some hints. -As you work with Axiom, you will learn where it needs a -little help to analyze quickly and perform your computations. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugTypesExposeTitle}{Exposing Domains and Packages} -\newcommand{\ugTypesExposeNumber}{2.11.} - -@ -\subsection{2.11. Exposing Domains and Packages} -\label{ugTypesExposePage} -\begin{itemize} -\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on -page~\pageref{ugTypesPkgCallPage} -\item ugUserTrianglePage \ref{ugUserTrianglePage} on -page~\pageref{ugUserTrianglePage} -\item ugSysCmdframePage \ref{ugSysCmdframePage} on -page~\pageref{ugSysCmdframePage} -\end{itemize} -\index{pages!ugTypesExposePage!ug02.ht} -\index{ug02.ht!pages!ugTypesExposePage} -\index{ugTypesExposePage!ug02.ht!pages} -<>= -\begin{page}{ugTypesExposePage}{2.11. Exposing Domains and Packages} -\beginscroll - -In this section we discuss how Axiom makes some operations -available to you while hiding others that are meant to be used by -developers or only in rare cases. -If you are a new user of Axiom, it is likely that everything -you need is available by default and you may want -to skip over this section on first reading. - -Every -domain and package in the Axiom library -is -either -\spadglossSee{exposed}{expose} (meaning that you can use its -operations without doing -anything special) or it is {\it hidden} (meaning you have to either -package call -(see \downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} -in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall}) -the operations it contains or explicitly expose it to use the -operations). -The initial exposure status for a constructor is set in the -file {\bf exposed.lsp} (see the {\it Installer's Note} -for Axiom -if you need to know the location of this file). -Constructors are collected together in -{\it exposure groups}. -Categories are all in the exposure group ``categories'' and the -bulk of the basic set of packages and domains that are exposed -are in the exposure group ``basic.'' -Here is an abbreviated sample of the file (without the Lisp parentheses): -\begin{verbatim} -basic - AlgebraicNumber AN - AlgebraGivenByStructuralConstants ALGSC - Any ANY - AnyFunctions1 ANY1 - BinaryExpansion BINARY - Boolean BOOLEAN - CardinalNumber CARD - CartesianTensor CARTEN - Character CHAR - CharacterClass CCLASS - CliffordAlgebra CLIF - Color COLOR - Complex COMPLEX - ContinuedFraction CONTFRAC - DecimalExpansion DECIMAL - ... -\end{verbatim} +\subsection{Asp20 Example Code} +\label{Asp20ExampleCode} +\index{pages!Asp20ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp20ExampleCode} +\index{Asp20ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp20ExampleCode}{Asp20 Example Code} \begin{verbatim} -categories - AbelianGroup ABELGRP - AbelianMonoid ABELMON - AbelianMonoidRing AMR - AbelianSemiGroup ABELSG - Aggregate AGG - Algebra ALGEBRA - AlgebraicallyClosedField ACF - AlgebraicallyClosedFunctionSpace ACFS - ArcHyperbolicFunctionCategory AHYP - ... + SUBROUTINE QPHESS(N,NROWH,NCOLH,JTHCOL,HESS,X,HX) + DOUBLE PRECISION HX(N),X(N),HESS(NROWH,NCOLH) + INTEGER JTHCOL,N,NROWH,NCOLH + HX(1)=2.0D0*X(1) + HX(2)=2.0D0*X(2) + HX(3)=2.0D0*X(4)+2.0D0*X(3) + HX(4)=2.0D0*X(4)+2.0D0*X(3) + HX(5)=2.0D0*X(5) + HX(6)=(-2.0D0*X(7))+(-2.0D0*X(6)) + HX(7)=(-2.0D0*X(7))+(-2.0D0*X(6)) + RETURN + END \end{verbatim} -For each constructor in a group, the full name and the abbreviation -is given. -There are other groups in {\bf exposed.lsp} but initially only the -constructors in exposure groups ``basic'' ``categories'' ``naglink'' -and ``anna'' are exposed. - -As an interactive user of Axiom, you do not need to modify -this file. -Instead, use \spadcmd{)set expose} to expose, hide or query the exposure -status of an individual constructor or exposure group. -The reason for having exposure groups is to be able to expose or hide -multiple constructors with a single command. -For example, you might group together into exposure group ``quantum'' a -number of domains and packages useful for quantum mechanical computations. -These probably should not be available to every user, but you want an easy -way to make the whole collection visible to Axiom when it is looking -for operations to apply. - -If you wanted to hide all the basic constructors available by default, you -would issue \spadcmd{)set expose drop group basic}. -If, however, you discover that you have hidden all the basic constructors, -you should issue \spadcmd{)set expose add group basic} to restore your -default environment. - -It is more likely that you would want to expose or hide individual -constructors. -In \downlink{``\ugUserTriangleTitle''}{ugUserTrianglePage} -in Section \ugUserTriangleNumber\ignore{ugUserTriangle} we -use several operations from -\axiomType{OutputForm}, a domain usually hidden. -To avoid package calling every operation from \axiomType{OutputForm}, we -expose the domain and let Axiom conclude that those operations should -be used. -Use \spadcmd{)set expose add constructor} and \spadcmd{)set expose drop -constructor} to expose and hide a constructor, respectively. -You should use the constructor name, not the abbreviation. -The \spadcmd{)set expose} command guides you through these options. - -If you expose a previously hidden constructor, Axiom -exhibits new behavior (that was your intention) though you might not -expect the results that you get. -\axiomType{OutputForm} is, in fact, one of the worst offenders in this -regard. -This domain is meant to be used by other domains for creating a -structure that Axiom knows how to display. -It has functions like \axiomOpFrom{+}{OutputForm} that form output -representations rather than do mathematical calculations. -Because of the order in which Axiom looks at constructors -when it is deciding what operation to apply, \axiomType{OutputForm} -might be used instead of what you expect. -\xtc{ -This is a polynomial. -}{ -\spadpaste{x + x} -} -\xtc{ -Expose \axiomType{OutputForm}. -}{ -\spadpaste{)set expose add constructor OutputForm \bound{setexposeadd}} -} -\xtc{ -This is what we get when \axiomType{OutputForm} is automatically -available. -}{ -\spadpaste{x + x \free{setexposeadd}} -} -\xtc{ -Hide \axiomType{OutputForm} so we don't run into problems -with any later examples! -}{ -\spadpaste{)set expose drop constructor OutputForm \bound{setexposedrop}} -} - -Finally, exposure is done on a frame-by-frame basis. -A \spadgloss{frame} (see -\downlink{``\ugSysCmdframeTitle''}{ugSysCmdframePage} -in Section \ugSysCmdframeNumber\ignore{ugSysCmdframe}) -is one of possibly several -logical Axiom workspaces within a physical one, each having -its own environment (for example, variables and function definitions). -If you have several Axiom workspace windows on your screen, they -are all different frames, automatically created for you by \HyperName{}. -Frames can be manually created, made active and destroyed by the -\spadcmd{)frame} system command. -They do not share exposure information, so you need to use -\spadcmd{)set expose} in each one to add or drop constructors from view. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugAvailSnoopTitle}{Commands for Snooping} -\newcommand{\ugAvailSnoopNumber}{2.12.} - -@ -\subsection{2.12. Commands for Snooping} -\label{ugAvailSnoopPage} -\begin{itemize} -\item ugBrowsePage \ref{ugBrowsePage} on -page~\pageref{ugBrowsePage} -\item ComplexXmpPage \ref{ComplexXmpPage} on -page~\pageref{ComplexXmpPage} -\item ugUserDeclarePage \ref{ugUserDeclarePage} on -page~\pageref{ugUserDeclarePage} -\end{itemize} -\index{pages!ugAvailSnoopPage!ug02.ht} -\index{ug02.ht!pages!ugAvailSnoopPage} -\index{ugAvailSnoopPage!ug02.ht!pages} -<>= -\begin{page}{ugAvailSnoopPage}{2.12. Commands for Snooping} -\beginscroll - -To conclude this chapter, we introduce you to some system commands -that you can use for getting more information about domains, -packages, categories, and operations. -The most powerful Axiom facility for getting information about -constructors and operations is the \Browse{} component of \HyperName{}. -This is discussed in \downlink{``\ugBrowseTitle''}{ugBrowsePage} -in Chapter \ugBrowseNumber\ignore{ugBrowse}. - -Use the \spadsys{)what} system command to see lists of system objects -whose name contain a particular substring (uppercase or lowercase is -not significant). - -\xtc{ -Issue this to see a list of all operations with -``{\tt complex}'' in their names. -}{ -\spadpaste{)what operation complex} -} -\xtc{ -If you want to see all domains with ``{\tt matrix}'' in their names, issue -this. -}{ -\spadpaste{)what domain matrix} -} -\xtc{ -Similarly, if you wish to see all packages whose names contain -``{\tt gauss}'', enter this. -}{ -\spadpaste{)what package gauss} -} -\xtc{ -This command shows all -the operations that \axiomType{Any} provides. -Wherever \axiomSyntax{\$} appears, it means ``\axiomType{Any}''. -}{ -\spadpaste{)show Any} -} -\xtc{ -This displays all operations with the name \axiomFun{complex}. -}{ -\spadpaste{)display operation complex} -} -Let's analyze this output. -\xtc{ -First we find out what some of the abbreviations mean. -}{ -\spadpaste{)abbreviation query COMPCAT} -} -\xtc{ -}{ -\spadpaste{)abbreviation query COMRING} -} - -So if \axiom{D1} is a commutative ring (such as the integers or -floats) and \axiom{D} belongs to \axiomType{ComplexCategory -D1}, then there is an operation called \axiomFun{complex} that -takes two elements of \axiom{D1} and creates an element of -\axiom{D}. -The primary example of a constructor implementing domains -belonging to \axiomType{ComplexCategory} is \axiomType{Complex}. -See \downlink{`Complex'}{ComplexXmpPage}\ignore{Complex} -for more information on that and see -\downlink{``\ugUserDeclareTitle''}{ugUserDeclarePage} in -Section \ugUserDeclareNumber\ignore{ugUserDeclare} -for more information on function types. -\endscroll -\autobuttons -\end{page} - -@ -\section{ug03.ht} -<>= -\newcommand{\ugHyperTitle}{Using \HyperName{}} -\newcommand{\ugHyperNumber}{3.} - -@ -\subsection{3. Using \HyperName{}} -\label{ugHyperPage} -\begin{itemize} -\item YouTriedIt \ref{YouTriedIt} on -page~\pageref{YouTriedIt} -\item ugHyperHeadingsPage \ref{ugHyperHeadingsPage} on -page~\pageref{ugHyperHeadingsPage} -\item ugHyperKeysPage \ref{ugHyperKeysPage} on -page~\pageref{ugHyperKeysPage} -\item ugHyperScrollPage \ref{ugHyperScrollPage} on -page~\pageref{ugHyperScrollPage} -\item ugHyperInputPage \ref{ugHyperInputPage} on -page~\pageref{ugHyperInputPage} -\item ugHyperButtonsPage \ref{ugHyperButtonsPage} on -page~\pageref{ugHyperButtonsPage} -\item ugHyperSearchPage \ref{ugHyperSearchPage} on -page~\pageref{ugHyperSearchPage} -\item ugHyperExamplePage \ref{ugHyperExamplePage} on -page~\pageref{ugHyperExamplePage} -\item ugHyperResourcesPage \ref{ugHyperResourcesPage} on -page~\pageref{ugHyperResourcesPage} -\end{itemize} -\index{pages!ugHyperPage!ug03.ht} -\index{ug03.ht!pages!ugHyperPage} -\index{ugHyperPage!ug03.ht!pages} -<>= -\begin{page}{ugHyperPage}{3. Using \HyperName{}} -\beginscroll - - -\HyperName{} is the gateway to Axiom. -It's both an on-line tutorial and an on-line reference manual. -It also enables you to use Axiom simply by using the mouse and -filling in templates. -\HyperName{} is available to you if you are running Axiom under the -X Window System. - -Pages usually have active areas, marked in -\texht{{\bf this font} (bold face).}{\downlink{this font.}{YouTriedIt}} -As you move the mouse pointer to an active area, the pointer changes from -a filled dot to an open circle. -The active areas are usually linked to other pages. -When you click on an active area, you move to the linked page. -\texht{}{Try clicking \downlink{here}{YouTriedIt} now.} - -We suggest that you learn more about other features of -\HyperName{} by clicking on an active area in the menu below. - -\beginmenu - \menudownlink{{3.1. Headings}}{ugHyperHeadingsPage} - \menudownlink{{3.2. Key Definitions}}{ugHyperKeysPage} - \menudownlink{{3.3. Scroll Bars}}{ugHyperScrollPage} - \menudownlink{{3.4. Input Areas}}{ugHyperInputPage} - \menudownlink{{3.5. Radio Buttons and Toggles}}{ugHyperButtonsPage} - \menudownlink{{3.6. Search Strings}}{ugHyperSearchPage} - \menudownlink{{3.7. Example Pages}}{ugHyperExamplePage} - \menudownlink{{3.8. X Window Resources for \HyperName{}}}{ugHyperResourcesPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugHyperHeadingsTitle}{Headings} -\newcommand{\ugHyperHeadingsNumber}{3.1.} - -@ -\subsection{3.1. Headings} -\label{ugHyperHeadingsPage} -\index{pages!ugHyperHeadingsPage!ug03.ht} -\index{ug03.ht!pages!ugHyperHeadingsPage} -\index{ugHyperHeadingsPage!ug03.ht!pages} -<>= -\begin{page}{ugHyperHeadingsPage}{3.1. Headings} -\beginscroll -% -Most pages have a standard set of buttons at the top of the page. -This is what they mean: - -\indent{0} -\beginitems -\item[\StdHelpButton{}] Click on this to get help. -The button only appears if there is specific help for the page you are -viewing. -You can get {\it general} help for \HyperName{} by clicking the help -button on the home page. - -\item[\UpButton{}] Click here to go back one page. -By clicking on this button repeatedly, you can go back several pages and -then take off in a new direction. - -\item[\ReturnButton{}] Go back to the home page, that is, -the page on which you started. -Use \HyperName{} to explore, to make forays into new topics. -Don't worry about how to get back. -\HyperName{} remembers where you came from. -Just click on this button to return. - -\item[\StdExitButton{}] From the root window (the one that is displayed when -you start the system) this button leaves the \HyperName{} program, and it -must be restarted if you want to use it again. -From any other \HyperName{} window, it just makes that one window go away. -You {\it must} use this button to get rid of a window. -If you use the window manager ``Close'' button, then all of \HyperName{} -goes away. -\enditems -\indent{0} -% -The buttons are not displayed if they are not applicable to the page -you are viewing. -For example, there is no \ReturnButton{} button on the top-level menu. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugHyperKeysTitle}{Key Definitions} -\newcommand{\ugHyperKeysNumber}{3.2.} - -@ -\subsection{3.2. Key Definitions} -\label{ugHyperKeysPage} -\begin{itemize} -\item ugHyperScrollPage \ref{ugHyperScrollPage} on -page~\pageref{ugHyperScrollPage} -\item ugHyperInputPage \ref{ugHyperInputPage} on -page~\pageref{ugHyperInputPage} -\end{itemize} -\index{pages!ugHyperKeysPage!ug03.ht} -\index{ug03.ht!pages!ugHyperKeysPage} -\index{ugHyperKeysPage!ug03.ht!pages} -<>= -\begin{page}{ugHyperKeysPage}{3.2. Key Definitions} -\beginscroll - -The following keyboard definitions are in effect throughout -\HyperName{}. -See \downlink{``\ugHyperScrollTitle''}{ugHyperScrollPage} -in Section \ugHyperScrollNumber\ignore{ugHyperScroll} and -\downlink{``\ugHyperInputTitle''}{ugHyperInputPage} -in Section \ugHyperInputNumber\ignore{ugHyperInput} -for some contextual key definitions. -% -\indent{0} -\beginitems -\item[F1] Display the main help page. -\item[F3] Same as \StdExitButton{}, makes the window go away if you are -not at the top-level window or quits the \HyperName{} facility if you are -at the top-level. -\item[F5] Rereads the \HyperName{} database, if necessary (for system -developers). -\item[F9] Displays this information about key definitions. -\item[F12] Same as {\bf F3}. -\item[Up Arrow] Scroll up one line. -\item[Down Arrow] Scroll down one line. -\item[Page Up] Scroll up one page. -\item[Page Down] Scroll down one page. -\enditems -\indent{0} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugHyperScrollTitle}{Scroll Bars} -\newcommand{\ugHyperScrollNumber}{3.3.} - -@ -\subsection{3.3. Scroll Bars} -\label{ugHyperScrollPage} -\begin{itemize} -\item ugHyperInputPage \ref{ugHyperInputPage} on -page~\pageref{ugHyperInputPage} -\end{itemize} -\index{pages!ugHyperScrollPage!ug03.ht} -\index{ug03.ht!pages!ugHyperScrollPage} -\index{ugHyperScrollPage!ug03.ht!pages} -<>= -\begin{page}{ugHyperScrollPage}{3.3. Scroll Bars} -\beginscroll -% - -Whenever there is too much text to fit on a page, a {\it scroll -bar} automatically appears along the right side. - -With a scroll bar, your page becomes an aperture, that is, a -window into a larger amount of text than can be displayed at one -time. -The scroll bar lets you move up and down in the text to see -different parts. -It also shows where the aperture is relative to the whole text. -The aperture is indicated by a strip on the scroll bar. - -Move the cursor with the mouse to the ``down-arrow'' at the bottom -of the scroll bar and click. -See that the aperture moves down one line. -Do it several times. -Each time you click, the aperture moves down one line. -Move the mouse to the ``up-arrow'' at the top of the scroll bar and -click. -The aperture moves up one line each time you click. - -Next move the mouse to any position along the middle of the scroll bar and -click. -\HyperName{} attempts to move the top of the aperture to this point in -the text. - -You cannot make the aperture go off the bottom edge. -When the aperture is about half the size of text, the lowest you can move -the aperture is halfway down. - -To move up or down one screen at a time, use the -\texht{\fbox{\bf PageUp}}{{\bf PageUp}} and \texht{\fbox{\bf PageDown}}{{\bf -PageDown}} keys on your keyboard. -They move the visible part of the region up and down one page each time you -press them. - -If the \HyperName{} page does not contain an input area -(see \downlink{``\ugHyperInputTitle''}{ugHyperInputPage} -in Section \ugHyperInputNumber\ignore{ugHyperInput}), you can also use the -\texht{\fbox{\bf Home}}{{\bf Home}} and -\texht{\fbox{$\uparrow$}}{up} and -\texht{\fbox{$\downarrow$}}{down} arrow keys to navigate. -When you press the \texht{\fbox{\bf Home}}{{\bf Home}} key, -the screen is positioned at the very top of the page. -Use the \texht{\fbox{$\uparrow$}}{up} and -\texht{\fbox{$\downarrow$}}{down} arrow keys to move the screen up -and down one line at a time, respectively. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugHyperInputTitle}{Input Areas} -\newcommand{\ugHyperInputNumber}{3.4.} - -@ -\subsection{3.4. Input Areas} -\label{ugHyperInputPage} -\index{pages!ugHyperInputPage!ug03.ht} -\index{ug03.ht!pages!ugHyperInputPage} -\index{ugHyperInputPage!ug03.ht!pages} -<>= -\begin{page}{ugHyperInputPage}{3.4. Input Areas} -\beginscroll -% -Input areas are boxes where you can put data. -Here is one: -\centerline{\inputstring{one}{40}{some text}} -\newline As you can see, the input area has some initial text {\it some text} -followed by an underscore cursor (the character {\it _}). - -To enter characters, first -move your mouse cursor to somewhere within the \HyperName{} page. -Characters that you type are inserted in front of the underscore. -This means that when you type characters at your keyboard, they -go into this first input area. - -The input area grows to accommodate as many characters as you type. -Use the \texht{\fbox{\bf Backspace}}{{\bf Backspace}} -key to erase characters to the left. -To modify what you type, use the right-arrow \texht{\fbox{$\rightarrow$}}{} -and left-arrow keys \texht{\fbox{$\leftarrow$}}{} and the -keys \texht{\fbox{\bf Insert}}{{\bf Insert}}, -\texht{\fbox{\bf Delete}}{{\bf Delete}}, -\texht{\fbox{\bf Home}}{{\bf Home}} and -\texht{\fbox{\bf End}}{{\bf End}}. -These keys are found immediately on the right of the standard IBM keyboard. - -If you press the -\texht{\fbox{\bf Home}}{{\bf Home}} -key, the cursor moves to the beginning of the line and if you press the -\texht{\fbox{\bf End}}{{\bf End}} -key, the cursor moves to the end of the line. -Pressing -\texht{\fbox{\bf Ctrl}--\fbox{\bf End}}{{\bf Ctrl-End}} -deletes all the text from the cursor to the end of the line. - -A page may have more than one input area. -Only one input area has an underscore cursor. -When you first see apage, the top-most input area contains the -cursor. -To type information into another input area, -use the \texht{\fbox{\bf Enter}}{{\bf Enter}} or -\texht{\fbox{\bf Tab}}{{\bf Tab}} key to move -from one input area to another. -To move in the reverse order, use -\texht{\fbox{\bf Shift}--\fbox{\bf Tab}}{{\bf Shift-Tab}}. - -You can also move from one input area to another using your mouse. -Notice that each input area is active. Click on one of the areas. -As you can see, the underscore cursor moves to that window. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugHyperButtonsTitle}{Radio Buttons and Toggles} -\newcommand{\ugHyperButtonsNumber}{3.5.} - -@ -\subsection{3.5. Radio Buttons and Toggles} -\label{ugHyperButtonsPage} -\index{pages!ugHyperButtonsPage!ug03.ht} -\index{ug03.ht!pages!ugHyperButtonsPage} -\index{ugHyperButtonsPage!ug03.ht!pages} -<>= -\begin{page}{ugHyperButtonsPage}{3.5. Radio Buttons and Toggles} -\beginscroll -% -Some pages have {\it radio buttons} and {\it toggles}. -Radio buttons are a group of buttons like those on car radios: you can -select only one at a time. -\radioboxes{sample}{\htbmfile{pick}}{\htbmfile{unpick}} -Here are three radio buttons: -\centerline{ -{\em\radiobox[1]{rone}{sample}\space{}\ First one}\space{3} -{\em\radiobox[0]{rtwo}{sample}\space{}\ Second one}\space{3} -{\em\radiobox[0]{rthree}{sample}\space{}\ Third one} -} -\newline -Once you have selected a button, it appears to be inverted and -contains a checkmark. -To change the selection, move the cursor with the mouse to a different radio -button and click. -\texht{}{Try it now.} - -A toggle is an independent button that displays some on/off -state. -When ``on'', the button appears to be inverted and -contains a checkmark. -When ``off'', the button is raised. -% -Unlike radio buttons, you can set a group of them any way you like. -Here are three: -\centerline{ -{\em\inputbox[1]{one}{\htbmfile{pick}}{\htbmfile{unpick}}\space{}\ First one} -\space{3} -{\em\inputbox[0]{two}{\htbmfile{pick}}{\htbmfile{unpick}}\space{}\ Second one} -\space{3} -{\em\inputbox[1]{three}{\htbmfile{pick}}{\htbmfile{unpick}}\space{}\ Third one} -} -\newline -To change toggle the selection, move the cursor with the mouse -to the button and click. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugHyperSearchTitle}{Search Strings} -\newcommand{\ugHyperSearchNumber}{3.6.} - -@ -\subsection{3.6. Search Strings} -\label{ugHyperSearchPage} -\begin{itemize} -\item ugLogicalSearchesPage \ref{ugLogicalSearchesPage} on -page~\pageref{ugLogicalSearchesPage} -\end{itemize} -\index{pages!ugHyperSearchPage!ug03.ht} -\index{ug03.ht!pages!ugHyperSearchPage} -\index{ugHyperSearchPage!ug03.ht!pages} -<>= -\begin{page}{ugHyperSearchPage}{3.6. Search Strings} -\beginscroll -% -A {\it search string} is used for searching some database. -To learn about search strings, we suggest that -you bring up the \HyperName{} glossary. -To do this from the top-level page of \HyperName{}: -\indent{4} -\beginitems -\item[1. ] Click on \windowlink{Reference}{TopReferencePage}, -bringing up the Axiom Reference page. -\item[2. ] Click on \windowlink{Glossary}{GlossaryPage}, bringing up the glossary. -\texht{}{(You can also just click on the word ``Glossary'' in the -last sentence.)} -\enditems -\indent{0} -Once you get the window containing the glossary, move it so that -it and this window are both visible. - -The glossary has an input area at its bottom. -We review the various kinds of search strings -you can enter to search the glossary. - -The simplest search string is a word, for example, {\tt operation}. -A word only matches an entry having exactly that spelling. -Enter the word {\tt operation} into the input area above then click on -{\bf Search}. -As you can see, {\tt operation} matches only one entry, namely with {\tt -operation} itself. - -Normally matching is insensitive to whether the alphabetic characters of your -search string are in uppercase or lowercase. -Thus {\tt operation} and {\tt OperAtion} both have the same effect. -%If you prefer that matching be case-sensitive, issue the command -%\spadsys{set HHyperName mixedCase} command to the interpreter. - -You will very often want to use the wildcard \spadSyntax{*} in your search -string so as to match multiple entries in the list. -The search key \spadSyntax{*} matches every entry in the list. -You can also use \spadSyntax{*} anywhere within a search string to match an -arbitrary substring. -Try {\tt cat*} for example: -enter {\tt cat*} into the input area and click on {\bf Search}. -This matches several entries. - -You use any number of wildcards in a search string as long as they are -not adjacent. -Try search strings such as {\tt *dom*}. -As you see, this search string matches {\tt domain}, {\tt domain -constructor}, {\tt subdomain}, and so on. - -\beginmenu - \menudownlink{{3.6.1. Logical Searches}}{ugLogicalSearchesPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLogicalSearchesTitle}{Logical Searches} -\newcommand{\ugLogicalSearchesNumber}{3.6.1.} - -@ -\subsection{3.6.1. Logical Searches} -\label{ugLogicalSearchesPage} -\index{pages!ugLogicalSearchesPage!ug03.ht} -\index{ug03.ht!pages!ugLogicalSearchesPage} -\index{ugLogicalSearchesPage!ug03.ht!pages} -<>= -\begin{page}{ugLogicalSearchesPage}{3.6.1. Logical Searches} -\beginscroll - -For more complicated searches, you can use -\spadSyntax{and}, \spadSyntax{or}, and \spadSyntax{not} -with basic search strings; -write logical expressions using these three operators just as -in the Axiom language. -For example, {\tt domain or package} matches the two -entries {\tt domain} and {\tt package}. -Similarly, {\tt dom* and *con*} matches {\tt domain constructor} -and others. -Also {\tt not *a*} matches every entry that does not contain -the letter {\tt a} somewhere. - -Use parentheses for grouping. -For example, {\tt dom* and (not *con*)} -matches {\tt domain} but not {\tt domain constructor}. - -There is no limit to how complex your logical expression can be. -For example, -\centerline{{{\tt a* or b* or c* or d* or e* and (not *a*)}}} -is a valid expression. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugHyperExampleTitle}{Example Pages} -\newcommand{\ugHyperExampleNumber}{3.7.} - -@ -\subsection{3.7. Example Pages} -\label{ugHyperExamplePage} -\index{pages!ugHyperExamplePage!ug03.ht} -\index{ug03.ht!pages!ugHyperExamplePage} -\index{ugHyperExamplePage!ug03.ht!pages} -<>= -\begin{page}{ugHyperExamplePage}{3.7. Example Pages} -\beginscroll -% -Many pages have Axiom example commands. -% -Here are two: -\spadpaste{a:= x**2 + 1 \bound{a}} -\spadpaste{(a - 2)**2 \free{a}} -% -Each command has an active ``button'' along the left margin. -When you click on this button, the output for the command is -``pasted-in.'' -Click again on the button and you see that the pasted-in output -disappears. - -Maybe you would like to run an example? -To do so, just click on any part of its text! -When you do, the example line is copied into a new interactive -Axiom buffer for this \HyperName{} page. - -Sometimes one example line cannot be run before you run an earlier one. -Don't worry---\HyperName{} automatically runs all the necessary -lines in the right order! -For instance, the second example line above refers to \spad{a} which is -assigned in the first example line. -What happens if you first click on the second example line? -Axiom first issues the first line (to assign \spad{a}), then the -second (to do the computation using \spad{a}). - -The new interactive Axiom buffer disappears when you leave -\HyperName{}. -If you want to get rid of it beforehand, -use the {\bf Cancel} button of the X Window manager -or issue the Axiom system command \spadsys{)close.} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugHyperResourcesTitle}{X Window Resources for \HyperName{}} -\newcommand{\ugHyperResourcesNumber}{3.8.} - -@ -\subsection{3.8. X Window Resources for \HyperName{}} -\label{ugHyperResourcesPage} -\index{pages!ugHyperResourcesPage!ug03.ht} -\index{ug03.ht!pages!ugHyperResourcesPage} -\index{ugHyperResourcesPage!ug03.ht!pages} -<>= -\begin{page}{ugHyperResourcesPage}{3.8. X Window Resources for \HyperName{}} -\beginscroll -% -You can control the appearance of \HyperName{} while running under Version 11 -of the X Window System by placing the following resources -in the file {\bf .Xdefaults} in your home directory. -In what follows, {\it font} is any valid X11 font name -(for example, {\tt Rom14}) and {\it color} is any valid X11 color -specification (for example, {\tt NavyBlue}). -For more information about fonts and colors, refer to the -X Window documentation for your system. -\indent{0} -\beginitems -\item[{\tt Axiom.hyperdoc.RmFont:} {\it font}] \ \newline -This is the standard text font. \xdefault{Rom14} -\item[{\tt Axiom.hyperdoc.RmColor:} {\it color}] \ \newline -This is the standard text color. \xdefault{black} -\item[{\tt Axiom.hyperdoc.ActiveFont:} {\it font}] \ \newline -This is the font used for \HyperName{} link buttons. \xdefault{Bld14} -\item[{\tt Axiom.hyperdoc.ActiveColor:} {\it color}] \ \newline -This is the color used for \HyperName{} link buttons. \xdefault{black} -\item[{\tt Axiom.hyperdoc.AxiomFont:} {\it font}] \ \newline -This is the font used for active Axiom commands.\footnote{ -This was called {\tt Axiom.hyperdoc.SpadFont} in early versions -of Axiom.} -\xdefault{Bld14} -\item[{\tt Axiom.hyperdoc.AxiomColor:} {\it color}] \ \newline -This is the color used for active Axiom commands.\footnote{ -This was called {\tt Axiom.hyperdoc.SpadColor} in early versions -of Axiom.} -\xdefault{black} -\item[{\tt Axiom.hyperdoc.BoldFont:} {\it font}] \ \newline -This is the font used for bold face. \xdefault{Bld14} -\item[{\tt Axiom.hyperdoc.BoldColor:} {\it color}] \ \newline -This is the color used for bold face. \xdefault{black} -\item[{\tt Axiom.hyperdoc.TtFont:} {\it font}] \ \newline -This is the font used for Axiom output in \HyperName{}. -This font must be fixed-width. \xdefault{Rom14} -\item[{\tt Axiom.hyperdoc.TtColor:} {\it color}] \ \newline -This is the color used for Axiom output in \HyperName{}. -\xdefault{black} -\item[{\tt Axiom.hyperdoc.EmphasizeFont:} {\it font}] \ \newline -This is the font used for italics. \xdefault{Itl14} -\item[{\tt Axiom.hyperdoc.EmphasizeColor:} {\it color}] \ \newline -This is the color used for italics. \xdefault{black} -\item[{\tt Axiom.hyperdoc.InputBackground:} {\it color}] \ \newline -This is the color used as the background for input areas. -\xdefault{black} -\item[{\tt Axiom.hyperdoc.InputForeground:} {\it color}] \ \newline -This is the color used as the foreground for input areas. -\xdefault{white} -\item[{\tt Axiom.hyperdoc.BorderColor:} {\it color}] \ \newline -This is the color used for drawing border lines. -\xdefault{black} -\item[{\tt Axiom.hyperdoc.Background:} {\it color}] \ \newline -This is the color used for the background of all windows. -\xdefault{white} -\enditems -\indent{0} -\endscroll -\autobuttons -\end{page} -@ -\section{ug04.ht} -<>= -\newcommand{\ugInOutTitle}{Input Files and Output Styles} -\newcommand{\ugInOutNumber}{4.} - -@ -\subsection{4. Input Files and Output Styles} -\label{ugInOutPage} -\begin{itemize} -\item ugInOutInPage \ref{ugInOutInPage} on -page~\pageref{ugInOutInPage} -\item ugInOutSpadprofPage \ref{ugInOutSpadprofPage} on -page~\pageref{ugInOutSpadprofPage} -\item ugInOutOutPage \ref{ugInOutOutPage} on -page~\pageref{ugInOutOutPage} -\item ugInOutAlgebraPage \ref{ugInOutAlgebraPage} on -page~\pageref{ugInOutAlgebraPage} -\item ugInOutTeXPage \ref{ugInOutTeXPage} on -page~\pageref{ugInOutTeXPage} -\item ugInOutScriptPage \ref{ugInOutScriptPage} on -page~\pageref{ugInOutScriptPage} -\item ugInOutFortranPage \ref{ugInOutFortranPage} on -page~\pageref{ugInOutFortranPage} -\end{itemize} -\index{pages!ugInOutPage!ug04.ht} -\index{ug04.ht!pages!ugInOutPage} -\index{ugInOutPage!ug04.ht!pages} -<>= -\begin{page}{ugInOutPage}{4. Input Files and Output Styles} -\beginscroll - -In this chapter we discuss how to collect Axiom statements -and commands into files and then read the contents into the -workspace. -We also show how to display the results of your computations in -several different styles including \texht{\TeX}{TeX}, FORTRAN and -monospace two-dimensional format.\footnote{\texht{\TeX}{TeX} is a -trademark of the American Mathematical Society.} - -The printed version of this book uses the Axiom -\texht{\TeX}{TeX} output formatter. -When we demonstrate a particular output style, we will need to -turn \texht{\TeX}{TeX} formatting off and the output style on so -that the correct output is shown in the text. - -\beginmenu - \menudownlink{{4.1. Input Files}}{ugInOutInPage} - \menudownlink{{4.2. The axiom.input File}}{ugInOutSpadprofPage} - \menudownlink{{4.3. Common Features of Using Output Formats}} -{ugInOutOutPage} - \menudownlink{{4.4. Monospace Two-Dimensional Mathematical Format}} -{ugInOutAlgebraPage} - \menudownlink{{4.5. TeX Format}}{ugInOutTeXPage} - \menudownlink{{4.6. IBM Script Formula Format}}{ugInOutScriptPage} - \menudownlink{{4.7. FORTRAN Format}}{ugInOutFortranPage} -\endmenu -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugInOutInTitle}{Input Files} -\newcommand{\ugInOutInNumber}{4.1.} - -@ -\subsection{4.1. Input Files} -\label{ugInOutInPage} -\begin{itemize} -\item ugLangBlocksPage \ref{ugLangBlocksPage} on -page~\pageref{ugLangBlocksPage} -\end{itemize} -\index{pages!ugInOutInPage!ug04.ht} -\index{ug04.ht!pages!ugInOutInPage} -\index{ugInOutInPage!ug04.ht!pages} -<>= -\begin{page}{ugInOutInPage}{4.1. Input Files} -\beginscroll -% -In this section we explain what an {\it input file} is and -why you would want to know about it. -We discuss where Axiom looks for input files and how you can -direct it to look elsewhere. -We also show how to read the contents of an input file into the -\spadgloss{workspace} and how to use the \spadgloss{history} -facility to generate an input file from the statements you have -entered directly into the workspace. - -An {\it input} file contains Axiom expressions and system -commands. -Anything that you can enter directly to Axiom can be put -into an input file. -This is how you save input functions and expressions that you wish -to read into Axiom more than one time. - -To read an input file into Axiom, use the \spadcmd{)read} -system command. -For example, you can read a file in a particular directory by issuing -\begin{verbatim} -)read /spad/src/input/matrix.input -\end{verbatim} -The ``{\bf .input}'' is optional; this also works: -\begin{verbatim} -)read /spad/src/input/matrix -\end{verbatim} -What happens if you just enter -\spadcmd{)read matrix.input} or even \spadcmd{)read matrix}? -Axiom looks in your current working directory for input files -that are not qualified by a directory name. -Typically, this directory is the directory from which you invoked -Axiom. -To change the current working directory, use the \spadcmd{)cd} system command. -The command \spadsys{)cd} by itself shows the current -working -directory. -To change it to -the \spadsys{src/input} subdirectory for user ``babar'', -issue -\begin{verbatim} -)cd /u/babar/src/input -\end{verbatim} -Axiom looks first in this directory for an input file. -If it is not found, it looks in the system's directories, assuming -you meant some input file that was provided with Axiom. - -\beginImportant -If you have the Axiom history facility turned on (which it is -by default), you can save all the lines you have entered into the -workspace by entering +\subsection{Asp24 Example Code} +\label{Asp24ExampleCode} +\index{pages!Asp24ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp24ExampleCode} +\index{Asp24ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp24ExampleCode}{Asp24 Example Code} \begin{verbatim} -)history )write + SUBROUTINE FUNCT1(N,XC,FC) + DOUBLE PRECISION FC,XC(N) + INTEGER N + FC=10.0D0*XC(4)**4+(-40.0D0*XC(1)*XC(4)**3)+(60.0D0*XC(1)**2+5 + &.0D0)*XC(4)**2+((-10.0D0*XC(3))+(-40.0D0*XC(1)**3))*XC(4)+16.0D0*X + &C(3)**4+(-32.0D0*XC(2)*XC(3)**3)+(24.0D0*XC(2)**2+5.0D0)*XC(3)**2+ + &(-8.0D0*XC(2)**3*XC(3))+XC(2)**4+100.0D0*XC(2)**2+20.0D0*XC(1)*XC( + &2)+10.0D0*XC(1)**4+XC(1)**2 + RETURN + END \end{verbatim} - -Axiom tells you what input file to edit to see your -statements. -The file is in your home directory or in the directory you -specified with \spadsys{)cd}. -\endImportant - -In \downlink{``\ugLangBlocksTitle''}{ugLangBlocksPage} -in Section \ugLangBlocksNumber\ignore{ugLangBlocks} -we discuss using indentation in input files to group statements -into {\it blocks.} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugInOutSpadprofTitle}{The axiom.input File} -\newcommand{\ugInOutSpadprofNumber}{4.2.} - -@ -\subsection{4.2. The axiom.input File} -\label{ugInOutSpadprofPage} -\index{pages!ugInOutSpadprofPage!ug04.ht} -\index{ug04.ht!pages!ugInOutSpadprofPage} -\index{ugInOutSpadprofPage!ug04.ht!pages} -<>= -\begin{page}{ugInOutSpadprofPage}{4.2. The axiom.input File} -\beginscroll - -When Axiom starts up, it tries to read the input file -{\bf axiom.input} from your home -directory. -It there is no {\bf axiom.input} in your home directory, it reads the copy -located in its own {\bf src/input} directory. -The file usually contains -system commands to personalize your Axiom environment. -In the remainder of this section we mention a few things -that users frequently place in their -{\bf axiom.input} files. - -In order to have FORTRAN output always produced from your -computations, place the system command -\spadcmd{)set output fortran on} -in {\bf axiom.input}. -If you do not want to be prompted for confirmation when you issue -the \spadcmd{)quit} system command, place -\spadcmd{)set quit unprotected} -in {\bf axiom.input}. -If you then decide that you do want to be prompted, issue -\spadcmd{)set quit protected}. -This is the default setting -so that new users do not leave Axiom -inadvertently.\footnote{The -system command \spadsys{)pquit} always prompts you for -confirmation.} - -To see the other system variables you can set, issue \spadsys{)set} -or use the \HyperName{} {\bf Settings} facility to view and change -Axiom system variables. - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugInOutOutTitle}{Common Features of Using Output Formats} -\newcommand{\ugInOutOutNumber}{4.3.} - -@ -\subsection{4.3. Common Features of Using Output Formats} -\label{ugInOutOutPage} -\index{pages!ugInOutOutPage!ug04.ht} -\index{ug04.ht!pages!ugInOutOutPage} -\index{ugInOutOutPage!ug04.ht!pages} -<>= -\begin{page}{ugInOutOutPage}{4.3. Common Features of Using Output Formats} -\beginscroll - -In this section we discuss how to start and stop the display -of the different output formats and how to send the output to the -screen or to a file. -To fix ideas, we use FORTRAN output format for most of the -examples. - -You can use the \spadcmd{)set output} -system -command to -toggle or redirect the different kinds of output. -The name of the kind of output follows ``output'' in the command. -The names are - -\indent{0} -\beginitems -\item[fortran] for FORTRAN output. -\item[algebra] for monospace two-dimensional mathematical output. -\item[tex] for \texht{\TeX}{TeX} output. -\item[script] for IBM Script Formula Format output. -\enditems -\indent{0} - -For example, issue \spadsys{)set output fortran on} to turn on -FORTRAN format and -issue \spadsys{)set output fortran off} to turn it off. -By default, {\tt algebra} is {\tt on} and all others are {\tt off}. -When output is started, it is sent to the screen. -To send the output to a file, give the file name without -directory or extension. -Axiom appends a file extension depending on the kind of -output being produced. -\xtc{ -Issue this to redirect FORTRAN output to, for example, the file -{\bf linalg.sfort}. -}{ -\spadpaste{)set output fortran linalg} -} -\noOutputXtc{ -You must {\it also} turn on the creation of FORTRAN output. -The above just says where it goes if it is created. -}{ -\spadpaste{)set output fortran on} -} -In what directory is this output placed? -It goes into the directory from which you started Axiom, -or if you have used the \spadsys{)cd} system command, the one -that you specified with \spadsys{)cd}. -You should use \spadcmd{)cd} before you send the output to the file. - -\noOutputXtc{ -You can always direct output back to the screen by issuing this. -}{ -\spadpaste{)set output fortran console} -} -\noOutputXtc{ -Let's make sure FORTRAN formatting is off so that nothing we -do from now on produces FORTRAN output. -}{ -\spadpaste{)set output fortran off} -} -\noOutputXtc{ -We also delete the demonstrated output file we created. -}{ -\spadpaste{)system rm linalg.sfort} -} - -You can abbreviate the words ``\spad{on},'' ``\spad{off}'' and -``\spad{console}'' to the minimal number -of characters needed to distinguish them. -Because of this, you cannot send output to files called -{\bf on.sfort, off.sfort, of.sfort, -console.sfort, consol.sfort} and so on. - -The width of the output on the page is set by -\spadcmd{)set output length} -for all formats except FORTRAN. -Use \spadcmd{)set fortran fortlength} to -change the FORTRAN line length from its default value of \spad{72}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugInOutAlgebraTitle}{Monospace Two-Dimensional Mathematical Format} -\newcommand{\ugInOutAlgebraNumber}{4.4.} - -@ -\subsection{4.4. Monospace Two-Dimensional Mathematical Format} -\label{ugInOutAlgebraPage} -\index{pages!ugInOutAlgebraPage!ug04.ht} -\index{ug04.ht!pages!ugInOutAlgebraPage} -\index{ugInOutAlgebraPage!ug04.ht!pages} -<>= -\begin{page}{ugInOutAlgebraPage} -{4.4. Monospace Two-Dimensional Mathematical Format} -\beginscroll - -This is the default output format for Axiom. -It is usually on when you start the system. - -\texht{\vskip 4pc}{} -\noOutputXtc{ -If it is not, issue this. -}{ -\spadpaste{)set output algebra on \bound{algon}} -} -\noOutputXtc{ -Since the printed version of this book -(as opposed to the \HyperName{} version) -shows output produced by the -\texht{\TeX}{TeX}{} output formatter, -let us temporarily turn off -\texht{\TeX}{TeX}{} output. -}{ -\spadpaste{)set output tex off \bound{texoff}} -} -\xtc{ -Here is an example of what it looks like. -}{ -\spadpaste{matrix [[i*x**i + j*\%i*y**j for i in 1..2] for j in 3..4] \free{algon texoff}} -} -\noOutputXtc{ -Issue this to turn off this kind of formatting. -}{ -\spadpaste{)set output algebra off} -} -\noOutputXtc{ -Turn \texht{\TeX}{TeX}{} output on again. -}{ -\spadpaste{)set output tex on} -} - -The characters used for the matrix brackets above are rather ugly. -You get this character set when you issue -\spadcmd{)set output characters plain}. -This character set should be used when you are running on a machine -that does not support the IBM extended ASCII character set. -If you are running on an IBM workstation, for example, issue -\spadcmd{)set output characters default} -to get better looking output. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugInOutTeXTitle}{TeX Format} -\newcommand{\ugInOutTeXNumber}{4.5.} - -@ -\subsection{4.5. TeX Format} -\label{ugInOutTeXPage} -\index{pages!ugInOutTeXPage!ug04.ht} -\index{ug04.ht!pages!ugInOutTeXPage} -\index{ugInOutTeXPage!ug04.ht!pages} -<>= -\begin{page}{ugInOutTeXPage}{4.5. TeX Format} -\beginscroll - -Axiom can produce \texht{\TeX}{TeX}{} output for your -expressions. -The output is produced using macros from the -\texht{\LaTeX}{LaTeX} document preparation system by -Leslie Lamport.\footnote{See Leslie Lamport, {\it LaTeX: A Document -Preparation System,} Reading, Massachusetts: Addison-Wesley -Publishing Company, Inc., 1986.} -The printed version of this book was produced using this formatter. - -\noOutputXtc{ -To turn on \texht{\TeX}{TeX}{} output formatting, issue this. -}{ -\spadpaste{)set output tex on \bound{texon}} -} -Here is an example of its output. -\begin{verbatim} -matrix [[i*x**i + j*\%i*y**j for i in 1..2] for j in 3..4] - -\[ -\left[ -\begin{array}{cc} -\displaystyle {{3 \ \%i \ {y \sp 3}}+x}& -\displaystyle {{3 \ \%i \ {y \sp 3}}+{2 \ {x \sp 2}}} \\ -\displaystyle {{4 \ \%i \ {y \sp 4}}+x}& -\displaystyle {{4 \ \%i \ {y \sp 4}}+{2 \ {x \sp 2}}} -\end{array} -\right] -\leqno(3) -\] -%Axiom STEP NUMBER: 3 -\end{verbatim} -To turn \texht{\TeX}{TeX}{} output formatting off, issue \spadsys{)set -output tex off}. -The \texht{\LaTeX}{LaTeX} macros in the output generated by Axiom -are all standard except for the following definitions: +\subsection{Asp27 Example Code} +\label{Asp27ExampleCode} +\index{pages!Asp27ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp27ExampleCode} +\index{Asp27ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp27ExampleCode}{Asp27 Example Code} \begin{verbatim} -\def\csch{\mathop{\rm csch}\nolimits} - -\def\erf{\mathop{\rm erf}\nolimits} - -\def\zag#1#2{ - {{\hfill \left. {#1} \right|} - \over - {\left| {#2} \right. \hfill} - } -} + FUNCTION DOT(IFLAG,N,Z,W,RWORK,LRWORK,IWORK,LIWORK) + DOUBLE PRECISION W(N),Z(N),RWORK(LRWORK) + INTEGER N,LIWORK,IFLAG,LRWORK,IWORK(LIWORK) + DOT=(W(16)+(-0.5D0*W(15)))*Z(16)+((-0.5D0*W(16))+W(15)+(-0.5D0*W(1 + &4)))*Z(15)+((-0.5D0*W(15))+W(14)+(-0.5D0*W(13)))*Z(14)+((-0.5D0*W( + &14))+W(13)+(-0.5D0*W(12)))*Z(13)+((-0.5D0*W(13))+W(12)+(-0.5D0*W(1 + &1)))*Z(12)+((-0.5D0*W(12))+W(11)+(-0.5D0*W(10)))*Z(11)+((-0.5D0*W( + &11))+W(10)+(-0.5D0*W(9)))*Z(10)+((-0.5D0*W(10))+W(9)+(-0.5D0*W(8)) + &)*Z(9)+((-0.5D0*W(9))+W(8)+(-0.5D0*W(7)))*Z(8)+((-0.5D0*W(8))+W(7) + &+(-0.5D0*W(6)))*Z(7)+((-0.5D0*W(7))+W(6)+(-0.5D0*W(5)))*Z(6)+((-0. + &5D0*W(6))+W(5)+(-0.5D0*W(4)))*Z(5)+((-0.5D0*W(5))+W(4)+(-0.5D0*W(3 + &)))*Z(4)+((-0.5D0*W(4))+W(3)+(-0.5D0*W(2)))*Z(3)+((-0.5D0*W(3))+W( + &2)+(-0.5D0*W(1)))*Z(2)+((-0.5D0*W(2))+W(1))*Z(1) + RETURN + END \end{verbatim} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugInOutScriptTitle}{IBM Script Formula Format} -\newcommand{\ugInOutScriptNumber}{4.6.} - -@ -\subsection{4.6. IBM Script Formula Format} -\label{ugInOutScriptPage} -\index{pages!ugInOutScriptPage!ug04.ht} -\index{ug04.ht!pages!ugInOutScriptPage} -\index{ugInOutScriptPage!ug04.ht!pages} -<>= -\begin{page}{ugInOutScriptPage}{4.6. IBM Script Formula Format} -\beginscroll - -Axiom can -produce IBM Script Formula Format output for your -expressions. - -\texht{\vskip 2pc}{} -\noOutputXtc{ -To turn IBM Script Formula Format on, issue this. -}{ -\spadpaste{)set output script on} -} -Here is an example of its output. +\subsection{Asp28 Example Code} +\label{Asp28ExampleCode} +\index{pages!Asp28ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp28ExampleCode} +\index{Asp28ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp28ExampleCode}{Asp28 Example Code} \begin{verbatim} -matrix [[i*x**i + j*%i*y**j for i in 1..2] for j in 3..4] - -.eq set blank @ -:df. ->+x> here < <3 @@ %i @@ ->+<2 @@ >>> habove < < <4 @@ %i @@ ->+x> here < <4 @@ %i @@ >+<2 @@ ->>>> right rb> -:edf. + SUBROUTINE IMAGE(IFLAG,N,Z,W,RWORK,LRWORK,IWORK,LIWORK) + DOUBLE PRECISION Z(N),W(N),IWORK(LRWORK),RWORK(LRWORK) + INTEGER N,LIWORK,IFLAG,LRWORK + W(1)=0.01707454969713436D0*Z(16)+0.001747395874954051D0*Z(15)+0.00 + &2106973900813502D0*Z(14)+0.002957434991769087D0*Z(13)+(-0.00700554 + &0882865317D0*Z(12))+(-0.01219194009813166D0*Z(11))+0.0037230647365 + &3087D0*Z(10)+0.04932374658377151D0*Z(9)+(-0.03586220812223305D0*Z( + &8))+(-0.04723268012114625D0*Z(7))+(-0.02434652144032987D0*Z(6))+0. + &2264766947290192D0*Z(5)+(-0.1385343580686922D0*Z(4))+(-0.116530050 + &8238904D0*Z(3))+(-0.2803531651057233D0*Z(2))+1.019463911841327D0*Z + &(1) + W(2)=0.0227345011107737D0*Z(16)+0.008812321197398072D0*Z(15)+0.010 + &94012210519586D0*Z(14)+(-0.01764072463999744D0*Z(13))+(-0.01357136 + &72105995D0*Z(12))+0.00157466157362272D0*Z(11)+0.05258889186338282D + &0*Z(10)+(-0.01981532388243379D0*Z(9))+(-0.06095390688679697D0*Z(8) + &)+(-0.04153119955569051D0*Z(7))+0.2176561076571465D0*Z(6)+(-0.0532 + &5555586632358D0*Z(5))+(-0.1688977368984641D0*Z(4))+(-0.32440166056 + &67343D0*Z(3))+0.9128222941872173D0*Z(2)+(-0.2419652703415429D0*Z(1 + &)) + W(3)=0.03371198197190302D0*Z(16)+0.02021603150122265D0*Z(15)+(-0.0 + &06607305534689702D0*Z(14))+(-0.03032392238968179D0*Z(13))+0.002033 + &305231024948D0*Z(12)+0.05375944956767728D0*Z(11)+(-0.0163213312502 + &9967D0*Z(10))+(-0.05483186562035512D0*Z(9))+(-0.04901428822579872D + &0*Z(8))+0.2091097927887612D0*Z(7)+(-0.05760560341383113D0*Z(6))+(- + &0.1236679206156403D0*Z(5))+(-0.3523683853026259D0*Z(4))+0.88929961 + &32269974D0*Z(3)+(-0.2995429545781457D0*Z(2))+(-0.02986582812574917 + &D0*Z(1)) + W(4)=0.05141563713660119D0*Z(16)+0.005239165960779299D0*Z(15)+(-0. + &01623427735779699D0*Z(14))+(-0.01965809746040371D0*Z(13))+0.054688 + &97337339577D0*Z(12)+(-0.014224695935687D0*Z(11))+(-0.0505181779315 + &6355D0*Z(10))+(-0.04353074206076491D0*Z(9))+0.2012230497530726D0*Z + &(8)+(-0.06630874514535952D0*Z(7))+(-0.1280829963720053D0*Z(6))+(-0 + &.305169742604165D0*Z(5))+0.8600427128450191D0*Z(4)+(-0.32415033802 + &68184D0*Z(3))+(-0.09033531980693314D0*Z(2))+0.09089205517109111D0* + &Z(1) + W(5)=0.04556369767776375D0*Z(16)+(-0.001822737697581869D0*Z(15))+( + &-0.002512226501941856D0*Z(14))+0.02947046460707379D0*Z(13)+(-0.014 + &45079632086177D0*Z(12))+(-0.05034242196614937D0*Z(11))+(-0.0376966 + &3291725935D0*Z(10))+0.2171103102175198D0*Z(9)+(-0.0824949256021352 + &4D0*Z(8))+(-0.1473995209288945D0*Z(7))+(-0.315042193418466D0*Z(6)) + &+0.9591623347824002D0*Z(5)+(-0.3852396953763045D0*Z(4))+(-0.141718 + &5427288274D0*Z(3))+(-0.03423495461011043D0*Z(2))+0.319820917706851 + &6D0*Z(1) + W(6)=0.04015147277405744D0*Z(16)+0.01328585741341559D0*Z(15)+0.048 + &26082005465965D0*Z(14)+(-0.04319641116207706D0*Z(13))+(-0.04931323 + &319055762D0*Z(12))+(-0.03526886317505474D0*Z(11))+0.22295383396730 + &01D0*Z(10)+(-0.07375317649315155D0*Z(9))+(-0.1589391311991561D0*Z( + &8))+(-0.328001910890377D0*Z(7))+0.952576555482747D0*Z(6)+(-0.31583 + &09975786731D0*Z(5))+(-0.1846882042225383D0*Z(4))+(-0.0703762046700 + &4427D0*Z(3))+0.2311852964327382D0*Z(2)+0.04254083491825025D0*Z(1) + W(7)=0.06069778964023718D0*Z(16)+0.06681263884671322D0*Z(15)+(-0.0 + &2113506688615768D0*Z(14))+(-0.083996867458326D0*Z(13))+(-0.0329843 + &8523869648D0*Z(12))+0.2276878326327734D0*Z(11)+(-0.067356038933017 + &95D0*Z(10))+(-0.1559813965382218D0*Z(9))+(-0.3363262957694705D0*Z( + &8))+0.9442791158560948D0*Z(7)+(-0.3199955249404657D0*Z(6))+(-0.136 + &2463839920727D0*Z(5))+(-0.1006185171570586D0*Z(4))+0.2057504515015 + &423D0*Z(3)+(-0.02065879269286707D0*Z(2))+0.03160990266745513D0*Z(1 + &) + W(8)=0.126386868896738D0*Z(16)+0.002563370039476418D0*Z(15)+(-0.05 + &581757739455641D0*Z(14))+(-0.07777893205900685D0*Z(13))+0.23117338 + &45834199D0*Z(12)+(-0.06031581134427592D0*Z(11))+(-0.14805474755869 + &52D0*Z(10))+(-0.3364014128402243D0*Z(9))+0.9364014128402244D0*Z(8) + &+(-0.3269452524413048D0*Z(7))+(-0.1396841886557241D0*Z(6))+(-0.056 + &1733845834199D0*Z(5))+0.1777789320590069D0*Z(4)+(-0.04418242260544 + &359D0*Z(3))+(-0.02756337003947642D0*Z(2))+0.07361313110326199D0*Z( + &1) + W(9)=0.07361313110326199D0*Z(16)+(-0.02756337003947642D0*Z(15))+(- + &0.04418242260544359D0*Z(14))+0.1777789320590069D0*Z(13)+(-0.056173 + &3845834199D0*Z(12))+(-0.1396841886557241D0*Z(11))+(-0.326945252441 + &3048D0*Z(10))+0.9364014128402244D0*Z(9)+(-0.3364014128402243D0*Z(8 + &))+(-0.1480547475586952D0*Z(7))+(-0.06031581134427592D0*Z(6))+0.23 + &11733845834199D0*Z(5)+(-0.07777893205900685D0*Z(4))+(-0.0558175773 + &9455641D0*Z(3))+0.002563370039476418D0*Z(2)+0.126386868896738D0*Z( + &1) + W(10)=0.03160990266745513D0*Z(16)+(-0.02065879269286707D0*Z(15))+0 + &.2057504515015423D0*Z(14)+(-0.1006185171570586D0*Z(13))+(-0.136246 + &3839920727D0*Z(12))+(-0.3199955249404657D0*Z(11))+0.94427911585609 + &48D0*Z(10)+(-0.3363262957694705D0*Z(9))+(-0.1559813965382218D0*Z(8 + &))+(-0.06735603893301795D0*Z(7))+0.2276878326327734D0*Z(6)+(-0.032 + &98438523869648D0*Z(5))+(-0.083996867458326D0*Z(4))+(-0.02113506688 + &615768D0*Z(3))+0.06681263884671322D0*Z(2)+0.06069778964023718D0*Z( + &1) + W(11)=0.04254083491825025D0*Z(16)+0.2311852964327382D0*Z(15)+(-0.0 + &7037620467004427D0*Z(14))+(-0.1846882042225383D0*Z(13))+(-0.315830 + &9975786731D0*Z(12))+0.952576555482747D0*Z(11)+(-0.328001910890377D + &0*Z(10))+(-0.1589391311991561D0*Z(9))+(-0.07375317649315155D0*Z(8) + &)+0.2229538339673001D0*Z(7)+(-0.03526886317505474D0*Z(6))+(-0.0493 + &1323319055762D0*Z(5))+(-0.04319641116207706D0*Z(4))+0.048260820054 + &65965D0*Z(3)+0.01328585741341559D0*Z(2)+0.04015147277405744D0*Z(1) + W(12)=0.3198209177068516D0*Z(16)+(-0.03423495461011043D0*Z(15))+(- + &0.1417185427288274D0*Z(14))+(-0.3852396953763045D0*Z(13))+0.959162 + &3347824002D0*Z(12)+(-0.315042193418466D0*Z(11))+(-0.14739952092889 + &45D0*Z(10))+(-0.08249492560213524D0*Z(9))+0.2171103102175198D0*Z(8 + &)+(-0.03769663291725935D0*Z(7))+(-0.05034242196614937D0*Z(6))+(-0. + &01445079632086177D0*Z(5))+0.02947046460707379D0*Z(4)+(-0.002512226 + &501941856D0*Z(3))+(-0.001822737697581869D0*Z(2))+0.045563697677763 + &75D0*Z(1) + W(13)=0.09089205517109111D0*Z(16)+(-0.09033531980693314D0*Z(15))+( + &-0.3241503380268184D0*Z(14))+0.8600427128450191D0*Z(13)+(-0.305169 + &742604165D0*Z(12))+(-0.1280829963720053D0*Z(11))+(-0.0663087451453 + &5952D0*Z(10))+0.2012230497530726D0*Z(9)+(-0.04353074206076491D0*Z( + &8))+(-0.05051817793156355D0*Z(7))+(-0.014224695935687D0*Z(6))+0.05 + &468897337339577D0*Z(5)+(-0.01965809746040371D0*Z(4))+(-0.016234277 + &35779699D0*Z(3))+0.005239165960779299D0*Z(2)+0.05141563713660119D0 + &*Z(1) + W(14)=(-0.02986582812574917D0*Z(16))+(-0.2995429545781457D0*Z(15)) + &+0.8892996132269974D0*Z(14)+(-0.3523683853026259D0*Z(13))+(-0.1236 + &679206156403D0*Z(12))+(-0.05760560341383113D0*Z(11))+0.20910979278 + &87612D0*Z(10)+(-0.04901428822579872D0*Z(9))+(-0.05483186562035512D + &0*Z(8))+(-0.01632133125029967D0*Z(7))+0.05375944956767728D0*Z(6)+0 + &.002033305231024948D0*Z(5)+(-0.03032392238968179D0*Z(4))+(-0.00660 + &7305534689702D0*Z(3))+0.02021603150122265D0*Z(2)+0.033711981971903 + &02D0*Z(1) + W(15)=(-0.2419652703415429D0*Z(16))+0.9128222941872173D0*Z(15)+(-0 + &.3244016605667343D0*Z(14))+(-0.1688977368984641D0*Z(13))+(-0.05325 + &555586632358D0*Z(12))+0.2176561076571465D0*Z(11)+(-0.0415311995556 + &9051D0*Z(10))+(-0.06095390688679697D0*Z(9))+(-0.01981532388243379D + &0*Z(8))+0.05258889186338282D0*Z(7)+0.00157466157362272D0*Z(6)+(-0. + &0135713672105995D0*Z(5))+(-0.01764072463999744D0*Z(4))+0.010940122 + &10519586D0*Z(3)+0.008812321197398072D0*Z(2)+0.0227345011107737D0*Z + &(1) + W(16)=1.019463911841327D0*Z(16)+(-0.2803531651057233D0*Z(15))+(-0. + &1165300508238904D0*Z(14))+(-0.1385343580686922D0*Z(13))+0.22647669 + &47290192D0*Z(12)+(-0.02434652144032987D0*Z(11))+(-0.04723268012114 + &625D0*Z(10))+(-0.03586220812223305D0*Z(9))+0.04932374658377151D0*Z + &(8)+0.00372306473653087D0*Z(7)+(-0.01219194009813166D0*Z(6))+(-0.0 + &07005540882865317D0*Z(5))+0.002957434991769087D0*Z(4)+0.0021069739 + &00813502D0*Z(3)+0.001747395874954051D0*Z(2)+0.01707454969713436D0* + &Z(1) + RETURN + END \end{verbatim} -\noOutputXtc{ -To turn IBM Script Formula Format output formatting off, issue this. -}{ -\spadpaste{)set output script off} -} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugInOutFortranTitle}{FORTRAN Format} -\newcommand{\ugInOutFortranNumber}{4.7.} - -@ -\subsection{4.7. FORTRAN Format} -\label{ugInOutFortranPage} -\index{pages!ugInOutFortranPage!ug04.ht} -\index{ug04.ht!pages!ugInOutFortranPage} -\index{ugInOutFortranPage!ug04.ht!pages} -<>= -\begin{page}{ugInOutFortranPage}{4.7. FORTRAN Format} -\beginscroll - -In addition to turning FORTRAN output on and off and stating where the -output should be placed, there are many options that control the -appearance of the generated code. -In this section we describe some of the basic options. -Issue \spadcmd{)set fortran} to see a full list with their current -settings. - -The output FORTRAN expression usually begins in column 7. -If the expression needs more than one line, the ampersand character -\spadSyntax{\&} is used in column 6. -Since some versions of FORTRAN have restrictions on the number of lines -per statement, Axiom breaks long expressions into segments with -a maximum of 1320 characters (20 lines of 66 characters) per segment. -If you want to change this, say, to 660 characters, -issue the system command -\spadcmd{)set fortran explength 660}. -You can turn off the line breaking by issuing -\spadcmd{)set fortran segment off}. -Various code optimization levels are available. -% -\noOutputXtc{ -FORTRAN output is produced after you issue this. -}{ -\spadpaste{)set output fortran on \bound{forton}} -} -\noOutputXtc{ -For the initial examples, we set the optimization level to 0, which is the -lowest level. -}{ -\spadpaste{)set fortran optlevel 0 \bound{opt0}\free{forton}} -} -\noOutputXtc{ -The output is usually in columns 7 through 72, although fewer columns -are used in the following examples so that the output -fits nicely on the page. -}{ -\spadpaste{)set fortran fortlength 60} -} -\xtc{ -By default, the output goes to the screen and is displayed -before the standard Axiom two-dimensional output. -In this example, an -assignment to the variable \spad{R1} was generated because this is -the result of step 1. -}{ -\spadpaste{(x+y)**3 \free{opt0}} -} -\xtc{ -Here is an example that illustrates the line breaking. -}{ -\spadpaste{(x+y+z)**3 \free{opt0}} -} - -Note in the above examples that integers are generally converted to -floating point numbers, except in exponents. -This is the default behavior but can be turned off by issuing -\spadcmd{)set fortran ints2floats off}. -The rules governing when the conversion is done are: -\indent{4} -\beginitems -\item[1. ] If an integer is an exponent, convert it to a floating point -number if it is greater than 32767 in absolute value, otherwise leave it -as an integer. -\item[2. ] Convert all other integers in an expression to floating -point numbers. -\enditems -\indent{0} -These rules only govern integers in expressions. -Numbers generated by Axiom for \spad{DIMENSION} statements are also -integers. - -To set the type of generated FORTRAN data, -use one of the following: +\subsection{Asp29 Example Code} +\label{Asp29ExampleCode} +\index{pages!Asp29ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp29ExampleCode} +\index{Asp29ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp29ExampleCode}{Asp29 Example Code} \begin{verbatim} -)set fortran defaulttype REAL -)set fortran defaulttype INTEGER -)set fortran defaulttype COMPLEX -)set fortran defaulttype LOGICAL -)set fortran defaulttype CHARACTER + SUBROUTINE MONIT(ISTATE,NEXTIT,NEVALS,NEVECS,K,F,D) + DOUBLE PRECISION D(K),F(K) + INTEGER K,NEXTIT,NEVALS,NVECS,ISTATE + CALL F02FJZ(ISTATE,NEXTIT,NEVALS,NEVECS,K,F,D) + RETURN + END \end{verbatim} - -\xtc{ -When temporaries are created, they are given a default type of -{\tt REAL.} -Also, the {\tt REAL} versions of functions are used by default. -}{ -\spadpaste{sin(x) \free{opt1}} -} -\noOutputXtc{ -At optimization level 1, Axiom removes common subexpressions. -}{ -\spadpaste{)set fortran optlevel 1 \bound{opt1}\free{forton}} -} -\xtc{ -}{ -\spadpaste{(x+y+z)**3 \free{opt1}} -} -\noOutputXtc{ -This changes the precision to {\tt DOUBLE}. -Substitute \spad{single} for \spad{double} -to return to single precision. -}{ -\spadpaste{)set fortran precision double \free{opt1}\bound{double1}} -} -\xtc{ -Complex constants display the precision. -}{ -\spadpaste{2.3 + 5.6*\%i \free{double1}} -} -\xtc{ -The function names that Axiom generates depend on the chosen -precision. -}{ -\spadpaste{sin \%e \free{double1}} -} -\noOutputXtc{ -Reset the precision to \spad{single} and look at these two -examples again. -}{ -\spadpaste{)set fortran precision single \free{opt1}\bound{single1}} -} -\xtc{ -}{ -\spadpaste{2.3 + 5.6*\%i \free{single1}} -} -\xtc{ -}{ -\spadpaste{sin \%e \free{single1}} -} -\xtc{ -Expressions that look like lists, streams, sets or matrices cause -array code to be generated. -}{ -\spadpaste{[x+1,y+1,z+1] \free{opt1}} -} -\xtc{ -A temporary variable is generated to be the name of the array. -This may have to be changed in your particular application. -}{ -\spadpaste{set[2,3,4,3,5] \free{opt1}} -} -\xtc{ -By default, the starting index for generated FORTRAN arrays is \spad{0}. -}{ -\spadpaste{matrix [[2.3,9.7],[0.0,18.778]] \free{opt1}} -} -\noOutputXtc{ -To change the starting index for generated FORTRAN arrays to be \spad{1}, -issue this. -This value can only be \spad{0} or \spad{1}. -}{ -\spadpaste{)set fortran startindex 1 \free{opt1}\bound{start1}} -} -\xtc{ -Look at the code generated for the matrix again. -}{ -\spadpaste{matrix [[2.3,9.7],[0.0,18.778]] \free{start1}} -} -\endscroll -\autobuttons \end{page} -@ -\section{ug05.ht} -<>= -\newcommand{\ugLangTitle}{Introduction to the Axiom Interactive Language} -\newcommand{\ugLangNumber}{5.} @ -\subsection{5. Introduction to the Axiom Interactive Language} -\label{ugLangPage} -\begin{itemize} -\item ugLangAssignPage \ref{ugLangAssignPage} on -page~\pageref{ugLangAssignPage} -\item ugLangBlocksPage \ref{ugLangBlocksPage} on -page~\pageref{ugLangBlocksPage} -\item ugLangIfPage \ref{ugLangIfPage} on -page~\pageref{ugLangIfPage} -\item ugLangLoopsPage \ref{ugLangLoopsPage} on -page~\pageref{ugLangLoopsPage} -\item ugLangItsPage \ref{ugLangItsPage} on -page~\pageref{ugLangItsPage} -\item ugLangStreamsPrimesPage \ref{ugLangStreamsPrimesPage} on -page~\pageref{ugLangStreamsPrimesPage} -\end{itemize} -\index{pages!ugLangPage!ug05.ht} -\index{ug05.ht!pages!ugLangPage} -\index{ugLangPage!ug05.ht!pages} -<>= -\begin{page}{ugLangPage}{5. Introduction to the Axiom Interactive Language} -\beginscroll - -In this chapter we look at some of the basic components of the -Axiom language that you can use interactively. -We show how to create a \spadgloss{block} of expressions, -how to form loops and list iterations, how to modify the sequential -evaluation of a block and how to use {\tt if-then-else} to -evaluate parts of your program conditionally. -We suggest you first read the boxed material in each section and then -proceed to a more thorough reading of the chapter. - -\beginmenu - \menudownlink{{5.1. Immediate and Delayed Assignments}}{ugLangAssignPage} - \menudownlink{{5.2. Blocks}}{ugLangBlocksPage} - \menudownlink{{5.3. if-then-else}}{ugLangIfPage} - \menudownlink{{5.4. Loops}}{ugLangLoopsPage} - \menudownlink{{5.5. Creating Lists and Streams with Iterators}} -{ugLangItsPage} - \menudownlink{{5.6. An Example: Streams of Primes}} -{ugLangStreamsPrimesPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangAssignTitle}{Immediate and Delayed Assignments} -\newcommand{\ugLangAssignNumber}{5.1.} - -@ -\subsection{5.1. Immediate and Delayed Assignments} -\label{ugLangAssignPage} -\begin{itemize} -\item ugUserDelayPage \ref{ugUserDelayPage} on -page~\pageref{ugUserDelayPage} -\end{itemize} -\index{pages!ugLangAssignPage!ug05.ht} -\index{ug05.ht!pages!ugLangAssignPage} -\index{ugLangAssignPage!ug05.ht!pages} -<>= -\begin{page}{ugLangAssignPage}{5.1. Immediate and Delayed Assignments} -\beginscroll - -A \spadgloss{variable} in Axiom refers to a value. -A variable has a name beginning with an uppercase or lowercase alphabetic -character, \axiomSyntax{\%}, or \axiomSyntax{!}. -Successive characters (if any) can be any of the above, digits, or -\axiomSyntax{?}. -Case is distinguished. -The following are all examples of valid, distinct variable names: +\subsection{Asp30 Example Code} +\label{Asp30ExampleCode} +\index{pages!Asp30ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp30ExampleCode} +\index{Asp30ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp30ExampleCode}{Asp30 Example Code} \begin{verbatim} -a tooBig? a1B2c3%!? -A %j numberOfPoints -beta6 %J numberofpoints + SUBROUTINE APROD(MODE,M,N,X,Y,RWORK,LRWORK,IWORK,LIWORK) + DOUBLE PRECISION X(N),Y(M),RWORK(LRWORK) + INTEGER M,N,LIWORK,IFAIL,LRWORK,IWORK(LIWORK),MODE + DOUBLE PRECISION A(5,5) + EXTERNAL F06PAF + A(1,1)=1.0D0 + A(1,2)=0.0D0 + A(1,3)=0.0D0 + A(1,4)=-1.0D0 + A(1,5)=0.0D0 + A(2,1)=0.0D0 + A(2,2)=1.0D0 + A(2,3)=0.0D0 + A(2,4)=0.0D0 + A(2,5)=-1.0D0 + A(3,1)=0.0D0 + A(3,2)=0.0D0 + A(3,3)=1.0D0 + A(3,4)=-1.0D0 + A(3,5)=0.0D0 + A(4,1)=-1.0D0 + A(4,2)=0.0D0 + A(4,3)=-1.0D0 + A(4,4)=4.0D0 + A(4,5)=-1.0D0 + A(5,1)=0.0D0 + A(5,2)=-1.0D0 + A(5,3)=0.0D0 + A(5,4)=-1.0D0 + A(5,5)=4.0D0 + IF(MODE.EQ.1)THEN + CALL F06PAF('N',M,N,1.0D0,A,M,X,1,1.0D0,Y,1) + ELSEIF(MODE.EQ.2)THEN + CALL F06PAF('T',M,N,1.0D0,A,M,Y,1,1.0D0,X,1) + ENDIF + RETURN + END \end{verbatim} - -The \axiomSyntax{:=} operator is the immediate \spadgloss{assignment} -operator. -Use it to associate a value with a variable. - -\beginImportant -The syntax for immediate assignment for a single variable is -\centerline{{{\it variable} \axiom{:=} {\it expression}}} -The value returned by an immediate assignment is the value of {\it expression}. -\endImportant - -\xtc{ -The right-hand side of the expression is evaluated, -yielding \axiom{1}. This value is then assigned to \axiom{a}. -}{ -\spadpaste{a := 1 \bound{a}} -} -\xtc{ -The right-hand side of the expression is evaluated, -yielding \axiom{1}. This value is then assigned to \axiom{b}. -Thus \axiom{a} and \axiom{b} both have the value \axiom{1} after the sequence -of assignments. -}{ -\spadpaste{b := a \free{a}\bound{b}} -} -\xtc{ -What is the value of \axiom{b} if \axiom{a} is -assigned the value \axiom{2}? -}{ -\spadpaste{a := 2 \bound{a2}} -} -\xtc{ -As you see, the value of \axiom{b} is left unchanged. -}{ -\spadpaste{b \free{b}} -} -This is what we mean when we say this kind of assignment is -{\it immediate}; -\axiom{b} has no dependency on \axiom{a} after the initial assignment. -This is the usual notion of assignment found in programming -languages such as C, -PASCAL -and FORTRAN. - -Axiom provides delayed assignment with \axiomSyntax{==}. -This implements a -delayed evaluation of the right-hand side and dependency -checking. - -\beginImportant -The syntax for delayed assignment is -\centerline{{{\it variable} \axiom{==} {\it expression}}} -The value returned by a delayed assignment is \void{}. -\endImportant - -\xtc{ -Using \axiom{a} and \axiom{b} as above, these are the corresponding delayed -assignments. -}{ -\spadpaste{a == 1 \bound{ad}} -} -\xtc{ -}{ -\spadpaste{b == a \free{ad}\bound{bd}} -} -\xtc{ -The right-hand side of each delayed assignment -is left unevaluated until the -variables on the left-hand sides are evaluated. -Therefore this evaluation and \ldots -}{ -\spadpaste{a \free{ad}} -} -\xtc{ -this evaluation seem the same as before. -}{ -\spadpaste{b \free{bd}} -} -\xtc{ -If we change \axiom{a} to \axiom{2} -}{ -\spadpaste{a == 2 \bound{ad2}} -} -\xtc{ -then -\axiom{a} evaluates to \axiom{2}, as expected, but -}{ -\spadpaste{a \free{ad2}} -} -\xtc{ -the value of \axiom{b} reflects the change to \axiom{a}. -}{ -\spadpaste{b \free{bd ad2}} -} - -It is possible to set several variables at the same time -by using -a \spadgloss{tuple} of variables and a tuple of expressions.\footnote{A -\spadgloss{tuple} is a collection of things separated by commas, often -surrounded by parentheses.} - -\beginImportant -The syntax for multiple immediate assignments is -\centerline{{{\tt ( \subscriptIt{var}{1}, \subscriptIt{var}{2}, \ldots, \subscriptIt{var}{N} ) := ( \subscriptIt{expr}{1}, \subscriptIt{expr}{2}, \ldots, \subscriptIt{expr}{N} ) }}} -The value returned by an immediate assignment is the value of -\subscriptIt{expr}{N}. -\endImportant - -\xtc{ -This sets \axiom{x} to \axiom{1} and \axiom{y} to \axiom{2}. -}{ -\spadpaste{(x,y) := (1,2) \bound{x}\bound{y}} -} -Multiple immediate assigments are parallel in the sense that the -expressions on the right are all evaluated before any assignments -on the left are made. -However, the order of evaluation of these expressions is undefined. -\xtc{ -You can use multiple immediate assignment to swap the -values held by variables. -}{ -\spadpaste{(x,y) := (y,x) \free{x y}\bound{swap}} -} -\xtc{ -\axiom{x} has the previous value of \axiom{y}. -}{ -\spadpaste{x \free{swap}} -} -\xtc{ -\axiom{y} has the previous value of \axiom{x}. -}{ -\spadpaste{y \free{swap}} -} - -There is no syntactic form for multiple delayed assignments. -See the discussion in -\downlink{``\ugUserDelayTitle''}{ugUserDelayPage} -in Section \ugUserDelayNumber\ignore{ugUserDelay} -about how Axiom differentiates between delayed assignments and -user functions of no arguments. - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugLangBlocksTitle}{Blocks} -\newcommand{\ugLangBlocksNumber}{5.2.} - -@ -\subsection{5.2. Blocks} -\label{ugLangBlocksPage} -\begin{itemize} -\item ugLangIfPage \ref{ugLangIfPage} on -page~\pageref{ugLangIfPage} -\end{itemize} -\index{pages!ugLangBlocksPage!ug05.ht} -\index{ug05.ht!pages!ugLangBlocksPage} -\index{ugLangBlocksPage!ug05.ht!pages} -<>= -\begin{page}{ugLangBlocksPage}{5.2. Blocks} -\beginscroll - -%% -%% We should handle tabs in pile correctly but so far we do not. -%% - -A \spadgloss{block} is a sequence of expressions evaluated -in the order that they appear, except as modified by control expressions -such as \axiom{break}, -\spadkey{break} -\axiom{return}, -\spadkey{return} -\axiom{iterate} and -\spadkey{iterate} -\axiom{if-then-else} constructions. -The value of a block is the value of the expression last evaluated -in the block. - -To leave a block early, use \axiomSyntax{=>}. -For example, \axiom{i < 0 => x}. -The expression before the \axiomSyntax{=>} must evaluate to -\axiom{true} or \axiom{false}. -The expression following the \axiomSyntax{=>} is the return value -for the block. - -A block can be constructed in two ways: -\indent{4} -\beginitems -\item[1. ] the expressions can be separated by semicolons -and the resulting expression surrounded by parentheses, and -\item[2. ] the expressions can be written on succeeding lines with each line -indented the same number of spaces (which must be greater than zero). -A block entered in this form is -called a \spadgloss{pile}. -\enditems -\indent{0} -Only the first form is available if you are entering expressions -directly to Axiom. -Both forms are available in {\bf .input} files. - -\beginImportant -The syntax for a simple block of expressions entered interactively is -\centerline{{{\tt ( \subscriptIt{expression}{1}; \subscriptIt{expression}{2}; \ldots; \subscriptIt{expression}{N} )}}} -The value returned by a block is the value of an -\axiomSyntax{=>} expression, or \subscriptIt{expression}{N} -if no \axiomSyntax{=>} is encountered. -\endImportant - -In {\bf .input} files, blocks can also be written using -\spadglossSee{piles}{pile}. -The examples throughout this book are assumed to come from {\bf .input} files. - -\xtc{ -In this example, we assign a rational number to \axiom{a} using a block -consisting of three expressions. -This block is written as a pile. -Each expression in the pile has the same indentation, in this case two -spaces to the right of the first line. -}{ -\begin{spadsrc} -a := - i := gcd(234,672) - i := 3*i**5 - i + 1 - 1 / i -\end{spadsrc} -} -\xtc{ -Here is the same block written on one line. -This is how you are required to enter it at the input prompt. -}{ -\spadpaste{a := (i := gcd(234,672); i := 3*i**5 - i + 1; 1 / i)} -} -\xtc{ -Blocks can be used to put several expressions on one line. -The value returned is that of the last expression. -}{ -\spadpaste{(a := 1; b := 2; c := 3; [a,b,c]) \bound{a b c}} -} - -Axiom gives you two ways of writing a block and the -preferred way in an {\bf .input} file is to use a pile. -Roughly speaking, a pile is -a block whose constituent expressions are indented the same amount. -You begin a pile by starting a new line for the first expression, -indenting it to the right of the previous line. -You then enter the second expression on a new line, vertically aligning -it with the first line. And so on. -If you need to enter an inner pile, further indent its lines to the right -of the outer pile. -Axiom knows where a pile ends. -It ends when a subsequent line is indented to the left of the pile or -the end of the file. - -\xtc{ -Blocks can be used to perform several steps before an assignment -(immediate or delayed) is made. -}{ -\begin{spadsrc}[\free{a b}] -d := - c := a**2 + b**2 - sqrt(c * 1.3) -\end{spadsrc} -} -\xtc{ -Blocks can be used in the arguments to functions. -(Here \axiom{h} is assigned \axiom{2.1 + 3.5}.) -}{ -\begin{spadsrc}[\bound{h}] -h := 2.1 + - 1.0 - 3.5 -\end{spadsrc} -} -\xtc{ -Here the second argument to \axiomFun{eval} is \axiom{x = z}, where -the value of \axiom{z} is computed in the first line of the block -starting on the second line. -}{ -\begin{spadsrc} -eval(x**2 - x*y**2, - z := %pi/2.0 - exp(4.1) - x = z - ) -\end{spadsrc} -} -\xtc{ -Blocks can be used in the clauses of \axiom{if-then-else} -expressions (see \downlink{``\ugLangIfTitle''}{ugLangIfPage} -in Section \ugLangIfNumber\ignore{ugLangIf}). -}{ -\spadpaste{if h > 3.1 then 1.0 else (z := cos(h); max(z,0.5)) \free{h}} -} -\xtc{ -This is the pile version of the last block. -}{ -\begin{spadsrc}[\free{h}] -if h > 3.1 then - 1.0 - else - z := cos(h) - max(z,0.5) -\end{spadsrc} -} -\xtc{ -Blocks can be nested. -}{ -\spadpaste{a := (b := factorial(12); c := (d := eulerPhi(22); factorial(d));b+c)} -} -\xtc{ -This is the pile version of the last block. -}{ -\begin{spadsrc} -a := - b := factorial(12) - c := - d := eulerPhi(22) - factorial(d) - b+c -\end{spadsrc} -} - -\xtc{ -Since \axiom{c + d} does equal \axiom{3628855}, \axiom{a} has the value -of \axiom{c} and the last line is never evaluated. -}{ -\begin{spadsrc} -a := - c := factorial 10 - d := fibonacci 10 - c + d = 3628855 => c - d -\end{spadsrc} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangIfTitle}{if-then-else} -\newcommand{\ugLangIfNumber}{5.3.} - -@ -\subsection{5.3. if-then-else} -\label{ugLangIfPage} -\begin{itemize} -\item ugTypesResolvePage \ref{ugTypesResolvePage} on -page~\pageref{ugTypesResolvePage} -\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on -page~\pageref{ugTypesPkgCallPage} -\end{itemize} -\index{pages!ugLangIfPage!ug05.ht} -\index{ug05.ht!pages!ugLangIfPage} -\index{ugLangIfPage!ug05.ht!pages} -<>= -\begin{page}{ugLangIfPage}{5.3. if-then-else} -\beginscroll - -Like many other programming languages, Axiom uses the three -keywords \spadkey{if} \axiom{if, then} \spadkey{then} and \axiom{else} -\spadkey{else} to form -conditional expressions. -The \axiom{else} part of the conditional is optional. -The expression between the \axiom{if} and \axiom{then} keywords -is a -\spadgloss{predicate}: an expression that evaluates to or is convertible to -either {\tt true} or {\tt false}, that is, -a \axiomType{Boolean}. - -\beginImportant -The syntax for conditional expressions is -\centerline{{{\tt if {\it predicate} then \subscriptIt{expression}{1} else \subscriptIt{expression}{2}}}} -where the \axiom{else} \subscriptIt{\it expression}{2} part is optional. -The value returned from a conditional expression is -\subscriptIt{\it expression}{1} if the predicate evaluates to \axiom{true} -and \subscriptIt{\it expression}{2} otherwise. -If no \axiom{else} clause is given, the value is always \void{}. -\endImportant - -An \axiom{if-then-else} expression always returns a value. -If the -\axiom{else} clause is missing then the entire expression returns -\void{}. -If both clauses are present, the type of the value returned by \axiom{if} -is obtained by resolving the types of the values of the two clauses. -See \downlink{``\ugTypesResolveTitle''}{ugTypesResolvePage} -in Section \ugTypesResolveNumber\ignore{ugTypesResolve} -for more information. - -The predicate must evaluate to, or be convertible to, an object of type -\axiomType{Boolean}: {\tt true} or {\tt false}. -By default, the equal sign \spadopFrom{=}{Equation} creates -an equation. -\xtc{ -This is an equation. -In particular, it is an object of type \axiomType{Equation Polynomial Integer}. -}{ -\spadpaste{x + 1 = y} -} -However, for predicates in \axiom{if} expressions, Axiom -places a default target type of \axiomType{Boolean} on the -predicate and equality testing is performed. -Thus you need not qualify the \axiomSyntax{=} in any way. -In other contexts you may need to tell Axiom that you want -to test for equality rather than create an equation. -In those cases, use \axiomSyntax{@} and a target type of -\axiomType{Boolean}. -See \downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} in Section -\ugTypesPkgCallNumber\ignore{ugTypesPkgCall} for more information. - -The compound symbol meaning ``not equal'' in Axiom is -``\texht{$\sim =$}{\axiom{~=}}''. -This can be used directly without a package call or a target specification. -The expression -\axiom{a} \texht{$\sim =$}{\axiom{~=}} \axiom{b} is directly translated into -\axiom{not (a = b)}. - -Many other functions have return values of type \axiomType{Boolean}. -These include \axiom{<}, \axiom{<=}, \axiom{>}, -\axiom{>=}, \texht{$\sim =$}{\axiom{~=}} and \axiom{member?}. -By convention, operations with names ending in \axiomSyntax{?} -return \axiomType{Boolean} values. - -The usual rules for piles are suspended for conditional expressions. -In {\bf .input} files, the \axiom{then} and -\axiom{else} keywords can begin in the same column as the corresponding -\axiom{if} but may also appear to the right. -Each of the following styles of writing \axiom{if-then-else} -expressions is acceptable: -\begin{verbatim} -if i>0 then output("positive") else output("nonpositive") - -if i > 0 then output("positive") - else output("nonpositive") - -if i > 0 then output("positive") -else output("nonpositive") - -if i > 0 -then output("positive") -else output("nonpositive") - -if i > 0 - then output("positive") - else output("nonpositive") -\end{verbatim} - -A block can follow the \axiom{then} or \axiom{else} keywords. -In the following two assignments to \axiom{a}, -the \axiom{then} and \axiom{else} -clauses each are followed by two-line piles. -The value returned in each is the value of the second line. - -\begin{verbatim} -a := - if i > 0 then - j := sin(i * pi()) - exp(j + 1/j) - else - j := cos(i * 0.5 * pi()) - log(abs(j)**5 + 1) - -a := - if i > 0 - then - j := sin(i * pi()) - exp(j + 1/j) - else - j := cos(i * 0.5 * pi()) - log(abs(j)**5 + 1) -\end{verbatim} -These are both equivalent to the following: +\subsection{Asp31 Example Code} +\label{Asp31ExampleCode} +\index{pages!Asp31ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp31ExampleCode} +\index{Asp31ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp31ExampleCode}{Asp31 Example Code} \begin{verbatim} -a := - if i > 0 then (j := sin(i * pi()); exp(j + 1/j)) - else (j := cos(i * 0.5 * pi()); log(abs(j)**5 + 1)) + SUBROUTINE PEDERV(X,Y,PW) + DOUBLE PRECISION X,Y(*) + DOUBLE PRECISION PW(3,3) + PW(1,1)=-0.03999999999999999D0 + PW(1,2)=10000.0D0*Y(3) + PW(1,3)=10000.0D0*Y(2) + PW(2,1)=0.03999999999999999D0 + PW(2,2)=(-10000.0D0*Y(3))+(-60000000.0D0*Y(2)) + PW(2,3)=-10000.0D0*Y(2) + PW(3,1)=0.0D0 + PW(3,2)=60000000.0D0*Y(2) + PW(3,3)=0.0D0 + RETURN + END \end{verbatim} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangLoopsTitle}{Loops} -\newcommand{\ugLangLoopsNumber}{5.4.} - -@ -\subsection{5.4. Loops} -\label{ugLangLoopsPage} -\begin{itemize} -\item ugLangLoopsCompIntPage \ref{ugLangLoopsCompIntPage} on -page~\pageref{ugLangLoopsCompIntPage} -\item ugLangLoopsReturnPage \ref{ugLangLoopsReturnPage} on -page~\pageref{ugLangLoopsReturnPage} -\item ugLangLoopsBreakPage \ref{ugLangLoopsBreakPage} on -page~\pageref{ugLangLoopsBreakPage} -\item ugLangLoopsBreakVsPage \ref{ugLangLoopsBreakVsPage} on -page~\pageref{ugLangLoopsBreakVsPage} -\item ugLangLoopsBreakMorePage \ref{ugLangLoopsBreakMorePage} on -page~\pageref{ugLangLoopsBreakMorePage} -\item ugLangLoopsIteratePage \ref{ugLangLoopsIteratePage} on -page~\pageref{ugLangLoopsIteratePage} -\item ugLangLoopsWhilePage \ref{ugLangLoopsWhilePage} on -page~\pageref{ugLangLoopsWhilePage} -\item ugLangLoopsForInPage \ref{ugLangLoopsForInPage} on -page~\pageref{ugLangLoopsForInPage} -\item ugLangLoopsForInNMPage \ref{ugLangLoopsForInNMPage} on -page~\pageref{ugLangLoopsForInNMPage} -\item ugLangLoopsForInNMSPage \ref{ugLangLoopsForInNMSPage} on -page~\pageref{ugLangLoopsForInNMSPage} -\item ugLangLoopsForInNPage \ref{ugLangLoopsForInNPage} on -page~\pageref{ugLangLoopsForInNPage} -\item ugLangLoopsForInXLPage \ref{ugLangLoopsForInXLPage} on -page~\pageref{ugLangLoopsForInXLPage} -\item ugLangLoopsForInPredPage \ref{ugLangLoopsForInPredPage} on -page~\pageref{ugLangLoopsForInPredPage} -\item ugLangLoopsParPage \ref{ugLangLoopsParPage} on -page~\pageref{ugLangLoopsParPage} -\end{itemize} -\index{pages!ugLangLoopsPage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsPage} -\index{ugLangLoopsPage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsPage}{5.4. Loops} -\beginscroll - -A \spadgloss{loop} is an expression that contains another expression, -called the {\it loop body}, which is to be evaluated zero or more -times. -All loops contain the \axiom{repeat} keyword and return \void{}. -Loops can contain inner loops to any depth. - -\beginImportant -The most basic loop is of the form -\centerline{{\axiom{repeat} {\it loopBody}}} -Unless {\it loopBody} contains a \axiom{break} or \axiom{return} expression, -the loop repeats forever. -The value returned by the loop is \void{}. -\endImportant - -\beginmenu - \menudownlink{{5.4.1. Compiling vs. Interpreting Loops}} -{ugLangLoopsCompIntPage} - \menudownlink{{5.4.2. return in Loops}}{ugLangLoopsReturnPage} - \menudownlink{{5.4.3. break in Loops}}{ugLangLoopsBreakPage} - \menudownlink{{5.4.4. break vs. {\tt =>} in Loop Bodies}} -{ugLangLoopsBreakVsPage} - \menudownlink{{5.4.5. More Examples of break}}{ugLangLoopsBreakMorePage} - \menudownlink{{5.4.6. iterate in Loops}}{ugLangLoopsIteratePage} - \menudownlink{{5.4.7. while Loops}}{ugLangLoopsWhilePage} - \menudownlink{{5.4.8. for Loops}}{ugLangLoopsForInPage} - \menudownlink{{5.4.9. for i in n..m repeat}}{ugLangLoopsForInNMPage} - \menudownlink{{5.4.10. for i in n..m by s repeat}}{ugLangLoopsForInNMSPage} - \menudownlink{{5.4.11. for i in n.. repeat}}{ugLangLoopsForInNPage} - \menudownlink{{5.4.12. for x in l repeat}}{ugLangLoopsForInXLPage} - \menudownlink{{5.4.13. ``Such that'' Predicates}}{ugLangLoopsForInPredPage} - \menudownlink{{5.4.14. Parallel Iteration}}{ugLangLoopsParPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangLoopsCompIntTitle}{Compiling vs. Interpreting Loops} -\newcommand{\ugLangLoopsCompIntNumber}{5.4.1.} - -@ -\subsection{5.4.1. Compiling vs. Interpreting Loops} -\label{ugLangLoopsCompIntPage} -\begin{itemize} -\item ugUserCompIntPage \ref{ugUserCompIntPage} on -page~\pageref{ugUserCompIntPage} -\end{itemize} -\index{pages!ugLangLoopsCompIntPage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsCompIntPage} -\index{ugLangLoopsCompIntPage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsCompIntPage}{5.4.1. Compiling vs. Interpreting Loops} -\beginscroll - -Axiom tries to determine completely the type of every -object in a loop and then to translate the loop body to LISP or even to -machine code. -This translation is called \spadglossSee{compilation}{compiler}. - -If Axiom decides that it cannot compile the loop, it issues a -message stating the problem and then the following message: -% -\centerline{{{\bf We will attempt to step through and interpret the code.}}} -% -It is still possible that Axiom can evaluate the loop but in -\spadgloss{interpret-code mode}. -See \downlink{``\ugUserCompIntTitle''}{ugUserCompIntPage} -in Section \ugUserCompIntNumber\ignore{ugUserCompInt} where -this is discussed in terms -of compiling versus interpreting functions. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangLoopsReturnTitle}{return in Loops} -\newcommand{\ugLangLoopsReturnNumber}{5.4.2.} - -@ -\subsection{5.4.2. return in Loops} -\label{ugLangLoopsReturnPage} -\begin{itemize} -\item ugUserBlocksPage \ref{ugUserBlocksPage} on -page~\pageref{ugUserBlocksPage} -\end{itemize} -\index{pages!ugLangLoopsReturnPage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsReturnPage} -\index{ugLangLoopsReturnPage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsReturnPage}{5.4.2. return in Loops} -\beginscroll - -A \axiom{return} expression is used to exit a function with -a particular value. -In particular, if a \axiom{return} is in a loop within the -\spadkey{return} -function, the loop is terminated whenever the \axiom{return} -is evaluated. -%> This is a bug! The compiler should never accept allow -%> Void to be the return type of a function when it has to use -%> resolve to determine it. -\xtc{ -Suppose we start with this. -}{ -\begin{spadsrc}[\bound{f}] -f() == - i := 1 - repeat - if factorial(i) > 1000 then return i - i := i + 1 -\end{spadsrc} -} -\xtc{ -When \axiom{factorial(i)} is big enough, control passes from -inside the loop all the way outside the function, returning the -value of \axiom{i} (or so we think). -}{ -\spadpaste{f() \free{f}} -} - -What went wrong? -Isn't it obvious that this function should return an integer? -Well, Axiom makes no attempt to analyze the structure of a -loop to determine if it always returns a value because, in -general, this is impossible. -So Axiom has this simple rule: the type of the function is -determined by the type of its body, in this case a block. -The normal value of a block is the value of its last expression, -in this case, a loop. -And the value of every loop is \void{}! -So the return type of \userfun{f} is \axiomType{Void}. - -There are two ways to fix this. -The best way is for you to tell Axiom what the return type -of \axiom{f} is. -You do this by giving \axiom{f} a declaration \axiom{f: () -> -Integer} prior to calling for its value. -This tells Axiom: ``trust me---an integer is returned.'' -We'll explain more about this in the next chapter. -Another clumsy way is to add a dummy expression as follows. - -\xtc{ -Since we want an integer, let's stick in a dummy final expression that is -an integer and will never be evaluated. -}{ -\begin{spadsrc}[\bound{f1}] -f() == - i := 1 - repeat - if factorial(i) > 1000 then return i - i := i + 1 - 0 -\end{spadsrc} -} -\xtc{ -When we try \userfun{f} again we get what we wanted. -See -\downlink{``\ugUserBlocksTitle''}{ugUserBlocksPage} -in Section \ugUserBlocksNumber\ignore{ugUserBlocks} -for more information. -}{ -\spadpaste{f() \free{f1}} -} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugLangLoopsBreakTitle}{break in Loops} -\newcommand{\ugLangLoopsBreakNumber}{5.4.3.} - -@ -\subsection{5.4.3. break in Loops} -\label{ugLangLoopsBreakPage} -\begin{itemize} -\item ugLangLoopsReturnPage \ref{ugLangLoopsReturnPage} on -page~\pageref{ugLangLoopsReturnPage} -\end{itemize} -\index{pages!ugLangLoopsBreakPage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsBreakPage} -\index{ugLangLoopsBreakPage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsBreakPage}{5.4.3. break in Loops} -\beginscroll - -The \axiom{break} keyword is often more useful -\spadkey{break} -in terminating -a loop. -%> and more in keeping with the ideas of structured programming. -A \axiom{break} causes control to transfer to the expression -immediately following the loop. -As loops always return \void{}, -you cannot return a value with \axiom{break}. -That is, \axiom{break} takes no argument. - -\xtc{ -This example is a modification of the last example in -\texht{the previous section}{ -\downlink{``\ugLangLoopsReturnTitle''}{ugLangLoopsReturnPage} -in Section \ugLangLoopsReturnNumber\ignore{ugLangLoopsReturn}}. -Instead of using \axiom{return}, we'll use \axiom{break}. -}{ -\begin{spadsrc}[\bound{f1}] -f() == - i := 1 - repeat - if factorial(i) > 1000 then break - i := i + 1 - i -\end{spadsrc} -} -\xtc{ -The loop terminates when \axiom{factorial(i)} gets big enough, -the last line of the function evaluates to the corresponding ``good'' -value of \axiom{i}, and the function terminates, returning that value. -}{ -\spadpaste{f() \free{f1}} -} -\xtc{ -You can only use \axiom{break} to terminate the evaluation of one loop. -Let's consider a loop within a loop, that is, a loop with a nested loop. -First, we initialize two counter variables. -}{ -\spadpaste{(i,j) := (1, 1) \bound{i}\bound{j}} -} -\xtc{ -Nested loops must have multiple \axiom{break} -expressions at the appropriate nesting level. -How would you rewrite this so \axiom{(i + j) > 10} is only evaluated once? -}{ -\begin{spadsrc}[\free{i j}] -repeat - repeat - if (i + j) > 10 then break - j := j + 1 - if (i + j) > 10 then break - i := i + 1 -\end{spadsrc} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangLoopsBreakVsTitle}{break vs. {\tt =>} in Loop Bodies} -\newcommand{\ugLangLoopsBreakVsNumber}{5.4.4.} - -@ -\subsection{5.4.4. break vs. {\tt =>} in Loop Bodies} -\label{ugLangLoopsBreakVsPage} -\index{pages!ugLangLoopsBreakVsPage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsBreakVsPage} -\index{ugLangLoopsBreakVsPage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsBreakVsPage}{5.4.4. break vs. {\tt =>} in Loop Bodies} -\beginscroll - -Compare the following two loops: - +\subsection{Asp33 Example Code} +\label{Asp33ExampleCode} +\index{pages!Asp33ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp33ExampleCode} +\index{Asp33ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp33ExampleCode}{Asp33 Example Code} \begin{verbatim} -i := 1 i := 1 -repeat repeat - i := i + 1 i := i + 1 - i > 3 => i if i > 3 then break - output(i) output(i) + SUBROUTINE REPORT(X,V,JINT) + DOUBLE PRECISION V(3),X + INTEGER JINT + RETURN + END \end{verbatim} - -In the example on the left, the values -\mathOrSpad{2} and \mathOrSpad{3} for \axiom{i} are displayed -but then the \axiomSyntax{=>} does not allow control to reach the call to -\axiomFunFrom{output}{OutputForm} again. -The loop will not terminate -until you run out of space or interrupt the execution. -The variable \axiom{i} will continue to be incremented because -the \axiomSyntax{=>} only means to leave the {\it block,} not the loop. - -In the example on the right, -upon reaching \mathOrSpad{4}, the \axiom{break} will be -executed, and both the block and the loop will terminate. -This is one of the reasons why both \axiomSyntax{=>} and \axiom{break} are -provided. -Using a \axiom{while} clause (see below) with the \axiomSyntax{=>} -\spadkey{while} -lets you simulate the action of \axiom{break}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangLoopsBreakMoreTitle}{More Examples of break} -\newcommand{\ugLangLoopsBreakMoreNumber}{5.4.5.} - -@ -\subsection{5.4.5. More Examples of break} -\label{ugLangLoopsBreakMorePage} -\begin{itemize} -\item ugLangLoopsForInPage \ref{ugLangLoopsForInPage} on -page~\pageref{ugLangLoopsForInPage} -\end{itemize} -\index{pages!ugLangLoopsBreakMorePage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsBreakMorePage} -\index{ugLangLoopsBreakMorePage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsBreakMorePage}{5.4.5. More Examples of break} -\beginscroll - -Here we give four examples of \axiom{repeat} loops that -terminate when a value exceeds a given bound. - -\texht{\vskip 1pc}{} -\xtc{ -First, initialize \axiom{i} as the loop counter. -}{ -\spadpaste{i := 0 \bound{i}} -} -\xtc{ -Here is the first loop. -When the square of \axiom{i} exceeds \axiom{100}, the loop terminates. -}{ -\begin{spadsrc}[\free{i}\bound{i1}] -repeat - i := i + 1 - if i**2 > 100 then break -\end{spadsrc} -} -\xtc{ -Upon completion, \axiom{i} should have the value \axiom{11}. -}{ -\spadpaste{i \free{i1}} -} -% -% -\xtc{ -Do the same thing except use \axiomSyntax{=>} instead -an \axiom{if-then} expression. -}{ -\spadpaste{i := 0 \bound{i2}} -} -\xtc{ -}{ -\begin{spadsrc}[\free{i2}\bound{i3}] -repeat - i := i + 1 - i**2 > 100 => break -\end{spadsrc} -} -\xtc{ -}{ -\spadpaste{i \free{i3}} -} -% -% -\xtc{ -As a third example, we use a simple loop to compute \axiom{n!}. -}{ -\spadpaste{(n, i, f) := (100, 1, 1) \bound{n}\bound{i4}\bound{f}} -} -\xtc{ -Use \axiom{i} as the iteration variable and \axiom{f} -to compute the factorial. -}{ -\begin{spadsrc}[\bound{f1}\bound{i5}\free{f i4 n}] -repeat - if i > n then break - f := f * i - i := i + 1 -\end{spadsrc} -} -\xtc{ -Look at the value of \axiom{f}. -}{ -\spadpaste{f \free{f1}} -} -% -% -\xtc{ -Finally, we show an example of nested loops. -First define a four by four matrix. -}{ -\spadpaste{m := matrix [[21,37,53,14], [8,-24,22,-16], [2,10,15,14], [26,33,55,-13]] \bound{m2}} -} -\xtc{ -Next, set row counter \axiom{r} and column counter \axiom{c} to -\mathOrSpad{1}. -Note: if we were writing a function, these would all be local -variables rather than global workspace variables. -}{ -\spadpaste{(r, c) := (1, 1) \bound{r}\bound{c}} -} -\xtc{ -Also, let \axiom{lastrow} and -\axiom{lastcol} be the final row and column index. -}{ -\spadpaste{(lastrow, lastcol) := (nrows(m), ncols(m)) \bound{lastrow}\bound{lastcol}\free{m2}} -} -% -\xtc{ -Scan the rows looking for the first negative element. -We remark that you can reformulate this example in a better, more -concise form by using a \axiom{for} clause with \axiom{repeat}. -See -\downlink{``\ugLangLoopsForInTitle''}{ugLangLoopsForInPage} -in Section \ugLangLoopsForInNumber\ignore{ugLangLoopsForIn} -for more information. -}{ -\begin{spadsrc}[\free{m2 r c lastrow lastcol}] -repeat - if r > lastrow then break - c := 1 - repeat - if c > lastcol then break - if elt(m,r,c) < 0 then - output [r, c, elt(m,r,c)] - r := lastrow - break -- don't look any further - c := c + 1 - r := r + 1 -\end{spadsrc} -} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugLangLoopsIterateTitle}{iterate in Loops} -\newcommand{\ugLangLoopsIterateNumber}{5.4.6.} - -@ -\subsection{5.4.6. iterate in Loops} -\label{ugLangLoopsIteratePage} -\index{pages!ugLangLoopsIteratePage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsIteratePage} -\index{ugLangLoopsIteratePage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsIteratePage}{5.4.6. iterate in Loops} -\beginscroll - -Axiom provides an \axiom{iterate} expression that -\spadkey{iterate} -skips over the remainder of a loop body and starts the next loop iteration. -\xtc{ -We first initialize a counter. -}{ -\spadpaste{i := 0 \bound{i}} -} -\xtc{ -Display the even integers from \axiom{2} to \axiom{5}. -}{ -\begin{spadsrc}[\free{i}] -repeat - i := i + 1 - if i > 5 then break - if odd?(i) then iterate - output(i) -\end{spadsrc} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangLoopsWhileTitle}{while Loops} -\newcommand{\ugLangLoopsWhileNumber}{5.4.7.} - -@ -\subsection{5.4.7. while Loops} -\label{ugLangLoopsWhilePage} -\index{pages!ugLangLoopsWhilePage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsWhilePage} -\index{ugLangLoopsWhilePage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsWhilePage}{5.4.7. while Loops} -\beginscroll - -The \axiom{repeat} in a loop can be modified by adding one or -more \axiom{while} clauses. -\spadkey{while} -Each clause contains a \spadgloss{predicate} -immediately following the \axiom{while} keyword. -The predicate is tested {\it before} -the evaluation of the body of the loop. -The loop body is evaluated whenever the predicates in a \axiom{while} -clause are all \axiom{true}. - -\beginImportant -The syntax for a simple loop using \axiom{while} is -\centerline{{\axiom{while} {\it predicate} \axiom{repeat} {\it loopBody}}} -The {\it predicate} is evaluated before {\it loopBody} is evaluated. -A \axiom{while} loop terminates immediately when {\it predicate} -evaluates to \axiom{false} or when a \axiom{break} or \axiom{return} -expression is evaluated in {\it loopBody}. -The value returned by the loop is \void{}. -\endImportant - -\xtc{ -Here is a simple example of using \axiom{while} in a loop. -We first initialize the counter. -}{ -\spadpaste{i := 1 \bound{i}} -} -\xtc{ -The steps involved in computing this example are -(1) set \axiom{i} to \axiom{1}, (2) test the condition \axiom{i < 1} and -determine that it is not true, and (3) do not evaluate the -loop body and therefore do not display \axiom{"hello"}. -}{ -\begin{spadsrc}[\free{i}] -while i < 1 repeat - output "hello" - i := i + 1 -\end{spadsrc} -} -\xtc{ -If you have multiple predicates to be tested use the -logical \axiom{and} operation to separate them. -Axiom evaluates these predicates from left to right. -}{ -\spadpaste{(x, y) := (1, 1) \bound{x}\bound{y}} -} -\xtc{ -}{ -\begin{spadsrc}[\free{x y}] -while x < 4 and y < 10 repeat - output [x,y] - x := x + 1 - y := y + 2 -\end{spadsrc} -} -\xtc{ -A \axiom{break} expression can be included in a loop body to terminate a -loop even if the predicate in any \axiom{while} clauses are not \axiom{false}. -}{ -\spadpaste{(x, y) := (1, 1) \bound{x1}\bound{y1}} -} -\xtc{ -This loop has multiple \axiom{while} clauses and the loop terminates -before any one of their conditions evaluates to \axiom{false}. -}{ -\begin{spadsrc}[\free{x1 y1}] -while x < 4 while y < 10 repeat - if x + y > 7 then break - output [x,y] - x := x + 1 - y := y + 2 -\end{spadsrc} -} -\xtc{ -Here's a different version of the nested loops that looked -for the first negative element in a matrix. -}{ -\spadpaste{m := matrix [[21,37,53,14], [8,-24,22,-16], [2,10,15,14], [26,33,55,-13]] \bound{m2}} -} -\xtc{ -Initialized the row index to \axiom{1} and -get the number of rows and columns. -If we were writing a function, these would all be -local variables. -}{ -\spadpaste{r := 1 \bound{r}} -} -\xtc{ -}{ -\spadpaste{(lastrow, lastcol) := (nrows(m), ncols(m)) \bound{lastrow}\bound{lastcol}\free{m2}} -} -% -\xtc{ -Scan the rows looking for the first negative element. -}{ -\begin{spadsrc}[\free{m2 r lastrow lastcol}] -while r <= lastrow repeat - c := 1 -- index of first column - while c <= lastcol repeat - if elt(m,r,c) < 0 then - output [r, c, elt(m,r,c)] - r := lastrow - break -- don't look any further - c := c + 1 - r := r + 1 -\end{spadsrc} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangLoopsForInTitle}{for Loops} -\newcommand{\ugLangLoopsForInNumber}{5.4.8.} - -@ -\subsection{5.4.8. for Loops} -\label{ugLangLoopsForInPage} -\index{pages!ugLangLoopsForInPage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsForInPage} -\index{ugLangLoopsForInPage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsForInPage}{5.4.8. for Loops} -\beginscroll - -Axiom provides the \axiom{for} -\spadkey{for} -and \axiom{in} -\spadkey{in} -keywords in \axiom{repeat} loops, -allowing you to iterate across all -elements of a list, or to have a variable take on integral values -from a lower bound to an upper bound. -We shall refer to these modifying clauses of \axiom{repeat} loops as -\axiom{for} clauses. -These clauses can be present in addition to \axiom{while} clauses. -As with all other types of \axiom{repeat} loops, \axiom{break} can -\spadkey{break} -be used to prematurely terminate the evaluation of the loop. - -\beginImportant -The syntax for a simple loop using \axiom{for} is -\centerline{{\axiom{for} {\it iterator} \axiom{repeat} {\it loopBody}}} -The {\it iterator} has several forms. -Each form has an end test which is evaluated -before {\it loopBody} is evaluated. -A \axiom{for} loop terminates immediately when the end test -succeeds (evaluates to \axiom{true}) or when a \axiom{break} or \axiom{return} -expression is evaluated in {\it loopBody}. -The value returned by the loop is \void{}. -\endImportant - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangLoopsForInNMTitle}{for i in n..m repeat} -\newcommand{\ugLangLoopsForInNMNumber}{5.4.9.} - -@ -\subsection{5.4.9. for i in n..m repeat} -\label{ugLangLoopsForInNMPage} -\begin{itemize} -\item SegmentXmpPage \ref{SegmentXmpPage} on -page~\pageref{SegmentXmpPage} -\end{itemize} -\index{pages!ugLangLoopsForInNMPage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsForInNMPage} -\index{ugLangLoopsForInNMPage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsForInNMPage}{5.4.9. for i in n..m repeat} -\beginscroll - -If \axiom{for} -\spadkey{for} -is followed by a variable name, the \axiom{in} -\spadkey{in} -keyword and then an integer segment of the form \axiom{n..m}, -the end test for this loop is the predicate \axiom{i > m}. -The body of the loop is evaluated \axiom{m-n+1} times if this -number is greater than 0. -If this number is less than or equal to 0, the loop body is not evaluated -at all. - -The variable \axiom{i} has the value -\axiom{n, n+1, ..., m} for successive iterations -of the loop body. -The loop variable is a \spadgloss{local variable} -within the loop body: its value is not available outside the loop body -and its value and type within the loop body completely mask any outer -definition of a variable with the same name. - -% -\xtc{ -This loop prints the values of -\texht{${10}^3$, ${11}^3$, and $12^3$}{\axiom{10**3, 11**3, and 12**3}}: -}{ -\spadpaste{for i in 10..12 repeat output(i**3)} -} -% -\xtc{ -Here is a sample list. -}{ -\spadpaste{a := [1,2,3] \bound{a}} -} -\xtc{ -Iterate across this list, using \axiomSyntax{.} to access the elements of a list and -the \axiomFun{\#} operation to count its elements. -}{ -\spadpaste{for i in 1..\#a repeat output(a.i) \free{a}} -} -% -This type of iteration is applicable to anything that uses \axiomSyntax{.}. -You can also use it with functions that use indices to extract elements. -% -\xtc{ -Define \axiom{m} to be a matrix. -}{ -\spadpaste{m := matrix [[1,2],[4,3],[9,0]] \bound{m}} -} -\xtc{ -Display the rows of \axiom{m}. -}{ -\spadpaste{for i in 1..nrows(m) repeat output row(m,i) \free{m}} -} -% -You can use \axiom{iterate} with \axiom{for}-loops. -\spadkey{iterate} -\xtc{ -Display the even integers in a segment. -}{ -\begin{spadsrc} -for i in 1..5 repeat - if odd?(i) then iterate - output(i) -\end{spadsrc} -} - -See \downlink{`Segment'}{SegmentXmpPage}\ignore{Segment} -for more information about segments. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangLoopsForInNMSTitle}{for i in n..m by s repeat} -\newcommand{\ugLangLoopsForInNMSNumber}{5.4.10.} - -@ -\subsection{5.4.10. for i in n..m by s repeat} -\label{ugLangLoopsForInNMSPage} -\index{pages!ugLangLoopsForInNMSPage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsForInNMSPage} -\index{ugLangLoopsForInNMSPage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsForInNMSPage}{5.4.10. for i in n..m by s repeat} -\beginscroll - -By default, the difference between values taken on by a variable in loops -such as \axiom{for i in n..m repeat ...} is \mathOrSpad{1}. -It is possible to supply another, possibly negative, step value by using -the \axiom{by} -\spadkey{by} -keyword along with \axiom{for} and \axiom{in}. -Like the upper and lower bounds, the step value following the -\axiom{by} keyword must be an integer. -Note that the loop -\axiom{for i in 1..2 by 0 repeat output(i)} -will not terminate by itself, as the step value does not change the index -from its initial value of \mathOrSpad{1}. - -\xtc{ -This expression displays the odd integers between two bounds. -}{ -\spadpaste{for i in 1..5 by 2 repeat output(i)} -} -\xtc{ -Use this to display the numbers in reverse order. -}{ -\spadpaste{for i in 5..1 by -2 repeat output(i)} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangLoopsForInNTitle}{for i in n.. repeat} -\newcommand{\ugLangLoopsForInNNumber}{5.4.11.} - -@ -\subsection{5.4.11. for i in n.. repeat} -\label{ugLangLoopsForInNPage} -\index{pages!ugLangLoopsForInNPage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsForInNPage} -\index{ugLangLoopsForInNPage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsForInNPage}{5.4.11. for i in n.. repeat} -\beginscroll - -If the value after the \axiomSyntax{..} -is omitted, the loop has no end test. -A potentially infinite loop is thus created. -The variable is given the successive values \axiom{n, n+1, n+2, ...} -and the loop is terminated only if a \axiom{break} or \axiom{return} -expression is evaluated in the loop body. -However you may also add some other modifying clause on the -\axiom{repeat} (for example, a \axiom{while} clause) to stop the loop. - -\xtc{ -This loop displays the integers greater than or equal to \axiom{15} -and less than the first prime greater than \axiom{15}. -}{ -\spadpaste{for i in 15.. while not prime?(i) repeat output(i)} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangLoopsForInXLTitle}{for x in l repeat} -\newcommand{\ugLangLoopsForInXLNumber}{5.4.12.} - -@ -\subsection{5.4.12. for x in l repeat} -\label{ugLangLoopsForInXLPage} -\index{pages!ugLangLoopsForInXLPage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsForInXLPage} -\index{ugLangLoopsForInXLPage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsForInXLPage}{5.4.12. for x in l repeat} -\beginscroll - -Another variant of the \axiom{for} loop has the form: -\centerline{{{\it \axiom{for} x \axiom{in} list \axiom{repeat} loopBody}}} -This form is used when you want to iterate directly over the -elements of a list. -In this form of the \axiom{for} loop, the variable -\axiom{x} takes on the value of each successive element in \axiom{l}. -The end test is most simply stated in English: ``are there no more -\axiom{x} in \axiom{l}?'' - -\xtc{ -If \axiom{l} is this list, -}{ -\spadpaste{l := [0,-5,3] \bound{l}} -} -\xtc{ -display all elements of \axiom{l}, one per line. -}{ -\spadpaste{for x in l repeat output(x) \free{l}} -} - -Since the list constructing expression \axiom{expand [n..m]} creates the -list \axiom{[n, n+1, ..., m]}\footnote{This list is empty if \axiom{n > -m}.}, you might be tempted to think that the loops -\begin{verbatim} -for i in n..m repeat output(i) -\end{verbatim} -and +\subsection{Asp34 Example Code} +\label{Asp34ExampleCode} +\index{pages!Asp34ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp34ExampleCode} +\index{Asp34ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp34ExampleCode}{Asp34 Example Code} \begin{verbatim} -for x in expand [n..m] repeat output(x) + SUBROUTINE MSOLVE(IFLAG,N,X,Y,RWORK,LRWORK,IWORK,LIWORK) + DOUBLE PRECISION RWORK(LRWORK),X(N),Y(N) + INTEGER I,J,N,LIWORK,IFLAG,LRWORK,IWORK(LIWORK) + DOUBLE PRECISION W1(3),W2(3),MS(3,3) + IFLAG=-1 + MS(1,1)=2.0D0 + MS(1,2)=1.0D0 + MS(1,3)=0.0D0 + MS(2,1)=1.0D0 + MS(2,2)=2.0D0 + MS(2,3)=1.0D0 + MS(3,1)=0.0D0 + MS(3,2)=1.0D0 + MS(3,3)=2.0D0 + CALL F04ASF(MS,N,X,N,Y,W1,W2,IFLAG) + IFLAG=-IFLAG + RETURN + END \end{verbatim} -are equivalent. -The second form first creates the list -\axiom{expand [n..m]} (no matter how large it might be) and -then does the iteration. -The first form potentially runs in much less space, as the index variable -\axiom{i} is simply incremented once per loop and the list is not actually -created. -Using the first form is much more efficient. -% -\xtc{ -Of course, sometimes you really want to iterate across a specific list. -This displays each of the factors of \axiom{2400000}. -}{ -\spadpaste{for f in factors(factor(2400000)) repeat output(f)} -} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugLangLoopsForInPredTitle}{``Such that'' Predicates} -\newcommand{\ugLangLoopsForInPredNumber}{5.4.13.} - -@ -\subsection{5.4.13. ``Such that'' Predicates} -\label{ugLangLoopsForInPredPage} -\index{pages!ugLangLoopsForInPredPage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsForInPredPage} -\index{ugLangLoopsForInPredPage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsForInPredPage}{5.4.13. ``Such that'' Predicates} -\beginscroll - -A \axiom{for} loop can be followed by a \axiomSyntax{|} and then a -predicate. -The predicate qualifies the use of the values from the iterator following -the \axiom{for}. -Think of the vertical bar -\axiomSyntax{|} as the phrase ``such that.'' -\xtc{ -This loop expression -prints out the integers \axiom{n} in the given segment -such that \axiom{n} is odd. -}{ -\spadpaste{for n in 0..4 | odd? n repeat output n} -} - -\beginImportant -A \axiom{for} loop can also be written -\centerline{{\axiom{for} {\it iterator} \axiom{|} {\it predicate} \axiom{repeat} {\it loopBody}}} -which is equivalent to: -\centerline{{\axiom{for} {\it iterator} \axiom{repeat if}}} -\centerline{{{\it predicate} \axiom{then} {\it loopBody} \axiom{else} \axiom{iterate}}} -\endImportant - -The predicate need not refer only to the variable in the \axiom{for} clause: -any variable in an outer scope can be part of the predicate. -\xtc{ -In this example, the predicate on the inner \axiom{for} loop uses -\axiom{i} from the outer loop and the \axiom{j} from the \axiom{for} -clause that it directly modifies. -}{ -\begin{spadsrc} -for i in 1..50 repeat - for j in 1..50 | factorial(i+j) < 25 repeat - output [i,j] -\end{spadsrc} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangLoopsParTitle}{Parallel Iteration} -\newcommand{\ugLangLoopsParNumber}{5.4.14.} - -@ -\subsection{5.4.14. Parallel Iteration} -\label{ugLangLoopsParPage} -\begin{itemize} -\item ugLangLoopsForInPredPage \ref{ugLangLoopsForInPredPage} on -page~\pageref{ugLangLoopsForInPredPage} -\end{itemize} -\index{pages!ugLangLoopsParPage!ug05.ht} -\index{ug05.ht!pages!ugLangLoopsParPage} -\index{ugLangLoopsParPage!ug05.ht!pages} -<>= -\begin{page}{ugLangLoopsParPage}{5.4.14. Parallel Iteration} -\beginscroll - -The last example of -\texht{the previous section}{ -\downlink{``\ugLangLoopsForInPredTitle''}{ugLangLoopsForInPredPage} -in Section \ugLangLoopsForInPredNumber\ignore{ugLangLoopsForInPred}} -gives an example of -\spadgloss{nested iteration}: a loop is contained -in another loop. -Sometimes you want to iterate across two lists in parallel, or perhaps -you want to traverse a list while incrementing a variable. - -\beginImportant -The general syntax of a repeat loop is -\centerline{{{\tt \subscriptIt{iterator}{1} \subscriptIt{iterator}{2} \ldots \subscriptIt{iterator}{N} repeat {\it loopBody}}}} -where each {\it iterator} is either a \axiom{for} or a \axiom{while} clause. -The loop terminates immediately when the end test of any {\it iterator} -succeeds or when a \axiom{break} or \axiom{return} expression is evaluated -in {\it loopBody}. -The value returned by the loop is \void{}. -\endImportant - -\xtc{ -Here we write a loop to iterate across -two lists, computing the sum of the pairwise product -of elements. Here is the first list. -}{ -\spadpaste{l := [1,3,5,7] \bound{l}} -} -\xtc{ -And the second. -}{ -\spadpaste{m := [100,200] \bound{m}} -} -\xtc{ -The initial value of the sum counter. -}{ -\spadpaste{sum := 0 \bound{sum}} -} -\xtc{ -The last two elements of \axiom{l} are not used in the calculation -because \axiom{m} has two fewer elements than \axiom{l}. -}{ -\begin{spadsrc}[\bound{doit}\free{sum l m}] -for x in l for y in m repeat - sum := sum + x*y -\end{spadsrc} -} -\xtc{ -Display the ``dot product.'' -}{ -\spadpaste{sum \free{doit}} -} - -\xtc{ -Next, we write a loop to compute the sum of the products of the loop -elements with -their positions in the loop. -}{ -\spadpaste{l := [2,3,5,7,11,13,17,19,23,29,31,37] \bound{l1}} -} -\xtc{ -The initial sum. -}{ -\spadpaste{sum := 0 \bound{sum1}} -} -\xtc{ -Here looping stops when the list \axiom{l} is exhausted, even though -the \axiom{for i in 0..} specifies no terminating condition. -}{ -\spadpaste{for i in 0.. for x in l repeat sum := i * x \bound{doit1}\free{sum1 l1}} -} -\xtc{ -Display this weighted sum. -}{ -\spadpaste{sum \free{doit1}} -} - -When \axiomSyntax{|} is used to qualify any of the \axiom{for} clauses in a -parallel iteration, the variables in the predicates can be from an outer -scope or from a \axiom{for} clause in or to the left of a modified clause. - -This is correct: -\begin{verbatim} -for i in 1..10 repeat - for j in 200..300 | odd? (i+j) repeat - output [i,j] -\end{verbatim} -This is not correct since the variable \axiom{j} has not been -defined outside the inner loop. +\subsection{Asp35 Example Code} +\label{Asp35ExampleCode} +\index{pages!Asp35ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp35ExampleCode} +\index{Asp35ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp35ExampleCode}{Asp35 Example Code} \begin{verbatim} -for i in 1..10 | odd? (i+j) repeat -- wrong, j not defined - for j in 200..300 repeat - output [i,j] + SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) + DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N) + INTEGER LDFJAC,N,IFLAG + IF(IFLAG.EQ.1)THEN + FVEC(1)=(-1.0D0*X(2))+X(1) + FVEC(2)=(-1.0D0*X(3))+2.0D0*X(2) + FVEC(3)=3.0D0*X(3) + ELSEIF(IFLAG.EQ.2)THEN + FJAC(1,1)=1.0D0 + FJAC(1,2)=-1.0D0 + FJAC(1,3)=0.0D0 + FJAC(2,1)=0.0D0 + FJAC(2,2)=2.0D0 + FJAC(2,3)=-1.0D0 + FJAC(3,1)=0.0D0 + FJAC(3,2)=0.0D0 + FJAC(3,3)=3.0D0 + ENDIF + END \end{verbatim} - -%>% ********************************************************************* -%>\head{subsection}{Mixing Loop Modifiers}{ugLangLoopsMix} -%>% ********************************************************************* - -\xtc{ -This example shows that it is possible to mix several of the -forms of \axiom{repeat} modifying clauses on a loop. -}{ -\begin{spadsrc} -for i in 1..10 - for j in 151..160 | odd? j - while i + j < 160 repeat - output [i,j] -\end{spadsrc} -} -% -Here are useful rules for composing loop expressions: -\indent{4} -\beginitems -\item[1. ] \axiom{while} predicates can only refer to variables that -are global (or in an outer scope) -or that are defined in \axiom{for} clauses to the left of the -predicate. -\item[2. ] A ``such that'' predicate (something following \axiomSyntax{|}) -must directly follow a \axiom{for} clause and can only refer to -variables that are global (or in an outer scope) -or defined in the modified \axiom{for} clause -or any \axiom{for} clause to the left. -\enditems -\indent{0} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugLangItsTitle}{Creating Lists and Streams with Iterators} -\newcommand{\ugLangItsNumber}{5.5.} - -@ -\subsection{5.5. Creating Lists and Streams with Iterators} -\label{ugLangItsPage} -\begin{itemize} -\item ugLangLoopsPage \ref{ugLangLoopsPage} on -page~\pageref{ugLangLoopsPage} -\item ListXmpPage \ref{ListXmpPage} on -page~\pageref{ListXmpPage} -\item StreamXmpPage \ref{StreamXmpPage} on -page~\pageref{StreamXmpPage} -\end{itemize} -\index{pages!ugLangItsPage!ug05.ht} -\index{ug05.ht!pages!ugLangItsPage} -\index{ugLangItsPage!ug05.ht!pages} -<>= -\begin{page}{ugLangItsPage}{5.5. Creating Lists and Streams with Iterators} -\beginscroll - -All of what we did for loops in -\downlink{``\ugLangLoopsTitle''}{ugLangLoopsPage} -in Section \ugLangLoopsNumber\ignore{ugLangLoops} -can be transformed into expressions that create lists -and streams. -The \axiom{repeat,} \axiom{break} or \axiom{iterate} words are not used but -all the other ideas carry over. -Before we give you the general rule, here are some examples which -give you the idea. - -\xtc{ -This creates a simple list of the integers from \axiom{1} to \axiom{10}. -}{ -\spadpaste{list := [i for i in 1..10] \bound{list}} -} -\xtc{ -Create a stream of the integers greater than or equal to \axiom{1}. -}{ -\spadpaste{stream := [i for i in 1..] \bound{stream}} -} -\xtc{ -This is a list of the prime integers between \axiom{1} and \axiom{10}, -inclusive. -}{ -\spadpaste{[i for i in 1..10 | prime? i]} -} -\xtc{ -This is a stream of the prime integers greater than or equal to \axiom{1}. -}{ -\spadpaste{[i for i in 1.. | prime? i]} -} -\xtc{ -This is a list of the integers between \axiom{1} and \axiom{10}, -inclusive, whose squares are less than \axiom{700}. -}{ -\spadpaste{[i for i in 1..10 while i*i < 700]} -} -\xtc{ -This is a stream of the integers greater than or equal to \axiom{1} -whose squares are less than \axiom{700}. -}{ -\spadpaste{[i for i in 1.. while i*i < 700]} -} - -Got the idea? -Here is the general rule. - -\beginImportant -The general syntax of a collection is -\centerline{{{\tt [ {\it collectExpression} \subscriptIt{iterator}{1} \subscriptIt{iterator}{2} \ldots \subscriptIt{iterator}{N} ]}}} -where each \subscriptIt{iterator}{i} is either a \axiom{for} or a -\axiom{while} clause. -The loop terminates immediately when the end test of any -\subscriptIt{iterator}{i} succeeds or when a \axiom{return} expression is -evaluated in {\it collectExpression}. -The value returned by the collection is either a list or a stream of -elements, one for each iteration of the {\it collectExpression}. -\endImportant - -Be careful when you use \axiom{while} -to create a stream. -By default, Axiom tries to compute and display the first ten elements -of a stream. -If the \axiom{while} condition is not satisfied quickly, Axiom -can spend a long (possibly infinite) time trying to compute -the elements. -Use \spadcmd{)set streams calculate} to change the default -to something else. -This also affects the number of terms computed and displayed for power -series. -For the purposes of this book, we have used this system -command to display fewer than ten terms. -\xtc{ -Use nested iterators to create lists of -lists which can then be given as an argument to \axiomFun{matrix}. -}{ -\spadpaste{matrix [[x**i+j for i in 1..3] for j in 10..12]} -} -\xtc{ -You can also create lists of streams, streams of lists and -streams of streams. -Here is a stream of streams. -}{ -\spadpaste{[[i/j for i in j+1..] for j in 1..]} -} -\xtc{ -You can use parallel iteration across lists and streams to create -new lists. -}{ -\spadpaste{[i/j for i in 3.. by 10 for j in 2..]} -} -\xtc{ -Iteration stops if the end of a list or stream is reached. -}{ -\spadpaste{[i**j for i in 1..7 for j in 2.. ]} -} -%\xtc{ -%or a while condition fails. -%}{ -%\spadcommand{[i**j for i in 1.. for j in 2.. while i + j < 5 ]} -%} -\xtc{ -As with loops, you can combine these modifiers to make very -complicated conditions. -}{ -\spadpaste{[[[i,j] for i in 10..15 | prime? i] for j in 17..22 | j = squareFreePart j]} -} - -See \downlink{`List'}{ListXmpPage}\ignore{List} and -\downlink{`Stream'}{StreamXmpPage}\ignore{Stream} -for more information on creating and -manipulating lists and streams, respectively. - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugLangStreamsPrimesTitle}{An Example: Streams of Primes} -\newcommand{\ugLangStreamsPrimesNumber}{5.6.} - -@ -\subsection{5.6. An Example: Streams of Primes} -\label{ugLangStreamsPrimesPage} -\index{pages!ugLangStreamsPrimesPage!ug05.ht} -\index{ug05.ht!pages!ugLangStreamsPrimesPage} -\index{ugLangStreamsPrimesPage!ug05.ht!pages} -<>= -\begin{page}{ugLangStreamsPrimesPage}{5.6. An Example: Streams of Primes} -\beginscroll - -We conclude this chapter with an example of the creation and manipulation -of infinite streams of prime integers. -This might be useful for experiments with numbers or other applications -where you are using sequences of primes over and over again. -As for all streams, the stream of primes is only computed as far out as you -need. -Once computed, however, all the primes up to that point are saved for -future reference. - -Two useful operations provided by the Axiom library are -\axiomFunFrom{prime?}{IntegerPrimesPackage} and -\axiomFunFrom{nextPrime}{IntegerPrimesPackage}. -A straight-forward way to create a stream of -prime numbers is to start with the stream of positive integers \axiom{[2,..]} and -filter out those that are prime. -\xtc{ -Create a stream of primes. -}{ -\spadpaste{primes : Stream Integer := [i for i in 2.. | prime? i]} -} -A more elegant way, however, is to use the \axiomFunFrom{generate}{Stream} -operation from \axiomType{Stream}. -Given an initial value \axiom{a} and a function \axiom{f}, -\axiomFunFrom{generate}{Stream} -constructs the stream \axiom{[a, f(a), f(f(a)), ...]}. -This function gives you the quickest method of getting the stream of primes. -\xtc{ -This is how you use -\axiomFunFrom{generate}{Stream} to -generate an infinite stream of primes. -}{ -\spadpaste{primes := generate(nextPrime,2)} -} -\xtc{ -Once the stream is generated, you might only be interested in -primes starting at a particular value. -}{ -\spadpaste{smallPrimes := [p for p in primes | p > 1000] \bound{smallPrimes}} -} -\xtc{ -Here are the first 11 primes greater than 1000. -}{ -\spadpaste{[p for p in smallPrimes for i in 1..11] \free{smallPrimes}} -} -\xtc{ -Here is a stream of primes between 1000 and 1200. -}{ -\spadpaste{[p for p in smallPrimes while p < 1200] \free{smallPrimes}} -} -\xtc{ -To get these expanded into a finite stream, -you call \axiomFunFrom{complete}{Stream} on the stream. -}{ -\spadpaste{complete \%} -} -\xtc{ -Twin primes are consecutive odd number pairs which are prime. -Here is the stream of twin primes. -}{ -\spadpaste{twinPrimes := [[p,p+2] for p in primes | prime?(p + 2)]} -} -\xtc{ -Since we already have the primes computed we can -avoid the call to \axiomFunFrom{prime?}{IntegerPrimesPackage} -by using a double iteration. -This time we'll just generate a stream of the first of the twin primes. -}{ -\spadpaste{firstOfTwins:= [p for p in primes for q in rest primes | q=p+2]} -} - -Let's try to compute the infinite stream of triplet primes, -the set of primes \axiom{p} such that \axiom{[p,p+2,p+4]} -are primes. For example, \axiom{[3,5,7]} is a triple prime. -We could do this by a triple \axiom{for} iteration. -A more economical way is to use \userfun{firstOfTwins}. -This time however, put a semicolon at the end of the line. - -\xtc{Create the stream of firstTriplets. -Put a semicolon at the end so that no -elements are computed. -}{ -\spadpaste{firstTriplets := [p for p in firstOfTwins for q in rest firstOfTwins | q = p+2];} -} - -What happened? -As you know, by default -Axiom displays the first ten -elements of a stream when you first display it. -And, therefore, it needs to compute them! -If you want {\it no} elements computed, just terminate the expression by a -semicolon (\axiomSyntax{;}).\footnote{ -Why does this happen? The semi-colon prevents the display of the -result of evaluating the expression. -Since no stream elements are needed for display (or anything else, so far), -none are computed. -} - -\xtc{ -Compute the first triplet prime. -}{ -\spadpaste{firstTriplets.1} -} - -If you want to compute another, just ask for it. -But wait a second! -Given three consecutive odd integers, one of them must be divisible -by 3. Thus there is only one triplet prime. -But suppose that you did not know this and wanted to know what was the -tenth triplet prime. -\begin{verbatim} -firstTriples.10 -\end{verbatim} -To compute the tenth triplet prime, Axiom first must compute the second, -the third, and so on. -But since there isn't even a second triplet prime, Axiom will -compute forever. -Nonetheless, this effort can produce a useful result. -After waiting a bit, hit -\texht{\fbox{\bf Ctrl}--\fbox{\bf c}}{{\bf Ctrl-c}}. -The system responds as follows. -\begin{verbatim} - >> System error: - Console interrupt. - You are being returned to the top level of - the interpreter. -\end{verbatim} -Let's say that you want to know how many primes have been computed. -Issue +\subsection{Asp4 Example Code} +\label{Asp4ExampleCode} +\index{pages!Asp4ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp4ExampleCode} +\index{Asp4ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp4ExampleCode}{Asp4 Example Code} \begin{verbatim} -numberOfComputedEntries primes + DOUBLE PRECISION FUNCTION FUNCTN(NDIM,X) + DOUBLE PRECISION X(NDIM) + INTEGER NDIM + FUNCTN=(4.0D0*X(1)*X(3)**2*DEXP(2.0D0*X(1)*X(3)))/(X(4)**2+(2.0D0* + &X(2)+2.0D0)*X(4)+X(2)**2+2.0D0*X(2)+1.0D0) + RETURN + END \end{verbatim} -and, for this discussion, let's say that the result is \axiom{2045.} -\xtc{ -How big is the \eth{\axiom{2045}} prime? -}{ -\spadpaste{primes.2045} -} - -What you have learned is that there are no triplet primes between 5 and -17837. -Although this result is well known (some might even say trivial), there -are many experiments you could make where the result is not known. -What you see here is a paradigm for testing of hypotheses. -Here our hypothesis could have been: ``there is more than one triplet -prime.'' -We have tested this hypothesis for 17837 cases. -With streams, you can let your machine run, interrupt it to see how far -it has progressed, -then start it up and let it continue from where it left off. - -%> RDJ note to RSS: -%> Expressions not statements or lines-- -%> By an expression I mean any syntactically correct program fragment. -%> Everything in Axiom is an expression since every fragment has a value and a type. -%> In most languages including LISP, a "statement" is different from an expression: -%> it is executed for side-effect only and an error is incurred if you assign it a value. -%> This "gimmick" takes care of incomplete expressions such as "if x > 0 then y" in blocks. -%> In LISP, "u := (if x > 0 then y)" is illegal but in Axiom it is legal. -%> Also, in Axiom the value of a repeat loop is void even though you might be -%> be able to prove that it always returns a valid value (you have an example of this)! -%> This will be considered a bug not a feature. But it is how things stand. -%> In any case---this point should be in a box somewhere since it is key -%> to a user's understanding to the language. I am not sure where. You only -%> gain an appreciation for it after are awhile in chapter 5. -\endscroll -\autobuttons -\end{page} - -@ -\section{ug06.ht} -<>= -\newcommand{\pred}[1]{\subscriptIt{pred}{#1}} -\newcommand{\expr}[1]{\subscriptIt{expression}{#1}} -\newcommand{\ugUserTitle}{User-Defined Functions, Macros and Rules} -\newcommand{\ugUserNumber}{6.} - -@ -\subsection{6. User-Defined Functions, Macros and Rules} -\label{ugUserPage} -\begin{itemize} -\item ugUserFunMacPage \ref{ugUserFunMacPage} on -page~\pageref{ugUserFunMacPage} -\item ugUserMacrosPage \ref{ugUserMacrosPage} on -page~\pageref{ugUserMacrosPage} -\item ugUserIntroPage \ref{ugUserIntroPage} on -page~\pageref{ugUserIntroPage} -\item ugUserDeclarePage \ref{ugUserDeclarePage} on -page~\pageref{ugUserDeclarePage} -\item ugUserOnePage \ref{ugUserOnePage} on -page~\pageref{ugUserOnePage} -\item ugUserDecUndecPage \ref{ugUserDecUndecPage} on -page~\pageref{ugUserDecUndecPage} -\item ugUserDecOpersPage \ref{ugUserDecOpersPage} on -page~\pageref{ugUserDecOpersPage} -\item ugUserDelayPage \ref{ugUserDelayPage} on -page~\pageref{ugUserDelayPage} -\item ugUserUsePage \ref{ugUserUsePage} on -page~\pageref{ugUserUsePage} -\item ugUserCompIntPage \ref{ugUserCompIntPage} on -page~\pageref{ugUserCompIntPage} -\item ugUserPiecePage \ref{ugUserPiecePage} on -page~\pageref{ugUserPiecePage} -\item ugUserCachePage \ref{ugUserCachePage} on -page~\pageref{ugUserCachePage} -\item ugUserRecurPage \ref{ugUserRecurPage} on -page~\pageref{ugUserRecurPage} -\item ugUserMakePage \ref{ugUserMakePage} on -page~\pageref{ugUserMakePage} -\item ugUserBlocksPage \ref{ugUserBlocksPage} on -page~\pageref{ugUserBlocksPage} -\item ugUserFreeLocalPage \ref{ugUserFreeLocalPage} on -page~\pageref{ugUserFreeLocalPage} -\item ugUserAnonPage \ref{ugUserAnonPage} on -page~\pageref{ugUserAnonPage} -\item ugUserDatabasePage \ref{ugUserDatabasePage} on -page~\pageref{ugUserDatabasePage} -\item ugUserTrianglePage \ref{ugUserTrianglePage} on -page~\pageref{ugUserTrianglePage} -\item ugUserPalPage \ref{ugUserPalPage} on -page~\pageref{ugUserPalPage} -\item ugUserRulesPage \ref{ugUserRulesPage} on -page~\pageref{ugUserRulesPage} -\end{itemize} -\index{pages!ugUserPage!ug06.ht} -\index{ug06.ht!pages!ugUserPage} -\index{ugUserPage!ug06.ht!pages} -<>= -\begin{page}{ugUserPage}{6. User-Defined Functions, Macros and Rules} -\beginscroll - -In this chapter we show you how to write functions and macros, -and we explain how Axiom looks for and applies them. -We show some simple one-line examples of functions, together -with larger ones that are defined piece-by-piece or through the use of -piles. - -\beginmenu - \menudownlink{{6.1. Functions vs. Macros}}{ugUserFunMacPage} - \menudownlink{{6.2. Macros}}{ugUserMacrosPage} - \menudownlink{{6.3. Introduction to Functions}}{ugUserIntroPage} - \menudownlink{{6.4. Declaring the Type of Functions}}{ugUserDeclarePage} - \menudownlink{{6.5. One-Line Functions}}{ugUserOnePage} - \menudownlink{{6.6. Declared vs. Undeclared Functions}}{ugUserDecUndecPage} - \menudownlink{{6.7. Functions vs. Operations}}{ugUserDecOpersPage} - \menudownlink{{6.8. Delayed Assignments vs. Functions with No Arguments}} -{ugUserDelayPage} - \menudownlink{{6.9. How Axiom Determines What Function to Use}} -{ugUserUsePage} - \menudownlink{{6.10. Compiling vs. Interpreting}}{ugUserCompIntPage} - \menudownlink{{6.11. Piece-Wise Function Definitions}}{ugUserPiecePage} - \menudownlink{{6.12. Caching Previously Computed Results}}{ugUserCachePage} - \menudownlink{{6.13. Recurrence Relations}}{ugUserRecurPage} - \menudownlink{{6.14. Making Functions from Objects}}{ugUserMakePage} - \menudownlink{{6.15. Functions Defined with Blocks}}{ugUserBlocksPage} - \menudownlink{{6.16. Free and Local Variables}}{ugUserFreeLocalPage} - \menudownlink{{6.17. Anonymous Functions}}{ugUserAnonPage} - \menudownlink{{6.18. Example: A Database}}{ugUserDatabasePage} - \menudownlink{{6.19. Example: A Famous Triangle}}{ugUserTrianglePage} - \menudownlink{{6.20. Example: Testing for Palindromes}}{ugUserPalPage} - \menudownlink{{6.21. Rules and Pattern Matching}}{ugUserRulesPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserFunMacTitle}{Functions vs. Macros} -\newcommand{\ugUserFunMacNumber}{6.1.} - -@ -\subsection{6.1. Functions vs. Macros} -\label{ugUserFunMacPage} -\begin{itemize} -\item ugUserAnonPage \ref{ugUserAnonPage} on -page~\pageref{ugUserAnonPage} -\item ExitXmpPage \ref{ExitXmpPage} on -page~\pageref{ExitXmpPage} -\item VoidXmpPage \ref{VoidXmpPage} on -page~\pageref{VoidXmpPage} -\end{itemize} -\index{pages!ugUserFunMacPage!ug06.ht} -\index{ug06.ht!pages!ugUserFunMacPage} -\index{ugUserFunMacPage!ug06.ht!pages} -<>= -\begin{page}{ugUserFunMacPage}{6.1. Functions vs. Macros} -\beginscroll - -A function is a program to perform some -computation. -Most functions have names so that it is easy to refer to them. -A simple example of a function is one named -\axiomFunFrom{abs}{Integer} which -computes the absolute value of an integer. -% -\xtc{ -This is a use of the ``absolute value'' library function for integers. -}{ -\spadpaste{abs(-8)} -} -\xtc{ -This is an unnamed function that does the same thing, using the -``maps-to'' syntax \axiomSyntax{+->} that we discuss in -\downlink{``\ugUserAnonTitle''}{ugUserAnonPage} -in Section \ugUserAnonNumber\ignore{ugUserAnon}. -}{ -\spadpaste{(x +-> if x < 0 then -x else x)(-8)} -} -% -Functions can be used alone or serve as the building blocks for larger -programs. -Usually they return a value that you might want to use in the next stage -of a computation, but not always (for example, see -\downlink{`Exit'}{ExitXmpPage}\ignore{Exit} and -\downlink{`Void'}{VoidXmpPage}\ignore{Void}). -They may also read data from your keyboard, move information from one -place to another, or format and display results on your screen. - -In Axiom, as in mathematics, functions -are usually \spadglossSee{parameterized}{parameterized form}. -Each time you {\it call} (some people say \spadgloss{apply} or -\spadglossSee{invoke}{invocation}) a function, you give -values to the parameters (variables). -Such a value is called an \spadgloss{argument} of -the function. -Axiom uses the arguments for the computation. -In this way you get different results depending on what you ``feed'' the -function. - -Functions can have local variables or refer to global variables in the -workspace. -Axiom can often \spadglossSee{compile}{compiler} functions so that -they execute very efficiently. -Functions can be passed as arguments to other functions. - -Macros are textual substitutions. -They are used to clarify the meaning of constants or expressions and to be -templates for frequently used expressions. -Macros can be parameterized but they are not objects that can be passed as -arguments to functions. -In effect, macros are extensions to the Axiom expression parser. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserMacrosTitle}{Macros} -\newcommand{\ugUserMacrosNumber}{6.2.} - -@ -\subsection{6.2. Macros} -\label{ugUserMacrosPage} -\index{pages!ugUserMacrosPage!ug06.ht} -\index{ug06.ht!pages!ugUserMacrosPage} -\index{ugUserMacrosPage!ug06.ht!pages} -<>= -\begin{page}{ugUserMacrosPage}{6.2. Macros} -\beginscroll - -A \spadgloss{macro} provides general textual substitution of -an Axiom expression for a name. -You can think of a macro as being a generalized abbreviation. -You can only have one macro in your workspace with -a given name, no matter how many arguments it has. - -\beginImportant -The two general forms for macros are -\centerline{{{\tt macro} {\it name} {\tt ==} {\it body} }} -\centerline{{{\tt macro} {\it name(arg1,...)} {\tt ==} {\it body}}} -where the body of the macro can be any Axiom expression. -\endImportant - -% -\xtc{ -For example, suppose you decided that you -like to use \axiom{df} for \axiomFun{D}. -You define the macro \axiom{df} like this. -}{ -\spadpaste{macro df == D \bound{df}} -} -\xtc{ -Whenever you type \axiom{df}, the system expands it to -\axiomFun{D}. -}{ -\spadpaste{df(x**2 + x + 1,x) \free{df}} -} -\xtc{ -Macros can be parameterized and so can be used for many different -kinds of objects. -}{ -\spadpaste{macro ff(x) == x**2 + 1 \bound{ff}} -} -\xtc{ -Apply it to a number, a symbol, or an expression. -}{ -\spadpaste{ff z \free{ff}} -} -\xtc{ -Macros can also be nested, but you get an error message if you -run out of space because of an infinite nesting loop. -}{ -\spadpaste{macro gg(x) == ff(2*x - 2/3) \bound{gg}\free{ff}} -} -\xtc{ -This new macro is fine as it does not produce a loop. -}{ -\spadpaste{gg(1/w) \free{gg}} -} -% -\xtc{ -This, however, loops since \axiom{gg} is -defined in terms of \axiom{ff}. -}{ -\spadpaste{macro ff(x) == gg(-x) \free{gg}} -} -\xtc{ -The body of a macro can be a block. -}{ -\spadpaste{macro next == (past := present; present := future; future := past + present) \bound{next}} -} -\xtc{ -Before entering \axiom{next}, we need -values for \axiom{present} and \axiom{future}. -}{ -\spadpaste{present : Integer := 0 \bound{present}} -} -\xtc{ -}{ -\spadpaste{future : Integer := 1 \bound{future}} -} -\xtc{ -Repeatedly evaluating \axiom{next} produces the next Fibonacci number. -}{ -\spadpaste{next \free{future}\free{present}} -} -\xtc{ -And the next one. -}{ -\spadpaste{next \free{future}\free{present}} -} -\xtc{ -Here is the infinite stream of the rest of the Fibonacci numbers. -}{ -\spadpaste{[next for i in 1..] \free{future}\free{present}} -} -\xtc{ -Bundle all the above lines into a single macro. -}{ -\begin{spadsrc}[\bound{fibstr}] -macro fibStream == - present : Integer := 1 - future : Integer := 1 - [next for i in 1..] where - macro next == - past := present - present := future - future := past + present -\end{spadsrc} -} -\xtc{ -Use \axiomFunFrom{concat}{Stream} to start with the first two -Fibonacci numbers. -}{ -\spadpaste{concat([0,1],fibStream) \free{fibstr}} -} -\xtc{ -An easier way to compute these numbers is to -use the library operation \axiomFun{fibonacci}. -}{ -\spadpaste{[fibonacci i for i in 1..]} -} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugUserIntroTitle}{Introduction to Functions} -\newcommand{\ugUserIntroNumber}{6.3.} - -@ -\subsection{6.3. Introduction to Functions} -\label{ugUserIntroPage} -\begin{itemize} -\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on -page~\pageref{ugTypesPkgCallPage} -\item ugUserAnonPage \ref{ugUserAnonPage} on -page~\pageref{ugUserAnonPage} -\end{itemize} -\index{pages!ugUserIntroPage!ug06.ht} -\index{ug06.ht!pages!ugUserIntroPage} -\index{ugUserIntroPage!ug06.ht!pages} -<>= -\begin{page}{ugUserIntroPage}{6.3. Introduction to Functions} -\beginscroll - -Each name in your workspace can refer to a single object. -This may be any kind of object including a function. -You can use interactively any function from the library or any that you -define in the workspace. -In the library the same name can have very many functions, but you -can have only one function with a given name, although it can have any -number of arguments that you choose. - -If you define a function in the workspace that has the same name and number -of arguments as one in the library, then your definition takes precedence. -In fact, to get the library function you must -\spadglossSee{package-call}{package call} it (see -\downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} -in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall}). - -To use a function in Axiom, you apply it to its arguments. -Most functions are applied by entering the name of the function followed by -its argument or arguments. -\xtc{ -}{ -\spadpaste{factor(12)} -} -% -\xtc{ -Some functions like -\axiomOp{+} have {\it infix} \spadgloss{operators} as names. -}{ -\spadpaste{3 + 4} -} -\xtc{ -The function \axiomOp{+} has two arguments. -When you give it more than two arguments, -Axiom groups the arguments to the left. -This expression is equivalent to \axiom{(1 + 2) + 7}. -}{ -\spadpaste{1 + 2 + 7} -} - -All operations, including infix operators, can be written in prefix form, -that is, with the operation name followed by the arguments -in parentheses. -For example, \axiom{2 + 3} can alternatively be written as \axiom{+(2,3)}. -But \axiom{+(2,3,4)} is an error since \axiomOp{+} -takes only two arguments. - -Prefix operations are generally applied before the infix operation. -Thus \axiom{factorial 3 + 1} means \axiom{factorial(3) + 1} producing -\axiom{7}, and -\axiom{- 2 + 5} means \axiom{(-2) + 5} producing \axiom{3}. -An example of a prefix operator is prefix \axiomOp{-}. -For example, \axiom{- 2 + 5} converts to \axiom{(- 2) + 5} producing -the value \axiom{3}. -Any prefix function taking two arguments can be written in -an infix manner by putting an -ampersand (\axiomSyntax{\&}) before the name. -Thus \axiom{D(2*x,x)} can be written as -\axiom{2*x \&D x} returning \axiom{2}. - -Every function in Axiom is identified by -a \spadgloss{name} and \spadgloss{type}.\footnote{An exception is -an ``anonymous function'' -discussed in -\downlink{``\ugUserAnonTitle''}{ugUserAnonPage} -in Section \ugUserAnonNumber\ignore{ugUserAnon}.} -The type of a function is always a mapping of the form -\spadsig{Source}{Target} -where \axiom{Source} and \axiom{Target} are types. -To enter a type from the keyboard, enter the arrow by using -a hyphen \axiomSyntax{-} followed by a greater-than sign -\axiomSyntax{>}, e.g. {\tt Integer -> Integer}. - -Let's go back to \axiomOp{+}. -There are many \axiomOp{+} functions in the -Axiom library: one for integers, one for floats, another for -rational numbers, and so on. -These \axiomOp{+} functions have different types and thus are -different functions. -You've seen examples of this \spadgloss{overloading} -before---using the same name for different functions. -Overloading is the rule rather than the exception. -You can add two integers, two polynomials, two matrices or -two power series. -These are all done with the same function name -but with different functions. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserDeclareTitle}{Declaring the Type of Functions} -\newcommand{\ugUserDeclareNumber}{6.4.} - -@ -\subsection{6.4. Declaring the Type of Functions} -\label{ugUserDeclarePage} -\begin{itemize} -\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on -page~\pageref{ugTypesDeclarePage} -\end{itemize} -\index{pages!ugUserDeclarePage!ug06.ht} -\index{ug06.ht!pages!ugUserDeclarePage} -\index{ugUserDeclarePage!ug06.ht!pages} -<>= -\begin{page}{ugUserDeclarePage}{6.4. Declaring the Type of Functions} -\beginscroll - -In \downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} -in Section \ugTypesDeclareNumber\ignore{ugTypesDeclare} we -discussed how to declare a variable -to restrict the kind of values that can be assigned to it. -In this section we show how to declare a variable that refers to -function objects. - -\beginImportant -A function is an object of type -\centerline{{\spadsig{Source}{Type}}} -where \axiom{Source} and \axiom{Target} can be any type. -A common type for \axiom{Source} is -\axiomType{Tuple}(\subscriptIt{T}{1}, \ldots, \subscriptIt{T}{n}), -usually written -(\subscriptIt{T}{1}, \ldots, \subscriptIt{T}{n}), -to indicate a function of \axiom{n} arguments. -\endImportant - -\xtc{ -If \axiom{g} takes an \axiomType{Integer}, a \axiomType{Float} and -another \axiomType{Integer}, and returns a -\axiomType{String}, the declaration is written this way. -}{ -\spadpaste{g: (Integer,Float,Integer) -> String} -} -\xtc{ -The types need not be written fully; using abbreviations, the above -declaration is: -}{ -\spadpaste{g: (INT,FLOAT,INT) -> STRING} -} -\xtc{ -It is possible for a function to take no arguments. -If \axiom{ h} takes no arguments -but returns a \axiomType{Polynomial} \axiomType{Integer}, any -of the following declarations is acceptable. -}{ -\spadpaste{h: () -> POLY INT} -} -\xtc{ -}{ -\spadpaste{h: () -> Polynomial INT} -} -\xtc{ -}{ -\spadpaste{h: () -> POLY Integer} -} - - -\beginImportant -Functions can also be declared when they are being defined. -The syntax for combined declaration/definition is: -\centerline{{\frenchspacing{\tt {\it functionName}(\subscriptIt{parm}{1}: \subscriptIt{parmType}{1}, \ldots, \subscriptIt{parm}{N}: \subscriptIt{parmType}{N}): {\it functionReturnType}}}} -\endImportant - -The following definition fragments show how this can be done for -the functions \axiom{g} and \axiom{h} above. +\subsection{Asp41 Example Code} +\label{Asp41ExampleCode} +\index{pages!Asp41ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp41ExampleCode} +\index{Asp41ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp41ExampleCode}{Asp41 Example Code} \begin{verbatim} -g(arg1: INT, arg2: FLOAT, arg3: INT): STRING == ... - -h(): POLY INT == ... + SUBROUTINE FCN(X,EPS,Y,F,N) + DOUBLE PRECISION EPS,F(N),X,Y(N) + INTEGER N + F(1)=Y(2) + F(2)=Y(3) + F(3)=(-1.0D0*Y(1)*Y(3))+2.0D0*EPS*Y(2)**2+(-2.0D0*EPS) + RETURN + END + SUBROUTINE JACOBF(X,EPS,Y,F,N) + DOUBLE PRECISION EPS,F(N,N),X,Y(N) + INTEGER N + F(1,1)=0.0D0 + F(1,2)=1.0D0 + F(1,3)=0.0D0 + F(2,1)=0.0D0 + F(2,2)=0.0D0 + F(2,3)=1.0D0 + F(3,1)=-1.0D0*Y(3) + F(3,2)=4.0D0*EPS*Y(2) + F(3,3)=-1.0D0*Y(1) + RETURN + END + SUBROUTINE JACEPS(X,EPS,Y,F,N) + DOUBLE PRECISION EPS,F(N),X,Y(N) + INTEGER N + F(1)=0.0D0 + F(2)=0.0D0 + F(3)=2.0D0*Y(2)**2-2.0D0 + RETURN + END \end{verbatim} - -A current restriction on function declarations is that they must -involve fully specified types (that is, cannot include modes involving -explicit or implicit \axiomSyntax{?}). -For more information on declaring things in general, see -\downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} -in Section \ugTypesDeclareNumber\ignore{ugTypesDeclare}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserOneTitle}{One-Line Functions} -\newcommand{\ugUserOneNumber}{6.5.} - -@ -\subsection{6.5. One-Line Functions} -\label{ugUserOnePage} -\index{pages!ugUserOnePage!ug06.ht} -\index{ug06.ht!pages!ugUserOnePage} -\index{ugUserOnePage!ug06.ht!pages} -<>= -\begin{page}{ugUserOnePage}{6.5. One-Line Functions} -\beginscroll - -As you use Axiom, you will find that you will write many short functions -to codify sequences of operations that you often perform. -In this section we write some simple one-line functions. - -\xtc{ -This is a simple recursive factorial function for positive integers. -}{ -\spadpaste{fac n == if n < 3 then n else n * fac(n-1) \bound{fac}} -} -\xtc{ -}{ -\spadpaste{fac 10 \free{fac}} -} -%>> Thankfully, the $ is no longer needed in the next example. -\xtc{ -This function computes \axiom{1 + 1/2 + 1/3 + ... + 1/n}. -}{ -\spadpaste{s n == reduce(+,[1/i for i in 1..n]) \bound{s}} -} -\xtc{ -}{ -\spadpaste{s 50 \free{s}} -} -\xtc{ -This function computes a Mersenne number, several of which are prime. -}{ -\spadpaste{mersenne i == 2**i - 1 \bound{mersenne}} -} -\xtc{ -If you type \axiom{mersenne}, Axiom shows you -the function definition. -}{ -\spadpaste{mersenne \free{mersenne}} -} -\xtc{ -Generate a stream of Mersenne numbers. -}{ -\spadpaste{[mersenne i for i in 1..] \free{mersenne}} -} -\xtc{ -Create a stream of those values of \axiom{i} such that -\axiom{mersenne(i)} is prime. -}{ -\spadpaste{mersenneIndex := [n for n in 1.. | prime?(mersenne(n))] \bound{mersenneIndex}\free{mersenne}} -} -\xtc{ -Finally, write a function that returns the \eth{\axiom{n}} Mersenne -prime. -}{ -\spadpaste{mersennePrime n == mersenne mersenneIndex(n) \free{mersenne mersenneIndex}\bound{mersennePrime}} -} -\xtc{ -}{ -\spadpaste{mersennePrime 5 \free{mersennePrime}} -} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugUserDecUndecTitle}{Declared vs. Undeclared Functions} -\newcommand{\ugUserDecUndecNumber}{6.6.} - -@ -\subsection{6.6. Declared vs. Undeclared Functions} -\label{ugUserDecUndecPage} -\begin{itemize} -\item ugCategoriesPage \ref{ugCategoriesPage} on -page~\pageref{ugCategoriesPage} -\end{itemize} -\index{pages!ugUserDecUndecPage!ug06.ht} -\index{ug06.ht!pages!ugUserDecUndecPage} -\index{ugUserDecUndecPage!ug06.ht!pages} -<>= -\begin{page}{ugUserDecUndecPage}{6.6. Declared vs. Undeclared Functions} -\beginscroll - -If you declare the type of a function, you can apply -it to any data that can be converted to the source type -of the function. - -\labelSpace{2pc} -\xtc{ -Define \userfun{f} with type \spadsig{Integer}{Integer}. -}{ -\spadpaste{f(x: Integer): Integer == x + 1 \bound{f}} -} -\xtc{ -The function -\userfun{f} can be applied to integers, \ldots -}{ -\spadpaste{f 9 \free{f}} -} -\xtc{ -and to values that convert to integers, \ldots -}{ -\spadpaste{f(-2.0) \free{f}} -} -\xtc{ -but not to values that cannot be converted to integers. -}{ -\spadpaste{f(2/3) \free{f}} -} - -To make the function over a wide range of types, do not -declare its type. -\xtc{ -Give the same definition with no declaration. -}{ -\spadpaste{g x == x + 1 \bound{g}} -} -\xtc{ -If \axiom{x + 1} makes sense, you can apply \userfun{g} to \axiom{x}. -}{ -\spadpaste{g 9 \free{g}} -} -\xtc{ -A version of \userfun{g} with different argument types -get compiled for each new kind of argument used. -}{ -\spadpaste{g(2/3) \free{g}} -} -\xtc{ -Here \axiom{x+1} for \axiom{x = "axiom"} makes no sense. -}{ -\spadpaste{g("axiom")\free{g}} -} - -As you will see in \downlink{``\ugCategoriesTitle''}{ugCategoriesPage} -in Chapter \ugCategoriesNumber\ignore{ugCategories}, -Axiom has a formal idea of categories for what ``makes sense.'' - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserDecOpersTitle}{Functions vs. Operations} -\newcommand{\ugUserDecOpersNumber}{6.7.} - -@ -\subsection{6.7. Functions vs. Operations} -\label{ugUserDecOpersPage} -\begin{itemize} -\item MappingPackageOneXmpPage \ref{MappingPackageOneXmpPage} on -page~\pageref{MappingPackageOneXmpPage} -\item ugPackagesAbstractPage \ref{ugPackagesAbstractPage} on -page~\pageref{ugPackagesAbstractPage} -\item ugPackagesPage \ref{ugPackagesPage} on -page~\pageref{ugPackagesPage} -\item ugCategoriesPage \ref{ugCategoriesPage} on -page~\pageref{ugCategoriesPage} -\end{itemize} -\index{pages!ugUserDecOpersPage!ug06.ht} -\index{ug06.ht!pages!ugUserDecOpersPage} -\index{ugUserDecOpersPage!ug06.ht!pages} -<>= -\begin{page}{ugUserDecOpersPage}{6.7. Functions vs. Operations} -\beginscroll - -A function is an object that you can create, manipulate, pass to, -and return from functions (for some interesting examples of -library functions that manipulate functions, see -\downlink{`MappingPackage1'}{MappingPackageOneXmpPage} -\ignore{MappingPackage1}). -Yet, we often seem to use the term \spadgloss{operation} and -function interchangeably in Axiom. -What is the distinction? - -First consider values and types associated with some variable \axiom{n} in -your workspace. -You can make the declaration \axiom{n : Integer}, then assign \axiom{n} an -integer value. -You then speak of the integer \axiom{n}. -However, note that the integer is not the name \axiom{n} itself, but -the value that you assign to \axiom{n}. - -Similarly, you can declare a variable \axiom{f} in your workspace to have -type \spadsig{Integer}{Integer}, then assign \axiom{f}, through a definition -or an assignment of an anonymous function. -You then speak of the function \axiom{f}. -However, the function is not \axiom{f}, but the value that you -assign to \axiom{f}. - -A function is a value, in fact, some machine code for doing something. -Doing what? -Well, performing some \spadgloss{operation}. -Formally, an operation consists of the constituent parts of \axiom{f} in your -workspace, excluding the value; thus an operation has a name and a type. -An operation is what domains and packages export. -Thus \axiomType{Ring} exports one operation \axiomOp{+}. -Every ring also exports this operation. -Also, the author of every ring in the system is obliged under contract -(see \downlink{``\ugPackagesAbstractTitle''}{ugPackagesAbstractPage} -in Section \ugPackagesAbstractNumber\ignore{ugPackagesAbstract}) -to provide an implementation for this operation. - -This chapter is all about functions---how you create them interactively and -how you apply them to meet your needs. -In \downlink{``\ugPackagesTitle''}{ugPackagesPage} in -Chapter \ugPackagesNumber\ignore{ugPackages} you will -learn how to create them for the -Axiom library. -Then in \downlink{``\ugCategoriesTitle''}{ugCategoriesPage} -in Chapter \ugCategoriesNumber\ignore{ugCategories}, you will -learn about categories and -exported operations. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserDelayTitle}{Delayed Assignments vs. Functions with No Arguments} -\newcommand{\ugUserDelayNumber}{6.8.} - -@ -\subsection{6.8. Delayed Assignments vs. Functions with No Arguments} -\label{ugUserDelayPage} -\begin{itemize} -\item ugLangAssignPage \ref{ugLangAssignPage} on -page~\pageref{ugLangAssignPage} -\end{itemize} -\index{pages!ugUserDelayPage!ug06.ht} -\index{ug06.ht!pages!ugUserDelayPage} -\index{ugUserDelayPage!ug06.ht!pages} -<>= -\begin{page}{ugUserDelayPage} -{6.8. Delayed Assignments vs. Functions with No Arguments} -\beginscroll - -In \downlink{``\ugLangAssignTitle''}{ugLangAssignPage} in Section -\ugLangAssignNumber\ignore{ugLangAssign} we discussed the difference -between immediate and -delayed assignments. -In this section we show the difference between delayed -assignments and functions of no arguments. - -\labelSpace{2pc} -\xtc{ -A function of no arguments is sometimes called a {\it nullary function.} -}{ -\spadpaste{sin24() == sin(24.0) \bound{sin24}} -} -\xtc{ -You must use the parentheses (\axiomSyntax{()}) to evaluate it. -Like a delayed assignment, the right-hand-side of a function evaluation -is not evaluated until the left-hand-side is used. -}{ -\spadpaste{sin24() \free{sin24}} -} -\xtc{ -If you omit the parentheses, you just get the function definition. -%(Note how the explicit floating point number in the definition -%has been translated into a function call involving a mantissa, -%exponent and radix.) -}{ -\spadpaste{sin24 \free{sin24}} -} -\xtc{ -You do not use the parentheses \axiomSyntax{()} in a delayed assignment\ldots -}{ -\spadpaste{cos24 == cos(24.0) \bound{cos24}} -} -\xtc{ -nor in the evaluation. -}{ -\spadpaste{cos24 \free{cos24}} -} -The only syntactic difference between delayed assignments -and nullary functions is that you use \axiomSyntax{()} in the latter case. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserUseTitle}{How Axiom Determines What Function to Use} -\newcommand{\ugUserUseNumber}{6.9.} - -@ -\subsection{6.9. How Axiom Determines What Function to Use} -\label{ugUserUsePage} -\begin{itemize} -\item ugTypesPkgCallPage \ref{ugTypesPkgCallPage} on -page~\pageref{ugTypesPkgCallPage} -\item ugTypesResolvePage \ref{ugTypesResolvePage} on -page~\pageref{ugTypesResolvePage} -\end{itemize} -\index{pages!ugUserUsePage!ug06.ht} -\index{ug06.ht!pages!ugUserUsePage} -\index{ugUserUsePage!ug06.ht!pages} -<>= -\begin{page}{ugUserUsePage}{6.9. How Axiom Determines What Function to Use} -\beginscroll - -What happens if you define a function that has the same name as a library -function? -Well, if your function has the same name and number of arguments (we -sometimes say \spadgloss{arity}) as another function -in the library, then your function covers up the library function. -If you want then to call the library function, you will have to package-call -it. -Axiom can use both the functions you write and those that come -from the library. -Let's do a simple example to illustrate this. -\xtc{ -Suppose you (wrongly!) define \userfun{sin} in this way. -}{ -\spadpaste{sin x == 1.0 \bound{sin}} -} -\xtc{ -The value \axiom{1.0} is returned for any argument. -}{ -\spadpaste{sin 4.3 \free{sin}} -} -\xtc{ -If you want the library operation, we have to package-call it -(see \downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} -in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall} -for more information). -}{ -\spadpaste{sin(4.3)\$Float} -} -\xtc{ -}{ -\spadpaste{sin(34.6)\$Float} -} -\xtc{ -Even worse, say we accidentally used the same name as a library -function in the function. -}{ -\spadpaste{sin x == sin x \bound{sin1}} -} -\xtc{ -Then Axiom definitely does not understand us. -}{ -\spadpaste{sin 4.3 \free{sin1}} -} -\xtc{ -Again, we could package-call the inside function. -}{ -\spadpaste{sin x == sin(x)\$Float \bound{sin2}} -} -\xtc{ -}{ -\spadpaste{sin 4.3 \free{sin2}} -} -Of course, you are unlikely to make such obvious errors. -It is more probable that you would write a function and in the body use a -function that you think is a library function. -If you had also written a function by that same name, the library function -would be invisible. - -How does Axiom determine what library function to call? -It very much depends on the particular example, but the simple case of -creating the polynomial -\axiom{x + 2/3} will give you an idea. -\indent{4} -\beginitems -\item[1. ] The \axiom{x} is analyzed and its default type is -\axiomType{Variable(x)}. -\item[2. ] The \axiom{2} is analyzed and its default type is -\axiomType{PositiveInteger}. -\item[3. ] The \axiom{3} is analyzed and its default type is -\axiomType{PositiveInteger}. -\item[4. ] Because the arguments to \axiomOp{/} are integers, Axiom -gives the expression \axiom{2/3} a default target type of -\axiomType{Fraction(Integer)}. -\item[5. ] Axiom looks in \axiomType{PositiveInteger} for \axiomOp{/}. -It is not found. -\item[6. ] Axiom looks in \axiomType{Fraction(Integer)} for \axiomOp{/}. -It is found for arguments of type \axiomType{Integer}. -\item[7. ] The \axiom{2} and \axiom{3} are converted to objects of type -\axiomType{Integer} (this is trivial) and \axiomOp{/} is applied, -creating an object of type \axiomType{Fraction(Integer)}. -\item[8. ] No \axiomOp{+} for arguments of types \axiomType{Variable(x)} and -\axiomType{Fraction(Integer)} are found in either domain. -\item[9. ] Axiom resolves -(see \downlink{``\ugTypesResolveTitle''}{ugTypesResolvePage} -in Section \ugTypesResolveNumber\ignore{ugTypesResolve}) -the types and gets \axiomType{Polynomial (Fraction (Integer))}. -\item[10. ] The \axiom{x} and the \axiom{2/3} are converted to objects of this -type and \axiomOp{+} is applied, yielding the answer, an object of type -\axiomType{Polynomial (Fraction (Integer))}. -\enditems -\indent{0} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserCompIntTitle}{Compiling vs. Interpreting} -\newcommand{\ugUserCompIntNumber}{6.10.} - -@ -\subsection{6.10. Compiling vs. Interpreting} -\label{ugUserCompIntPage} -\begin{itemize} -\item ugTypesSubdomainsPage \ref{ugTypesSubdomainsPage} on -page~\pageref{ugTypesSubdomainsPage} -\end{itemize} -\index{pages!ugUserCompIntPage!ug06.ht} -\index{ug06.ht!pages!ugUserCompIntPage} -\index{ugUserCompIntPage!ug06.ht!pages} -<>= -\begin{page}{ugUserCompIntPage}{6.10. Compiling vs. Interpreting} -\beginscroll - -When possible, Axiom completely determines the type of every object in -a function, then translates the function definition to \Lisp{} or -to machine code (see next section). -This translation, -called \spadglossSee{compilation}{compiler}, happens the first time you call -the function and results in a computational delay. -Subsequent function calls with the same argument types use the compiled -version of the code without delay. - -If Axiom cannot determine the type of everything, the -function may still be executed -but -in \spadglossSee{interpret-code mode}{interpreter} : -each statement in the function is analyzed and executed as the control -flow indicates. -This process is slower than executing a compiled function, but it -allows the execution of code that may involve objects whose types -change. - -\beginImportant -If Axiom decides that it cannot compile the code, it -issues a message stating the problem and then the following -message: -% -\centerline{{{\bf We will attempt to step through and interpret the code.}}} -% -This is not a time to panic. -Rather, it just means that what you gave to Axiom -is somehow ambiguous: either it is not specific enough to be analyzed -completely, or it is beyond Axiom's present interactive -compilation abilities. -\endImportant - -\xtc{ -This function runs in interpret-code mode, but it does not compile. -}{ -\begin{spadsrc}[\bound{varPolys}] -varPolys(vars) == - for var in vars repeat - output(1 :: UnivariatePolynomial(var,Integer)) -\end{spadsrc} -} -\xtc{ -For \axiom{vars} equal to \axiom{['x, 'y, 'z]}, this function displays -\axiom{1} three times. -}{ -\spadpaste{varPolys ['x,'y,'z] \free{varPolys}} -} -\xtc{ -The type of the argument to \axiomFun{output} changes in each iteration, -so Axiom cannot compile the function. -In this case, even the inner loop by itself would have a problem: -}{ -\begin{spadsrc} -for var in ['x,'y,'z] repeat - output(1 :: UnivariatePolynomial(var,Integer)) -\end{spadsrc} -} - -Sometimes you can help a function to compile by using an extra conversion -or by using \axiom{pretend}. -\spadkey{pretend} -See \downlink{``\ugTypesSubdomainsTitle''}{ugTypesSubdomainsPage} -in Section \ugTypesSubdomainsNumber\ignore{ugTypesSubdomains} for details. - -When a function is compilable, you have the choice of whether it is -compiled to \Lisp{} and then interpreted by the \Lisp{} -interpreter or then further compiled from \Lisp{} to machine code. -The option is controlled via \spadcmd{)set functions compile}. -Issue \spadcmd{)set functions compile on} to compile all the way to -machine code. -With -the default setting \spadcmd{)set functions compile off}, -Axiom has its \Lisp{} code interpreted -because the overhead of further compilation is larger than the run-time -of most of the functions our users have defined. -You may find that selectively turning this option on and off will -give you the best performance in your particular application. -For example, if you are writing functions for graphics applications -where hundreds of points are being computed, it is almost certainly true -that you will get the best performance by issuing -\spadcmd{)set functions compile on}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserPieceTitle}{Piece-Wise Function Definitions} -\newcommand{\ugUserPieceNumber}{6.11.} - -@ -\subsection{6.11. Piece-Wise Function Definitions} -\label{ugUserPiecePage} -\begin{itemize} -\item ugUserPieceBasicPage \ref{ugUserPieceBasicPage} on -page~\pageref{ugUserPieceBasicPage} -\item ugUserPiecePickingPage \ref{ugUserPiecePickingPage} on -page~\pageref{ugUserPiecePickingPage} -\item ugUserPiecePredPage \ref{ugUserPiecePredPage} on -page~\pageref{ugUserPiecePredPage} -\end{itemize} -\index{pages!ugUserPiecePage!ug06.ht} -\index{ug06.ht!pages!ugUserPiecePage} -\index{ugUserPiecePage!ug06.ht!pages} -<>= -\begin{page}{ugUserPiecePage}{6.11. Piece-Wise Function Definitions} -\beginscroll - -To move beyond functions defined in one line, we introduce in this section -functions that are defined piece-by-piece. -That is, we say ``use this definition when the argument is such-and-such and -use this other definition when the argument is that-and-that.'' - -\beginmenu - \menudownlink{{6.11.1. A Basic Example}}{ugUserPieceBasicPage} - \menudownlink{{6.11.2. Picking Up the Pieces}}{ugUserPiecePickingPage} - \menudownlink{{6.11.3. Predicates}}{ugUserPiecePredPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserPieceBasicTitle}{A Basic Example} -\newcommand{\ugUserPieceBasicNumber}{6.11.1.} - -@ -\subsection{6.11.1. A Basic Example} -\label{ugUserPieceBasicPage} -\index{pages!ugUserPieceBasicPage!ug06.ht} -\index{ug06.ht!pages!ugUserPieceBasicPage} -\index{ugUserPieceBasicPage!ug06.ht!pages} -<>= -\begin{page}{ugUserPieceBasicPage}{6.11.1. A Basic Example} -\beginscroll - -There are many other ways to define a factorial function for nonnegative -integers. -You might -say -factorial of \axiom{0} is \axiom{1,} otherwise factorial of \axiom{n} is -\axiom{n} times factorial of \axiom{n-1}. -Here is one way to do this in Axiom. -% -\xtc{ -Here is the value for \axiom{n = 0}. -}{ -\spadpaste{fact(0) == 1 \bound{fact0}} -} -\xtc{ -Here is the value for \axiom{n > 0}. -The vertical bar \axiomSyntax{|} means -``such that''. -}{ -\spadpaste{fact(n | n > 0) == n * fact(n - 1) \free{fact0}\bound{factn}} -} -%>> am moving this back -%The vertical bar \axiomSyntax{|} is read as ``such that'' and so -%\index{such that} -%the second line means that that part of the definition for \userfun{fact} -%is for any \axiom{n} such that \axiom{n} is greater than 0. -%In fact, the first line is really just a shorthand expression for -%\axiom{fact(n | n = 0) == 1}. -%>> prefer scratching next 4 lines -%We are implicitly using a \spadgloss{predicate} with a \axiomSyntax{|} in -%this line (see \downlink{``\ugUserPiecePredTitle''}{ugUserPiecePredPage} -%in Section \ugUserPiecePredNumber\ignore{ugUserPiecePred} for more -%on predicates). -%So this piece of the function is applicable to all (the not so many!) -%values of \axiom{n} that are equal to zero. -\xtc{ -What is the value for \axiom{n = 3}? -}{ -\spadpaste{fact(3) \free{factn}} -} -\xtc{ -What is the value for \axiom{n = -3}? -}{ -\spadpaste{fact(-3) \free{factn}} -} -\xtc{ -Now for a second definition. -Here is the value for \axiom{n = 0}. -}{ -\spadpaste{facto(0) == 1 \bound{facto0}} -} -\xtc{ -Give an error message if \axiom{n < 0}. -}{ -\spadpaste{facto(n | n < 0) == error "arguments to facto must be non-negative" \free{facto0}\bound{factop}} -} -\xtc{ -Here is the value otherwise. -}{ -\spadpaste{facto(n) == n * facto(n - 1) \free{factop}\bound{facton}} -} -\xtc{ -What is the value for \axiom{n = 7}? -}{ -\spadpaste{facto(3) \free{facton}} -} -\xtc{ -What is the value for \axiom{n = -7}? -}{ -\spadpaste{facto(-7) \free{facton}} -} -\xtc{ -To see the current piece-wise definition of a function, -use \spadsys{)display value}. -}{ -\spadpaste{)display value facto \free{facton}} -} - -In general a {\it piece-wise definition} of a function consists of two or -more parts. -Each part gives a ``piece'' of the entire definition. -Axiom collects the pieces of a function as you enter them. -When you ask for a value of the function, it then ``glues'' -the pieces together to form a function. - -The two piece-wise definitions for the factorial function -are examples of recursive functions, that is, functions that -are defined in terms of themselves. -Here is an interesting doubly-recursive function. -This function returns the value \axiom{11} for all positive integer arguments. -\xtc{ -Here is the first of two pieces. -}{ -\spadpaste{eleven(n | n < 1) == n + 11\bound{ff0}} -} -\xtc{ -And the general case. -}{ -\spadpaste{eleven(m) == eleven(eleven(m - 12))\bound{ff1}\free{ff0}} -} -\xtc{ -Compute \axiom{elevens}, the infinite stream -of values of \axiom{eleven}. -}{ -\spadpaste{elevens := [eleven(i) for i in 0..]\bound{ff2}\free{ff1}} -} -\xtc{ -What is the value at \axiom{n = 200}? -}{ -\spadpaste{elevens 200\free{ff2}} -} -\xtc{ -What is the Axiom's definition of \axiom{eleven}? -}{ -\spadpaste{)display value eleven\free{ff2}} -} -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserPiecePickingTitle}{Picking Up the Pieces} -\newcommand{\ugUserPiecePickingNumber}{6.11.2.} - -@ -\subsection{6.11.2. Picking Up the Pieces} -\label{ugUserPiecePickingPage} -\begin{itemize} -\item ugUserPieceBasicPage \ref{ugUserPieceBasicPage} on -page~\pageref{ugUserPieceBasicPage} -\end{itemize} -\index{pages!ugUserPiecePickingPage!ug06.ht} -\index{ug06.ht!pages!ugUserPiecePickingPage} -\index{ugUserPiecePickingPage!ug06.ht!pages} -<>= -\begin{page}{ugUserPiecePickingPage}{6.11.2. Picking Up the Pieces} -\beginscroll - -Here are the details about how Axiom creates a function from its -pieces. -Axiom converts the \eth{\axiom{i}} piece of a function definition into a -conditional expression of the form: \axiom{if} \pred{i} \axiom{then} -\expr{i}. -If any new piece has a \pred{i} that is identical\footnote{after all -variables are uniformly named} to an earlier \pred{j}, the earlier piece is -removed. -Otherwise, the new piece is always added at the end. - -\beginImportant -If there are \axiom{n} pieces to a function definition for \axiom{f}, -the function defined \axiom{f} is: \newline -% -\texht{\hspace*{3pc}}{\tab{6}} -{\tt if} \pred{1} {\tt then} \expr{1} {\tt else}\newline -\texht{\hspace*{6pc}}{\tab{12}}. . . \newline -\texht{\hspace*{3pc}}{\tab{6}} -{\tt if} \pred{n} {\tt then} \expr{n} {\tt else}\newline -\texht{\hspace*{3pc}}{\tab{6}} -{\tt error "You did not define f for argument ."} -% -\endImportant - -You can give definitions of any number of mutually recursive function -definitions, piece-wise or otherwise. -No computation is done until you ask for a value. -When you do ask for a value, all the relevant definitions are gathered, -analyzed, and translated into separate functions and compiled. - -\xtc{ -Let's recall the definition of \userfun{eleven} from -\texht{the previous section}{ -\downlink{``\ugUserPieceBasicTitle''}{ugUserPieceBasicPage} -in Section \ugUserPieceBasicNumber\ignore{ugUserPieceBasic}}. -}{ -\spadpaste{eleven(n | n < 1) == n + 11\bound{ff0}} -} -\xtc{ -}{ -\spadpaste{eleven(m) == eleven(eleven(m - 12))\bound{ff1}\free{ff0}} -} - -A similar doubly-recursive function below produces \axiom{-11} for all -negative positive integers. -If you haven't worked out why or how \userfun{eleven} works, -the structure of this definition gives a clue. -\xtc{ -This definition we write as a block. -}{ -\begin{spadsrc}[\bound{rf1}] -minusEleven(n) == - n >= 0 => n - 11 - minusEleven (5 + minusEleven(n + 7)) -\end{spadsrc} -} -\xtc{ -Define \axiom{s(n)} to be the -sum of plus and minus ``eleven'' functions divided by \axiom{n}. -Since \axiom{11 - 11 = 0}, we define \axiom{s(0)} to be \axiom{1}. -}{ -\spadpaste{s(0) == 1\bound{rf2}} -} -\xtc{ -And the general term. -}{ -\spadpaste{s(n) == (eleven(n) + minusEleven(n))/n\bound{rf3}\free{rf2 rf1 ff1}} -} -\xtc{ -What are the first ten values of \axiom{s}? -}{ -\spadpaste{[s(n) for n in 0..]\free{rf3}} -} -%% interpreter puts the rule at the end - should fix -Axiom can create infinite streams in the positive direction (for -example, for index values \axiom{0,1, \ldots}) or negative direction (for -example, for index values \axiom{0,-1,-2, \ldots}). -Here we would like a stream of values of \axiom{s(n)} that is infinite in -both directions. -The function \axiom{t(n)} below returns the \eth{\axiom{n}} term of the infinite -stream \axiom{[s(0), s(1), s(-1), s(2), s(-2), \ldots].} -Its definition has three pieces. -\xtc{ -Define the initial term. -}{ -\spadpaste{t(1) == s(0)\bound{t1}\free{rf4}} -} -\xtc{ -The even numbered terms are the \axiom{s(i)} for positive \axiom{i}. -We use \axiomOp{quo} rather than \axiomOp{/} -since we want the result to be an integer. -}{ -\spadpaste{t(n | even?(n)) == s(n quo 2)\free{t1}\bound{t2}} -} -\xtc{ -Finally, the odd numbered terms are the -\axiom{s(i)} for negative \axiom{i}. -In piece-wise definitions, you can use different variables -to define different pieces. Axiom will not get confused. -}{ -\spadpaste{t(p) == s(- p quo 2)\free{t2}\bound{t3}} -} -\xtc{ -Look at the definition of \axiom{t}. -In the first piece, the variable \axiom{n} -was used; in the second piece, \axiom{p}. -Axiom always uses -your last variable to display your definitions -back to you. -}{ -\spadpaste{)display value t\free{t2}} -} -\xtc{ -Create a series of values of \axiom{s} applied to -alternating positive and negative arguments. -}{ -\spadpaste{[t(i) for i in 1..]\free{t3}\bound{t4}} -} -\xtc{ -Evidently \axiom{t(n) = 1} for all \axiom{i.} -Check it at \axiom{n= 100}. -}{ -\spadpaste{t(100)\free{t4}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserPiecePredTitle}{Predicates} -\newcommand{\ugUserPiecePredNumber}{6.11.3.} - -@ -\subsection{6.11.3. Predicates} -\label{ugUserPiecePredPage} -\begin{itemize} -\item ugUserPieceBasicPage \ref{ugUserPieceBasicPage} on -page~\pageref{ugUserPieceBasicPage} -ugLangItsPage -\end{itemize} -\index{pages!ugUserPiecePredPage!ug06.ht} -\index{ug06.ht!pages!ugUserPiecePredPage} -\index{ugUserPiecePredPage!ug06.ht!pages} -<>= -\begin{page}{ugUserPiecePredPage}{6.11.3. Predicates} -\beginscroll - -We have already seen some examples of -predicates -(\downlink{``\ugUserPieceBasicTitle''}{ugUserPieceBasicPage} -in Section \ugUserPieceBasicNumber\ignore{ugUserPieceBasic}). -Predicates are \axiomType{Boolean}-valued expressions and Axiom uses them -for filtering collections -(see \downlink{``\ugLangItsTitle''}{ugLangItsPage} -in Section \ugLangItsNumber\ignore{ugLangIts}) -and for placing -constraints on function arguments. -In this section we discuss their latter usage. - -\xtc{ -The simplest use of a predicate is one you don't see at all. -}{ -\spadpaste{opposite 'right == 'left} -} -\xtc{ -Here is a longer way to give the ``opposite definition.'' -}{ -\spadpaste{opposite (x | x = 'left) == 'right} -} -\xtc{ -Try it out. -}{ -\spadpaste{for x in ['right,'left,'inbetween] repeat output opposite x} -} - -Explicit predicates tell Axiom that the given function definition -piece is to be applied if the predicate evaluates to {\tt true} for the -arguments to the function. -You can use such ``constant'' arguments for integers, -strings, and quoted symbols. -The \axiomType{Boolean} values \axiom{true} and \axiom{false} can also be used -if qualified with ``\spad{@}'' or ``\spad{\$}'' and \axiomType{Boolean}. -The following are all valid function definition fragments using -constant arguments. +\subsection{Asp42 Example Code} +\label{Asp42ExampleCode} +\index{pages!Asp42ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp42ExampleCode} +\index{Asp42ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp42ExampleCode}{Asp42 Example Code} \begin{verbatim} -a(1) == ... -b("unramified") == ... -c('untested) == ... -d(true@Boolean) == ... + SUBROUTINE G(EPS,YA,YB,BC,N) + DOUBLE PRECISION EPS,YA(N),YB(N),BC(N) + INTEGER N + BC(1)=YA(1) + BC(2)=YA(2) + BC(3)=YB(2)-1.0D0 + RETURN + END + SUBROUTINE JACOBG(EPS,YA,YB,AJ,BJ,N) + DOUBLE PRECISION EPS,YA(N),AJ(N,N),BJ(N,N),YB(N) + INTEGER N + AJ(1,1)=1.0D0 + AJ(1,2)=0.0D0 + AJ(1,3)=0.0D0 + AJ(2,1)=0.0D0 + AJ(2,2)=1.0D0 + AJ(2,3)=0.0D0 + AJ(3,1)=0.0D0 + AJ(3,2)=0.0D0 + AJ(3,3)=0.0D0 + BJ(1,1)=0.0D0 + BJ(1,2)=0.0D0 + BJ(1,3)=0.0D0 + BJ(2,1)=0.0D0 + BJ(2,2)=0.0D0 + BJ(2,3)=0.0D0 + BJ(3,1)=0.0D0 + BJ(3,2)=1.0D0 + BJ(3,3)=0.0D0 + RETURN + END + SUBROUTINE JACGEP(EPS,YA,YB,BCEP,N) + DOUBLE PRECISION EPS,YA(N),YB(N),BCEP(N) + INTEGER N + BCEP(1)=0.0D0 + BCEP(2)=0.0D0 + BCEP(3)=0.0D0 + RETURN + END \end{verbatim} - -If a function has more than one argument, -each argument can have its own predicate. -However, if a predicate involves two or more arguments, it must be given -{\it after} all the arguments mentioned in the predicate have been given. -You are always safe to give -a single predicate at the end of the argument list. -\xtc{ -A function involving predicates on two arguments. -}{ -\spadpaste{inFirstHalfQuadrant(x | x > 0,y | y < x) == true} -} -\xtc{ -This is incorrect as it gives a predicate on \axiom{y} -before the argument \axiom{y} is given. -}{ -\spadpaste{inFirstHalfQuadrant(x | x > 0 and y < x,y) == true} -} -\xtc{ -It is always correct to write the predicate at the end. -}{ -\spadpaste{inFirstHalfQuadrant(x,y | x > 0 and y < x) == true \bound{ifq1a}} -} -\xtc{ -Here is the rest of the definition. -}{ -\spadpaste{inFirstHalfQuadrant(x,y) == false \bound{ifq1b}} -} -\xtc{ -Try it out. -}{ -\spadpaste{[inFirstHalfQuadrant(i,3) for i in 1..5]\bound{ifq1b}} -} - -{\bf Remark:} Very old versions of Axiom allowed predicates -to be given after a {\tt when} keyword as in -{\tt inFirstHalfQuadrant(x ,y) == true when x >0 and y < x}. -This is no longer supported, is WRONG, and will cause a syntax -error or strange behavior. - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugUserCacheTitle}{Caching Previously Computed Results} -\newcommand{\ugUserCacheNumber}{6.12.} - -@ -\subsection{6.12. Caching Previously Computed Results} -\label{ugUserCachePage} -\begin{itemize} -\item ugUserFreeLocalPage \ref{ugUserFreeLocalPage} on -page~\pageref{ugUserFreeLocalPage} -\end{itemize} -\index{pages!ugUserCachePage!ug06.ht} -\index{ug06.ht!pages!ugUserCachePage} -\index{ugUserCachePage!ug06.ht!pages} -<>= -\begin{page}{ugUserCachePage}{6.12. Caching Previously Computed Results} -\beginscroll - -By default, Axiom does not save the values of any function. -You can cause it to save values and not to recompute unnecessarily -by using \spadcmd{)set functions cache}. -This should be used before the functions are defined or, at least, before -they are executed. -The word following ``cache'' should be \axiom{0} to turn off -caching, a positive integer \axiom{n} to save the last \axiom{n} -computed values or ``all'' to save all computed values. -If you then give a list of names of functions, the caching -only affects those functions. -Use no list of names or ``all'' when you want to define the default -behavior for functions not specifically mentioned in other -\spadcmd{)set functions cache} statements. -If you give no list of names, all functions will have the caching behavior. -If you explicitly turn on caching for one or more names, you must -explicitly turn off caching for those names when you want to stop -saving their values. - -\xtc{ -This causes the functions \userfun{f} and \userfun{g} to have -the last three computed values saved. -}{ -\spadpaste{)set functions cache 3 f g \bound{cache}} -} -\xtc{ -This is a sample definition for \userfun{f}. -}{ -\spadpaste{f x == factorial(2**x) \bound{fdef}\free{cache}} -} -\xtc{ -A message is displayed stating what \userfun{f} will cache. -}{ -\spadpaste{f(4) \free{}\free{cache}} -} -\xtc{ -This causes all other functions to have all computed values saved by -default. -}{ -\spadpaste{)set functions cache all} -} -\xtc{ -This causes all functions that have not been specifically cached in some way -to have no computed values saved. -}{ -\spadpaste{)set functions cache 0} -} -\xtc{ -We also make \userfun{f} and \userfun{g} uncached. -}{ -\spadpaste{)set functions cache 0 f g} -} - -\beginImportant -Be careful about caching functions that have -\spadglossSee{side effects}{side effect}. -Such a function might destructively modify the elements of an array or -issue a \axiomFun{draw} command, for example. -A function that you expect to execute every time it is called should -not be cached. -Also, it is highly unlikely that a function with no arguments should -be cached. -\endImportant - -You should also be careful about caching functions that depend on -free variables. -See \downlink{``\ugUserFreeLocalTitle''}{ugUserFreeLocalPage} in -Section \ugUserFreeLocalNumber\ignore{ugUserFreeLocal} -for an example. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserRecurTitle}{Recurrence Relations} -\newcommand{\ugUserRecurNumber}{6.13.} - -@ -\subsection{6.13. Recurrence Relations} -\label{ugUserRecurPage} -\begin{itemize} -\item ugUserFreeLocalPage \ref{ugUserFreeLocalPage} on -page~\pageref{ugUserFreeLocalPage} -\item ugUserCachePage \ref{ugUserCachePage} on -page~\pageref{ugUserCachePage} -\end{itemize} -\index{pages!ugUserRecurPage!ug06.ht} -\index{ug06.ht!pages!ugUserRecurPage} -\index{ugUserRecurPage!ug06.ht!pages} -<>= -\begin{page}{ugUserRecurPage}{6.13. Recurrence Relations} -\beginscroll - -One of the most useful classes of function are those defined via a -``recurrence relation.'' -A {\it recurrence relation} makes each successive -value depend on some or all of the previous values. -A simple example is the ordinary ``factorial'' function: -\begin{verbatim} -fact(0) == 1 -fact(n | n > 0) == n * fact(n-1) -\end{verbatim} - -The value of -\axiom{fact(10)} depends on the value of \axiom{fact(9)}, \axiom{fact(9)} -on \axiom{fact(8)}, and so on. -Because it depends on only one previous value, it is usually called a -{\it first order recurrence relation.} -You can easily imagine a function based on two, three or more previous -values. -The Fibonacci numbers are probably the most famous function defined by a -second order recurrence relation. -\xtc{ -The library function \axiomFun{fibonacci} computes Fibonacci numbers. -It is obviously optimized for speed. -}{ -\spadpaste{[fibonacci(i) for i in 0..]} -} -\xtc{ -Define the -Fibonacci numbers ourselves using a piece-wise definition. -}{ -\spadpaste{fib(1) == 1 \bound{fib0}} -} -\xtc{ -}{ -\spadpaste{fib(2) == 1 \bound{fib1}\free{fib0}} -} -\xtc{ -}{ -\spadpaste{fib(n) == fib(n-1) + fib(n-2) \bound{fibn}\free{fib1}} -} - -As defined, this recurrence relation is obviously doubly-recursive. -To compute \axiom{fib(10)}, we need to compute \axiom{fib(9)} and -\axiom{fib(8)}. -And to \axiom{fib(9)}, we need to compute \axiom{fib(8)} and -\axiom{fib(7)}. -And so on. -It seems that to compute \axiom{fib(10)} we need to compute -\axiom{fib(9)} once, \axiom{fib(8)} twice, \axiom{fib(7)} three times. -Look familiar? -The number of function calls needed to compute {\it any} second order -recurrence relation in the obvious way is exactly \axiom{fib(n)}. -These numbers grow! -For example, if Axiom actually did this, then \axiom{fib(500)} -requires more than \texht{$10^{104}$}{\axiom{10**104}} function calls. -And, given all this, our definition of \userfun{fib} obviously could not be -used to calculate the five-hundredth Fibonacci number. -\xtc{ -Let's try it anyway. -}{ -\spadpaste{fib(500) \free{fibn}} -} - -Since this takes a short time to compute, it obviously didn't do -as many as \texht{$10^{104}$}{\axiom{10**104}} operations! -By default, Axiom transforms any recurrence relation it recognizes -into an iteration. -Iterations are efficient. -To compute the value of the \eth{\axiom{n}} -term of a recurrence relation using an iteration requires only -\axiom{n} function calls.\footnote{If -you compare the speed of our \userfun{fib} function -to the library function, our version is still slower. -This is because the library -\axiomFunFrom{fibonacci}{IntegerNumberTheoryFunctions} -uses a ``powering algorithm'' with a computing time -proportional to \texht{$\log^3(n)$}{\axiom{log(n)**3}} to compute -\axiom{fibonacci(n).}} - -To turn off this special recurrence relation compilation, issue +\subsection{Asp49 Example Code} +\label{Asp49ExampleCode} +\index{pages!Asp49ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp49ExampleCode} +\index{Asp49ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp49ExampleCode}{Asp49 Example Code} \begin{verbatim} -)set functions recurrence off + SUBROUTINE OBJFUN(MODE,N,X,OBJF,OBJGRD,NSTATE,IUSER,USER) + DOUBLE PRECISION X(N),OBJF,OBJGRD(N),USER(*) + INTEGER N,IUSER(*),MODE,NSTATE + OBJF=X(4)*X(9)+((-1.0D0*X(5))+X(3))*X(8)+((-1.0D0*X(3))+X(1))*X(7) + &+(-1.0D0*X(2)*X(6)) + OBJGRD(1)=X(7) + OBJGRD(2)=-1.0D0*X(6) + OBJGRD(3)=X(8)+(-1.0D0*X(7)) + OBJGRD(4)=X(9) + OBJGRD(5)=-1.0D0*X(8) + OBJGRD(6)=-1.0D0*X(2) + OBJGRD(7)=(-1.0D0*X(3))+X(1) + OBJGRD(8)=(-1.0D0*X(5))+X(3) + OBJGRD(9)=X(4) + RETURN + END \end{verbatim} -To turn it back on, substitute ``{\tt on}'' for ``{\tt off}''. - -The transformations that Axiom uses for \userfun{fib} caches the -last two values.\footnote{For a more general \eth{\axiom{k}} order recurrence -relation, Axiom caches the last \axiom{k} values.} -If, after computing a value for \userfun{fib}, you ask -for some larger value, Axiom picks up the cached values -and continues computing from there. -See \downlink{``\ugUserFreeLocalTitle''}{ugUserFreeLocalPage} -in Section \ugUserFreeLocalNumber\ignore{ugUserFreeLocal} -for an example of a function definition that has this same behavior. -Also see \downlink{``\ugUserCacheTitle''}{ugUserCachePage} -in Section \ugUserCacheNumber\ignore{ugUserCache} -for a more general discussion of how you can cache function values. - -Recurrence relations can be used for defining recurrence relations -involving polynomials, rational functions, or anything you like. -Here we compute the infinite stream of Legendre polynomials. -\xtc{ -The Legendre polynomial of degree \axiom{0.} -}{ -\spadpaste{p(0) == 1\bound{p0}} -} -\xtc{ -The Legendre polynomial of degree \axiom{1.} -}{ -\spadpaste{p(1) == x\bound{p1}} -} - -\xtc{ -The Legendre polynomial of degree \axiom{n}. -}{ -\spadpaste{p(n) == ((2*n-1)*x*p(n-1) - (n-1)*p(n-2))/n\bound{pn}\free{p1}} -} -\xtc{ -Compute the Legendre polynomial of degree \axiom{6.} -}{ -\spadpaste{p(6)\free{pn}} -} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugUserMakeTitle}{Making Functions from Objects} -\newcommand{\ugUserMakeNumber}{6.14.} - -@ -\subsection{6.14. Making Functions from Objects} -\label{ugUserMakePage} -\begin{itemize} -\item MakeFunctionXmpPage \ref{MakeFunctionXmpPage} on -page~\pageref{MakeFunctionXmpPage} -\end{itemize} -\index{pages!ugUserMakePage!ug06.ht} -\index{ug06.ht!pages!ugUserMakePage} -\index{ugUserMakePage!ug06.ht!pages} -<>= -\begin{page}{ugUserMakePage}{6.14. Making Functions from Objects} -\beginscroll - -There are many times when you compute a complicated expression -and then wish to use that expression as the body of a function. -Axiom provides an operation called \axiomFun{function} to do -this. -It creates a function object and places it into the workspace. -There are several versions, depending on how many arguments the function -has. -The first argument to \axiomFun{function} is always the expression to be -converted into the function body, and the second is always the name to be -used for the function. -For more information, see \downlink{`MakeFunction'}{MakeFunctionXmpPage} -\ignore{MakeFunction}. - -\xtc{ -Start with a simple example of a polynomial in three variables. -}{ -\spadpaste{p := -x + y**2 - z**3 \bound{p}} -} -\xtc{ -To make this into a function of no arguments that -simply returns the polynomial, use the two argument form of -\axiomFun{function}. -}{ -\spadpaste{function(p,'f0) \free{p}\bound{f0}} -} -\xtc{ -To avoid possible conflicts (see below), it is a good idea to -quote always this second argument. -}{ -\spadpaste{f0 \free{f0}} -} -\xtc{ -This is what you get when you evaluate the function. -}{ -\spadpaste{f0() \free{f0}} -} -\xtc{ -To make a function in \axiom{x}, use a version of -\axiomFun{function} that takes three arguments. -The last argument is the name of the variable to use as the parameter. -Typically, this variable occurs in the expression and, like the function -name, you should quote it to avoid possible confusion. -}{ -\spadpaste{function(p,'f1,'x) \free{p}\bound{f1}} -} -\xtc{ -This is what the new function looks like. -}{ -\spadpaste{f1 \free{f1}} -} -\xtc{ -This is the value of \userfun{f1} at \axiom{x = 3}. -Notice that the return type of the function is -\axiomType{Polynomial (Integer)}, the same as \axiom{p}. -}{ -\spadpaste{f1(3) \free{f1}} -} -\xtc{ -To use \axiom{x} and \axiom{y} as parameters, use the -four argument form of \axiomFun{function}. -}{ -\spadpaste{function(p,'f2,'x,'y) \free{p}\bound{f2}} -} -\xtc{ -}{ -\spadpaste{f2 \free{f2}} -} -\xtc{ -Evaluate \axiom{f2} at \axiom{x = 3} and \axiom{y = 0}. -The return type of \userfun{f2} is still -\axiomType{Polynomial(Integer)} because the variable \axiom{z} -is still present and not one of the parameters. -}{ -\spadpaste{f2(3,0) \free{f2}} -} -\xtc{ -Finally, use all three variables as parameters. -There is no five argument form of \axiomFun{function}, so use the one with -three arguments, the third argument being a list of the parameters. -}{ -\spadpaste{function(p,'f3,['x,'y,'z]) \free{p}\bound{f3}} -} -\xtc{ -Evaluate this using the same values for \axiom{x} and \axiom{y} -as above, but let \axiom{z} be \axiom{-6}. -The result type of \userfun{f3} is \axiomType{Integer}. -}{ -\spadpaste{f3 \free{f3}} -} -\xtc{ -}{ -\spadpaste{f3(3,0,-6) \free{f3}} -} - -The four functions we have defined via \axiom{p} have been undeclared. -To declare a function whose body is to be generated by -\axiomFun{function}, -issue the declaration {\it before} the function is created. -\xtc{ -}{ -\spadpaste{g: (Integer, Integer) -> Float \bound{g}} -} -\xtc{ -}{ -\spadpaste{D(sin(x-y)/cos(x+y),x) \bound{prev}} -} -\xtc{ -}{ -\spadpaste{function(\%,'g,'x,'y) \free{g}\free{prev}} -} -\xtc{ -}{ -\spadpaste{g \free{g}} -} -It is an error to use \axiom{g} without the quote in the -penultimate expression since \axiom{g} had been declared but did not have -a value. -Similarly, since it is common to overuse variable names like \axiom{x}, -\axiom{y}, and so on, -you avoid problems if you always quote the variable names -for \axiomFun{function}. -In general, -if \axiom{x} has a value and you use \axiom{x} without a quote in a call to -\axiomFun{function}, then -Axiom does not know what you are trying to do. - -What kind of object is allowable as the first argument to \axiomFun{function}? -Let's use the \Browse{} facility of \HyperName{} to find out. -At the main \Browse{} menu, enter the string {\tt function} and then -click on {\bf Operations.} -The exposed operations called \axiomFun{function} all take an object -whose type belongs to category \axiomType{ConvertibleTo InputForm}. -What domains are those? -Go back to the main \Browse{} menu, erase {\tt function}, -enter {\tt ConvertibleTo} in the -input area, and click on {\bf categories} on the {\bf Constructors} line. -At the bottom of the page, enter {\tt InputForm} in the input area -following {\bf S =}. -Click on {\bf Cross Reference} and then on {\bf Domains}. -The list you see contains over forty domains that belong to the -category \axiomType{ConvertibleTo InputForm}. -Thus you can use \axiomFun{function} for \axiomType{Integer}, -\axiomType{Float}, -\axiomType{String}, -\axiomType{Complex}, -\axiomType{Expression}, and so on. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserBlocksTitle}{Functions Defined with Blocks} -\newcommand{\ugUserBlocksNumber}{6.15.} - -@ -\subsection{6.15. Functions Defined with Blocks} -\label{ugUserBlocksPage} -\begin{itemize} -\item ugLangBlocksPage \ref{ugLangBlocksPage} on -page~\pageref{ugLangBlocksPage} -\end{itemize} -\index{pages!ugUserBlocksPage!ug06.ht} -\index{ug06.ht!pages!ugUserBlocksPage} -\index{ugUserBlocksPage!ug06.ht!pages} -<>= -\begin{page}{ugUserBlocksPage}{6.15. Functions Defined with Blocks} -\beginscroll - -You need not restrict yourself to functions that only fit on one line -or are written in a piece-wise manner. -The body of the function can be a block, as discussed in -\downlink{``\ugLangBlocksTitle''}{ugLangBlocksPage} -in Section \ugLangBlocksNumber\ignore{ugLangBlocks}. - -\labelSpace{1pc} -\xtc{ -Here is a short function that swaps two elements of a list, -array or vector. -}{ -\begin{spadsrc}[\bound{swap}] -swap(m,i,j) == - temp := m.i - m.i := m.j - m.j := temp -\end{spadsrc} -} -\xtc{ -The significance of \userfun{swap} is that it has a destructive -effect on its first argument. -}{ -\spadpaste{k := [1,2,3,4,5] \bound{k}} -} -\xtc{ -}{ -\spadpaste{swap(k,2,4) \free{l swap}\bound{swapk}} -} -\xtc{ -You see that the second and fourth elements are interchanged. -}{ -\spadpaste{k \free{swapk}} -} - -\xtc{ -Using this, we write a couple of different sort functions. -First, a simple bubble sort. -The operation \axiomOpFrom{\#}{List} returns the number of elements in -an aggregate. -}{ -\begin{spadsrc}[\bound{bubbleSort}] -bubbleSort(m) == - n := #m - for i in 1..(n-1) repeat - for j in n..(i+1) by -1 repeat - if m.j < m.(j-1) then swap(m,j,j-1) - m -\end{spadsrc} -} -\xtc{ -Let this be the list we want to sort. -}{ -\spadpaste{m := [8,4,-3,9] \bound{m}} -} -\xtc{ -This is the result of sorting. -}{ -\spadpaste{bubbleSort(m) \free{m swap bubbleSort}\bound{sortm}} -} -\xtc{ -Moreover, \axiom{m} is destructively changed to be the sorted version. -}{ -\spadpaste{m \free{sortm}} -} - -\xtc{ -This function implements an insertion sort. -The basic idea is to traverse the list and insert the \eth{\axiom{i}} -element in its correct position among the \axiom{i-1} previous -elements. -Since we start at the beginning of the list, the list elements before the -\eth{\axiom{i}} element have already been placed in ascending order. -}{ -\begin{spadsrc}[\bound{insertionSort}] -insertionSort(m) == - for i in 2..#m repeat - j := i - while j > 1 and m.j < m.(j-1) repeat - swap(m,j,j-1) - j := j - 1 - m -\end{spadsrc} -} -\xtc{ -As with our bubble sort, this is a destructive function. -}{ -\spadpaste{m := [8,4,-3,9] \bound{m1}} -} -\xtc{ -}{ -\spadpaste{insertionSort(m) \free{m1 swap insertionSort}\bound{sortm1}} -} -\xtc{ -}{ -\spadpaste{m \free{sortm1}} -} - -Neither of the above functions is efficient for sorting large lists since -they reference elements by asking for the \eth{\axiom{j}} element of the -structure \axiom{m}. -%For lists, compute \axiom{m.(j+1) = rest(m,j).first}, and thus, starting at -%the first node of \axiom{m}, walk down to the \eth{\axiom{j}} node, then call -%\axiomFun{first}. - -\xtc{ -Here is a more efficient bubble sort for lists. -}{ -\begin{spadsrc}[\bound{bubbleSort2}] -bubbleSort2(m: List Integer): List Integer == - null m => m - l := m - while not null (r := l.rest) repeat - r := bubbleSort2 r - x := l.first - if x < r.first then - l.first := r.first - r.first := x - l.rest := r - l := l.rest - m -\end{spadsrc} -} -\xtc{ -Try it out. -}{ -\spadpaste{bubbleSort2 [3,7,2]\free{bubbleSort2}} -} - -This definition is both recursive and iterative, and is tricky! -Unless you are {\it really} curious about this definition, -we suggest you skip immediately to the next section. - -Here are the key points in the definition. -First notice that if you are sorting a list with less than two elements, -there is nothing to do: just return the list. -This definition returns immediately if there are zero elements, and skips -the entire \axiom{while} loop if there is just one element. - -The second point to realize is that on each outer iteration, the bubble sort -ensures that the minimum element is propagated leftmost. -Each iteration of the \axiom{while} loop calls \userfun{bubbleSort2} -recursively to sort all but the first element. -When finished, the minimum element is either in the first or second position. -The conditional expression ensures that it comes first. -If it is in the second, then a swap occurs. -In any case, the \axiomFun{rest} of the original list must be updated to hold -the result of the recursive call. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserFreeLocalTitle}{Free and Local Variables} -\newcommand{\ugUserFreeLocalNumber}{6.16.} - -@ -\subsection{6.16. Free and Local Variables} -\label{ugUserFreeLocalPage} -\begin{itemize} -\item ugUserCachePage \ref{ugUserCachePage} on -page~\pageref{ugUserCachePage} -\item ugUserRecurPage \ref{ugUserRecurPage} on -page~\pageref{ugUserRecurPage} -\end{itemize} -\index{pages!ugUserFreeLocalPage!ug06.ht} -\index{ug06.ht!pages!ugUserFreeLocalPage} -\index{ugUserFreeLocalPage!ug06.ht!pages} -<>= -\begin{page}{ugUserFreeLocalPage}{6.16. Free and Local Variables} -\beginscroll - -When you want to refer to a variable that is not local to your -function, use a ``\axiom{free}'' declaration. -\spadkey{free} -Variables declared to be \axiom{free} -are assumed to be defined globally -in the -workspace. - -\labelSpace{1pc} -\xtc{ -This is a global workspace variable. -}{ -\spadpaste{counter := 0 \bound{counter}} -} -\xtc{ -This function refers to the global \axiom{counter}. -}{ -\begin{spadsrc}[\free{counter}\bound{f}] -f() == - free counter - counter := counter + 1 -\end{spadsrc} -} -\xtc{ -The global \axiom{counter} is incremented by \axiom{1}. -}{ -\spadpaste{f() \free{f}\bound{f1}} -} -\xtc{ -}{ -\spadpaste{counter \free{f1}} -} - -Usually Axiom can tell that you mean to refer to a global -variable and so \axiom{free} isn't always necessary. -However, for clarity and the sake of self-documentation, we encourage -you to use it. - -Declare a variable to be ``\axiom{local}'' when you do not want to refer to -a global variable by the same name. - -\xtc{ -This function uses \axiom{counter} as a local variable. -}{ -\begin{spadsrc}[\bound{g}] -g() == - local counter - counter := 7 -\end{spadsrc} -} -\xtc{ -Apply the function. -}{ -\spadpaste{g() \free{g}} -} -\xtc{ -Check that the global value of \axiom{counter} is unchanged. -}{ -\spadpaste{counter\free{g f1}} -} - -Parameters to a function are local variables in the function. -Even if you issue a \axiom{free} declaration for a parameter, it is -still local. - -What happens if you do not declare that a variable \axiom{x} in -the body of your function is \axiom{local} or \axiom{free}? -Well, Axiom decides on this basis: - -\indent{4} -\beginitems -\item[1. ] Axiom scans your function line-by-line, from top-to-bottom. -The right-hand side of an assignment is looked at before the left-hand -side. -\item[2. ] If \axiom{x} is referenced before it is assigned a value, it is a -\axiom{free} (global) variable. -\item[3. ] If \axiom{x} is assigned a value before it is referenced, it is a -\axiom{local} variable. -\enditems -\indent{0} - -\xtc{ -Set two global variables to 1. -}{ -\spadpaste{a := b := 1\bound{ab1}} -} -\xtc{ -Refer to \axiom{a} before it is assigned a value, but -assign a value to \axiom{b} before it is referenced. -}{ -\begin{spadsrc}[\bound{hh}] -h() == - b := a + 1 - a := b + a -\end{spadsrc} -} -\xtc{ -Can you predict this result? -}{ -\spadpaste{h() \free{ab1 hh}\bound{hhh}} -} -\xtc{ -How about this one? -}{ -\spadpaste{[a, b] \free{hhh}} -} - -What happened? -In the first line of the function body for \axiom{h}, \axiom{a} is -referenced on the right-hand side of the assignment. -Thus \axiom{a} is a free variable. -The variable \axiom{b} is not referenced in that line, but it is -assigned a value. -Thus \axiom{b} is a local variable and is given the value -\axiom{a + 1 = 2}. -In the second line, the free variable \axiom{a} is assigned the value -\axiom{b + a}which equals \axiom{2 + 1 = 3.} -This is the value returned by the function. -Since \axiom{a} was free in \userfun{h}, the global variable \axiom{a} -has value \axiom{3.} -Since \axiom{b} was local in \userfun{h}, the global variable \axiom{b} -is unchanged---it still has the value \axiom{1.} - -It is good programming practice always to declare global variables. -However, by far the most common situation is to have local variables in -your functions. -No declaration is needed for this situation, but be sure to -initialize their values. - -Be careful if you use free variables and you cache the value of -your function (see \downlink{``\ugUserCacheTitle''}{ugUserCachePage} -in Section \ugUserCacheNumber\ignore{ugUserCache}). -Caching {\it only} checks if the values of the function arguments -are the same as in a function call previously seen. -It does not check if any of the free variables on which the -function depends have changed between function calls. -\xtc{ -Turn on caching for \userfun{p}. -}{ -\spadpaste{)set fun cache all p \bound{pcache}} -} -\xtc{ -Define \userfun{p} to depend on the free variable \axiom{N}. -}{ -\spadpaste{p(i,x) == ( free N; reduce( + , [ (x-i)**n for n in 1..N ] ) ) \free{pcache}\bound{pdef}} -} -\xtc{ -Set the value of \axiom{N}. -}{ -\spadpaste{N := 1 \bound{Nass}} -} -\xtc{ -Evaluate \userfun{p} the first time. -}{ -\spadpaste{p(0, x) \free{pdef Nass}\bound{pfirst}} -} -\xtc{ -Change the value of \axiom{N}. -}{ -\spadpaste{N := 2 \bound{Nass2}} -} -\xtc{ -Evaluate \userfun{p} the second time. -}{ -\spadpaste{p(0, x) \free{pfirst Nass2}} -} -If caching had been turned off, the second evaluation would have -reflected the changed value of \axiom{N}. -\xtc{ -Turn off caching for \userfun{p}. -}{ -\spadpaste{)set fun cache 0 p} -} - -Axiom does not allow {\it fluid variables}, that is, variables -\spadglossSee{bound}{binding} by a function \spad{f} that can be referenced by -functions called by \spad{f}. - -Values are passed to functions by \spadgloss{reference}: a pointer -to the value is passed rather than a copy of the value or a pointer to -a copy. - -\xtc{ -This is a global variable that is bound to a record object. -}{ -\spadpaste{r : Record(i : Integer) := [1] \free{r}} -} -\xtc{ -This function first modifies the one component of its -record argument and then rebinds the parameter to another -record. -}{ -\begin{spadsrc}[\bound{resetRecord}] -resetRecord rr == - rr.i := 2 - rr := [10] -\end{spadsrc} -} -\xtc{ -Pass \axiom{r} as an argument to \userfun{resetRecord}. -}{ -\spadpaste{resetRecord r \free{r resetRecord}\bound{rr}} -} -\xtc{ -The value of \axiom{r} was changed by the expression -\axiom{rr.i := 2} but not by \axiom{rr := [10]}. -}{ -\spadpaste{r \free{rr}} -} - -To conclude this section, we give an iterative definition of -a function that computes Fibonacci numbers. -This definition approximates the definition into which Axiom -transforms the recurrence relation definition of \userfun{fib} in -\downlink{``\ugUserRecurTitle''}{ugUserRecurPage} -in Section \ugUserRecurNumber\ignore{ugUserRecur}. - -\xtc{ -Global variables -\axiom{past} and \axiom{present} are used -to hold the last computed Fibonacci numbers. -}{ -\spadpaste{past := present := 1\bound{f0}} -} -\xtc{ -Global variable \axiom{index} gives the -current index of \axiom{present}. -}{ -\spadpaste{index := 2\bound{f1}\free{f0}} -} -\xtc{ -Here is a recurrence relation defined in terms -of these three global variables. -}{ -\begin{spadsrc}[\bound{f3}\free{f2}] -fib(n) == - free past, present, index - n < 3 => 1 - n = index - 1 => past - if n < index-1 then - (past,present) := (1,1) - index := 2 - while (index < n) repeat - (past,present) := (present, past+present) - index := index + 1 - present -\end{spadsrc} -} -\xtc{ -Compute the infinite stream of Fibonacci numbers. -}{ -\spadpaste{fibs := [fib(n) for n in 1..] \bound{fibs}\free{f3}} -} -\xtc{ -What is the 1000th Fibonacci number? -}{ -\spadpaste{fibs 1000 \free{fibs}} -} - -As an exercise, we suggest you write a function in an iterative -style that computes the value of the recurrence relation -\texht{$p(n) = p(n-1) - 2 \, p(n-2) + 4 \, p(n-3)$}{\axiom{p(n) = p(n-1) - 2*p(n-2) + 4*p(n-3)}} -having the initial values -\texht{$p(1) = 1,\, p(2) = 3 \hbox{ and } p(3) = 9.$}{\axiom{p(1) = 1, p(2) = 3 {\rm and} p(3) = 9.}} -How would you write the function using an element -\axiomType{OneDimensionalArray} or \axiomType{Vector} -to hold the previously computed values? - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserAnonTitle}{Anonymous Functions} -\newcommand{\ugUserAnonNumber}{6.17.} - -@ -\subsection{6.17. Anonymous Functions} -\label{ugUserAnonPage} -\begin{itemize} -\item ugUserAnonExampPage \ref{ugUserAnonExampPage} on -page~\pageref{ugUserAnonExampPage} -\item ugUserAnonDeclarePage \ref{ugUserAnonDeclarePage} on -page~\pageref{ugUserAnonDeclarePage} -\end{itemize} -\index{pages!ugUserAnonPage!ug06.ht} -\index{ug06.ht!pages!ugUserAnonPage} -\index{ugUserAnonPage!ug06.ht!pages} -<>= -\begin{page}{ugUserAnonPage}{6.17. Anonymous Functions} -\beginscroll - -\beginImportant -An {\it anonymous function} is a function that is -defined -by giving a list of parameters, the ``maps-to'' compound -symbol \axiomSyntax{+->} \texht{(from the mathematical symbol -$\mapsto$)}{}, -and by an expression involving the parameters, the evaluation of -which determines the return value of the function. - -\centerline{{{\tt ( \subscriptIt{parm}{1}, \subscriptIt{parm}{2}, \ldots, \subscriptIt{parm}{N} ) +-> {\it expression}}}} -\endImportant - -You can apply an anonymous function in several ways. -\indent{4} -\beginitems -\item[1. ] Place the anonymous function definition in parentheses -directly followed by a list of arguments. -\item[2. ] Assign the anonymous function to a variable and then -use the variable name when you would normally use a function name. -\item[3. ] Use \axiomSyntax{==} to use the anonymous function definition as -the arguments and body of a regular function definition. -\item[4. ] Have a named function contain a declared anonymous function and -use the result returned by the named function. -\enditems -\indent{0} - -\beginmenu - \menudownlink{{6.17.1. Some Examples}}{ugUserAnonExampPage} - \menudownlink{{6.17.2. Declaring Anonymous Functions}} -{ugUserAnonDeclarePage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserAnonExampTitle}{Some Examples} -\newcommand{\ugUserAnonExampNumber}{6.17.1.} - -@ -\subsection{6.17.1. Some Examples} -\label{ugUserAnonExampPage} -\index{pages!ugUserAnonExampPage!ug06.ht} -\index{ug06.ht!pages!ugUserAnonExampPage} -\index{ugUserAnonExampPage!ug06.ht!pages} -<>= -\begin{page}{ugUserAnonExampPage}{6.17.1. Some Examples} -\beginscroll - -Anonymous functions are particularly useful for defining functions -``on the fly.'' That is, they are handy for simple functions that -are used only in one place. -In the following examples, we show how to write some simple -anonymous functions. - -\xtc{ -This is a simple absolute value function. -}{ -\spadpaste{x +-> if x < 0 then -x else x \bound{anon0}} -} -\xtc{ -}{ -\spadpaste{abs1 := \% \free{anon0}\bound{abs1}} -} -\xtc{ -This function returns {\tt true} if the absolute value of -the first argument is greater than the absolute value of the -second, {\tt false} otherwise. -}{ -\spadpaste{(x,y) +-> abs1(x) > abs1(y) \bound{anon1}\free{abs1}} -} -\xtc{ -We use the above function to ``sort'' a list of integers. -}{ -\spadpaste{sort(\%,[3,9,-4,10,-3,-1,-9,5]) \free{anon1}} -} - -\xtc{ -This function returns \axiom{1} if \axiom{i + j} is even, \axiom{-1} otherwise. -}{ -\spadpaste{ev := ( (i,j) +-> if even?(i+j) then 1 else -1) \bound{ev}} -} -\xtc{ -We create a four-by-four matrix containing \axiom{1} or \axiom{-1} -depending on whether the row plus the column index is even or not. -}{ -\spadpaste{matrix([[ev(row,col) for row in 1..4] for col in 1..4]) \free{ev}} -} - -\xtc{ -This function returns {\tt true} if a polynomial in \axiom{x} has multiple -roots, {\tt false} otherwise. -It is defined and applied in the same expression. -}{ -\spadpaste{( p +-> not one?(gcd(p,D(p,x))) )(x**2+4*x+4)} -} - -\xtc{ -This and the next expression are equivalent. -}{ -\spadpaste{g(x,y,z) == cos(x + sin(y + tan(z)))} -} -\xtc{ -The one you use is a matter of taste. -}{ -\spadpaste{g == (x,y,z) +-> cos(x + sin(y + tan(z)))} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserAnonDeclareTitle}{Declaring Anonymous Functions} -\newcommand{\ugUserAnonDeclareNumber}{6.17.2.} - -@ -\subsection{6.17.2. Declaring Anonymous Functions} -\label{ugUserAnonDeclarePage} -\index{pages!ugUserAnonDeclarePage!ug06.ht} -\index{ug06.ht!pages!ugUserAnonDeclarePage} -\index{ugUserAnonDeclarePage!ug06.ht!pages} -<>= -\begin{page}{ugUserAnonDeclarePage}{6.17.2. Declaring Anonymous Functions} -\beginscroll - -If you declare any of the arguments you must declare all of them. -Thus, -\begin{verbatim} -(x: INT,y): FRAC INT +-> (x + 2*y)/(y - 1) -\end{verbatim} -is not legal. - -\xtc{ -This is an example of a fully declared anonymous -function. -The output shown just indicates that the object you created is a -particular kind of map, that is, function. -}{ -\spadpaste{(x: INT,y: INT): FRAC INT +-> (x + 2*y)/(y - 1)} -} -\xtc{ -Axiom allows you to declare the arguments and not declare -the return type. -}{ -\spadpaste{(x: INT,y: INT) +-> (x + 2*y)/(y - 1)} -} -The return type is computed from the types of the arguments and the -body of the function. -You cannot declare the return type if you do not declare the arguments. -Therefore, +\subsection{Asp50 Example Code} +\label{Asp50ExampleCode} +\index{pages!Asp50ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp50ExampleCode} +\index{Asp50ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp50ExampleCode}{Asp50 Example Code} \begin{verbatim} -(x,y): FRAC INT +-> (x + 2*y)/(y - 1) + SUBROUTINE LSFUN1(M,N,XC,FVECC) + DOUBLE PRECISION FVECC(M),XC(N) + INTEGER I,M,N + FVECC(1)=((XC(1)-2.4D0)*XC(3)+(15.0D0*XC(1)-36.0D0)*XC(2)+1.0D0)/( + &XC(3)+15.0D0*XC(2)) + FVECC(2)=((XC(1)-2.8D0)*XC(3)+(7.0D0*XC(1)-19.6D0)*XC(2)+1.0D0)/(X + &C(3)+7.0D0*XC(2)) + FVECC(3)=((XC(1)-3.2D0)*XC(3)+(4.333333333333333D0*XC(1)-13.866666 + &66666667D0)*XC(2)+1.0D0)/(XC(3)+4.333333333333333D0*XC(2)) + FVECC(4)=((XC(1)-3.5D0)*XC(3)+(3.0D0*XC(1)-10.5D0)*XC(2)+1.0D0)/(X + &C(3)+3.0D0*XC(2)) + FVECC(5)=((XC(1)-3.9D0)*XC(3)+(2.2D0*XC(1)-8.579999999999998D0)*XC + &(2)+1.0D0)/(XC(3)+2.2D0*XC(2)) + FVECC(6)=((XC(1)-4.199999999999999D0)*XC(3)+(1.666666666666667D0*X + &C(1)-7.0D0)*XC(2)+1.0D0)/(XC(3)+1.666666666666667D0*XC(2)) + FVECC(7)=((XC(1)-4.5D0)*XC(3)+(1.285714285714286D0*XC(1)-5.7857142 + &85714286D0)*XC(2)+1.0D0)/(XC(3)+1.285714285714286D0*XC(2)) + FVECC(8)=((XC(1)-4.899999999999999D0)*XC(3)+(XC(1)-4.8999999999999 + &99D0)*XC(2)+1.0D0)/(XC(3)+XC(2)) + FVECC(9)=((XC(1)-4.699999999999999D0)*XC(3)+(XC(1)-4.6999999999999 + &99D0)*XC(2)+1.285714285714286D0)/(XC(3)+XC(2)) + FVECC(10)=((XC(1)-6.8D0)*XC(3)+(XC(1)-6.8D0)*XC(2)+1.6666666666666 + &67D0)/(XC(3)+XC(2)) + FVECC(11)=((XC(1)-8.299999999999999D0)*XC(3)+(XC(1)-8.299999999999 + &999D0)*XC(2)+2.2D0)/(XC(3)+XC(2)) + FVECC(12)=((XC(1)-10.6D0)*XC(3)+(XC(1)-10.6D0)*XC(2)+3.0D0)/(XC(3) + &+XC(2)) + FVECC(13)=((XC(1)-1.34D0)*XC(3)+(XC(1)-1.34D0)*XC(2)+4.33333333333 + &3333D0)/(XC(3)+XC(2)) + FVECC(14)=((XC(1)-2.1D0)*XC(3)+(XC(1)-2.1D0)*XC(2)+7.0D0)/(XC(3)+X + &C(2)) + FVECC(15)=((XC(1)-4.39D0)*XC(3)+(XC(1)-4.39D0)*XC(2)+15.0D0)/(XC(3 + &)+XC(2)) + END \end{verbatim} -is not legal. - -\xtc{ -This and the next expression are equivalent. -}{ -\spadpaste{h(x: INT,y: INT): FRAC INT == (x + 2*y)/(y - 1)} -} -\xtc{ -The one you use is a matter of taste. -}{ -\spadpaste{h == (x: INT,y: INT): FRAC INT +-> (x + 2*y)/(y - 1)} -} - -When should you declare an anonymous function? -\indent{4} -\beginitems -\item[1. ] If you use an anonymous function and Axiom can't figure -out what you are trying to do, declare the function. -\item[2. ] If the function has nontrivial argument types or a -nontrivial return type that -Axiom may be able to determine eventually, but you are not -willing to wait that long, declare the function. -\item[3. ] If the function will only be used for arguments of specific -types and it is not too much trouble to declare the function, do so. -\item[4. ] If you are using the anonymous function as an argument to -another function (such as \axiomFun{map} or \axiomFun{sort}), -consider declaring the function. -\item[5. ] If you define an anonymous function inside a named function, -you {\it must} declare the anonymous function. -\enditems -\indent{0} - -\xtc{ -This is an example of a named function for integers that returns a -function. -}{ -\spadpaste{addx x == ((y: Integer): Integer +-> x + y) \bound{addx}} -} -\xtc{ -We define \userfun{g} to be a function that adds \axiom{10} to its -argument. -}{ -\spadpaste{g := addx 10 \free{addx}\bound{g}} -} -\xtc{ -Try it out. -}{ -\spadpaste{g 3 \free{g}} -} -\xtc{ -}{ -\spadpaste{g(-4) \free{g}} -} - -An anonymous function cannot be recursive: since it does not have a -name, you cannot even call it within itself! -If you place an anonymous function inside a named function, the -anonymous function must be declared. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserDatabaseTitle}{Example: A Database} -\newcommand{\ugUserDatabaseNumber}{6.18.} - -@ -\subsection{6.18. Example: A Database} -\label{ugUserDatabasePage} -\index{pages!ugUserDatabasePage!ug06.ht} -\index{ug06.ht!pages!ugUserDatabasePage} -\index{ugUserDatabasePage!ug06.ht!pages} -<>= -\begin{page}{ugUserDatabasePage}{6.18. Example: A Database} -\beginscroll - -This example shows how you can use Axiom to organize a database of -lineage data and then query the database for relationships. - -\labelSpace{1.5pc} -\xtc{ -The database is entered as ``assertions'' that are really -pieces of a function definition. -}{ -\spadpaste{children("albert") == ["albertJr","richard","diane"]\bound{d1}} -} -\xtc{ -Each piece -\axiom{children(x) == y} means -``the children of \axiom{x} are \axiom{y}''. -}{ -\spadpaste{children("richard") == ["douglas","daniel","susan"]\free{d1}\bound{d2}} -} -\xtc{ -This family tree thus spans four generations. -}{ -\spadpaste{children("douglas") == ["dougie","valerie"]\free{d2}\bound{d3}} -} -\xtc{ -Say ``no one else has children.'' -}{ -\spadpaste{children(x) == []\free{d3}\bound{d4}} -} - -\xtc{ -We need some functions for computing lineage. -Start with \axiom{childOf}. -}{ -\spadpaste{childOf(x,y) == member?(x,children(y))\bound{d9}\free{d10}} -} -\xtc{ -To find the \axiom{parentOf} someone, -you have to scan the database of -people applying \axiom{children}. -}{ -\begin{spadsrc}[\bound{d8a}\free{d9}] -parentOf(x) == - for y in people repeat - (if childOf(x,y) then return y) - "unknown" -\end{spadsrc} -} -\xtc{ -And a grandparent of \axiom{x} is just a parent of a parent of \axiom{x}. -}{ -\spadpaste{grandParentOf(x) == parentOf parentOf x\bound{d8}\free{d8a}} -} -\xtc{ -The grandchildren of \axiom{x} -are the people \axiom{y} such that -\axiom{x} is a grandparent of \axiom{y}. -}{ -\spadpaste{grandchildren(x) == [y for y in people | grandParentOf(y) = x]\free{d7}\bound{d8}} -} -\xtc{ -Suppose you want to make a list of all great-grandparents. -Well, a great-grandparent is a grandparent of a person who has children. -}{ -\begin{spadsrc}[\free{d6}\bound{d7}] -greatGrandParents == [x for x in people | - reduce(_or,[not empty? children(y) for y in grandchildren(x)],false)] -\end{spadsrc} -} -\xtc{ -Define \axiom{descendants} to include the parent as well. -}{ -\begin{spadsrc}[\free{d5}\bound{d6}] -descendants(x) == - kids := children(x) - null kids => [x] - concat(x,reduce(concat,[descendants(y) - for y in kids],[])) -\end{spadsrc} -} -\xtc{ -Finally, we need a list of people. -Since all people are descendants of ``albert'', let's say so. -}{ -\spadpaste{people == descendants "albert"\free{d4}\bound{d5}} -} - -We have used \axiomSyntax{==} to define the database and some functions to -query the database. -But no computation is done until we ask for some information. -Then, once and for all, the functions are analyzed and compiled to machine -code for run-time efficiency. -Notice that no types are given anywhere in this example. -They are not needed. - -\xtc{ -Who are the grandchildren of ``richard''? -}{ -\spadpaste{grandchildren "richard"\bound{d10}\free{d11}} -} -\xtc{ -Who are the great-grandparents? -}{ -\spadpaste{greatGrandParents\bound{d11}\free{d12}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserTriangleTitle}{Example: A Famous Triangle} -\newcommand{\ugUserTriangleNumber}{6.19.} - -@ -\subsection{6.19. Example: A Famous Triangle} -\label{ugUserTrianglePage} -\begin{itemize} -\item ugTypesExposePage \ref{ugTypesExposePage} on -page~\pageref{ugTypesExposePage} -\end{itemize} -\index{pages!ugUserTrianglePage!ug06.ht} -\index{ug06.ht!pages!ugUserTrianglePage} -\index{ugUserTrianglePage!ug06.ht!pages} -<>= -\begin{page}{ugUserTrianglePage}{6.19. Example: A Famous Triangle} -\beginscroll - -In this example we write some functions that display -Pascal's triangle. -It demonstrates the use of piece-wise definitions and some output -operations you probably haven't seen before. - -\labelSpace{1pc} -\xtc{ -To make these output operations -available, we have to \spadgloss{expose} the domain -\axiomType{OutputForm}. -See \downlink{``\ugTypesExposeTitle''}{ugTypesExposePage} -in Section \ugTypesExposeNumber\ignore{ugTypesExpose} for -more information about exposing domains -and packages. -}{ -\spadpaste{)set expose add constructor OutputForm \bound{expose}} -} -\xtc{ -Define the values along the first -row and any column \axiom{i}. -}{ -\spadpaste{pascal(1,i) == 1 \bound{pas1}} -} -\xtc{ -Define the values for when the row -and column index \axiom{i} are equal. -Repeating the argument name indicates that -the two index values are equal. -}{ -\spadpaste{pascal(n,n) == 1 \bound{pas2}\free{pas1}} -} -\xtc{ -}{ -\begin{spadsrc}[\bound{pas3}\free{pas1 pas2}] -pascal(i,j | 1 < i and i < j) == - pascal(i-1,j-1)+pascal(i,j-1) -\end{spadsrc} -} -Now that we have defined the coefficients in Pascal's triangle, -let's write a couple of one-liners to display it. -\xtc{ -First, define a function that gives the \eth{\axiom{n}} row. -}{ -\spadpaste{pascalRow(n) == [pascal(i,n) for i in 1..n] \bound{pascalRow}\free{pas3}} -} -\xtc{ -Next, we write the function \userfun{displayRow} -to display the row, separating entries by blanks and centering. -}{ -\spadpaste{displayRow(n) == output center blankSeparate pascalRow(n) \free{pascalRow}\bound{displayRow}\free{expose}} -} -% -Here we have used three output operations. -Operation \axiomFunFrom{output}{OutputForm} -displays the printable form of objects on the screen, -\axiomFunFrom{center}{OutputForm} centers a printable form in the -width of the screen, and \axiomFunFrom{blankSeparate}{OutputForm} takes a list of -printable forms and inserts a blank between successive elements. -\xtc{ -Look at the result. -}{ -\spadpaste{for i in 1..7 repeat displayRow i \free{displayRow}} -} -Being purists, we find this less than satisfactory. -Traditionally, elements of Pascal's triangle are centered between -the left and right elements on the line above. -% -\xtc{ -To fix this misalignment, we go back and -redefine \userfun{pascalRow} to right adjust the entries within the -triangle within a width of four characters. -}{ -\spadpaste{pascalRow(n) == [right(pascal(i,n),4) for i in 1..n] \bound{pascalRow2}} -} -% -\xtc{ -Finally let's look at our purely reformatted triangle. -}{ -\spadpaste{for i in 1..7 repeat displayRow i \free{pascalRow2}\free{displayRow}} -} -\xtc{ -Unexpose \axiomType{OutputForm} so we don't get unexpected -results later. -}{ -\spadpaste{)set expose drop constructor OutputForm} -} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugUserPalTitle}{Example: Testing for Palindromes} -\newcommand{\ugUserPalNumber}{6.20.} - -@ -\subsection{6.20. Example: Testing for Palindromes} -\label{ugUserPalPage} -\begin{itemize} -\item ugUserTrianglePage \ref{ugUserTrianglePage} on -page~\pageref{ugUserTrianglePage} -\end{itemize} -\index{pages!ugUserPalPage!ug06.ht} -\index{ug06.ht!pages!ugUserPalPage} -\index{ugUserPalPage!ug06.ht!pages} -<>= -\begin{page}{ugUserPalPage}{6.20. Example: Testing for Palindromes} -\beginscroll - - -In this section we define a function \userfun{pal?} that tests whether its -argument is a {\it palindrome}, that is, something that reads the same -backwards and forwards. -For example, the string ``Madam I'm Adam'' is a palindrome (excluding blanks -and punctuation) and so is the number \axiom{123454321.} -The definition works for any datatype that has \axiom{n} components that -are accessed by the indices \axiom{1\ldots n}. - -\xtc{ -Here is the definition for \userfun{pal?}. -It is simply a call to an auxiliary function called -\userfun{palAux?}. -We are following the convention of ending a function's name with -\axiomSyntax{?} if the function returns a \axiomType{Boolean} value. -}{ -\spadpaste{pal? s == palAux?(s,1,\#s) \bound{pal}} -} -\xtc{ -Here is \userfun{palAux?}. -It works by comparing elements that are equidistant from the start and end -of the object. -}{ -\begin{spadsrc}[\bound{palAux}] -palAux?(s,i,j) == - j > i => - (s.i = s.j) and palAux?(s,i+1,i-1) - true -\end{spadsrc} -} -\xtc{ -Try \userfun{pal?} on some examples. -First, a string. -}{ -\spadpaste{pal? "Oxford" \free{pal palAux}} -} -\xtc{ -A list of polynomials. -}{ -\spadpaste{pal? [4,a,x-1,0,x-1,a,4] \free{pal palAux}} -} -\xtc{ -A list of integers from the example in -\texht{the last section.}{\downlink{``\ugUserTriangleTitle''} -{ugUserTrianglePage} in Section \ugUserTriangleNumber -\ignore{ugUserTriangle}.} -}{ -\spadpaste{pal? [1,6,15,20,15,6,1] \free{pal palAux}} -} -\xtc{ -To use \userfun{pal?} on an integer, first convert it to a string. -}{ -\spadpaste{pal?(1441::String)\free{pal palAux}} -} -\xtc{ -Compute an infinite stream of decimal numbers, -each of which is an obvious palindrome. -}{ -\spadpaste{ones := [reduce(+,[10**j for j in 0..i]) for i in 1..]\free{pal palAux}\bound{pal5}} -} -\xtc{ -How about their squares? -}{ -\spadpaste{squares := [x**2 for x in ones]\free{pal5}\bound{pal6}} -} -\xtc{ -Well, let's test them all! -}{ -\spadpaste{[pal?(x::String) for x in squares]\free{pal6}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugUserRulesTitle}{Rules and Pattern Matching} -\newcommand{\ugUserRulesNumber}{6.21.} - -@ -\subsection{6.21. Rules and Pattern Matching} -\label{ugUserRulesPage} -\index{pages!ugUserRulesPage!ug06.ht} -\index{ug06.ht!pages!ugUserRulesPage} -\index{ugUserRulesPage!ug06.ht!pages} -<>= -\begin{page}{ugUserRulesPage}{6.21. Rules and Pattern Matching} -\beginscroll - -A common mathematical formula is -\texht{\narrowDisplay{% -\log(x) + \log(y) = \log(x y) \quad\forall \, x \hbox{\ and\ } y.}}{ -\axiom{log(x) + log(y) == log(x * y)} for any \axiom{x} and \axiom{y}.} -The presence of -\texht{``$\forall$''}{the word ``any''} -indicates that \axiom{x} and \axiom{y} can stand for arbitrary mathematical -expressions in the above formula. -You can use such mathematical formulas in Axiom to specify ``rewrite -rules''. -Rewrite rules are objects in Axiom that can be assigned to variables for -later use, often for the purpose of simplification. -Rewrite rules look like ordinary function definitions except that they are -preceded by the reserved word \axiom{rule}. -\spadkey{rule} -For example, a rewrite rule for the above formula is: -\begin{verbatim} -rule log(x) + log(y) == log(x * y) -\end{verbatim} -Like function definitions, no action is taken when a rewrite rule is issued. -Think of rewrite rules as functions that take one argument. -When a rewrite rule \axiom{A = B} is applied to an argument \axiom{f}, its -meaning is: ``rewrite every subexpression of \axiom{f} that {\it matches} -\axiom{A} by \axiom{B.}'' -The left-hand side of a rewrite rule is called a \spadgloss{pattern}; its -right-side side is called its \spadgloss{substitution}. - -\xtc{ -Create a rewrite rule named \userfun{logrule}. -The generated symbol beginning with a \axiomSyntax{\%} is a place-holder -for any other terms that might occur in the sum. -}{ -\spadpaste{logrule := rule log(x) + log(y) == log(x * y) \bound{logrule}} -} -\xtc{ -Create an expression with logarithms. -}{ -\spadpaste{f := log sin x + log x \bound{f}} -} -\xtc{ -Apply \userfun{logrule} to \axiom{f}. -}{ -\spadpaste{logrule f \free{f}\free{logrule}} -} - -The meaning of our example rewrite rule is: -``for all expressions \axiom{x} and \axiom{y}, rewrite -\axiom{log(x) + log(y)} by \axiom{log(x * y)}.'' -Patterns generally have both operation names -(here, \axiomFun{log} and \axiomOp{+}) -and variables (here, \axiom{x} and \axiom{y}). -By default, every operation name stands for itself. -Thus \axiomFun{log} matches only ``\axiom{log}'' and not any -other operation such as \axiomFun{sin}. -On the other hand, variables do not stand for themselves. -Rather, a variable denotes a -{\it pattern variable} that is free to match any expression whatsoever. - -When a rewrite rule is applied, a process called -\spadgloss{pattern matching} goes to work by systematically -scanning -the subexpressions of the argument. -When a subexpression is found that ``matches'' the pattern, the subexpression -is replaced by the right-hand side of the rule. -The details of what happens will be covered later. - -The customary Axiom notation for patterns is actually a shorthand for a -longer, more general notation. -Pattern variables can be made explicit by using a percent -(\axiomSyntax{\%}) as the first character of the variable name. -To say that a name stands for itself, you can prefix that name with a quote -operator (\axiomSyntax{'}). -Although the current Axiom parser does not let you quote an operation -name, this more general notation gives you an alternate way of giving the same -rewrite rule: -\begin{verbatim} -rule log(%x) + log(%y) == log(x * y) -\end{verbatim} -This longer notation gives you patterns that the -standard notation won't handle. -For example, the rule -\texht{\typeout{check this example}}{} +\subsection{Asp55 Example Code} +\label{Asp55ExampleCode} +\index{pages!Asp55ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp55ExampleCode} +\index{Asp55ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp55ExampleCode}{Asp55 Example Code} \begin{verbatim} -rule %f(c * 'x) == c*%f(x) + SUBROUTINE CONFUN(MODE,NCNLN,N,NROWJ,NEEDC,X,C,CJAC,NSTATE,IUSER + &,USER) + DOUBLE PRECISION C(NCNLN),X(N),CJAC(NROWJ,N),USER(*) + INTEGER N,IUSER(*),NEEDC(NCNLN),NROWJ,MODE,NCNLN,NSTATE + IF(NEEDC(1).GT.0)THEN + C(1)=X(6)**2+X(1)**2 + CJAC(1,1)=2.0D0*X(1) + CJAC(1,2)=0.0D0 + CJAC(1,3)=0.0D0 + CJAC(1,4)=0.0D0 + CJAC(1,5)=0.0D0 + CJAC(1,6)=2.0D0*X(6) + ENDIF + IF(NEEDC(2).GT.0)THEN + C(2)=X(2)**2+(-2.0D0*X(1)*X(2))+X(1)**2 + CJAC(2,1)=(-2.0D0*X(2))+2.0D0*X(1) + CJAC(2,2)=2.0D0*X(2)+(-2.0D0*X(1)) + CJAC(2,3)=0.0D0 + CJAC(2,4)=0.0D0 + CJAC(2,5)=0.0D0 + CJAC(2,6)=0.0D0 + ENDIF + IF(NEEDC(3).GT.0)THEN + C(3)=X(3)**2+(-2.0D0*X(1)*X(3))+X(2)**2+X(1)**2 + CJAC(3,1)=(-2.0D0*X(3))+2.0D0*X(1) + CJAC(3,2)=2.0D0*X(2) + CJAC(3,3)=2.0D0*X(3)+(-2.0D0*X(1)) + CJAC(3,4)=0.0D0 + CJAC(3,5)=0.0D0 + CJAC(3,6)=0.0D0 + ENDIF + RETURN + END \end{verbatim} -means ``for all \axiom{f} and \axiom{c}, replace \axiom{f(y)} by -\axiom{c * f(x)} when \axiom{y} is the product of \axiom{c} -and the explicit variable \axiom{x}.'' - -Thus the pattern can have several adornments on the names that appear there. -Normally, all these adornments are dropped in the substitution on the -right-hand side. - -To summarize: - -\beginImportant -To enter a single rule in Axiom, use the following syntax: -\spadkey{rule} -\centerline{{{\tt rule {\it leftHandSide} == {\it rightHandSide}}}} -The {\it leftHandSide} is a pattern to be matched and -the {\it rightHandSide} is its substitution. -The rule is an object of type \axiomType{RewriteRule} that can be -assigned to a variable and applied to expressions to transform them. -\endImportant - -Rewrite rules can be collected -into rulesets so that a set of rules can be applied at once. -Here is another simplification rule for logarithms. -\texht{\narrowDisplay{y \log(x) = \log(x^y) \quad\forall \, x \hbox{\ and\ } y.}}{ -\axiom{y * log(x) == log(x ** y)} for any \axiom{x} and \axiom{y}.} -If instead of giving a single rule following the reserved word \axiom{rule} -you give a ``pile'' of rules, you create -what is called a {\it ruleset.} -Like rules, rulesets are objects in Axiom and -can be assigned to variables. -You will find it useful to group commonly used rules into input files, and read -them in as needed. -\xtc{ -Create a ruleset named \axiom{logrules}. -}{ -\begin{spadsrc}[\bound{logrules}] -logrules := rule - log(x) + log(y) == log(x * y) - y * log x == log(x ** y) -\end{spadsrc} -} -\xtc{ -Again, create an expression \axiom{f} containing logarithms. -}{ -\spadpaste{f := a * log(sin x) - 2 * log x \bound{f1}} -} -\xtc{ -Apply the ruleset \userfun{logrules} to \axiom{f}. -}{ -\spadpaste{logrules f \free{f1}\free{logrules}} -} - -We have allowed pattern variables to match arbitrary expressions in the -above examples. -Often you want a variable only to match expressions -satisfying some predicate. -For example, we may want to apply the transformation -\texht{\narrowDisplay{y \log(x) = \log(x^y)}}{\axiom{y * log(x) == log(x ** y)}} -only when \axiom{y} is an integer. -% -The way to restrict a pattern variable \axiom{y} by a predicate \axiom{f(y)} -is by using a vertical bar \axiomSyntax{|}, which means ``such that,'' in -much the same way it is used in function definitions. -You do this only once, but at the earliest -(meaning deepest and leftmost) part of the pattern. -\xtc{ -This restricts the logarithmic rule to create integer exponents only. -}{ -\begin{spadsrc}[\bound{logrules2}] -logrules2 := rule - log(x) + log(y) == log(x * y) - (y | integer? y) * log x == log(x ** y) -\end{spadsrc} -} -\xtc{ -Compare this with the result of applying the previous set of rules. -}{ -\spadpaste{f \free{f1}} -} -\xtc{ -}{ -\spadpaste{logrules2 f \free{f1}\free{logrules2}} -} -You should be aware that you might need to apply a function like -\spadfun{integer} within your predicate expression to actually apply -the test function. -\xtc{ -Here we use \spadfun{integer} because \spad{n} has -type \spadtype{Expression Integer} but \spadfun{even?} is an operation -defined on integers. -}{ -\spadpaste{evenRule := rule cos(x)**(n | integer? n and even? integer n)==(1-sin(x)**2)**(n/2) \bound{evenRule}} -} -\xtc{ -Here is the application of the rule. -}{ -\spadpaste{evenRule( cos(x)**2 ) \free{evenRule}} -} -\xtc{ -This is an example of some of the usual identities involving products of -sines and cosines. -}{ -\begin{spadsrc}[\bound{sinCosProducts}] -sinCosProducts == rule - sin(x) * sin(y) == (cos(x-y) - cos(x + y))/2 - cos(x) * cos(y) == (cos(x-y) + cos(x+y))/2 - sin(x) * cos(y) == (sin(x-y) + sin(x + y))/2 -\end{spadsrc} -} -\xtc{ -}{ -\spadpaste{g := sin(a)*sin(b) + cos(b)*cos(a) + sin(2*a)*cos(2*a) \bound{g}} -} -\xtc{ -}{ -\spadpaste{sinCosProducts g \free{sinCosProducts g}} -} - -Another qualification you will often want to use is to allow a pattern to -match an identity element. -Using the pattern \axiom{x + y}, for example, neither \axiom{x} nor \axiom{y} -matches the expression \axiom{0}. -Similarly, if a pattern contains a product \axiom{x*y} or an exponentiation -\axiom{x**y}, then neither \axiom{x} or \axiom{y} matches \axiom{1}. -% -\xtc{ -If identical elements were matched, pattern matching would generally loop. -Here is an expansion rule for exponentials. -}{ -\spadpaste{exprule := rule exp(a + b) == exp(a) * exp(b)\bound{exprule}} -} -\xtc{ -This rule would cause infinite rewriting on this if either \axiom{a} or -\axiom{b} were allowed to match \axiom{0}. -}{ -\spadpaste{exprule exp x \free{exprule}} -} -% -There are occasions when you do want a pattern variable in a sum or -product to match \axiom{0} or \axiom{1}. -If so, prefix its name -with a \axiomSyntax{?} whenever it appears in a left-hand side of a rule. -For example, consider the following rule for the exponential integral: -\texht{\narrowDisplay{\int \left(\frac{y+e^x}{x}\right)\: dx = \int \frac{y}{x}\: dx + \hbox{\rm Ei}(x) -\quad\forall \, x \hbox{\ and\ } y.}}{ -\axiom{integral((y + exp x)/x, x) == integral(y/x, x) + Ei x} -for any \axiom{x} and \axiom{y}.} -This rule is valid for \axiom{y = 0}. -One solution is to create a \axiomType{Ruleset} with two -rules, one with and one without \axiom{y}. -A better solution is to use an ``optional'' pattern variable. -% -\xtc{ -Define rule \axiom{eirule} with -a pattern variable \axiom{?y} to indicate -that an expression may or may not occur. -}{ -\spadpaste{eirule := rule integral((?y + exp x)/x,x) == integral(y/x,x) + Ei x \bound{eirule}} -} -\xtc{ -Apply rule \axiom{eirule} to an integral without this term. -}{ -\spadpaste{eirule integral(exp u/u, u) \free{eirule}} -} -\xtc{ -Apply rule \axiom{eirule} to an integral with this term. -}{ -\spadpaste{eirule integral(sin u + exp u/u, u) \free{eirule}} -} - -Here is one final adornment you will find useful. -When matching a pattern of the form \axiom{x + y} to an expression containing a -long sum of the form \axiom{a +\ldots+ b}, there is no way to predict in -advance which subset of the sum matches \axiom{x} and which matches -\axiom{y}. -Aside from efficiency, this is generally unimportant since the rule holds for -any possible combination of matches for \axiom{x} and \axiom{y}. -In some situations, however, you may want to say which pattern variable is a sum -(or product) of several terms, and which should match only a single term. -To do this, put a prefix colon \axiomSyntax{:} before the pattern variable -that you want to match multiple terms. -% -\xtc{ -The remaining rules involve operators \axiom{u} and \axiom{v}. -}{ -\spadpaste{u := operator 'u \bound{u}} -} -\xtc{ -These definitions tell Axiom that -\axiom{u} and \axiom{v} are formal operators to be used in expressions. -}{ -\spadpaste{v := operator 'v \bound{v}} -} -\xtc{ -First define \axiom{myRule} -with no restrictions on the pattern variables -\axiom{x} and \axiom{y}. -}{ -\spadpaste{myRule := rule u(x + y) == u x + v y \free{u v}\bound{m}} -} -\xtc{ -Apply \axiom{myRule} to an expression. -}{ -\spadpaste{myRule u(a + b + c + d) \free{m}} -} -\xtc{ -Define \axiom{myOtherRule} to match several terms -so that the rule gets applied recursively. -}{ -\spadpaste{myOtherRule := rule u(:x + y) == u x + v y \free{u v}\bound{m2}} -} -\xtc{ -Apply \axiom{myOtherRule} to the same expression. -}{ -\spadpaste{myOtherRule u(a + b + c + d) \free{m2}} -} - - -Here are some final remarks on pattern matching. -Pattern matching provides a very useful paradigm for solving -certain classes of problems, namely, those that involve -transformations of one form to another and back. -However, it is important to recognize its limitations. - -First, pattern matching slows down as the number of rules you have to apply -increases. -Thus it is good practice to organize the sets of rules you use optimally so -that irrelevant rules are never included. - -Second, careless use of pattern matching can lead to wrong answers. -You should avoid using pattern matching to handle hidden algebraic -relationships that can go undetected by other programs. -As a simple example, a symbol such as ``J'' can easily be used to represent -the square root of \axiom{-1} or some other important algebraic quantity. -Many algorithms branch on whether an expression is zero or not, then divide by -that expression if it is not. -If you fail to simplify an expression involving powers of -\axiom{J} to \axiom{-1,} -algorithms may incorrectly assume an expression is non-zero, take a wrong -branch, and produce a meaningless result. - -Pattern matching should also not be used as a substitute for a domain. -In Axiom, objects of one domain are transformed to objects of other -domains using well-defined \axiomFun{coerce} operations. -Pattern matching should be used on objects that are all the same type. -Thus if your application can be handled by type \axiomType{Expression} in -Axiom and you think you need pattern matching, consider this choice -carefully. -You may well be better served by extending an existing domain -or by building a new domain of objects for your application. -\endscroll -\autobuttons \end{page} -@ -\section{ug07.ht} -<>= -\newcommand{\optArg}[1]{{{\tt [}{#1}{\tt ]}}} -\newcommand{\argDef}[1]{{\tt ({#1})}} -\newcommand{\funSyntax}[2]{\axiomFun{#1}{\tt ({\small\it{#2}})}} -\newcommand{\funArgs}[1]{{\tt ({\small\it {#1}})}\newline} -\newcommand{\ugGraphTitle}{Graphics} -\newcommand{\ugGraphNumber}{7.} @ -\subsection{7. Graphics} -\label{ugGraphPage} -\begin{itemize} -\item ugGraphTwoDPage \ref{ugGraphTwoDPage} on -page~\pageref{ugGraphTwoDPage} -\item ugGraphThreeDPage \ref{ugGraphThreeDPage} on -page~\pageref{ugGraphThreeDPage} -\end{itemize} -\index{pages!ugGraphPage!ug07.ht} -\index{ug07.ht!pages!ugGraphPage} -\index{ugGraphPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphPage}{7. Graphics} -\beginscroll - -% - -This chapter shows how to use the Axiom graphics facilities -under the X Window System. -Axiom has \twodim{} and \threedim{} drawing and rendering -packages that allow the drawing, coloring, transforming, mapping, -clipping, and combining of graphic output from Axiom -computations. -This facility is particularly useful for investigating problems in -areas such as topology. -The graphics package is capable of plotting functions of one or -more variables or plotting parametric surfaces and curves. -Various coordinate systems are also available, such as polar and -spherical. - -A graph is displayed in a viewport window and it has a -control-panel that uses interactive mouse commands. -PostScript and other output forms are available so that Axiom -images can be printed or used by other programs.\footnote{PostScript -is a trademark of Adobe Systems Incorporated, registered in the United -States.} - -\beginmenu - \menudownlink{{7.1. Two-Dimensional Graphics}}{ugGraphTwoDPage} - \menudownlink{{7.2. Three-Dimensional Graphics}}{ugGraphThreeDPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphTwoDTitle}{Two-Dimensional Graphics} -\newcommand{\ugGraphTwoDNumber}{7.1.} - -@ -\subsection{7.1. Two-Dimensional Graphics} -\label{ugGraphTwoDPage} -\begin{itemize} -\item ugGraphTwoDPlotPage \ref{ugGraphTwoDPlotPage} on -page~\pageref{ugGraphTwoDPlotPage} -\item ugGraphTwoDParPage \ref{ugGraphTwoDParPage} on -page~\pageref{ugGraphTwoDParPage} -\item ugGraphTwoDPlanePage \ref{ugGraphTwoDPlanePage} on -page~\pageref{ugGraphTwoDPlanePage} -\item ugGraphTwoDOptionsPage \ref{ugGraphTwoDOptionsPage} on -page~\pageref{ugGraphTwoDOptionsPage} -\item ugGraphColorPage \ref{ugGraphColorPage} on -page~\pageref{ugGraphColorPage} -\item ugGraphColorPalettePage \ref{ugGraphColorPalettePage} on -page~\pageref{ugGraphColorPalettePage} -\item ugGraphTwoDControlPage \ref{ugGraphTwoDControlPage} on -page~\pageref{ugGraphTwoDControlPage} -\item ugGraphTwoDopsPage \ref{ugGraphTwoDopsPage} on -page~\pageref{ugGraphTwoDopsPage} -\item ugGraphTwoDbuildPage \ref{ugGraphTwoDbuildPage} on -page~\pageref{ugGraphTwoDbuildPage} -\item ugGraphTwoDappendPage \ref{ugGraphTwoDappendPage} on -page~\pageref{ugGraphTwoDappendPage} -\end{itemize} -\index{pages!ugGraphTwoDPage!ug07.ht} -\index{ug07.ht!pages!ugGraphTwoDPage} -\index{ugGraphTwoDPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphTwoDPage}{7.1. Two-Dimensional Graphics} -\beginscroll -% -The Axiom \twodim{} graphics package provides the ability to -display -% -\indent{4} -\beginitems -% -\item[-] curves defined by functions of a single real variable -% -\item[-] curves defined by parametric equations -% -\item[-] implicit non-singular curves defined by polynomial equations -% -\item[-] planar graphs generated from lists of point components. -\enditems -\indent{0} -These graphs -can be modified by specifying various options, such as -calculating points in the polar -coordinate system or changing the size of the graph viewport window. - -\beginmenu - \menudownlink{{7.1.1. Plotting Two-Dimensional Functions of One Variable}} -{ugGraphTwoDPlotPage} - \menudownlink{{7.1.2. Plotting Two-Dimensional Parametric Plane Curves}} -{ugGraphTwoDParPage} - \menudownlink{{7.1.3. Plotting Plane Algebraic Curves}} -{ugGraphTwoDPlanePage} - \menudownlink{{7.1.4. Two-Dimensional Options}}{ugGraphTwoDOptionsPage} - \menudownlink{{7.1.5. Color}}{ugGraphColorPage} - \menudownlink{{7.1.6. Palette}}{ugGraphColorPalettePage} - \menudownlink{{7.1.7. Two-Dimensional Control-Panel}} -{ugGraphTwoDControlPage} - \menudownlink{{7.1.8. Operations for Two-Dimensional Graphics}} -{ugGraphTwoDopsPage} - \menudownlink{{7.1.9. Addendum: Building Two-Dimensional Graphs}} -{ugGraphTwoDbuildPage} - \menudownlink{ -{7.1.10. Addendum: Appending a Graph to a Viewport Window Containing a Graph}} -{ugGraphTwoDappendPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphTwoDPlotTitle}{Plotting Two-Dimensional Functions of One Variable} -\newcommand{\ugGraphTwoDPlotNumber}{7.1.1.} - -@ -\subsection{7.1.1. Plotting Two-Dimensional Functions of One Variable} -\label{ugGraphTwoDPlotPage} -\begin{itemize} -\item ugGraphTwoDOptionsPage \ref{ugGraphTwoDOptionsPage} on -page~\pageref{ugGraphTwoDOptionsPage} -\end{itemize} -\index{pages!ugGraphTwoDPlotPage!ug07.ht} -\index{ug07.ht!pages!ugGraphTwoDPlotPage} -\index{ugGraphTwoDPlotPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphTwoDPlotPage}{7.1.1. Plotting Two-Dimensional Functions of One Variable} -\beginscroll - -The first kind of \twodim{} graph is that of a curve defined by a function -\axiom{y = f(x)} over a finite interval of the \axiom{x} axis. - -% -\beginImportant -The general format for drawing a function defined by a formula -\axiom{f(x)} is: -% -\centerline{{{\tt draw(f(x), x = a..b, {\it options})}}} -where \axiom{a..b} defines the range of \axiom{x}, and where -{\it options} prescribes zero or more options as described in -\downlink{``\ugGraphTwoDOptionsTitle''}{ugGraphTwoDOptionsPage} -in Section \ugGraphTwoDOptionsNumber\ignore{ugGraphTwoDOptions}. -An example of an option is \axiom{curveColor == bright red().} -An alternative format involving functions \axiom{f} and \axiom{g} -is also available. -\endImportant - -A simple way to plot a function is to use a formula. -The first argument is the formula. -For the second argument, write the name of the independent variable (here, \axiom{x}), -followed by an \spadSyntax{=}, and the range of values. - -\psXtc{ -Display this formula over the range -\texht{$0 \leq x \leq 6$}{0 <= x <= 6}. -Axiom converts your formula to a compiled -function so that the results can be computed -quickly and efficiently. -}{ -\graphpaste{draw(sin(tan(x)) - tan(sin(x)),x = 0..6)} -}{ -\epsffile[0 0 295 295]{../ps/2d1vara.ps} -} - -Notice that Axiom compiled the function before the graph was put -on the screen. - -\psXtc{ -Here is the same graph on a different interval. -This time we give the graph a title. -}{ -\graphpaste{draw(sin(tan(x)) - tan(sin(x)),x = 10..16)} -}{ -%window was 300 x 300 -\epsffile[0 0 295 295]{../ps/2d1varb.ps} -} -% -Once again the formula is converted to a compiled function before -any points were computed. -If you want to graph the same function on several intervals, it is -a good idea to define the function first so that the function has -to be compiled only once. -\xtc{ -This time we first define the function. -}{ -\spadpaste{f(x) == (x-1)*(x-2)*(x-3) \bound{f}} -} -\psXtc{ -To draw the function, the first argument is its name -and the second is just the range with no independent variable. -}{ -\graphpaste{draw(f, 0..4) \free{f}} -}{ -\epsffile[0 0 295 295]{../ps/2d1vard.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphTwoDParTitle}{Plotting Two-Dimensional Parametric Plane Curves} -\newcommand{\ugGraphTwoDParNumber}{7.1.2.} - -@ -\subsection{7.1.2. Plotting Two-Dimensional Parametric Plane Curves} -\label{ugGraphTwoDParPage} -\begin{itemize} -\item ugGraphThreeDOptionsPage \ref{ugGraphThreeDOptionsPage} on -page~\pageref{ugGraphThreeDOptionsPage} -\end{itemize} -\index{pages!ugGraphTwoDParPage!ug07.ht} -\index{ug07.ht!pages!ugGraphTwoDParPage} -\index{ugGraphTwoDParPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphTwoDParPage} -{7.1.2. Plotting Two-Dimensional Parametric Plane Curves} -\beginscroll - -The second kind of \twodim{} graph is that of -curves produced by parametric equations. -Let \axiom{x = f(t)} and \axiom{y = g(t)} be formulas or two -functions \axiom{f} and \axiom{g} as the parameter \axiom{t} ranges -over an interval \axiom{[a,b]}. -The function \axiomFun{curve} takes the two functions \axiom{f} and -\axiom{g} as its parameters. - -\beginImportant -The general format for drawing a \twodim{} plane curve defined by -parametric formulas \axiom{x = f(t)} and \axiom{y = g(t)} is: -% -\centerline{{{\tt draw(curve(f(t), g(t)), t = a..b, {\it options})}}} -where \axiom{a..b} defines the range of the independent variable \axiom{t}, -and where {\it options} prescribes zero or more options as -described in -\downlink{``\ugGraphThreeDOptionsTitle''}{ugGraphThreeDOptionsPage} -in Section \ugGraphThreeDOptionsNumber\ignore{ugGraphThreeDOptions}. -An example of an option is \axiom{curveColor == bright red().} -\endImportant - -Here's an example: - -\psXtc{ -Define a parametric curve using a range involving -\axiom{\%pi}, Axiom's way of saying \texht{$\pi$}{``pi''}. -For parametric curves, Axiom compiles two -functions, one for each of the functions \axiom{f} and \axiom{g}. -}{ -\graphpaste{draw(curve(sin(t)*sin(2*t)*sin(3*t), sin(4*t)*sin(5*t)*sin(6*t)), t = 0..2*\%pi)} -}{ -\epsffile[0 0 295 295]{../ps/2dppca.ps} -} -% -% -\psXtc{ -The title may be an arbitrary string and is an -optional argument to the \axiomFun{draw} command. -}{ -\graphpaste{draw(curve(cos(t), sin(t)), t = 0..2*\%pi)} -}{ -\epsffile[0 0 295 295]{../ps/2dppcb.ps} -} -% -If you plan on plotting \axiom{x = f(t)}, \axiom{y = g(t)} as \axiom{t} -ranges over several intervals, you may want to define functions -\axiom{f} and \axiom{g} first, so -that they need not be recompiled every time you create a new graph. -Here's an example: -\xtc{ -As before, you can first define the functions you wish to draw. -}{ -\spadpaste{f(t:DFLOAT):DFLOAT == sin(3*t/4) \bound{f}} -} -\xtc{ -Axiom compiles them to map \axiomType{DoubleFloat} -values to \axiomType{DoubleFloat} values. -}{ -\spadpaste{g(t:DFLOAT):DFLOAT == sin(t) \bound{g}} -} - -\psXtc{ -Give to {\tt curve} the names of the functions, -then write the range without the name of the -independent variable. -}{ -\graphpaste{draw(curve(f,g),0..\%pi) \free{f g}} -}{ -\epsffile[0 0 295 295]{../ps/2dppcc.ps} -} -% -% -\psXtc{ -Here is another look at the same curve but over a different -range. Notice that \axiom{f} and \axiom{g} are not recompiled. -Also note that Axiom provides a default title based on -the first function specified in \axiomFun{curve}. -}{ -\graphpaste{draw(curve(f,g),-4*\%pi..4*\%pi) \free{f g}} -}{ -\epsffile[0 0 295 295]{../ps/2dppce.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphTwoDPlaneTitle}{Plotting Plane Algebraic Curves} -\newcommand{\ugGraphTwoDPlaneNumber}{7.1.3.} - -@ -\subsection{7.1.3. Plotting Plane Algebraic Curves} -\label{ugGraphTwoDPlanePage} -\begin{itemize} -\item ugGraphTwoDOptionsPage \ref{ugGraphTwoDOptionsPage} on -page~\pageref{ugGraphTwoDOptionsPage} -\end{itemize} -\index{pages!ugGraphTwoDPlanePage!ug07.ht} -\index{ug07.ht!pages!ugGraphTwoDPlanePage} -\index{ugGraphTwoDPlanePage!ug07.ht!pages} -<>= -\begin{page}{ugGraphTwoDPlanePage}{7.1.3. Plotting Plane Algebraic Curves} -\beginscroll - -A third kind of \twodim{} graph is a non-singular ``solution curve'' -in a rectangular region of the plane. -A solution curve is a curve defined by a polynomial equation -\axiom{p(x,y) = 0}. -Non-singular means that the curve is ``smooth'' in that it does not -cross itself or come to a point (cusp). -Algebraically, this means that for any point \axiom{(x,y)} on the curve, -that is, a point such that \axiom{p(x,y) = 0}, the partial derivatives -\texht{${{\partial p}\over{\partial x}}(x,y)$ and -${{\partial p}\over{\partial y}}(x,y)$}{\axiom{dp/dx(x,y)} -and \axiom{dp/dy(a,b)}} -are not both zero. - -% -\beginImportant -The general format for drawing a non-singular solution curve -given by a polynomial of the form \axiom{p(x,y) = 0} is: -% -\centerline{{{\tt draw(p(x,y) = 0, x, y, range == [a..b, c..d], {\it options})}}} -where the second and third arguments name the first and second -independent variables of \axiom{p}. -A {\tt range} option is always given to designate a bounding -rectangular region of the plane \texht{$a \leq x \leq b, c \leq y -\leq d$}{a <= x <= b, c <= y <= d}. -Zero or more additional options as described in -\downlink{``\ugGraphTwoDOptionsTitle''}{ugGraphTwoDOptionsPage} -in Section \ugGraphTwoDOptionsNumber\ignore{ugGraphTwoDOptions} -may be given. -\endImportant - -\xtc{ -We require that the polynomial has rational or integral coefficients. -Here is an algebraic curve example (``Cartesian ovals''): -}{ -\spadpaste{p := ((x**2 + y**2 + 1) - 8*x)**2 - (8*(x**2 + y**2 + 1)-4*x-1) \bound{p}} -} - -\psXtc{ -The first argument is always expressed as an equation of the form -\axiom{p = 0} where \axiom{p} is a polynomial. -}{ -\graphpaste{draw(p = 0, x, y, range == [-1..11, -7..7]) \free{p}} -}{ -\epsffile[0 0 295 295]{../ps/2dpaca.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphTwoDOptionsTitle}{Two-Dimensional Options} -\newcommand{\ugGraphTwoDOptionsNumber}{7.1.4.} - -@ -\subsection{7.1.4. Two-Dimensional Options} -\label{ugGraphTwoDOptionsPage} -\begin{itemize} -\item ugGraphColorPage \ref{ugGraphColorPage} on -page~\pageref{ugGraphColorPage} -\item ugGraphColorPalettePage \ref{ugGraphColorPalettePage} on -page~\pageref{ugGraphColorPalettePage} -\item ugGraphColorPage \ref{ugGraphColorPage} on -page~\pageref{ugGraphColorPage} -\item ugGraphColorPalettePage \ref{ugGraphColorPalettePage} on -page~\pageref{ugGraphColorPalettePage} -\end{itemize} -\index{pages!ugGraphTwoDOptionsPage!ug07.ht} -\index{ug07.ht!pages!ugGraphTwoDOptionsPage} -\index{ugGraphTwoDOptionsPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphTwoDOptionsPage}{7.1.4. Two-Dimensional Options} -\beginscroll - -The \axiomFun{draw} commands take an optional list of options, -such as {\tt title} shown above. -Each option is given by the syntax: {\it name} {\tt ==} {\it value}. -Here is a list of the available options in the order that they are -described below. - -\table{ {adaptive} {clip} {unit} {clip} {curveColor} {range} -{toScale} {pointColor} {coordinates}} - -The \axiom{adaptive} option turns adaptive plotting on or off. -Adaptive plotting uses an algorithm that traverses a graph and computes -more points for those parts of the graph with high curvature. -The higher the curvature of a region is, the more points the algorithm -computes. -% -% -\psXtc{ -The {\tt adaptive} option is normally on. -Here we turn it off. -}{ -\graphpaste{draw(sin(1/x),x=-2*\%pi..2*\%pi, adaptive == false)} -}{ -\epsffile[0 0 295 295]{../ps/2doptad.ps} -} -% -% -\psXtc{ -The {\tt clip} option turns clipping on or off. -If on, large values are cut off according to -\axiomFunFrom{clipPointsDefault}{GraphicsDefaults}. -}{ -\graphpaste{draw(tan(x),x=-2*\%pi..2*\%pi, clip == true)} -}{ -\epsffile[0 0 295 295]{../ps/2doptcp.ps} -} -% -% -\psXtc{ -Option {\tt toScale} does plotting to scale if {\tt true} or uses -the entire viewport if {\tt false}. -The default can be determined using -\axiomFunFrom{drawToScale}{GraphicsDefaults}. -}{ -\graphpaste{draw(sin(x),x=-\%pi..\%pi, toScale == true, unit == [1.0,1.0])} -}{ -\epsffile[0 0 295 295]{../ps/2doptsc.ps} -} -% -% -\psXtc{ -Option {\tt clip} with a range sets point clipping of a graph within the -ranges specified in the list \axiom{[x range,y range]}. -If only one range is specified, clipping applies to the y-axis. -}{ -\graphpaste{draw(sec(x),x=-2*\%pi..2*\%pi, clip == [-2*\%pi..2*\%pi,-\%pi..\%pi], unit == [1.0,1.0])} -}{ -\epsffile[0 0 295 295]{../ps/2doptcpr.ps} -} -% -\psXtc{ -Option {\tt curveColor} sets the color of the graph curves or lines to be the -indicated palette color -(see \downlink{``\ugGraphColorTitle''}{ugGraphColorPage} in Section -\ugGraphColorNumber\ignore{ugGraphColor} and -\downlink{``\ugGraphColorPaletteTitle''}{ugGraphColorPalettePage} -in Section \ugGraphColorPaletteNumber\ignore{ugGraphColorPalette}). -}{ -\graphpaste{draw(sin(x),x=-\%pi..\%pi, curveColor == bright red())} -}{ -\epsffile[0 0 295 295]{../ps/2doptcvc.ps} -} -% -\psXtc{ -Option {\tt pointColor} -sets the color of the graph points to the indicated -palette color -(see \downlink{``\ugGraphColorTitle''}{ugGraphColorPage} -in Section \ugGraphColorNumber\ignore{ugGraphColor} and -\downlink{``\ugGraphColorPaletteTitle''}{ugGraphColorPalettePage} -in Section \ugGraphColorPaletteNumber\ignore{ugGraphColorPalette}). -}{ -\graphpaste{draw(sin(x),x=-\%pi..\%pi, pointColor == pastel yellow())} -}{ -\epsffile[0 0 295 295]{../ps/2doptptc.ps} -} -% -\psXtc{ -Option {\tt unit} sets the intervals at which the axis units are plotted -according to the indicated steps [\axiom{x} interval, \axiom{y} interval]. -}{ -\graphpaste{draw(curve(9*sin(3*t/4),8*sin(t)), t = -4*\%pi..4*\%pi, unit == [2.0,1.0])} -}{ -\epsffile[0 0 295 295]{../ps/2doptut.ps} -} -% -% -\psXtc{ -Option {\tt range} sets the range of variables in a graph to be -within the ranges -for solving plane algebraic curve plots. -}{ -\graphpaste{draw(y**2 + y - (x**3 - x) = 0, x, y, range == [-2..2,-2..1], unit==[1.0,1.0])} -}{ -\epsffile[0 0 295 295]{../ps/2doptrga.ps} -} -% -% -\psXtc{ -A second example of a solution plot. -}{ -\graphpaste{draw(x**2 + y**2 = 1, x, y, range == [-3/2..3/2,-3/2..3/2], unit==[0.5,0.5])} -}{ -\epsffile[0 0 295 295]{../ps/2doptrgb.ps} -} -% -% -\psXtc{ -Option \axiom{coordinates} indicates the coordinate system -in which the graph -is plotted. -The default is to use the Cartesian coordinate system. -For more details, see \downlink{``\ugGraphCoordTitle''}{ugGraphCoordPage} in Section \ugGraphCoordNumber\ignore{ugGraphCoord} \texht{.}{or -\axiomType{CoordinateSystems}.} -}{ -\graphpaste{draw(curve(sin(5*t),t),t=0..2*\%pi, coordinates == polar)} -}{ -\epsffile[0 0 295 295]{../ps/2doptplr.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphColorTitle}{Color} -\newcommand{\ugGraphColorNumber}{7.1.5.} - -@ -\subsection{7.1.5. Color} -\label{ugGraphColorPage} -\index{pages!ugGraphColorPage!ug07.ht} -\index{ug07.ht!pages!ugGraphColorPage} -\index{ugGraphColorPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphColorPage}{7.1.5. Color} -\beginscroll - -The domain \axiomType{Color} -provides operations for manipulating -colors in \twodim{} graphs. -Colors are objects of \axiomType{Color}. -Each color has a {\it hue} and a {\it weight}. -Hues are represented by integers that range from \axiom{1} to the -\axiomFunFrom{numberOfHues()}{Color}, normally -\axiom{27}. -%\footnote{Use \axiomFun{colorDef} to -%change these values to any range you want for a given \threedim{} viewport} -Weights are floats and have the value \axiom{1.0} by default. -% -\indent{0} -\beginitems -% -\item[\axiomFun{color}]\funArgs{integer} -creates a color of hue {\it integer} and weight \axiom{1.0}. -% -\item[\axiomFun{hue}]\funArgs{color} -returns the hue of {\it color} as an integer. -% -\item[\axiomFun{red}]\funArgs{}, -\funSyntax{blue}{}, -\funSyntax{green}{}, and \funSyntax{yellow}{} -create colors of that hue with weight \axiom{1.0}. -% -\item[\subscriptIt{color}{1} {\tt +} \subscriptIt{color}{2}] returns the -color that results from additively combining the indicated -\subscriptIt{color}{1} and \subscriptIt{color}{2}. -Color addition is not commutative: changing the order of the arguments -produces different results. -% -\item[{\it integer} {\tt *} {\it color}] -changes the weight of {\it color} by {\it integer} -without affecting its hue. -For example, -\axiom{red() + 3*yellow()} produces a color closer to yellow than to red. -Color multiplication is not associative: changing the order of grouping -produces different results. -\enditems -\indent{0} -% -\psXtc{ -These functions can be used to change the point and curve colors -for two- and \threedim{} graphs. -Use the {\tt pointColor} option for points. -}{ -\graphpaste{draw(x**2,x=-1..1,pointColor == green())} -}{ -\epsffile[0 0 295 295]{../ps/23dcola.ps} -} -% -\psXtc{ -Use the {\tt curveColor} option for curves. -}{ -\graphpaste{draw(x**2,x=-1..1,curveColor == color(13) + 2*blue())} -}{ -\epsffile[0 0 295 295]{../ps/23dcolb.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphColorPaletteTitle}{Palette} -\newcommand{\ugGraphColorPaletteNumber}{7.1.6.} - -@ -\subsection{7.1.6. Palette} -\label{ugGraphColorPalettePage} -\index{pages!ugGraphColorPalettePage!ug07.ht} -\index{ug07.ht!pages!ugGraphColorPalettePage} -\index{ugGraphColorPalettePage!ug07.ht!pages} -<>= -\begin{page}{ugGraphColorPalettePage}{7.1.6. Palette} -\beginscroll - -Domain \axiomType{Palette} is the domain of shades of colors: -\axiomFun{dark}, \axiomFun{dim}, \axiomFun{bright}, \axiomFun{pastel}, and \axiomFun{light}, -designated by the integers \axiom{1} through \axiom{5}, respectively. -\xtc{ -Colors are normally ``bright.'' -}{ -\spadpaste{shade red()} -} -\xtc{ -To change the shade of a color, apply the name of a shade to it. -}{ -\spadpaste{myFavoriteColor := dark blue() \bound{mfc}} -} -\xtc{ -The expression \axiom{shade(color)} -returns the value of a shade of \axiom{color}. -}{ -\spadpaste{shade myFavoriteColor \free{mfc}} -} -\xtc{ -The expression \axiom{hue(color)} returns its hue. -}{ -\spadpaste{hue myFavoriteColor \free{mfc}} -} -\psXtc{ -Palettes can be used in specifying colors in \twodim{} graphs. -}{ -\graphpaste{draw(x**2,x=-1..1,curveColor == dark blue())} -}{ -\epsffile[0 0 295 295]{../ps/23dpal.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphTwoDControlTitle}{Two-Dimensional Control-Panel} -\newcommand{\ugGraphTwoDControlNumber}{7.1.7.} - -@ -\subsection{7.1.7. Two-Dimensional Control-Panel} -\label{ugGraphTwoDControlPage} -\index{pages!ugGraphTwoDControlPage!ug07.ht} -\index{ug07.ht!pages!ugGraphTwoDControlPage} -\index{ugGraphTwoDControlPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphTwoDControlPage}{7.1.7. Two-Dimensional Control-Panel} -\beginscroll -Once you have created a viewport, move your mouse to the viewport and click -with your left mouse button to display a control-panel. -The panel is displayed on the side of the viewport closest to -where you clicked. Each of the buttons which toggle on and off show the -current state of the graph. - - -\subsubsection{Transformations} - -Object transformations are executed from the control-panel by mouse-activated -potentiometer windows. -% -\indent{0} -\beginitems -% -\item[Scale:] To scale a graph, click on a mouse button -within the {\bf Scale} window in the upper left corner of the control-panel. -The axes along which the scaling is to occur are indicated by setting the -toggles above the arrow. -With {\tt X On} and {\tt Y On} appearing, both axes are selected and scaling -is uniform. -If either is not selected, for example, if {\tt X Off} appears, scaling is -non-uniform. -% -\item[Translate:] To translate a graph, click the mouse in the -{\bf Translate} window in the direction you wish the graph to move. -This window is located in the upper right corner of the control-panel. -Along the top of the {\bf Translate} window are two buttons for selecting -the direction of translation. -Translation along both coordinate axes results when {\tt X On} and {\tt Y -On} appear or along one axis when one is on, for example, {\tt X On} and -{\tt Y Off} appear. -\enditems -\indent{0} - -\subsubsection{Messages} - -The window directly below the transformation potentiometer windows is -used to display system messages relating to the viewport and the control-panel. -The following format is displayed: \newline -% -\centerline{{[scaleX, scaleY] \axiom{>}graph\axiom{<} [translateX, translateY] \newline}} -The two values to the left show the scale factor along the {\tt X} and -{\tt Y} coordinate axes. The two values to the right show the distance of -translation from the center in the {\tt X} and {\tt Y} directions. The number -in the center shows which graph in the viewport this data pertains to. -When multiple graphs exist in the same viewport, -the graph must be selected (see ``Multiple Graphs,'' below) in -order for its transformation data to be shown, otherwise the number -is 1. - -\subsubsection{Multiple Graphs} - -The {\bf Graphs} window contains buttons that allow the placement -of \twodim{} graphs into one of nine available slots in any other -\twodim{} viewport. -In the center of the window are numeral buttons from one to nine -that show whether a graph is displayed in the viewport. -Below each number button is a button showing whether a graph -that is present is selected for application of some -transformation. -When the caret symbol is displayed, then the graph in that slot -will be manipulated. -Initially, the graph for which the viewport is created occupies -the first slot, is displayed, and is selected. -% -% -\indent{0} -\beginitems -% -\item[Clear:] The {\bf Clear} button deselects every viewport graph slot. -A graph slot is reselected by selecting the button below its number. -% -\item[Query:] The {\bf Query} button is used to display the scale and -translate data for the indicated graph. When this button is selected the -message ``Click on the graph to query'' appears. Select a slot -number button from the {\bf Graphs} window. The scaling factor and translation -offset of the graph are then displayed in the message window. -% -\item[Pick:] The {\bf Pick} button is used to select a graph -to be placed or dropped into the indicated viewport. When this button is -selected, the message ``Click on the graph to pick'' appears. -Click on the slot with the graph number of the desired -graph. The graph information is held waiting for -you to execute a {\bf Drop} in some other graph. -% -\item[Drop:] Once a graph has been picked up using the {\bf Pick} button, -the {\bf Drop} button places it into a new viewport slot. -The message ``Click on the graph to drop'' appears in the message -window when the {\bf Drop} button is selected. -By selecting one of the slot number buttons in the {\bf Graphs} -window, the graph currently being held is dropped into this slot -and displayed. -\enditems -\indent{0} - -\subsubsection{Buttons} - -% -\indent{0} -\beginitems -% -\item[Axes] turns the coordinate axes on or off. -% -\item[Units] turns the units along the {\tt x} -and {\tt y} axis on or off. -% -\item[Box] encloses the area of the viewport graph -in a bounding box, or removes the box if already enclosed. -% -\item[Pts] turns on or off the display of points. -% -\item[Lines] turns on or off the display -of lines connecting points. -% -\item[PS] writes the current viewport contents to -a file {\bf axiom2D.ps} or to a name specified in the user's {\bf -.Xdefaults} file. -The file is placed in the directory from which Axiom or the {\bf -viewalone} program was invoked. -% -\item[Reset] resets the object transformation -characteristics and attributes back to their initial states. -% -\item[Hide] makes the control-panel disappear. -% -\item[Quit] queries whether the current viewport -session should be terminated. -\enditems -\indent{0} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphTwoDopsTitle}{Operations for Two-Dimensional Graphics} -\newcommand{\ugGraphTwoDopsNumber}{7.1.8.} - -@ -\subsection{7.1.8. Operations for Two-Dimensional Graphics} -\label{ugGraphTwoDopsPage} -\index{pages!ugGraphTwoDopsPage!ug07.ht} -\index{ug07.ht!pages!ugGraphTwoDopsPage} -\index{ugGraphTwoDopsPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphTwoDopsPage} -{7.1.8. Operations for Two-Dimensional Graphics} -\beginscroll - -Here is a summary of useful Axiom operations for \twodim{} -graphics. -Each operation name is followed by a list of arguments. -Each argument is written as a variable informally named according -to the type of the argument (for example, {\it integer}). -If appropriate, a default value for an argument is given in -parentheses immediately following the name. - -% -\texht{\bgroup\hbadness = 10001\sloppy}{} -\indent{0} -\beginitems -% -\item[\axiomFun{adaptive}]\funArgs{\optArg{boolean\argDef{true}}} -sets or indicates whether graphs are plotted -according to the adaptive refinement algorithm. -% -\item[\axiomFun{axesColorDefault}]\funArgs{\optArg{color\argDef{dark blue()}}} -sets or indicates the default color of the -axes in a \twodim{} graph viewport. -% -\item[\axiomFun{clipPointsDefault}]\funArgs{\optArg{boolean\argDef{false}}} -sets or -indicates whether point clipping is -to be applied as the default for graph plots. -% -\item[\axiomFun{drawToScale}]\funArgs{\optArg{boolean\argDef{false}}} -sets or -indicates whether the plot of a graph -is ``to scale'' or uses the entire viewport space as the default. -% -\item[\axiomFun{lineColorDefault}]\funArgs{\optArg{color\argDef{pastel yellow()}}} -sets or indicates the default color of the -lines or curves in a \twodim{} graph viewport. -% -\item[\axiomFun{maxPoints}]\funArgs{\optArg{integer\argDef{500}}} -sets or indicates -the default maximum number of -possible points to be used when constructing a \twodim{} graph. -% -\item[\axiomFun{minPoints}]\funArgs{\optArg{integer\argDef{21}}} -sets or indicates the default minimum number of -possible points to be used when constructing a \twodim{} graph. -% -\item[\axiomFun{pointColorDefault}]\funArgs{\optArg{color\argDef{bright red()}}} -sets or indicates the default color of the -points in a \twodim{} graph viewport. -% -\item[\axiomFun{pointSizeDefault}]\funArgs{\optArg{integer\argDef{5}}} -sets or indicates the default size of the -dot used to plot points in a \twodim{} graph. -% -\item[\axiomFun{screenResolution}]\funArgs{\optArg{integer\argDef{600}}} -sets or indicates the default screen -resolution constant used in setting the computation limit of adaptively -generated curve plots. -% -\item[\axiomFun{unitsColorDefault}]\funArgs{\optArg{color\argDef{dim green()}}} -sets or indicates the default color of the -unit labels in a \twodim{} graph viewport. -% -\item[\axiomFun{viewDefaults}]\funArgs{} -resets the default settings for the following -attributes: point color, line color, axes color, units color, point size, -viewport upper left-hand corner position, and the viewport size. -% -\item[\axiomFun{viewPosDefault}]\funArgs{\optArg{list\argDef{[100,100]}}} -sets or indicates the default position of the -upper left-hand corner of a \twodim{} viewport, relative to the -display root window. -The upper left-hand corner of the display is considered to be at the -(0, 0) position. -% -\item[\axiomFun{viewSizeDefault}]\funArgs{\optArg{list\argDef{[200,200]}}} -sets or -indicates the default size in which two -dimensional viewport windows are shown. -It is defined by a width and then a height. -% -\item[\axiomFun{viewWriteAvailable}]\funArgs{\optArg{list\argDef{["pixmap", -"bitmap", "postscript", \"image"}}} -indicates the possible file types -that can be created with the \axiomFunFrom{write}{TwoDimensionalViewport} function. -% -\item[\axiomFun{viewWriteDefault}] -\funArgs{\optArg{list\argDef{[]}}} -sets or indicates the default types of files, in -addition to the {\bf data} file, that are created when a -\axiomFun{write} function is executed on a viewport. -% -\item[\axiomFun{units}]\funArgs{viewport, integer\argDef{1}, string\argDef{"off"}} -turns the units on or off for the graph with index {\it integer}. -% -\item[\axiomFun{axes}]\funArgs{viewport, integer\argDef{1}, string\argDef{"on"}} -turns the axes on -or off for the graph with index {\it integer}. -% -\item[\axiomFun{close}]\funArgs{viewport} -closes {\it viewport}. -% -\item[\axiomFun{connect}]\funArgs{viewport, integer\argDef{1}, string\argDef{"on"}} -declares whether lines -connecting the points are displayed or not. -% -\item[\axiomFun{controlPanel}]\funArgs{viewport, string\argDef{"off"}} -declares -whether the \twodim{} control-panel is automatically displayed -or not. -% -\item[\axiomFun{graphs}]\funArgs{viewport} -returns a list -describing the state of each graph. -If the graph state is not being used this is shown by {\tt "undefined"}, -otherwise a description of the graph's contents is shown. -% -\item[\axiomFun{graphStates}]\funArgs{viewport} -displays -a list of all the graph states available for {\it viewport}, giving the -values for every property. -% -\item[\axiomFun{key}]\funArgs{viewport} -returns the process -ID number for {\it viewport}. -% -\item[\axiomFun{move}]\funArgs{viewport, -\subscriptText{integer}{x}(viewPosDefault), -\subscriptText{integer}{y}(viewPosDefault)} -moves {\it viewport} on the screen so that the -upper left-hand corner of {\it viewport} is at the position {\it (x,y)}. -% -\item[\axiomFun{options}]\funArgs{\it viewport} -returns a list -of all the \axiomType{DrawOption}s used by {\it viewport}. -% -\item[\axiomFun{points}]\funArgs{viewport, integer\argDef{1}, string\argDef{"on"}} -specifies whether the graph points for graph {\it integer} are -to be displayed or not. -% -\item[\axiomFun{region}]\funArgs{viewport, integer\argDef{1}, string\argDef{"off"}} -declares whether graph {\it integer} is or is not to be displayed -with a bounding rectangle. -% -\item[\axiomFun{reset}]\funArgs{viewport} -resets all the properties of {\it viewport}. -% -\item[\axiomFun{resize}]\funArgs{viewport, -\subscriptText{integer}{width}, \subscriptText{integer}{height}} -resizes {\it viewport} with a new {\it width} and {\it height}. -% -\item[\axiomFun{scale}]\funArgs{viewport, \subscriptText{integer}{n}\argDef{1}, -\subscriptText{integer}{x}\argDef{0.9}, \subscriptText{integer}{y}\argDef{0.9}} -scales values for the -{\it x} and {\it y} coordinates of graph {\it n}. -% -\item[\axiomFun{show}]\funArgs{viewport, \subscriptText{integer}{n}\argDef{1}, -string\argDef{"on"}} -indicates if graph {\it n} is shown or not. -% -\item[\axiomFun{title}]\funArgs{viewport, string\argDef{"Axiom 2D"}} -designates the title for {\it viewport}. -% -\item[\axiomFun{translate}]\funArgs{viewport, -\subscriptText{integer}{n}\argDef{1}, -\subscriptText{float}{x}\argDef{0.0}, \subscriptText{float}{y}\argDef{0.0}} -causes graph {\it n} to be moved {\it x} and {\it y} units in the respective directions. -% -\item[\axiomFun{write}]\funArgs{viewport, \subscriptText{string}{directory}, -\optArg{strings}} -if no third argument is given, writes the {\bf data} file onto the directory -with extension {\bf data}. -The third argument can be a single string or a list of strings with some or -all the entries {\tt "pixmap"}, {\tt "bitmap"}, {\tt "postscript"}, and -{\tt "image"}. -\enditems -\indent{0} -\texht{\egroup}{} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphTwoDbuildTitle}{Addendum: Building Two-Dimensional Graphs} -\newcommand{\ugGraphTwoDbuildNumber}{7.1.9.} - -@ -\subsection{7.1.9. Addendum: Building Two-Dimensional Graphs} -\label{ugGraphTwoDbuildPage} -\index{pages!ugGraphTwoDbuildPage!ug07.ht} -\index{ug07.ht!pages!ugGraphTwoDbuildPage} -\index{ugGraphTwoDbuildPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphTwoDbuildPage} -{7.1.9. Addendum: Building Two-Dimensional Graphs} -\beginscroll - -In this section we demonstrate how to create \twodim{} graphs from -lists of points and give an example showing how to read the lists -of points from a file. - -\subsubsection{Creating a Two-Dimensional Viewport from a List of Points} - -Axiom creates lists of points in a \twodim{} viewport by utilizing -the \axiomType{GraphImage} and \axiomType{TwoDimensionalViewport} domains. -In this example, the \axiomFunFrom{makeGraphImage}{GraphImage} -function takes a list of lists of points parameter, a list of colors for -each point in the graph, a list of colors for each line in the graph, and -a list of sizes for each point in the graph. -% -\xtc{ -The following expressions create a list of lists of points which will be read -by Axiom and made into a \twodim{} viewport. -}{ -\spadpaste{p1 := point [1,1]\$(Point DFLOAT) \bound{p1}} -} -\xtc{ -}{ -\spadpaste{p2 := point [0,1]\$(Point DFLOAT) \bound{p2}} -} -\xtc{ -}{ -\spadpaste{p3 := point [0,0]\$(Point DFLOAT) \bound{p3}} -} -\xtc{ -}{ -\spadpaste{p4 := point [1,0]\$(Point DFLOAT) \bound{p4}} -} -\xtc{ -}{ -\spadpaste{p5 := point [1,.5]\$(Point DFLOAT) \bound{p5}} -} -\xtc{ -}{ -\spadpaste{p6 := point [.5,0]\$(Point DFLOAT) \bound{p6}} -} -\xtc{ -}{ -\spadpaste{p7 := point [0,0.5]\$(Point DFLOAT) \bound{p7}} -} -\xtc{ -}{ -\spadpaste{p8 := point [.5,1]\$(Point DFLOAT) \bound{p8}} -} -\xtc{ -}{ -\spadpaste{p9 := point [.25,.25]\$(Point DFLOAT) \bound{p9}} -} -\xtc{ -}{ -\spadpaste{p10 := point [.25,.75]\$(Point DFLOAT) \bound{p10}} -} -\xtc{ -}{ -\spadpaste{p11 := point [.75,.75]\$(Point DFLOAT) \bound{p11}} -} -\xtc{ -}{ -\spadpaste{p12 := point [.75,.25]\$(Point DFLOAT) \bound{p12}} -} -\xtc{ -Finally, here is the list. -}{ -\spadpaste{llp := [[p1,p2], [p2,p3], [p3,p4], [p4,p1], [p5,p6], [p6,p7], [p7,p8], [p8,p5], [p9,p10], [p10,p11], [p11,p12], [p12,p9]] \free{p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12} \bound{llp}} -} -\xtc{ -Now we set the point sizes for all components of the graph. -}{ -\spadpaste{size1 := 6::PositiveInteger \bound{size1}} -} -\xtc{ -}{ -} -\xtc{ -}{ -\spadpaste{size2 := 8::PositiveInteger \bound{size2}} -} -\xtc{ -}{ -\spadpaste{size3 := 10::PositiveInteger \bound{size3}} -} -\xtc{ -}{ -\spadpaste{lsize := [size1, size1, size1, size1, size2, size2, size2, size2, size3, size3, size3, size3] \bound{lsize} \free{size1 size2 size3}} -} -\xtc{ -Here are the colors for the points. -}{ -\spadpaste{pc1 := pastel red() \bound{pc1}} -} -\xtc{ -}{ -\spadpaste{pc2 := dim green() \bound{pc2}} -} -\xtc{ -}{ -\spadpaste{pc3 := pastel yellow() \bound{pc3}} -} -\xtc{ -}{ -\spadpaste{lpc := [pc1, pc1, pc1, pc1, pc2, pc2, pc2, pc2, pc3, pc3, pc3, pc3] \free{pc1 pc2 pc3} \bound{lpc}} -} -\xtc{ -Here are the colors for the lines. -}{ -\spadpaste{lc := [pastel blue(), light yellow(), dim green(), bright red(), light green(), dim yellow(), bright blue(), dark red(), pastel red(), light blue(), dim green(), light yellow()] \bound{lc}} -} -\xtc{ -Now the \axiomType{GraphImage} is created according to the component -specifications indicated above. -}{ -\spadpaste{g := makeGraphImage(llp,lpc,lc,lsize)\$GRIMAGE \bound{g} \free{llp lpc lc lsize}} -} -\psXtc{ -The \axiomFunFrom{makeViewport2D}{TwoDimensionalViewport} function now -creates a \axiomType{TwoDimensionalViewport} for this graph according to the -list of options specified within the brackets. -}{ -\graphpaste{makeViewport2D(g,[title("Lines")])\$VIEW2D \free{g}} -}{ -% -} -%See Figure #.#. -\xtc{ -This example demonstrates the use of the \axiomType{GraphImage} functions -\axiomFunFrom{component}{GraphImage} and \axiomFunFrom{appendPoint}{GraphImage} -in adding points to an empty \axiomType{GraphImage}. -}{ -\spadpaste{)clear all \bound{clearAll}} -} -\xtc{ -}{ -\spadpaste{g := graphImage()\$GRIMAGE \bound{Sg}\free{clearAll}} -} -\xtc{ -}{ -\spadpaste{p1 := point [0,0]\$(Point DFLOAT) \bound{Sp1}} -} -\xtc{ -}{ -\spadpaste{p2 := point [.25,.25]\$(Point DFLOAT) \bound{Sp2}} -} -\xtc{ -}{ -\spadpaste{p3 := point [.5,.5]\$(Point DFLOAT) \bound{Sp3}} -} -\xtc{ -}{ -\spadpaste{p4 := point [.75,.75]\$(Point DFLOAT) \bound{Sp4}} -} -\xtc{ -}{ -\spadpaste{p5 := point [1,1]\$(Point DFLOAT) \bound{Sp5}} -} -\xtc{ -}{ -\spadpaste{component(g,p1)\$GRIMAGE\free{Sg Sp1}\bound{gp1}} -} -\xtc{ -}{ -\spadpaste{component(g,p2)\$GRIMAGE\free{Sg Sp2}\bound{gp2}} -} -\xtc{ -}{ -\spadpaste{appendPoint(g,p3)\$GRIMAGE\free{gp1 gp2 Sp3}\bound{gp3}} -} -\xtc{ -}{ -\spadpaste{appendPoint(g,p4)\$GRIMAGE\free{gp3 Sp4}\bound{gp4}} -} -\xtc{ -}{ -\spadpaste{appendPoint(g,p5)\$GRIMAGE\free{gp4 Sp5}\bound{gp5}} -} -\xtc{ -}{ -\spadpaste{g1 := makeGraphImage(g)\$GRIMAGE \bound{Sg1} \free{gp5}} -} -\psXtc{ -Here is the graph. -}{ -\graphpaste{makeViewport2D(g1,[title("Graph Points")])\$VIEW2D \free{Sg1}} -}{ -% -} -% -%See Figure #.#. -% -\xtc{ -A list of points can also be made into a \axiomType{GraphImage} by using -the operation \axiomFunFrom{coerce}{GraphImage}. It is equivalent to adding -each point to \axiom{g2} using \axiomFunFrom{component}{GraphImage}. -}{ -\spadpaste{g2 := coerce([[p1],[p2],[p3],[p4],[p5]])\$GRIMAGE \free{Sp1 Sp2 Sp3 Sp4 Sp5} \bound{Sg2}} -} -\xtc{ -Now, create an empty \axiomType{TwoDimensionalViewport}. -}{ -\spadpaste{v := viewport2D()\$VIEW2D \bound{Sv}} -} -\xtc{ -}{ -\spadpaste{options(v,[title("Just Points")])\$VIEW2D \free{Sv}\bound{Svo}} -} -\xtc{ -Place the graph into the viewport. -}{ -\spadpaste{putGraph(v,g2,1)\$VIEW2D \free{Sg2 Svo}\bound{Svog2}} -} -\psXtc{ -Take a look. -}{ -\graphpaste{makeViewport2D(v)\$VIEW2D \free{Svog2}} -}{ -% -} - -%See Figure #.#. - -\subsubsection{Creating a Two-Dimensional Viewport of a List of Points from a File} - -The following three functions read a list of points from a -file and then draw the points and the connecting lines. The -points are stored in the file in readable form as floating point numbers -(specifically, \axiomType{DoubleFloat} values) as an alternating -stream of \axiom{x}- and \axiom{y}-values. For example, +\subsection{Asp6 Example Code} +\label{Asp6ExampleCode} +\index{pages!Asp6ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp6ExampleCode} +\index{Asp6ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp6ExampleCode}{Asp6 Example Code} \begin{verbatim} -0.0 0.0 1.0 1.0 2.0 4.0 -3.0 9.0 4.0 16.0 5.0 25.0 + SUBROUTINE FCN(N,X,FVEC,IFLAG) + DOUBLE PRECISION X(N),FVEC(N) + INTEGER N,IFLAG + FVEC(1)=(-2.0D0*X(2))+(-2.0D0*X(1)**2)+3.0D0*X(1)+1.0D0 + FVEC(2)=(-2.0D0*X(3))+(-2.0D0*X(2)**2)+3.0D0*X(2)+(-1.0D0*X(1))+1. + &0D0 + FVEC(3)=(-2.0D0*X(4))+(-2.0D0*X(3)**2)+3.0D0*X(3)+(-1.0D0*X(2))+1. + &0D0 + FVEC(4)=(-2.0D0*X(5))+(-2.0D0*X(4)**2)+3.0D0*X(4)+(-1.0D0*X(3))+1. + &0D0 + FVEC(5)=(-2.0D0*X(6))+(-2.0D0*X(5)**2)+3.0D0*X(5)+(-1.0D0*X(4))+1. + &0D0 + FVEC(6)=(-2.0D0*X(7))+(-2.0D0*X(6)**2)+3.0D0*X(6)+(-1.0D0*X(5))+1. + &0D0 + FVEC(7)=(-2.0D0*X(8))+(-2.0D0*X(7)**2)+3.0D0*X(7)+(-1.0D0*X(6))+1. + &0D0 + FVEC(8)=(-2.0D0*X(9))+(-2.0D0*X(8)**2)+3.0D0*X(8)+(-1.0D0*X(7))+1. + &0D0 + FVEC(9)=(-2.0D0*X(9)**2)+3.0D0*X(9)+(-1.0D0*X(8))+1.0D0 + RETURN + END \end{verbatim} - -\beginImportant - -\noindent -{\tt 1.\ \ \ drawPoints(lp:List\ Point\ DoubleFloat):VIEW2D\ ==}\newline -{\tt 2.\ \ \ \ \ g\ :=\ graphImage()\$GRIMAGE}\newline -{\tt 3.\ \ \ \ \ for\ p\ in\ lp\ repeat}\newline -{\tt 4.\ \ \ \ \ \ \ component(g,p,pointColorDefault(),lineColorDefault(),}\newline -{\tt 5.\ \ \ \ \ \ \ \ \ pointSizeDefault())}\newline -{\tt 6.\ \ \ \ \ gi\ :=\ makeGraphImage(g)\$GRIMAGE}\newline -{\tt 7.\ \ \ \ \ makeViewport2D(gi,[title("Points")])\$VIEW2D}\newline -{\tt 8.\ \ \ }\newline -{\tt 9.\ \ \ drawLines(lp:List\ Point\ DoubleFloat):VIEW2D\ ==}\newline -{\tt 10.\ \ \ \ g\ :=\ graphImage()\$GRIMAGE}\newline -{\tt 11.\ \ \ \ component(g,\ lp,\ pointColorDefault(),\ lineColorDefault(),}\newline -{\tt 12.\ \ \ \ \ \ pointSizeDefault())\$GRIMAGE}\newline -{\tt 13.\ \ \ \ gi\ :=\ makeGraphImage(g)\$GRIMAGE}\newline -{\tt 14.\ \ \ \ makeViewport2D(gi,[title("Points")])\$VIEW2D}\newline -{\tt 15.\ \ }\newline -{\tt 16.\ \ plotData2D(name,\ title)\ ==}\newline -{\tt 17.\ \ \ \ f:File(DFLOAT)\ :=\ open(name,"input")}\newline -{\tt 18.\ \ \ \ lp:LIST(Point\ DFLOAT)\ :=\ empty()}\newline -{\tt 19.\ \ \ \ while\ ((x\ :=\ readIfCan!(f))\ case\ DFLOAT)\ repeat}\newline -{\tt 20.\ \ \ \ \ \ y\ :\ DFLOAT\ :=\ read!(f)}\newline -{\tt 21.\ \ \ \ \ \ lp\ :=\ cons(point\ [x,y]\$(Point\ DFLOAT),\ lp)}\newline -{\tt 22.\ \ \ \ \ \ lp}\newline -{\tt 23.\ \ \ \ close!(f)}\newline -{\tt 24.\ \ \ \ drawPoints(lp)}\newline -{\tt 25.\ \ \ \ drawLines(lp)}\newline -\endImportant -% -This command will actually create the viewport and the graph if -the point data is in the file \axiom{"file.data"}. -\beginImportant - -\noindent -{\tt 1.\ \ \ plotData2D("file.data",\ "2D\ Data\ Plot")}\newline -\endImportant - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphTwoDappendTitle}{Addendum: Appending a Graph to a Viewport Window Containing a Graph} -\newcommand{\ugGraphTwoDappendNumber}{7.1.10.} - -@ -\subsection{7.1.10. Addendum: Appending a Graph to a Viewport Window Containing a Graph} -\label{ugGraphTwoDappendPage} -\index{pages!ugGraphTwoDappendPage!ug07.ht} -\index{ug07.ht!pages!ugGraphTwoDappendPage} -\index{ugGraphTwoDappendPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphTwoDappendPage} -{7.1.10. Addendum: Appending a Graph to a Viewport Window Containing a Graph} -\beginscroll - -This section demonstrates how to append a \twodim{} graph to a viewport -already containing other graphs. -The default \axiomFun{draw} command places a graph into the first -\axiomType{GraphImage} slot position of the \axiomType{TwoDimensionalViewport}. - -\xtc{ -This graph is in the first slot in its viewport. -}{ -\spadpaste{v1 := draw(sin(x),x=0..2*\%pi) \bound{v1}} -} -\xtc{ -So is this graph. -}{ -\spadpaste{v2 := draw(cos(x),x=0..2*\%pi, curveColor==light red()) \bound{v2}} -} -\xtc{ -The operation \axiomFunFrom{getGraph}{TwoDimensionalViewport} -retrieves the \axiomType{GraphImage} \axiom{g1} from the first slot position -in the viewport \axiom{v1}. -}{ -\spadpaste{g1 := getGraph(v1,1) \bound{g1}\free{v1}} -} -\xtc{ -Now \axiomFunFrom{putGraph}{TwoDimensionalViewport} -places \axiom{g1} into the the second slot position of \axiom{v2}. -}{ -\spadpaste{putGraph(v2,g1,2) \bound{v22}\free{g1 v2}} -} -\psXtc{ -Display the new \axiomType{TwoDimensionalViewport} containing both graphs. -}{ -\graphpaste{makeViewport2D(v2) \free{v22}} -}{ -% -} -% -%See Figure #.#. -% - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphThreeDTitle}{Three-Dimensional Graphics} -\newcommand{\ugGraphThreeDNumber}{7.2.} - -@ -\subsection{7.2. Three-Dimensional Graphics} -\label{ugGraphThreeDPage} -\begin{itemize} -\item ugGraphThreeDPlotPage \ref{ugGraphThreeDPlotPage} on -page~\pageref{ugGraphThreeDPlotPage} -\item ugGraphThreeDParmPage \ref{ugGraphThreeDParmPage} on -page~\pageref{ugGraphThreeDParmPage} -\item ugGraphThreeDParPage \ref{ugGraphThreeDParPage} on -page~\pageref{ugGraphThreeDParPage} -\item ugGraphThreeDOptionsPage \ref{ugGraphThreeDOptionsPage} on -page~\pageref{ugGraphThreeDOptionsPage} -\item ugGraphMakeObjectPage \ref{ugGraphMakeObjectPage} on -page~\pageref{ugGraphMakeObjectPage} -\item ugGraphThreeDBuildPage \ref{ugGraphThreeDBuildPage} on -page~\pageref{ugGraphThreeDBuildPage} -\item ugGraphCoordPage \ref{ugGraphCoordPage} on -page~\pageref{ugGraphCoordPage} -\item ugGraphClipPage \ref{ugGraphClipPage} on -page~\pageref{ugGraphClipPage} -\item ugGraphThreeDControlPage \ref{ugGraphThreeDControlPage} on -page~\pageref{ugGraphThreeDControlPage} -\item ugGraphThreeDopsPage \ref{ugGraphThreeDopsPage} on -page~\pageref{ugGraphThreeDopsPage} -\item ugXdefaultsPage \ref{ugXdefaultsPage} on -page~\pageref{ugXdefaultsPage} -\end{itemize} -\index{pages!ugGraphThreeDPage!ug07.ht} -\index{ug07.ht!pages!ugGraphThreeDPage} -\index{ugGraphThreeDPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphThreeDPage}{7.2. Three-Dimensional Graphics} -\beginscroll -% -The Axiom \threedim{} graphics package provides the ability to -% -\indent{4} -\beginitems -% -\item[-] generate surfaces defined by a function of two real variables -% -\item[-] generate space curves and tubes defined by parametric equations -% -\item[-] generate surfaces defined by parametric equations -\enditems -\indent{0} -These graphs can be modified by using various options, such as calculating -points in the spherical coordinate system or changing the polygon grid size -of a surface. - -\beginmenu - \menudownlink{ -{7.2.1. Plotting Three-Dimensional Functions of Two Variables}} -{ugGraphThreeDPlotPage} - \menudownlink{ -{7.2.2. Plotting Three-Dimensional Parametric Space Curves}} -{ugGraphThreeDParmPage} - \menudownlink{ -{7.2.3. Plotting Three-Dimensional Parametric Surfaces}} -{ugGraphThreeDParPage} - \menudownlink{{7.2.4. Three-Dimensional Options}}{ugGraphThreeDOptionsPage} - \menudownlink{{7.2.5. The makeObject Command}}{ugGraphMakeObjectPage} - \menudownlink{ -{7.2.6. Building Three-Dimensional Objects From Primitives}} -{ugGraphThreeDBuildPage} - \menudownlink{{7.2.7. Coordinate System Transformations}}{ugGraphCoordPage} - \menudownlink{{7.2.8. Three-Dimensional Clipping}}{ugGraphClipPage} - \menudownlink{{7.2.9. Three-Dimensional Control-Panel}} -{ugGraphThreeDControlPage} - \menudownlink{{7.2.10. Operations for Three-Dimensional Graphics}} -{ugGraphThreeDopsPage} - \menudownlink{{7.2.11. Customization using .Xdefaults}}{ugXdefaultsPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphThreeDPlotTitle}{Plotting Three-Dimensional Functions of Two Variables} -\newcommand{\ugGraphThreeDPlotNumber}{7.2.1.} - -@ -\subsection{7.2.1. Plotting Three-Dimensional Functions of Two Variables} -\label{ugGraphThreeDPlotPage} -\begin{itemize} -\item ugGraphThreeDOptionsPage \ref{ugGraphThreeDOptionsPage} on -page~\pageref{ugGraphThreeDOptionsPage} -\end{itemize} -\index{pages!ugGraphThreeDPlotPage!ug07.ht} -\index{ug07.ht!pages!ugGraphThreeDPlotPage} -\index{ugGraphThreeDPlotPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphThreeDPlotPage} -{7.2.1. Plotting Three-Dimensional Functions of Two Variables} -\beginscroll - -The simplest \threedim{} graph is that of a surface defined by a function -of two variables, \axiom{z = f(x,y)}. - -% -\beginImportant -The general format for drawing a surface defined by a formula \axiom{f(x,y)} -of two variables \axiom{x} and \axiom{y} is: -% -\centerline{{{\tt draw(f(x,y), x = a..b, y = c..d, {\it options})}}} -where \axiom{a..b} and \axiom{c..d} define the range of \axiom{x} -and \axiom{y}, and where {\it options} prescribes zero or more -options as described in -\downlink{``\ugGraphThreeDOptionsTitle''}{ugGraphThreeDOptionsPage} -in Section \ugGraphThreeDOptionsNumber\ignore{ugGraphThreeDOptions}. -An example of an option is \axiom{title == "Title of Graph".} -An alternative format involving a function \axiom{f} is also -available. -\endImportant - -% -\psXtc{ -The simplest way to plot a function of two variables is to use a formula. -With formulas you always precede the range specifications with -the variable name and an \spadSyntax{=} sign. -}{ -\graphpaste{draw(cos(x*y),x=-3..3,y=-3..3)} -}{ -\epsffile[0 0 295 295]{../ps/3d2vara.ps} -} -% -\xtc{ -If you intend to use a function more than once, -or it is long and complex, then first -give its definition to Axiom. -}{ -\spadpaste{f(x,y) == sin(x)*cos(y) \bound{f}} -} -% -% -\psXtc{ -To draw the function, just give its name and drop the variables -from the range specifications. -Axiom compiles your function for efficient computation -of data for the graph. -Notice that Axiom uses the text of your function as a -default title. -}{ -\graphpaste{draw(f,-\%pi..\%pi,-\%pi..\%pi) \free{f}} -}{ -\epsffile[0 0 295 295]{../ps/3d2varb.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphThreeDParmTitle}{Plotting Three-Dimensional Parametric Space Curves} -\newcommand{\ugGraphThreeDParmNumber}{7.2.2.} - -@ -\subsection{7.2.2. Plotting Three-Dimensional Parametric Space Curves} -\label{ugGraphThreeDParmPage} -\begin{itemize} -\item ugGraphThreeDOptionsPage \ref{ugGraphThreeDOptionsPage} on -page~\pageref{ugGraphThreeDOptionsPage} -\end{itemize} -\index{pages!ugGraphThreeDParmPage!ug07.ht} -\index{ug07.ht!pages!ugGraphThreeDParmPage} -\index{ugGraphThreeDParmPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphThreeDParmPage} -{7.2.2. Plotting Three-Dimensional Parametric Space Curves} -\beginscroll - -A second kind of \threedim{} graph is a \threedim{} space curve -defined by the parametric equations for \axiom{x(t)}, \axiom{y(t)}, -and \axiom{z(t)} as a function of an independent variable \axiom{t}. - -% -\beginImportant -The general format for drawing a \threedim{} space curve defined by -parametric formulas \axiom{x = f(t)}, \axiom{y = g(t)}, and -\axiom{z = h(t)} is: -% -\centerline{{{\tt draw(curve(f(t),g(t),h(t)), t = a..b, {\it options})}}} -where \axiom{a..b} defines the range of the independent variable -\axiom{t}, and where {\it options} prescribes zero or more options -as described in -\downlink{``\ugGraphThreeDOptionsTitle''}{ugGraphThreeDOptionsPage} -in Section \ugGraphThreeDOptionsNumber\ignore{ugGraphThreeDOptions}. -An example of an option is \axiom{title == "Title of Graph".} -An alternative format involving functions \axiom{f}, \axiom{g} and -\axiom{h} is also available. -\endImportant - -% -\psXtc{ -If you use explicit formulas to draw a space curve, always precede -the range specification with the variable name and an -\spadSyntax{=} sign. -}{ -\graphpaste{draw(curve(5*cos(t), 5*sin(t),t), t=-12..12)} -}{ -\epsffile[0 0 295 295]{../ps/3dpsca.ps} -} -% -\xtc{ -Alternatively, you can draw space curves by referring to functions. -}{ -\spadpaste{i1(t:DFLOAT):DFLOAT == sin(t)*cos(3*t/5) \bound{i1}} -} -\xtc{ -This is useful if the functions are to be used more than once \ldots -}{ -\spadpaste{i2(t:DFLOAT):DFLOAT == cos(t)*cos(3*t/5) \bound{i2}} -} -\xtc{ -or if the functions are long and complex. -}{ -\spadpaste{i3(t:DFLOAT):DFLOAT == cos(t)*sin(3*t/5) \bound{i3}} -} -% -% -\psXtc{ -Give the names of the functions and -drop the variable name specification in the second argument. -Again, Axiom supplies a default title. -}{ -\graphpaste{draw(curve(i1,i2,i3),0..15*\%pi) \free{i1 i2 i3}} -}{ -\epsffile[0 0 295 295]{../ps/3dpscb.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphThreeDParTitle}{Plotting Three-Dimensional Parametric Surfaces} -\newcommand{\ugGraphThreeDParNumber}{7.2.3.} - -@ -\subsection{7.2.3. Plotting Three-Dimensional Parametric Surfaces} -\label{ugGraphThreeDParPage} -\begin{itemize} -\item ugGraphThreeDOptionsPage \ref{ugGraphThreeDOptionsPage} on -page~\pageref{ugGraphThreeDOptionsPage} -\item ugGraphCoordPage \ref{ugGraphCoordPage} on -page~\pageref{ugGraphCoordPage} -\end{itemize} -\index{pages!ugGraphThreeDParPage!ug07.ht} -\index{ug07.ht!pages!ugGraphThreeDParPage} -\index{ugGraphThreeDParPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphThreeDParPage} -{7.2.3. Plotting Three-Dimensional Parametric Surfaces} -\beginscroll - -A third kind of \threedim{} graph is a surface defined by -parametric equations for \axiom{x(u,v)}, \axiom{y(u,v)}, and -\axiom{z(u,v)} of two independent variables \axiom{u} and \axiom{v}. - -% -\beginImportant -The general format for drawing a \threedim{} graph defined by -parametric formulas \axiom{x = f(u,v)}, \axiom{y = g(u,v)}, -and \axiom{z = h(u,v)} is: -% -\centerline{{{\tt draw(surface(f(u,v),g(u,v),h(u,v)), u = a..b, v = c..d, {\it options})}}} -where \axiom{a..b} and \axiom{c..d} define the range of the -independent variables \axiom{u} and \axiom{v}, and where -{\it options} prescribes zero or more options as described in -\downlink{``\ugGraphThreeDOptionsTitle''}{ugGraphThreeDOptionsPage} -in Section \ugGraphThreeDOptionsNumber\ignore{ugGraphThreeDOptions}. -An example of an option is \axiom{title == "Title of Graph".} -An alternative format involving functions \axiom{f}, \axiom{g} and -\axiom{h} is also available. -\endImportant - -% -\psXtc{ -This example draws a graph of a surface plotted using the -parabolic cylindrical coordinate system option. -The values of the functions supplied to \axiomFun{surface} are -interpreted in coordinates as given by a {\tt coordinates} option, -here as parabolic cylindrical coordinates (see -\downlink{``\ugGraphCoordTitle''}{ugGraphCoordPage} -in Section \ugGraphCoordNumber\ignore{ugGraphCoord}). -}{ -\graphpaste{draw(surface(u*cos(v), u*sin(v), v*cos(u)), u=-4..4, v=0..\%pi, coordinates== parabolicCylindrical)} -}{ -\epsffile[0 0 295 295]{../ps/3dpsa.ps} -} -% -Again, you can graph these parametric surfaces using functions, -if the functions are long and complex. -\xtc{ -Here we declare the types of arguments and values to be of type -\axiomType{DoubleFloat}. -}{ -\spadpaste{n1(u:DFLOAT,v:DFLOAT):DFLOAT == u*cos(v) \bound{n1}} -} -\xtc{ -As shown by previous examples, these declarations are necessary. -}{ -\spadpaste{n2(u:DFLOAT,v:DFLOAT):DFLOAT == u*sin(v) \bound{n2}} -} -\xtc{ -In either case, Axiom compiles the functions -when needed to graph a result. -}{ -\spadpaste{n3(u:DFLOAT,v:DFLOAT):DFLOAT == u \bound{n3}} -} -\xtc{ -Without these declarations, you have to suffix floats -with \axiom{@DFLOAT} to get a \axiomType{DoubleFloat} result. -However, a call here with an unadorned float -produces a \axiomType{DoubleFloat}. -}{ -\spadpaste{n3(0.5,1.0)\free{n3}} -} -% -% -\psXtc{ -Draw the surface by referencing the function names, this time -choosing the toroidal coordinate system. -}{ -\graphpaste{draw(surface(n1,n2,n3), 1..4, 1..2*\%pi, coordinates == toroidal(1\$DFLOAT)) \free{n1 n2 n3}} -}{ -\epsffile[0 0 295 295]{../ps/3dpsb.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphThreeDOptionsTitle}{Three-Dimensional Options} -\newcommand{\ugGraphThreeDOptionsNumber}{7.2.4.} - -@ -\subsection{7.2.4. Three-Dimensional Options} -\label{ugGraphThreeDOptionsPage} -\begin{itemize} -\item ugGraphCoordPage \ref{ugGraphCoordPage} on -page~\pageref{ugGraphCoordPage} -\end{itemize} -\index{pages!ugGraphThreeDOptionsPage!ug07.ht} -\index{ug07.ht!pages!ugGraphThreeDOptionsPage} -\index{ugGraphThreeDOptionsPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphThreeDOptionsPage}{7.2.4. Three-Dimensional Options} -\beginscroll - -The \axiomFun{draw} commands optionally take an optional list of options such -as {\tt coordinates} as shown in the last example. -Each option is given by the syntax: \axiom{name} {\tt ==} \axiom{value}. -Here is a list of the available options in the order that they are -described below: - -\table{ {title} {coordinates} {var1Steps} {style} {tubeRadius} {var2Steps} -{colorFunction} {tubePoints} {space}} - -\psXtc{ -The option \axiom{title} gives your graph a title. -}{ -\graphpaste{draw(cos(x*y),x=0..2*\%pi,y=0..\%pi,title == "Title of Graph") } -}{ -\epsffile[0 0 295 295]{../ps/3doptttl.ps} -} -% -\psXtc{ -The \axiom{style} determines which of four rendering algorithms is used for -the graph. -The choices are -{\tt "wireMesh"}, {\tt "solid"}, {\tt "shade"}, and {\tt "smooth"}. -}{ -\graphpaste{draw(cos(x*y),x=-3..3,y=-3..3, style=="smooth", title=="Smooth Option")} -}{ -\epsffile[0 0 295 295]{../ps/3doptsty.ps} -} -% - -In all but the wire-mesh style, polygons in a surface or tube plot -are normally colored in a graph according to their -\axiom{z}-coordinate value. Space curves are colored according to their -parametric variable value. -To change this, you can give a coloring function. -The coloring function is sampled across the range of its arguments, then -normalized onto the standard Axiom colormap. - -\xtc{ -A function of one variable makes the color depend on the -value of the parametric variable specified for a tube plot. -}{ -\spadpaste{color1(t) == t \bound{colorFxn1}} -} -\psXtc{ -}{ -\graphpaste{draw(curve(sin(t), cos(t),0), t=0..2*\%pi, tubeRadius == .3, colorFunction == color1) \free{colorFxn1}} -}{ -\epsffile[0 0 295 295]{../ps/3doptcf1.ps} -} -% -\xtc{ -A function of two variables makes the color depend on the -values of the independent variables. -}{ -\spadpaste{color2(u,v) == u**2 - v**2 \bound{colorFxn2}} -} -\psXtc{ -Use the option {\tt colorFunction} for special coloring. -}{ -\graphpaste{draw(cos(u*v), u=-3..3, v=-3..3, colorFunction == color2) \free{colorFxn2}} -}{ -\epsffile[0 0 295 295]{../ps/3doptcf2.ps} -} -% -\xtc{ -With a three variable function, the -color also depends on the value of the function. -}{ -\spadpaste{color3(x,y,fxy) == sin(x*fxy) + cos(y*fxy) \bound{colorFxn3}} -} -\psXtc{ -}{ -\graphpaste{draw(cos(x*y), x=-3..3, y=-3..3, colorFunction == color3) \free{colorFxn3}} -}{ -\epsffile[0 0 295 295]{../ps/3doptcf3.ps} -} -% -Normally the Cartesian coordinate system is used. -To change this, use the {\tt coordinates} option. -For details, see -\downlink{``\ugGraphCoordTitle''}{ugGraphCoordPage} -in Section \ugGraphCoordNumber\ignore{ugGraphCoord}. -% -% -\xtc{ -}{ -\spadpaste{m(u:DFLOAT,v:DFLOAT):DFLOAT == 1 \bound{m}} -} -\psXtc{ -Use the spherical -coordinate system. -}{ -\graphpaste{draw(m, 0..2*\%pi,0..\%pi, coordinates == spherical, style=="shade") \free{m}} -}{ -\epsffile[0 0 295 295]{../ps/3doptcrd.ps} -} -% -Space curves may be displayed as tubes with polygonal cross sections. -Two options, {\tt tubeRadius} and {\tt tubePoints}, control the size and -shape of this cross section. -% -\psXtc{ -The {\tt tubeRadius} option specifies the radius of the tube that -encircles the specified space curve. -}{ -\graphpaste{draw(curve(sin(t),cos(t),0),t=0..2*\%pi, style=="shade", tubeRadius == .3)} -}{ -\epsffile[0 0 295 295]{../ps/3doptrad.ps} -} -% -% -\psXtc{ -The {\tt tubePoints} option specifies the number of vertices -defining the polygon that is used to create a tube around the -specified space curve. -The larger this number is, the more cylindrical the tube becomes. -}{ -\graphpaste{draw(curve(sin(t), cos(t), 0), t=0..2*\%pi, style=="shade", tubeRadius == .25, tubePoints == 3)} -}{ -\epsffile[0 0 295 295]{../ps/3doptpts.ps} -} -% -% -% -\psXtc{ -Options \axiomFunFrom{var1Steps}{DrawOption} and -\axiomFunFrom{var2Steps}{DrawOption} specify the number of intervals into -which the grid defining a surface plot is subdivided with respect to the -first and second parameters of the surface function(s). -}{ -\graphpaste{draw(cos(x*y),x=-3..3,y=-3..3, style=="shade", var1Steps == 30, var2Steps == 30)} -}{ -\epsffile[0 0 295 295]{../ps/3doptvb.ps} -} -% -The {\tt space} option -of a \axiomFun{draw} command lets you build multiple graphs in three space. -To use this option, first create an empty three-space object, -then use the {\tt space} option thereafter. -There is no restriction as to the number or kinds -of graphs that can be combined this way. -\xtc{ -Create an empty three-space object. -}{ -\spadpaste{s := create3Space()\$(ThreeSpace DFLOAT) \bound{s}} -} -% -% -\xtc{ -}{ -\spadpaste{m(u:DFLOAT,v:DFLOAT):DFLOAT == 1 \bound{m}} -} -\psXtc{ -Add a graph to this three-space object. -The new graph destructively inserts the graph -into \axiom{s}. -}{ -\graphpaste{draw(m,0..\%pi,0..2*\%pi, coordinates == spherical, space == s) \free{s m}} -}{ -\epsffile[0 0 295 295]{../ps/3dmult1a.ps} -} -% -% -\psXtc{ -Add a second graph to \axiom{s}. -}{ -\graphpaste{v := draw(curve(1.5*sin(t), 1.5*cos(t),0), t=0..2*\%pi, tubeRadius == .25, space == s) \free{s} \bound{v}} -}{ -\epsffile[0 0 295 295]{../ps/3dmult1b.ps} -} -% -A three-space object can also be obtained from an existing \threedim{} viewport -using the \axiomFunFrom{subspace}{ThreeSpace} command. -You can then use \axiomFun{makeViewport3D} to create a viewport window. -\xtc{ -Assign to \axiom{subsp} the three-space object in viewport \axiom{v}. -}{ -\spadpaste{subsp := subspace v \free{v} \bound{su}} -} -\xtc{ -Reset the space component of \axiom{v} to the value of \axiom{subsp}. -}{ -\spadpaste{subspace(v, subsp) \bound{sp} \free{su}} -} -\noOutputXtc{ -Create a viewport window from a three-space object. -}{ -\graphpaste{makeViewport3D(subsp,"Graphs") \free{sp}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphMakeObjectTitle}{The makeObject Command} -\newcommand{\ugGraphMakeObjectNumber}{7.2.5.} - -@ -\subsection{7.2.5. The makeObject Command} -\label{ugGraphMakeObjectPage} -\index{pages!ugGraphMakeObjectPage!ug07.ht} -\index{ug07.ht!pages!ugGraphMakeObjectPage} -\index{ugGraphMakeObjectPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphMakeObjectPage}{7.2.5. The makeObject Command} -\beginscroll - -An alternate way to create multiple graphs is to use -\axiomFun{makeObject}. -The \axiomFun{makeObject} command is similar to the \axiomFun{draw} -command, except that it returns a three-space object rather than a -\axiomType{ThreeDimensionalViewport}. -In fact, \axiomFun{makeObject} is called by the \axiomFun{draw} -command to create the \axiomType{ThreeSpace} then -\axiomFunFrom{makeViewport3D}{ThreeDimensionalViewport} to create a -viewport window. - -\xtc{ -}{ -\spadpaste{m(u:DFLOAT,v:DFLOAT):DFLOAT == 1 \bound{m}} -} -\noOutputXtc{ -Do the last example a new way. -First use \axiomFun{makeObject} to -create a three-space object \axiom{sph}. -}{ -\spadpaste{sph := makeObject(m, 0..\%pi, 0..2*\%pi, coordinates==spherical)\bound{sph}\free{m}} -} -\noOutputXtc{ -Add a second object to \axiom{sph}. -}{ -\spadpaste{makeObject(curve(1.5*sin(t), 1.5*cos(t), 0), t=0..2*\%pi, space == sph, tubeRadius == .25) \free{sph}\bound{v1}} -} -\noOutputXtc{ -Create and display a viewport -containing \axiom{sph}. -}{ -\graphpaste{makeViewport3D(sph,"Multiple Objects") \free{v1}} -} - -Note that an undefined \axiomType{ThreeSpace} parameter declared in a -\axiomFun{makeObject} or \axiomFun{draw} command results in an error. -Use the \axiomFunFrom{create3Space}{ThreeSpace} function to define a -\axiomType{ThreeSpace}, or obtain a \axiomType{ThreeSpace} that has been -previously generated before including it in a command line. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphThreeDBuildTitle}{Building Three-Dimensional Objects From Primitives} -\newcommand{\ugGraphThreeDBuildNumber}{7.2.6.} - -@ -\subsection{7.2.6. Building Three-Dimensional Objects From Primitives} -\label{ugGraphThreeDBuildPage} -\index{pages!ugGraphThreeDBuildPage!ug07.ht} -\index{ug07.ht!pages!ugGraphThreeDBuildPage} -\index{ugGraphThreeDBuildPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphThreeDBuildPage} -{7.2.6. Building Three-Dimensional Objects From Primitives} -\beginscroll - -Rather than using the \axiomFun{draw} and \axiomFun{makeObject} commands, -you can create \threedim{} graphs from primitives. -Operation \axiomFunFrom{create3Space}{ThreeSpace} creates a -three-space object to which points, curves and polygons -can be added using the operations from the \axiomType{ThreeSpace} -domain. -The resulting object can then be displayed in a viewport using -\axiomFunFrom{makeViewport3D}{ThreeDimensionalViewport}. - -\xtc{ -Create the empty three-space object \axiom{space}. -}{ -\spadpaste{space := create3Space()\$(ThreeSpace DFLOAT) \bound{space}} -} - -Objects can be sent to this \axiom{space} using the operations -exported by the \axiomType{ThreeSpace} domain. -The following examples place curves into \axiom{space}. - -\xtc{ -Add these eight curves to the space. -}{ -\spadpaste{closedCurve(space,[[0,30,20], [0,30,30], [0,40,30], [0,40,100], [0,30,100],[0,30,110], [0,60,110], [0,60,100], [0,50,100], [0,50,30], [0,60,30], [0,60,20]]) \bound{curve1} \free{space}} -} -\xtc{ -}{ -\spadpaste{closedCurve(space,[[80,0,30], [80,0,100], [70,0,110], [40,0,110], [30,0,100], [30,0,90], [40,0,90], [40,0,95], [45,0,100], [65,0,100], [70,0,95], [70,0,35]]) \bound{curve2} \free{space}} -} -\xtc{ -}{ -\spadpaste{closedCurve(space,[[70,0,35], [65,0,30], [45,0,30], [40,0,35], [40,0,60], [50,0,60], [50,0,70], [30,0,70], [30,0,30], [40,0,20], [70,0,20], [80,0,30]]) \bound{curve3} \free{space}} -} -\xtc{ -}{ -\spadpaste{closedCurve(space,[[0,70,20], [0,70,110], [0,110,110], [0,120,100], [0,120,70], [0,115,65], [0,120,60], [0,120,30], [0,110,20], [0,80,20], [0,80,30], [0,80,20]]) \bound{curve4} \free{space}} -} -\xtc{ -}{ -\spadpaste{closedCurve(space,[[0,105,30], [0,110,35], [0,110,55], [0,105,60], [0,80,60], [0,80,70], [0,105,70], [0,110,75], [0,110,95], [0,105,100], [0,80,100], [0,80,20], [0,80,30]]) \bound{curve5} \free{space}} -} -\xtc{ -}{ -\spadpaste{closedCurve(space,[[140,0,20], [140,0,110], [130,0,110], [90,0,20], [101,0,20],[114,0,50], [130,0,50], [130,0,60], [119,0,60], [130,0,85], [130,0,20]]) \bound{curve6} \free{space}} -} -\xtc{ -}{ -\spadpaste{closedCurve(space,[[0,140,20], [0,140,110], [0,150,110], [0,170,50], [0,190,110], [0,200,110], [0,200,20], [0,190,20], [0,190,75], [0,175,35], [0,165,35],[0,150,75], [0,150,20]]) \bound{curve7} \free{space}} -} -\xtc{ -}{ -\spadpaste{closedCurve(space,[[200,0,20], [200,0,110], [189,0,110], [160,0,45], [160,0,110], [150,0,110], [150,0,20], [161,0,20], [190,0,85], [190,0,20]]) \bound{curve8} \free{space}} -} -\psXtc{ -Create and display the viewport using \axiomFun{makeViewport3D}. -Options may also be given but here are displayed as a list with values -enclosed in parentheses. -}{ -\graphpaste{makeViewport3D(space, title == "Letters") \free{space curve1 curve2 curve3 curve4 curve5 curve6 curve7 curve8}} -}{ -\epsffile[0 0 295 295]{../ps/3dbuilda.ps} -} - -\subsubsection{Cube Example} - -As a second example of the use of primitives, we generate a cube using a -polygon mesh. -It is important to use a consistent orientation of the polygons for -correct generation of \threedim{} objects. - -\xtc{ -Again start with an empty three-space object. -}{ -\spadpaste{spaceC := create3Space()\$(ThreeSpace DFLOAT) \bound{spaceC}} -} -\xtc{ -For convenience, -give \axiomType{DoubleFloat} values \axiom{+1} and \axiom{-1} names. -}{ -\spadpaste{x: DFLOAT := 1 \bound{x}} -} -\xtc{ -}{ -\spadpaste{y: DFLOAT := -1 \bound{y}} -} -\xtc{ -Define the vertices of the cube. -}{ -\spadpaste{a := point [x,x,y,1::DFLOAT]\$(Point DFLOAT) \bound{a} \free{x y}} -} -\xtc{ -}{ -\spadpaste{b := point [y,x,y,4::DFLOAT]\$(Point DFLOAT) \bound{b} \free{x y}} -} -\xtc{ -}{ -\spadpaste{c := point [y,x,x,8::DFLOAT]\$(Point DFLOAT) \bound{c} \free{x y}} -} -\xtc{ -}{ -\spadpaste{d := point [x,x,x,12::DFLOAT]\$(Point DFLOAT) \bound{d} \free{x y}} -} -\xtc{ -}{ -\spadpaste{e := point [x,y,y,16::DFLOAT]\$(Point DFLOAT) \bound{e} \free{x y}} -} -\xtc{ -}{ -\spadpaste{f := point [y,y,y,20::DFLOAT]\$(Point DFLOAT) \bound{f} \free{x y}} -} -\xtc{ -}{ -\spadpaste{g := point [y,y,x,24::DFLOAT]\$(Point DFLOAT) \bound{g} \free{x y}} -} -\xtc{ -}{ -\spadpaste{h := point [x,y,x,27::DFLOAT]\$(Point DFLOAT) \bound{h} \free{x y}} -} -\xtc{ -Add the faces of the cube as polygons to the space using a -consistent orientation. -}{ -\spadpaste{polygon(spaceC,[d,c,g,h]) \free{d c g h spaceC} \bound{pol1}} -} -\xtc{ -}{ -\spadpaste{polygon(spaceC,[d,h,e,a]) \free{d h e a spaceC} \bound{pol2}} -} -\xtc{ -}{ -\spadpaste{polygon(spaceC,[c,d,a,b]) \free{c d a b spaceC} \bound{pol3}} -} -\xtc{ -}{ -\spadpaste{polygon(spaceC,[g,c,b,f]) \free{g c b f spaceC} \bound{pol4}} -} -\xtc{ -}{ -\spadpaste{polygon(spaceC,[h,g,f,e]) \free{h g f e spaceC} \bound{pol5}} -} -\xtc{ -}{ -\spadpaste{polygon(spaceC,[e,f,b,a]) \free{e f b a spaceC} \bound{pol6}} -} -\psXtc{ -Create and display the viewport. -}{ -\graphpaste{makeViewport3D(spaceC, title == "Cube") \free{pol1 pol2 pol3 pol4 pol5 pol6}} -}{ -\epsffile[0 0 295 295]{../ps/3dbuildb.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphCoordTitle}{Coordinate System Transformations} -\newcommand{\ugGraphCoordNumber}{7.2.7.} - -@ -\subsection{7.2.7. Coordinate System Transformations} -\label{ugGraphCoordPage} -\index{pages!ugGraphCoordPage!ug07.ht} -\index{ug07.ht!pages!ugGraphCoordPage} -\index{ugGraphCoordPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphCoordPage}{7.2.7. Coordinate System Transformations} -\beginscroll - -The \axiomType{CoordinateSystems} package provides coordinate transformation -functions that map a given data point from the coordinate system specified -into the Cartesian coordinate system. -The default coordinate system, given a triplet \axiom{(f(u,v), u, v)}, assumes -that \axiom{z = f(u, v)}, \axiom{x = u} and \axiom{y = v}, -that is, reads the coordinates in \axiom{(z, x, y)} order. - -\xtc{ -}{ -\spadpaste{m(u:DFLOAT,v:DFLOAT):DFLOAT == u**2 \bound{m}} -} -% -\psXtc{ -Graph plotted in default coordinate system. -}{ -\graphpaste{draw(m,0..3,0..5) \free{m}} -}{ -\epsffile[0 0 295 295]{../ps/defcoord.ps} -} - -The \axiom{z} coordinate comes first since the first argument of -the \axiomFun{draw} command gives its values. -In general, the coordinate systems Axiom provides, or any -that you make up, must provide a map to an \axiom{(x, y, z)} triplet in -order to be compatible with the -\axiomFunFrom{coordinates}{DrawOption} \axiomType{DrawOption}. -Here is an example. - -\xtc{ -Define the identity function. -}{ -\spadpaste{cartesian(point:Point DFLOAT):Point DFLOAT == point \bound{cart}} -} -\psXtc{ -Pass \axiom{cartesian} as the \axiomFunFrom{coordinates}{DrawOption} -parameter to the \axiomFun{draw} command. -}{ -\graphpaste{draw(m,0..3,0..5,coordinates==cartesian) \free{m cart}} -}{ -\epsffile[0 0 295 295]{../ps/cartcoord.ps} -} -% - -What happened? -The option {\tt coordinates == cartesian} directs Axiom to -treat the dependent variable \axiom{m} defined by -\texht{$m=u^2$}{m=u**2} as the \axiom{x} coordinate. -Thus the triplet of values \axiom{(m, u, v)} is transformed to -coordinates \axiom{(x, y, z)} and so we get the graph of -\texht{$x=y^2$}{x=y**2}. - -Here is another example. -The \axiomFunFrom{cylindrical}{CoordinateSystems} transform takes -input of the form \axiom{(w,u,v)}, interprets it in the order -\texht{($r$,$\theta$,$z$)}{(\axiom{r}, \axiom{theta}, \axiom{z})} -and maps it to the Cartesian coordinates -\texht{$x=r\cos(\theta)$, $y=r\sin(\theta)$, $z=z$} -{\axiom{x = r * cos(theta)}, \axiom{y = r * sin(theta)}, \axiom{z = z}} -in which -\texht{$r$}{\axiom{r}} is the radius, -\texht{$\theta$}{\axiom{theta}} is the angle and -\texht{$z$}{\axiom{z}} is the z-coordinate. -\xtc{ -An example using the \axiomFunFrom{cylindrical}{CoordinateSystems} -coordinates for the constant \axiom{r = 3}. -}{ -\spadpaste{f(u:DFLOAT,v:DFLOAT):DFLOAT == 3 \bound{f}} -} -\psXtc{ -Graph plotted in cylindrical coordinates. -}{ -\graphpaste{draw(f,0..\%pi,0..6,coordinates==cylindrical) \free{f}} -}{ -\epsffile[0 0 295 295]{../ps/cylcoord.ps} -} - -Suppose you would like to specify \smath{z} as a function of -\smath{r} and \texht{$\theta$}{\axiom{theta}} instead of just -\smath{r}? -Well, you still can use the \axiomFun{cylindrical} Axiom -transformation but we have to reorder the triplet before -passing it to the transformation. - -\xtc{ -First, let's create a point to -work with and call it \axiom{pt} with some color \axiom{col}. -}{ -\spadpaste{col := 5 \bound{c}} -} -\xtc{ -}{ -\spadpaste{pt := point[1,2,3,col]\$(Point DFLOAT) \free{c} \bound{pt}} -} -The reordering you want is -\texht{$(z,r, \theta)$}{\axiom{(z,r,theta)}} to -\texht{$(r, \theta,z)$}{\axiom{(r,theta,z)}} -so that the first element is moved to the third element, while the second -and third elements move forward and the color element does not change. -\xtc{ -Define a function \userfun{reorder} to reorder the point elements. -}{ -\spadpaste{reorder(p:Point DFLOAT):Point DFLOAT == point[p.2, p.3, p.1, p.4] \bound{freo}} -} -\xtc{ -The function moves the second and third elements -forward but the color does not change. -}{ -\spadpaste{reorder pt \free{pt freo}} -} -\xtc{ -The function \userfun{newmap} converts our reordered version of -the cylindrical coordinate system to the standard -\texht{$(x,y,z)$}{\axiom{(x,y,z)}} Cartesian system. -}{ -\spadpaste{newmap(pt:Point DFLOAT):Point DFLOAT == cylindrical(reorder pt) \free{freo} \bound{fnewmap}} -} -\xtc{ -}{ -\spadpaste{newmap pt \free{fnewmap pt} \bound{new}} -} -% -\psXtc{ -Graph the same function \axiom{f} using the coordinate mapping of the function -\axiom{newmap}, so it is now interpreted as -\texht{$z=3$}{\axiom{z = 3}}: -}{ -\graphpaste{draw(f,0..3,0..2*\%pi,coordinates==newmap) \free{f new}} -}{ -\epsffile[0 0 295 295]{../ps/newmap.ps} -} - -{\texht{\sloppy}{} -The \axiomType{CoordinateSystems} package exports the following -operations: -\axiomFun{bipolar}, -\axiomFun{bipolarCylindrical}, -\axiomFun{cartesian}, -\axiomFun{conical}, -\axiomFun{cylindrical}, -\axiomFun{elliptic}, -\axiomFun{ellipticCylindrical}, -\axiomFun{oblateSpheroidal}, -\axiomFun{parabolic}, -\axiomFun{parabolicCylindrical}, -\axiomFun{paraboloidal}, -\axiomFun{polar}, -\axiomFun{prolateSpheroidal}, -\axiomFun{spherical}, and -\axiomFun{toroidal}. -Use \Browse{} or the \spadcmd{)show} system command -to get more information. - -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphClipTitle}{Three-Dimensional Clipping} -\newcommand{\ugGraphClipNumber}{7.2.8.} - -@ -\subsection{7.2.8. Three-Dimensional Clipping} -\label{ugGraphClipPage} -\index{pages!ugGraphClipPage!ug07.ht} -\index{ug07.ht!pages!ugGraphClipPage} -\index{ugGraphClipPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphClipPage}{7.2.8. Three-Dimensional Clipping} -\beginscroll - -A \threedim{} graph can be explicitly clipped within the \axiomFun{draw} -command by indicating a minimum and maximum threshold for the -given function definition. -These thresholds can be defined using the Axiom \axiomFun{min} -and \axiomFun{max} functions. -\xtc{ -}{ -\begin{spadsrc}[\bound{g}] -gamma(x,y) == - g := Gamma complex(x,y) - point [x, y, max( min(real g, 4), -4), argument g] -\end{spadsrc} -} -\psXtc{ -Here is an example that clips -the gamma function in order to eliminate the extreme divergence it creates. -}{ -\graphpaste{draw(gamma,-\%pi..\%pi,-\%pi..\%pi,var1Steps==50,var2Steps==50) \free{g}} -}{ -\epsffile[0 0 295 295]{../ps/clipgamma.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugGraphThreeDControlTitle}{Three-Dimensional Control-Panel} -\newcommand{\ugGraphThreeDControlNumber}{7.2.9.} - -@ -\subsection{7.2.9. Three-Dimensional Control-Panel} -\label{ugGraphThreeDControlPage} -\index{pages!ugGraphThreeDControlPage!ug07.ht} -\index{ug07.ht!pages!ugGraphThreeDControlPage} -\index{ugGraphThreeDControlPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphThreeDControlPage}{7.2.9. Three-Dimensional Control-Panel} -\beginscroll -Once you have created a viewport, move your mouse to the viewport -and click with your left mouse button. -This displays a control-panel on the side of the viewport -that is closest to where you clicked. - - -\subsubsection{Transformations} - -We recommend you first select the {\bf Bounds} button while -executing transformations since the bounding box displayed -indicates the object's position as it changes. -% -\indent{0} -\beginitems -% -\item[Rotate:] A rotation transformation occurs by clicking the mouse -within the {\bf Rotate} window in the upper left corner of the -control-panel. -The rotation is computed in spherical coordinates, using the -horizontal mouse position to increment or decrement the value of -the longitudinal angle \texht{$\theta$}{\axiom{theta}} within the -range of 0 to \texht{2$\pi$}{2*pi} and the vertical mouse position -to increment or decrement the value of the latitudinal angle -\texht{$\phi$}{\axiom{phi}} within the range of \texht{-$\pi$}{pi} -to \texht{$\pi$}{pi}. -The active mode of rotation is displayed in green on a color -monitor or in clear text on a black and white monitor, while the -inactive mode is displayed in red for color display or a mottled -pattern for black and white. -% -\indent{0} -\beginitems -% -\item[origin:] The {\bf origin} button indicates that the -rotation is to occur with respect to the origin of the viewing space, that is -indicated by the axes. -% -\item[object:] The {\bf object} button indicates that the -rotation is to occur with respect to the center of volume of the object, -independent of the axes' origin position. -\enditems -\indent{0} -% -\item[Scale:] A scaling transformation occurs by clicking the mouse -within the {\bf Scale} window in the upper center of the -control-panel, containing a zoom arrow. -The axes along which the scaling is to occur are indicated by -selecting the appropriate button above the zoom arrow window. -The selected axes are displayed in green on a color monitor or in -clear text on a black and white monitor, while the unselected axes -are displayed in red for a color display or a mottled pattern for -black and white. -% -\indent{0} -\beginitems -% -\item[uniform:] Uniform scaling along the {\tt x}, {\tt y} -and {\tt z} axes occurs when all the axes buttons are selected. -% -\item[non-uniform:] If any of the axes buttons are -not selected, non-uniform scaling occurs, that is, scaling occurs only in the -direction of the axes that are selected. -\enditems -\indent{0} -% -\item[Translate:] Translation occurs by indicating with the mouse in the -{\bf Translate} window the direction you want the graph to move. -This window is located in the upper right corner of the -control-panel and contains a potentiometer with crossed arrows -pointing up, down, left and right. -Along the top of the {\bf Translate} window are three buttons -({\bf XY}, -{\bf XZ}, and {\bf YZ}) indicating the three orthographic projection planes. -Each orientates the group as a view into that plane. -Any translation of the graph occurs only along this plane. -\enditems -\indent{0} - -\subsubsection{Messages} - -The window directly below the potentiometer windows for transformations is -used to display system messages relating to the viewport, the control-panel -and the current graph displaying status. - -\subsubsection{Colormap} - -Directly below the message window is the colormap range indicator -window. -The Axiom Colormap shows a sampling of the spectrum from -which hues can be drawn to represent the colors of a surface. -The Colormap is composed of five shades for each of the hues along -this spectrum. -By moving the markers above and below the Colormap, the range of -hues that are used to color the existing surface are set. -The bottom marker shows the hue for the low end of the color range -and the top marker shows the hue for the upper end of the range. -Setting the bottom and top markers at the same hue results in -monochromatic smooth shading of the graph when {\bf Smooth} mode is selected. -At each end of the Colormap are {\bf +} and {\bf -} buttons. -When clicked on, these increment or decrement the top or bottom -marker. - -\subsubsection{Buttons} - -Below the Colormap window and to the left are located various -buttons that determine the characteristics of a graph. -The buttons along the bottom and right hand side all have special -meanings; the remaining buttons in the first row indicate the mode -or style used to display the graph. -The second row are toggles that turn on or off a property of the -graph. -On a color monitor, the property is on if green (clear text, on a -monochrome monitor) and off if red (mottled pattern, on a -monochrome monitor). -Here is a list of their functions. -% -\indent{0} -\beginitems -% -\item[Wire] displays surface and tube plots as a -wireframe image in a single color (blue) with no hidden surfaces removed, -or displays space curve plots in colors based upon their parametric variables. -This is the fastest mode for displaying a graph. -This is very useful when you -want to find a good orientation of your graph. -% -\item[Solid] displays the graph with hidden -surfaces removed, drawing each polygon beginning with the furthest -from the viewer. -The edges of the polygons are displayed in the hues specified by -the range in the Colormap window. -% -\item[Shade] displays the graph with hidden -surfaces removed and with the polygons shaded, drawing each -polygon beginning with the furthest from the viewer. -Polygons are shaded in the hues specified by the range in the -Colormap window using the Phong illumination model. -% -\item[Smooth] displays the graph using a -renderer that computes the graph one line at a time. -The location and color of the graph at each visible point on the -screen are determined and displayed using the Phong illumination -model. -Smooth shading is done in one of two ways, depending on the range -selected in the colormap window and the number of colors available -from the hardware and/or window manager. -When the top and bottom markers of the colormap range are set to -different hues, the graph is rendered by dithering between the -transitions in color hue. -When the top and bottom markers of the colormap range are set to -the same hue, the graph is rendered using the Phong smooth shading -model. -However, if enough colors cannot be allocated for this purpose, -the renderer reverts to the color dithering method until a -sufficient color supply is available. -For this reason, it may not be possible to render multiple Phong -smooth shaded graphs at the same time on some systems. -% -\item[Bounds] encloses the entire volume of the -viewgraph within a bounding box, or removes the box if previously selected. -The region that encloses the entire volume of the viewport graph is displayed. -% -\item[Axes] displays Cartesian -coordinate axes of the space, or turns them off if previously selected. -% -\item[Outline] causes -quadrilateral polygons forming the graph surface to be outlined in black when -the graph is displayed in {\bf Shade} mode. -% -\item[BW] converts a color viewport to black and white, or vice-versa. -When this button is selected the -control-panel and viewport switch to an immutable colormap composed of a range -of grey scale patterns or tiles that are used wherever shading is necessary. -% -\item[Light] takes you to a control-panel described below. -% -\item[ViewVolume] takes you to another control-panel as described below. -% -\item[Save] creates a menu of the possible file types that can -be written using the control-panel. -The {\bf Exit} button leaves the save menu. -The {\bf Pixmap} button writes an Axiom pixmap of -the current viewport contents. The file is called {\bf axiom3D.pixmap} and is -located in the directory from which Axiom or {\bf viewalone} was -started. -The {\bf PS} button writes the current viewport contents to -PostScript output rather than to the viewport window. -By default the file is called {\bf axiom3D.ps}; however, if a file -name is specified in the user's {\bf .Xdefaults} file it is -used. -The file is placed in the directory from which the Axiom or -{\bf viewalone} session was begun. -See also the \axiomFunFrom{write}{ThreeDimensionalViewport} -function. -% -\item[Reset] returns the object transformation -characteristics back to their initial states. -% -\item[Hide] causes the control-panel for the -corresponding viewport to disappear from the screen. -% -\item[Quit] queries whether the current viewport -session should be terminated. -\enditems -\indent{0} - -\subsubsection{Light} - -% -%>>>\begin{texonly} -% -%>>>\begin{figure}[htbp] -%>>>\begin{picture}(183,252)(-125,0) -%>>>\special{psfile=../ps/3dlight.ps} -%>>>\end{picture} -%>>>\caption{Three-Dimensional Lighting Panel.} -%>>>\end{figure} -%>>>\end{texonly} -% - -The {\bf Light} button changes the control-panel into the -{\bf Lighting Control-Panel}. At the top of this panel, the three axes -are shown with the same orientation as the object. A light vector from -the origin of the axes shows the current position of the light source -relative to the object. At the bottom of the panel is an {\bf Abort} -button that cancels any changes to the lighting that were made, and a -{\bf Return} button that carries out the current set of lighting changes -on the graph. -% -\indent{0} -\beginitems -% -\item[XY:] The {\bf XY} lighting axes window is below the -{\bf Lighting Control-Panel} title and to the left. -This changes the light vector within the {\bf XY} view plane. -% -\item[Z:] The {\bf Z} lighting axis window is below the -{\bf Lighting Control-Panel} title and in the center. This -changes the {\bf Z} -location of the light vector. -% -\item[Intensity:] -Below the {\bf Lighting Control-Panel} title -and to the right is the light intensity meter. -Moving the intensity indicator down decreases the amount of -light emitted from the light source. -When the indicator is at the top of the meter the light source is -emitting at 100\% intensity. -At the bottom of the meter the light source is emitting at a level -slightly above ambient lighting. -\enditems -\indent{0} - -\subsubsection{View Volume} - -The {\bf View Volume} button changes the control-panel into -the {\bf Viewing Volume Panel}. -At the bottom of the viewing panel is an {\bf Abort} button that -cancels any changes to the viewing volume that were made and a -{\it Return} button that carries out the current set of -viewing changes to the graph. -% -%>>>\begin{texonly} -% -%>>>\begin{figure}[htbp] -%>>>\begin{picture}(183,252)(-125,0) -%>>>\special{psfile=../ps/3dvolume.ps} -%>>>\end{picture} -%>>>\caption{Three-Dimensional Volume Panel.} -%>>>\end{figure} -%>>>\end{texonly} -% -\indent{0} -\beginitems -% -\item[Eye Reference:] At the top of this panel is the -{\bf Eye Reference} window. -It shows a planar projection of the viewing pyramid from the eye -of the viewer relative to the location of the object. -This has a bounding region represented by the rectangle on the -left. -Below the object rectangle is the {\bf Hither} window. -By moving the slider in this window the hither clipping plane sets -the front of the view volume. -As a result of this depth clipping all points of the object closer -to the eye than this hither plane are not shown. -The {\bf Eye Distance} slider to the right of the {\bf Hither} -slider is used to change the degree of perspective in the image. -% -\item[Clip Volume:] The {\bf Clip Volume} window is at the -bottom of the {\bf Viewing Volume Panel}. -On the right is a {\bf Settings} menu. -In this menu are buttons to select viewing attributes. -Selecting the {\bf Perspective} button computes the image using -perspective projection. -The {\bf Show Region} button indicates whether the clipping region -of the -volume is to be drawn in the viewport and the {\bf Clipping On} -button shows whether the view volume clipping is to be in effect -when the image -is drawn. -The left side of the {\bf Clip Volume} window shows the clipping -boundary of the graph. -Moving the knobs along the {\bf X}, {\bf Y}, and {\bf Z} sliders -adjusts the volume of the clipping region accordingly. -\enditems -\indent{0} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugGraphThreeDopsTitle}{Operations for Three-Dimensional Graphics} -\newcommand{\ugGraphThreeDopsNumber}{7.2.10.} - -@ -\subsection{7.2.10. Operations for Three-Dimensional Graphics} -\label{ugGraphThreeDopsPage} -\index{pages!ugGraphThreeDopsPage!ug07.ht} -\index{ug07.ht!pages!ugGraphThreeDopsPage} -\index{ugGraphThreeDopsPage!ug07.ht!pages} -<>= -\begin{page}{ugGraphThreeDopsPage} -{7.2.10. Operations for Three-Dimensional Graphics} -\beginscroll - -Here is a summary of useful Axiom operations for \threedim{} -graphics. -Each operation name is followed by a list of arguments. -Each argument is written as a variable informally named according -to the type of the argument (for example, {\it integer}). -If appropriate, a default value for an argument is given in -parentheses immediately following the name. - -% -\texht{\bgroup\hbadness = 10001\sloppy}{} -\indent{0} -\beginitems -% -\item[\axiomFun{adaptive3D?}]\funArgs{} -tests whether space curves are to be plotted -according to the -adaptive refinement algorithm. - -% -\item[\axiomFun{axes}]\funArgs{viewport, string\argDef{"on"}} -turns the axes on and off. - -% -\item[\axiomFun{close}]\funArgs{viewport} -closes the viewport. - -% -\item[\axiomFun{colorDef}]\funArgs{viewport, -\subscriptIt{color}{1}\argDef{1}, \subscriptIt{color}{2}\argDef{27}} -sets the colormap -range to be from -\subscriptIt{color}{1} to \subscriptIt{color}{2}. - -% -\item[\axiomFun{controlPanel}]\funArgs{viewport, string\argDef{"off"}} -declares whether the -control-panel for the viewport is to be displayed or not. - -% -\item[\axiomFun{diagonals}]\funArgs{viewport, string\argDef{"off"}} -declares whether the -polygon outline includes the diagonals or not. - -% -\item[\axiomFun{drawStyle}]\funArgs{viewport, style} -selects which of four drawing styles -are used: {\tt "wireMesh", "solid", "shade",} or {\tt "smooth".} - -% -\item[\axiomFun{eyeDistance}]\funArgs{viewport,float\argDef{500}} -sets the distance of the eye from the origin of the object -for use in the \axiomFunFrom{perspective}{ThreeDimensionalViewport}. - -% -\item[\axiomFun{key}]\funArgs{viewport} -returns the operating -system process ID number for the viewport. - -% -\item[\axiomFun{lighting}]\funArgs{viewport, -\subscriptText{float}{x}\argDef{-0.5}, -\subscriptText{float}{y}\argDef{0.5}, \subscriptText{float}{z}\argDef{0.5}} -sets the Cartesian -coordinates of the light source. - -% -\item[\axiomFun{modifyPointData}]\funArgs{viewport,integer,point} -replaces the coordinates of the point with -the index {\it integer} with {\it point}. - -% -\item[\axiomFun{move}]\funArgs{viewport, -\subscriptText{integer}{x}\argDef{viewPosDefault}, -\subscriptText{integer}{y}\argDef{viewPosDefault}} -moves the upper -left-hand corner of the viewport to screen position -\allowbreak -({\small \subscriptText{integer}{x}, \subscriptText{integer}{y}}). - -% -\item[\axiomFun{options}]\funArgs{viewport} -returns a list of all current draw options. - -% -\item[\axiomFun{outlineRender}]\funArgs{viewport, string\argDef{"off"}} -turns polygon outlining -off or on when drawing in {\tt "shade"} mode. - -% -\item[\axiomFun{perspective}]\funArgs{viewport, string\argDef{"on"}} -turns perspective -viewing on and off. - -% -\item[\axiomFun{reset}]\funArgs{viewport} -resets the attributes of a viewport to their -initial settings. - -% -\item[\axiomFun{resize}]\funArgs{viewport, -\subscriptText{integer}{width} \argDef{viewSizeDefault}, -\subscriptText{integer}{height} \argDef{viewSizeDefault}} -resets the width and height -values for a viewport. - -% -\item[\axiomFun{rotate}]\funArgs{viewport, -\subscriptText{number}{\texht{$\theta$}{\axiom{theta}}}\argDef{viewThetaDefault}, -\subscriptText{number}{\texht{$\phi$}{\axiom{phi}}}\argDef{viewPhiDefault}} -rotates the viewport by rotation angles for longitude -({\it \texht{$\theta$}{\axiom{theta}}}) and -latitude ({\it \texht{$\phi$}{\axiom{phi}}}). -Angles designate radians if given as floats, or degrees if given -as integers. - -% -\item[\axiomFun{setAdaptive3D}]\funArgs{boolean\argDef{true}} -sets whether space curves are to be plotted -according to the adaptive -refinement algorithm. - -% -\item[\axiomFun{setMaxPoints3D}]\funArgs{integer\argDef{1000}} - sets the default maximum number of possible -points to be used when constructing a \threedim{} space curve. - -% -\item[\axiomFun{setMinPoints3D}]\funArgs{integer\argDef{49}} -sets the default minimum number of possible -points to be used when constructing a \threedim{} space curve. - -% -\item[\axiomFun{setScreenResolution3D}]\funArgs{integer\argDef{500}} -sets the default screen resolution constant -used in setting the computation limit of adaptively -generated \threedim{} space curve plots. - -% -\item[\axiomFun{showRegion}]\funArgs{viewport, string\argDef{"off"}} -declares whether the bounding -box of a graph is shown or not. -% -\item[\axiomFun{subspace}]\funArgs{viewport} -returns the space component. -% -\item[\axiomFun{subspace}]\funArgs{viewport, subspace} -resets the space component -to {\it subspace}. - -% -\item[\axiomFun{title}]\funArgs{viewport, string} -gives the viewport the -title {\it string}. - -% -\item[\axiomFun{translate}]\funArgs{viewport, -\subscriptText{float}{x}\argDef{viewDeltaXDefault}, -\subscriptText{float}{y}\argDef{viewDeltaYDefault}} -translates -the object horizontally and vertically relative to the center of the viewport. - -% -\item[\axiomFun{intensity}]\funArgs{viewport,float\argDef{1.0}} -resets the intensity {\it I} of the light source, -\texht{$0 \le I \le 1.$}{{\it 0 \le I \le 1}.} - -% -\item[\axiomFun{tubePointsDefault}]\funArgs{\optArg{integer\argDef{6}}} -sets or indicates the default number of -vertices defining the polygon that is used to create a tube around -a space curve. - -% -\item[\axiomFun{tubeRadiusDefault}]\funArgs{\optArg{float\argDef{0.5}}} -sets or indicates the default radius of -the tube that encircles a space curve. - -% -\item[\axiomFun{var1StepsDefault}]\funArgs{\optArg{integer\argDef{27}}} -sets or indicates the default number of -increments into which the grid defining a surface plot is subdivided with -respect to the first parameter declared in the surface function. - -% -\item[\axiomFun{var2StepsDefault}]\funArgs{\optArg{integer\argDef{27}}} -sets or indicates the default number of -increments into which the grid defining a surface plot is subdivided with -respect to the second parameter declared in the surface function. - -% -\item[\axiomFun{viewDefaults}]\funArgs{{\tt [}\subscriptText{integer}{% -point}, \subscriptText{integer}{line}, \subscriptText{integer}{axes}, -\subscriptText{integer}{units}, \subscriptText{float}{point}, -\allowbreak\subscriptText{list}{position}, -\subscriptText{list}{size}{\tt ]}} -resets the default settings for the -point color, line color, axes color, units color, point size, -viewport upper left-hand corner position, and the viewport size. - -% -\item[\axiomFun{viewDeltaXDefault}]\funArgs{\optArg{float\argDef{0}}} -resets the default horizontal offset -from the center of the viewport, or returns the current default offset if no argument is given. - -% -\item[\axiomFun{viewDeltaYDefault}]\funArgs{\optArg{float\argDef{0}}} -resets the default vertical offset -from the center of the viewport, or returns the current default offset if no argument is given. - -% -\item[\axiomFun{viewPhiDefault}]\funArgs{\optArg{float\argDef{-\texht{$\pi$}{{\it pi}}/4}}} -resets the default latitudinal view angle, -or returns the current default angle if no argument is given. -\texht{$\phi$}{{\it phi}} is set to this value. - -% -\item[\axiomFun{viewpoint}]\funArgs{viewport, \subscriptText{float}{x}, -\subscriptText{float}{y}, \subscriptText{float}{z}} -sets the viewing position in Cartesian coordinates. - -% -\item[\axiomFun{viewpoint}]\funArgs{viewport, -\subscriptText{float}{\texht{$\theta$}{\axiom{theta}}}, -\subscriptText{Float}{\texht{$\phi$}{\axiom{phi}}}} -sets the viewing position in spherical coordinates. - -% -\item[\axiomFun{viewpoint}]\funArgs{viewport, -\subscriptText{Float}{\texht{$\theta$}{\axiom{theta}}}, -\subscriptText{Float}{\texht{$\phi$}{\axiom{phi}}}, -\subscriptText{Float}{scaleFactor}, -\subscriptText{Float}{xOffset}, \subscriptText{Float}{yOffset}} -sets the viewing position in spherical coordinates, -the scale factor, and offsets. -\texht{$\theta$}{{\it theta}} (longitude) and -\texht{$\phi$}{{\it phi}} (latitude) are in radians. - -% -\item[\axiomFun{viewPosDefault}]\funArgs{\optArg{list\argDef{[0,0]}}} -sets or indicates the position of the upper -left-hand corner of a \twodim{} viewport, relative to the display root -window (the upper left-hand corner of the display is \axiom{[0, 0]}). - -% -\item[\axiomFun{viewSizeDefault}]\funArgs{\optArg{list\argDef{[400,400]}}} -sets or indicates the width and height dimensions -of a viewport. - -% -\item[\axiomFun{viewThetaDefault}]\funArgs{\optArg{float\argDef{\texht{$\pi$}{{\it pi}}/4}}} -resets the default longitudinal view angle, -or returns the current default angle if no argument is given. -When a parameter is specified, the default longitudinal view angle -\texht{$\theta$}{{\it theta}} is set to this value. - -% -\item[\axiomFun{viewWriteAvailable}]\funArgs{\optArg{list\argDef{["pixmap", -"bitmap", "postscript", "image"}}} -indicates the possible file types -that can be created with the \axiomFunFrom{write}{ThreeDimensionalViewport} function. - -% -\item[\axiomFun{viewWriteDefault}]\funArgs{\optArg{list\argDef{[]}}} -sets or indicates the default types of files -that are created in addition to the {\bf data} file when a -\axiomFunFrom{write}{ThreeDimensionalViewport} command -is executed on a viewport. - -% -\item[\axiomFun{viewScaleDefault}]\funArgs{\optArg{float}} -sets the default scaling factor, or returns -the current factor if no argument is given. - -% -\item[\axiomFun{write}]\funArgs{viewport, directory, \optArg{option}} -writes the file {\bf data} for {\it viewport} -in the directory {\it directory}. -An optional third argument specifies a file type (one of {\tt -pixmap}, {\tt bitmap}, {\tt postscript}, or {\tt image}), or a -list of file types. -An additional file is written for each file type listed. - -% -\item[\axiomFun{scale}]\funArgs{viewport, float\argDef{2.5}} -specifies the scaling factor. -\enditems -\indent{0} -\texht{\egroup}{} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugXdefaultsTitle}{Customization using .Xdefaults} -\newcommand{\ugXdefaultsNumber}{7.2.11.} - -@ -\subsection{7.2.11. Customization using .Xdefaults} -\label{ugXdefaultsPage} -\index{pages!ugXdefaultsPage!ug07.ht} -\index{ug07.ht!pages!ugXdefaultsPage} -\index{ugXdefaultsPage!ug07.ht!pages} -<>= -\begin{page}{ugXdefaultsPage}{7.2.11. Customization using .Xdefaults} -\beginscroll - -Both the \twodim{} and \threedim{} drawing facilities consult -the {\bf .Xdefaults} file for various defaults. -The list of defaults that are recognized by the graphing routines -is discussed in this section. -These defaults are preceded by {\tt Axiom.3D.} -for \threedim{} viewport defaults, {\tt Axiom.2D.} -for \twodim{} viewport defaults, or {\tt Axiom*} (no dot) for -those defaults that are acceptable to either viewport type. - -% -\indent{0} -\beginitems -% -\item[{\tt Axiom*buttonFont:\ \it font}] \ \newline -This indicates which -font type is used for the button text on the control-panel. -\xdefault{Rom11} -% -\item[{\tt Axiom.2D.graphFont:\ \it font}] \quad (2D only) \newline -This indicates -which font type is used for displaying the graph numbers and -slots in the {\bf Graphs} section of the \twodim{} control-panel. -\xdefault{Rom22} -% -\item[{\tt Axiom.3D.headerFont:\ \it font}] \ \newline -This indicates which -font type is used for the axes labels and potentiometer -header names on \threedim{} viewport windows. -This is also used for \twodim{} control-panels for indicating -which font type is used for potentionmeter header names and -multiple graph title headers. -%for example, {\tt Axiom.2D.headerFont: 8x13}. -\xdefault{Itl14} -% -\item[{\tt Axiom*inverse:\ \it switch}] \ \newline -This indicates whether the -background color is to be inverted from white to black. -If {\tt on}, the graph viewports use black as the background -color. -If {\tt off} or no declaration is made, the graph viewports use a -white background. -\xdefault{off} -% -\item[{\tt Axiom.3D.lightingFont:\ \it font}] \quad (3D only) \newline -This indicates which font type is used for the {\bf x}, -{\bf y}, and {\bf z} labels of the two lighting axes potentiometers, and for -the {\bf Intensity} title on the lighting control-panel. -\xdefault{Rom10} -% -\item[{\tt Axiom.2D.messageFont, Axiom.3D.messageFont:\ \it font}] \ \newline -These indicate the font type -to be used for the text in the control-panel message window. -\xdefault{Rom14} -% -\item[{\tt Axiom*monochrome:\ \it switch}] \ \newline -This indicates whether the -graph viewports are to be displayed as if the monitor is black and -white, that is, a 1 bit plane. -If {\tt on} is specified, the viewport display is black and white. -If {\tt off} is specified, or no declaration for this default is -given, the viewports are displayed in the normal fashion for the -monitor in use. -\xdefault{off} -% -\item[{\tt Axiom.2D.postScript:\ \it filename}] \ \newline -This specifies -the name of the file that is generated when a 2D PostScript graph -is saved. -\xdefault{axiom2D.ps} -% -\item[{\tt Axiom.3D.postScript:\ \it filename}] \ \newline -This specifies -the name of the file that is generated when a 3D PostScript graph -is saved. -\xdefault{axiom3D.ps} -% -\item[{\tt Axiom*titleFont \it font}] \ \newline -This -indicates which font type is used -for the title text and, for \threedim{} graphs, -in the lighting and viewing-volume control-panel windows. -\xdefault{Rom14} -% -\item[{\tt Axiom.2D.unitFont:\ \it font}] \quad (2D only) \newline -This indicates -which font type is used for displaying the unit labels on -\twodim{} viewport graphs. -\xdefault{6x10} -% -\item[{\tt Axiom.3D.volumeFont:\ \it font}] \quad (3D only) \newline -This indicates which font type is used for the {\bf x}, -{\bf y}, and {\bf z} labels of the clipping region sliders; for the -{\bf Perspective}, {\bf Show Region}, and {\bf Clipping On} buttons under -{\bf Settings}, and above the windows for the {\bf Hither} and -{\bf Eye Distance} sliders in the {\bf Viewing Volume Panel} of the -\threedim{} control-panel. -\xdefault{Rom8} -\enditems -\indent{0} -\endscroll -\autobuttons -\end{page} - -@ -\section{ug08.ht} -<>= -\newcommand{\ugProblemTitle}{Advanced Problem Solving} -\newcommand{\ugProblemNumber}{8.} - -@ -\subsection{8. Advanced Problem Solving} -\label{ugProblemPage} -\begin{itemize} -\item ugProblemNumericPage \ref{ugProblemNumericPage} on -page~\pageref{ugProblemNumericPage} -\item ugProblemFactorPage \ref{ugProblemFactorPage} on -page~\pageref{ugProblemFactorPage} -\item ugProblemSymRootPage \ref{ugProblemSymRootPage} on -page~\pageref{ugProblemSymRootPage} -\item ugProblemEigenPage \ref{ugProblemEigenPage} on -page~\pageref{ugProblemEigenPage} -\item ugProblemLinPolEqnPage \ref{ugProblemLinPolEqnPage} on -page~\pageref{ugProblemLinPolEqnPage} -\item ugProblemLimitsPage \ref{ugProblemLimitsPage} on -page~\pageref{ugProblemLimitsPage} -\item ugProblemLaplacePage \ref{ugProblemLaplacePage} on -page~\pageref{ugProblemLaplacePage} -\item ugProblemIntegrationPage \ref{ugProblemIntegrationPage} on -page~\pageref{ugProblemIntegrationPage} -\item ugProblemSeriesPage \ref{ugProblemSeriesPage} on -page~\pageref{ugProblemSeriesPage} -\item ugProblemDEQPage \ref{ugProblemDEQPage} on -page~\pageref{ugProblemDEQPage} -\item ugProblemFinitePage \ref{ugProblemFinitePage} on -page~\pageref{ugProblemFinitePage} -\item ugProblemIdealPage \ref{ugProblemIdealPage} on -page~\pageref{ugProblemIdealPage} -\item ugProblemGaloisPage \ref{ugProblemGaloisPage} on -page~\pageref{ugProblemGaloisPage} -\item ugProblemGeneticPage \ref{ugProblemGeneticPage} on -page~\pageref{ugProblemGeneticPage} -\end{itemize} -\index{pages!ugProblemPage!ug08.ht} -\index{ug08.ht!pages!ugProblemPage} -\index{ugProblemPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemPage}{8. Advanced Problem Solving} -\beginscroll - -In this chapter we describe techniques useful in solving advanced problems -with Axiom. - -\beginmenu - \menudownlink{{8.1. Numeric Functions}}{ugProblemNumericPage} - \menudownlink{{8.2. Polynomial Factorization}}{ugProblemFactorPage} - \menudownlink{{8.3. Manipulating Symbolic Roots of a Polynomial}} -{ugProblemSymRootPage} - \menudownlink{{8.4. Computation of Eigenvalues and Eigenvectors}} -{ugProblemEigenPage} - \menudownlink{{8.5. Solution of Linear and Polynomial Equations}} -{ugProblemLinPolEqnPage} - \menudownlink{{8.6. Limits}}{ugProblemLimitsPage} - \menudownlink{{8.7. Laplace Transforms}}{ugProblemLaplacePage} - \menudownlink{{8.8. Integration}}{ugProblemIntegrationPage} - \menudownlink{{8.9. Working with Power Series}}{ugProblemSeriesPage} - \menudownlink{{8.10. Solution of Differential Equations}}{ugProblemDEQPage} - \menudownlink{{8.11. Finite Fields}}{ugProblemFinitePage} - \menudownlink{{8.12. Primary Decomposition of Ideals}}{ugProblemIdealPage} - \menudownlink{{8.13. Computation of Galois Groups}}{ugProblemGaloisPage} - \menudownlink{{8.14. Non-Associative Algebras and Modelling Genetic Laws}} -{ugProblemGeneticPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemNumericTitle}{Numeric Functions} -\newcommand{\ugProblemNumericNumber}{8.1.} - -@ -\subsection{8.1. Numeric Functions} -\label{ugProblemNumericPage} -\begin{itemize} -\item ugIntroPage \ref{ugIntroPage} on -page~\pageref{ugIntroPage} -\item FloatXmpPage \ref{FloatXmpPage} on -page~\pageref{FloatXmpPage} -\item DoubleFloatXmpPage \ref{DoubleFloatXmpPage} on -page~\pageref{DoubleFloatXmpPage} -\end{itemize} -\index{pages!ugProblemNumericPage!ug08.ht} -\index{ug08.ht!pages!ugProblemNumericPage} -\index{ugProblemNumericPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemNumericPage}{8.1. Numeric Functions} -\beginscroll -% -Axiom provides two basic floating-point types: \axiomType{Float} and -\axiomType{DoubleFloat}. This section describes how to use numerical -operations defined on these types and the related complex types. -% -As we mentioned in \downlink{``\ugIntroTitle''}{ugIntroPage} in -Chapter \ugIntroNumber\ignore{ugIntro}, the \axiomType{Float} type -is a software -implementation of floating-point numbers in which the exponent and the -significand may have any number of digits. -See \downlink{`Float'}{FloatXmpPage}\ignore{Float} for detailed -information about this domain. -The \axiomType{DoubleFloat} (see -\downlink{`DoubleFloat'}{DoubleFloatXmpPage}\ignore{DoubleFloat}) -is usually a hardware -implementation of floating point numbers, corresponding to machine double -precision. -The types \axiomType{Complex Float} and \axiomType{Complex DoubleFloat} are -the corresponding software implementations of complex floating-point numbers. -In this section the term {\it floating-point type} means any of these -four types. -% -The floating-point types implement the basic elementary functions. -These include (where \axiomSyntax{\$} means -\axiomType{DoubleFloat}, -\axiomType{Float}, -\axiomType{Complex DoubleFloat}, or -\axiomType{Complex Float}): - -\noindent -\axiomFun{exp}, \axiomFun{log}: \axiom{\$ -> \$} \newline -\axiomFun{sin}, \axiomFun{cos}, \axiomFun{tan}, \axiomFun{cot}, \axiomFun{sec}, \axiomFun{csc}: \axiom{\$ -> \$} \newline -\axiomFun{sin}, \axiomFun{cos}, \axiomFun{tan}, \axiomFun{cot}, \axiomFun{sec}, \axiomFun{csc}: \axiom{\$ -> \$} \newline -\axiomFun{asin}, \axiomFun{acos}, \axiomFun{atan}, \axiomFun{acot}, \axiomFun{asec}, \axiomFun{acsc}: \axiom{\$ -> \$} \newline -\axiomFun{sinh}, \axiomFun{cosh}, \axiomFun{tanh}, \axiomFun{coth}, \axiomFun{sech}, \axiomFun{csch}: \axiom{\$ -> \$} \newline -\axiomFun{asinh}, \axiomFun{acosh}, \axiomFun{atanh}, \axiomFun{acoth}, \axiomFun{asech}, \axiomFun{acsch}: \axiom{\$ -> \$} \newline -\axiomFun{pi}: \axiom{() -> \$} \newline -\axiomFun{sqrt}: \axiom{\$ -> \$} \newline -\axiomFun{nthRoot}: \axiom{(\$, Integer) -> \$} \newline -\axiomFunFrom{**}{Float}: \axiom{(\$, Fraction Integer) -> \$} \newline -\axiomFunFrom{**}{Float}: \axiom{(\$,\$) -> \$} \newline - -The handling of roots depends on whether the floating-point type -is real or complex: for the real floating-point types, -\axiomType{DoubleFloat} and \axiomType{Float}, if a real root exists -the one with the same sign as the radicand is returned; for the -complex floating-point types, the principal value is returned. -Also, for real floating-point types the inverse functions -produce errors if the results are not real. -This includes cases such as \axiom{asin(1.2)}, \axiom{log(-3.2)}, -\axiom{sqrt(-1.1)}. -% -\xtc{ -The default floating-point type is \axiomType{Float} so to evaluate -functions using \axiomType{Float} or \axiomType{Complex Float}, just use -normal decimal notation. -}{ -\spadpaste{exp(3.1)} -} -\xtc{ -}{ -\spadpaste{exp(3.1 + 4.5 * \%i)} -} -\xtc{ -To evaluate functions using \axiomType{DoubleFloat} -or \axiomType{Complex DoubleFloat}, -a declaration or conversion is required. -}{ -\spadpaste{r: DFLOAT := 3.1; t: DFLOAT := 4.5; exp(r + t*\%i)} -} -\xtc{ -}{ -\spadpaste{exp(3.1::DFLOAT + 4.5::DFLOAT * \%i)} -} -% -A number of special functions are provided by the package -\axiomType{DoubleFloatSpecialFunctions} for the machine-precision -floating-point types. -The special functions provided are listed below, where \axiom{F} stands for -the types \axiomType{DoubleFloat} and \axiomType{Complex DoubleFloat}. -The real versions of the functions yield an error if the result is not real. - -\noindent -\axiomFun{Gamma}: \axiom{F -> F}\hfill\newline -\axiom{Gamma(z)} is the Euler gamma function, - \texht{$\Gamma(z)$}{\axiom{Gamma(z)}}, - defined by - \texht{\narrowDisplay{\Gamma(z) = \int_{0}^{\infty} t^{z-1} e^{-t} dt.}% - }{ -\newline -\centerline{{\axiom{Gamma(z) = integrate(t**(z-1)*exp(-t), t=0..\%infinity).}}} - } - -\noindent -\axiomFun{Beta}: \axiom{F -> F}\hfill\newline - \axiom{Beta(u, v)} is the Euler Beta function, - \texht{$B(u,v)$}{\axiom{B(u,v)}}, defined by - \texht{\narrowDisplay{B(u,v) = \int_{0}^{1} t^{u-1} (1-t)^{v-1} dt.}% - }{ -\newline -\centerline{{ \axiom{Beta(u,v) = integrate(t**(u-1)*(1-t)**(b-1), t=0..1).}}} - } - This is related to \texht{$\Gamma(z)$}{\axiom{Gamma(z)}} by - \texht{\narrowDisplay{B(u,v) = \frac{\Gamma(u) \Gamma(v)}{\Gamma(u + v)}.}% - }{ -\newline -\centerline{{ \axiom{Beta(u,v) = Gamma(u)*Gamma(v)/Gamma(u + v).}}} - }% - -\noindent -\axiomFun{logGamma}: \axiom{F -> F}\hfill\newline - \axiom{logGamma(z)} is the natural logarithm of -\texht{$\Gamma(z)$}{\axiom{Gamma(z)}}. - This can often be computed even if \texht{$\Gamma(z)$}{\axiom{Gamma(z)}} -cannot. -% - -\noindent -\axiomFun{digamma}: \axiom{F -> F}\hfill\newline - \axiom{digamma(z)}, also called \axiom{psi(z)}, -is the function \texht{$\psi(z)$}{\axiom{psi(z)}}, - defined by \texht{\narrowDisplay{\psi(z) = \Gamma'(z)/\Gamma(z).}% - }{ -\newline -\centerline{{ \axiom{psi(z) = Gamma'(z)/Gamma(z).}}} - }% - -\noindent -\axiomFun{polygamma}: \axiom{(NonNegativeInteger, F) -> F}\hfill\newline - \axiom{polygamma(n, z)} is the \eth{\axiom{n}} derivative of - \texht{$\psi(z)$}{\axiom{digamma(z)}}\texht{, written $\psi^{(n)}(z)$}{}. - -\noindent -\axiomFun{besselJ}: \axiom{(F,F) -> F}\hfill\newline - \axiom{besselJ(v,z)} is the Bessel function of the first kind, - \texht{$J_\nu (z)$}{\axiom{J(v,z)}}. - This function satisfies the differential equation - \texht{\narrowDisplay{z^2 w''(z) + z w'(z) + (z^2-\nu^2)w(z) = 0.}% - }{ -\newline -\centerline{{ \axiom{z**2*w''(z) + z*w'(z) + (z**2-v**2)*w(z) = 0.}}} - }% - -\noindent -\axiomFun{besselY}: \axiom{(F,F) -> F}\hfill\newline - \axiom{besselY(v,z)} is the Bessel function of the second kind, - \texht{$Y_\nu (z)$}{\axiom{Y(v,z)}}. - This function satisfies the same differential equation as - \axiomFun{besselJ}. - The implementation simply uses the relation - \texht{\narrowDisplay{Y_\nu (z) = \frac{J_\nu (z) \cos(\nu \pi) - J_{-\nu} (z)}{\sin(\nu \pi)}.}% - }{ -\newline -\centerline{{ \axiom{Y(v,z) = (J(v,z)*cos(v*\%pi) - J(-v,z))/sin(v*\%pi).}}} - }% - -\noindent -\axiomFun{besselI}: \axiom{(F,F) -> F}\hfill\newline - \axiom{besselI(v,z)} is the modified Bessel function of the first kind, - \texht{$I_\nu (z)$}{\axiom{I(v,z)}}. - This function satisfies the differential equation - \texht{\narrowDisplay{z^2 w''(z) + z w'(z) - (z^2+\nu^2)w(z) = 0.}% - }{ -\newline -\centerline{{ \axiom{z**2 * w''(z) + z * w'(z) - (z**2+v**2)*w(z) = 0.}}} - }% - -\noindent -\axiomFun{besselK}: \axiom{(F,F) -> F}\hfill\newline - \axiom{besselK(v,z)} is the modified Bessel function of the second kind, - \texht{$K_\nu (z)$}{\axiom{K(v,z)}}. - This function satisfies the same differential equation as \axiomFun{besselI}. - The implementation simply uses the relation - \texht{\narrowDisplay{K_\nu (z) = \pi \frac{I_{-\nu} (z) - I_{\nu} (z)}{2 \sin(\nu \pi)}.}% - }{ -\newline -\centerline{{ \axiom{K(v,z) = \%pi*(I(v,z) - I(-v,z))/(2*sin(v*\%pi)).}}} - } - -\noindent -\axiomFun{airyAi}: \axiom{F -> F}\hfill\newline - \axiom{airyAi(z)} is the Airy function \texht{$Ai(z)$}{\axiom{Ai(z)}}. - This function satisfies the differential equation - \texht{$w''(z) - z w(z) = 0.$}{\axiom{w''(z) - z * w(z) = 0.}} - The implementation simply uses the relation - \texht{\narrowDisplay{Ai(-z) = \frac{1}{3}\sqrt{z} ( J_{-1/3} (\frac{2}{3}z^{3/2}) + J_{1/3} (\frac{2}{3}z^{3/2}) ).}% - }{ -\newline -\centerline{{ \axiom{Ai(-z) = 1/3 * sqrt(z) * (J(-1/3, 2/3*z**(3/2)) + J(1/3, 2/3*z**(3/2)) ).}}} - }% - -\noindent -\axiomFun{airyBi}: \axiom{F -> F}\hfill\newline - \axiom{airyBi(z)} is the Airy function \texht{$Bi(z)$}{\axiom{Bi(z)}}. - This function satisfies the same differential equation as \axiomFun{airyAi}. - The implementation simply uses the relation - \texht{\narrowDisplay{Bi(-z) = \frac{1}{3}\sqrt{3 z} ( J_{-1/3} (\frac{2}{3}z^{3/2}) - J_{1/3} (\frac{2}{3}z^{3/2}) ).}% - }{ -\newline -\centerline{{ \axiom{Bi(-z) = 1/3 *sqrt(3*z) * (J(-1/3, 2/3*z**(3/2)) - J(1/3, 2/3*z**(3/2)) ).}}} - } - -\noindent -\axiomFun{hypergeometric0F1}: \axiom{(F,F) -> F}\hfill\newline - \axiom{hypergeometric0F1(c,z)} is the hypergeometric function - \texht{${}_0 F_1 ( ; c; z)$}{\axiom{0F1(; c; z)}}.% - -\xtc{ -The above special functions are defined only for small floating-point types. -If you give \axiomType{Float} arguments, they are converted to -\axiomType{DoubleFloat} by Axiom. -}{ -\spadpaste{Gamma(0.5)**2} -} -\xtc{ -}{ -\spadpaste{a := 2.1; b := 1.1; besselI(a + \%i*b, b*a + 1)} -} -% -A number of additional operations may be used to compute numerical values. -These are special polynomial functions that can be evaluated for values in -any commutative ring \axiom{R}, and in particular for values in any -floating-point type. -The following operations are provided by the package -\axiomType{OrthogonalPolynomialFunctions}: - -\noindent -\axiomFun{chebyshevT}: \axiom{(NonNegativeInteger, R) -> R}\hbox{}\hfill\newline - \axiom{chebyshevT(n,z)} is the \eth{\axiom{n}} Chebyshev polynomial of the first - kind, \texht{$T_n (z)$}{\axiom{T[n](z)}}. These are defined by - \texht{\narrowDisplay{\frac{1-t z}{1-2 t z+t^2} = \sum_{n=0}^{\infty} T_n (z) t^n.}% - }{ -\newline -\centerline{{ \axiom{(1-t*z)/(1-2*t*z+t**2) = sum(T[n](z) *t**n, n = 0..).}}} - }% - -\noindent -\axiomFun{chebyshevU}: \axiom{(NonNegativeInteger, R) -> R}\hbox{}\hfill\newline - \axiom{chebyshevU(n,z)} is the \eth{\axiom{n}} Chebyshev polynomial of the second - kind, \texht{$U_n (z)$}{\axiom{U[n](z)}}. These are defined by - \texht{\narrowDisplay{\frac{1}{1-2 t z+t^2} = \sum_{n=0}^{\infty} U_n (z) t^n.}% - }{ -\newline -\centerline{{ \axiom{1/(1-2*t*z+t**2) = sum(U[n](z) *t**n, n = 0..).}}} - }% - -\noindent -\axiomFun{hermiteH}: \axiom{(NonNegativeInteger, R) -> R}\hbox{}\hfill\newline - \axiom{hermiteH(n,z)} is the \eth{\axiom{n}} Hermite polynomial, - \texht{$H_n (z)$}{\axiom{H[n](z)}}. - These are defined by - \texht{\narrowDisplay{e^{2 t z - t^2} = \sum_{n=0}^{\infty} H_n (z) \frac{t^n}{n!}.}% - }{ -\newline -\centerline{{ \axiom{exp(2*t*z-t**2) = sum(H[n](z)*t**n/n!, n = 0..).}}} - }% - -\noindent -\axiomFun{laguerreL}: \axiom{(NonNegativeInteger, R) -> R}\hbox{}\hfill\newline - \axiom{laguerreL(n,z)} is the \eth{\axiom{n}} Laguerre polynomial, - \texht{$L_n (z)$}{\axiom{L[n](z)}}. - These are defined by - \texht{\narrowDisplay{\frac{e^{-\frac{t z}{1-t}}}{1-t} = \sum_{n=0}^{\infty} L_n (z) \frac{t^n}{n!}.}% - }{ -\newline -\centerline{{ \axiom{exp(-t*z/(1-t))/(1-t) = sum(L[n](z)*t**n/n!, n = 0..).}}} - }% - -\noindent -\axiomFun{laguerreL}: \axiom{(NonNegativeInteger, NonNegativeInteger, R) -> R}\hbox{}\hfill\newline - \axiom{laguerreL(m,n,z)} is the associated Laguerre polynomial, - \texht{$L^m_n (z)$}{\axiom{L[n](z)}}. - This is the \eth{\axiom{m}} derivative of \texht{$L_n (z)$}{\axiom{L[n](z)}}. - -\noindent -\axiomFun{legendreP}: \axiom{(NonNegativeInteger, R) -> R}\hbox{}\hfill\newline - \axiom{legendreP(n,z)} is the \eth{\axiom{n}} Legendre polynomial, - \texht{$P_n (z)$}{\axiom{P[n](z)}}. These are defined by - \texht{\narrowDisplay{\frac{1}{\sqrt{1-2 t z+t^2}} = \sum_{n=0}^{\infty} P_n (z) t^n.}% - }{ -\newline -\centerline{{ \axiom{1/sqrt(1-2*z*t+t**2) = sum(P[n](z)*t**n, n = 0..).}}} - }% - -% -\xtc{ -These operations require non-negative integers for the indices, but otherwise -the argument can be given as desired. -}{ -\spadpaste{[chebyshevT(i, z) for i in 0..5]} -} -\xtc{ -The expression \axiom{chebyshevT(n,z)} evaluates to the \eth{\axiom{n}} Chebyshev -polynomial of the first kind. -}{ -\spadpaste{chebyshevT(3, 5.0 + 6.0*\%i)} -} -\xtc{ -}{ -\spadpaste{chebyshevT(3, 5.0::DoubleFloat)} -} -\xtc{ -The expression \axiom{chebyshevU(n,z)} evaluates to the \eth{\axiom{n}} Chebyshev -polynomial of the second kind. -}{ -\spadpaste{[chebyshevU(i, z) for i in 0..5]} -} -\xtc{ -}{ -\spadpaste{chebyshevU(3, 0.2)} -} -\xtc{ -The expression \axiom{hermiteH(n,z)} evaluates to the \eth{\axiom{n}} Hermite -polynomial. -}{ -\spadpaste{[hermiteH(i, z) for i in 0..5]} -} -\xtc{ -}{ -\spadpaste{hermiteH(100, 1.0)} -} -\xtc{ -The expression \axiom{laguerreL(n,z)} evaluates to the \eth{\axiom{n}} Laguerre -polynomial. -}{ -\spadpaste{[laguerreL(i, z) for i in 0..4]} -} -\xtc{ -}{ -\spadpaste{laguerreL(4, 1.2)} -} -\xtc{ -}{ -\spadpaste{[laguerreL(j, 3, z) for j in 0..4]} -} -\xtc{ -}{ -\spadpaste{laguerreL(1, 3, 2.1)} -} -\xtc{ -The expression -\axiom{legendreP(n,z)} evaluates to the \eth{\axiom{n}} Legendre polynomial, -}{ -\spadpaste{[legendreP(i,z) for i in 0..5]} -} -\xtc{ -}{ -\spadpaste{legendreP(3, 3.0*\%i)} -} -% - -Finally, three number-theoretic polynomial operations may be evaluated. -The following operations are provided by the package -\axiomType{NumberTheoreticPolynomialFunctions}. - -\noindent -\axiomFun{bernoulliB}: \axiom{(NonNegativeInteger, R) -> R} \hbox{}\hfill\newline - \axiom{bernoulliB(n,z)} is the \eth{\axiom{n}} Bernoulli polynomial, - \texht{$B_n (z)$}{\axiom{B[n](z)}}. These are defined by - \texht{\narrowDisplay{\frac{t e^{z t}}{e^t - 1} = \sum_{n=0}^{\infty} B_n (z) \frac{t^n}{n!}.} - }{ -\newline -\centerline{{ \axiom{t*exp(z*t)/(exp t - 1) = sum(B[n](z)*t**n/n! for n - 0..)}}} - }% - -\noindent -\axiomFun{eulerE}: \axiom{(NonNegativeInteger, R) -> R} \hbox{}\hfill\newline - \axiom{eulerE(n,z)} is the \eth{\axiom{n}} Euler polynomial, - \texht{$E_n (z)$}{\axiom{E[n](z)}}. These are defined by - \texht{\narrowDisplay{\frac{2 e^{z t}}{e^t + 1} = \sum_{n=0}^{\infty} E_n (z) \frac{t^n}{n!}.}% - }{ -\newline -\centerline{{ \axiom{2*exp(z*t)/(exp t + 1) = sum(E[n](z)*t**n/n! for n - 0..)}}} - }% - -\noindent -\axiomFun{cyclotomic}: \axiom{(NonNegativeInteger, R) -> R}\hbox{}\hfill\newline - \axiom{cyclotomic(n,z)} is the \eth{\axiom{n}} cyclotomic polynomial - \texht{$\Phi_n (z)$}{\axiom{phi(n,z)}}. This is the polynomial whose - roots are precisely the primitive \eth{\axiom{n}} roots of unity. - This polynomial has degree given by the Euler totient function - \texht{$\phi(n)$}{\axiom{phi(n)}}. - -\xtc{ -The expression \axiom{bernoulliB(n,z)} evaluates to the \eth{\axiom{n}} Bernoulli -polynomial. -}{ -\spadpaste{bernoulliB(3, z)} -} -\xtc{ -}{ -\spadpaste{bernoulliB(3, 0.7 + 0.4 * \%i)} -} -\xtc{ -The expression -\axiom{eulerE(n,z)} evaluates to the \eth{\axiom{n}} Euler polynomial. -}{ -\spadpaste{eulerE(3, z)} -} -\xtc{ -}{ -\spadpaste{eulerE(3, 0.7 + 0.4 * \%i)} -} -\xtc{ -The expression -\axiom{cyclotomic(n,z)} evaluates to the \eth{\axiom{n}} cyclotomic polynomial. -}{ -\spadpaste{cyclotomic(3, z)} -} -\xtc{ -}{ -\spadpaste{cyclotomic(3, (-1.0 + 0.0 * \%i)**(2/3))} -} - -Drawing complex functions in Axiom is presently somewhat -awkward compared to drawing real functions. -It is necessary to use the \axiomFun{draw} operations that operate -on functions rather than expressions. - -\psXtc{ -This is the complex exponential function\texht{ (rotated interactively).}{.} -When this is displayed in color, the height is the value of the real part of -the function and the color is the imaginary part. -Red indicates large negative imaginary values, green indicates imaginary -values near zero and blue/violet indicates large positive imaginary values. -}{ -\graphpaste{draw((x,y)+-> real exp complex(x,y), -2..2, -2*\%pi..2*\%pi, colorFunction == (x, y) +-> imag exp complex(x,y), title=="exp(x+\%i*y)", style=="smooth")} -}{ -\epsffile[0 0 295 295]{../ps/compexp.ps} -} - -\psXtc{ -This is the complex arctangent function. -Again, the height is the real part of the function value but here -the color indicates the function value's phase. -The position of the branch cuts are clearly visible and one can -see that the function is real only for a real argument. -}{ -\graphpaste{vp := draw((x,y) +-> real atan complex(x,y), -\%pi..\%pi, -\%pi..\%pi, colorFunction==(x,y) +->argument atan complex(x,y), title=="atan(x+\%i*y)", style=="shade"); rotate(vp,-160,-45); vp} -}{ -\epsffile[0 0 295 295]{../ps/compatan.ps} -} - -\psXtc{ -This is the complex Gamma function. -}{ -\graphpaste{draw((x,y) +-> max(min(real Gamma complex(x,y),4),-4), -\%pi..\%pi, -\%pi..\%pi, style=="shade", colorFunction == (x,y) +-> argument Gamma complex(x,y), title == "Gamma(x+\%i*y)", var1Steps == 50, var2Steps== 50)} -}{ -\epsffile[0 0 295 295]{../ps/compgamm.ps} -} - -\psXtc{ -This shows the real Beta function near the origin. -}{ -\graphpaste{draw(Beta(x,y)/100, x=-1.6..1.7, y = -1.6..1.7, style=="shade", title=="Beta(x,y)", var1Steps==40, var2Steps==40)} -}{ -\epsffile[0 0 295 295]{../ps/realbeta.ps} -} - -\psXtc{ -This is the Bessel function \texht{$J_\alpha (x)$}{\axiom{J(alpha,x)}} -for index \texht{$\alpha$}{\axiom{alpha}} in the range \axiom{-6..4} and -argument \texht{$x$}{\axiom{x}} in the range \axiom{2..14}. -}{ -\graphpaste{draw((alpha,x) +-> min(max(besselJ(alpha, x+8), -6), 6), -6..4, -6..6, title=="besselJ(alpha,x)", style=="shade", var1Steps==40, var2Steps==40)} -}{ -\epsffile[0 0 295 295]{../ps/bessel.ps} -} - -\psXtc{ -This is the modified Bessel function -\texht{$I_\alpha (x)$}{\axiom{I(alpha,x)}} -evaluated for various real values of the index \texht{$\alpha$}{\axiom{alpha}} -and fixed argument \texht{$x = 5$}{\axiom{x = 5}}. -}{ -\graphpaste{draw(besselI(alpha, 5), alpha = -12..12, unit==[5,20])} -}{ -\epsffile[0 0 295 295]{../ps/modbess.ps} -} - -\psXtc{ -This is similar to the last example -except the index \texht{$\alpha$}{\axiom{alpha}} -takes on complex values in a \axiom{6 x 6} rectangle centered on the origin. -}{ -\graphpaste{draw((x,y) +-> real besselI(complex(x/20, y/20),5), -60..60, -60..60, colorFunction == (x,y)+-> argument besselI(complex(x/20,y/20),5), title=="besselI(x+i*y,5)", style=="shade")} -}{ -\epsffile[0 0 295 295]{../ps/modbessc.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemFactorTitle}{Polynomial Factorization} -\newcommand{\ugProblemFactorNumber}{8.2.} - -@ -\subsection{8.2. Polynomial Factorization} -\label{ugProblemFactorPage} -\begin{itemize} -\item ugProblemFactorIntRatPage \ref{ugProblemFactorIntRatPage} on -page~\pageref{ugProblemFactorIntRatPage} -\item ugProblemFactorFFPage \ref{ugProblemFactorFFPage} on -page~\pageref{ugProblemFactorFFPage} -\item ugProblemFactorAlgPage \ref{ugProblemFactorAlgPage} on -page~\pageref{ugProblemFactorAlgPage} -\item ugProblemFactorRatFunPage \ref{ugProblemFactorRatFunPage} on -page~\pageref{ugProblemFactorRatFunPage} -\end{itemize} -\index{pages!ugProblemFactorPage!ug08.ht} -\index{ug08.ht!pages!ugProblemFactorPage} -\index{ugProblemFactorPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemFactorPage}{8.2. Polynomial Factorization} -\beginscroll -% -The Axiom polynomial factorization -facilities are available for all polynomial types and a wide variety of -coefficient domains. -Here are some examples. - -\beginmenu - \menudownlink{{8.2.1. Integer and Rational Number Coefficients}} -{ugProblemFactorIntRatPage} - \menudownlink{{8.2.2. Finite Field Coefficients}} -{ugProblemFactorFFPage} - \menudownlink{{8.2.3. Simple Algebraic Extension Field Coefficients}} -{ugProblemFactorAlgPage} - \menudownlink{{8.2.4. Factoring Rational Functions}} -{ugProblemFactorRatFunPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemFactorIntRatTitle}{Integer and Rational Number Coefficients} -\newcommand{\ugProblemFactorIntRatNumber}{8.2.1.} - -@ -\subsection{8.2.1. Integer and Rational Number Coefficients} -\label{ugProblemFactorIntRatPage} -\index{pages!ugProblemFactorIntRatPage!ug08.ht} -\index{ug08.ht!pages!ugProblemFactorIntRatPage} -\index{ugProblemFactorIntRatPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemFactorIntRatPage} -{8.2.1. Integer and Rational Number Coefficients} -\beginscroll - -\labelSpace{4pc} -\xtc{ -Polynomials with integer -coefficients can be be factored. -}{ -\spadpaste{v := (4*x**3+2*y**2+1)*(12*x**5-x**3*y+12) \bound{v}} -} -\xtc{ -}{ -\spadpaste{factor v \free{v}} -} -\xtc{ -Also, Axiom can factor polynomials with -rational number coefficients. -}{ -\spadpaste{w := (4*x**3+(2/3)*x**2+1)*(12*x**5-(1/2)*x**3+12) \bound{w}} -} -\xtc{ -}{ -\spadpaste{factor w \free{w}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemFactorFFTitle}{Finite Field Coefficients} -\newcommand{\ugProblemFactorFFNumber}{8.2.2.} - -@ -\subsection{8.2.2. Finite Field Coefficients} -\label{ugProblemFactorFFPage} -\begin{itemize} -\item ugProblemFinitePage \ref{ugProblemFinitePage} on -page~\pageref{ugProblemFinitePage} -\end{itemize} -\index{pages!ugProblemFactorFFPage!ug08.ht} -\index{ug08.ht!pages!ugProblemFactorFFPage} -\index{ugProblemFactorFFPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemFactorFFPage}{8.2.2. Finite Field Coefficients} -\beginscroll - -Polynomials with coefficients in a finite field -can be also be factored. - -\labelSpace{3pc} -\xtc{ -}{ -\spadpaste{u : POLY(PF(19)) :=3*x**4+2*x**2+15*x+18 \bound{u}} -} -\xtc{ -These include the integers mod \axiom{p}, where \axiom{p} is prime, and -extensions of these fields. -}{ -\spadpaste{factor u \free{u}} -} -\xtc{ -Convert this to have coefficients in the finite -field with \texht{$19^3$}{\axiom{19**3}} elements. -See \downlink{``\ugProblemFiniteTitle''}{ugProblemFinitePage} -in Section \ugProblemFiniteNumber\ignore{ugProblemFinite} for more information -about finite fields. -}{ -\spadpaste{factor(u :: POLY FFX(PF 19,3)) \free{u}} -} -% - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemFactorAlgTitle}{Simple Algebraic Extension Field Coefficients} -\newcommand{\ugProblemFactorAlgNumber}{8.2.3.} - -@ -\subsection{8.2.3. Simple Algebraic Extension Field Coefficients} -\label{ugProblemFactorAlgPage} -\index{pages!ugProblemFactorAlgPage!ug08.ht} -\index{ug08.ht!pages!ugProblemFactorAlgPage} -\index{ugProblemFactorAlgPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemFactorAlgPage} -{8.2.3. Simple Algebraic Extension Field Coefficients} -\beginscroll - -Polynomials with coefficients in simple algebraic extensions -of the rational numbers can be factored. - -\labelSpace{2pc} -\xtc{ -Here, \axiom{aa} and \axiom{bb} are symbolic roots of polynomials. -}{ -\spadpaste{aa := rootOf(aa**2+aa+1) \bound{aa}} -} -\xtc{ -}{ -\spadpaste{p:=(x**3+aa**2*x+y)*(aa*x**2+aa*x+aa*y**2)**2 \free{aa}\bound{p}} -} -\xtc{ -Note that the second argument to factor can be a list of -algebraic extensions to factor over. -}{ -\spadpaste{factor(p,[aa]) \free{p aa}} -} -\xtc{ -This factors \axiom{x**2+3} over the integers. -}{ -\spadpaste{factor(x**2+3)} -} -\xtc{ -Factor the same polynomial over the field obtained by adjoining -\axiom{aa} to the rational numbers. -}{ -\spadpaste{factor(x**2+3,[aa]) \free{aa}} -} -\xtc{ -Factor \axiom{x**6+108} over the same field. -}{ -\spadpaste{factor(x**6+108,[aa]) \free{aa}} -} -\xtc{ -}{ -\spadpaste{bb:=rootOf(bb**3-2) \bound{bb}} -} -\xtc{ -}{ -\spadpaste{factor(x**6+108,[bb]) \free{bb}} -} -\xtc{ -Factor again over the field obtained by adjoining both \axiom{aa} -and \axiom{bb} to the rational numbers. -}{ -\spadpaste{factor(x**6+108,[aa,bb]) \free{aa bb}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemFactorRatFunTitle}{Factoring Rational Functions} -\newcommand{\ugProblemFactorRatFunNumber}{8.2.4.} - -@ -\subsection{8.2.4. Factoring Rational Functions} -\label{ugProblemFactorRatFunPage} -\index{pages!ugProblemFactorRatFunPage!ug08.ht} -\index{ug08.ht!pages!ugProblemFactorRatFunPage} -\index{ugProblemFactorRatFunPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemFactorRatFunPage}{8.2.4. Factoring Rational Functions} -\beginscroll - -Since fractions of polynomials form a field, every element (other than zero) -divides any other, so there is no useful notion of irreducible factors. -Thus the \axiomFun{factor} operation is not very useful for fractions -of polynomials. - -\xtc{ -There is, instead, a specific operation \axiomFun{factorFraction} -that separately factors the numerator and denominator and returns -a fraction of the factored results. -}{ -\spadpaste{factorFraction((x**2-4)/(y**2-4))} -} -\xtc{ -You can also use \axiomFun{map}. This expression -applies the \axiomFun{factor} operation -to the numerator and denominator. -}{ -\spadpaste{map(factor,(x**2-4)/(y**2-4))} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemSymRootTitle}{Manipulating Symbolic Roots of a Polynomial} -\newcommand{\ugProblemSymRootNumber}{8.3.} - -@ -\subsection{8.3. Manipulating Symbolic Roots of a Polynomial} -\label{ugProblemSymRootPage} -\begin{itemize} -\item ugxProblemOnePolPage \ref{ugxProblemOnePolPage} on -page~\pageref{ugxProblemOnePolPage} -\item ugxProblemPolSysPage \ref{ugxProblemPolSysPage} on -page~\pageref{ugxProblemPolSysPage} -\item ugxProblemSymRootOnePage \ref{ugxProblemSymRootOnePage} on -page~\pageref{ugxProblemSymRootOnePage} -\item ugxProblemSymRootAllPage \ref{ugxProblemSymRootAllPage} on -page~\pageref{ugxProblemSymRootAllPage} -\end{itemize} -\index{pages!ugProblemSymRootPage!ug08.ht} -\index{ug08.ht!pages!ugProblemSymRootPage} -\index{ugProblemSymRootPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemSymRootPage} -{8.3. Manipulating Symbolic Roots of a Polynomial} -\beginscroll -% -In this section we show you how to work with one root or all roots -of a polynomial. -These roots are represented symbolically (as opposed to being -numeric approximations). -See \downlink{``\ugxProblemOnePolTitle''}{ugxProblemOnePolPage} -in Section \ugxProblemOnePolNumber\ignore{ugxProblemOnePol} and -\downlink{``\ugxProblemPolSysTitle''}{ugxProblemPolSysPage} in -Section \ugxProblemPolSysNumber\ignore{ugxProblemPolSys} for -information about solving for the roots of one or more -polynomials. - -\beginmenu - \menudownlink{{8.3.1. Using a Single Root of a Polynomial}} -{ugxProblemSymRootOnePage} - \menudownlink{{8.3.2. Using All Roots of a Polynomial}} -{ugxProblemSymRootAllPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemSymRootOneTitle}{Using a Single Root of a Polynomial} -\newcommand{\ugxProblemSymRootOneNumber}{8.3.1.} - -@ -\subsection{8.3.1. Using a Single Root of a Polynomial} -\label{ugxProblemSymRootOnePage} -\index{pages!ugxProblemSymRootOnePage!ug08.ht} -\index{ug08.ht!pages!ugxProblemSymRootOnePage} -\index{ugxProblemSymRootOnePage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemSymRootOnePage}{8.3.1. Using a Single Root of a Polynomial} -\beginscroll - -Use \axiomFun{rootOf} to get a symbolic root of a polynomial: -\axiom{rootOf(p, x)} returns a root of \axiom{p(x)}. - -\labelSpace{2pc} -\xtc{ -This creates an algebraic number \axiom{a}. -}{ -\spadpaste{a := rootOf(a**4+1,a) \bound{a}} -} -\xtc{ -To find the algebraic relation that defines \axiom{a}, -use \axiomFun{definingPolynomial}. -}{ -\spadpaste{definingPolynomial a \free{a}} -} -\xtc{ -You can use \axiom{a} in any further expression, -including a nested \axiomFun{rootOf}. -}{ -\spadpaste{b := rootOf(b**2-a-1,b) \free{a}\bound{b}} -} -\xtc{ -Higher powers of the roots are automatically reduced during -calculations. -}{ -\spadpaste{a + b \free{a b}\bound{c}} -} -\xtc{ -}{ -\spadpaste{\% ** 5 \free{c}} -} -\xtc{ -The operation \axiomFun{zeroOf} is similar to \axiomFun{rootOf}, -except that it may express the root using radicals in some cases. -}{ -\spadpaste{rootOf(c**2+c+1,c)} -} -\xtc{ -}{ -\spadpaste{zeroOf(d**2+d+1,d)} -} -\xtc{ -}{ -\spadpaste{rootOf(e**5-2,e)} -} -\xtc{ -}{ -\spadpaste{zeroOf(f**5-2,f)} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemSymRootAllTitle}{Using All Roots of a Polynomial} -\newcommand{\ugxProblemSymRootAllNumber}{8.3.2.} - -@ -\subsection{8.3.2. Using All Roots of a Polynomial} -\label{ugxProblemSymRootAllPage} -\begin{itemize} -\item ugxProblemOnePolPage \ref{ugxProblemOnePolPage} on -page~\pageref{ugxProblemOnePolPage} -\end{itemize} -\index{pages!ugxProblemSymRootAllPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemSymRootAllPage} -\index{ugxProblemSymRootAllPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemSymRootAllPage}{8.3.2. Using All Roots of a Polynomial} -\beginscroll - -Use \axiomFun{rootsOf} to get all symbolic roots of a polynomial: -\axiom{rootsOf(p, x)} returns a -list of all the roots of \axiom{p(x)}. -If \axiom{p(x)} has a multiple root of order \axiom{n}, then that root -appears \axiom{n} times in the list. -\texht{\typeout{Make sure these variables are x0 etc}}{} - -\xtc{ -Compute all the roots of \axiom{x**4 + 1}. -}{ -\spadpaste{l := rootsOf(x**4+1,x) \bound{l}} -} -\xtc{ -As a side effect, the variables \axiom{\%x0, \%x1} and \axiom{\%x2} are bound -to the first three roots of \axiom{x**4+1}. -}{ -\spadpaste{\%x0**5 \free{l}} -} -\xtc{ -Although they all satisfy \axiom{x**4 + 1 = 0, \%x0, \%x1,} -and \axiom{\%x2} are different algebraic numbers. -To find the algebraic relation that defines each of them, -use \axiomFun{definingPolynomial}. -}{ -\spadpaste{definingPolynomial \%x0 \free{l}} -} -\xtc{ -}{ -\spadpaste{definingPolynomial \%x1 \free{l}} -} -\xtc{ -}{ -\spadpaste{definingPolynomial \%x2 \free{l}} -} -\xtc{ -We can check that the sum and product of the roots of \axiom{x**4+1} are -its trace and norm. -}{ -\spadpaste{x3 := last l \free{l} \bound{x3}} -} -\xtc{ -}{ -\spadpaste{\%x0 + \%x1 + \%x2 + x3 \free{x3}} -} -\xtc{ -}{ -\spadpaste{\%x0 * \%x1 * \%x2 * x3 \free{x3}} -} -\xtc{ -Corresponding to the pair of operations -\axiomFun{rootOf}/\axiomFun{zeroOf} in -\downlink{``\ugxProblemOnePolTitle''}{ugxProblemOnePolPage} in -Section \ugxProblemOnePolNumber\ignore{ugxProblemOnePol}, there is -an operation \axiomFun{zerosOf} that, like \axiomFun{rootsOf}, -computes all the roots -of a given polynomial, but which expresses some of them in terms of -radicals. -}{ -\spadpaste{zerosOf(y**4+1,y) \bound{z}} -} -\xtc{ -As you see, only one implicit algebraic number was created -(\axiom{\%y1}), and its defining equation is this. -The other three roots are expressed in radicals. -}{ -\spadpaste{definingPolynomial \%y1 \free{z}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemEigenTitle}{Computation of Eigenvalues and Eigenvectors} -\newcommand{\ugProblemEigenNumber}{8.4.} - -@ -\subsection{8.4. Computation of Eigenvalues and Eigenvectors} -\label{ugProblemEigenPage} -\index{pages!ugProblemEigenPage!ug08.ht} -\index{ug08.ht!pages!ugProblemEigenPage} -\index{ugProblemEigenPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemEigenPage} -{8.4. Computation of Eigenvalues and Eigenvectors} -\beginscroll -% -In this section we show you -some of Axiom's facilities for computing and -manipulating eigenvalues and eigenvectors, also called -characteristic values and characteristic vectors, -respectively. - -\texht{\vskip 4pc}{} - -\xtc{ -Let's first create a matrix with integer entries. -}{ -\spadpaste{m1 := matrix [[1,2,1],[2,1,-2],[1,-2,4]] \bound{m1}} -} -\xtc{ -To get a list of the {\it rational} eigenvalues, -use the operation \axiomFun{eigenvalues}. -}{ -\spadpaste{leig := eigenvalues(m1) \free{m1} \bound{leig}} -} -\xtc{ -Given an explicit eigenvalue, \axiomFun{eigenvector} computes the eigenvectors -corresponding to it. -}{ -\spadpaste{eigenvector(first(leig),m1) \free{m1 leig}} -} - -The operation \axiomFun{eigenvectors} returns a list of pairs of values and -vectors. When an eigenvalue is rational, Axiom gives you -the value explicitly; otherwise, its minimal polynomial is given, -(the polynomial of lowest degree with the eigenvalues as roots), -together with a parametric representation of the eigenvector using the -eigenvalue. -This means that if you ask Axiom to \axiomFun{solve} -the minimal polynomial, then you can substitute these roots -into the parametric form of the corresponding eigenvectors. - -\xtc{ -You must be aware that unless an exact eigenvalue has been computed, -the eigenvector may be badly in error. -}{ -\spadpaste{eigenvectors(m1) \free{m1}} -} -\xtc{ -Another possibility is to use the operation -\axiomFun{radicalEigenvectors} -tries to compute explicitly the eigenvectors -in terms of radicals. -}{ -\spadpaste{radicalEigenvectors(m1) \free{m1}} -} - -Alternatively, Axiom can compute real or complex approximations to the -eigenvectors and eigenvalues using the operations \axiomFun{realEigenvectors} -or \axiomFun{complexEigenvectors}. -They each take an additional argument \texht{$\epsilon$}{\axiom{epsilon}} -to specify the ``precision'' required. -In the real case, this means that each approximation will be within -\texht{$\pm\epsilon$}{plus or minus \axiom{epsilon}} of the actual -result. -In the complex case, this means that each approximation will be within -\texht{$\pm\epsilon$}{plus or minus \axiom{epsilon}} of the actual result -in each of the real and imaginary parts. - -\xtc{ -The precision can be specified as a \axiomType{Float} if the results are -desired in floating-point notation, or as \axiomType{Fraction Integer} if the -results are to be expressed using rational (or complex rational) numbers. -}{ -\spadpaste{realEigenvectors(m1,1/1000) \free{m1}} -} -\xtc{ -If an \axiom{n} by \axiom{n} matrix has \axiom{n} distinct eigenvalues (and -therefore \axiom{n} eigenvectors) the operation \axiomFun{eigenMatrix} -gives you a matrix of the eigenvectors. -}{ -\spadpaste{eigenMatrix(m1) \free{m1}} -} -\xtc{ -}{ -\spadpaste{m2 := matrix [[-5,-2],[18,7]] \bound{m2}} -} -\xtc{ -}{ -\spadpaste{eigenMatrix(m2) \free{m2}} -} -% -% -\xtc{ -If a symmetric matrix -has a basis of orthonormal eigenvectors, then -\axiomFun{orthonormalBasis} computes a list of these vectors. -}{ -\spadpaste{m3 := matrix [[1,2],[2,1]] \bound{m3}} -} -\xtc{ -}{ -\spadpaste{orthonormalBasis(m3) \free{m3}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemLinPolEqnTitle}{Solution of Linear and Polynomial Equations} -\newcommand{\ugProblemLinPolEqnNumber}{8.5.} - -@ -\subsection{8.5. Solution of Linear and Polynomial Equations} -\label{ugProblemLinPolEqnPage} -\begin{itemize} -\item ugProblemDEQPage \ref{ugProblemDEQPage} on -page~\pageref{ugProblemDEQPage} -\item ugxProblemLinSysPage \ref{ugxProblemLinSysPage} on -page~\pageref{ugxProblemLinSysPage} -\item ugxProblemOnePolPage \ref{ugxProblemOnePolPage} on -page~\pageref{ugxProblemOnePolPage} -\item ugxProblemPolSysPage \ref{ugxProblemPolSysPage} on -page~\pageref{ugxProblemPolSysPage} -\end{itemize} -\index{pages!ugProblemLinPolEqnPage!ug08.ht} -\index{ug08.ht!pages!ugProblemLinPolEqnPage} -\index{ugProblemLinPolEqnPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemLinPolEqnPage} -{8.5. Solution of Linear and Polynomial Equations} -\beginscroll -% -In this section we discuss the Axiom facilities for solving -systems of linear equations, finding the roots of polynomials and -solving systems of polynomial equations. -For a discussion of the solution of differential equations, see -\downlink{``\ugProblemDEQTitle''}{ugProblemDEQPage} in -Section \ugProblemDEQNumber\ignore{ugProblemDEQ}. - -\beginmenu - \menudownlink{{8.5.1. Solution of Systems of Linear Equations}} -{ugxProblemLinSysPage} - \menudownlink{{8.5.2. Solution of a Single Polynomial Equation}} -{ugxProblemOnePolPage} - \menudownlink{{8.5.3. Solution of Systems of Polynomial Equations}} -{ugxProblemPolSysPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemLinSysTitle}{Solution of Systems of Linear Equations} -\newcommand{\ugxProblemLinSysNumber}{8.5.1.} - -@ -\subsection{8.5.1. Solution of Systems of Linear Equations} -\label{ugxProblemLinSysPage} -\index{pages!ugxProblemLinSysPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemLinSysPage} -\index{ugxProblemLinSysPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemLinSysPage}{8.5.1. Solution of Systems of Linear Equations} -\beginscroll - -You can use the operation \axiomFun{solve} to solve systems of linear equations. - -The operation \axiomFun{solve} takes two arguments, the list of equations and the -list of the unknowns to be solved for. -A system of linear equations need not have a unique solution. - -\xtc{ -To solve the linear system: -\centerline{{\axiom{ x + y + z = 8} }} -\centerline{{\axiom{3*x - 2*y + z = 0} }} -\centerline{{\axiom{ x + 2*y + 2*z = 17}}} -evaluate this expression. -}{ -\spadpaste{solve([x+y+z=8,3*x-2*y+z=0,x+2*y+2*z=17],[x,y,z])} -} - -Parameters are given as new variables starting with a percent sign and -\spadSyntax{\%} and -the variables are expressed in terms of the parameters. -If the system has no solutions then the empty list is returned. - -\xtc{ -When you solve the linear system -\centerline{{\axiom{ x + 2*y + 3*z = 2} }} -\centerline{{\axiom{2*x + 3*y + 4*z = 2} }} -\centerline{{\axiom{3*x + 4*y + 5*z = 2}}} -with this expression -you get a solution involving a parameter. -}{ -\spadpaste{solve([x+2*y+3*z=2,2*x+3*y+4*z=2,3*x+4*y+5*z=2],[x,y,z])} -} - -The system can also be presented as a matrix and a vector. -The matrix contains the coefficients of the linear equations and -the vector contains the numbers appearing on the right-hand sides -of the equations. -You may input the matrix as a list of rows and the vector as a -list of its elements. - -\xtc{ -To solve the system: -\centerline{{\axiom{ x + y + z = 8} }} -\centerline{{\axiom{3*x - 2*y + z = 0} }} -\centerline{{\axiom{ x + 2*y + 2*z = 17}}} -in matrix form you would evaluate this expression. -}{ -\spadpaste{solve([[1,1,1],[3,-2,1],[1,2,2]],[8,0,17])} -} - -The solutions are presented as a \pspadtype{Record} with two -components: the component \texht{{\it particular}}{{\tt -particular}} contains a particular solution of the given system or -the item {\tt "failed"} if there are no solutions, the component -\texht{{\it basis}}{{\tt basis}} contains a list of vectors that -are a basis for the space of solutions of the corresponding -homogeneous system. -If the system of linear equations does not have a unique solution, -then the \texht{{\it basis}}{{\tt basis}} component contains -non-trivial vectors. - -\xtc{ -This happens when you solve the linear system -\centerline{{\axiom{ x + 2*y + 3*z = 2} }} -\centerline{{\axiom{2*x + 3*y + 4*z = 2} }} -\centerline{{\axiom{3*x + 4*y + 5*z = 2}}} -with this command. -}{ -\spadpaste{solve([[1,2,3],[2,3,4],[3,4,5]],[2,2,2])} -} - -All solutions of this system are obtained by adding the particular -solution with a linear combination of the \texht{{\it basis}}{{\tt -basis}} vectors. - -When no solution exists then {\tt "failed"} is returned as the -\texht{{\it particular}}{{\tt particular}} component, as follows: - -\xtc{ -}{ -\spadpaste{solve([[1,2,3],[2,3,4],[3,4,5]],[2,3,2])} -} - -When you want to solve a system of homogeneous equations (that is, -a system where the numbers on the right-hand sides of the -equations are all zero) in the matrix form you can omit the second -argument and use the \axiomFun{nullSpace} operation. - -\xtc{ -This computes the solutions of the following system of equations: -\centerline{{\axiom{ x + 2*y + 3*z = 0} }} -\centerline{{\axiom{2*x + 3*y + 4*z = 0} }} -\centerline{{\axiom{3*x + 4*y + 5*z = 0}}} -The result is given as a list of vectors and -these vectors form a basis for the solution space. -}{ -\spadpaste{nullSpace([[1,2,3],[2,3,4],[3,4,5]])} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemOnePolTitle}{Solution of a Single Polynomial Equation} -\newcommand{\ugxProblemOnePolNumber}{8.5.2.} - -@ -\subsection{8.5.2. Solution of a Single Polynomial Equation} -\label{ugxProblemOnePolPage} -\index{pages!ugxProblemOnePolPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemOnePolPage} -\index{ugxProblemOnePolPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemOnePolPage}{8.5.2. Solution of a Single Polynomial Equation} -\beginscroll - -Axiom can solve polynomial equations producing either approximate -or exact solutions. -Exact solutions are either members of the ground -field or can be presented symbolically as roots of irreducible polynomials. - -\xtc{ -This returns the one rational root along with an irreducible -polynomial describing the other solutions. -}{ -\spadpaste{solve(x**3 = 8,x)} -} -\xtc{ -If you want solutions expressed in terms of radicals you would use this -instead. -}{ -\spadpaste{radicalSolve(x**3 = 8,x)} -} - -The \axiomFun{solve} command always returns a value but -\axiomFun{radicalSolve} returns only the solutions that it is -able to express in terms of radicals. - -If the polynomial equation has rational coefficients -you can ask for approximations to its real roots by calling -solve with a second argument that specifies the ``precision'' -\texht{$\epsilon$}{\axiom{epsilon}}. -This means that each approximation will be within -\texht{$\pm\epsilon$}{plus or minus \axiom{epsilon}} of the actual -result. - -\xtc{ -Notice that the type of second argument controls the type of the result. -}{ -\spadpaste{solve(x**4 - 10*x**3 + 35*x**2 - 50*x + 25,.0001)} -} -\xtc{ -If you give a floating-point precision you get a floating-point result; -if you give the precision as a rational number you get a rational result. -}{ -\spadpaste{solve(x**3-2,1/1000)} -} -\xtc{ -If you want approximate complex results you should use the -command \axiomFun{complexSolve} that takes the same precision argument -\texht{$\epsilon$}{\axiom{epsilon}}. -}{ -\spadpaste{complexSolve(x**3-2,.0001)} -} -\xtc{ -Each approximation will be within -\texht{$\pm\epsilon$}{plus or minus \axiom{epsilon}} of the actual result -in each of the real and imaginary parts. -}{ -\spadpaste{complexSolve(x**2-2*\%i+1,1/100)} -} - -Note that if you omit the \axiomOp{=} from the first argument -Axiom generates an equation by equating the first argument to zero. -Also, when only one variable is present in the equation, you -do not need to specify the variable to be solved for, that is, -you can omit the second argument. - -\xtc{ -Axiom can also solve equations involving rational functions. -Solutions where the denominator vanishes are discarded. -}{ -\spadpaste{radicalSolve(1/x**3 + 1/x**2 + 1/x = 0,x)} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemPolSysTitle}{Solution of Systems of Polynomial Equations} -\newcommand{\ugxProblemPolSysNumber}{8.5.3.} - -@ -\subsection{8.5.3. Solution of Systems of Polynomial Equations} -\label{ugxProblemPolSysPage} -\begin{itemize} -\item ugxProblemOnePolPage \ref{ugxProblemOnePolPage} on -page~\pageref{ugxProblemOnePolPage} -\end{itemize} -\index{pages!ugxProblemPolSysPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemPolSysPage} -\index{ugxProblemPolSysPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemPolSysPage} -{8.5.3. Solution of Systems of Polynomial Equations} -\beginscroll - -Given a system of equations of rational functions with exact coefficients: -\centerline{{\axiom{p1(x1,...,xn)} }} -\centerline{{\axiom{.} }} -\centerline{{\axiom{.} }} -\centerline{{\axiom{.} }} -\centerline{{\axiom{pm(x1,...,xn)}}} -Axiom can find -numeric or symbolic solutions. -The system is first split into irreducible components, then for -each component, a triangular system of equations is found that reduces -the problem to sequential solution of univariate polynomials resulting -from substitution of partial solutions from the previous stage. -\centerline{{\axiom{q1(x1,...,xn)} }} -\centerline{{\axiom{.} }} -\centerline{{\axiom{.} }} -\centerline{{\axiom{.} }} -\centerline{{\axiom{qm(xn)}}} - -Symbolic solutions can be presented using ``implicit'' algebraic numbers -defined as roots of irreducible polynomials or in terms of radicals. -Axiom can also find approximations to the real or complex roots -of a system of polynomial equations to any user-specified accuracy. - -The operation \axiomFun{solve} for systems is used in a way similar -to \axiomFun{solve} for single equations. -Instead of a polynomial equation, one has to give a list of -equations and instead of a single variable to solve for, a list of -variables. -For solutions of single equations see -\downlink{``\ugxProblemOnePolTitle''}{ugxProblemOnePolPage} in -Section \ugxProblemOnePolNumber\ignore{ugxProblemOnePol}. - -% -\xtc{ -Use the operation \axiomFun{solve} if you want implicitly presented -solutions. -}{ -\spadpaste{solve([3*x**3 + y + 1,y**2 -4],[x,y])} -} -\xtc{ -}{ -\spadpaste{solve([x = y**2-19,y = z**2+x+3,z = 3*x],[x,y,z])} -} -\xtc{ -Use \axiomFun{radicalSolve} if you want your solutions expressed -in terms of radicals. -}{ -\spadpaste{radicalSolve([3*x**3 + y + 1,y**2 -4],[x,y])} -} - -To get numeric solutions you only need to give the list of -equations and the precision desired. -The list of variables would be redundant information since there -can be no parameters for the numerical solver. - -\xtc{ -If the precision is expressed as a floating-point number you get -results expressed as floats. -}{ -\spadpaste{solve([x**2*y - 1,x*y**2 - 2],.01)} -} -\xtc{ -To get complex numeric solutions, use the operation \axiomFun{complexSolve}, -which takes the same arguments as in the real case. -}{ -\spadpaste{complexSolve([x**2*y - 1,x*y**2 - 2],1/1000)} -} -\xtc{ -It is also possible to solve systems of equations in rational functions -over the rational numbers. -Note that \axiom{[x = 0.0, a = 0.0]} is not returned as a solution since -the denominator vanishes there. -}{ -\spadpaste{solve([x**2/a = a,a = a*x],.001)} -} -\xtc{ -When solving equations with -denominators, all solutions where the denominator vanishes are -discarded. -}{ -\spadpaste{radicalSolve([x**2/a + a + y**3 - 1,a*y + a + 1],[x,y])} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemLimitsTitle}{Limits} -\newcommand{\ugProblemLimitsNumber}{8.6.} - -@ -\subsection{8.6. Limits} -\label{ugProblemLimitsPage} -\index{pages!ugProblemLimitsPage!ug08.ht} -\index{ug08.ht!pages!ugProblemLimitsPage} -\index{ugProblemLimitsPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemLimitsPage}{8.6. Limits} -\beginscroll -% -To compute a limit, you must specify a functional expression, -a variable, and a limiting value for that variable. -If you do not specify a direction, Axiom attempts to -compute a two-sided limit. - -\xtc{ -Issue this to compute the limit -\texht{$$\lim_{x \rightarrow 1}{{\displaystyle x^2 - 3x + -2}\over{\displaystyle x^2 - 1}}.$$}{ -of \axiom{(x**2 - 3*x + 2)/(x**2 - 1)} as \axiom{x} approaches \axiom{1}.} -}{ -\spadpaste{limit((x**2 - 3*x + 2)/(x**2 - 1),x = 1)} -} - -Sometimes the limit when approached from the left is different from the -limit from the right and, in this case, you may wish to ask for a -one-sided limit. -Also, -if you have a function that is only defined on one side of a particular value, -you can compute a one-sided limit. - -\xtc{ -The function \axiom{log(x)} is only defined to the right of zero, -that is, for \axiom{x > 0}. -Thus, when computing limits of functions involving \axiom{log(x)}, -you probably want a ``right-hand'' limit. -}{ -\spadpaste{limit(x * log(x),x = 0,"right")} -} -\xtc{ -When you do not specify \axiom{"right"} or \axiom{"left"} as the -optional fourth argument, \axiomFun{limit} tries to compute a -two-sided limit. -Here the limit from the left does not exist, as Axiom -indicates when you try to take a two-sided limit. -}{ -\spadpaste{limit(x * log(x),x = 0)} -} - -A function can be defined on both sides of a particular value, but -tend to different limits as its variable approaches that value from the -left and from the right. -We can construct an example of this as follows: -Since -\texht{$\sqrt{y^2}$}{\axiom{sqrt(y**2)}} -is simply the absolute value of \axiom{y}, -the function -\texht{$\sqrt{y^2} / y$}{\axiom{sqrt(y**2) / y}} -is simply the sign (\axiom{+1} or \axiom{-1}) of the nonzero -real number \axiom{y}. -Therefore, -\texht{$\sqrt{y^2} / y = -1$}{\axiom{sqrt(y**2) / y = -1}} -for \axiom{y < 0} and -\texht{$\sqrt{y^2} / y = +1$}{\axiom{sqrt(y**2) / y = +1}} -for \axiom{y > 0}. -\xtc{ -This is what happens when we take the limit at \axiom{y = 0}. -The answer returned by Axiom gives both a -``left-hand'' and a ``right-hand'' limit. -}{ -\spadpaste{limit(sqrt(y**2)/y,y = 0)} -} -\xtc{ -Here is another example, this time using a more complicated function. -}{ -\spadpaste{limit(sqrt(1 - cos(t))/t,t = 0)} -} - -You can compute limits at infinity by passing either -\texht{$+\infty$ or $-\infty$}{``plus infinity'' or ``minus infinity''} -as the third argument of \axiomFun{limit}. -\xtc{ -To do this, use the constants \axiom{\%plusInfinity} and \axiom{\%minusInfinity}. -}{ -\spadpaste{limit(sqrt(3*x**2 + 1)/(5*x),x = \%plusInfinity)} -} -\xtc{ -}{ -\spadpaste{limit(sqrt(3*x**2 + 1)/(5*x),x = \%minusInfinity)} -} - -\xtc{ -You can take limits of functions with parameters. -As you can see, the limit is expressed in terms of the parameters. -}{ -\spadpaste{limit(sinh(a*x)/tan(b*x),x = 0)} -} - -When you use \axiomFun{limit}, you are taking the limit of a real -function of a real variable. -\xtc{ -When you compute this, -Axiom returns \axiom{0} because, as a function of a real variable, -\axiom{sin(1/z)} is always between \axiom{-1} and \axiom{1}, so \axiom{z * sin(1/z)} -tends to \axiom{0} as \axiom{z} tends to \axiom{0}. -}{ -\spadpaste{limit(z * sin(1/z),z = 0)} -} -However, as a function of a {\it complex} variable, \axiom{sin(1/z)} is badly -behaved near \axiom{0} (one says that \axiom{sin(1/z)} has an -{\it essential singularity} at \axiom{z = 0}). -\xtc{ -When viewed as a function of a complex variable, \axiom{z * sin(1/z)} -does not approach any limit as \axiom{z} tends to \axiom{0} in the complex plane. -Axiom indicates this when we call \axiomFun{complexLimit}. -}{ -\spadpaste{complexLimit(z * sin(1/z),z = 0)} -} - -%% This is used in chapter 1 - -You can also take complex limits at infinity, that is, limits of a function of -\axiom{z} as \axiom{z} approaches infinity on the Riemann sphere. -Use the symbol \axiom{\%infinity} to denote ``complex infinity.'' -\xtc{ -As above, to compute complex limits rather than real limits, use -\axiomFun{complexLimit}. -}{ -\spadpaste{complexLimit((2 + z)/(1 - z),z = \%infinity)} -} -\xtc{ -In many cases, a limit of a real function of a real variable -exists when the corresponding complex limit does not. -This limit exists. -}{ -\spadpaste{limit(sin(x)/x,x = \%plusInfinity)} -} -\xtc{ -But this limit does not. -}{ -\spadpaste{complexLimit(sin(x)/x,x = \%infinity)} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemLaplaceTitle}{Laplace Transforms} -\newcommand{\ugProblemLaplaceNumber}{8.7.} - -@ -\subsection{8.7. Laplace Transforms} -\label{ugProblemLaplacePage} -\index{pages!ugProblemLaplacePage!ug08.ht} -\index{ug08.ht!pages!ugProblemLaplacePage} -\index{ugProblemLaplacePage!ug08.ht!pages} -<>= -\begin{page}{ugProblemLaplacePage}{8.7. Laplace Transforms} -\beginscroll -% -Axiom can compute some forward Laplace transforms, mostly -of elementary -functions -not involving logarithms, although some cases of -special functions are handled. -\xtc{ -To compute the forward Laplace transform of \axiom{F(t)} with respect to -\axiom{t} and express the result as \axiom{f(s)}, issue the command -\axiom{laplace(F(t), t, s)}. -}{ -\spadpaste{laplace(sin(a*t)*cosh(a*t)-cos(a*t)*sinh(a*t), t, s)} -} -\xtc{ -Here are some other non-trivial examples. -}{ -\spadpaste{laplace((exp(a*t) - exp(b*t))/t, t, s)} -} -\xtc{ -}{ -\spadpaste{laplace(2/t * (1 - cos(a*t)), t, s)} -} -\xtc{ -}{ -\spadpaste{laplace(exp(-a*t) * sin(b*t) / b**2, t, s)} -} -\xtc{ -}{ -\spadpaste{laplace((cos(a*t) - cos(b*t))/t, t, s)} -} -\xtc{ -Axiom also knows about a few special functions. -}{ -\spadpaste{laplace(exp(a*t+b)*Ei(c*t), t, s)} -} -\xtc{ -}{ -\spadpaste{laplace(a*Ci(b*t) + c*Si(d*t), t, s)} -} -\xtc{ -When Axiom does not know about a particular transform, -it keeps it as a formal transform in the answer. -}{ -\spadpaste{laplace(sin(a*t) - a*t*cos(a*t) + exp(t**2), t, s)} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemIntegrationTitle}{Integration} -\newcommand{\ugProblemIntegrationNumber}{8.8.} - -@ -\subsection{8.8. Integration} -\label{ugProblemIntegrationPage} -\begin{itemize} -\item ugxProblemSymRootAllPage \ref{ugxProblemSymRootAllPage} on -page~\pageref{ugxProblemSymRootAllPage} -\end{itemize} -\index{pages!ugProblemIntegrationPage!ug08.ht} -\index{ug08.ht!pages!ugProblemIntegrationPage} -\index{ugProblemIntegrationPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemIntegrationPage}{8.8. Integration} -\beginscroll -% -Integration is the reverse process of differentiation, that is, -an {\it integral} of a function \axiom{f} with respect to a variable -\axiom{x} is any function \axiom{g} such that \axiom{D(g,x)} -is equal to \axiom{f}. -\xtc{ -The package \axiomType{FunctionSpaceIntegration} provides the top-level -integration operation, \axiomFunFrom{integrate}{FunctionSpaceIntegration}, -for integrating real-valued elementary functions. -}{ -\spadpaste{integrate(cosh(a*x)*sinh(a*x), x)} -} -\xtc{ -Unfortunately, antiderivatives of most functions cannot be expressed in -terms of elementary functions. -}{ -\spadpaste{integrate(log(1 + sqrt(a * x + b)) / x, x)} -} -Given an elementary function to integrate, Axiom returns a formal -integral as above only when it can prove that the integral is not -elementary and not when it cannot determine the integral. -In this rare case it prints a message that it cannot -determine if an elementary integral exists. -% -\xtc{ -Similar functions may have antiderivatives -that look quite different because the form of the antiderivative -depends on the sign of a constant that appears in the function. -}{ -\spadpaste{integrate(1/(x**2 - 2),x)} -} -\xtc{ -}{ -\spadpaste{integrate(1/(x**2 + 2),x)} -} -% -If the integrand contains parameters, then there may be several possible -antiderivatives, depending on the signs of expressions of the parameters. -\xtc{ -In this case Axiom returns a list of answers that cover all -the possible cases. -Here you -use the answer involving the square root of \axiom{a} when \axiom{a > 0} and -the answer involving the square root of \axiom{-a} when \axiom{a < 0}. -}{ -\spadpaste{integrate(x**2 / (x**4 - a**2), x)} -} - -If the parameters and the variables of integration can be complex -numbers rather than real, then the notion of sign is not defined. -In this case all the possible answers can be expressed as one -complex function. -To get that function, rather than a list of real functions, use -\axiomFunFrom{complexIntegrate}{FunctionSpaceComplexIntegration}, -which is provided by the package -\axiomType{FunctionSpaceComplexIntegration}. - -\xtc{ -This operation is used for -integrating complex-valued elementary functions. -}{ -\spadpaste{complexIntegrate(x**2 / (x**4 - a**2), x)} -} -\xtc{ -As with the real case, -antiderivatives for most complex-valued functions cannot be expressed -in terms of elementary functions. -}{ -\spadpaste{complexIntegrate(log(1 + sqrt(a * x + b)) / x, x)} -} - -Sometimes \axiomFun{integrate} can involve symbolic algebraic numbers -such as those returned by \axiomFunFrom{rootOf}{Expression}. -To see how to work with these strange generated symbols (such as -\axiom{\%\%a0}), see -\downlink{``\ugxProblemSymRootAllTitle''}{ugxProblemSymRootAllPage} -in Section \ugxProblemSymRootAllNumber\ignore{ugxProblemSymRootAll}. - -Definite integration is the process of computing the area between -the \axiom{x}-axis and the curve of a function \axiom{f(x)}. -The fundamental theorem of calculus states that if \axiom{f} is -continuous on an interval \axiom{a..b} and if there exists a function \axiom{g} -that is differentiable on \axiom{a..b} and such that \axiom{D(g, x)} -is equal to \axiom{f}, then the definite integral of \axiom{f} -for \axiom{x} in the interval \axiom{a..b} is equal to \axiom{g(b) - g(a)}. - -\xtc{ -The package \axiomType{RationalFunctionDefiniteIntegration} provides -the top-level definite integration operation, -\axiomFunFrom{integrate}{RationalFunctionDefiniteIntegration}, -for integrating real-valued rational functions. -}{ -\spadpaste{integrate((x**4 - 3*x**2 + 6)/(x**6-5*x**4+5*x**2+4), x = 1..2)} -} -Axiom checks beforehand that the function you are integrating is -defined on the interval \axiom{a..b}, and prints an error message if it -finds that this is not case, as in the following example: +\subsection{Asp7 Example Code} +\label{Asp7ExampleCode} +\index{pages!Asp7ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp7ExampleCode} +\index{Asp7ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp7ExampleCode}{Asp7 Example Code} \begin{verbatim} -integrate(1/(x**2-2), x = 1..2) - - >> Error detected within library code: - Pole in path of integration - You are being returned to the top level - of the interpreter. + SUBROUTINE FCN(X,Z,F) + DOUBLE PRECISION F(*),X,Z(*) + F(1)=DTAN(Z(3)) + F(2)=((-0.03199999999999999D0*DCOS(Z(3))*DTAN(Z(3)))+(-0.02D0*Z(2) + &**2))/(Z(2)*DCOS(Z(3))) + F(3)=-0.03199999999999999D0/(X*Z(2)**2) + RETURN + END \end{verbatim} -When parameters are present in the function, the function may or may not be -defined on the interval of integration. - -\xtc{ -If this is the case, Axiom issues a warning that a pole might -lie in the path of integration, and does not compute the integral. -}{ -\spadpaste{integrate(1/(x**2-a), x = 1..2)} -} - -If you know that you are using values of the parameter for which -the function has no pole in the interval of integration, use the -string {\tt "noPole"} as a third argument to -\axiomFunFrom{integrate}{RationalFunctionDefiniteIntegration}: - -% -\xtc{ -The value here is, of course, incorrect if \axiom{sqrt(a)} is between -\axiom{1} and \axiom{2.} -}{ -\spadpaste{integrate(1/(x**2-a), x = 1..2, "noPole")} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemSeriesTitle}{Working with Power Series} -\newcommand{\ugProblemSeriesNumber}{8.9.} - -@ -\subsection{8.9. Working with Power Series} -\label{ugProblemSeriesPage} -\begin{itemize} -\item ugxProblemDEQSeriesPage \ref{ugxProblemDEQSeriesPage} on -page~\pageref{ugxProblemDEQSeriesPage} -\item ugxProblemSeriesCreatePage \ref{ugxProblemSeriesCreatePage} on -page~\pageref{ugxProblemSeriesCreatePage} -\item ugxProblemSeriesCoefficientsPage \ref{ugxProblemSeriesCoefficientsPage} on -page~\pageref{ugxProblemSeriesCoefficientsPage} -\item ugxProblemSeriesArithmeticPage \ref{ugxProblemSeriesArithmeticPage} on -page~\pageref{ugxProblemSeriesArithmeticPage} -\item ugxProblemSeriesFunctionsPage \ref{ugxProblemSeriesFunctionsPage} on -page~\pageref{ugxProblemSeriesFunctionsPage} -\item ugxProblemSeriesConversionsPage \ref{ugxProblemSeriesConversionsPage} on -page~\pageref{ugxProblemSeriesConversionsPage} -\item ugxProblemSeriesFormulaPage \ref{ugxProblemSeriesFormulaPage} on -page~\pageref{ugxProblemSeriesFormulaPage} -\item ugxProblemSeriesSubstitutePage \ref{ugxProblemSeriesSubstitutePage} on -page~\pageref{ugxProblemSeriesSubstitutePage} -\item ugxProblemSeriesBernoulliPage \ref{ugxProblemSeriesBernoulliPage} on -page~\pageref{ugxProblemSeriesBernoulliPage} -\end{itemize} -\index{pages!ugProblemSeriesPage!ug08.ht} -\index{ug08.ht!pages!ugProblemSeriesPage} -\index{ugProblemSeriesPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemSeriesPage}{8.9. Working with Power Series} -\beginscroll -% -Axiom has very sophisticated facilities for working with power -series. -Infinite series are represented by a list of the -coefficients that have already been determined, together with a -function for computing the additional coefficients if needed. -% -The system command that determines how many terms of a series is displayed -is \spadcmd{)set streams calculate}. -For the purposes of this book, we have used this system command to display -fewer than ten terms. -Series can be created from expressions, from functions for the -series coefficients, and from applications of operations on -existing series. -The most general function for creating a series is called -\axiomFun{series}, although you can also use \axiomFun{taylor}, -\axiomFun{laurent} and \axiomFun{puiseux} in situations where you -know what kind of exponents are involved. - -For information about solving differential equations in terms of -power series, see -\downlink{``\ugxProblemDEQSeriesTitle''}{ugxProblemDEQSeriesPage} in -Section \ugxProblemDEQSeriesNumber\ignore{ugxProblemDEQSeries}. - -\beginmenu - \menudownlink{{8.9.1. Creation of Power Series}} -{ugxProblemSeriesCreatePage} - \menudownlink{{8.9.2. Coefficients of Power Series}} -{ugxProblemSeriesCoefficientsPage} - \menudownlink{{8.9.3. Power Series Arithmetic}} -{ugxProblemSeriesArithmeticPage} - \menudownlink{{8.9.4. Functions on Power Series}} -{ugxProblemSeriesFunctionsPage} - \menudownlink{{8.9.5. Converting to Power Series}} -{ugxProblemSeriesConversionsPage} - \menudownlink{{8.9.6. Power Series from Formulas}} -{ugxProblemSeriesFormulaPage} - \menudownlink{{8.9.7. Substituting Numerical Values in Power Series}} -{ugxProblemSeriesSubstitutePage} - \menudownlink{{8.9.8. Example: Bernoulli Polynomials and Sums of Powers}} -{ugxProblemSeriesBernoulliPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemSeriesCreateTitle}{Creation of Power Series} -\newcommand{\ugxProblemSeriesCreateNumber}{8.9.1.} - -@ -\subsection{8.9.1. Creation of Power Series} -\label{ugxProblemSeriesCreatePage} -\begin{itemize} -\item ugxProblemSeriesConversionsPage \ref{ugxProblemSeriesConversionsPage} on -page~\pageref{ugxProblemSeriesConversionsPage} -\item ugTypesDeclarePage \ref{ugTypesDeclarePage} on -page~\pageref{ugTypesDeclarePage} -\item ugxProblemSeriesFunctionsPage \ref{ugxProblemSeriesFunctionsPage} on -page~\pageref{ugxProblemSeriesFunctionsPage} -\item ugxProblemSeriesFormulaPage \ref{ugxProblemSeriesFormulaPage} on -page~\pageref{ugxProblemSeriesFormulaPage} -\end{itemize} -\index{pages!ugxProblemSeriesCreatePage!ug08.ht} -\index{ug08.ht!pages!ugxProblemSeriesCreatePage} -\index{ugxProblemSeriesCreatePage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemSeriesCreatePage}{8.9.1. Creation of Power Series} -\beginscroll - -\labelSpace{4pc} -\xtc{ -This is the easiest way to create a power series. -This tells Axiom that \axiom{x} is to be treated as a power series, -so functions of \axiom{x} are again power series. -}{ -\spadpaste{x := series 'x \bound{x}} -} -% -We didn't say anything about the coefficients of the power -series, so the coefficients are general expressions over the integers. -This allows us to introduce denominators, symbolic constants, and other -variables as needed. -\xtc{ -Here the coefficients are integers (note that the coefficients -are the Fibonacci -numbers). -}{ -\spadpaste{1/(1 - x - x**2) \free{x}} -} -\xtc{ -This series has coefficients that are rational numbers. -}{ -\spadpaste{sin(x) \free{x}} -} -\xtc{ -When you enter this expression -you introduce the symbolic constants \axiom{sin(1)} and \axiom{cos(1).} -}{ -\spadpaste{sin(1 + x) \free{x}} -} -\xtc{ -When you enter the expression -the variable \axiom{a} appears in the resulting series expansion. -}{ -\spadpaste{sin(a * x) \free{x}} -} - -\xtc{ -You can also convert an expression into a series expansion. -This expression creates the series expansion of \axiom{1/log(y)} -about \axiom{y = 1}. -For details and more examples, see -\downlink{``\ugxProblemSeriesConversionsTitle''} -{ugxProblemSeriesConversionsPage} in Section -\ugxProblemSeriesConversionsNumber\ignore{ugxProblemSeriesConversions}. -}{ -\spadpaste{series(1/log(y),y = 1)} -} - -You can create power series with more general coefficients. -You normally accomplish this via a type declaration (see -\downlink{``\ugTypesDeclareTitle''}{ugTypesDeclarePage} in Section -\ugTypesDeclareNumber\ignore{ugTypesDeclare}). -See -\downlink{``\ugxProblemSeriesFunctionsTitle''}{ugxProblemSeriesFunctionsPage} -in Section \ugxProblemSeriesFunctionsNumber\ignore{ugxProblemSeriesFunctions} -for some warnings about working with declared series. - -\xtc{ -We declare that \axiom{y} is a one-variable Taylor series -(\axiomType{UTS} is the abbreviation for \axiomType{UnivariateTaylorSeries}) -in the variable \axiom{z} with \axiomType{FLOAT} -(that is, floating-point) coefficients, centered about \axiom{0.} -Then, by assignment, we obtain the Taylor expansion of -\axiom{exp(z)} with floating-point coefficients. -}{ -\spadpaste{y : UTS(FLOAT,'z,0) := exp(z) \bound{y}} -} - -You can also create a power series by giving an explicit formula -for its \eth{\axiom{n}} coefficient. -For details and more examples, see -\downlink{``\ugxProblemSeriesFormulaTitle''}{ugxProblemSeriesFormulaPage} -in Section \ugxProblemSeriesFormulaNumber\ignore{ugxProblemSeriesFormula}. - -\xtc{ -To create a series about -\axiom{w = 0} whose \eth{\axiom{n}} Taylor coefficient -is \axiom{1/n!}, you can evaluate this expression. -This is the Taylor expansion of \axiom{exp(w)} at \axiom{w = 0}. -}{ -\spadpaste{series(1/factorial(n),n,w = 0)} -} -% - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemSeriesCoefficientsTitle}{Coefficients of Power Series} -\newcommand{\ugxProblemSeriesCoefficientsNumber}{8.9.2.} - -@ -\subsection{8.9.2. Coefficients of Power Series} -\label{ugxProblemSeriesCoefficientsPage} -\index{pages!ugxProblemSeriesCoefficientsPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemSeriesCoefficientsPage} -\index{ugxProblemSeriesCoefficientsPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemSeriesCoefficientsPage}{8.9.2. Coefficients of Power Series} -\beginscroll - -You can extract any coefficient from a power series---even one -that hasn't been computed yet. -This is possible because in Axiom, infinite series are -represented by a list of the coefficients that have already been -determined, together with a function for computing the additional -coefficients. -(This is known as {\it lazy evaluation}.) When you ask for a -coefficient that hasn't yet been computed, Axiom computes -whatever additional coefficients it needs and then stores them in -the representation of the power series. - -\xtc{ -Here's an example of how to extract the coefficients of a power series. -}{ -\spadpaste{x := series(x) \bound{x}} -} -\xtc{ -}{ -\spadpaste{y := exp(x) * sin(x) \free{x} \bound{y}} -} -\xtc{ -This coefficient is readily available. -}{ -\spadpaste{coefficient(y,6) \free{y}} -} -\xtc{ -But let's get the fifteenth coefficient of \axiom{y}. -}{ -\spadpaste{coefficient(y,15) \free{y} \bound{y15}} -} -\xtc{ -If you look at \axiom{y} -then you see that the coefficients up to order \axiom{15} -have all been computed. -}{ -\spadpaste{y \free{y15}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemSeriesArithmeticTitle}{Power Series Arithmetic} -\newcommand{\ugxProblemSeriesArithmeticNumber}{8.9.3.} - -@ -\subsection{8.9.3. Power Series Arithmetic} -\label{ugxProblemSeriesArithmeticPage} -\index{pages!ugxProblemSeriesArithmeticPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemSeriesArithmeticPage} -\index{ugxProblemSeriesArithmeticPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemSeriesArithmeticPage}{8.9.3. Power Series Arithmetic} -\beginscroll - -You can manipulate power series using the usual arithmetic operations -\axiomOpFrom{+}{UnivariatePuiseuxSeries}, -\axiomOpFrom{-}{UnivariatePuiseuxSeries}, -\axiomOpFrom{*}{UnivariatePuiseuxSeries}, and -\axiomOpFrom{/}{UnivariatePuiseuxSeries}. -% - -\labelSpace{1pc} -\xtc{ -The results of these operations are also power series. -}{ -\spadpaste{x := series x \bound{x}} -} -\xtc{ -}{ -\spadpaste{(3 + x) / (1 + 7*x)} -} -\xtc{ -You can also compute \axiom{f(x) ** g(x)}, where \axiom{f(x)} and \axiom{g(x)} -are two power series. -}{ -\spadpaste{base := 1 / (1 - x) \free{x} \bound{base}} -} -% -\xtc{ -}{ -\spadpaste{expon := x * base \free{x base} \bound{expon}} -} -% -\xtc{ -}{ -\spadpaste{base ** expon \free{base expon}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemSeriesFunctionsTitle}{Functions on Power Series} -\newcommand{\ugxProblemSeriesFunctionsNumber}{8.9.4.} - -@ -\subsection{8.9.4. Functions on Power Series} -\label{ugxProblemSeriesFunctionsPage} -\index{pages!ugxProblemSeriesFunctionsPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemSeriesFunctionsPage} -\index{ugxProblemSeriesFunctionsPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemSeriesFunctionsPage}{8.9.4. Functions on Power Series} -\beginscroll - -Once you have created a power series, you can apply transcendental -functions -(for example, \axiomFun{exp}, \axiomFun{log}, \axiomFun{sin}, \axiomFun{tan}, -\axiomFun{cosh}, etc.) to it. - -\labelSpace{1pc} -% -\xtc{ -To demonstrate this, we first create the power series -expansion of the rational function -\texht{ -${\displaystyle x^2} \over {\displaystyle 1 - 6x + x^2}$ -}{ -\axiom{x**2/(1 - 6*x + x**2)} -} -about \axiom{x = 0}. -}{ -\spadpaste{x := series 'x \bound{x}} -} -% -\xtc{ -}{ -\spadpaste{rat := x**2 / (1 - 6*x + x**2) \free{x} \bound{rat}} -} -% -% -\xtc{ -If you want to compute the series expansion of -\texht{ -$\sin\left({\displaystyle x^2} \over {\displaystyle 1 - 6x + x^2}\right)$ -}{ -\axiom{sin(x**2/(1 - 6*x + x**2))} -} -you simply compute the sine of \axiom{rat}. -}{ -\spadpaste{sin(rat) \free{rat}} -} -% - -\beginImportant -\noindent {\bf Warning:} -the type of the coefficients of a power series may -affect the kind of computations that you can do with that series. -This can only happen when you have made a declaration to -specify a series domain with a certain type of coefficient. -\endImportant - -\xtc{ -If you evaluate -then you have declared that \axiom{y} is a one variable Taylor series -(\axiomType{UTS} is the abbreviation for \axiomType{UnivariateTaylorSeries}) -in the variable \axiom{y} with \axiomType{FRAC INT} -(that is, fractions of integer) coefficients, centered about \axiom{0}. -}{ -\spadpaste{y : UTS(FRAC INT,y,0) := y \bound{y}} -} -% -\xtc{ -You can now compute certain power series in \axiom{y}, -{\it provided} that these series have rational coefficients. -}{ -\spadpaste{exp(y) \free{y}} -} -% -\xtc{ -You can get examples of such series -by applying transcendental functions to -series in \axiom{y} that have no constant terms. -}{ -\spadpaste{tan(y**2) \free{y}} -} -% -\xtc{ -}{ -\spadpaste{cos(y + y**5) \free{y}} -} -% -% -\xtc{ -Similarly, you can compute the logarithm of a power series with rational -coefficients if the constant coefficient is \axiom{1.} -}{ -\spadpaste{log(1 + sin(y)) \free{y}} -} -% -If you wanted to apply, say, the operation \axiomFun{exp} to a power -series with a nonzero constant coefficient \texht{$a_0$}{\axiom{a0}}, -then the constant coefficient of the result would be -\texht{$e^{a_0}$}{\axiom{exp(a0)}}, which is {\it not} a rational number. -Therefore, evaluating \axiom{exp(2 + tan(y))} would generate an error -message. - -If you want to compute the Taylor expansion of \axiom{exp(2 + tan(y))}, you must -ensure that the coefficient domain has an operation \axiomFun{exp} defined -for it. -An example of such a domain is \axiomType{Expression Integer}, the type -of formal functional expressions over the integers. -% -\xtc{ -When working with coefficients of this type, -}{ -\spadpaste{z : UTS(EXPR INT,z,0) := z \bound{z}} -} -\xtc{ -this presents no problems. -}{ -\spadpaste{exp(2 + tan(z)) \free{z}} -} -% -Another way to create Taylor series whose coefficients are expressions over -the integers is to use \axiomFun{taylor} which works similarly to -\axiomFun{series}. -% -\xtc{ -This is equivalent to the previous computation, except that now we -are using the variable \axiom{w} instead of \axiom{z}. -}{ -\spadpaste{w := taylor 'w \bound{w}} -} -\xtc{ -}{ -\spadpaste{exp(2 + tan(w)) \free{w}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemSeriesConversionsTitle}{Converting to Power Series} -\newcommand{\ugxProblemSeriesConversionsNumber}{8.9.5.} - -@ -\subsection{8.9.5. Converting to Power Series} -\label{ugxProblemSeriesConversionsPage} -\index{pages!ugxProblemSeriesConversionsPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemSeriesConversionsPage} -\index{ugxProblemSeriesConversionsPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemSeriesConversionsPage} -{8.9.5. Converting to Power Series} -\beginscroll - -The \axiomType{ExpressionToUnivariatePowerSeries} package provides -operations for computing series expansions of functions. - -\labelSpace{1pc} -\xtc{ -Evaluate this -to compute the Taylor expansion of \axiom{sin x} about -\axiom{x = 0}. -The first argument, \axiom{sin(x)}, specifies the function whose series -expansion is to be computed and the second argument, \axiom{x = 0}, -specifies that the series is to be expanded in power of \axiom{(x - 0)}, -that is, in power of \axiom{x}. -}{ -\spadpaste{taylor(sin(x),x = 0)} -} -\xtc{ -Here is the Taylor expansion of \axiom{sin x} about -\texht{$x = \frac{\pi}{6}$}{\axiom{x = \%pi/6}}: -}{ -\spadpaste{taylor(sin(x),x = \%pi/6)} -} - -The function to be expanded into a series may have variables other than -the series variable. -% -\xtc{ -For example, we may expand \axiom{tan(x*y)} as a Taylor series in -\axiom{x} -}{ -\spadpaste{taylor(tan(x*y),x = 0)} -} -% -\xtc{ -or as a Taylor series in \axiom{y}. -}{ -\spadpaste{taylor(tan(x*y),y = 0)} -} -\xtc{ -A more interesting function is -\texht{${\displaystyle t e^{x t}} \over {\displaystyle e^t - 1}$}{(t * -\%e**(x*t))/(\%e**t - 1)}. -When we expand this function as a Taylor series in \axiom{t} -the \eth{\axiom{n}} order coefficient is the \eth{\axiom{n}} Bernoulli -polynomial -divided by \axiom{n!}. -}{ -\spadpaste{bern := taylor(t*exp(x*t)/(exp(t) - 1),t = 0) \bound{bern}} -} -\xtc{ -Therefore, this and the next expression -produce the same result. -}{ -\spadpaste{factorial(6) * coefficient(bern,6) \free{bern}} -} -\xtc{ -}{ -\spadpaste{bernoulliB(6,x)} -} - -Technically, a series with terms of negative degree is not considered to -be a Taylor series, but, rather, a -{\it Laurent series}. -If you try to compute a Taylor series expansion of -\texht{$\frac{x}{\log x}$}{x/log(x)} -at \axiom{x = 1} via \axiom{taylor(x/log(x),x = 1)} -you get an error message. -The reason is that the function has a {\it pole} at \axiom{x = -1}, meaning that -its series expansion about this point has terms of negative degree. -A series with finitely many terms of negative degree is called a Laurent -series. -\xtc{ -You get the desired series expansion by issuing this. -}{ -\spadpaste{laurent(x/log(x),x = 1)} -} - -Similarly, a series with terms of fractional degree is neither a Taylor -series nor a Laurent series. -Such a series is called a -{\it Puiseux series}. -The expression \axiom{laurent(sqrt(sec(x)),x = 3 * \%pi/2)} -results in an error message -because the series expansion about this point has terms of fractional degree. -\xtc{ -However, this command produces what you want. -}{ -\spadpaste{puiseux(sqrt(sec(x)),x = 3 * \%pi/2)} -} - -Finally, consider the case of functions that do not have Puiseux -expansions about certain points. -An example of this is \texht{$x^x$}{\axiom{x^x}} about \axiom{x = 0}. -\axiom{puiseux(x**x,x=0)} -produces an error message because of the -type of singularity of the function at \axiom{x = 0}. -\xtc{ -The general function \axiomFun{series} can be used in this case. -Notice that the series returned is not, strictly speaking, a power series -because of the \axiom{log(x)} in the expansion. -}{ -\spadpaste{series(x**x,x=0)} -} - -\beginImportant -The operation \axiomFun{series} returns the most general type of -infinite series. -The user who is not interested in distinguishing -between various types of infinite series may wish to use this operation -exclusively. -\endImportant - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugxProblemSeriesFormulaTitle}{Power Series from Formulas} -\newcommand{\ugxProblemSeriesFormulaNumber}{8.9.6.} - -@ -\subsection{8.9.6. Power Series from Formulas} -\label{ugxProblemSeriesFormulaPage} -\begin{itemize} -\item ugxProblemSeriesConversionsPage \ref{ugxProblemSeriesConversionsPage} on -page~\pageref{ugxProblemSeriesConversionsPage} -\item ugUserAnonPage \ref{ugUserAnonPage} on -page~\pageref{ugUserAnonPage} -\item ugxProblemSeriesConversionsPage \ref{ugxProblemSeriesConversionsPage} on -page~\pageref{ugxProblemSeriesConversionsPage} -\end{itemize} -\index{pages!ugxProblemSeriesFormulaPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemSeriesFormulaPage} -\index{ugxProblemSeriesFormulaPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemSeriesFormulaPage}{8.9.6. Power Series from Formulas} -\beginscroll - -The \axiomType{GenerateUnivariatePowerSeries} package enables you to -create power series from explicit formulas for their -\eth{\axiom{n}} coefficients. -In what follows, we construct series expansions for certain -transcendental functions by giving formulas for their -coefficients. -You can also compute such series expansions directly simply by -specifying the function and the point about which the series is to -be expanded. -See -\downlink{``\ugxProblemSeriesConversionsTitle''} -{ugxProblemSeriesConversionsPage} in Section -\ugxProblemSeriesConversionsNumber\ignore{ugxProblemSeriesConversions} -for more information. - -Consider the Taylor expansion of \texht{$e^x$}{\axiom{\%e**x}} -about \axiom{x = 0}: -\texht{\narrowDisplay{% -\begin{array}{ccl} -e^x &=& \displaystyle 1 + x + \frac{x^2}{2} + \frac{x^3}{6} + \cdots \\ \\ - &=& \displaystyle\sum_{n=0}^\infty \frac{x^n}{n!} -\end{array}}% -}{ -\begin{verbatim} -%e**x = 1 + x + x**2/2 + x**3/6 + ... - = sum from n=0 to n=%infty of x**n / n! -\end{verbatim} -} -The \eth{\axiom{n}} Taylor coefficient is \axiom{1/n!}. -% -\xtc{ -This is how you create this series in Axiom. -}{ -\spadpaste{series(n +-> 1/factorial(n),x = 0)} -} - -The first argument specifies a formula for the \eth{\axiom{n}} -coefficient by giving a function that maps \axiom{n} to -\axiom{1/n!}. -The second argument specifies that the series is to be expanded in -powers of \axiom{(x - 0)}, that is, in powers of \axiom{x}. -Since we did not specify an initial degree, the first term in the -series was the term of degree 0 (the constant term). -Note that the formula was given as an anonymous function. -These are discussed in \downlink{``\ugUserAnonTitle''}{ugUserAnonPage} -in Section \ugUserAnonNumber\ignore{ugUserAnon}. - -Consider the Taylor expansion of \axiom{log x} about \axiom{x = 1}: -\texht{\narrowDisplay{% -\begin{array}{ccl} -\log(x) &=& \displaystyle (x - 1) - \frac{(x - 1)^2}{2} + \frac{(x - 1)^3}{3} - \cdots \\ \\ - &=& \displaystyle\sum_{n = 1}^\infty (-1)^{n-1} \frac{(x - 1)^n}{n} -\end{array}}% -}{ -\begin{verbatim} -log x = (x - 1) - \(x - 1)^2/2 + (x - 1)^3/3 - ... - = sum from n=1 to n=%infty of (-1)**(n-1) (x - 1)**n / n -\end{verbatim} -} -If you were to evaluate the expression -\axiom{series(n +-> (-1)**(n-1) / n, x = 1)} -you would get an error message because Axiom would try to -calculate a term of degree \axiom{0} and therefore divide by \axiom{0.} - -\xtc{ -Instead, evaluate this. -The third argument, \axiom{1..}, indicates that only terms of degree -\axiom{n = 1, ...} are to be computed. -}{ -\spadpaste{series(n +-> (-1)**(n-1)/n,x = 1,1..)} -} -% - -Next consider the Taylor expansion of an odd function, say, -\axiom{sin(x)}: +\subsection{Asp73 Example Code} +\label{Asp73ExampleCode} +\index{pages!Asp73ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp73ExampleCode} +\index{Asp73ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp73ExampleCode}{Asp73 Example Code} \begin{verbatim} -sin x = x - x**3/3! + x**5/5! - ... + SUBROUTINE PDEF(X,Y,ALPHA,BETA,GAMMA,DELTA,EPSOLN,PHI,PSI) + DOUBLE PRECISION ALPHA,EPSOLN,PHI,X,Y,BETA,DELTA,GAMMA,PSI + ALPHA=DSIN(X) + BETA=Y + GAMMA=X*Y + DELTA=DCOS(X)*DSIN(Y) + EPSOLN=Y+X + PHI=X + PSI=Y + RETURN + END \end{verbatim} -Here every other coefficient is zero and we would like to give an -explicit formula only for the odd Taylor coefficients. -% -\xtc{ -This is one way to do it. -The third argument, \axiom{1..}, specifies that the first term to be computed -is the term of degree 1. -The fourth argument, \axiom{2}, specifies that we -increment by \axiom{2} to find the degrees of -subsequent terms, that is, the next -term -is of degree \axiom{1 + 2}, the next of degree \axiom{1 + 2 + 2}, etc. -}{ -\spadpaste{series(n +-> (-1)**((n-1)/2)/factorial(n),x = 0,1..,2)} -} -% - -\xtc{ -The initial degree and the increment do not have to be integers. -For example, this expression produces a series expansion of -\texht{$\sin(x^{\frac{1}{3}})$}{\axiom{sin(x**(1/3))}}. -}{ -\spadpaste{series(n +-> (-1)**((3*n-1)/2)/factorial(3*n),x = 0,1/3..,2/3)} -} -\xtc{ -While the increment must be positive, the initial degree may be negative. -This yields the Laurent expansion of \axiom{csc(x)} at -\axiom{x = 0}. -% -}{ -\spadpaste{cscx := series(n +-> (-1)**((n-1)/2) * 2 * (2**n-1) * bernoulli(numer(n+1)) / factorial(n+1), x=0, -1..,2) \bound{cscx}} -} -\xtc{ -Of course, the reciprocal of this power series is the Taylor expansion -of \axiom{sin(x)}. -}{ -\spadpaste{1/cscx \free{cscx}} -} -% -\xtc{ -As a final example, -here is the Taylor expansion of \axiom{asin(x)} about \axiom{x = 0}. -}{ -\spadpaste{asinx := series(n +-> binomial(n-1,(n-1)/2)/(n*2**(n-1)),x=0,1..,2) \bound{asinx}} -} -\xtc{ -When we compute the \axiom{sin} of this series, we get \axiom{x} -(in the sense that all higher terms computed so far are zero). -}{ -\spadpaste{sin(asinx) \free{asinx}} -} - -As we discussed in -\downlink{``\ugxProblemSeriesConversionsTitle''} -{ugxProblemSeriesConversionsPage} in Section -\ugxProblemSeriesConversionsNumber\ignore{ugxProblemSeriesConversions}, -you can also use the operations \axiomFun{taylor}, \axiomFun{laurent} and -\axiomFun{puiseux} instead of \axiomFun{series} if you know ahead of time -what kind of exponents a series has. -You can't go wrong using \axiomFun{series}, though. - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugxProblemSeriesSubstituteTitle}{Substituting Numerical Values in Power Series} -\newcommand{\ugxProblemSeriesSubstituteNumber}{8.9.7.} - -@ -\subsection{8.9.7. Substituting Numerical Values in Power Series} -\label{ugxProblemSeriesSubstitutePage} -\index{pages!ugxProblemSeriesSubstitutePage!ug08.ht} -\index{ug08.ht!pages!ugxProblemSeriesSubstitutePage} -\index{ugxProblemSeriesSubstitutePage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemSeriesSubstitutePage}{8.9.7. Substituting Numerical Values in Power Series} -\beginscroll - -Use \axiomFunFrom{eval}{UnivariatePowerSeriesCategory} -to substitute a numerical value for a variable in -a power series. -For example, here's a way to obtain numerical approximations of -\axiom{\%e} from the Taylor series -expansion of \axiom{exp(x)}. - -\labelSpace{1pc} -\xtc{ -First you create the desired Taylor expansion. -}{ -\spadpaste{f := taylor(exp(x)) \bound{f}} -} -\xtc{ -Then you evaluate the series at the value \axiom{1.0}. -The result is a sequence of the partial sums. -}{ -\spadpaste{eval(f,1.0)} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemSeriesBernoulliTitle}{Example: Bernoulli Polynomials and Sums of Powers} -\newcommand{\ugxProblemSeriesBernoulliNumber}{8.9.8.} - -@ -\subsection{8.9.8. Example: Bernoulli Polynomials and Sums of Powers} -\label{ugxProblemSeriesBernoulliPage} -\index{pages!ugxProblemSeriesBernoulliPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemSeriesBernoulliPage} -\index{ugxProblemSeriesBernoulliPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemSeriesBernoulliPage} -{8.9.8. Example: Bernoulli Polynomials and Sums of Powers} -\beginscroll - -Axiom provides operations for computing definite and -indefinite sums. - -\labelSpace{3pc} -\xtc{ -You can compute the sum of the first -ten fourth powers by evaluating this. -This creates a list whose entries are -\texht{$m^4$}{\axiom{m**4}} as \texht{$m$}{\axiom{m}} ranges from 1 -to 10, and then computes the sum of the entries of that list. -}{ -\spadpaste{reduce(+,[m**4 for m in 1..10])} -} -\xtc{ -You can also compute a formula for the sum of the first -\texht{$k$}{\axiom{k}} fourth powers, where \texht{$k$}{\axiom{k}} is an -unspecified positive integer. -}{ -\spadpaste{sum4 := sum(m**4, m = 1..k) \bound{sum4}} -} -\xtc{ -This formula is valid for any positive integer \texht{$k$}{\axiom{k}}. -For instance, if we replace \texht{$k$}{\axiom{k}} by 10, -we obtain the number we computed earlier. -}{ -\spadpaste{eval(sum4, k = 10) \free{sum4}} -} - -You can compute a formula for the sum of the first -\texht{$k$}{\axiom{k}} \eth{\axiom{n}} powers in a similar fashion. -Just replace the \axiom{4} in the definition of \userfun{sum4} by -any expression not involving \texht{$k$}{\axiom{k}}. -Axiom computes these formulas using Bernoulli polynomials; -we -use the rest of this section to describe this method. - -% -\xtc{ -First consider this function of \axiom{t} and \axiom{x}. -}{ -\spadpaste{f := t*exp(x*t) / (exp(t) - 1) \bound{f}} -} -\noOutputXtc{ -Since the expressions involved get quite large, we tell -Axiom to show us only terms of degree up to \axiom{5.} -}{ -\spadpaste{)set streams calculate 5 \bound{set}} -} -% -% -\xtc{ -If we look at the Taylor expansion of \axiom{f(x, t)} about \axiom{t = 0,} -we see that the coefficients of the powers of \axiom{t} are polynomials -in \axiom{x}. -}{ -\spadpaste{ff := taylor(f,t = 0) \free{f set} \bound{ff}} -} -% -In fact, the \eth{\axiom{n}} coefficient in this series is essentially -the \eth{\axiom{n}} Bernoulli polynomial: -the \eth{\axiom{n}} coefficient of the series is -\texht{${1 \over {n!}} B_n(x)$}{\axiom{1/n! * Bn(x)}}, where -\texht{$B_n(x)$}{\axiom{Bn(x)}} -is the \eth{\axiom{n}} Bernoulli polynomial. -Thus, to obtain the \eth{\axiom{n}} Bernoulli polynomial, we multiply -the \eth{\axiom{n}} coefficient -of the series \axiom{ff} by \axiom{n!}. -% -\xtc{ -For example, the sixth Bernoulli polynomial is this. -}{ -\spadpaste{factorial(6) * coefficient(ff,6) \free{ff}} -} -% -\xtc{ -We derive some properties of the function \axiom{f(x,t)}. -First we compute \axiom{f(x + 1,t) - f(x,t)}. -}{ -\spadpaste{g := eval(f, x = x + 1) - f \bound{g} \free{f}} -} -% -\xtc{ -If we normalize \axiom{g}, we see that it has a particularly simple form. -}{ -\spadpaste{normalize(g) \free{g}} -} -% -From this it follows that the \eth{\axiom{n}} -coefficient in the Taylor expansion of -\axiom{g(x,t)} at \axiom{t = 0} is -\texht{${1\over{(n-1)\:!}}\:x^{n-1}$}{\axiom{1/(n-1)! * x**(n-1)}}. -\xtc{ -If you want to check this, evaluate the next expression. -}{ -\spadpaste{taylor(g,t = 0) \free{g}} -} -% -However, since \axiom{g(x,t) = f(x+1,t)-f(x,t)}, it follows that the -\eth{\axiom{n}} coefficient is -\texht{${1 \over {n!}}\:(B_n(x+1)-B_n(x))$}{\axiom{1/n! * (Bn(x + 1) - -Bn(x))}}. -Equating coefficients, we see that -\texht{${1\over{(n-1)\:!}}\:x^{n-1} = {1\over{n!}}\:(B_n(x + 1) - -B_n(x))$}{\axiom{1/(n-1)! * x**(n-1) = 1/n! * (Bn(x + 1) - Bn(x))}} -and, therefore, -\texht{$x^{n-1} = {1\over{n}}\:(B_n(x + 1) - -B_n(x))$}{\axiom{x**(n-1) = 1/n * (Bn(x + 1) - Bn(x))}}. -% -Let's apply this formula repeatedly, letting \axiom{x} vary between two -integers \axiom{a} and \axiom{b}, with \axiom{a < b}: -% +\subsection{Asp74 Example Code} +\label{Asp74ExampleCode} +\index{pages!Asp74ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp74ExampleCode} +\index{Asp74ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp74ExampleCode}{Asp74 Example Code} \begin{verbatim} - a**(n-1) = 1/n * (Bn(a + 1) - Bn(a)) - (a + 1)**(n-1) = 1/n * (Bn(a + 2) - Bn(a + 1)) - (a + 2)**(n-1) = 1/n * (Bn(a + 3) - Bn(a + 2)) - . - . - . - (b - 1)**(n-1) = 1/n * (Bn(b) - Bn(b - 1)) - b**(n-1) = 1/n * (Bn(b + 1) - Bn(b)) + SUBROUTINE BNDY(X,Y,A,B,C,IBND) + DOUBLE PRECISION A,B,C,X,Y + INTEGER IBND + IF(IBND.EQ.0)THEN + A=0.0D0 + B=1.0D0 + C=-1.0D0*DSIN(X) + ELSEIF(IBND.EQ.1)THEN + A=1.0D0 + B=0.0D0 + C=DSIN(X)*DSIN(Y) + ELSEIF(IBND.EQ.2)THEN + A=1.0D0 + B=0.0D0 + C=DSIN(X)*DSIN(Y) + ELSEIF(IBND.EQ.3)THEN + A=0.0D0 + B=1.0D0 + C=-1.0D0*DSIN(Y) + ENDIF + END \end{verbatim} - -When we add these equations we find that -the sum of the left-hand sides is -\texht{$\sum_{m=a}^{b} m^{n-1},$}{\axiom{sum(m = a..b,m ** (n-1))},}% -the sum of the -\texht{$(n-1)^{\hbox{\small\rm st}}$}{\axiom{(n-1)}-st} -powers from \axiom{a} to \axiom{b}. -The sum of the right-hand sides is a ``telescoping series.'' -After cancellation, the sum is simply -\texht{${1\over{n}}\:(B_n(b + 1) - -B_n(a))$}{\axiom{1/n * (Bn(b + 1) - Bn(a))}}. - -Replacing \axiom{n} by \axiom{n + 1}, we have shown that -\centerline{{\axiom{sum(m = a..b,m ** n) = 1/(n + 1) * (B(b + 1) - B(a))}.}} - -Let's use this to obtain the formula for the sum of fourth powers. -\xtc{ -First we obtain the Bernoulli polynomial \texht{$B_5$}{\axiom{B5}}. -}{ -\spadpaste{B5 := factorial(5) * coefficient(ff,5) \free{ff} \bound{B5}} -} -% -\xtc{ -To find the sum of the first \texht{$k$}{\axiom{k}} 4th powers, -we multiply \axiom{1/5} by -\texht{$B_5(k+1) - B_5(1)$}{\axiom{B5(k + 1) - B5(1)}}. -}{ -\spadpaste{1/5 * (eval(B5, x = k + 1) - eval(B5, x = 1)) \free{B5}} -} -% -\xtc{ -This is the same formula that we obtained via \axiom{sum(m**4, m = 1..k)}. -}{ -\spadpaste{sum4 \free{sum4}} -} - -At this point you may want to do the same computation, but with an -exponent other than \axiom{4.} -For example, you might try to find a formula for the sum of the -first \texht{$k$}{\axiom{k}} 20th powers. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemDEQTitle}{Solution of Differential Equations} -\newcommand{\ugProblemDEQNumber}{8.10.} - -@ -\subsection{8.10. Solution of Differential Equations} -\label{ugProblemDEQPage} -\begin{itemize} -\item ugProblemLinPolEqnPage \ref{ugProblemLinPolEqnPage} on -page~\pageref{ugProblemLinPolEqnPage} -\item ugxProblemLDEQClosedPage \ref{ugxProblemLDEQClosedPage} on -page~\pageref{ugxProblemLDEQClosedPage} -\item ugxProblemNLDEQClosedPage \ref{ugxProblemNLDEQClosedPage} on -page~\pageref{ugxProblemNLDEQClosedPage} -\item ugxProblemDEQSeriesPage \ref{ugxProblemDEQSeriesPage} on -page~\pageref{ugxProblemDEQSeriesPage} -\end{itemize} -\index{pages!ugProblemDEQPage!ug08.ht} -\index{ug08.ht!pages!ugProblemDEQPage} -\index{ugProblemDEQPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemDEQPage}{8.10. Solution of Differential Equations} -\beginscroll -% -In this section we discuss Axiom's facilities for -solving -differential equations in closed-form and in series. - -Axiom provides facilities for closed-form solution of -single differential equations of the following kinds: -\indent{4} -\beginitems -\item[-] linear ordinary differential equations, and -\item[-] non-linear first order ordinary differential equations -when integrating factors can be found just by integration. -\enditems -\indent{0} - -For a discussion of the solution of systems of linear and polynomial -equations, see -\downlink{``\ugProblemLinPolEqnTitle''}{ugProblemLinPolEqnPage} in -Section \ugProblemLinPolEqnNumber\ignore{ugProblemLinPolEqn}. - -\beginmenu - \menudownlink{ -{8.10.1. Closed-Form Solutions of Linear Differential Equations}} -{ugxProblemLDEQClosedPage} - \menudownlink{ -{8.10.2. Closed-Form Solutions of Non-Linear Differential Equations}} -{ugxProblemNLDEQClosedPage} - \menudownlink{ -{8.10.3. Power Series Solutions of Differential Equations}} -{ugxProblemDEQSeriesPage} -\endmenu -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugxProblemLDEQClosedTitle}{Closed-Form Solutions of Linear Differential Equations} -\newcommand{\ugxProblemLDEQClosedNumber}{8.10.1.} - -@ -\subsection{8.10.1. Closed-Form Solutions of Linear Differential Equations} -\label{ugxProblemLDEQClosedPage} -\index{pages!ugxProblemLDEQClosedPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemLDEQClosedPage} -\index{ugxProblemLDEQClosedPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemLDEQClosedPage} -{8.10.1. Closed-Form Solutions of Linear Differential Equations} -\beginscroll - -A {\it differential equation} is an equation involving an unknown {\it -function} and one or more of its derivatives. -The equation is called {\it ordinary} if derivatives with respect to -only one dependent variable appear in the equation (it is called {\it -partial} otherwise). -The package \axiomType{ElementaryFunctionODESolver} provides the -top-level operation \spadfun {solve} for finding closed-form solutions -of ordinary differential equations. - -To solve a differential equation, you must first create an operator for -the unknown function. -% -\xtc{ -We let \axiom{y} be the unknown function in terms of \axiom{x}. -}{ -\spadpaste{y := operator 'y \bound{y}} -} -% -You then type the equation using \axiomFun{D} to create the -derivatives of the unknown function \axiom{y(x)} where \axiom{x} is any -symbol you choose (the so-called {\it dependent variable}). -% -\xtc{ -This is how you enter -the equation \axiom{y'' + y' + y = 0}. -}{ -\spadpaste{deq := D(y x, x, 2) + D(y x, x) + y x = 0\bound{e1}\free{y}} -} -% -The simplest way to invoke the \axiomFun{solve} command is with three -arguments. -\begin{items} -\item the differential equation, -\item the operator representing the unknown function, -\item the dependent variable. -\end{items} -% -\xtc{ -So, to solve the above equation, we enter this. -}{ -\spadpaste{solve(deq, y, x) \free{e1}\free{y}} -} -% -Since linear ordinary differential equations have infinitely many -solutions, \axiomFun{solve} returns a {\it particular solution} -\texht{$f_p$}{\axiom{f_p}} -and a basis -\texht{$f_1,\dots,f_n$}{\axiom{f1,...,fn}} -for the solutions of the corresponding homogenuous equation. -Any expression of the form -\texht{$f_p + c_1 f_1 + \dots c_n f_n$}{\axiom{fp + c1 f1 + ... + cn fn}} -where the \texht{$c_i$}{\axiom{ci}} do not involve -the dependent variable is also a solution. -This is similar to what you get when you solve systems of linear -algebraic equations. - -A way to select a unique solution is to specify {\it initial -conditions}: choose a value \axiom{a} for the dependent variable -and specify the values of the unknown function and its derivatives -at \axiom{a}. -If the number of initial conditions is equal to the order of the -equation, then the solution is unique (if it exists in closed -form!) and \axiomFun{solve} tries to find it. -To specify initial conditions to \axiomFun{solve}, use an -\axiomType{Equation} of the form \axiom{x = a} for the third -parameter instead of the dependent variable, and add a fourth -parameter consisting of the list of values \axiom{y(a), y'(a), ...}. - -\xtc{ -To find the solution of \axiom{y'' + y = 0} satisfying \axiom{y(0) = y'(0) = 1}, -do this. -}{ -\spadpaste{deq := D(y x, x, 2) + y x \bound{e2}\free{y}} -} -\xtc{ -You can omit the \axiom{= 0} when you enter the equation to be solved. -}{ -\spadpaste{solve(deq, y, x = 0, [1, 1]) \free{e2}\free{y}} -} -% - -Axiom is not limited to linear differential equations with -constant coefficients. -It can also find solutions when the coefficients are rational or -algebraic functions of the dependent variable. -Furthermore, Axiom is not limited by the order of the equation. -% -\xtc{ -Axiom can solve the following third order equations with -polynomial coefficients. -}{ -\spadpaste{deq := x**3 * D(y x, x, 3) + x**2 * D(y x, x, 2) - 2 * x * D(y x, x) + 2 * y x = 2 * x**4 \bound{e3}\free{y}} -} -\xtc{ -}{ -\spadpaste{solve(deq, y, x) \free{e3}\free{y}} -} -% -% -\xtc{ -Here we are solving a homogeneous equation. -}{ -\spadpaste{deq := (x**9+x**3) * D(y x, x, 3) + 18 * x**8 * D(y x, x, 2) - 90 * x * D(y x, x) - 30 * (11 * x**6 - 3) * y x \bound{e4}\free{y}} -} -\xtc{ -}{ -\spadpaste{solve(deq, y, x) \free{e4}\free{y}} -} -% -On the other hand, and in contrast with the operation -\axiomFun{integrate}, it can happen that Axiom finds no solution -and that some closed-form solution still exists. -While it is mathematically complicated to describe exactly when the -solutions are guaranteed to be found, the following statements are -correct and form good guidelines for linear ordinary differential -equations: -\begin{items} -\item If the coefficients are constants, Axiom finds a complete basis -of solutions (i,e, all solutions). -\item If the coefficients are rational functions in the dependent variable, -Axiom at least finds all solutions that do not involve algebraic -functions. -\end{items} -% -Note that this last statement does not mean that Axiom does not find -the solutions that are algebraic functions. -It means that it is not -guaranteed that the algebraic function solutions will be found. -% -\xtc{ -This is an example where all the algebraic solutions are found. -}{ -\spadpaste{deq := (x**2 + 1) * D(y x, x, 2) + 3 * x * D(y x, x) + y x = 0 \bound{e5}\free{y}} -} -\xtc{ -}{ -\spadpaste{solve(deq, y, x) \free{e5}\free{y}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemNLDEQClosedTitle}{Closed-Form Solutions of Non-Linear Differential Equations} -\newcommand{\ugxProblemNLDEQClosedNumber}{8.10.2.} - -@ -\subsection{8.10.2. Closed-Form Solutions of Non-Linear Differential Equations} -\label{ugxProblemNLDEQClosedPage} -\index{pages!ugxProblemNLDEQClosedPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemNLDEQClosedPage} -\index{ugxProblemNLDEQClosedPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemNLDEQClosedPage} -{8.10.2. Closed-Form Solutions of Non-Linear Differential Equations} -\beginscroll - -This is an example that shows how to solve a non-linear -first order ordinary differential equation manually when an integrating -factor can be found just by integration. -At the end, we show you how to solve it directly. - -Let's solve the differential equation \axiom{y' = y / (x + y log y)}. -% -\xtc{ -Using the notation -\axiom{m(x, y) + n(x, y) y' = 0}, -we have \axiom{m = -y} and \axiom{n = x + y log y}. -}{ -\spadpaste{m := -y \bound{m}} -} -\xtc{ -}{ -\spadpaste{n := x + y * log y \bound{n}} -} -% -\xtc{ -We first check for exactness, that is, does \axiom{dm/dy = dn/dx}? -}{ -\spadpaste{D(m, y) - D(n, x) \free{m n}} -} -% -This is not zero, so the equation is not exact. -Therefore we must look for -an integrating factor: a function \axiom{mu(x,y)} such that -\axiom{d(mu m)/dy = d(mu n)/dx}. -Normally, we first search for \axiom{mu(x,y)} depending only on -\axiom{x} or only on \axiom{y}. -% -\xtc{ -Let's search for such a \axiom{mu(x)} first. -}{ -\spadpaste{mu := operator 'mu \bound{mu}} -} -\xtc{ -}{ -\spadpaste{a := D(mu(x) * m, y) - D(mu(x) * n, x) \bound{a}\free{m n mu}} -} -% -% -\xtc{ -If the above is zero for a function -\axiom{mu} that does {\it not} depend on \axiom{y}, then -\axiom{mu(x)} is an integrating factor. -}{ -\spadpaste{solve(a = 0, mu, x) \free{mu a}} -} -% -The solution depends on \axiom{y}, so there is no integrating -factor that depends on \axiom{x} only. -% -\xtc{ -Let's look for one that depends on \axiom{y} only. -}{ -\spadpaste{b := D(mu(y) * m, y) - D(mu(y) * n, x) \bound{b}\free{mu m}} -} -\xtc{ -}{ -\spadpaste{sb := solve(b = 0, mu, y) \free{mu b}\bound{sb}} -} -\noindent -We've found one! -% -\xtc{ -The above \axiom{mu(y)} is an integrating factor. -We must multiply our initial equation -(that is, \axiom{m} and \axiom{n}) by the integrating factor. -}{ -\spadpaste{intFactor := sb.basis.1 \bound{intFactor}\free{sb}} -} -\xtc{ -}{ -\spadpaste{m := intFactor * m \bound{m1}\free{m intFactor}} -} -\xtc{ -}{ -\spadpaste{n := intFactor * n \bound{n1}\free{n intFactor}} -} -% -\xtc{ -Let's check for exactness. -}{ -\spadpaste{D(m, y) - D(n, x) \free{m1 n1}} -} -% -We must solve the exact equation, that is, find a function -\axiom{s(x,y)} such that -\axiom{ds/dx = m} and \axiom{ds/dy = n}. -% -\xtc{ -We start by writing \axiom{s(x, y) = h(y) + integrate(m, x)} -where \axiom{h(y)} is an unknown function of \axiom{y}. -This guarantees that \axiom{ds/dx = m}. -}{ -\spadpaste{h := operator 'h \bound{h}} -} -\xtc{ -}{ -\spadpaste{sol := h y + integrate(m, x) \bound{sol}\free{h m1}} -} -% -% -\xtc{ -All we want is to find \axiom{h(y)} such that -\axiom{ds/dy = n}. -}{ -\spadpaste{dsol := D(sol, y) \free{sol}\bound{dsol}} -} -\xtc{ -}{ -\spadpaste{nsol := solve(dsol = n, h, y) \free{dsol n1 h}\bound{nsol}} -} -% -\xtc{ -The above particular solution is the \axiom{h(y)} we want, so we just replace -\axiom{h(y)} by it in the implicit solution. -}{ -\spadpaste{eval(sol, h y = nsol.particular) \free{sol h nsol}} -} -% -A first integral of the initial equation is obtained by setting -this result equal to an arbitrary constant. - -Now that we've seen how to solve the equation ``by hand,'' -we show you how to do it with the \axiomFun{solve} operation. -\xtc{ -First define \axiom{y} to be an operator. -}{ -\spadpaste{y := operator 'y \bound{y}} -} -\xtc{ -Next we create the differential equation. -}{ -\spadpaste{deq := D(y x, x) = y(x) / (x + y(x) * log y x) \bound{deqi}\free{y}} -} -\xtc{ -Finally, we solve it. -}{ -\spadpaste{solve(deq, y, x) \free{deqi y}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemDEQSeriesTitle}{Power Series Solutions of Differential Equations} -\newcommand{\ugxProblemDEQSeriesNumber}{8.10.3.} - -@ -\subsection{8.10.3. Power Series Solutions of Differential Equations} -\label{ugxProblemDEQSeriesPage} -\index{pages!ugxProblemDEQSeriesPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemDEQSeriesPage} -\index{ugxProblemDEQSeriesPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemDEQSeriesPage} -{8.10.3. Power Series Solutions of Differential Equations} -\beginscroll - -The command to solve differential equations in power -series -around -a particular initial point with specific initial conditions is called -\axiomFun{seriesSolve}. -It can take a variety of parameters, so we illustrate -its use with some examples. - -\labelSpace{1pc} -\noOutputXtc{ -Since the coefficients of some solutions -are quite large, we reset the default to compute only seven terms. -}{ -\spadpaste{)set streams calculate 7 \bound{c7}} -} - -You can solve a single nonlinear equation of any order. For example, -we solve \axiom{y''' = sin(y'') * exp(y) + cos(x)} -subject to \axiom{y(0) = 1, y'(0) = 0, y''(0) = 0}. - -\xtc{ -We first tell Axiom -that the symbol \axiom{'y} denotes a new operator. -}{ -\spadpaste{y := operator 'y \bound{y}} -} -\xtc{ -Enter the differential equation using \axiom{y} like any system -function. -}{ -\spadpaste{eq := D(y(x), x, 3) - sin(D(y(x), x, 2))*exp(y(x)) = cos(x)\bound{eq}\free{y}} -} -% -\xtc{ -Solve it around \axiom{x = 0} with the initial conditions -\axiom{y(0) = 1, y'(0) = y''(0) = 0}. -}{ -\spadpaste{seriesSolve(eq, y, x = 0, [1, 0, 0])\free{y}\free{eq}\free{c7}} -} - -You can also solve a system of nonlinear first order equations. -For example, we solve a system that has \axiom{tan(t)} and -\axiom{sec(t)} as solutions. - -\xtc{ -We tell Axiom that \axiom{x} is also an operator. -}{ -\spadpaste{x := operator 'x\bound{x}} -} -\xtc{ -Enter the two equations forming our system. -}{ -\spadpaste{eq1 := D(x(t), t) = 1 + x(t)**2\free{x}\free{y}\bound{eq1}} -} -% -\xtc{ -}{ -\spadpaste{eq2 := D(y(t), t) = x(t) * y(t)\free{x}\free{y}\bound{eq2}} -} -% -\xtc{ -Solve the system around \axiom{t = 0} with the initial conditions -\axiom{x(0) = 0} and \axiom{y(0) = 1}. -Notice that since we give the unknowns in the -order \axiom{[x, y]}, the answer is a list of two series in the order -\axiom{[series for x(t), series for y(t)]}. -}{ -\spadpaste{seriesSolve([eq2, eq1], [x, y], t = 0, [y(0) = 1, x(0) = 0])\free{x}\free{y}\free{eq1}\free{eq2}\free{c7}} -} -\noindent -The order in which we give the -equations and the initial conditions has no effect on the order of -the solution. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemFiniteTitle}{Finite Fields} -\newcommand{\ugProblemFiniteNumber}{8.11.} - -@ -\subsection{8.11. Finite Fields} -\label{ugProblemFinitePage} -\begin{itemize} -\item ugxProblemFinitePrimePage \ref{ugxProblemFinitePrimePage} on -page~\pageref{ugxProblemFinitePrimePage} -\item ugxProblemFinitePrimePage \ref{ugxProblemFinitePrimePage} on -page~\pageref{ugxProblemFinitePrimePage} -\item ugxProblemFiniteExtensionFinitePage \ref{ugxProblemFiniteExtensionFinitePage} on -page~\pageref{ugxProblemFiniteExtensionFinitePage} -\item ugxProblemFiniteModulusPage \ref{ugxProblemFiniteModulusPage} on -page~\pageref{ugxProblemFiniteModulusPage} -\item ugxProblemFiniteCyclicPage \ref{ugxProblemFiniteCyclicPage} on -page~\pageref{ugxProblemFiniteCyclicPage} -\item ugxProblemFiniteNormalPage \ref{ugxProblemFiniteNormalPage} on -page~\pageref{ugxProblemFiniteNormalPage} -\item ugxProblemFiniteConversionPage \ref{ugxProblemFiniteConversionPage} on -page~\pageref{ugxProblemFiniteConversionPage} -\item ugxProblemFiniteUtilityPage \ref{ugxProblemFiniteUtilityPage} on -page~\pageref{ugxProblemFiniteUtilityPage} -\end{itemize} -\index{pages!ugProblemFinitePage!ug08.ht} -\index{ug08.ht!pages!ugProblemFinitePage} -\index{ugProblemFinitePage!ug08.ht!pages} -<>= -\begin{page}{ugProblemFinitePage}{8.11. Finite Fields} -\beginscroll -% - -A {\it finite field} (also called a {\it Galois field}) is a -finite algebraic structure where one can add, multiply and divide -under the same laws (for example, commutativity, associativity or -distributivity) as apply to the rational, real or complex numbers. -Unlike those three fields, for any finite field there exists a -positive prime integer \smath{p}, called the -\axiomFun{characteristic}, such that \texht{$p \: x = 0$}{\axiom{p * -x = 0}} for any element \smath{x} in the finite field. -In fact, the number of elements in a finite field is a power of -the characteristic and for each prime \smath{p} and positive -integer \smath{n} there exists exactly one finite field with -\texht{$p^n$}{\axiom{p**n}} elements, up to -isomorphism.\footnote{For more information about the algebraic -structure and properties of finite fields, see, for example, S. -Lang, {\it Algebra}, Second Edition, New York: Addison-Wesley -Publishing Company, Inc., 1984, ISBN 0 201 05487 6; or R. -Lidl, H. -Niederreiter, {\it Finite Fields}, Encyclopedia of Mathematics and -Its Applications, Vol. -20, Cambridge: Cambridge Univ. -Press, 1983, ISBN 0 521 30240 4.} - -When \axiom{n = 1,} the field has \smath{p} elements and is -called a {\it prime field}, discussed in \texht{the next -section}{ -\downlink{``\ugxProblemFinitePrimeTitle''}{ugxProblemFinitePrimePage} -in Section \ugxProblemFinitePrimeNumber\ignore{ugxProblemFinitePrime}}. -There are several ways of implementing extensions of finite -fields, and Axiom provides quite a bit of freedom to allow -you to choose the one that is best for your application. -Moreover, we provide operations for converting among the different -representations of extensions and different extensions of a single -field. -Finally, note that you usually need to package-call operations -from finite fields if the operations do not take as an argument an -object of the field. -See \downlink{``\ugTypesPkgCallTitle''}{ugTypesPkgCallPage} in Section \ugTypesPkgCallNumber\ignore{ugTypesPkgCall} for more information on -package-calling. - -\beginmenu - \menudownlink{{8.11.1. Modular Arithmetic and Prime Fields}} -{ugxProblemFinitePrimePage} - \menudownlink{{8.11.2. Extensions of Finite Fields}} -{ugxProblemFiniteExtensionFinitePage} - \menudownlink{{8.11.3. Irreducible Modulus Polynomial Representations}} -{ugxProblemFiniteModulusPage} - \menudownlink{{8.11.4. Cyclic Group Representations}} -{ugxProblemFiniteCyclicPage} - \menudownlink{{8.11.5. Normal Basis Representations}} -{ugxProblemFiniteNormalPage} - \menudownlink{{8.11.6. Conversion Operations for Finite Fields}} -{ugxProblemFiniteConversionPage} - \menudownlink{{8.11.7. Utility Operations for Finite Fields}} -{ugxProblemFiniteUtilityPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemFinitePrimeTitle}{Modular Arithmetic and Prime Fields} -\newcommand{\ugxProblemFinitePrimeNumber}{8.11.1.} - -@ -\subsection{8.11.1. Modular Arithmetic and Prime Fields} -\label{ugxProblemFinitePrimePage} -\index{pages!ugxProblemFinitePrimePage!ug08.ht} -\index{ug08.ht!pages!ugxProblemFinitePrimePage} -\index{ugxProblemFinitePrimePage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemFinitePrimePage} -{8.11.1. Modular Arithmetic and Prime Fields} -\beginscroll - -Let \smath{n} be a positive integer. -It is well known that you can get the same result if you perform -addition, subtraction or multiplication of integers and then take -the remainder on dividing by \smath{n} as if -you had first done such remaindering on the operands, performed the -arithmetic and then (if necessary) done remaindering again. -This allows us to speak of arithmetic -{\it modulo} \smath{n} or, more simply -{\it mod} \smath{n}. -\xtc{ -In Axiom, you use \axiomType{IntegerMod} to do such arithmetic. -}{ -\spadpaste{(a,b) : IntegerMod 12 \bound{abdec}} -} -\xtc{ -}{ -\spadpaste{(a, b) := (16, 7) \free{abdec}\bound{a b}} -} -\xtc{ -}{ -\spadpaste{[a - b, a * b] \free{a b}} -} -\xtc{ -If \smath{n} is not prime, there is only a limited notion of -reciprocals and division. -}{ -\spadpaste{a / b \free{a b}} -} -\xtc{ -}{ -\spadpaste{recip a \free{a}} -} -\xtc{ -Here \axiom{7} and \axiom{12} are relatively prime, so \axiom{7} -has a multiplicative inverse modulo \axiom{12}. -}{ -\spadpaste{recip b \free{b}} -} - -If we take \smath{n} to be a prime number \smath{p}, -then taking inverses and, therefore, division are generally defined. -\xtc{ -Use \axiomType{PrimeField} instead of \axiomType{IntegerMod} -for \smath{n} prime. -}{ -\spadpaste{c : PrimeField 11 := 8 \bound{c}} -} -\xtc{ -}{ -\spadpaste{inv c \free{c}} -} -\xtc{ -You can also use \axiom{1/c} and \axiom{c**(-1)} for the inverse of -\smath{c}. -}{ -\spadpaste{9/c \free{c}} -} - -\axiomType{PrimeField} (abbreviation \axiomType{PF}) checks if its -argument is prime when you try to use an operation from it. -If you know the argument is prime (particularly if it is large), -\axiomType{InnerPrimeField} (abbreviation \axiomType{IPF}) assumes -the argument has already been verified to be prime. -If you do use a number that is not prime, you will eventually get -an error message, most likely a division by zero message. -For computer science applications, the most important finite fields -are \axiomType{PrimeField 2} and its extensions. - -\xtc{ -In the following examples, we work with the finite field with -\smath{p = 101} elements. -}{ -\spadpaste{GF101 := PF 101 \bound{GF101} } -} -\xtc{ -Like many domains in Axiom, finite fields provide an operation -for returning a random element of the domain. -}{ -\spadpaste{x := random()\$GF101 \bound{x}\free{GF101}} -} -\xtc{ -}{ -\spadpaste{y : GF101 := 37 \bound{y}\free{GF101}} -} -\xtc{ -}{ -\spadpaste{z := x/y \bound{z}\free{x y}} -} -\xtc{ -}{ -\spadpaste{z * y - x \free{x y z}} -} -% -\xtc{ -The element \axiom{2} is a {\it primitive element} of this field, -}{ -\spadpaste{pe := primitiveElement()\$GF101 \bound{pe}\free{GF101}} -} -% -\xtc{ -in the sense that its powers enumerate all nonzero elements. -}{ -\spadpaste{[pe**i for i in 0..99] \free{pe}} -} -% -% -\xtc{ -If every nonzero element is a power of a primitive element, how do you -determine what the exponent is? -Use -\axiomFun{discreteLog}. -}{ -\spadpaste{ex := discreteLog(y) \bound{ex}\free{y}} -} -\xtc{ -}{ -\spadpaste{pe ** ex \free{ex pe}} -} -% -\xtc{ -The \axiomFun{order} of a nonzero element \smath{x} is the -smallest positive integer \smath{t} such -\texht{$x^t = 1$}{\axiom{x**t = 1}}. -}{ -\spadpaste{order y \free{y}} -} -\xtc{ -The order of a primitive element is the defining \smath{p-1}. -}{ -\spadpaste{order pe \free{pe}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemFiniteExtensionFiniteTitle}{Extensions of Finite Fields} -\newcommand{\ugxProblemFiniteExtensionFiniteNumber}{8.11.2.} - -@ -\subsection{8.11.2. Extensions of Finite Fields} -\label{ugxProblemFiniteExtensionFinitePage} -\index{pages!ugxProblemFiniteExtensionFinitePage!ug08.ht} -\index{ug08.ht!pages!ugxProblemFiniteExtensionFinitePage} -\index{ugxProblemFiniteExtensionFinitePage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemFiniteExtensionFinitePage} -{8.11.2. Extensions of Finite Fields} -\beginscroll - -When you want to work with an extension of a finite field in Axiom, -you have three choices to make: -\indent{4} -\beginitems -\item[1. ] Do you want to generate an extension of the prime field -(for example, \axiomType{PrimeField 2}) or an extension of a given field? -% -\item[2. ] Do you want to use a representation that is particularly -efficient for multiplication, exponentiation and addition but -uses a lot of computer memory (a representation that models the cyclic -group structure of the multiplicative group of the field extension -and uses a Zech logarithm table), one that -uses a normal basis for the vector space structure of the field -extension, or one that performs arithmetic modulo an irreducible -polynomial? -The cyclic group representation is only usable up to ``medium'' -(relative to your machine's performance) -sized fields. -If the field is large and the normal basis is relatively simple, -the normal basis representation is more efficient for exponentiation than -the irreducible polynomial representation. -% -\item[3. ] Do you want to provide a polynomial explicitly, a root of which -``generates'' the extension in one of the three senses in (2), -or do you wish to have the polynomial generated for you? -\enditems -\indent{0} - -This illustrates one of the most important features of Axiom: -you can choose exactly the right data-type and representation to -suit your application best. - -We first tell you what domain constructors to use for each case -above, and then give some examples. - -\texht{\hangafter=1\hangindent=2pc}{\noindent} -Constructors that automatically generate extensions of the prime field: -\newline -\axiomType{FiniteField} \newline -\axiomType{FiniteFieldCyclicGroup} \newline -\axiomType{FiniteFieldNormalBasis} - -\texht{\hangafter=1\hangindent=2pc}{\noindent} -Constructors that generate extensions of an arbitrary field: -\newline -\axiomType{FiniteFieldExtension} \newline -\axiomType{FiniteFieldExtensionByPolynomial} \newline -\axiomType{FiniteFieldCyclicGroupExtension} \newline -\axiomType{FiniteFieldCyclicGroupExtensionByPolynomial} \newline -\axiomType{FiniteFieldNormalBasisExtension} \newline -\axiomType{FiniteFieldNormalBasisExtensionByPolynomial} - -\texht{\hangafter=1\hangindent=2pc}{\noindent} -Constructors that use a cyclic group representation: -\newline -\axiomType{FiniteFieldCyclicGroup} \newline -\axiomType{FiniteFieldCyclicGroupExtension} \newline -\axiomType{FiniteFieldCyclicGroupExtensionByPolynomial} - -\texht{\hangafter=1\hangindent=2pc}{\noindent} -Constructors that use a normal basis representation: -\newline -\axiomType{FiniteFieldNormalBasis} \newline -\axiomType{FiniteFieldNormalBasisExtension} \newline -\axiomType{FiniteFieldNormalBasisExtensionByPolynomial} - -\texht{\hangafter=1\hangindent=2pc}{\noindent} -Constructors that use an irreducible modulus polynomial representation: -\newline -\axiomType{FiniteField} \newline -\axiomType{FiniteFieldExtension} \newline -\axiomType{FiniteFieldExtensionByPolynomial} - -\texht{\hangafter=1\hangindent=2pc}{\noindent} -Constructors that generate a polynomial for you: -\newline -\axiomType{FiniteField} \newline -\axiomType{FiniteFieldExtension} \newline -\axiomType{FiniteFieldCyclicGroup} \newline -\axiomType{FiniteFieldCyclicGroupExtension} \newline -\axiomType{FiniteFieldNormalBasis} \newline -\axiomType{FiniteFieldNormalBasisExtension} - -\texht{\hangafter=1\hangindent=2pc}{\noindent} -Constructors for which you provide a polynomial: -\newline -\axiomType{FiniteFieldExtensionByPolynomial} \newline -\axiomType{FiniteFieldCyclicGroupExtensionByPolynomial} \newline -\axiomType{FiniteFieldNormalBasisExtensionByPolynomial} - -These constructors are discussed in the following sections where -we collect together descriptions of extension fields that have the -same underlying representation.\footnote{For -more information on the implementation aspects of finite -fields, see -J. Grabmeier, A. Scheerhorn, {\it Finite Fields in AXIOM,} -Technical Report, IBM Heidelberg Scientific Center, 1992.} - -If you don't really care about all this detail, just use -\axiomType{FiniteField}. -As your knowledge of your application and its Axiom implementation -grows, you can come back and choose an alternative constructor that -may improve the efficiency of your code. -Note that the exported operations are almost the same for all constructors -of finite field extensions and include the operations exported by -\axiomType{PrimeField}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemFiniteModulusTitle}{Irreducible Modulus Polynomial Representations} -\newcommand{\ugxProblemFiniteModulusNumber}{8.11.3.} - -@ -\subsection{8.11.3. Irreducible Modulus Polynomial Representations} -\label{ugxProblemFiniteModulusPage} -\begin{itemize} -\item ugxProblemFiniteExtensionFinitePage -\ref{ugxProblemFiniteExtensionFinitePage} on -page~\pageref{ugxProblemFiniteExtensionFinitePage} -\end{itemize} -\index{pages!ugxProblemFiniteModulusPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemFiniteModulusPage} -\index{ugxProblemFiniteModulusPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemFiniteModulusPage} -{8.11.3. Irreducible Modulus Polynomial Representations} -\beginscroll - -All finite field extension constructors discussed in this -section -use a representation that performs arithmetic with univariate -(one-variable) polynomials modulo an irreducible polynomial. -This polynomial may be given explicitly by you or automatically -generated. -The ground field may be the prime field or one you specify. -See -\downlink{``\ugxProblemFiniteExtensionFiniteTitle''} -{ugxProblemFiniteExtensionFinitePage} in Section -\ugxProblemFiniteExtensionFiniteNumber\ignore{ugxProblemFiniteExtensionFinite} -for general information about finite field extensions. - -For \axiomType{FiniteField} (abbreviation \axiomType{FF}) you provide a -prime number \smath{p} and an extension degree \smath{n}. -This degree can be 1. -% -\xtc{ -Axiom uses the prime field \axiomType{PrimeField(p)}, -here \axiomType{PrimeField 2}, -and it chooses an irreducible polynomial of degree \smath{n}, -here 12, over the ground field. -}{ -\spadpaste{GF4096 := FF(2,12); \bound{GF4096}} -} -% - -The objects in the generated field extension are polynomials -of degree at most \smath{n-1} with coefficients in the -prime field. -The polynomial indeterminate is automatically chosen by Axiom and -is typically something like \axiom{\%A} or \axiom{\%D}. -These (strange) variables are {\it only} for output display; -there are several ways to construct elements of this field. - -The operation \axiomFun{index} enumerates the elements of the field -extension and accepts as argument the integers from 1 to -\smath{p \texht{^}{**} n}. -% -\xtc{ -The expression -\axiom{index(p)} always gives the indeterminate. -}{ -\spadpaste{a := index(2)\$GF4096 \bound{a}\free{GF4096}} -} -% -% -\xtc{ -You can build polynomials in \smath{a} and calculate in -\axiom{GF4096}. -}{ -\spadpaste{b := a**12 - a**5 + a \bound{b}\free{a}} -} -\xtc{ -}{ -\spadpaste{b ** 1000 \free{b}} -} -\xtc{ -}{ -\spadpaste{c := a/b \free{a b}\bound{c}} -} -% -\xtc{ -Among the available operations are \axiomFun{norm} and \axiomFun{trace}. -}{ -\spadpaste{norm c \free{c}} -} -\xtc{ -}{ -\spadpaste{trace c \free{c}} -} -% -% - -Since any nonzero element is a power of a primitive element, how -do we discover what the exponent is? -% -\xtc{ -The operation \axiomFun{discreteLog} calculates -the exponent and, -if it is called with only one argument, always refers to the primitive -element returned by \axiomFun{primitiveElement}. -}{ -\spadpaste{dL := discreteLog a \free{a}\bound{dL}} -} -\xtc{ -}{ -\spadpaste{g ** dL \free{dL g}} -} - -\axiomType{FiniteFieldExtension} (abbreviation \axiomType{FFX}) is -similar to \axiomType{FiniteField} except that the -ground-field for \axiomType{FiniteFieldExtension} is arbitrary and -chosen by you. -% -\xtc{ -In case you select the prime field as ground field, there is -essentially no difference between the constructed two finite field -extensions. -}{ -\spadpaste{GF16 := FF(2,4); \bound{GF16}} -} -\xtc{ -}{ -\spadpaste{GF4096 := FFX(GF16,3); \bound{GF4096x}\free{GF16}} -} -\xtc{ -}{ -\spadpaste{r := (random()\$GF4096) ** 20 \free{GF4096x}\bound{r}} -} -\xtc{ -}{ -\spadpaste{norm(r) \free{r}} -} -% - -\axiomType{FiniteFieldExtensionByPolynomial} (abbreviation \axiomType{FFP}) -is similar to \axiomType{FiniteField} and \axiomType{FiniteFieldExtension} -but is more general. -% -\xtc{ -}{ -\spadpaste{GF4 := FF(2,2); \bound{GF4}} -} -\xtc{ -}{ -\spadpaste{f := nextIrreduciblePoly(random(6)\$FFPOLY(GF4))\$FFPOLY(GF4) \free{GF4}\bound{f}} -} -\xtc{ -For \axiomType{FFP} you choose both the -ground field and the irreducible polynomial used in the representation. -The degree of the extension is the degree of the polynomial. -}{ -\spadpaste{GF4096 := FFP(GF4,f); \bound{GF4096y}\free{f GF4}} -} -\xtc{ -}{ -\spadpaste{discreteLog random()\$GF4096 \free{GF4096y}} -} -% - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemFiniteCyclicTitle}{Cyclic Group Representations} -\newcommand{\ugxProblemFiniteCyclicNumber}{8.11.4.} - -@ -\subsection{8.11.4. Cyclic Group Representations} -\label{ugxProblemFiniteCyclicPage} -\begin{itemize} -\item ugxProblemFiniteUtilityPage \ref{ugxProblemFiniteUtilityPage} on -page~\pageref{ugxProblemFiniteUtilityPage} -\end{itemize} -\index{pages!ugxProblemFiniteCyclicPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemFiniteCyclicPage} -\index{ugxProblemFiniteCyclicPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemFiniteCyclicPage}{8.11.4. Cyclic Group Representations} -\beginscroll - -In every finite field there exist elements whose powers are all the -nonzero elements of the field. -Such an element is called a {\it primitive element}. - -In \axiomType{FiniteFieldCyclicGroup} (abbreviation \axiomType{FFCG}) -the nonzero elements are represented by the -powers of a fixed primitive -element -of the field (that is, a generator of its -cyclic multiplicative group). -Multiplication (and hence exponentiation) using this representation is easy. -To do addition, we consider our primitive element as the root of a primitive -polynomial (an irreducible polynomial whose -roots are all primitive). -See -\downlink{``\ugxProblemFiniteUtilityTitle''}{ugxProblemFiniteUtilityPage} -in Section \ugxProblemFiniteUtilityNumber\ignore{ugxProblemFiniteUtility} -for examples of how to -compute such a polynomial. - -% -\xtc{ -To use \axiomType{FiniteFieldCyclicGroup} you provide a prime number and an -extension degree. -}{ -\spadpaste{GF81 := FFCG(3,4); \bound{GF81}} -} -% -% -\xtc{ -Axiom uses the prime field, here \axiomType{PrimeField 3}, as the -ground field and it chooses a primitive polynomial of degree -\smath{n}, here 4, over the prime field. -}{ -\spadpaste{a := primitiveElement()\$GF81 \bound{a}\free{GF81}} -} -% -% -\xtc{ -You can calculate in \axiom{GF81}. -}{ -\spadpaste{b := a**12 - a**5 + a \bound{b}\free{a}} -} -% -\xtc{ -In this representation of finite fields the discrete logarithm -of an element can be seen directly in its output form. -}{ -\spadpaste{b \free{b}} -} -\xtc{ -}{ -\spadpaste{discreteLog b \free{b}} -} -% - -\axiomType{FiniteFieldCyclicGroupExtension} (abbreviation -\axiomType{FFCGX}) is similar to \axiomType{FiniteFieldCyclicGroup} -except that the ground field for -\axiomType{FiniteFieldCyclicGroupExtension} is arbitrary and chosen -by you. -In case you select the prime field as ground field, there is -essentially no difference between the constructed two finite field -extensions. -% -\xtc{ -}{ -\spadpaste{GF9 := FF(3,2); \bound{GF9}} -} -\xtc{ -}{ -\spadpaste{GF729 := FFCGX(GF9,3); \bound{GF729}\free{GF9}} -} -\xtc{ -}{ -\spadpaste{r := (random()\$GF729) ** 20 \free{GF729}\bound{r}} -} -\xtc{ -}{ -\spadpaste{trace(r) \free{r}} -} -% - -\axiomType{FiniteFieldCyclicGroupExtensionByPolynomial} -(abbreviation \axiomType{FFCGP}) -is similar to \axiomType{FiniteFieldCyclicGroup} and -\axiomType{FiniteFieldCyclicGroupExtension} -but is more general. -For \axiomType{FiniteFieldCyclicGroupExtensionByPolynomial} you choose both the -ground field and the irreducible polynomial used in the representation. -The degree of the extension is the degree of the polynomial. -% -\xtc{ -}{ -\spadpaste{GF3 := PrimeField 3; \bound{GF3}} -} -\xtc{ -We use a utility operation to generate an irreducible primitive -polynomial (see -\downlink{``\ugxProblemFiniteUtilityTitle''}{ugxProblemFiniteUtilityPage} -in Section \ugxProblemFiniteUtilityNumber\ignore{ugxProblemFiniteUtility}). -The polynomial has one variable that is ``anonymous'': it displays -as a question mark. -}{ -\spadpaste{f := createPrimitivePoly(4)\$FFPOLY(GF3) \bound{f}\free{GF3}} -} -\xtc{ -}{ -\spadpaste{GF81 := FFCGP(GF3,f); \bound{GF81x}\free{f GF3}} -} -\xtc{ -Let's look at a random element from this field. -}{ -\spadpaste{random()\$GF81 \free{GF81x}} -} -% - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemFiniteNormalTitle}{Normal Basis Representations} -\newcommand{\ugxProblemFiniteNormalNumber}{8.11.5.} - -@ -\subsection{8.11.5. Normal Basis Representations} -\label{ugxProblemFiniteNormalPage} -\begin{itemize} -\item ugxProblemFiniteUtilityPage \ref{ugxProblemFiniteUtilityPage} on -page~\pageref{ugxProblemFiniteUtilityPage} -\end{itemize} -\index{pages!ugxProblemFiniteNormalPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemFiniteNormalPage} -\index{ugxProblemFiniteNormalPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemFiniteNormalPage}{8.11.5. Normal Basis Representations} -\beginscroll - -Let \smath{K} be a finite extension of degree \smath{n} of the -finite field \smath{F} and let \smath{F} have \smath{q} -elements. -An element \smath{x} of \smath{K} is said to be -{\it normal} over \smath{F} if the elements -\centerline{{\axiom{1, x**q, x**(q**2), ..., x**(q**(n-1))}}} -form a basis of \smath{K} as a vector space over \smath{F}. -Such a basis is called a {\it normal basis}.\footnote{This -agrees with the general definition of a normal basis because the -\smath{n} distinct powers of the automorphism -\texht{$x \mapsto x^q$}{\axiom{x +-> x**q}} -constitute the Galois group of \smath{K/F}.} - -If \smath{x} is normal over \smath{F}, its minimal -polynomial is also said to be {\it normal} over \smath{F}. -There exist normal bases for all finite extensions of arbitrary -finite fields. - -In \axiomType{FiniteFieldNormalBasis} (abbreviation -\axiomType{FFNB}), the elements of the finite field are represented -by coordinate vectors with respect to a normal basis. - -\xtc{ -You provide a prime \smath{p} and an extension degree -\smath{n}. -}{ -\spadpaste{K := FFNB(3,8) \bound{K}} -} -% -Axiom uses the prime field \axiomType{PrimeField(p)}, -here \axiomType{PrimeField 3}, -and it chooses a normal polynomial of degree -\smath{n}, here 8, over the ground field. -The remainder class of the indeterminate is used -as the normal element. -The polynomial indeterminate is automatically chosen by Axiom and -is typically something like \axiom{\%A} or \axiom{\%D}. -These (strange) variables are only for output display; -there are several ways to construct elements of this field. -The output of the basis elements is something like -\texht{$\%A^{q^i}.$}{ +\subsection{Asp77 Example Code} +\label{Asp77ExampleCode} +\index{pages!Asp77ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp77ExampleCode} +\index{Asp77ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp77ExampleCode}{Asp77 Example Code} \begin{verbatim} - i - q -%A . + SUBROUTINE FCNF(X,F) + DOUBLE PRECISION X + DOUBLE PRECISION F(2,2) + F(1,1)=0.0D0 + F(1,2)=1.0D0 + F(2,1)=0.0D0 + F(2,2)=-10.0D0 + RETURN + END \end{verbatim} -} -% -\xtc{ -}{ -\spadpaste{a := normalElement()\$K \bound{a}\free{K}} -} -% -% -\xtc{ -You can calculate in \smath{K} using \smath{a}. -}{ -\spadpaste{b := a**12 - a**5 + a \bound{b}\free{a}} -} - -\axiomType{FiniteFieldNormalBasisExtension} (abbreviation -\axiomType{FFNBX}) is -similar to \axiomType{FiniteFieldNormalBasis} except that the -groundfield for \axiomType{FiniteFieldNormalBasisExtension} is arbitrary and -chosen by you. -In case you select the prime field as ground field, there is -essentially no difference between the constructed two finite field -extensions. -\xtc{ -}{ -\spadpaste{GF9 := FFNB(3,2); \bound{GF9}} -} -\xtc{ -}{ -\spadpaste{GF729 := FFNBX(GF9,3); \bound{GF729}\free{GF9}} -} -\xtc{ -}{ -\spadpaste{r := random()\$GF729 \bound{r}\free{GF729}} -} -\xtc{ -}{ -\spadpaste{r + r**3 + r**9 + r**27 \free{r}} -} - -\axiomType{FiniteFieldNormalBasisExtensionByPolynomial} -(abbreviation \axiomType{FFNBP}) is similar to -\axiomType{FiniteFieldNormalBasis} and -\axiomType{FiniteFieldNormalBasisExtension} but is more general. -For \axiomType{FiniteFieldNormalBasisExtensionByPolynomial} you -choose both the ground field and the irreducible polynomial used -in the representation. -The degree of the extension is the degree of the polynomial. - -% -\xtc{ -}{ -\spadpaste{GF3 := PrimeField 3; \bound{GF3}} -} -\xtc{ -We use a utility operation to generate an irreducible normal -polynomial (see -\downlink{``\ugxProblemFiniteUtilityTitle''}{ugxProblemFiniteUtilityPage} -in Section \ugxProblemFiniteUtilityNumber\ignore{ugxProblemFiniteUtility}). -The polynomial has one variable that is ``anonymous'': it displays -as a question mark. -}{ -\spadpaste{f := createNormalPoly(4)\$FFPOLY(GF3) \free{GF3}\bound{f}} -} -\xtc{ -}{ -\spadpaste{GF81 := FFNBP(GF3,f); \bound{GF81}\free{f GF3}} -} -\xtc{ -Let's look at a random element from this field. -}{ -\spadpaste{r := random()\$GF81 \free{GF81}\bound{r1}} -} -\xtc{ -}{ -\spadpaste{r * r**3 * r**9 * r**27 \free{r1}} -} -\xtc{ -}{ -\spadpaste{norm r \free{r1}} -} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugxProblemFiniteConversionTitle}{Conversion Operations for Finite Fields} -\newcommand{\ugxProblemFiniteConversionNumber}{8.11.6.} - -@ -\subsection{8.11.6. Conversion Operations for Finite Fields} -\label{ugxProblemFiniteConversionPage} -\begin{itemize} -\item ugxProblemFiniteExtensionFinitePage -\ref{ugxProblemFiniteExtensionFinitePage} on -page~\pageref{ugxProblemFiniteExtensionFinitePage} -\end{itemize} -\index{pages!ugxProblemFiniteConversionPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemFiniteConversionPage} -\index{ugxProblemFiniteConversionPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemFiniteConversionPage} -{8.11.6. Conversion Operations for Finite Fields} -\beginscroll - -\labelSpace{5pc} -% -\xtc{ -Let \texht{$K$}{\axiom{K}} be a finite field. -}{ -\spadpaste{K := PrimeField 3 \bound{K}} -} -% -An extension field \texht{$K_m$}{\axiom{Km}} of degree -\smath{m} over \texht{$K$}{\axiom{K}} is a subfield of an -extension field \texht{$K_n$}{\axiom{Kn}} of degree \smath{n} -over \texht{$K$}{\axiom{K}} if and only if \smath{m} divides -\smath{n}. -\texht{ -\centerline{{\begin{tabular}{ccc}}} -\centerline{{$K_n$ }} -\centerline{{$|$ }} -\centerline{{$K_m$ & $\Longleftrightarrow$ & $m | n$ }} -\centerline{{$|$ }} -\centerline{{K}} -\centerline{{\end{tabular}}} -}{ +\subsection{Asp78 Example Code} +\label{Asp78ExampleCode} +\index{pages!Asp78ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp78ExampleCode} +\index{Asp78ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp78ExampleCode}{Asp78 Example Code} \begin{verbatim} -Kn -| -Km <==> m | n -| -K + SUBROUTINE FCNG(X,G) + DOUBLE PRECISION G(*),X + G(1)=0.0D0 + G(2)=0.0D0 + END \end{verbatim} -} -\axiomType{FiniteFieldHomomorphisms} provides conversion operations -between different extensions of one -fixed finite ground field and between different representations of -these finite fields. -\xtc{ -Let's choose \smath{m} and \smath{n}, -}{ -\spadpaste{(m,n) := (4,8) \bound{m n}} -} -\xtc{ -build the field extensions, -}{ -\spadpaste{Km := FiniteFieldExtension(K,m) \bound{Km}\free{K m}} -} -\xtc{ -and pick two random elements from the smaller field. -}{ -\spadpaste{Kn := FiniteFieldExtension(K,n) \bound{Kn}\free{K n}} -} -\xtc{ -}{ -\spadpaste{a1 := random()\$Km \bound{a1}\free{Km}} -} -\xtc{ -}{ -\spadpaste{b1 := random()\$Km \bound{b1}\free{Km}} -} -% -\xtc{ -Since \smath{m} divides \smath{n}, -\texht{$K_m$}{\axiom{Km}} is a subfield of \texht{$K_n$}{\axiom{Kn}}. -}{ -\spadpaste{a2 := a1 :: Kn \bound{a2}\free{a1 Kn}} -} -\xtc{ -Therefore we can convert the elements of \texht{$K_m$}{\axiom{Km}} -into elements of \texht{$K_n$}{\axiom{Kn}}. -}{ -\spadpaste{b2 := b1 :: Kn \bound{b2}\free{b1 Kn}} -} -% -% -\xtc{ -To check this, let's do some arithmetic. -}{ -\spadpaste{a1+b1 - ((a2+b2) :: Km) \free{a1 a2 b1 b2 Km Kn}} -} -\xtc{ -}{ -\spadpaste{a1*b1 - ((a2*b2) :: Km) \free{a1 a2 b1 b2 Km Kn}} -} -% -There are also conversions available for the -situation, when \texht{$K_m$}{\axiom{Km}} and \texht{$K_n$}{\axiom{Kn}} -are represented in different ways (see -\downlink{``\ugxProblemFiniteExtensionFiniteTitle''} -{ugxProblemFiniteExtensionFinitePage} in Section -\ugxProblemFiniteExtensionFiniteNumber -\ignore{ugxProblemFiniteExtensionFinite}). -For example let's choose \texht{$K_m$}{\axiom{Km}} where the -representation is 0 plus the cyclic multiplicative group and -\texht{$K_n$}{\axiom{Kn}} with a normal basis representation. -\xtc{ -}{ -\spadpaste{Km := FFCGX(K,m) \bound{Km2}\free{K m}} -} -\xtc{ -}{ -\spadpaste{Kn := FFNBX(K,n) \bound{Kn2}\free{K n}} -} -\xtc{ -}{ -\spadpaste{(a1,b1) := (random()\$Km,random()\$Km) \bound{a12 b12}\free{Km2}} -} -\xtc{ -}{ -\spadpaste{a2 := a1 :: Kn \bound{a22}\free{a12 Kn2}} -} -\xtc{ -}{ -\spadpaste{b2 := b1 :: Kn \bound{b22}\free{b12 Kn2}} -} -% -\xtc{ -Check the arithmetic again. -}{ -\spadpaste{a1+b1 - ((a2+b2) :: Km) \free{a12 a22 b12 b22 Km2}} -} -\xtc{ -}{ -\spadpaste{a1*b1 - ((a2*b2) :: Km) \free{a12 a22 b12 b22 Km2}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugxProblemFiniteUtilityTitle} -{Utility Operations for Finite Fields} -\newcommand{\ugxProblemFiniteUtilityNumber}{8.11.7.} - -@ -\subsection{8.11.7. Utility Operations for Finite Fields} -\label{ugxProblemFiniteUtilityPage} -\index{pages!ugxProblemFiniteUtilityPage!ug08.ht} -\index{ug08.ht!pages!ugxProblemFiniteUtilityPage} -\index{ugxProblemFiniteUtilityPage!ug08.ht!pages} -<>= -\begin{page}{ugxProblemFiniteUtilityPage} -{8.11.7. Utility Operations for Finite Fields} -\beginscroll - -\axiomType{FiniteFieldPolynomialPackage} (abbreviation -\axiomType{FFPOLY}) -provides operations for generating, counting and testing polynomials -over finite fields. Let's start with a couple of definitions: -\indent{4} -\beginitems -\item[-] A polynomial is {\it primitive} if its roots are primitive -elements in an extension of the coefficient field of degree equal -to the degree of the polynomial. -\item[-] A polynomial is {\it normal} over its coefficient field -if its roots are linearly independent -elements in an extension of the coefficient field of degree equal -to the degree of the polynomial. -\enditems -\indent{0} -In what follows, many of the generated polynomials have one -``anonymous'' variable. -This indeterminate is displayed as a question mark (\spadSyntax{?}). - -\xtc{ -To fix ideas, let's use the field with five elements for the first -few examples. -}{ -\spadpaste{GF5 := PF 5; \bound{GF5}} -} -% -% -\xtc{ -You can generate irreducible polynomials of any (positive) degree -(within the storage capabilities of the computer and your ability -to wait) by using -\axiomFunFrom{createIrreduciblePoly}{FiniteFieldPolynomialPackage}. -}{ -\spadpaste{f := createIrreduciblePoly(8)\$FFPOLY(GF5) \bound{f}\free{GF5}} -} -% -\xtc{ -Does this polynomial have other important properties? Use -\axiomFun{primitive?} to test whether it is a primitive polynomial. -}{ -\spadpaste{primitive?(f)\$FFPOLY(GF5) \free{f}} -} -\xtc{ -Use \axiomFun{normal?} to test whether it is a normal polynomial. -}{ -\spadpaste{normal?(f)\$FFPOLY(GF5) \free{f}} -} -\noindent -Note that this is actually a trivial case, -because a normal polynomial of degree \smath{n} -must have a nonzero term of degree \smath{n-1}. -We will refer back to this later. - -\xtc{ -To get a primitive polynomial of degree 8 just issue this. -}{ -\spadpaste{p := createPrimitivePoly(8)\$FFPOLY(GF5) \bound{p}\free{GF5}} -} -\xtc{ -}{ -\spadpaste{primitive?(p)\$FFPOLY(GF5) \free{p}} -} -\xtc{ -This polynomial is not normal, -}{ -\spadpaste{normal?(p)\$FFPOLY(GF5) \free{p}} -} -\xtc{ -but if you want a normal one simply write this. -}{ -\spadpaste{n := createNormalPoly(8)\$FFPOLY(GF5) \bound{n} \free{GF5}} -} -\xtc{ -This polynomial is not primitive! -}{ -\spadpaste{primitive?(n)\$FFPOLY(GF5) \free{n}} -} -This could have been seen directly, as -the constant term is 1 here, which is not a primitive -element up to the factor (\axiom{-1}) raised to the degree of the -polynomial.\footnote{Cf. Lidl, R. \& Niederreiter, -H., {\it Finite Fields,} Encycl. of Math. 20, (Addison-Wesley, 1983), -p.90, Th. 3.18.} - -What about -polynomials that are both primitive and normal? -The existence of such a polynomial is by no means obvious. -\footnote{The existence of such polynomials is proved in -Lenstra, H. W. \& Schoof, R. J., {\it Primitive -Normal Bases for Finite Fields,} Math. Comp. 48, 1987, pp. 217-231.} -% -\xtc{ -If you really need one use either -\axiomFunFrom{createPrimitiveNormalPoly}{FiniteFieldPolynomialPackage} or -\axiomFunFrom{createNormalPrimitivePoly}{FiniteFieldPolynomialPackage}. -}{ -\spadpaste{createPrimitiveNormalPoly(8)\$FFPOLY(GF5) \free{GF5}} -} -% - -If you want to obtain additional polynomials of the various types above -as given by the {\bf create...} operations above, you can use the {\bf -next...} operations. -For instance, -\axiomFunFrom{nextIrreduciblePoly}{FiniteFieldPolynomialPackage} yields -the next monic irreducible polynomial with the same degree as the input -polynomial. -By ``next'' we mean ``next in a natural order using the terms and -coefficients.'' -This will become more clear in the following examples. - -\xtc{ -This is the field with five elements. -}{ -\spadpaste{GF5 := PF 5; \bound{GF5}} -} -% -\xtc{ -Our first example irreducible polynomial, say -of degree 3, must be ``greater'' than this. -}{ -\spadpaste{h := monomial(1,8)\$SUP(GF5) \bound{h}\free{GF5}} -} -\xtc{ -You can generate it by doing this. -}{ -\spadpaste{nh := nextIrreduciblePoly(h)\$FFPOLY(GF5) \bound{nh}\free{h}} -} -% -\xtc{ -Notice that this polynomial is not the same as the one -\axiomFunFrom{createIrreduciblePoly}{FiniteFieldPolynomialPackage}. -}{ -\spadpaste{createIrreduciblePoly(3)\$FFPOLY(GF5) \free{GF5}} -} -\xtc{ -You can step through all irreducible polynomials of degree 8 over -the field with 5 elements by repeatedly issuing this. -}{ -\spadpaste{nh := nextIrreduciblePoly(nh)\$FFPOLY(GF5) \free{nh}} -} -\xtc{ -You could also ask for the total number of these. -}{ -\spadpaste{numberOfIrreduciblePoly(5)\$FFPOLY(GF5) \free{GF5}} -} - -We hope that ``natural order'' on polynomials is now clear: -first we compare the number of monomials of -two polynomials (``more'' is ``greater''); -then, if necessary, the degrees of these monomials (lexicographically), -and lastly their coefficients (also -lexicographically, and using the operation \axiomFun{lookup} if -our field is not a prime field). -Also note that we make both polynomials monic before looking at the -coefficients: -multiplying either polynomial by a nonzero constant -produces the same result. - -% -\xtc{ -The package -\axiomType{FiniteFieldPolynomialPackage} also provides similar -operations for primitive and normal polynomials. With -the exception of the number of primitive normal polynomials; -we're not aware of any known formula for this. -}{ -\spadpaste{numberOfPrimitivePoly(3)\$FFPOLY(GF5) \free{GF5}} -} -% -% -\xtc{ -Take these, -}{ -\spadpaste{m := monomial(1,1)\$SUP(GF5) \bound{m}\free{GF5}} -} -\xtc{ -}{ -\spadpaste{f := m**3 + 4*m**2 + m + 2 \bound{fx}\free{m}} -} -% -% -\xtc{ -and then we have: -}{ -\spadpaste{f1 := nextPrimitivePoly(f)\$FFPOLY(GF5) \free{fx}\bound{f1}} -} -\xtc{ -What happened? -}{ -\spadpaste{nextPrimitivePoly(f1)\$FFPOLY(GF5) \free{f1}} -} -% -Well, for the ordering used in -\axiomFunFrom{nextPrimitivePoly}{FiniteFieldPolynomialPackage} we -use as first criterion a comparison of the constant terms of the -polynomials. -Analogously, in -\axiomFunFrom{nextNormalPoly}{FiniteFieldPolynomialPackage} we first -compare the monomials of degree 1 less than the degree of the -polynomials (which is nonzero, by an earlier remark). -% -\xtc{ -}{ -\spadpaste{f := m**3 + m**2 + 4*m + 1 \bound{fy} \free{m}} -} -\xtc{ -}{ -\spadpaste{f1 := nextNormalPoly(f)\$FFPOLY(GF5) \free{fy}\bound{f1y}} -} -\xtc{ -}{ -\spadpaste{nextNormalPoly(f1)\$FFPOLY(GF5) \free{f1y}} -} -% -\noindent -We don't have to restrict ourselves to prime fields. -% -\xtc{ -Let's consider, say, a field with 16 elements. -}{ -\spadpaste{GF16 := FFX(FFX(PF 2,2),2); \bound{GF16} } -} -% -% -\xtc{ -We can apply any of the operations described above. -}{ -\spadpaste{createIrreduciblePoly(5)\$FFPOLY(GF16) \free{GF16}} -} - -\xtc{ -Axiom also provides operations -for producing random polynomials of a given degree -}{ -\spadpaste{random(5)\$FFPOLY(GF16) \free{GF16}} -} -\xtc{ -or with degree between two given bounds. -}{ -\spadpaste{random(3,9)\$FFPOLY(GF16) \free{GF16}} -} - -\axiomType{\axiom{FiniteFieldPolynomialPackage2}} (abbreviation -\axiomType{FFPOLY2}) -exports an operation \axiomFun{rootOfIrreduciblePoly} -for finding one root of an irreducible polynomial \axiom{f} -in an extension field of the coefficient field. -The degree of the extension has to be a multiple of the degree of \axiom{f}. -It is not checked whether \axiom{f} actually is irreducible. - -% -\xtc{ -To illustrate this operation, we fix a ground field \axiom{GF} -}{ -\spadpaste{GF2 := PrimeField 2; \bound{GF2}} -} -% -% -\xtc{ -and then an extension field. -}{ -\spadpaste{F := FFX(GF2,12) \bound{F}\free{GF2}} -} -% -% -\xtc{ -We construct an irreducible polynomial over \axiom{GF2}. -}{ -\spadpaste{f := createIrreduciblePoly(6)\$FFPOLY(GF2) \bound{fz}\free{GF2}} -} -% -% -\xtc{ -We compute a root of \axiom{f}. -}{ -\spadpaste{root := rootOfIrreduciblePoly(f)\$FFPOLY2(F,GF2) \free{F GF2 fz}\bound{root}} -} -% -%and check the result -%\spadcommand{eval(f, monomial(1,1)\$SUP(F) = root) \free{fz F root}} - -%********************************************************************* -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugProblemIdealTitle}{Primary Decomposition of Ideals} -\newcommand{\ugProblemIdealNumber}{8.12.} - -@ -\subsection{8.12. Primary Decomposition of Ideals} -\label{ugProblemIdealPage} -\index{pages!ugProblemIdealPage!ug08.ht} -\index{ug08.ht!pages!ugProblemIdealPage} -\index{ugProblemIdealPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemIdealPage}{8.12. Primary Decomposition of Ideals} -\beginscroll -%********************************************************************* -% -Axiom provides a facility for the primary decomposition -of -polynomial ideals over fields of characteristic zero. -The algorithm -%is discussed in \cite{gtz:gbpdpi} and -works in essentially two steps: -\indent{4} -\beginitems -\item[1. ] the problem is solved for 0-dimensional ideals by ``generic'' -projection on the last coordinate -\item[2. ] a ``reduction process'' uses localization and ideal quotients -to reduce the general case to the 0-dimensional one. -\enditems -\indent{0} -The Axiom constructor \axiomType{PolynomialIdeals} -represents ideals with coefficients in any field and -supports the basic ideal operations, -including intersection, sum and quotient. -\axiomType{IdealDecompositionPackage} contains the specific -operations for the primary decomposition and the computation of the -radical of an ideal with polynomial -coefficients in a field of characteristic 0 with -an effective algorithm for factoring polynomials. - -The following examples illustrate the capabilities of this facility. -% -\xtc{ -First consider the ideal generated by -\texht{$x^2 + y^2 - 1$}{\axiom{x**2 + y**2 - 1}} -(which defines a circle in the \axiom{(x,y)}-plane) and the ideal -generated by \texht{$x^2 - y^2$}{\axiom{x**2 - y**2}} (corresponding to the -straight lines \axiom{x = y} and \axiom{x = -y}. -}{ -\spadpaste{(n,m) : List DMP([x,y],FRAC INT) \bound{nm}} -} -\xtc{ -}{ -\spadpaste{m := [x**2+y**2-1] \free{nm} \bound{m}} -} -\xtc{ -}{ -\spadpaste{n := [x**2-y**2] \free{nm} \bound{n}} -} -% -% -\xtc{ -We find the equations defining the intersection of the two loci. -This correspond to the sum of the associated ideals. -}{ -\spadpaste{id := ideal m + ideal n \free{n m} \bound{id}} -} -% -% -\xtc{ -We can check if the locus contains only a finite number of points, -that is, if the ideal is zero-dimensional. -}{ -\spadpaste{zeroDim? id \free{id}} -} -\xtc{ -}{ -\spadpaste{zeroDim?(ideal m) \free{m}} -} -\xtc{ -}{ -\spadpaste{dimension ideal m \free{m}} -} -\xtc{ -We can find polynomial relations among the generators -(\axiom{f} and \axiom{g} are the parametric equations of the knot). -}{ -\spadpaste{(f,g):DMP([x,y],FRAC INT) \bound{fg}} -} -\xtc{ -}{ -\spadpaste{f := x**2-1 \free{fg} \bound{f}} -} -\xtc{ -}{ -\spadpaste{g := x*(x**2-1) \free{fg} \bound{g}} -} -\xtc{ -}{ -\spadpaste{relationsIdeal [f,g] \free{f g}} -} - -\xtc{ -We can compute the primary decomposition of an ideal. -}{ -\spadpaste{l: List DMP([x,y,z],FRAC INT) \bound{ll}} -} -\xtc{ -}{ -\spadpaste{l:=[x**2+2*y**2,x*z**2-y*z,z**2-4] \free{ll} \bound{l}} -} -\xtc{ -}{ -\spadpaste{ld:=primaryDecomp ideal l \free{l} \bound{ld}} -} -\xtc{ -We can intersect back. -}{ -\spadpaste{reduce(intersect,ld) \free{ld}} -} - -\xtc{ -We can compute the radical of every primary component. -}{ -\spadpaste{reduce(intersect,[radical ld.i for i in 1..2]) \free{ld}} -} -\xtc{ -Their intersection is equal to the radical of the ideal of \axiom{l}. -}{ -\spadpaste{radical ideal l \free{l}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugProblemGaloisTitle}{Computation of Galois Groups} -\newcommand{\ugProblemGaloisNumber}{8.13.} - -@ -\subsection{8.13. Computation of Galois Groups} -\label{ugProblemGaloisPage} -\begin{itemize} -\item FactoredXmpPage \ref{FactoredXmpPage} on -page~\pageref{FactoredXmpPage} -\item ugAvailCLEFPage \ref{ugAvailCLEFPage} on -page~\pageref{ugAvailCLEFPage} -\end{itemize} -\index{pages!ugProblemGaloisPage!ug08.ht} -\index{ug08.ht!pages!ugProblemGaloisPage} -\index{ugProblemGaloisPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemGaloisPage}{8.13. Computation of Galois Groups} -\beginscroll -% -As a sample use of Axiom's algebraic number facilities, -we compute -the Galois group of the polynomial -\texht{$p(x) = x^5 - 5 x + 12$}{\axiom{p(x) = x**5 - 5*x + 12}}. -% -\xtc{ -}{ -\spadpaste{p := x**5 - 5*x + 12 \bound{p}} -} -% -We would like to construct a polynomial \smath{f(x)} -such that the splitting -field -of \smath{p(x)} is generated by one root of \smath{f(x)}. -First we construct a polynomial \smath{r = r(x)} such that one -root of \smath{r(x)} generates the field generated by two roots of -the polynomial \smath{p(x)}. -(As it will turn out, the field generated by two roots of -\smath{p(x)} is, in fact, the splitting field of -\smath{p(x)}.) - -From the proof of the primitive element theorem we know that -if \smath{a} and \smath{b} are -algebraic numbers, then the field -\texht{${\bf Q}(a,b)$}{\axiom{Q(a,b)}} is equal to -\texht{${\bf Q}(a+kb)$}{\axiom{Q(a + k*b)}} for an -appropriately chosen integer \smath{k}. -In our case, we construct the minimal polynomial of -\texht{$a_i - a_j$}{\axiom{a[i] - a[j]}}, where -\texht{$a_i$}{\axiom{a[i]}} and -\texht{$a_j$}{\axiom{a[j]}} are two roots of \smath{p(x)}. -We construct this polynomial using \axiomFun{resultant}. -The main result we need is the following: -If \smath{f(x)} is a polynomial with roots -\texht{$a_i \ldots a_m$}{\axiom{a[1]...a[m]}} and -\smath{g(x)} is a polynomial -with roots -\texht{$b_i \ldots b_n$}{\axiom{b[1]...b[n]}}, then the polynomial -\axiom{h(x) = resultant(f(y), g(x-y), y)} -is a polynomial of degree \smath{m*n} with -roots -\texht{$a_i + b_j, i = 1 \ldots m, j = 1 \ldots n$} -{\axiom{a[i] + b[j], 1 <= i <= m, 1 <= j <= n}}. - -\xtc{ -For \smath{f(x)} we use the polynomial \smath{p(x)}. -For \smath{g(x)} we use the polynomial \smath{-p(-x)}. -Thus, the polynomial we first construct is -\axiom{resultant(p(y), -p(y-x), y)}. -}{ -\spadpaste{q := resultant(eval(p,x,y),-eval(p,x,y-x),y) \free{p} \bound{q}} -} -% -The roots of \smath{q(x)} are -\texht{$a_i - a_j, i \leq 1, j \leq 5$} -{\axiom{a[i] - a[j], 1 <= i,j <= 5}}. -Of course, there are five pairs \smath{(i,j)} with \smath{i = j}, -so \axiom{0} is a 5-fold root of \smath{q(x)}. -% -\xtc{ -Let's get rid of this factor. -}{ -\spadpaste{q1 := exquo(q, x**5) \free{q} \bound{q1}} -} -\xtc{ -Factor the polynomial \axiom{q1}. -}{ -\spadpaste{factoredQ := factor q1 \free{q1} \bound{factoredQ}} -} -% -We see that \axiom{q1} has two irreducible factors, each of degree \axiom{10}. -(The fact that the polynomial \axiom{q1} has two factors of -degree \axiom{10} is enough to show -that the Galois group of \smath{p(x)} is the dihedral group of -order \axiom{10}.\footnote{See McKay, Soicher, Computing Galois Groups -over the Rationals, Journal of Number Theory 20, 273-281 (1983). -We do not assume the results of this paper, however, and we continue with -the computation.} -Note that the type of \axiom{factoredQ} is \axiomType{FR POLY INT}, that is, -\axiomType{Factored Polynomial Integer}. -This is a special data type for recording factorizations of polynomials with -integer coefficients (see \downlink{`Factored'}{FactoredXmpPage} -\ignore{Factored}). -% -\xtc{ -We can access the individual factors using the operation -\axiomFunFrom{nthFactor}{Factored}. -}{ -\spadpaste{r := nthFactor(factoredQ,1) \free{factoredQ} \bound{r}} -} -% - -Consider the polynomial \smath{r = r(x)}. -This is the minimal polynomial of the difference of two roots of -\smath{p(x)}. -Thus, the splitting field of \smath{p(x)} contains a subfield of -degree \axiom{10}. -We show that this subfield is, in fact, the splitting field of -\smath{p(x)} by showing that \smath{p(x)} factors completely -over this field. -% -\xtc{ -First we create a symbolic root of the polynomial \smath{r(x)}. -(We replaced \axiom{x} by \axiom{b} in the -polynomial \axiom{r} so that our symbolic root would be -printed as \axiom{b}.) -}{ -\spadpaste{beta:AN := rootOf(eval(r,x,b)) \free{r} \bound{beta}} -} -\xtc{ -We next tell Axiom to view \smath{p(x)} as a univariate polynomial -in \axiom{x} -with algebraic number coefficients. -This is accomplished with this type declaration. -}{ -\spadpaste{p := p::UP(x,INT)::UP(x,AN) \free{p} \bound{declareP}} -} -% -% -\xtc{ -Factor \smath{p(x)} over the field -\texht{${\bf Q}(\beta)$}{\axiom{Q(beta)}}. -(This computation will take some time!) -}{ -\spadpaste{algFactors := factor(p,[beta]) \free{declareP beta} \bound{algFactors}} -} -% -When factoring over number fields, it is important to specify the -field over which the polynomial is to be factored, as polynomials -have different factorizations over different fields. -When you use the operation \axiomFun{factor}, the field over which -the polynomial is factored is the field generated by -\indent{4} -\beginitems -\item[1. ] the algebraic numbers that appear -in the coefficients of the polynomial, and -\item[2. ] the algebraic numbers that -appear in a list passed as an optional second argument of the operation. -\enditems -\indent{0} -In our case, the coefficients of \axiom{p} -are all rational integers and only \axiom{beta} -appears in the list, so the field is simply -\texht{${\bf Q}(\beta)$}{\axiom{Q(beta)}}. -% -\xtc{ -It was necessary to give the list \axiom{[beta]} -as a second argument of the operation -because otherwise the polynomial would have been factored over the field -generated by its coefficients, namely the rational numbers. -}{ -\spadpaste{factor(p) \free{declareP}} -} -% -We have shown that the splitting field of \smath{p(x)} has degree -\axiom{10}. -Since the symmetric group of degree 5 has only one transitive subgroup -of order \axiom{10}, we know that the Galois group of \smath{p(x)} must be -this group, the dihedral group -of order \axiom{10}. -Rather than stop here, we explicitly compute the action of the Galois -group on the roots of \smath{p(x)}. - -First we assign the roots of \smath{p(x)} as the values of five -variables. -\xtc{ -We can obtain an individual root by negating the constant coefficient of -one of the factors of \smath{p(x)}. -}{ -\spadpaste{factor1 := nthFactor(algFactors,1) \free{algFactors} \bound{factor1}} -} -\xtc{ -}{ -\spadpaste{root1 := -coefficient(factor1,0) \free{factor1} \bound{root1}} -} -% -% -\xtc{ -We can obtain a list of all the roots in this way. -}{ -\spadpaste{roots := [-coefficient(nthFactor(algFactors,i),0) for i in 1..5] \free{algFactors} \bound{roots}} -} - -The expression +\subsection{Asp8 Example Code} +\label{Asp8ExampleCode} +\index{pages!Asp8ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp8ExampleCode} +\index{Asp8ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp8ExampleCode}{Asp8 Example Code} \begin{verbatim} -- coefficient(nthFactor(algFactors, i), 0)} + SUBROUTINE OUTPUT(XSOL,Y,COUNT,M,N,RESULT,FORWRD) + DOUBLE PRECISION Y(N),RESULT(M,N),XSOL + INTEGER M,N,COUNT + LOGICAL FORWRD + DOUBLE PRECISION X02ALF,POINTS(8) + EXTERNAL X02ALF + INTEGER I + POINTS(1)=1.0D0 + POINTS(2)=2.0D0 + POINTS(3)=3.0D0 + POINTS(4)=4.0D0 + POINTS(5)=5.0D0 + POINTS(6)=6.0D0 + POINTS(7)=7.0D0 + POINTS(8)=8.0D0 + COUNT=COUNT+1 + DO 25001 I=1,N + RESULT(COUNT,I)=Y(I) +25001 CONTINUE + IF(COUNT.EQ.M)THEN + IF(FORWRD)THEN + XSOL=X02ALF() + ELSE + XSOL=-X02ALF() + ENDIF + ELSE + XSOL=POINTS(COUNT) + ENDIF + END \end{verbatim} -is the \eth{\axiom{i }} root -of \smath{p(x)} and the elements of \axiom{roots} are the \eth{\axiom{i }} -roots of \smath{p(x)} as \axiom{i} ranges from \axiom{1} to \axiom{5}. - -\xtc{ -Assign the roots as the values of the variables \axiom{a1,...,a5}. -}{ -\spadpaste{(a1,a2,a3,a4,a5) := (roots.1,roots.2,roots.3,roots.4,roots.5) \free{roots} \bound{ais}} -} -% - -Next we express the roots of \smath{r(x)} as polynomials in -\axiom{beta}. -We could obtain these roots by calling the operation \axiomFun{factor}: -\axiom{factor(r, [beta])} factors \axiom{r(x)} over -\texht{${\bf Q}(\beta)$}{\axiom{Q(beta)}}. -However, this is a lengthy computation and we can obtain the roots of -\smath{r(x)} as differences of the roots \axiom{a1,...,a5} of -\smath{p(x)}. -Only ten of these differences are roots of \smath{r(x)} and the -other ten are roots -of the other irreducible factor of \axiom{q1}. -We can determine if a given value is a root of \smath{r(x)} by evaluating -\smath{r(x)} at that particular value. -(Of course, the order in which factors are returned by the -operation \axiomFun{factor} -is unimportant and may change with different implementations of the operation. -Therefore, we cannot predict in advance which differences are roots of -\smath{r(x)} and which are not.) -% -\xtc{ -Let's look at four examples (two are roots of \smath{r(x)} and -two are not). -}{ -\spadpaste{eval(r,x,a1 - a2) \free{ais}} -} -\xtc{ -}{ -\spadpaste{eval(r,x,a1 - a3) \free{ais}} -} -\xtc{ -}{ -\spadpaste{eval(r,x,a1 - a4) \free{ais}} -} -\xtc{ -}{ -\spadpaste{eval(r,x,a1 - a5) \free{ais}} -} -% - -Take one of the differences that was a root of \smath{r(x)} -and assign it to the variable \axiom{bb}. -\xtc{ -For example, if \axiom{eval(r,x,a1 - a4)} returned \axiom{0}, you would -enter this. -}{ -\spadpaste{bb := a1 - a4 \free{ais} \bound{bb}} -} -Of course, if the difference is, in fact, equal to the root \axiom{beta}, -you should choose another root of \smath{r(x)}. - -Automorphisms of the splitting field are given by mapping a generator of -the field, namely \axiom{beta}, to other roots of its minimal polynomial. -Let's see what happens when \axiom{beta} is mapped to \axiom{bb}. -% -\xtc{ -We compute the images of the roots \axiom{a1,...,a5} -under this automorphism: -}{ -\spadpaste{aa1 := subst(a1,beta = bb) \free{beta bb ais} \bound{aa1}} -} -\xtc{ -}{ -\spadpaste{aa2 := subst(a2,beta = bb) \free{beta bb ais} \bound{aa2}} -} -\xtc{ -}{ -\spadpaste{aa3 := subst(a3,beta = bb) \free{beta bb ais} \bound{aa3}} -} -\xtc{ -}{ -\spadpaste{aa4 := subst(a4,beta = bb) \free{beta bb ais} \bound{aa4}} -} -\xtc{ -}{ -\spadpaste{aa5 := subst(a5,beta = bb) \free{beta bb ais} \bound{aa5}} -} -% -Of course, the values \axiom{aa1,...,aa5} are simply a permutation of the values -\axiom{a1,...,a5}. -% -\xtc{ -Let's find the value of \axiom{aa1} (execute as many of the following five commands -as necessary). -}{ -\spadpaste{(aa1 = a1) :: Boolean \free{aa1}} -} -\xtc{ -}{ -\spadpaste{(aa1 = a2) :: Boolean \free{aa1}} -} -\xtc{ -}{ -\spadpaste{(aa1 = a3) :: Boolean \free{aa1}} -} -\xtc{ -}{ -\spadpaste{(aa1 = a4) :: Boolean \free{aa1}} -} -\xtc{ -}{ -\spadpaste{(aa1 = a5) :: Boolean \free{aa1}} -} -% -Proceeding in this fashion, you can find the values of -\axiom{aa2,...aa5}.\footnote{Here you should use the -\Clef{} line editor. -See \downlink{``\ugAvailCLEFTitle''}{ugAvailCLEFPage} in Section -\ugAvailCLEFNumber\ignore{ugAvailCLEF} for more information about \Clef{}.} -You have represented the automorphism \axiom{beta -> bb} -as a permutation of the roots \axiom{a1,...,a5}. -If you wish, you can repeat this computation for all the roots of -\smath{r(x)} and represent the Galois group of -\smath{p(x)} as a subgroup of the symmetric group on five letters. - -Here are two other problems that you may attack in a similar fashion: -\indent{4} -\beginitems -\item[1. ] Show that the Galois group of -\texht{$p(x) = x^4 + 2 x^3 - 2 x^2 - 3 x + 1$}{\axiom{ -p(x) = x**4 + 2*x**3 - 2*x**2 - 3*x + 1}} -is the dihedral group of order eight. -(The splitting field of this polynomial is the Hilbert class field -of -the quadratic field -\texht{${\bf Q}(\sqrt{145})$}{\axiom{Q(sqrt(145))}}.) -\item[2. ] Show that the Galois group of -\texht{$p(x) = x^6 + 108$}{\axiom{p(x) = x**6 + 108}} -has order 6 and is -isomorphic to \texht{$S_3,$}{} the symmetric group on three letters. -(The splitting field of this polynomial is the splitting field of -\texht{$x^3 - 2$}{\axiom{x**3 - 2}}.) -\enditems -\indent{0} - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugProblemGeneticTitle}{Non-Associative Algebras and Modelling Genetic Laws} -\newcommand{\ugProblemGeneticNumber}{8.14.} - -@ -\subsection{8.14. Non-Associative Algebras and Modelling Genetic Laws} -\label{ugProblemGeneticPage} -\begin{itemize} -\item OctonionXmpPage \ref{OctonionXmpPage} on -page~\pageref{OctonionXmpPage} -\end{itemize} -\index{pages!ugProblemGeneticPage!ug08.ht} -\index{ug08.ht!pages!ugProblemGeneticPage} -\index{ugProblemGeneticPage!ug08.ht!pages} -<>= -\begin{page}{ugProblemGeneticPage} -{8.14. Non-Associative Algebras and Modelling Genetic Laws} -\beginscroll - -Many algebraic structures of mathematics and Axiom -have a multiplication operation \axiomOp{*} that satisfies -the associativity law -\texht{$a*(b*c) = (a*b)*c$}{\spad{a*(b*c) = (a*b)*c}} -for all \smath{a}, \smath{b} and \smath{c}. -The octonions (see -\downlink{`Octonion'}{OctonionXmpPage}\ignore{Octonion}) -are a well known exception. -There are many other interesting non-associative structures, such as the -class of -Lie algebras.\footnote{Two Axiom implementations of Lie algebras -are \spadtype{LieSquareMatrix} and \spadtype{FreeNilpotentLie}.} -Lie algebras can be used, for example, to analyse Lie symmetry algebras of -partial differential -equations. -In this section we show a different application of non-associative algebras, -the modelling of genetic laws. - -The Axiom library contains several constructors for -creating non-assoc\-i\-a\-tive structures, -ranging from the categories \spadtype{Monad}, -\spadtype{NonAssociativeRng}, and -\spadtype{FramedNonAssociativeAlgebra}, to the domains -\spadtype{AlgebraGivenByStructuralConstants} and -\spadtype{GenericNonAssociativeAlgebra}. -Furthermore, the package \spadtype{AlgebraPackage} provides -operations for analysing the structure of such algebras.\footnote{% -The interested reader can learn more about these aspects of the -Axiom library from the paper -``Computations in Algebras of Finite Rank,'' -by Johannes Grabmeier and Robert Wisbauer, -Technical Report, IBM Heidelberg Scientific Center, 1992.} - -Mendel's genetic laws are often written in a form like -\texht{ -\narrowDisplay{Aa \times Aa = {1\over 4}AA + {1\over 2}Aa + {1\over 4}aa.}}{ -\spad{Aa * Aa = (1/4)*AA + (1/2)*Aa + (1/4)*aa.} -} -The implementation of general algebras in Axiom allows us to -use this as the definition for multiplication in an algebra. -Hence, it is possible to study -questions of genetic inheritance using Axiom. -To demonstrate this more precisely, we discuss one example from a -monograph of \texht{A. W\"orz-Busekros}{A. Woerz-Busekros}, -where you can also find a general setting of this theory.\footnote{% -\texht{W\"{o}rz-Busekros}{Woerz-Busekros}, A., -{\it Algebras in Genetics}, -Springer Lectures Notes in Biomathematics 36, Berlin e.a. (1980). -In particular, see example 1.3.} - -We assume that there is an infinitely large random mating population. -Random mating of two gametes \texht{$a_i$}{\spad{ai}} and -\texht{$a_j$}{\spad{aj}} gives zygotes -\texht{$a_ia_j$}{\spad{ai aj}}, which produce new gametes. -In classical Mendelian segregation we have -\texht{$a_ia_j = {1 \over 2}a_i+{1 \over 2}a_j$}{\spad{ai aj = (1/2)*ai+(1/2)*aj}}. -In general, we have -\texht{\narrowDisplay{a_ia_j = \sum_{k=1}^n \gamma_{i,j}^k\ a_k.}}% -{\spad{ai aj = gammaij1 a1 + gammaij2 a2 + ... + gammaijn an}} -The segregation rates \texht{$\gamma_{i,j}$}{\spad{gammaij}} -are the structural constants of an -\smath{n}-dimensional algebra. -This is provided in Axiom by -the constructor \spadtype{AlgebraGivenByStructuralConstants} -(abbreviation \spadtype{ALGSC}). - -Consider two coupled autosomal loci with alleles -\smath{A},\smath{a}, \smath{B}, and \smath{b}, building four -different gametes -\texht{$a_1 = AB, a_2 = Ab, a_3 = aB,$ and $a_4 = ab$}% -{\spad{a1 := AB, a2 := Ab, a3 := aB,} and \spad{a4 := ab}}. -The zygotes \texht{$a_ia_j$}{\spad{ai aj}} -produce gametes \texht{$a_i$}{\spad{ai}} and -\texht{$a_j$}{\spad{aj}} -with classical Mendelian segregation. -Zygote \texht{$a_1a_4$}{a1 a4} undergoes transition -to \texht{$a_2a_3$}{\spad{a2 a3}} -and vice versa with probability -\texht{$0 \le \theta \le {1\over 2}$}{0 <= theta <= 1/2}. - -\xtc{ -Define a list -\texht{$[(\gamma_{i,j}^k) 1 \le k \le 4]$}{\spad{[(gammaijk) 1 <= k <= 4]}} -of four four-by-four matrices giving the segregation -rates. -We use the value \smath{1/10} for \smath{\theta}. -}{ -\spadpaste{segregationRates : List SquareMatrix(4,FRAC INT) := [matrix [ [1, 1/2, 1/2, 9/20], [1/2, 0, 1/20, 0], [1/2, 1/20, 0, 0], [9/20, 0, 0, 0] ], matrix [ [0, 1/2, 0, 1/20], [1/2, 1, 9/20, 1/2], [0, 9/20, 0, 0], [1/20, 1/2, 0, 0] ], matrix [ [0, 0, 1/2, 1/20], [0, 0, 9/20, 0], [1/2, 9/20, 1, 1/2], [1/20, 0, 1/2, 0] ], matrix [ [0, 0, 0, 9/20], [0, 0, 1/20, 1/2], [0, 1/20, 0, 1/2], [9/20, 1/2, 1/2, 1] ] ] \bound{segregationRates}} -} -\xtc{ -Choose the appropriate symbols for the basis of gametes, -}{ -\spadpaste{gametes := ['AB,'Ab,'aB,'ab] \bound{gametes}} -} -\xtc{ -Define the algebra. -}{ -\spadpaste{A := ALGSC(FRAC INT, 4, gametes, segregationRates);\bound{A}\free{gametes, segregationRates}} -} - -\xtc{ -What are the probabilities for zygote -\texht{$a_1a_4$}{a1 a4} to produce the different gametes? -}{ -\spadpaste{a := basis()\$A; a.1*a.4} -} - -Elements in this algebra whose coefficients sum to one play a -distinguished role. -They represent a population with the distribution of gametes -reflected by the coefficients with respect to the basis of -gametes. - -Random mating of different populations \smath{x} and \smath{y} is described by -their product \smath{x*y}. - -\xtc{ -This product is commutative only -if the gametes are not sex-dependent, as in our example. -}{ -\spadpaste{commutative?()\$A \free{A}} -} -\xtc{ -In general, it is not associative. -}{ -\spadpaste{associative?()\$A \free{A}} -} - -Random mating within a population \smath{x} is described by -\smath{x*x.} -The next generation is \smath{(x*x)*(x*x).} - -\xtc{ -Use decimal numbers to compare the distributions more easily. -}{ -\spadpaste{x : ALGSC(DECIMAL, 4, gametes, segregationRates) := convert [3/10, 1/5, 1/10, 2/5]\bound{x}\free{gametes, segregationRates}} -} -\xtc{ -To compute directly the gametic distribution in the fifth -generation, we use \spadfun{plenaryPower}. -}{ -\spadpaste{plenaryPower(x,5) \free{x}} -} - -We now ask two questions: -Does this distribution converge to an equilibrium state? -What are the distributions that are stable? - -\xtc{ -This is an invariant of the algebra and it is used to answer -the first question. -The new indeterminates describe a symbolic distribution. -}{ -\spadpaste{q := leftRankPolynomial()\$GCNAALG(FRAC INT, 4, gametes, segregationRates) :: UP(Y, POLY FRAC INT)\bound{q}\free{gametes, segregationRates}} -} -\xtc{ -Because the coefficient \texht{${9 \over 20}$}{\axiom{9/20}} has absolute -value less than 1, all distributions do converge, -by a theorem of this theory. -}{ -\spadpaste{factor(q :: POLY FRAC INT) \free{q}} -} -\xtc{ -The second question is answered by searching for idempotents in the -algebra. -}{ -\spadpaste{cI := conditionsForIdempotents()\$GCNAALG(FRAC INT, 4, gametes, segregationRates)\bound{cI} \free{gametes, segregationRates}} -} -\xtc{ -Solve these equations and look at the first solution. -}{ -\spadpaste{gbs:= groebnerFactorize cI; gbs.1\free{cI}\bound{gbs}} -} - -Further analysis using the package \spadtype{PolynomialIdeals} -shows that there is a two-dimensional variety of equilibrium states and all -other solutions are contained in it. - -\xtc{ -Choose one equilibrium state by setting two indeterminates to -concrete values. -}{ -\spadpaste{sol := solve concat(gbs.1,[\%x1-1/10,\%x2-1/10])\bound{sol} \free{gbs}} -} -\xtc{ -}{ -\spadpaste{e : A := represents reverse (map(rhs, sol.1) :: List FRAC INT)\bound{e} \free{A, sol}} -} -\xtc{ -Verify the result. -}{ -\spadpaste{e*e-e \free{e}} -} -\endscroll -\autobuttons -\end{page} - -@ -\section{ug10.ht} -<>= -\newcommand{\ugIntProgTitle}{Interactive Programming} -\newcommand{\ugIntProgNumber}{10.} - -@ -\subsection{10. Interactive Programming} -\label{ugIntProgPage} -\begin{itemize} -\item ugAppGraphicsPage \ref{ugAppGraphicsPage} on -page~\pageref{ugAppGraphicsPage} -\item ugIntProgDrawingPage \ref{ugIntProgDrawingPage} on -page~\pageref{ugIntProgDrawingPage} -\item ugIntProgRibbonPage \ref{ugIntProgRibbonPage} on -page~\pageref{ugIntProgRibbonPage} -\item ugIntProgColorPage \ref{ugIntProgColorPage} on -page~\pageref{ugIntProgColorPage} -\item ugIntProgPLCPage \ref{ugIntProgPLCPage} on -page~\pageref{ugIntProgPLCPage} -\item ugIntProgColorArrPage \ref{ugIntProgColorArrPage} on -page~\pageref{ugIntProgColorArrPage} -\item ugIntProgVecFieldsPage \ref{ugIntProgVecFieldsPage} on -page~\pageref{ugIntProgVecFieldsPage} -\item ugIntProgCompFunsPage \ref{ugIntProgCompFunsPage} on -page~\pageref{ugIntProgCompFunsPage} -\item ugIntProgFunctionsPage \ref{ugIntProgFunctionsPage} on -page~\pageref{ugIntProgFunctionsPage} -\item ugIntProgNewtonPage \ref{ugIntProgNewtonPage} on -page~\pageref{ugIntProgNewtonPage} -\end{itemize} -\index{pages!ugIntProgPage!ug10.ht} -\index{ug10.ht!pages!ugIntProgPage} -\index{ugIntProgPage!ug10.ht!pages} -<>= -\begin{page}{ugIntProgPage}{10. Interactive Programming} -\beginscroll - -Programming in the interpreter is easy. -So is the use of Axiom's graphics facility. -Both are rather flexible and allow you to use them for many -interesting applications. -However, both require learning some basic ideas and skills. - -All graphics examples in the \Gallery{} section are either -produced directly by interactive commands or by interpreter -programs. -Four of these programs are introduced here. -By the end of this chapter you will know enough about graphics and -programming in the interpreter to not only understand all these -examples, but to tackle interesting and difficult problems on your -own. -\downlink{``\ugAppGraphicsTitle''}{ugAppGraphicsPage} in -Appendix \ugAppGraphicsNumber\ignore{ugAppGraphics} lists -all the remaining commands and -programs used to create these images. - -\beginmenu - \menudownlink{{10.1. Drawing Ribbons Interactively}}{ugIntProgDrawingPage} - \menudownlink{{10.2. A Ribbon Program}}{ugIntProgRibbonPage} - \menudownlink{{10.3. Coloring and Positioning Ribbons}}{ugIntProgColorPage} - \menudownlink{{10.4. Points, Lines, and Curves}}{ugIntProgPLCPage} - \menudownlink{{10.5. A Bouquet of Arrows}}{ugIntProgColorArrPage} - \menudownlink{{10.6. Drawing Complex Vector Fields}} -{ugIntProgVecFieldsPage} - \menudownlink{{10.7. Drawing Complex Functions}}{ugIntProgCompFunsPage} - \menudownlink{{10.8. Functions Producing Functions}} -{ugIntProgFunctionsPage} - \menudownlink{{10.9. Automatic Newton Iteration Formulas}} -{ugIntProgNewtonPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntProgDrawingTitle}{Drawing Ribbons Interactively} -\newcommand{\ugIntProgDrawingNumber}{10.1.} - -@ -\subsection{10.1. Drawing Ribbons Interactively} -\label{ugIntProgDrawingPage} -\begin{itemize} -\item ugGraphPage \ref{ugGraphPage} on -page~\pageref{ugGraphPage} -\end{itemize} -\index{pages!ugIntProgDrawingPage!ug10.ht} -\index{ug10.ht!pages!ugIntProgDrawingPage} -\index{ugIntProgDrawingPage!ug10.ht!pages} -<>= -\begin{page}{ugIntProgDrawingPage}{10.1. Drawing Ribbons Interactively} -\beginscroll -% - -We begin our discussion of interactive graphics with the creation -of a useful facility: plotting ribbons of two-graphs in -three-space. -Suppose you want to draw the \twodim{} graphs of \smath{n} -functions \texht{$f_i(x), 1 \leq i \leq n,$}{\spad{f_i(x), 1 <= i -<= 5,}} all over some fixed range of \smath{x}. -One approach is to create a \twodim{} graph for each one, then -superpose one on top of the other. -What you will more than likely get is a jumbled mess. -Even if you make each function a different color, the result is -likely to be confusing. - -A better approach is to display each of the \smath{f_i(x)} in three -dimensions as a ``ribbon'' of some appropriate width along the -\smath{y}-direction, laying down each ribbon next to the -previous one. -A ribbon is simply a function of \smath{x} and \smath{y} depending -only on \smath{x.} - -We illustrate this for \smath{f_i(x)} defined as simple powers of -\smath{x} for \smath{x} ranging between \smath{-1} and \smath{1}. - -\psXtc{ -Draw the ribbon for \texht{$z = x^2$}{\spad{z=x ** 2}}. -}{ -\graphpaste{draw(x**2,x=-1..1,y=0..1)} -}{ -\epsffile[0 0 295 295]{../ps/ribbon1.ps} -} - -Now that was easy! -What you get is a ``wire-mesh'' rendition of the ribbon. -That's fine for now. -Notice that the mesh-size is small in both the \smath{x} and the -\smath{y} directions. -Axiom normally computes points in both these directions. -This is unnecessary. -One step is all we need in the \smath{y}-direction. -To have Axiom economize on \spad{y}-points, we re-draw the -ribbon with option \spad{var2Steps == 1}. - -\psXtc{ -Re-draw the ribbon, but with option \spad{var2Steps == 1} -so that only \spad{1} step is computed in the -\smath{y} direction. -}{ -\graphpaste{vp := draw(x**2,x=-1..1,y=0..1,var2Steps==1) \bound{d1}} -}{ -\epsffile[0 0 295 295]{../ps/ribbon2.ps} -} - -The operation has created a viewport, that is, a graphics window -on your screen. -We assigned the viewport to \spad{vp} and now we manipulate -its contents. - - -Graphs are objects, like numbers and algebraic expressions. -You may want to do some experimenting with graphs. -For example, say +\subsection{Asp80 Example Code} +\label{Asp80ExampleCode} +\index{pages!Asp80ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp80ExampleCode} +\index{Asp80ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp80ExampleCode}{Asp80 Example Code} \begin{verbatim} -showRegion(vp, "on") + SUBROUTINE BDYVAL(XL,XR,ELAM,YL,YR) + DOUBLE PRECISION ELAM,XL,YL(3),XR,YR(3) + YL(1)=XL + YL(2)=2.0D0 + YR(1)=1.0D0 + YR(2)=-1.0D0*DSQRT(XR+(-1.0D0*ELAM)) + RETURN + END \end{verbatim} -to put a bounding box around the ribbon. -Try it! -Issue \spad{rotate(vp, -45, 90)} to rotate the -figure \smath{-45} longitudinal degrees and \smath{90} latitudinal -degrees. - -\psXtc{ -Here is a different rotation. -This turns the graph so you can view it along the \smath{y}-axis. -}{ -\spadpaste{rotate(vp, 0, -90)\bound{d3}\free{d1}} -}{ -\epsffile[0 0 295 295]{../ps/ribbon2r.ps} -} - -There are many other things you can do. -In fact, most everything you can do interactively using the -\threedim{} control panel (such as translating, zooming, resizing, -coloring, perspective and lighting selections) can also be done -directly by operations (see \downlink{``\ugGraphTitle''}{ugGraphPage} -in Chapter \ugGraphNumber\ignore{ugGraph} for more details). - -When you are done experimenting, say \spad{reset(vp)} to restore the -picture to its original position and settings. - - -Let's add another ribbon to our picture---one -for \texht{$x^3$}{\spad{x**3}}. -Since \smath{y} ranges from \smath{0} to \smath{1} for the -first ribbon, now let \smath{y} range from \smath{1} to -\smath{2.} -This puts the second ribbon next to the first one. - -How do you add a second ribbon to the viewport? -One method is -to extract the ``space'' component from the -viewport using the operation -\spadfunFrom{subspace}{ThreeDimensionalViewport}. -You can think of the space component as the object inside the -window (here, the ribbon). -Let's call it \spad{sp}. -To add the second ribbon, you draw the second ribbon using the -option \spad{space == sp}. - -\xtc{ -Extract the space component of \spad{vp}. -}{ -\spadpaste{sp := subspace(vp)\bound{d5}\free{d1}} -} - -\psXtc{ -Add the ribbon for -\texht{$x^3$}{\spad{x**3}} alongside that for -\texht{$x^2$}{\spad{x**2}}. -}{ -\graphpaste{vp := draw(x**3,x=-1..1,y=1..2,var2Steps==1, space==sp)\bound{d6}\free{d5}} -}{ -\epsffile[0 0 295 295]{../ps/ribbons.ps} -} - -Unless you moved the original viewport, the new viewport covers -the old one. -You might want to check that the old object is still there by -moving the top window. - -Let's show quadrilateral polygon outlines on the ribbons and then -enclose the ribbons in a box. - -\psXtc{ -Show quadrilateral polygon outlines. -}{ -\spadpaste{drawStyle(vp,"shade");outlineRender(vp,"on")\bound{d10}\free{d6}} -}{ -\epsffile[0 0 295 295]{../ps/ribbons2.ps} -} -\psXtc{ -Enclose the ribbons in a box. -}{ -\spadpaste{rotate(vp,20,-60); showRegion(vp,"on")\bound{d11}\free{d10}} -}{ -\epsffile[0 0 295 295]{../ps/ribbons2b.ps} -} - -This process has become tedious! -If we had to add two or three more ribbons, we would have to -repeat the above steps several more times. -It is time to write an interpreter program to help us take care of -the details. - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugIntProgRibbonTitle}{A Ribbon Program} -\newcommand{\ugIntProgRibbonNumber}{10.2.} - -@ -\subsection{10.2. A Ribbon Program} -\label{ugIntProgRibbonPage} -\begin{itemize} -\item ugUserPage \ref{ugUserPage} on -page~\pageref{ugUserPage} -\item ugLangBlocksPage \ref{ugLangBlocksPage} on -page~\pageref{ugLangBlocksPage} -\end{itemize} -\index{pages!ugIntProgRibbonPage!ug10.ht} -\index{ug10.ht!pages!ugIntProgRibbonPage} -\index{ugIntProgRibbonPage!ug10.ht!pages} -<>= -\begin{page}{ugIntProgRibbonPage}{10.2. A Ribbon Program} -\beginscroll -% - -The above approach creates a new viewport for each additional -ribbon. -A better approach is to build one object composed of all ribbons -before creating a viewport. -To do this, use \spadfun{makeObject} rather than \spadfun{draw}. -The operations have similar formats, but -\spadfun{draw} returns a viewport and -\spadfun{makeObject} returns a space object. - -We now create a function \userfun{drawRibbons} of two arguments: -\spad{flist}, a list of formulas for the ribbons you want to draw, -and \spad{xrange}, the range over which you want them drawn. -Using this function, you can just say +\subsection{Asp9 Example Code} +\label{Asp9ExampleCode} +\index{pages!Asp9ExampleCode!aspex.ht} +\index{aspex.ht!pages!Asp9ExampleCode} +\index{Asp9ExampleCode!aspex.ht!pages} +<>= +\begin{page}{Asp9ExampleCode}{Asp9 Example Code} \begin{verbatim} -drawRibbons([x**2, x**3], x=-1..1) + DOUBLE PRECISION FUNCTION G(X,Y) + DOUBLE PRECISION X,Y(*) + G=X+Y(1) + RETURN + END \end{verbatim} -to do all of the work required in the last section. -Here is the \userfun{drawRibbons} program. -Invoke your favorite editor and create a file called {\bf ribbon.input} -containing the following program. - -\beginImportant - -\noindent -{\tt 1.\ \ \ drawRibbons(flist,\ xrange)\ ==}\newline -{\tt 2.\ \ \ \ \ sp\ :=\ createThreeSpace()}\newline -{\tt 3.\ \ \ \ \ y0\ :=\ 0}\newline -{\tt 4.\ \ \ \ \ for\ f\ in\ flist\ repeat}\newline -{\tt 5.\ \ \ \ \ \ \ makeObject(f,\ xrange,\ y=y0..y0+1,\ }\newline -{\tt 6.\ \ \ \ \ \ \ \ \ \ space==sp,\ var2Steps\ ==\ 1)}\newline -{\tt 7.\ \ \ \ \ \ \ y0\ :=\ y0\ +\ 1}\newline -{\tt 8.\ \ \ \ \ vp\ :=\ makeViewport3D(sp,\ "Ribbons")}\newline -{\tt 9.\ \ \ \ \ drawStyle(vp,\ "shade")}\newline -{\tt 10.\ \ \ \ outlineRender(vp,\ "on")}\newline -{\tt 11.\ \ \ \ showRegion(vp,"on")}\newline -{\tt 12.\ \ \ \ n\ :=\ \#\ flist}\newline -{\tt 13.\ \ \ \ zoom(vp,n,1,n)}\newline -{\tt 14.\ \ \ \ rotate(vp,0,75)}\newline -{\tt 15.\ \ \ \ vp}\newline -\caption{The first \protect\pspadfun{drawRibbons} function.}\label{fig-ribdraw1} -\endImportant - -Here are some remarks on the syntax used in the \pspadfun{drawRibbons} -function (consult \downlink{``\ugUserTitle''}{ugUserPage} in Chapter -\ugUserNumber\ignore{ugUser} for more details). Unlike most other -programming languages which use semicolons, parentheses, or {\it -begin}--{\it end} brackets to delineate the structure of programs, the -structure of an Axiom program is determined by indentation. The first -line of the function definition always begins in column 1. All other -lines of the function are indented with respect to the first line and -form a \spadgloss{pile} (see -\downlink{``\ugLangBlocksTitle''}{ugLangBlocksPage} in Section -\ugLangBlocksNumber\ignore{ugLangBlocks}). - -The definition of \userfun{drawRibbons} consists of a pile of -expressions to be executed one after another. Each expression of the -pile is indented at the same level. Lines 4-7 designate one single -expression: since lines 5-7 are indented with respect to the others, -these lines are treated as a continuation of line 4. Also since lines -5 and 7 have the same indentation level, these lines designate a pile -within the outer pile. - -The last line of a pile usually gives the value returned by the pile. -Here it is also the value returned by the function. Axiom knows this -is the last line of the function because it is the last line of the -file. In other cases, a new expression beginning in column one -signals the end of a function. - -The line \spad{drawStyle(vp,"shade")} is given after the viewport has -been created to select the draw style. We have also used the -\spadfunFrom{zoom}{ThreeDimensionalViewport} option. Without the -zoom, the viewport region would be scaled equally in all three -coordinate directions. - -Let's try the function \userfun{drawRibbons}. -First you must read the file to give Axiom the function definition. - -\xtc{ -Read the input file. -}{ -\spadpaste{)read ribbon \bound{s0}} -} -\psXtc{ -Draw ribbons for \texht{$x, x^2,\dots, x^5$}{x, x**2,...,x**5} -for \texht{$-1 \leq x \leq 1$}{-1 <= x <= 1} -}{ -\graphpaste{drawRibbons([x**i for i in 1..5],x=-1..1) \free{s0}} -}{ -\epsffile[0 0 295 295]{../ps/ribbons5.ps} -} - - -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugIntProgColorTitle}{Coloring and Positioning Ribbons} -\newcommand{\ugIntProgColorNumber}{10.3.} - -@ -\subsection{10.3. Coloring and Positioning Ribbons} -\label{ugIntProgColorPage} -\index{pages!ugIntProgColorPage!ug10.ht} -\index{ug10.ht!pages!ugIntProgColorPage} -\index{ugIntProgColorPage!ug10.ht!pages} -<>= -\begin{page}{ugIntProgColorPage}{10.3. Coloring and Positioning Ribbons} -\beginscroll -% - -Before leaving the ribbon example, we make two improvements. -Normally, the color given to each point in the space is a -function of its height within a bounding box. -The points at the bottom of the -box are red, those at the top are purple. - -To change the normal coloring, you can give -an option \spad{colorFunction == {\it function}}. -When Axiom goes about displaying the data, it -determines the range of colors used for all points within the box. -Axiom then distributes these numbers uniformly over the number of hues. -Here we use the simple color function -\texht{$(x,y) \mapsto i$}{(x,y) +-> i} for the -\eth{\smath{i}} ribbon. - -Also, we add an argument \spad{yrange} so you can give the range of -\spad{y} occupied by the ribbons. -For example, if the \spad{yrange} is given as -\spad{y=0..1} and there are \smath{5} ribbons to be displayed, each -ribbon would have width \smath{0.2} and would appear in the -range \texht{$0 \leq y \leq 1$}{\spad{0 <= y <= 1}}. - -Refer to lines 4-9. -Line 4 assigns to \spad{yVar} the variable part of the -\spad{yrange} (after all, it need not be \spad{y}). -Suppose that \spad{yrange} is given as \spad{t = a..b} where \spad{a} and -\spad{b} have numerical values. -Then line 5 assigns the value of \spad{a} to the variable \spad{y0}. -Line 6 computes the width of the ribbon by dividing the difference of -\spad{a} and \spad{b} by the number, \spad{num}, of ribbons. -The result is assigned to the variable \spad{width}. -Note that in the for-loop in line 7, we are iterating in parallel; it is -not a nested loop. - -\beginImportant - -\noindent -{\tt 1.\ \ \ drawRibbons(flist,\ xrange,\ yrange)\ ==}\newline -{\tt 2.\ \ \ \ \ sp\ :=\ createThreeSpace()}\newline -{\tt 3.\ \ \ \ \ num\ :=\ \#\ flist}\newline -{\tt 4.\ \ \ \ \ yVar\ :=\ variable\ yrange}\newline -{\tt 5.\ \ \ \ \ y0:Float\ \ \ \ :=\ lo\ segment\ yrange}\newline -{\tt 6.\ \ \ \ \ width:Float\ :=\ (hi\ segment\ yrange\ -\ y0)/num}\newline -{\tt 7.\ \ \ \ \ for\ f\ in\ flist\ for\ color\ in\ 1..num\ repeat}\newline -{\tt 8.\ \ \ \ \ \ \ makeObject(f,\ xrange,\ yVar\ =\ y0..y0+width,}\newline -{\tt 9.\ \ \ \ \ \ \ \ \ var2Steps\ ==\ 1,\ colorFunction\ ==\ (x,y)\ +->\ color,\ \_}\newline -{\tt 10.\ \ \ \ \ \ \ \ space\ ==\ sp)}\newline -{\tt 11.\ \ \ \ \ \ y0\ :=\ y0\ +\ width}\newline -{\tt 12.\ \ \ \ vp\ :=\ makeViewport3D(sp,\ "Ribbons")}\newline -{\tt 13.\ \ \ \ drawStyle(vp,\ "shade")}\newline -{\tt 14.\ \ \ \ outlineRender(vp,\ "on")}\newline -{\tt 15.\ \ \ \ showRegion(vp,\ "on")}\newline -{\tt 16.\ \ \ \ vp}\newline -\caption{The final \protect\pspadfun{drawRibbons} function.}\label{fig-ribdraw2} -\endImportant - - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntProgPLCTitle}{Points, Lines, and Curves} -\newcommand{\ugIntProgPLCNumber}{10.4.} - -@ -\subsection{10.4. Points, Lines, and Curves} -\label{ugIntProgPLCPage} -\index{pages!ugIntProgPLCPage!ug10.ht} -\index{ug10.ht!pages!ugIntProgPLCPage} -\index{ugIntProgPLCPage!ug10.ht!pages} -<>= -\begin{page}{ugIntProgPLCPage}{10.4. Points, Lines, and Curves} -\beginscroll -% -What you have seen so far is a high-level program using the -graphics facility. -We now turn to the more basic notions of points, lines, and curves -in \threedim{} graphs. -These facilities use small floats (objects -of type \spadtype{DoubleFloat}) for data. -Let us first give names to the small float values \smath{0} and -\smath{1}. -\xtc{ -The small float 0. -}{ -\spadpaste{zero := 0.0@DFLOAT \bound{d1}} -} -\xtc{ -The small float 1. -}{ -\spadpaste{one := 1.0@DFLOAT \bound{d2}} -} -The \spadSyntax{@} sign means ``of the type.'' Thus \spad{zero} is -\smath{0.0} of the type \spadtype{DoubleFloat}. -You can also say \spad{0.0::DFLOAT}. - -Points can have four small float components: \smath{x, y, z} coordinates and an -optional color. -A ``curve'' is simply a list of points connected by straight line -segments. -\xtc{ -Create the point \spad{origin} with color zero, that is, the lowest color -on the color map. -}{ -\spadpaste{origin := point [zero,zero,zero,zero] \free{d1}\bound{d3}} -} -\xtc{ -Create the point \spad{unit} with color zero. -}{ -\spadpaste{unit := point [one,one,one,zero] \free{d1 d2}\bound{d4}} -} -\xtc{ -Create the curve (well, here, a line) from -\spad{origin} to \spad{unit}. -}{ -\spadpaste{line := [origin, unit] \free{d3 d4} \bound{d5}} -} - -We make this line segment into an arrow by adding an arrowhead. -The arrowhead extends to, -say, \spad{p3} on the left, and to, say, \spad{p4} on the right. -To describe an arrow, you tell Axiom to draw the two curves -\spad{[p1, p2, p3]} and \spad{[p2, p4].} -We also decide through experimentation on -values for \spad{arrowScale}, the ratio of the size of -the arrowhead to the stem of the arrow, and \spad{arrowAngle}, -the angle between the arrowhead and the arrow. - -Invoke your favorite editor and create -an input file called {\bf arrows.input}. -This input file first defines the values of -%\spad{origin},\spad{unit}, -\spad{arrowAngle} and \spad{arrowScale}, then -defines the function \userfun{makeArrow}\texht{$(p_1, p_2)$}{(p1, p2)} to -draw an arrow from point \texht{$p_1$}{p1} to \texht{$p_2$}{p2}. - -\beginImportant - -\noindent -%\xmpLine{origin := point [0.0@DFLOAT,0.0@DFLOAT,0.0@DFLOAT,0.0@DFLOAT]}{The point 0 with color 0.} -%\xmpLine{unit := point [1.0@DFLOAT,1.0@DFLOAT,1.0@DFLOAT,0.0@DFLOAT]}{A second point with color 0.} -%\xmpLine{}{} -{\tt 1.\ \ \ arrowAngle\ :=\ \%pi-\%pi/10.0@DFLOAT}\newline -{\tt 2.\ \ \ arrowScale\ :=\ 0.2@DFLOAT}\newline -{\tt 3.\ \ \ }\newline -{\tt 4.\ \ \ makeArrow(p1,\ p2)\ ==}\newline -{\tt 5.\ \ \ \ \ delta\ :=\ p2\ -\ p1}\newline -{\tt 6.\ \ \ \ \ len\ :=\ arrowScale\ *\ length\ delta}\newline -{\tt 7.\ \ \ \ \ theta\ :=\ atan(delta.1,\ delta.2)}\newline -{\tt 8.\ \ \ \ \ c1\ :=\ len*cos(theta\ +\ arrowAngle)}\newline -{\tt 9.\ \ \ \ \ s1\ :=\ len*sin(theta\ +\ arrowAngle)}\newline -{\tt 10.\ \ \ \ c2\ :=\ len*cos(theta\ -\ arrowAngle)}\newline -{\tt 11.\ \ \ \ s2\ :=\ len*sin(theta\ -\ arrowAngle)}\newline -{\tt 12.\ \ \ \ z\ \ :=\ p2.3*(1\ -\ arrowScale)}\newline -{\tt 13.\ \ \ \ p3\ :=\ point\ [p2.1\ +\ c1,\ p2.2\ +\ s1,\ z,\ p2.4]}\newline -{\tt 14.\ \ \ \ p4\ :=\ point\ [p2.1\ +\ c2,\ p2.2\ +\ s2,\ z,\ p2.4]}\newline -{\tt 15.\ \ \ \ [[p1,\ p2,\ p3],\ [p2,\ p4]]}\newline -\endImportant - -Read the file and then create -an arrow from the point \spad{origin} to the point \spad{unit}. -\xtc{ -Read the input file defining \userfun{makeArrow}. -}{ -\spadpaste{)read arrows\bound{v1}} -} -\xtc{ -Construct the arrow (a list of two curves). -}{ -\spadpaste{arrow := makeArrow(origin,unit)\bound{v2}\free{v1 d3 d4}} -} -\xtc{ -Create an empty object \spad{sp} of type \spad{ThreeSpace}. -}{ -\spadpaste{sp := createThreeSpace()\bound{c1}} -} -\xtc{ -Add each curve of the arrow to the space \spad{sp}. -}{ -\spadpaste{for a in arrow repeat sp := curve(sp,a)\bound{v3}\free{v2}\free{c1}} -} -\psXtc{ -Create a \threedim{} viewport containing that space. -}{ -\graphpaste{vp := makeViewport3D(sp,"Arrow")\bound{v4}\free{v3}} -}{ -\epsffile[0 0 295 295]{../ps/arrow.ps} -} -\psXtc{ -Here is a better viewing angle. -}{ -\spadpaste{rotate(vp,200,-60)\bound{v5}\free{v4}} -}{ -\epsffile[0 0 295 295]{../ps/arrowr.ps} -} - - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntProgColorArrTitle}{A Bouquet of Arrows} -\newcommand{\ugIntProgColorArrNumber}{10.5.} - -@ -\subsection{10.5. A Bouquet of Arrows} -\label{ugIntProgColorArrPage} -\index{pages!ugIntProgColorArrPage!ug10.ht} -\index{ug10.ht!pages!ugIntProgColorArrPage} -\index{ugIntProgColorArrPage!ug10.ht!pages} -<>= -\begin{page}{ugIntProgColorArrPage}{10.5. A Bouquet of Arrows} -\beginscroll - -%Axiom gathers up all the points of a graph and looks at the range -%of color values given as integers. -%If theses color values range from a minimum value of \spad{a} to a maximum -%value of \spad{b}, then the \spad{a} values are colored red (the -%lowest color in our spectrum), and \spad{b} values are colored -%purple (the highest color), and those in the middle are colored -%green. -%When all the points are the same color as above, Axiom -%chooses green. - -Let's draw a ``bouquet'' of arrows. -Each arrow is identical. The arrowheads are -uniformly placed on a circle parallel to the \smath{xy}-plane. -Thus the position of each arrow differs only -by the angle \texht{$\theta$}{theta}, -\texht{$0 \leq \theta < 2\pi$}{\spad{0 <= theta < 2*\%pi}}, -between the arrow and -the \smath{x}-axis on the \smath{xy}-plane. - -Our bouquet is rather special: each arrow has a different -color (which won't be evident here, unfortunately). -This is arranged by letting the color of each successive arrow be -denoted by \texht{$\theta$}{theta}. -In this way, the color of arrows ranges from red to green to violet. -Here is a program to draw a bouquet of \smath{n} arrows. - -\beginImportant - -\noindent -{\tt 1.\ \ \ drawBouquet(n,title)\ ==}\newline -{\tt 2.\ \ \ \ \ angle\ :=\ 0.0@DFLOAT}\newline -{\tt 3.\ \ \ \ \ sp\ :=\ createThreeSpace()}\newline -{\tt 4.\ \ \ \ \ for\ i\ in\ 0..n-1\ repeat}\newline -{\tt 5.\ \ \ \ \ \ \ start\ :=\ point\ [0.0@DFLOAT,0.0@DFLOAT,0.0@DFLOAT,angle]\ }\newline -{\tt 6.\ \ \ \ \ \ \ end\ \ \ :=\ point\ [cos\ angle,\ sin\ angle,\ 1.0@DFLOAT,\ angle]}\newline -{\tt 7.\ \ \ \ \ \ \ arrow\ :=\ makeArrow(start,end)}\newline -{\tt 8.\ \ \ \ \ \ \ for\ a\ in\ makeArrow(start,end)\ repeat\ }\newline -{\tt 9.\ \ \ \ \ \ \ \ \ curve(sp,a)}\newline -{\tt 10.\ \ \ \ \ \ angle\ :=\ angle\ +\ 2*\%pi/n}\newline -{\tt 11.\ \ \ \ makeViewport3D(sp,title)}\newline -\endImportant - -\xtc{ -Read the input file. -}{ -\spadpaste{)read bouquet\bound{b1}} -} -\psXtc{ -A bouquet of a dozen arrows. -}{ -\graphpaste{drawBouquet(12,"A Dozen Arrows")\free{b1}} -}{ -\epsffile[0 0 295 295]{../ps/bouquet.ps} -} -\ - -%\head{section}{Diversion: When Things Go Wrong}{ugIntProgDivTwo} -% -%Up to now, if you have typed in all the programs exactly as they are in -%the book, you have encountered no errors. -%In practice, however, it is easy to make mistakes. -%Computers are unforgiving: your program must be letter-for-letter correct -%or you will encounter some error. -% -%One thing that can go wrong is that you can create a syntactically -%incorrect program. -%As pointed out in Diversion 1, the meaning of Axiom programs is -%affected by indentation. -% -%The Axiom parser will ensure that all parentheses, brackets, and -%braces balance, and that commas and operators appear in the correct -%context. -%For example, change line ?? -%to ?? -%and run. -% -%A common mistake is to misspell an identifier or operation name. -%These are generally easy to spot since the interpreter will tell you the -%name of the operation together with the type and number of arguments which -%it is trying to find. -% -%Another mistake is to either to omit an argument or to give too many. -%Again Axiom will notify you of the offending operation. -% -%Indentation makes your programs more readable. -%However there are several ways to create a syntactically valid program. -%A most common problem occurs when a line is either indented improperly. -%% either or what? -%If this is a first line of a pile, then all the other lines will act as an -%inner pile to the first line. -%If it is a line of the pile other than the first line, Axiom then -%thinks that this line is a continuation of the previous line. -%More frequently than not, a syntactically correct expression is created. -%Almost never however will this be a semantically correct. -%Only when the program is run will an error be discovered. -%For example, change line ?? -%to ?? -%and run. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntProgVecFieldsTitle}{Drawing Complex Vector Fields} -\newcommand{\ugIntProgVecFieldsNumber}{10.6.} - -@ -\subsection{10.6. Drawing Complex Vector Fields} -\label{ugIntProgVecFieldsPage} -\index{pages!ugIntProgVecFieldsPage!ug10.ht} -\index{ug10.ht!pages!ugIntProgVecFieldsPage} -\index{ugIntProgVecFieldsPage!ug10.ht!pages} -<>= -\begin{page}{ugIntProgVecFieldsPage}{10.6. Drawing Complex Vector Fields} -\beginscroll - -We now put our arrows to good use drawing complex vector fields. -These vector fields give a representation of complex-valued -functions of complex variables. -Consider a Cartesian coordinate grid of points \smath{(x, y)} in -the plane, and some complex-valued function \smath{f} defined on -this grid. -At every point on this grid, compute the value of \texht{$f(x + -iy)$}{f(x + y*\%i)} and call it \smath{z}. -Since \smath{z} has both a real and imaginary value for a given -\smath{(x,y)} grid point, there are four dimensions to plot. -What do we do? -We represent the values of \smath{z} by arrows planted at each -grid point. -Each arrow represents the value of \smath{z} in polar coordinates -\texht{$(r,\theta)$}{(r, theta)}. -The length of the arrow is proportional to \smath{r}. -Its direction is given by \texht{$\theta$}{theta}. - -The code for drawing vector fields is in the file {\bf vectors.input}. -We discuss its contents from top to bottom. - -Before showing you the code, we have two small -matters to take care of. -First, what if the function has large spikes, say, ones that go off -to infinity? -We define a variable \spad{clipValue} for this purpose. When -\spad{r} exceeds the value of \spad{clipValue}, then the value of -\spad{clipValue} is used instead of that for \spad{r}. -For convenience, we define a function \spad{clipFun(x)} which uses -\spad{clipValue} to ``clip'' the value of \spad{x}. - -% -\beginImportant - -\noindent -{\tt 1.\ \ \ clipValue\ :\ DFLOAT\ :=\ 6}\newline -{\tt 2.\ \ \ clipFun(x)\ ==\ min(max(x,-clipValue),clipValue)}\newline -\endImportant - -Notice that we identify \spad{clipValue} as a small float but do -not declare the type of the function \userfun{clipFun}. -As it turns out, \userfun{clipFun} is called with a -small float value. -This declaration ensures that \userfun{clipFun} never does a -conversion when it is called. - -The second matter concerns the possible ``poles'' of a -function, the actual points where the spikes have infinite -values. -Axiom uses normal \spadtype{DoubleFloat} arithmetic which -does not directly handle infinite values. -If your function has poles, you must adjust your step size to -avoid landing directly on them (Axiom calls \spadfun{error} -when asked to divide a value by \axiom{0}, for example). - -We set the variables \spad{realSteps} and \spad{imagSteps} to -hold the number of steps taken in the real and imaginary -directions, respectively. -Most examples will have ranges centered around the origin. -To avoid a pole at the origin, the number of points is taken -to be odd. - -\beginImportant - -\noindent -{\tt 1.\ \ \ realSteps:\ INT\ :=\ 25}\newline -{\tt 2.\ \ \ imagSteps:\ INT\ :=\ 25}\newline -{\tt 3.\ \ \ )read\ arrows}\newline -\endImportant - -Now define the function \userfun{drawComplexVectorField} to draw the arrows. -It is good practice to declare the type of the main function in -the file. -This one declaration is usually sufficient to ensure that other -lower-level functions are compiled with the correct types. - -\beginImportant - -\noindent -{\tt 4.\ \ \ C\ :=\ Complex\ DoubleFloat}\newline -{\tt 5.\ \ \ S\ :=\ Segment\ DoubleFloat}\newline -{\tt 6.\ \ \ drawComplexVectorField:\ (C\ ->\ C,\ S,\ S)\ ->\ VIEW3D}\newline -\endImportant - -The first argument is a function mapping complex small floats into -complex small floats. -The second and third arguments give the range of real and -imaginary values as segments like \spad{a..b}. -The result is a \threedim{} viewport. -Here is the full function definition: - -\beginImportant - -\noindent -{\tt 7.\ \ \ drawComplexVectorField(f,\ realRange,imagRange)\ ==}\newline -{\tt 8.\ \ \ \ \ delReal\ :=\ (hi(realRange)-lo(realRange))/realSteps}\newline -{\tt 9.\ \ \ \ \ delImag\ :=\ (hi(imagRange)-lo(imagRange))/imagSteps}\newline -{\tt 10.\ \ \ \ sp\ :=\ createThreeSpace()}\newline -{\tt 11.\ \ \ \ real\ :=\ lo(realRange)}\newline -{\tt 12.\ \ \ \ for\ i\ in\ 1..realSteps+1\ repeat}\newline -{\tt 13.\ \ \ \ \ \ imag\ :=\ lo(imagRange)}\newline -{\tt 14.\ \ \ \ \ \ for\ j\ in\ 1..imagSteps+1\ repeat}\newline -{\tt 15.\ \ \ \ \ \ \ \ z\ :=\ f\ complex(real,imag)}\newline -{\tt 16.\ \ \ \ \ \ \ \ arg\ :=\ argument\ z}\newline -{\tt 17.\ \ \ \ \ \ \ \ len\ :=\ clipFun\ sqrt\ norm\ z}\newline -{\tt 18.\ \ \ \ \ \ \ \ p1\ :=\ \ point\ [real,\ imag,\ 0.0@DFLOAT,\ arg]}\newline -{\tt 19.\ \ \ \ \ \ \ \ scaleLen\ :=\ delReal\ *\ len}\newline -{\tt 20.\ \ \ \ \ \ \ \ p2\ :=\ point\ [p1.1\ +\ scaleLen*cos(arg),}\newline -{\tt 21.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ p1.2\ +\ scaleLen*sin(arg),0.0@DFLOAT,\ arg]}\newline -{\tt 22.\ \ \ \ \ \ \ \ arrow\ :=\ makeArrow(p1,\ p2)}\newline -{\tt 23.\ \ \ \ \ \ \ \ for\ a\ in\ arrow\ repeat\ curve(sp,\ a)}\newline -{\tt 24.\ \ \ \ \ \ \ \ imag\ :=\ imag\ +\ delImag}\newline -{\tt 25.\ \ \ \ \ \ real\ :=\ real\ +\ delReal}\newline -{\tt 26.\ \ \ \ makeViewport3D(sp,\ "Complex\ Vector\ Field")}\newline -\endImportant - -As a first example, let us draw \spad{f(z) == sin(z)}. -There is no need to create a user function: just pass the -\spadfunFrom{sin}{Complex DoubleFloat} from \spadtype{Complex DoubleFloat}. -\xtc{ -Read the file. -}{ -\spadpaste{)read vectors \bound{readVI}} -} -\psXtc{ -Draw the complex vector field of \spad{sin(x)}. -}{ -\graphpaste{drawComplexVectorField(sin,-2..2,-2..2) \free{readVI}} -}{ -\epsffile[0 0 295 295]{../ps/vectorsin.ps} -} -\ - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntProgCompFunsTitle}{Drawing Complex Functions} -\newcommand{\ugIntProgCompFunsNumber}{10.7.} - -@ -\subsection{10.7. Drawing Complex Functions} -\label{ugIntProgCompFunsPage} -\begin{itemize} -\item ugGraphPage \ref{ugGraphPage} on -page~\pageref{ugGraphPage} -\end{itemize} -\index{pages!ugIntProgCompFunsPage!ug10.ht} -\index{ug10.ht!pages!ugIntProgCompFunsPage} -\index{ugIntProgCompFunsPage!ug10.ht!pages} -<>= -\begin{page}{ugIntProgCompFunsPage}{10.7. Drawing Complex Functions} -\beginscroll - -Here is another way to graph a complex function of complex arguments. -For each complex value \smath{z}, compute \smath{f(z)}, again -expressing the value in polar coordinates \smath{(r,\theta{})}. We -draw the complex valued function, again considering the -\smath{(x,y)}-plane as the complex plane, using \smath{r} as the -height (or \smath{z}-coordinate) and \smath{\theta} as the color. -This is a standard plot---we learned how to do this in -\downlink{``\ugGraphTitle''}{ugGraphPage} in Chapter -\ugGraphNumber\ignore{ugGraph}---but here we write a new program to -illustrate the creation of polygon meshes, or grids. - -Call this function \userfun{drawComplex}. -It displays the points using the ``mesh'' of points. -The function definition is in three parts. - -\beginImportant - -\noindent -{\tt 1.\ \ \ drawComplex:\ (C\ ->\ C,\ S,\ S)\ ->\ VIEW3D}\newline -{\tt 2.\ \ \ drawComplex(f,\ realRange,\ imagRange)\ ==}\newline -{\tt 3.\ \ \ \ \ delReal\ :=\ (hi(realRange)-lo(realRange))/realSteps}\newline -{\tt 4.\ \ \ \ \ delImag\ :=\ (hi(imagRange)-lo(imagRange))/imagSteps}\newline -{\tt 5.\ \ \ \ \ llp:List\ List\ Point\ DFLOAT\ :=\ []}\newline -\endImportant - -Variables \spad{delReal} and \spad{delImag} give the step sizes along -the real and imaginary directions as computed by the values of the -global variables \spad{realSteps} and \spad{imagSteps}. The mesh is -represented by a list of lists of points \spad{llp}, initially empty. -Now \spad{[ ]} alone is ambiguous, so to set this initial value you -have to tell Axiom what type of empty list it is. Next comes the loop -which builds \spad{llp}. - -\beginImportant - -\noindent -{\tt 1.\ \ \ \ \ real\ :=\ lo(realRange)}\newline -{\tt 2.\ \ \ \ \ for\ i\ in\ 1..realSteps+1\ repeat}\newline -{\tt 3.\ \ \ \ \ \ \ imag\ :=\ lo(imagRange)}\newline -{\tt 4.\ \ \ \ \ \ \ lp\ :=\ []\$(List\ Point\ DFLOAT)}\newline -{\tt 5.\ \ \ \ \ \ \ for\ j\ in\ 1..imagSteps+1\ repeat}\newline -{\tt 6.\ \ \ \ \ \ \ \ \ z\ :=\ f\ complex(real,imag)}\newline -{\tt 7.\ \ \ \ \ \ \ \ \ pt\ :=\ point\ [real,imag,\ clipFun\ sqrt\ norm\ z,\ }\newline -{\tt 8.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ argument\ z]}\newline -{\tt 9.\ \ \ \ \ \ \ \ \ lp\ :=\ cons(pt,lp)}\newline -{\tt 10.\ \ \ \ \ \ \ \ imag\ :=\ imag\ +\ delImag}\newline -{\tt 11.\ \ \ \ \ \ real\ :=\ real\ +\ delReal}\newline -{\tt 12.\ \ \ \ \ \ llp\ :=\ cons(lp,\ llp)}\newline -\endImportant - -The code consists of both an inner and outer loop. Each pass through -the inner loop adds one list \spad{lp} of points to the list of lists -of points \spad{llp}. The elements of \spad{lp} are collected in -reverse order. - -\beginImportant - -\noindent -{\tt 13.\ \ \ \ makeViewport3D(mesh(llp),\ "Complex\ Function")}\newline -\endImportant - -The operation \spadfun{mesh} then creates an object of type -\spadtype{ThreeSpace(DoubleFloat)} from the list of lists of points. -This is then passed to \spadfun{makeViewport3D} to display the -image. - -Now add this function directly to your {\bf vectors.input} file and -re-read the file using \spad{)read vectors}. We try -\userfun{drawComplex} using a user-defined function \spad{f}. - -\xtc{ -Read the file. -}{ -\spadpaste{)read vectors \bound{readVI}} -} -\xtc{ -This one has a pole at \smath{z=0}. -}{ -\spadpaste{f(z) == exp(1/z)\bound{e1}} -} -\psXtc{ -Draw it with an odd number of steps to avoid the pole. -}{ -\graphpaste{drawComplex(f,-2..2,-2..2)\free{e1 readVI}} -}{ -\epsffile[0 0 295 295]{../ps/complexexp.ps} -} -\ - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntProgFunctionsTitle}{Functions Producing Functions} -\newcommand{\ugIntProgFunctionsNumber}{10.8.} - -@ -\subsection{10.8. Functions Producing Functions} -\label{ugIntProgFunctionsPage} -\begin{itemize} -\item ugUserMakePage \ref{ugUserMakePage} on -page~\pageref{ugUserMakePage} -\end{itemize} -\index{pages!ugIntProgFunctionsPage!ug10.ht} -\index{ug10.ht!pages!ugIntProgFunctionsPage} -\index{ugIntProgFunctionsPage!ug10.ht!pages} -<>= -\begin{page}{ugIntProgFunctionsPage}{10.8. Functions Producing Functions} -\beginscroll - -In \downlink{``\ugUserMakeTitle''}{ugUserMakePage} in Section -\ugUserMakeNumber\ignore{ugUserMake}, you learned how to use the -operation \spadfun{function} to create a function from symbolic -formulas. Here we introduce a similar operation which not only -creates functions, but functions from functions. - -The facility we need is provided by the package -\spadtype{MakeUnaryCompiledFunction(E,S,T)}. This package produces a -unary (one-argument) compiled function from some symbolic data -generated by a previous computation.\footnote{% -\spadtype{MakeBinaryCompiledFunction} is available for binary -functions.} The \spad{E} tells where the symbolic data comes from; -the \spad{S} and \spad{T} give Axiom the source and target type of the -function, respectively. The compiled function produced has type -\spadsig{\spad{S}}{\spad{T}}. To produce a compiled function with -definition \spad{p(x) == expr}, call \spad{compiledFunction(expr, x)} -from this package. The function you get has no name. You must to -assign the function to the variable \spad{p} to give it that name. % -\xtc{ Do some computation. }{ \spadpaste{(x+1/3)**5\bound{p1}} } -\xtc{ Convert this to an anonymous function of \spad{x}. Assign it to -the variable \spad{p} to give the function a name. }{ \spadpaste{p := -compiledFunction(\%,x)\$MakeUnaryCompiledFunction(POLY FRAC -INT,DFLOAT,DFLOAT)\bound{p2}\free{p1}} } \xtc{ Apply the function. }{ -\spadpaste{p(sin(1.3))\bound{p3}\free{p2}} } - -For a more sophisticated application, read on. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugIntProgNewtonTitle}{Automatic Newton Iteration Formulas} -\newcommand{\ugIntProgNewtonNumber}{10.9.} - -@ -\subsection{10.9. Automatic Newton Iteration Formulas} -\label{ugIntProgNewtonPage} -\begin{itemize} -\item MappingPackageOneXmpPage \ref{MappingPackageOneXmpPage} on -page~\pageref{MappingPackageOneXmpPage} -\end{itemize} -\index{pages!ugIntProgNewtonPage!ug10.ht} -\index{ug10.ht!pages!ugIntProgNewtonPage} -\index{ugIntProgNewtonPage!ug10.ht!pages} -<>= -\begin{page}{ugIntProgNewtonPage}{10.9. Automatic Newton Iteration Formulas} -\beginscroll - -We resume -our continuing saga of arrows and complex functions. -Suppose we want to investigate the behavior of Newton's iteration function -in the complex plane. -Given a function \smath{f}, we want to find the complex values -\smath{z} such that \smath{f(z) = 0}. - -The first step is to produce a Newton iteration formula for -a given \smath{f}: -\texht{$x_{n+1} = x_n - {{f(x_n)}\over{f'(x_n)}}.$}{% -\spad{x(n+1) = x(n) - f(x(n))/f'(x(n))}.} -We represent this formula by a function \smath{g} -that performs the computation on the right-hand side, that is, -\texht{$x_{n+1} = {g}(x_n)$}{\spad{x(n+1) = g(x(n))}}. - -The type \spadtype{Expression Integer} (abbreviated \spadtype{EXPR -INT}) is used to represent general symbolic expressions in -Axiom. -To make our facility as general as possible, we assume -\smath{f} has this type. -Given \smath{f}, we want -to produce a Newton iteration function \spad{g} which, -given a complex point \texht{$x_n$}{x(n)}, delivers the next -Newton iteration point \texht{$x_{n+1}$}{x(n+1)}. - -This time we write an input file called {\bf newton.input}. -We need to import \spadtype{MakeUnaryCompiledFunction} (discussed -in the last section), call it with appropriate types, and then define -the function \spad{newtonStep} which references it. -Here is the function \spad{newtonStep}: - -\beginImportant - -\noindent -{\tt 1.\ \ \ C\ :=\ Complex\ DoubleFloat}\newline -{\tt 2.\ \ \ complexFunPack:=MakeUnaryCompiledFunction(EXPR\ INT,C,C)}\newline -{\tt 3.\ \ \ }\newline -{\tt 4.\ \ \ newtonStep(f)\ ==}\newline -{\tt 5.\ \ \ \ \ fun\ \ :=\ complexNumericFunction\ f}\newline -{\tt 6.\ \ \ \ \ deriv\ :=\ complexDerivativeFunction(f,1)}\newline -{\tt 7.\ \ \ \ \ (x:C):C\ +->}\newline -{\tt 8.\ \ \ \ \ \ \ x\ -\ fun(x)/deriv(x)}\newline -{\tt 9.\ \ \ }\newline -{\tt 10.\ \ complexNumericFunction\ f\ ==}\newline -{\tt 11.\ \ \ \ v\ :=\ theVariableIn\ f}\newline -{\tt 12.\ \ \ \ compiledFunction(f,\ v)\$complexFunPack}\newline -{\tt 13.\ \ }\newline -{\tt 14.\ \ complexDerivativeFunction(f,n)\ ==}\newline -{\tt 15.\ \ \ \ v\ :=\ theVariableIn\ f}\newline -{\tt 16.\ \ \ \ df\ :=\ D(f,v,n)}\newline -{\tt 17.\ \ \ \ compiledFunction(df,\ v)\$complexFunPack}\newline -{\tt 18.\ \ }\newline -{\tt 19.\ \ theVariableIn\ f\ ==\ \ }\newline -{\tt 20.\ \ \ \ vl\ :=\ variables\ f}\newline -{\tt 21.\ \ \ \ nv\ :=\ \#\ vl}\newline -{\tt 22.\ \ \ \ nv\ >\ 1\ =>\ error\ "Expression\ is\ not\ univariate."}\newline -{\tt 23.\ \ \ \ nv\ =\ 0\ =>\ 'x}\newline -{\tt 24.\ \ \ \ first\ vl}\newline -\endImportant - -Do you see what is going on here? -A formula \spad{f} is passed into the function \userfun{newtonStep}. -First, the function turns \spad{f} into a compiled program mapping -complex numbers into complex numbers. Next, it does the same thing -for the derivative of \spad{f}. Finally, it returns a function which -computes a single step of Newton's iteration. - -The function \userfun{complexNumericFunction} extracts the variable -from the expression \spad{f} and then turns \spad{f} into a function -which maps complex numbers into complex numbers. The function -\userfun{complexDerivativeFunction} does the same thing for the -derivative of \spad{f}. The function \userfun{theVariableIn} -extracts the variable from the expression \spad{f}, calling the function -\spadfun{error} if \spad{f} has more than one variable. -It returns the dummy variable \spad{x} if \spad{f} has no variables. - -Let's now apply \userfun{newtonStep} to the formula for computing -cube roots of two. -% -\xtc{ -Read the input file with the definitions. -}{ -\spadpaste{)read newton\bound{n1}} -} -\xtc{}{ -\spadpaste{)read vectors \bound{n1a}} -} - -\xtc{ -The cube root of two. -}{ -\spadpaste{f := x**3 - 2\bound{n2}\free{n1 n1a}} -} -\xtc{ -Get Newton's iteration formula. -}{ -\spadpaste{g := newtonStep f\bound{n3}\free{n2}} -} -\xtc{ -Let \spad{a} denote the result of -applying Newton's iteration once to the complex number \spad{1 + \%i}. -}{ -\spadpaste{a := g(1.0 + \%i)\bound{n4}\free{n3}} -} -\xtc{ -Now apply it repeatedly. How fast does it converge? -}{ -\spadpaste{[(a := g(a)) for i in 1..]\bound{n5}\free{n4}} -} -\xtc{ -Check the accuracy of the last iterate. -}{ -\spadpaste{a**3\bound{n6}\free{n5}} -} - -In -\downlink{`MappingPackage1'}{MappingPackageOneXmpPage}\ignore{MappingPackage1}, -we show how functions can be manipulated as objects in Axiom. A -useful operation to consider here is \spadop{*}, which means -composition. For example \spad{g*g} causes the Newton iteration -formula to be applied twice. Correspondingly, \spad{g**n} means to -apply the iteration formula \spad{n} times. - -% -\xtc{ -Apply \spad{g} twice to the point \spad{1 + \%i}. -}{ -\spadpaste{(g*g) (1.0 + \%i)\bound{n10}\free{n3}} -} -\xtc{ -Apply \spad{g} 11 times. -}{ -\spadpaste{(g**11) (1.0 + \%i)\bound{n11}\free{n10}} -} - -Look now at the vector field and surface generated -after two steps of Newton's formula for the cube root of two. -The poles in these pictures represent bad starting values, and the -flat areas are the regions of convergence to the three roots. -% -\psXtc{ -The vector field. -}{ -\graphpaste{drawComplexVectorField(g**3,-3..3,-3..3)\free{n3}} -}{ -\epsffile[0 0 295 295]{../ps/vectorroot.ps} -} -\psXtc{ -The surface. -}{ -\graphpaste{drawComplex(g**3,-3..3,-3..3)\free{n3}} -}{ -\epsffile[0 0 295 295]{../ps/complexroot.ps} -} -\ - - -\endscroll -\autobuttons -\end{page} - -@ -\section{ug11.ht} -<>= -\newcommand{\ugPackagesTitle}{Packages} -\newcommand{\ugPackagesNumber}{11.} - -@ -\subsection{11. Packages} -\label{ugPackagesPage} -\begin{itemize} -\item ugIntProgPage \ref{ugIntProgPage} on -page~\pageref{ugIntProgPage} -\item ugIntProgPage \ref{ugIntProgPage} on -page~\pageref{ugIntProgPage} -\item ugPackagesNamesPage \ref{ugPackagesNamesPage} on -page~\pageref{ugPackagesNamesPage} -\item ugPackagesSyntaxPage \ref{ugPackagesSyntaxPage} on -page~\pageref{ugPackagesSyntaxPage} -\item ugPackagesAbstractPage \ref{ugPackagesAbstractPage} on -page~\pageref{ugPackagesAbstractPage} -\item ugPackagesCapsulesPage \ref{ugPackagesCapsulesPage} on -page~\pageref{ugPackagesCapsulesPage} -\item ugPackagesInputFilesPage \ref{ugPackagesInputFilesPage} on -page~\pageref{ugPackagesInputFilesPage} -\item ugPackagesPackagesPage \ref{ugPackagesPackagesPage} on -page~\pageref{ugPackagesPackagesPage} -\item ugPackagesParametersPage \ref{ugPackagesParametersPage} on -page~\pageref{ugPackagesParametersPage} -\item ugPackagesCondsPage \ref{ugPackagesCondsPage} on -page~\pageref{ugPackagesCondsPage} -\item ugPackagesCompilingPage \ref{ugPackagesCompilingPage} on -page~\pageref{ugPackagesCompilingPage} -\item ugPackagesHowPage \ref{ugPackagesHowPage} on -page~\pageref{ugPackagesHowPage} -\end{itemize} -\index{pages!ugPackagesPage!ug11.ht} -\index{ug11.ht!pages!ugPackagesPage} -\index{ugPackagesPage!ug11.ht!pages} -<>= -\begin{page}{ugPackagesPage}{11. Packages} -\beginscroll - -Packages provide the bulk of -Axiom's algorithmic library, from numeric packages for computing -special functions to symbolic facilities for -differential equations, symbolic integration, and limits. - -In \downlink{``\ugIntProgTitle''}{ugIntProgPage} in Chapter -\ugIntProgNumber\ignore{ugIntProg}, we developed several useful -functions for drawing vector fields and complex functions. We now -show you how you can add these functions to the Axiom library to make -them available for general use. - -The way we created the functions in -\downlink{``\ugIntProgTitle''}{ugIntProgPage} in Chapter -\ugIntProgNumber\ignore{ugIntProg} is typical of how you, as an -advanced Axiom user, may interact with Axiom. You have an -application. You go to your editor and create an input file defining -some functions for the application. Then you run the file and try the -functions. Once you get them all to work, you will often want to -extend them, add new features, perhaps write additional functions. - -Eventually, when you have a useful set of functions for your -application, you may want to add them to your local Axiom library. To -do this, you embed these function definitions in a package and add -that package to the library. - -To introduce new packages, categories, and domains into the system, -you need to use the Axiom compiler to convert the constructors into -executable machine code. An existing compiler in Axiom is available -on an ``as-is'' basis. A new, faster compiler will be available in -version 2.0 of Axiom. - -\beginImportant - -\noindent -\label{pak-cdraw} -{\tt 1.\ \ \ C\ \ \ \ \ \ ==>\ Complex\ DoubleFloat}\newline -{\tt 2.\ \ \ S\ \ \ \ \ \ ==>\ Segment\ DoubleFloat}\newline -{\tt 3.\ \ \ INT\ \ \ \ ==>\ Integer}\newline -{\tt 4.\ \ \ DFLOAT\ ==>\ DoubleFloat}\newline -{\tt 5.\ \ \ VIEW3D\ ==>\ ThreeDimensionalViewport}\newline -{\tt 6.\ \ \ CURVE\ \ ==>\ List\ List\ Point\ DFLOAT}\newline -{\tt 7.\ \ \ }\newline -{\tt 8.\ \ \ )abbrev\ package\ DRAWCX\ DrawComplex}\newline -{\tt 9.\ \ \ DrawComplex():\ Exports\ ==\ Implementation\ where}\newline -{\tt 10.\ \ }\newline -{\tt 11.\ \ \ \ Exports\ ==\ with}\newline -{\tt 12.\ \ \ \ \ \ drawComplex:\ (C\ ->\ C,S,S,Boolean)\ ->\ VIEW3D}\newline -{\tt 13.\ \ \ \ \ \ drawComplexVectorField:\ (C\ ->\ C,S,S)\ ->\ VIEW3D}\newline -{\tt 14.\ \ \ \ \ \ setRealSteps:\ INT\ ->\ INT}\newline -{\tt 15.\ \ \ \ \ \ setImagSteps:\ INT\ ->\ INT}\newline -{\tt 16.\ \ \ \ \ \ setClipValue:\ DFLOAT->\ DFLOAT}\newline -{\tt 17.\ \ }\newline -{\tt 18.\ \ \ \ Implementation\ ==\ add}\newline -{\tt 19.\ \ \ \ \ \ arrowScale\ :\ DFLOAT\ :=\ (0.2)::DFLOAT\ --relative\ size}\newline -{\tt 20.\ \ \ \ \ \ arrowAngle\ :\ DFLOAT\ :=\ pi()-pi()/(20::DFLOAT)}\newline -{\tt 21.\ \ \ \ \ \ realSteps\ \ :\ INT\ :=\ 11\ --\#\ real\ steps}\newline -{\tt 22.\ \ \ \ \ \ imagSteps\ \ :\ INT\ :=\ 11\ --\#\ imaginary\ steps}\newline -{\tt 23.\ \ \ \ \ \ clipValue\ \ :\ DFLOAT\ \ :=\ 10::DFLOAT\ --maximum\ vector\ length}\newline -{\tt 24.\ \ }\newline -{\tt 25.\ \ \ \ \ \ setRealSteps(n)\ ==\ realSteps\ :=\ n}\newline -{\tt 26.\ \ \ \ \ \ setImagSteps(n)\ ==\ imagSteps\ :=\ n}\newline -{\tt 27.\ \ \ \ \ \ setClipValue(c)\ ==\ clipValue\ :=\ c}\newline -{\tt 28.\ \ }\newline -{\tt 29.\ \ \ \ \ \ clipFun:\ DFLOAT\ ->\ DFLOAT\ --Clip\ large\ magnitudes.}\newline -{\tt 30.\ \ \ \ \ \ clipFun(x)\ ==\ min(max(x,\ -clipValue),\ clipValue)}\newline -{\tt 31.\ \ }\newline -{\tt 32.\ \ \ \ \ \ makeArrow:\ (Point\ DFLOAT,Point\ DFLOAT,DFLOAT,DFLOAT)\ ->\ CURVE}\newline -{\tt 33.\ \ \ \ \ \ makeArrow(p1,\ p2,\ len,\ arg)\ ==\ ...}\newline -{\tt 34.\ \ }\newline -{\tt 35.\ \ \ \ \ \ drawComplex(f,\ realRange,\ imagRange,\ arrows?)\ ==\ ...}\newline -\caption{The DrawComplex package.}\label{fig-pak-cdraw} -\endImportant - +\chapter{NAG ANNA Expert System} +\section{annaex.ht} +\subsection{Axiom/NAG Expert System} +\label{UXANNA} +\index{pages!UXANNA!annaex.ht} +\index{annaex.ht!pages!UXANNA} +\index{UXANNA!annaex.ht!pages} +<>= +\begin{page}{UXANNA}{Axiom/NAG Expert System} +\centerline{\tt{\inputbitmap{\htbmdir{}/anna_logo.xbm}}\rm} +\newline +\centerline{This expert system chooses, and uses, NAG numerical routines.} +\begin{scroll} +\blankline +\indent{2} \beginmenu - \menudownlink{{11.1. Names, Abbreviations, and File Structure}} -{ugPackagesNamesPage} - \menudownlink{{11.2. Syntax}}{ugPackagesSyntaxPage} - \menudownlink{{11.3. Abstract Datatypes}}{ugPackagesAbstractPage} - \menudownlink{{11.4. Capsules}}{ugPackagesCapsulesPage} - \menudownlink{{11.5. Input Files vs. Packages}}{ugPackagesInputFilesPage} - \menudownlink{{11.6. Compiling Packages}}{ugPackagesPackagesPage} - \menudownlink{{11.7. Parameters}}{ugPackagesParametersPage} - \menudownlink{{11.8. Conditionals}}{ugPackagesCondsPage} - \menudownlink{{11.9. Testing}}{ugPackagesCompilingPage} - \menudownlink{{11.10. How Packages Work}}{ugPackagesHowPage} +\menumemolink{Integration}{UXANNAInt} +\blankline +\menumemolink{Ordinary Differential Equations}{UXANNAOde} +\blankline +\menumemolink{Partial Differential Equations}{UXANNAPde} +\blankline +\menumemolink{Optimization}{UXANNAOpt} +\vspace{10} +\menumemolink{About the Axiom/NAG Expert System}{UXANNATxt} +%\unixcommand{(Postscript)}{ghostview \ \htbmdir{}/anna.ps} +%\blankline +%\menumemolink{How to use the NAGLINK}{nagLinkIntroPage} +%\blankline +%\menumemolink{Tutorial}{tutorialIntroPage} +%\blankline +%\item \menulispdownlink{Interpolation}{(|interp1|} \endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugPackagesNamesTitle}{Names, Abbreviations, and File Structure} -\newcommand{\ugPackagesNamesNumber}{11.1.} - -@ -\subsection{11.1. Names, Abbreviations, and File Structure} -\label{ugPackagesNamesPage} -\begin{itemize} -\item ugIntProgPage \ref{ugIntProgPage} on -page~\pageref{ugIntProgPage} -\item ugTypesWritingAbbrPage \ref{ugTypesWritingAbbrPage} on -page~\pageref{ugTypesWritingAbbrPage} -\end{itemize} -\index{pages!ugPackagesNamesPage!ug11.ht} -\index{ug11.ht!pages!ugPackagesNamesPage} -\index{ugPackagesNamesPage!ug11.ht!pages} -<>= -\begin{page}{ugPackagesNamesPage} -{11.1. Names, Abbreviations, and File Structure} -\beginscroll -% - -Each package has a name and an abbreviation. For a package of the -complex draw functions from -\downlink{``\ugIntProgTitle''}{ugIntProgPage} in Chapter -\ugIntProgNumber\ignore{ugIntProg}, we choose the name -\nonLibAxiomType{DrawComplex} and abbreviation -\nonLibAxiomType{DRAWCX}.\footnote{An abbreviation can be any string -of between two and seven capital letters and digits, beginning with a -letter. See -\downlink{``\ugTypesWritingAbbrTitle''}{ugTypesWritingAbbrPage} in -Section \ugTypesWritingAbbrNumber\ignore{ugTypesWritingAbbr} for more -information.} To be sure that you have not chosen a name or -abbreviation already used by the system, issue the system command -\spadcmd{)show} for both the name and the abbreviation. - -Once you have named the package and its abbreviation, you can choose -any new filename you like with extension ``{\bf \spadFileExt{}}'' to -hold the definition of your package. We choose the name {\bf -drawpak\spadFileExt{}}. If your application involves more than one -package, you can put them all in the same file. Axiom assumes no -relationship between the name of a library file, and the name or -abbreviation of a package. - -Near the top of the ``{\bf \spadFileExt{}}'' file, list all the -abbreviations for the packages using \spadcmd{)abbrev}, each command -beginning in column one. Macros giving names to Axiom expressions can -also be placed near the top of the file. The macros are only usable -from their point of definition until the end of the file. - -Consider the definition of -\nonLibAxiomType{DrawComplex} in Figure \ref{fig-pak-cdraw}. -After the macro -definition -\begin{verbatim} -S ==> Segment DoubleFloat -\end{verbatim} -the name -{\tt S} can be used in the file as a -shorthand for \axiomType{Segment DoubleFloat}. -\footnote{The interpreter also allows -{\tt macro} for macro definitions.} -The abbreviation command for the package -\begin{verbatim} -)abbrev package DRAWCX DrawComplex -\end{verbatim} -is given after the macros (although it could precede them). - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugPackagesSyntaxTitle}{Syntax} -\newcommand{\ugPackagesSyntaxNumber}{11.2.} - -@ -\subsection{11.2. Syntax} -\label{ugPackagesSyntaxPage} -\index{pages!ugPackagesSyntaxPage!ug11.ht} -\index{ug11.ht!pages!ugPackagesSyntaxPage} -\index{ugPackagesSyntaxPage!ug11.ht!pages} -<>= -\begin{page}{ugPackagesSyntaxPage}{11.2. Syntax} -\beginscroll -% -The definition of a package has the syntax: -\centerline{{\frenchspacing{\it PackageForm {\tt :} Exports\quad{\tt ==}\quad Implementation}}} -The syntax for defining a package constructor is the same as that -for defining any function in Axiom. -In practice, the definition extends over many lines so that this syntax is -not practical. -Also, the type of a package is expressed by the operator \axiom{with} -\spadkey{with} -followed by an explicit list of operations. -A preferable way to write the definition of a package is with a \axiom{where} -\spadkey{where} -expression: - -\beginImportant -The definition of a package usually has the form: \newline -{\tt% -{\it PackageForm} : Exports == Implementation where \newline -\texht{\hspace*{.75pc}}{\tab{3}} {\it optional type declarations}\newline -\texht{\hspace*{.75pc}}{\tab{3}} Exports == with \newline -\texht{\hspace*{2.0pc}}{\tab{6}} {\it list of exported operations}\newline -\texht{\hspace*{.75pc}}{\tab{3}} Implementation == add \newline -\texht{\hspace*{2.0pc}}{\tab{6}} {\it list of function definitions for exported operations} -} -\endImportant - -The \axiomType{DrawComplex} package takes no parameters and exports five -operations, each a separate item of a \spadgloss{pile}. -Each operation is described as a \spadgloss{declaration}: a name, followed -by a colon (\axiomSyntax{:}), followed by the type of the operation. -All operations have types expressed as \spadglossSee{mappings}{mapping} with -the syntax -\centerline{{{\it}} -\centerline{{source\quad{\tt ->}\quad target}} -\centerline{{}}} - -%e ********************************************************************* -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugPackagesAbstractTitle}{Abstract Datatypes} -\newcommand{\ugPackagesAbstractNumber}{11.3.} - -@ -\subsection{11.3. Abstract Datatypes} -\label{ugPackagesAbstractPage} -\begin{itemize} -\item ugIntProgCompFunsPage \ref{ugIntProgCompFunsPage} on -page~\pageref{ugIntProgCompFunsPage} -\end{itemize} -\index{pages!ugPackagesAbstractPage!ug11.ht} -\index{ug11.ht!pages!ugPackagesAbstractPage} -\index{ugPackagesAbstractPage!ug11.ht!pages} -<>= -\begin{page}{ugPackagesAbstractPage}{11.3. Abstract Datatypes} -\beginscroll - -A constructor as defined in Axiom is called an \spadgloss{abstract -datatype} in the computer science literature. Abstract datatypes -separate ``specification'' (what operations are provided) from -``implementation'' (how the operations are implemented). The {\tt -Exports} (specification) part of a constructor is said to be -``public'' (it provides the user interface to the package) whereas the -{\tt Implementation} part is ``private'' (information here is -effectively hidden---programs cannot take advantage of it). - -The {\tt Exports} part specifies what operations the package provides -to users. As an author of a package, you must ensure that the {\tt -Implementation} part provides a function for each operation in the -{\tt Exports} part.\footnote{The \spadtype{DrawComplex} package -enhances the facility described in -\downlink{``\ugIntProgCompFunsTitle''}{ugIntProgCompFunsPage} in -Chapter \ugIntProgCompFunsNumber\ignore{ugIntProgCompFuns} by allowing -a complex function to have arrows emanating from the surface to -indicate the direction of the complex argument.} - -An important difference between interactive programming and the use of -packages is in the handling of global variables such as -\axiom{realSteps} and \axiom{imagSteps}. In interactive programming, -you simply change the values of variables by \spadgloss{assignment}. -With packages, such variables are local to the package---their values -can only be set using functions exported by the package. In our -example package, we provide two functions \fakeAxiomFun{setRealSteps} -and \fakeAxiomFun{setImagSteps} for this purpose. - -Another local variable is \axiom{clipValue} which can be changed using -the exported operation \fakeAxiomFun{setClipValue}. This value is -referenced by the internal function \fakeAxiomFun{clipFun} that -decides whether to use the computed value of the function at a point -or, if the magnitude of that value is too large, the value assigned to -\axiom{clipValue} (with the appropriate sign). - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugPackagesCapsulesTitle}{Capsules} -\newcommand{\ugPackagesCapsulesNumber}{11.4.} - -@ -\subsection{11.4. Capsules} -\label{ugPackagesCapsulesPage} -\index{pages!ugPackagesCapsulesPage!ug11.ht} -\index{ug11.ht!pages!ugPackagesCapsulesPage} -\index{ugPackagesCapsulesPage!ug11.ht!pages} -<>= -\begin{page}{ugPackagesCapsulesPage}{11.4. Capsules} -\beginscroll -% -The part to the right of {\tt add} in the {\tt Implementation} -\spadkey{add} -part of the definition is called a \spadgloss{capsule}. -The purpose of a capsule is: -\indent{4} -\beginitems -\item[-] to define a function for each exported operation, and -\item[-] to define a \spadgloss{local environment} for these functions to run. -\enditems \indent{0} - -What is a local environment? -First, what is an environment? -Think of the capsule as an input file that Axiom reads from top to -bottom. -Think of the input file as having a \axiom{)clear all} at the top -so that initially no variables or functions are defined. -When this file is read, variables such as \axiom{realSteps} and -\axiom{arrowSize} in \nonLibAxiomType{DrawComplex} are set to initial values. -Also, all the functions defined in the capsule are compiled. -These include those that are exported (like \axiom{drawComplex}), and -those that are not (like \axiom{makeArrow}). -At the end, you get a set of name-value pairs: -variable names (like \axiom{realSteps} and \axiom{arrowSize}) -are paired with assigned values, while -operation names (like \axiom{drawComplex} and \axiom{makeArrow}) -are paired with function values. - -This set of name-value pairs is called an \spadgloss{environment}. -Actually, we call this environment the ``initial environment'' of a package: -it is the environment that exists immediately after the package is -first built. -Afterwards, functions of this capsule can -access or reset a variable in the environment. -The environment is called {\it local} since any changes to the value of a -variable in this environment can be seen {\it only} by these functions. - -Only the functions from the package can change the variables in the local -environment. -When two functions are called successively from a package, -any changes caused by the first function called -are seen by the second. - -Since the environment is local to the package, its names -don't get mixed -up with others in the system or your workspace. -If you happen to have a variable called \axiom{realSteps} in your -workspace, it does not affect what the -\nonLibAxiomType{DrawComplex} functions do in any way. - -The functions in a package are compiled into machine code. -Unlike function definitions in input files that may be compiled repeatedly -as you use them with varying argument types, -functions in packages have a unique type (generally parameterized by -the argument parameters of a package) and a unique compilation residing on disk. - -The capsule itself is turned into a compiled function. -This so-called {\it capsule function} is what builds the initial environment -spoken of above. -If the package has arguments (see below), then each call to the package -constructor with a distinct pair of arguments -builds a distinct package, each with its own local environment. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugPackagesInputFilesTitle}{Input Files vs. Packages} -\newcommand{\ugPackagesInputFilesNumber}{11.5.} - -@ -\subsection{11.5. Input Files vs. Packages} -\label{ugPackagesInputFilesPage} -\index{pages!ugPackagesInputFilesPage!ug11.ht} -\index{ug11.ht!pages!ugPackagesInputFilesPage} -\index{ugPackagesInputFilesPage!ug11.ht!pages} -<>= -\begin{page}{ugPackagesInputFilesPage}{11.5. Input Files vs. Packages} -\beginscroll -% -A good question at this point would be ``Is writing a package more difficult than -writing an input file?'' - -The programs in input files are designed for flexibility and ease-of-use. -Axiom can usually work out all of your types as it reads your program -and does the computations you request. -Let's say that you define a one-argument function without giving its type. -When you first apply the function to a value, this -value is understood by Axiom as identifying the type for the -argument parameter. -Most of the time Axiom goes through the body of your function and -figures out the target type that you have in mind. -Axiom sometimes fails to get it right. -Then---and only then---do you need a declaration to tell Axiom what -type you want. - -Input files are usually written to be read by Axiom---and by you. -Without suitable documentation and declarations, your input files -are likely incomprehensible to a colleague---and to you some -months later! - -Packages are designed for legibility, as well as -run-time efficiency. -There are few new concepts you need to learn to write -packages. Rather, you just have to be explicit about types -and type conversions. -The types of all functions are pre-declared so that Axiom---and the reader--- -knows precisely what types of arguments can be passed to and from -the functions (certainly you don't want a colleague to guess or to -have to work this out from context!). -The types of local variables are also declared. -Type conversions are explicit, never automatic.\footnote{There -is one exception to this rule: conversions from a subdomain to a -domain are automatic. -After all, the objects both have the domain as a common type.} - -In summary, packages are more tedious to write than input files. -When writing input files, you can casually go ahead, giving some -facts now, leaving others for later. -Writing packages requires forethought, care and discipline. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugPackagesPackagesTitle}{Compiling Packages} -\newcommand{\ugPackagesPackagesNumber}{11.6.} - -@ -\subsection{11.6. Compiling Packages} -\label{ugPackagesPackagesPage} -\index{pages!ugPackagesPackagesPage!ug11.ht} -\index{ug11.ht!pages!ugPackagesPackagesPage} -\index{ugPackagesPackagesPage!ug11.ht!pages} -<>= -\begin{page}{ugPackagesPackagesPage}{11.6. Compiling Packages} -\beginscroll -% - -Once you have defined the package \nonLibAxiomType{DrawComplex}, -you need to compile and test it. -To compile the package, issue the system command \spadcmd{)compile drawpak}. -Axiom reads the file {\bf drawpak\spadFileExt{}} -and compiles its contents into machine binary. -If all goes well, the file {\bf DRAWCX.nrlib} is created in your -local directory for the package. -To test the package, you must load the package before trying an -operation. - -\nullXtc{ -Compile the package. -}{ -\spadpaste{)compile drawpak} -} -\xtc{ -Expose the package. -}{ -\spadpaste{)expose DRAWCX \bound{dp}} -} -\xtc{ -Use an odd step size to avoid -a pole at the origin. -}{ -\spadpaste{setRealSteps 51 \free{dp}\bound{srs}} -} -\xtc{ -}{ -\spadpaste{setImagSteps 51 \free{dp}\bound{scs}} -} -\xtc{ -Define \userfun{f} to be the Gamma function. -}{ -\spadpaste{f(z) == Gamma(z) \bound{f}} -} -\xtc{ -Clip values of function with magnitude larger than 7. -}{ -\spadpaste{setClipValue 7} -} -\psXtc{ -Draw the \spadfun{Gamma} function. -}{ -\graphpaste{drawComplex(f,-\%pi..\%pi,-\%pi..\%pi, false) \free{srs scs f}} -}{ -\epsffile[0 0 300 300]{../ps/3dgamma11.ps} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugPackagesParametersTitle}{Parameters} -\newcommand{\ugPackagesParametersNumber}{11.7.} - -@ -\subsection{11.7. Parameters} -\label{ugPackagesParametersPage} -\begin{itemize} -\item ugTypesPage \ref{ugTypesPage} on -page~\pageref{ugTypesPage} -\item ugUserBlocksPage \ref{ugUserBlocksPage} on -page~\pageref{ugUserBlocksPage} -\item ugCategoriesAttributesPage \ref{ugCategoriesAttributesPage} on -page~\pageref{ugCategoriesAttributesPage} -\end{itemize} -\index{pages!ugPackagesParametersPage!ug11.ht} -\index{ug11.ht!pages!ugPackagesParametersPage} -\index{ugPackagesParametersPage!ug11.ht!pages} -<>= -\begin{page}{ugPackagesParametersPage}{11.7. Parameters} -\beginscroll -% -The power of packages becomes evident when packages have parameters. -Usually these parameters are domains and the exported operations have types -involving these parameters. - -In \downlink{``\ugTypesTitle''}{ugTypesPage} in Chapter -\ugTypesNumber\ignore{ugTypes}, you learned that categories denote -classes of domains. Although we cover this notion in detail in the -next chapter, we now give you a sneak preview of its usefulness. - -In \downlink{``\ugUserBlocksTitle''}{ugUserBlocksPage} in Section -\ugUserBlocksNumber\ignore{ugUserBlocks}, we defined functions -\axiom{bubbleSort(m)} and \axiom{insertionSort(m)} to sort a list of -integers. If you look at the code for these functions, you see that -they may be used to sort {\it any} structure \axiom{m} with the right -properties. Also, the functions can be used to sort lists of {\it -any} elements---not just integers. Let us now recall the code for -\axiom{bubbleSort}. - -\begin{verbatim} -bubbleSort(m) == - n := #m - for i in 1..(n-1) repeat - for j in n..(i+1) by -1 repeat - if m.j < m.(j-1) then swap!(m,j,j-1) - m -\end{verbatim} - -What properties of ``lists of integers'' are assumed by the sorting -algorithm? In the first line, the operation \spadfun{\#} computes the -maximum index of the list. The first obvious property is that -\axiom{m} must have a finite number of elements. In Axiom, this is -done by your telling Axiom that \axiom{m} has the ``attribute'' -\spadatt{finiteAggregate}. An \spadgloss{attribute} is a property -that a domain either has or does not have. As we show later in -\downlink{``\ugCategoriesAttributesTitle''}{ugCategoriesAttributesPage} -in Section -\ugCategoriesAttributesNumber\ignore{ugCategoriesAttributes}, programs -can query domains as to the presence or absence of an attribute. - -The operation \spadfunX{swap} swaps elements of \axiom{m}. -Using \Browse{}, you find that \spadfunX{swap} requires its -elements to come from a domain of category -\axiomType{IndexedAggregate} with attribute -\spadatt{shallowlyMutable}. -This attribute means that you can change the internal components -of \axiom{m} without changing its external structure. -Shallowly-mutable data structures include lists, streams, one- and -two-dimensional arrays, vectors, and matrices. - -The category \axiomType{IndexedAggregate} designates the class of -aggregates whose elements can be accessed by the notation -\axiom{m.s} for suitable selectors \axiom{s}. -The category \axiomType{IndexedAggregate} takes two arguments: -\axiom{Index}, a domain of selectors for the aggregate, and -\axiom{Entry}, a domain of entries for the aggregate. -Since the sort functions access elements by integers, we must -choose \axiom{Index = }\axiomType{Integer}. -The most general class of domains for which \axiom{bubbleSort} and -\axiom{insertionSort} are defined are those of -category \spadtype{IndexedAggregate(Integer,Entry)} with the two -attributes \spadatt{shallowlyMutable} and -\spadatt{finiteAggregate}. - -Using \Browse{}, you can also discover that Axiom has many kinds of domains -with attribute \spadatt{shallowlyMutable}. -Those of class \axiomType{IndexedAggregate(Integer,Entry)} include -\axiomType{Bits}, \axiomType{FlexibleArray}, \axiomType{OneDimensionalArray}, -\axiomType{List}, \axiomType{String}, and \axiomType{Vector}, and also -\axiomType{HashTable} and \axiomType{EqTable} with integer keys. -Although you may never want to sort all such structures, we -nonetheless demonstrate Axiom's -ability to do so. - -Another requirement is that \nonLibAxiomType{Entry} has an operation -\axiomOp{<}. One way to get this operation is to assume that -\nonLibAxiomType{Entry} has category \axiomType{OrderedSet}. By -definition, will then export a \axiomOp{<} operation. A more general -approach is to allow any comparison function \axiom{f} to be used for -sorting. This function will be passed as an argument to the sorting -functions. - -Our sorting package then takes two arguments: a domain \axiom{S} of -objects of {\it any} type, and a domain \axiom{A}, an aggregate of -type \axiomType{IndexedAggregate(Integer, S)} with the above two -attributes. Here is its definition using what are close to the -original definitions of \axiom{bubbleSort} and \axiom{insertionSort} -for sorting lists of integers. The symbol \axiomSyntax{!} is added to -the ends of the operation names. This uniform naming convention is -used for Axiom operation names that destructively change one or more -of their arguments. - -\beginImportant - -\noindent -{\tt 1.\ \ \ SortPackage(S,A)\ :\ Exports\ ==\ Implementation\ where}\newline -{\tt 2.\ \ \ \ \ S:\ Object}\newline -{\tt 3.\ \ \ \ \ A:\ IndexedAggregate(Integer,S)}\newline -{\tt 4.\ \ \ \ \ \ \ with\ (finiteAggregate;\ shallowlyMutable)}\newline -{\tt 5.\ \ \ }\newline -{\tt 6.\ \ \ \ \ Exports\ ==\ with}\newline -{\tt 7.\ \ \ \ \ \ \ bubbleSort!:\ (A,(S,S)\ ->\ Boolean)\ ->\ A}\newline -{\tt 8.\ \ \ \ \ \ \ insertionSort!:\ (A,\ (S,S)\ ->\ Boolean)\ ->\ A}\newline -{\tt 9.\ \ \ }\newline -{\tt 10.\ \ \ \ Implementation\ ==\ add}\newline -{\tt 11.\ \ \ \ \ \ bubbleSort!(m,f)\ ==}\newline -{\tt 12.\ \ \ \ \ \ \ \ n\ :=\ \#m}\newline -{\tt 13.\ \ \ \ \ \ \ \ for\ i\ in\ 1..(n-1)\ repeat}\newline -{\tt 14.\ \ \ \ \ \ \ \ \ \ for\ j\ in\ n..(i+1)\ by\ -1\ repeat}\newline -{\tt 15.\ \ \ \ \ \ \ \ \ \ \ \ if\ f(m.j,m.(j-1))\ then\ swap!(m,j,j-1)}\newline -{\tt 16.\ \ \ \ \ \ \ \ m}\newline -{\tt 17.\ \ \ \ \ \ insertionSort!(m,f)\ ==}\newline -{\tt 18.\ \ \ \ \ \ \ \ for\ i\ in\ 2..\#m\ repeat}\newline -{\tt 19.\ \ \ \ \ \ \ \ \ \ j\ :=\ i}\newline -{\tt 20.\ \ \ \ \ \ \ \ \ \ while\ j\ >\ 1\ and\ f(m.j,m.(j-1))\ repeat}\newline -{\tt 21.\ \ \ \ \ \ \ \ \ \ \ \ swap!(m,j,j-1)}\newline -{\tt 22.\ \ \ \ \ \ \ \ \ \ \ \ j\ :=\ (j\ -\ 1)\ pretend\ PositiveInteger}\newline -{\tt 23.\ \ \ \ \ \ \ \ m}\newline -\endImportant - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugPackagesCondsTitle}{Conditionals} -\newcommand{\ugPackagesCondsNumber}{11.8.} - -@ -\subsection{11.8. Conditionals} -\label{ugPackagesCondsPage} -\begin{itemize} -\item ugUserBlocksPage \ref{ugUserBlocksPage} on -page~\pageref{ugUserBlocksPage} -\end{itemize} -\index{pages!ugPackagesCondsPage!ug11.ht} -\index{ug11.ht!pages!ugPackagesCondsPage} -\index{ugPackagesCondsPage!ug11.ht!pages} -<>= -\begin{page}{ugPackagesCondsPage}{11.8. Conditionals} -\beginscroll -% -When packages have parameters, you can say that an operation is or is not -exported depending on the values of those parameters. -When the domain of objects \axiom{S} has an \axiomOp{<} -operation, we can supply one-argument versions of -\axiom{bubbleSort} and \axiom{insertionSort} which use this operation -for sorting. -The presence of the -operation \axiomOp{<} is guaranteed when \axiom{S} is an ordered set. - -\beginImportant - -\noindent -{\tt 1.\ \ \ Exports\ ==\ with}\newline -{\tt 2.\ \ \ \ \ \ \ bubbleSort!:\ (A,(S,S)\ ->\ Boolean)\ ->\ A}\newline -{\tt 3.\ \ \ \ \ \ \ insertionSort!:\ (A,\ (S,S)\ ->\ Boolean)\ ->\ A}\newline -{\tt 4.\ \ \ }\newline -{\tt 5.\ \ \ \ \ \ \ if\ S\ has\ OrderedSet\ then}\newline -{\tt 6.\ \ \ \ \ \ \ \ \ bubbleSort!:\ A\ ->\ A}\newline -{\tt 7.\ \ \ \ \ \ \ \ \ insertionSort!:\ A\ ->\ A}\newline -\endImportant - -In addition to exporting the one-argument sort operations -conditionally, we must provide conditional definitions for the -operations in the {\tt Implementation} part. -This is easy: just have the one-argument functions call the -corresponding two-argument functions with the operation -\axiomOp{<} from \axiom{S}. - -\beginImportant - -\noindent -{\tt 1.\ \ \ \ \ Implementation\ ==\ add}\newline -{\tt 2.\ \ \ \ \ \ \ \ \ \ ...}\newline -{\tt 3.\ \ \ \ \ \ \ if\ S\ has\ OrderedSet\ then}\newline -{\tt 4.\ \ \ \ \ \ \ \ \ bubbleSort!(m)\ ==\ bubbleSort!(m,<\$S)}\newline -{\tt 5.\ \ \ \ \ \ \ \ \ insertionSort!(m)\ ==\ insertionSort!(m,<\$S)}\newline -\endImportant - -In \downlink{``\ugUserBlocksTitle''}{ugUserBlocksPage} in Section -\ugUserBlocksNumber\ignore{ugUserBlocks}, we give an alternative -definition of \fakeAxiomFun{bubbleSort} using -\spadfunFrom{first}{List} and \spadfunFrom{rest}{List} that is more -efficient for a list (for which access to any element requires -traversing the list from its first node). To implement a more -efficient algorithm for lists, we need the operation \spadfun{setelt} -which allows us to destructively change the \spadfun{first} and -\spadfun{rest} of a list. Using \Browse{}, you find that these -operations come from category \axiomType{UnaryRecursiveAggregate}. -Several aggregate types are unary recursive aggregates including those -of \axiomType{List} and \axiomType{AssociationList}. We provide two -different implementations for \fakeAxiomFun{bubbleSort!} and -\fakeAxiomFun{insertionSort!}: one for list-like structures, another -for array-like structures. - -\beginImportant - -\noindent -{\tt 1.\ \ \ Implementation\ ==\ add}\newline -{\tt 2.\ \ \ \ \ \ \ \ \ \ \ ...}\newline -{\tt 3.\ \ \ \ \ \ \ if\ A\ has\ UnaryRecursiveAggregate(S)\ then}\newline -{\tt 4.\ \ \ \ \ \ \ \ \ bubbleSort!(m,fn)\ ==}\newline -{\tt 5.\ \ \ \ \ \ \ \ \ \ \ empty?\ m\ =>\ m}\newline -{\tt 6.\ \ \ \ \ \ \ \ \ \ \ l\ :=\ m}\newline -{\tt 7.\ \ \ \ \ \ \ \ \ \ \ while\ not\ empty?\ (r\ :=\ l.rest)\ repeat}\newline -{\tt 8.\ \ \ \ \ \ \ \ \ \ \ \ \ \ r\ :=\ bubbleSort!\ r}\newline -{\tt 9.\ \ \ \ \ \ \ \ \ \ \ \ \ \ x\ :=\ l.first}\newline -{\tt 10.\ \ \ \ \ \ \ \ \ \ \ \ \ if\ fn(r.first,x)\ then}\newline -{\tt 11.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ l.first\ :=\ r.first}\newline -{\tt 12.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ r.first\ :=\ x}\newline -{\tt 13.\ \ \ \ \ \ \ \ \ \ \ \ \ l.rest\ :=\ r}\newline -{\tt 14.\ \ \ \ \ \ \ \ \ \ \ \ \ l\ :=\ l.rest}\newline -{\tt 15.\ \ \ \ \ \ \ \ \ \ \ m}\newline -{\tt 16.\ \ \ \ \ \ \ \ \ insertionSort!(m,fn)\ ==}\newline -{\tt 17.\ \ \ \ \ \ \ \ \ \ \ \ ...}\newline -\endImportant - -The ordering of definitions is important. -The standard definitions come first and -then the predicate -\begin{verbatim} -A has UnaryRecursiveAggregate(S) -\end{verbatim} -is evaluated. -If {\tt true}, the special definitions cover up the standard ones. - -Another equivalent way to write the capsule is to use an -\axiom{if-then-else} expression: -\spadkey{if} - -\beginImportant - -\noindent -{\tt 1.\ \ \ \ \ \ \ \ if\ A\ has\ UnaryRecursiveAggregate(S)\ then}\newline -{\tt 2.\ \ \ \ \ \ \ \ \ \ \ ...}\newline -{\tt 3.\ \ \ \ \ \ \ \ else}\newline -{\tt 4.\ \ \ \ \ \ \ \ \ \ \ ...}\newline -\endImportant - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugPackagesCompilingTitle}{Testing} -\newcommand{\ugPackagesCompilingNumber}{11.9.} - -@ -\subsection{11.9. Testing} -\label{ugPackagesCompilingPage} -\begin{itemize} -\item EqTableXmpPage \ref{EqTableXmpPage} on -page~\pageref{EqTableXmpPage} -\end{itemize} -\index{pages!ugPackagesCompilingPage!ug11.ht} -\index{ug11.ht!pages!ugPackagesCompilingPage} -\index{ugPackagesCompilingPage!ug11.ht!pages} -<>= -\begin{page}{ugPackagesCompilingPage}{11.9. Testing} -\beginscroll -% -Once you have written the package, embed it in a file, for example, {\bf -sortpak\spadFileExt{}}. -Be sure to include an \axiom{)abbrev} command at the top of the file: -\begin{verbatim} -)abbrev package SORTPAK SortPackage -\end{verbatim} -Now compile the file (using \spadcmd{)compile sortpak\spadFileExt{}}). -\xtc{ -Expose the constructor. -You are then ready to begin testing. -}{ -\spadpaste{)expose SORTPAK} -} -\xtc{ -Define a list. -}{ -\spadpaste{l := [1,7,4,2,11,-7,3,2]} -} -\xtc{ -Since the integers are an ordered set, -a one-argument operation will do. -}{ -\spadpaste{bubbleSort!(l)} -} -\xtc{ -Re-sort it using ``greater than.'' -}{ -\spadpaste{bubbleSort!(l,(x,y) +-> x > y)} -} -\xtc{ -Now sort it again using \axiomOp{<} on integers. -}{ -\spadpaste{bubbleSort!(l, <\$Integer)} -} -\xtc{ -A string is an aggregate of characters so we can sort them as well. -}{ -\spadpaste{bubbleSort! "Mathematical Sciences"} -} -\xtc{ -Is \axiomOp{<} defined on booleans? -}{ -\spadpaste{false < true} -} -\xtc{ -Good! Create a bit string representing ten consecutive -boolean values \axiom{true}. -}{ -\spadpaste{u : Bits := new(10,true)} -} -\xtc{ -Set bits 3 through 5 to \axiom{false}, then display the result. -}{ -\spadpaste{u(3..5) := false; u} -} -\xtc{ -Now sort these booleans. -}{ -\spadpaste{bubbleSort! u} -} -\xtc{ -Create an ``eq-table'' (see -\downlink{`EqTable'}{EqTableXmpPage}\ignore{EqTable}), a -table having integers as keys -and strings as values. -}{ -\spadpaste{t : EqTable(Integer,String) := table()} -} -\xtc{ -Give the table a first entry. -}{ -\spadpaste{t.1 := "robert"} -} -\xtc{ -And a second. -}{ -\spadpaste{t.2 := "richard"} -} -\xtc{ -What does the table look like? -}{ -\spadpaste{t} -} -\xtc{ -Now sort it. -}{ -\spadpaste{bubbleSort! t} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugPackagesHowTitle}{How Packages Work} -\newcommand{\ugPackagesHowNumber}{11.10.} - -@ -\subsection{11.10. How Packages Work} -\label{ugPackagesHowPage} -\begin{itemize} -\item ugCategoriesHierPage \ref{ugCategoriesHierPage} on -page~\pageref{ugCategoriesHierPage} -\end{itemize} -\index{pages!ugPackagesHowPage!ug11.ht} -\index{ug11.ht!pages!ugPackagesHowPage} -\index{ugPackagesHowPage!ug11.ht!pages} -<>= -\begin{page}{ugPackagesHowPage}{11.10. How Packages Work} -\beginscroll -% -Recall that packages as abstract datatypes are compiled independently -and put into the library. -The curious reader may ask: ``How is the interpreter able to find an -operation such as \fakeAxiomFun{bubbleSort!}? -Also, how is a single compiled function such as \fakeAxiomFun{bubbleSort!} able -to sort data of different types?'' - -After the interpreter loads the package \nonLibAxiomType{SortPackage}, the four -operations from the package become known to the interpreter. -Each of these operations is expressed as a {\it modemap} in which the type -of the operation is written in terms of symbolic domains. -\nullXtc{ -See the modemaps for \fakeAxiomFun{bubbleSort!}. -}{ -\spadpaste{)display op bubbleSort!} -} -\begin{verbatim} -There are 2 exposed functions called bubbleSort! : - - [1] D1 -> D1 from SortPackage(D2,D1) - if D2 has ORDSET and D2 has OBJECT and D1 has - IndexedAggregate(Integer, D2) with - finiteAggregate - shallowlyMutable - - [2] (D1,((D3,D3) -> Boolean)) -> D1 from SortPackage(D3,D1) - if D3 has OBJECT and D1 has - IndexedAggregate(Integer,D3) with - finiteAggregate - shallowlyMutable -\end{verbatim} - -What happens if you ask for \axiom{bubbleSort!([1,-5,3])}? -There is a unique modemap for an operation named -\fakeAxiomFun{bubbleSort!} with one argument. -Since \axiom{[1,-5,3]} is a list of integers, the symbolic domain -\axiom{D1} is defined as \axiomType{List(Integer)}. -For some operation to apply, it must satisfy the predicate for -some \axiom{D2}. -What \axiom{D2}? -The third expression of the \axiom{and} requires {\tt D1 has -IndexedAggregate(Integer, D2) with} two attributes. -So the interpreter searches for an \axiomType{IndexedAggregate} -among the ancestors of \axiomType{List (Integer)} (see - -\downlink{``\ugCategoriesHierTitle''}{ugCategoriesHierPage} in Section -\ugCategoriesHierNumber\ignore{ugCategoriesHier}). It finds one: -\axiomType{IndexedAggregate(Integer, Integer)}. The interpreter tries -defining \axiom{D2} as \axiomType{Integer}. After substituting for -\axiom{D1} and \axiom{D2}, the predicate evaluates to \axiom{true}. -An applicable operation has been found! - -Now Axiom builds the package \axiomType{SortPackage(List(Integer), -Integer)}. According to its definition, this package exports the -required operation: \fakeAxiomFun{bubbleSort!}: \spadsig{List -Integer}{List Integer}. The interpreter then asks the package for a -function implementing this operation. The package gets all the -functions it needs (for example, \axiomFun{rest} and \axiomFunX{swap}) -from the appropriate domains and then it returns a -\fakeAxiomFun{bubbleSort!} to the interpreter together with the local -environment for \fakeAxiomFun{bubbleSort!}. The interpreter applies -the function to the argument \axiom{[1,-5,3]}. The -\fakeAxiomFun{bubbleSort!} function is executed in its local -environment and produces the result. \endscroll \autobuttons +\end{scroll} +%\unixcommand{Netscape}{netscape \ http:\/\/www.bath.ac.uk\/\~masbjd\/anna.html} +\autobutt{HelpContents} \end{page} @ -\section{ug12.ht} -<>= -\newcommand{\ugCategoriesTitle}{Categories} -\newcommand{\ugCategoriesNumber}{12.} - -@ -\subsection{12. Categories} -\label{ugCategoriesPage} -\begin{itemize} -\item ugTypesBasicDomainConsPage \ref{ugTypesBasicDomainConsPage} on -page~\pageref{ugTypesBasicDomainConsPage} -\item ugCategoriesDefsPage \ref{ugCategoriesDefsPage} on -page~\pageref{ugCategoriesDefsPage} -\item ugCategoriesExportsPage \ref{ugCategoriesExportsPage} on -page~\pageref{ugCategoriesExportsPage} -\item ugCategoriesDocPage \ref{ugCategoriesDocPage} on -page~\pageref{ugCategoriesDocPage} -\item ugCategoriesHierPage \ref{ugCategoriesHierPage} on -page~\pageref{ugCategoriesHierPage} -\item ugCategoriesMembershipPage \ref{ugCategoriesMembershipPage} on -page~\pageref{ugCategoriesMembershipPage} -\item ugCategoriesDefaultsPage \ref{ugCategoriesDefaultsPage} on -page~\pageref{ugCategoriesDefaultsPage} -\item ugCategoriesAxiomsPage \ref{ugCategoriesAxiomsPage} on -page~\pageref{ugCategoriesAxiomsPage} -\item ugCategoriesCorrectnessPage \ref{ugCategoriesCorrectnessPage} on -page~\pageref{ugCategoriesCorrectnessPage} -\item ugCategoriesAttributesPage \ref{ugCategoriesAttributesPage} on -page~\pageref{ugCategoriesAttributesPage} -\item ugCategoriesParametersPage \ref{ugCategoriesParametersPage} on -page~\pageref{ugCategoriesParametersPage} -\item ugCategoriesConditionalsPage \ref{ugCategoriesConditionalsPage} on -page~\pageref{ugCategoriesConditionalsPage} -\item ugCategoriesAndPackagesPage \ref{ugCategoriesAndPackagesPage} on -page~\pageref{ugCategoriesAndPackagesPage} -\end{itemize} -\index{pages!ugCategoriesPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesPage} -\index{ugCategoriesPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesPage}{12. Categories} -\beginscroll - -This chapter unravels the mysteries of categories---what -they are, how they are related to domains and packages, -how they are defined in Axiom, and how you can extend the -system to include new categories of your own. - -We assume that you have read the introductory material on domains and -categories in -\downlink{``\ugTypesBasicDomainConsTitle''}{ugTypesBasicDomainConsPage} -in Section -\ugTypesBasicDomainConsNumber\ignore{ugTypesBasicDomainCons}. There -you learned that the notion of packages covered in the previous -chapter are special cases of domains. While this is in fact the case, -it is useful here to regard domains as distinct from packages. - -Think of a domain as a datatype, a collection of objects (the objects -of the domain). From your ``sneak preview'' in the previous chapter, -you might conclude that categories are simply named clusters of -operations exported by domains. As it turns out, categories have a -much deeper meaning. Categories are fundamental to the design of -Axiom. They control the interactions between domains and algorithmic -packages, and, in fact, between all the components of Axiom. - -Categories form hierarchies as shown on the inside cover pages of this -book. The inside front-cover pages illustrate the basic algebraic -hierarchy of the Axiom programming language. The inside back-cover -pages show the hierarchy for data structures. - -Think of the category structures of Axiom as a foundation for a city -on which superstructures (domains) are built. The algebraic -hierarchy, for example, serves as a foundation for constructive -mathematical algorithms embedded in the domains of Axiom. Once in -place, domains can be constructed, either independently or from one -another. - -Superstructures are built for quality---domains are compiled into -machine code for run-time efficiency. You can extend the foundation -in directions beyond the space directly beneath the superstructures, -then extend selected superstructures to cover the space. Because of -the compilation strategy, changing components of the foundation -generally means that the existing superstructures (domains) built on -the changed parts of the foundation (categories) have to be -rebuilt---that is, recompiled. - -Before delving into some of the interesting facts about categories, let's see -how you define them in Axiom. - +\subsection{Integration} +\label{UXANNAInt} +\index{pages!UXANNAInt!annaex.ht} +\index{annaex.ht!pages!UXANNAInt} +\index{UXANNAInt!annaex.ht!pages} +<>= +\begin{page}{UXANNAInt}{Integration} +Welcome to the Integration section of {\tt +\inputbitmap{\htbmdir{}/anna.xbm.tiny}}, the {\em Axiom/NAG Expert +System}. This system chooses, and uses, NAG numerical routines. +\begin{scroll} +\blankline +\indent{2} \beginmenu - \menudownlink{{12.1. Definitions}}{ugCategoriesDefsPage} - \menudownlink{{12.2. Exports}}{ugCategoriesExportsPage} - \menudownlink{{12.3. Documentation}}{ugCategoriesDocPage} - \menudownlink{{12.4. Hierarchies}}{ugCategoriesHierPage} - \menudownlink{{12.5. Membership}}{ugCategoriesMembershipPage} - \menudownlink{{12.6. Defaults}}{ugCategoriesDefaultsPage} - \menudownlink{{12.7. Axioms}}{ugCategoriesAxiomsPage} - \menudownlink{{12.8. Correctness}}{ugCategoriesCorrectnessPage} - \menudownlink{{12.9. Attributes}}{ugCategoriesAttributesPage} - \menudownlink{{12.10. Parameters}}{ugCategoriesParametersPage} - \menudownlink{{12.11. Conditionals}}{ugCategoriesConditionalsPage} - \menudownlink{{12.12. Anonymous Categories}}{ugCategoriesAndPackagesPage} +\item \menulispdownlink{Integration}{(|annaInt|)}\space{}\newline +\indent{5} Integrating a function over a finite or infinite range. +\blankline +\item \menulispdownlink{Multiple Integration}{(|annaMInt|)}\space{}\newline +\indent{5} Integrating a multivariate function over a finite space. +The dimensions of the space need to be 2 <= n <= 15. +\blankline +\menudownlink{Examples}{UXANNAIntEx}\space{}\newline +\indent{5} Examples of integration. These examples cover all of the major +methods. Parameters can be changed to investigate the effect +on the choice of method. \endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugCategoriesDefsTitle}{Definitions} -\newcommand{\ugCategoriesDefsNumber}{12.1.} - -@ -\subsection{12.1. Definitions} -\label{ugCategoriesDefsPage} -\begin{itemize} -\item ugTypesPage \ref{ugTypesPage} on -page~\pageref{ugTypesPage} -\end{itemize} -\index{pages!ugCategoriesDefsPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesDefsPage} -\index{ugCategoriesDefsPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesDefsPage}{12.1. Definitions} -\beginscroll - -A category is defined by a function with exactly the same format as -any other function in Axiom. - -\beginImportant -The definition of a category has the syntax: -\centerline{{{\it CategoryForm} : {\tt Category\quad{}==\quad{}} {\it Extensions} {\tt [ with} {\it Exports} {\tt ]}}} - -The brackets {\tt [ ]} here indicate optionality. -\endImportant - - -The first example of a category definition is -\spadtype{SetCategory}, -the most basic of the algebraic categories in Axiom. - -\beginImportant - -\noindent -{\tt 1.\ \ \ SetCategory():\ Category\ ==}\newline -{\tt 2.\ \ \ \ \ \ Join(Type,CoercibleTo\ OutputForm)\ with}\newline -{\tt 3.\ \ \ \ \ \ \ \ \ "="\ :\ (\$,\ \$)\ ->\ Boolean}\newline -\endImportant - -The definition starts off with the name of the -category (\spadtype{SetCategory}); this is -always in column one in the source file. -%% maybe talk about naming conventions for source files? .spad or .ax? -All parts of a category definition are then indented with respect to this -first line. - -In \downlink{``\ugTypesTitle''}{ugTypesPage} in Chapter -\ugTypesNumber\ignore{ugTypes}, we talked about \spadtype{Ring} as -denoting the class of all domains that are rings, in short, the class -of all rings. While this is the usual naming convention in Axiom, it -is also common to use the word ``Category'' at the end of a category -name for clarity. The interpretation of the name -\spadtype{SetCategory} is, then, ``the category of all domains that -are (mathematical) sets.'' - -The name \spadtype{SetCategory} is followed in the definition by its -formal parameters enclosed in parentheses \spadSyntax{()}. -Here there are no parameters. -As required, the type of the result of this category function is the -distinguished name {\sf Category}. - -Then comes the \spadSyntax{==}. -As usual, what appears to the right of the \spadSyntax{==} is a -definition, here, a category definition. -A category definition always has two parts separated by the reserved word -\spadkey{with} -\spad{with}. -%\footnote{Debugging hint: it is very easy to forget -%the \spad{with}!} - -The first part tells what categories the category extends. -Here, the category extends two categories: \spadtype{Type}, the -category of all domains, and -\spadtype{CoercibleTo(OutputForm)}. -%\footnote{\spadtype{CoercibleTo(OutputForm)} -%can also be written (and is written in the definition above) without -%parentheses.} -The operation \spad{Join} is a system-defined operation that -\spadkey{Join} -forms a single category from two or more other categories. - -Every category other than \spadtype{Type} is an extension of some other -category. -If, for example, \spadtype{SetCategory} extended only the category -\spadtype{Type}, the definition here would read ``{\tt Type with -...}''. -In fact, the {\tt Type} is optional in this line; ``{\tt with -...}'' suffices. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugCategoriesExportsTitle}{Exports} -\newcommand{\ugCategoriesExportsNumber}{12.2.} - -@ -\subsection{12.2. Exports} -\label{ugCategoriesExportsPage} -\index{pages!ugCategoriesExportsPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesExportsPage} -\index{ugCategoriesExportsPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesExportsPage}{12.2. Exports} -\beginscroll - -To the right of the \spad{with} is a list of -\spadkey{with} -all the \spadglossSee{exports}{export} of the category. -Each exported operation has a name and a type expressed by a -\spadgloss{declaration} of the form -``{\frenchspacing\tt {\it name}: {\it type}}''. - -Categories can export symbols, as well as -{\tt 0} and {\tt 1} which denote -domain constants.\footnote{The -numbers {\tt 0} and {\tt 1} are operation names in Axiom.} -In the current implementation, all other exports are operations with -types expressed as \spadglossSee{mappings}{mapping} with the syntax -\centerline{{{\it}} -\centerline{{source\quad{\tt ->}\quad target}} -\centerline{{}}} - -The category \spadtype{SetCategory} has a single export: the operation -\spadop{=} whose type is given by the mapping {\tt (\$, \$) -> Boolean}. -The \spadSyntax{\$} in a mapping type always means ``the domain.'' Thus -the operation \spadop{=} takes two arguments from the domain and -returns a value of type \spadtype{Boolean}. - -The source part of the mapping here is given by a {\it tuple} -consisting of two or more types separated by commas and enclosed in -parentheses. -If an operation takes only one argument, you can drop the parentheses -around the source type. -If the mapping has no arguments, the source part of the mapping is either -left blank or written as \spadSyntax{()}. -Here are examples of formats of various operations with some -contrived names. - -\begin{verbatim} -someIntegerConstant : $ -aZeroArgumentOperation: () -> Integer -aOneArgumentOperation: Integer -> $ -aTwoArgumentOperation: (Integer,$) -> Void -aThreeArgumentOperation: ($,Integer,$) -> Fraction($) -\end{verbatim} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugCategoriesDocTitle}{Documentation} -\newcommand{\ugCategoriesDocNumber}{12.3.} - -@ -\subsection{12.3. Documentation} -\label{ugCategoriesDocPage} -\index{pages!ugCategoriesDocPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesDocPage} -\index{ugCategoriesDocPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesDocPage}{12.3. Documentation} -\beginscroll - -The definition of \spadtype{SetCategory} above is missing -an important component: its library documentation. -Here is its definition, complete with documentation. - -\beginImportant - -\noindent -{\tt 1.\ \ \ ++\ Description:}\newline -{\tt 2.\ \ \ ++\ \bs{}axiomType\{SetCategory\}\ is\ the\ basic\ category}\newline -{\tt 3.\ \ \ ++\ for\ describing\ a\ collection\ of\ elements\ with}\newline -{\tt 4.\ \ \ ++\ \bs{}axiomOp\{=\}\ (equality)\ and\ a\ \bs{}axiomFun\{coerce\}}\newline -{\tt 5.\ \ \ ++\ to\ \bs{}axiomType\{OutputForm\}.}\newline -{\tt 6.\ \ \ }\newline -{\tt 7.\ \ \ SetCategory():\ Category\ ==}\newline -{\tt 8.\ \ \ \ \ Join(Type,\ CoercibleTo\ OutputForm)\ with}\newline -{\tt 9.\ \ \ \ \ \ \ "=":\ (\$,\ \$)\ ->\ Boolean}\newline -{\tt 10.\ \ \ \ \ \ \ \ ++\ \bs{}axiom\{x\ =\ y\}\ tests\ if\ \bs{}axiom\{x\}\ and}\newline -{\tt 11.\ \ \ \ \ \ \ \ ++\ \bs{}axiom\{y\}\ are\ equal.}\newline -\endImportant - -Documentary comments are an important part of constructor definitions. -Documentation is given both for the category itself and for -each export. -A description for the category precedes the code. -Each line of the description begins in column one with \axiomSyntax{++}. -The description starts with the word {\tt Description:}.\footnote{Other -information such as the author's name, date of creation, and so on, -can go in this -area as well but are currently ignored by Axiom.} -All lines of the description following the initial line are -indented by the same amount. - -{\texht{\sloppy}{} -Surround the name of any constructor (with or without parameters) with an -\texht{\verb+\axiomType{}+}{\\axiomType\{\}}. -Similarly, surround an -operator name with \texht{\verb+\axiomOp{}+}{\\axiomOp\{\}}, -an Axiom operation with \texht{\verb+\axiomFun{}+}{\\axiomFun\{\}}, and a -variable or Axiom expression with -\texht{\verb+\axiom{}+}{\\axiom\{\}}. -Library documentation is given in a \TeX{}-like language so that -it can be used both for hard-copy and for \Browse{}. -These different wrappings cause operations and types to have -mouse-active buttons in \Browse{}. -For hard-copy output, wrapped expressions appear in a different font. -The above documentation appears in hard-copy as: - -} -% -\texht{\begin{quotation}}{\indent{3}} -% -\axiomType{SetCategory} is the basic category -for describing a collection of elements with \axiomOp{=} -(equality) and a \spadfun{coerce} to \axiomType{OutputForm}. -% -\texht{\end{quotation}}{\indent{0}} -% -and -% -\texht{\begin{quotation}}{\indent{3}} -% -\axiom{x = y} tests if \axiom{x} and \axiom{y} are equal. -% -\texht{\end{quotation}}{\indent{0}} -% - -For our purposes in this chapter, we omit the documentation from further -category descriptions. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugCategoriesHierTitle}{Hierarchies} -\newcommand{\ugCategoriesHierNumber}{12.4.} - -@ -\subsection{12.4. Hierarchies} -\label{ugCategoriesHierPage} -\index{pages!ugCategoriesHierPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesHierPage} -\index{ugCategoriesHierPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesHierPage}{12.4. Hierarchies} -\beginscroll - -A second example of a category is -\spadtype{SemiGroup}, defined by: - -\beginImportant - -\noindent -{\tt 1.\ \ \ SemiGroup():\ Category\ ==\ SetCategory\ with}\newline -{\tt 2.\ \ \ \ \ \ \ \ \ "*":\ \ (\$,\$)\ ->\ \$}\newline -{\tt 3.\ \ \ \ \ \ \ \ \ "**":\ (\$,\ PositiveInteger)\ ->\ \$}\newline -\endImportant - -This definition is as simple as that for \spadtype{SetCategory}, -except that there are two exported operations. -Multiple exported operations are written as a \spadgloss{pile}, -that is, they all begin in the same column. -Here you see that the category mentions another type, -\spadtype{PositiveInteger}, in a signature. -Any domain can be used in a signature. - -Since categories extend one another, they form hierarchies. -Each category other than \spadtype{Type} has one or more parents given -by the one or more categories mentioned before the \spad{with} part of -the definition. -\spadtype{SemiGroup} extends \spadtype{SetCategory} and -\spadtype{SetCategory} extends both \spadtype{Type} and -\spadtype{CoercibleTo (OutputForm)}. -Since \spadtype{CoercibleTo (OutputForm)} also extends \spadtype{Type}, -the mention of \spadtype{Type} in the definition is unnecessary but -included for emphasis. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugCategoriesMembershipTitle}{Membership} -\newcommand{\ugCategoriesMembershipNumber}{12.5.} - -@ -\subsection{12.5. Membership} -\label{ugCategoriesMembershipPage} -\index{pages!ugCategoriesMembershipPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesMembershipPage} -\index{ugCategoriesMembershipPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesMembershipPage}{12.5. Membership} -\beginscroll - -We say a category designates a class of domains. -What class of domains? -That is, how does Axiom know what domains belong to what categories? -The simple answer to this basic question is key to the design of -Axiom: - -\beginImportant -\centerline{{{\bf Domains belong to categories by assertion.}}} -\endImportant - -When a domain is defined, it is asserted to belong to one or more -categories. -Suppose, for example, that an author of domain \spadtype{String} wishes to -use the binary operator \spadop{*} to denote concatenation. -Thus \spad{"hello " * "there"} would produce the string -\spad{"hello there"}\footnote{Actually, concatenation of strings in -Axiom is done by juxtaposition or by using the operation -\spadfunFrom{concat}{String}. -The expression \spad{"hello " "there"} produces the string -\spad{"hello there"}.}. -The author of \spadtype{String} could then assert that \spadtype{String} -is a member of \spadtype{SemiGroup}. -According to our definition of \spadtype{SemiGroup}, strings -would then also have the operation \spadop{**} defined automatically. -Then \spad{"--" ** 4} would produce a string of eight dashes -\spad{"--------"}. -Since \spadtype{String} is a member of \spadtype{SemiGroup}, it also is -a member of \spadtype{SetCategory} and thus has an operation -\spadop{=} for testing that two strings are equal. - -\texht{Now turn to the algebraic category hierarchy inside the -front cover of this book.}{} -Any domain that is a member of a -category extending \spadtype{SemiGroup} is a member of -\spadtype{SemiGroup} (that is, it {\it is} a semigroup). -In particular, any domain asserted to be a \spadtype{Ring} is a -semigroup since \spadtype{Ring} extends \spadtype{Monoid}, that, -in turn, extends \spadtype{SemiGroup}. -The definition of \spadtype{Integer} in Axiom asserts that -\spadtype{Integer} is a member of category -\spadtype{IntegerNumberSystem}, that, in turn, asserts that it is -a member of \spadtype{EuclideanDomain}. -Now \spadtype{EuclideanDomain} extends -\spadtype{PrincipalIdealDomain} and so on. -If you trace up the hierarchy, you see that -\spadtype{EuclideanDomain} extends \spadtype{Ring}, and, -therefore, \spadtype{SemiGroup}. -Thus \spadtype{Integer} is a semigroup and also exports the -operations \spadop{*} and \spadop{**}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugCategoriesDefaultsTitle}{Defaults} -\newcommand{\ugCategoriesDefaultsNumber}{12.6.} - -@ -\subsection{12.6. Defaults} -\label{ugCategoriesDefaultsPage} -\begin{itemize} -\item ugCategoriesHierPage \ref{ugCategoriesHierPage} on -page~\pageref{ugCategoriesHierPage} -\item ugPackagesPage \ref{ugPackagesPage} on -page~\pageref{ugPackagesPage} -\end{itemize} -\index{pages!ugCategoriesDefaultsPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesDefaultsPage} -\index{ugCategoriesDefaultsPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesDefaultsPage}{12.6. Defaults} -\beginscroll - -We actually omitted the last -part of the definition of -\spadtype{SemiGroup} in -\downlink{``\ugCategoriesHierTitle''}{ugCategoriesHierPage} -in Section \ugCategoriesHierNumber\ignore{ugCategoriesHier}. -Here now is its complete Axiom definition. - -\beginImportant - -\noindent -{\tt 1.\ \ \ SemiGroup():\ Category\ ==\ SetCategory\ with}\newline -{\tt 2.\ \ \ \ \ \ \ \ \ "*":\ (\$,\ \$)\ ->\ \$}\newline -{\tt 3.\ \ \ \ \ \ \ \ \ "**":\ (\$,\ PositiveInteger)\ ->\ \$}\newline -{\tt 4.\ \ \ \ \ \ \ add}\newline -{\tt 5.\ \ \ \ \ \ \ \ \ import\ RepeatedSquaring(\$)}\newline -{\tt 6.\ \ \ \ \ \ \ \ \ x:\ \$\ **\ n:\ PositiveInteger\ ==\ expt(x,n)}\newline -\endImportant - -The \spad{add} part at the end is used to give ``default definitions'' for -\spadkey{add} -exported operations. -Once you have a multiplication operation \spadop{*}, you can -define exponentiation -for positive integer exponents -using repeated multiplication: -\centerline{{\spad{x ** n = x * x * ... * x} ( \spad{n} copies of \spad{x} )}} -This definition for \spadop{**} is called a {\it default} definition. -In general, a category can give default definitions for any -operation it exports. -Since \spadtype{SemiGroup} and all its category descendants in the hierarchy -export \spadop{**}, any descendant category may redefine \spadop{**} as well. - -A domain of category \spadtype{SemiGroup} -(such as \spadtype{Integer}) may or may not choose to -define its own \spadop{**} operation. -If it does not, a default definition that is closest (in a ``tree-distance'' -sense of the hierarchy) to the domain is chosen. - -The part of the category definition following an \spadop{add} operation -is a \spadgloss{capsule}, as discussed in -\texht{the previous chapter.} -{\downlink{``\ugPackagesTitle''}{ugPackagesPage} -in Chapter \ugPackagesNumber\ignore{ugPackages}.} -The line -\begin{verbatim} -import RepeatedSquaring($) -\end{verbatim} -references the package -\spadtype{RepeatedSquaring(\$)}, that is, the package -\spadtype{RepeatedSquaring} that takes ``this domain'' as its -parameter. -For example, if the semigroup \spadtype{Polynomial (Integer)} -does not define its own exponentiation operation, the -definition used may come from the package -\spadtype{RepeatedSquaring (Polynomial (Integer))}. -The next line gives the definition in terms of \spadfun{expt} from that -package. - -The default definitions are collected to form a ``default package'' -for the category. The name of the package is the same as the category -but with an ampersand (\spadSyntax{\&}) added at the end. A default -package always takes an additional argument relative to the category. -Here is the definition of the default package \pspadtype{SemiGroup\&} -as automatically generated by Axiom from the above definition of -\spadtype{SemiGroup}. - -\beginImportant - -\noindent -{\tt 1.\ \ \ SemiGroup\_\&(\$):\ Exports\ ==\ Implementation\ where}\newline -{\tt 2.\ \ \ \ \ \$:\ SemiGroup}\newline -{\tt 3.\ \ \ \ \ Exports\ ==\ with}\newline -{\tt 4.\ \ \ \ \ \ \ "**":\ (\$,\ PositiveInteger)\ ->\ \$}\newline -{\tt 5.\ \ \ \ \ Implementation\ ==\ add}\newline -{\tt 6.\ \ \ \ \ \ \ import\ RepeatedSquaring(\$)}\newline -{\tt 7.\ \ \ \ \ \ \ x:\$\ **\ n:PositiveInteger\ ==\ expt(x,n)}\newline -\endImportant - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugCategoriesAxiomsTitle}{Axioms} -\newcommand{\ugCategoriesAxiomsNumber}{12.7.} - -@ -\subsection{12.7. Axioms} -\label{ugCategoriesAxiomsPage} -\begin{itemize} -\item ugCategoriesDefaultsPage \ref{ugCategoriesDefaultsPage} on -page~\pageref{ugCategoriesDefaultsPage} -\end{itemize} -\index{pages!ugCategoriesAxiomsPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesAxiomsPage} -\index{ugCategoriesAxiomsPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesAxiomsPage}{12.7. Axioms} -\beginscroll - -In \texht{the previous section} -{\downlink{``\ugCategoriesDefaultsTitle''}{ugCategoriesDefaultsPage} -in Section \ugCategoriesDefaultsNumber\ignore{ugCategoriesDefaults}} -you saw the complete Axiom program defining \index{axiom} -\spadtype{SemiGroup}. According to this definition, semigroups (that -is, are sets with the operations \spadopFrom{*}{SemiGroup} and -\spadopFrom{**}{SemiGroup}. - -You might ask: ``Aside from the notion of default packages, isn't a -category just a \spadgloss{macro}, that is, a shorthand equivalent to -the two operations \spadop{*} and \spadop{**} with their types?'' If a -category were a macro, every time you saw the word -\spadtype{SemiGroup}, you would rewrite it by its list of exported -operations. Furthermore, every time you saw the exported operations -of \spadtype{SemiGroup} among the exports of a constructor, you could -conclude that the constructor exported \spadtype{SemiGroup}. - -A category is {\it not} a macro and here is why. -The definition for \spadtype{SemiGroup} has documentation that states: - -\texht{\begin{quotation}}{\indent{3}} - Category \spadtype{SemiGroup} denotes the class of all multiplicative - semigroups, that is, a set with an associative operation \spadop{*}. - - \texht{\vskip .5\baselineskip}{} - {Axioms:} - - {\small\tt associative("*" : (\$,\$)->\$) -- (x*y)*z = x*(y*z)} -\texht{\end{quotation}}{\indent{3}} - -According to the author's remarks, the mere exporting of an operation -named \spadop{*} and \spadop{**} is not enough to qualify the domain -as a \spadtype{SemiGroup}. In fact, a domain can be a semigroup only -if it explicitly exports a \spadop{**} and a \spadop{*} satisfying the -associativity axiom. - -In general, a category name implies a set of axioms, even mathematical -theorems. There are numerous axioms from \spadtype{Ring}, for -example, that are well-understood from the literature. No attempt is -made to list them all. Nonetheless, all such mathematical facts are -implicit by the use of the name \spadtype{Ring}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugCategoriesCorrectnessTitle}{Correctness} -\newcommand{\ugCategoriesCorrectnessNumber}{12.8.} - -@ -\subsection{12.8. Correctness} -\label{ugCategoriesCorrectnessPage} -\index{pages!ugCategoriesCorrectnessPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesCorrectnessPage} -\index{ugCategoriesCorrectnessPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesCorrectnessPage}{12.8. Correctness} -\beginscroll - -While such statements are only comments, -Axiom can enforce their intention simply by shifting the burden of -responsibility onto the author of a domain. -A domain belongs to category \spad{Ring} only if the -author asserts that the domain belongs to \spadtype{Ring} or -to a category that extends \spadtype{Ring}. - -This principle of assertion is important for large user-extendable -systems. -Axiom has a large library of operations offering facilities in -many areas. -Names such as \spadfun{norm} and \spadfun{product}, for example, have -diverse meanings in diverse contexts. -An inescapable hindrance to users would be to force those who wish to -extend Axiom to always invent new names for operations. -%>> I don't think disambiguate is really a word, though I like it -Axiom allows you to reuse names, and then use context to disambiguate one -from another. - -Here is another example of why this is important. -Some languages, such as {\bf APL}, -denote the \spadtype{Boolean} constants \spad{true} and -\spad{false} by the integers \spad{1} and \spad{0}. -You may want to let infix operators \spadop{+} and \spadop{*} serve as the logical -operators \spadfun{or} and \spadfun{and}, respectively. -But note this: \spadtype{Boolean} is not a ring. -The {\it inverse axiom} for \spadtype{Ring} states: -% -\centerline{{Every element \spad{x} has an additive inverse \spad{y} such that}} -\centerline{{\spad{x + y = 0}.}} -% -\spadtype{Boolean} is not a ring since \spad{true} has -no inverse---there is no inverse element \spad{a} such that -\spad{1 + a = 0} (in terms of booleans, \spad{(true or a) = false}). -Nonetheless, Axiom {\it could} easily and correctly implement -\spadtype{Boolean} this way. -\spadtype{Boolean} simply would not assert that it is of category -\spadtype{Ring}. -Thus the \spadop{+} for \spadtype{Boolean} values -is not confused with the one for \spadtype{Ring}. -Since the \spadtype{Polynomial} constructor requires its argument -to be a ring, Axiom would then refuse to build the -domain \spadtype{Polynomial(Boolean)}. Also, Axiom would refuse to -wrongfully apply algorithms to \spadtype{Boolean} elements that presume that the -ring axioms for \spadop{+} hold. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugCategoriesAttributesTitle}{Attributes} -\newcommand{\ugCategoriesAttributesNumber}{12.9.} - -@ -\subsection{12.9. Attributes} -\label{ugCategoriesAttributesPage} -\begin{itemize} -\item ugDomainsAssertionsPage \ref{ugDomainsAssertionsPage} on -page~\pageref{ugDomainsAssertionsPage} -\end{itemize} -\index{pages!ugCategoriesAttributesPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesAttributesPage} -\index{ugCategoriesAttributesPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesAttributesPage}{12.9. Attributes} -\beginscroll - -Most axioms are not computationally useful. -Those that are can be explicitly expressed by what Axiom calls an -\spadgloss{attribute}. -The attribute \spadatt{commutative("*")}, for example, is used to assert -that a domain has commutative multiplication. -Its definition is given by its documentation: - -\texht{\begingroup \parindent=1pc \narrower\noindent}{\indent{3}}% - A domain \spad{R} has \spadatt{commutative("*")} - if it has an operation "*": \spadsig{(R,R)}{R} such that \spad{x * y = y * x}. -\texht{\par\endgroup}{\indent{0}} - -Just as you can test whether a domain has the category \spadtype{Ring}, you -can test that a domain has a given attribute. - -\xtc{ -Do polynomials over the integers -have commutative multiplication? -}{ -\spadpaste{Polynomial Integer has commutative("*")} -} -\xtc{ -Do matrices over the integers -have commutative multiplication? -}{ -\spadpaste{Matrix Integer has commutative("*")} -} - -Attributes are used to conditionally export and define -operations for a domain (see -\downlink{``\ugDomainsAssertionsTitle''}{ugDomainsAssertionsPage} in -Section \ugDomainsAssertionsNumber\ignore{ugDomainsAssertions}). -Attributes can also be asserted in a category definition. - -After mentioning category \spadtype{Ring} many times in this book, -it is high time that we show you its definition: - -\beginImportant - -\noindent -{\tt 1.\ \ \ Ring():\ Category\ ==}\newline -{\tt 2.\ \ \ \ \ Join(Rng,Monoid,LeftModule(\$:\ Rng))\ with}\newline -{\tt 3.\ \ \ \ \ \ \ \ \ characteristic:\ ->\ NonNegativeInteger}\newline -{\tt 4.\ \ \ \ \ \ \ \ \ coerce:\ Integer\ ->\ \$}\newline -{\tt 5.\ \ \ \ \ \ \ \ \ unitsKnown}\newline -{\tt 6.\ \ \ \ \ \ \ add}\newline -{\tt 7.\ \ \ \ \ \ \ \ \ n:Integer}\newline -{\tt 8.\ \ \ \ \ \ \ \ \ coerce(n)\ ==\ n\ *\ 1\$\$}\newline -\endImportant - -There are only two new things here. First, look at the -\spadSyntax{\$\$} on the last line. This is not a typographic error! -The first \spadSyntax{\$} says that the \spad{1} is to come from some -domain. The second \spadSyntax{\$} says that the domain is ``this -domain.'' If \spadSyntax{\$} is \spadtype{Fraction(Integer)}, this -line reads {\tt coerce(n) == n * 1\$Fraction(Integer)}. - -The second new thing is the presence of attribute -``\spad{unitsKnown}''. Axiom can always distinguish an attribute from -an operation. An operation has a name and a type. An attribute has no -type. The attribute \spadatt{unitsKnown} asserts a rather subtle -mathematical fact that is normally taken for granted when working with -rings.\footnote{With this axiom, the units of a domain are the set of -elements \spad{x} that each have a multiplicative inverse \spad{y} in -the domain. Thus \spad{1} and \spad{-1} are units in domain -\spadtype{Integer}. Also, for \spadtype{Fraction Integer}, the domain -of rational numbers, all non-zero elements are units.} Because -programs can test for this attribute, Axiom can correctly handle -rather more complicated mathematical structures (ones that are similar -to rings but do not have this attribute). - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugCategoriesParametersTitle}{Parameters} -\newcommand{\ugCategoriesParametersNumber}{12.10.} - -@ -\subsection{12.10. Parameters} -\label{ugCategoriesParametersPage} -\index{pages!ugCategoriesParametersPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesParametersPage} -\index{ugCategoriesParametersPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesParametersPage}{12.10. Parameters} -\beginscroll - -Like domain constructors, category constructors can also have -parameters. -For example, category \spadtype{MatrixCategory} is a parameterized -category for defining matrices over a ring \spad{R} so that the -matrix domains can have -different representations and indexing schemes. -Its definition has the form: - -\beginImportant - -\noindent -{\tt 1.\ \ \ MatrixCategory(R,Row,Col):\ Category\ ==}\newline -{\tt 2.\ \ \ \ \ \ \ TwoDimensionalArrayCategory(R,Row,Col)\ with\ ...}\newline -\endImportant - -The category extends \spadtype{TwoDimensionalArrayCategory} with -the same arguments. -You cannot find \spadtype{TwoDimensionalArrayCategory} in the -algebraic hierarchy listing. -Rather, it is a member of the data structure hierarchy, -given inside the back cover of this book. -In particular, \spadtype{TwoDimensionalArrayCategory} is an extension of -\spadtype{HomogeneousAggregate} since its elements are all one type. - -The domain \spadtype{Matrix(R)}, the class of matrices with coefficients -from domain \spad{R}, asserts that it is a member of category -\spadtype{MatrixCategory(R, Vector(R), Vector(R))}. -The parameters of a category must also have types. -The first parameter to \spadtype{MatrixCategory} -\spad{R} is required to be a ring. -The second and third are required to be domains of category -\spadtype{FiniteLinearAggregate(R)}.\footnote{% -This is another extension of -\spadtype{HomogeneousAggregate} that you can see in -the data structure hierarchy.} -In practice, examples of categories having parameters other than -domains are rare. - -Adding the declarations for parameters to the definition for -\spadtype{MatrixCategory}, we have: - -\beginImportant - -\noindent -{\tt 1.\ \ \ R:\ Ring}\newline -{\tt 2.\ \ \ (Row,\ Col):\ FiniteLinearAggregate(R)}\newline -{\tt 3.\ \ \ }\newline -{\tt 4.\ \ \ MatrixCategory(R,\ Row,\ Col):\ Category\ ==}\newline -{\tt 5.\ \ \ \ \ \ \ TwoDimensionalArrayCategory(R,\ Row,\ Col)\ with\ ...}\newline -\endImportant - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugCategoriesConditionalsTitle}{Conditionals} -\newcommand{\ugCategoriesConditionalsNumber}{12.11.} - -@ -\subsection{12.11. Conditionals} -\label{ugCategoriesConditionalsPage} -\begin{itemize} -\item ugPackagesCondsPage \ref{ugPackagesCondsPage} on -page~\pageref{ugPackagesCondsPage} -\end{itemize} -\index{pages!ugCategoriesConditionalsPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesConditionalsPage} -\index{ugCategoriesConditionalsPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesConditionalsPage}{12.11. Conditionals} -\beginscroll - -As categories have parameters, the actual operations exported by a -category can depend on these parameters. -As an example, the operation \spadfunFrom{determinant}{MatrixCategory} -from category \spadtype{MatrixCategory} is only exported when the -underlying domain \spad{R} has commutative multiplication: - -\begin{verbatim} -if R has commutative("*") then - determinant: $ -> R -\end{verbatim} - -Conditionals can also define conditional extensions of a category. -Here is a portion of the definition of \spadtype{QuotientFieldCategory}: - -\beginImportant - -\noindent -{\tt 1.\ \ \ QuotientFieldCategory(R)\ :\ Category\ ==\ ...\ with\ ...}\newline -{\tt 2.\ \ \ \ \ \ \ \ if\ R\ has\ OrderedSet\ then\ OrderedSet}\newline -{\tt 3.\ \ \ \ \ \ \ \ if\ R\ has\ IntegerNumberSystem\ then}\newline -{\tt 4.\ \ \ \ \ \ \ \ \ \ ceiling:\ \$\ ->\ R}\newline -{\tt 5.\ \ \ \ \ \ \ \ \ \ \ \ ...}\newline -\endImportant - -Think of category \spadtype{QuotientFieldCategory(R)} as -denoting the domain \spadtype{Fraction(R)}, the -class of all fractions of the form \smath{a/b} for elements of \spad{R}. -The first conditional means in English: -``If the elements of \spad{R} are totally ordered (\spad{R} -is an \spadtype{OrderedSet}), then so are the fractions \smath{a/b}''. - -The second conditional is used to conditionally export an -operation \spadfun{ceiling} which returns the smallest integer -greater than or equal to its argument. -Clearly, ``ceiling'' makes sense for integers but not for -polynomials and other algebraic structures. -Because of this conditional, -the domain \spadtype{Fraction(Integer)} exports -an operation -\spadfun{ceiling}: \spadsig{Fraction Integer}{Integer}, but -\spadtype{Fraction Polynomial Integer} does not. - -Conditionals can also appear in the default definitions for the -operations of a category. -For example, a default definition for \spadfunFrom{ceiling}{Field} -within the part following the \spadop{add} reads: - -\begin{verbatim} -if R has IntegerNumberSystem then - ceiling x == ... -\end{verbatim} - -Here the predicate used is identical to the predicate in the {\tt -Exports} part. This need not be the case. See -\downlink{``\ugPackagesCondsTitle''}{ugPackagesCondsPage} in Section -\ugPackagesCondsNumber\ignore{ugPackagesConds} for a more complicated -example. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugCategoriesAndPackagesTitle}{Anonymous Categories} -\newcommand{\ugCategoriesAndPackagesNumber}{12.12.} - -@ -\subsection{12.12. Anonymous Categories} -\label{ugCategoriesAndPackagesPage} -\begin{itemize} -\item ugPackagesAbstractPage \ref{ugPackagesAbstractPage} on -page~\pageref{ugPackagesAbstractPage} -\end{itemize} -\index{pages!ugCategoriesAndPackagesPage!ug12.ht} -\index{ug12.ht!pages!ugCategoriesAndPackagesPage} -\index{ugCategoriesAndPackagesPage!ug12.ht!pages} -<>= -\begin{page}{ugCategoriesAndPackagesPage}{12.12. Anonymous Categories} -\beginscroll - -The part of a category to the right of a {\tt with} is also regarded -as a category---an ``anonymous category.'' Thus you have already seen -a category definition The {\tt Exports} part of the package -\pspadtype{DrawComplex} -(\downlink{``\ugPackagesAbstractTitle''}{ugPackagesAbstractPage} in -Section \ugPackagesAbstractNumber\ignore{ugPackagesAbstract}) is an -anonymous category. This is not necessary. We could, instead, give -this category a name: - -% -\beginImportant - -\noindent -{\tt 1.\ \ \ DrawComplexCategory():\ Category\ ==\ with}\newline -{\tt 2.\ \ \ \ \ \ drawComplex:\ (C\ ->\ C,S,S,Boolean)\ ->\ VIEW3D}\newline -{\tt 3.\ \ \ \ \ \ drawComplexVectorField:\ (C\ ->\ C,S,S)\ ->\ VIEW3D}\newline -{\tt 4.\ \ \ \ \ \ setRealSteps:\ INT\ ->\ INT}\newline -{\tt 5.\ \ \ \ \ \ setImagSteps:\ INT\ ->\ INT}\newline -{\tt 6.\ \ \ \ \ \ setClipValue:\ DFLOAT->\ DFLOAT}\newline -\endImportant -% -and then define \spadtype{DrawComplex} by: -% -\beginImportant - -\noindent -{\tt 1.\ \ \ DrawComplex():\ DrawComplexCategory\ ==\ Implementation}\newline -{\tt 2.\ \ \ \ \ \ where}\newline -{\tt 3.\ \ \ \ \ \ \ \ \ ...}\newline -\endImportant -% - -There is no reason, however, to give this list of exports a name -since no other domain or package exports it. -In fact, it is rare for a package to export a named category. -As you will see in the next chapter, however, it is very common -for the definition of domains to mention one or more category -before the {\tt with}. -\spadkey{with} -\endscroll -\autobuttons +\indent{0} +\end{scroll} +\autobutt{MainHelp} \end{page} @ -\section{ug13.ht} -<>= -\newcommand{\ugDomainsTitle}{Domains} -\newcommand{\ugDomainsNumber}{13.} - -@ -\subsection{13. Domains} -\label{ugDomainsPage} -\begin{itemize} -\item ugPackagesDomsPage \ref{ugPackagesDomsPage} on -page~\pageref{ugPackagesDomsPage} -\item ugDomainsDefsPage \ref{ugDomainsDefsPage} on -page~\pageref{ugDomainsDefsPage} -\item ugDomainsAssertionsPage \ref{ugDomainsAssertionsPage} on -page~\pageref{ugDomainsAssertionsPage} -\item ugDomainsDemoPage \ref{ugDomainsDemoPage} on -page~\pageref{ugDomainsDemoPage} -\item ugDomainsBrowsePage \ref{ugDomainsBrowsePage} on -page~\pageref{ugDomainsBrowsePage} -\item ugDomainsRepPage \ref{ugDomainsRepPage} on -page~\pageref{ugDomainsRepPage} -\item ugDomainsMultipleRepsPage \ref{ugDomainsMultipleRepsPage} on -page~\pageref{ugDomainsMultipleRepsPage} -\item ugDomainsAddDomainPage \ref{ugDomainsAddDomainPage} on -page~\pageref{ugDomainsAddDomainPage} -\item ugDomainsDefaultsPage \ref{ugDomainsDefaultsPage} on -page~\pageref{ugDomainsDefaultsPage} -\item ugDomainsOriginsPage \ref{ugDomainsOriginsPage} on -page~\pageref{ugDomainsOriginsPage} -\item ugDomainsShortFormsPage \ref{ugDomainsShortFormsPage} on -page~\pageref{ugDomainsShortFormsPage} -\item ugDomainsCliffordPage \ref{ugDomainsCliffordPage} on -page~\pageref{ugDomainsCliffordPage} -\item ugDomsinsDatabasePage \ref{ugDomsinsDatabasePage} on -page~\pageref{ugDomsinsDatabasePage} -\end{itemize} -\index{pages!ugDomainsPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsPage} -\index{ugDomainsPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsPage}{13. Domains} -\beginscroll - -We finally come to the \spadgloss{domain constructor}. -A few subtle differences between packages and -domains turn up some interesting issues. -We first discuss these differences then -describe the resulting issues by illustrating a program -for the \axiomType{QuadraticForm} constructor. -After a short example of an algebraic constructor, -\axiomType{CliffordAlgebra}, we show how you use domain constructors to build -a database query facility. - +\subsection{Ordinary Differential Equations} +\label{UXANNAOde} +\index{pages!UXANNAOde!annaex.ht} +\index{annaex.ht!pages!UXANNAOde} +\index{UXANNAOde!annaex.ht!pages} +<>= +\begin{page}{UXANNAOde}{Ordinary Differential Equations} +Welcome to the Ordinary Differential Equations section of {\tt +\inputbitmap{\htbmdir{}/anna.xbm.tiny}}, the +{\em Axiom/NAG Expert System}. +This system chooses, and uses, NAG numerical routines. +\begin{scroll} +\blankline +\blankline +\indent{2} \beginmenu - \menudownlink{{13.1. Domains vs. Packages}}{ugPackagesDomsPage} - \menudownlink{{13.2. Definitions}}{ugDomainsDefsPage} - \menudownlink{{13.3. Category Assertions}}{ugDomainsAssertionsPage} - \menudownlink{{13.4. A Demo}}{ugDomainsDemoPage} - \menudownlink{{13.5. Browse}}{ugDomainsBrowsePage} - \menudownlink{{13.6. Representation}}{ugDomainsRepPage} - \menudownlink{{13.7. Multiple Representations}}{ugDomainsMultipleRepsPage} - \menudownlink{{13.8. Add Domain}}{ugDomainsAddDomainPage} - \menudownlink{{13.9. Defaults}}{ugDomainsDefaultsPage} - \menudownlink{{13.10. Origins}}{ugDomainsOriginsPage} - \menudownlink{{13.11. Short Forms}}{ugDomainsShortFormsPage} - \menudownlink{{13.12. Example 1: Clifford Algebra}}{ugDomainsCliffordPage} - \menudownlink{{13.13. Example 2: Building A Query Facility}} -{ugDomsinsDatabasePage} +\item \menulispdownlink{Ordinary Differential Equations}{(|annaOde|)}\space{}\newline +\indent{5} Finding a solution to an Initial Value Problem of a set of Ordinary Differential Equations. +\blankline +\menudownlink{Examples}{UXANNAOdeEx}\newline +\indent{5} Examples of ODE problems with various features using both stiff +and non-stiff methods. Parameters can be changed to investigate the effect +on the choice of method. +\autobutt{MainHelp} \endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugPackagesDomsTitle}{Domains vs. Packages} -\newcommand{\ugPackagesDomsNumber}{13.1.} - -@ -\subsection{13.1. Domains vs. Packages} -\label{ugPackagesDomsPage} -\begin{itemize} -\item ugPackagesPage \ref{ugPackagesPage} on -page~\pageref{ugPackagesPage} -\end{itemize} -\index{pages!ugPackagesDomsPage!ug13.ht} -\index{ug13.ht!pages!ugPackagesDomsPage} -\index{ugPackagesDomsPage!ug13.ht!pages} -<>= -\begin{page}{ugPackagesDomsPage}{13.1. Domains vs. Packages} -\beginscroll -% -Packages are special cases of domains. -What is the difference between a package and a domain that is not a -package? -By definition, there is only one difference: a domain that is not a package -has the symbol \axiomSyntax{\$} appearing -somewhere among the types of its exported operations. -The \axiomSyntax{\$} denotes ``this domain.'' If the \axiomSyntax{\$} -appears before the \axiomSyntax{->} in the type of a signature, it means -the operation takes an element from the domain as an argument. -If it appears after the \axiomSyntax{->}, then the operation returns an -element of the domain. - -If no exported operations mention \axiomSyntax{\$}, then evidently -there is nothing of interest to do with the objects of the domain. -You might then say that a package is a ``boring'' domain! But, as you -saw in \downlink{``\ugPackagesTitle''}{ugPackagesPage} in Chapter -\ugPackagesNumber\ignore{ugPackages}, packages are a very useful -notion indeed. The exported operations of a package depend solely on -the parameters to the package constructor and other explicit domains. - -To summarize, domain constructors are versatile structures that serve -two distinct practical purposes: Those like \axiomType{Polynomial} and -\axiomType{List} describe classes of computational objects; others, -like \pspadtype{SortPackage}, describe packages of useful operations. -As in the last chapter, we focus here on the first kind. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsDefsTitle}{Definitions} -\newcommand{\ugDomainsDefsNumber}{13.2.} - -@ -\subsection{13.2. Definitions} -\label{ugDomainsDefsPage} -\index{pages!ugDomainsDefsPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsDefsPage} -\index{ugDomainsDefsPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsDefsPage}{13.2. Definitions} -\beginscroll -% - -The syntax for defining a domain constructor is the same as for any -function in Axiom: -\centerline{{\frenchspacing{\tt {\it DomainForm} : {\it Exports} == {\it Implementation}}}} -As this definition usually extends over many lines, a -\axiom{where} expression is generally used instead. -\spadkey{where} - -\beginImportant -A recommended format for the definition of a domain is:\newline -{\tt% -{\it DomainForm} : Exports == Implementation where \newline -\texht{\hspace*{.75pc}}{\tab{8}} {\it optional type declarations} \newline -\texht{\hspace*{.75pc}}{\tab{3}} Exports == [{\it Category Assertions}] with \newline -\texht{\hspace*{2.0pc}}{\tab{8}} {\it list of exported operations} \newline -\texht{\hspace*{.75pc}}{\tab{3}} Implementation == [{\it Add Domain}] add \newline -\texht{\hspace*{2.0pc}}{\tab{6}} [Rep := {\it Representation}] \newline -\texht{\hspace*{2.0pc}}{\tab{8}} {\it list of function definitions for exported operations} -} - -\texht{\vskip 4pt}{} -Note: The brackets {\tt [ ]} here denote optionality. -\endImportant - -A complete domain constructor definition for -\axiomType{QuadraticForm} is shown in Figure \ref{fig-quadform}. -Interestingly, this little domain illustrates all the new -concepts you need to learn. - -\beginImportant - -\noindent -{\tt 1.\ \ \ )abbrev\ domain\ QFORM\ QuadraticForm}\newline -{\tt 2.\ \ \ }\newline -{\tt 3.\ \ \ ++\ Description:}\newline -{\tt 4.\ \ \ ++\ \ \ This\ domain\ provides\ modest\ support\ for}\newline -{\tt 5.\ \ \ ++\ \ \ quadratic\ forms.}\newline -{\tt 6.\ \ \ QuadraticForm(n,\ K):\ Exports\ ==\ Implementation\ where}\newline -{\tt 7.\ \ \ \ \ \ \ n:\ PositiveInteger}\newline -{\tt 8.\ \ \ \ \ \ \ K:\ Field}\newline -{\tt 9.\ \ \ }\newline -{\tt 10.\ \ \ \ \ \ Exports\ ==\ AbelianGroup\ with}\newline -{\tt 11.\ \ \ \ \ \ \ \ quadraticForm:\ SquareMatrix(n,K)\ ->\ \$}\newline -{\tt 12.\ \ \ \ \ \ \ \ \ \ ++\ \bs{}axiom\{quadraticForm(m)\}\ creates\ a\ quadratic}\newline -{\tt 13.\ \ \ \ \ \ \ \ \ \ ++\ quadratic\ form\ from\ a\ symmetric,}\newline -{\tt 14.\ \ \ \ \ \ \ \ \ \ ++\ square\ matrix\ \bs{}axiom\{m\}.}\newline -{\tt 15.\ \ \ \ \ \ \ \ matrix:\ \$\ ->\ SquareMatrix(n,K)}\newline -{\tt 16.\ \ \ \ \ \ \ \ \ \ ++\ \bs{}axiom\{matrix(qf)\}\ creates\ a\ square\ matrix}\newline -{\tt 17.\ \ \ \ \ \ \ \ \ \ ++\ from\ the\ quadratic\ form\ \bs{}axiom\{qf\}.}\newline -{\tt 18.\ \ \ \ \ \ \ \ elt:\ (\$,\ DirectProduct(n,K))\ ->\ K}\newline -{\tt 19.\ \ \ \ \ \ \ \ \ \ ++\ \bs{}axiom\{qf(v)\}\ evaluates\ the\ quadratic\ form}\newline -{\tt 20.\ \ \ \ \ \ \ \ \ \ ++\ \bs{}axiom\{qf\}\ on\ the\ vector\ \bs{}axiom\{v\},}\newline -{\tt 21.\ \ \ \ \ \ \ \ \ \ ++\ producing\ a\ scalar.}\newline -{\tt 22.\ \ }\newline -{\tt 23.\ \ \ \ \ \ Implementation\ ==\ SquareMatrix(n,K)\ add}\newline -{\tt 24.\ \ \ \ \ \ \ \ Rep\ :=\ SquareMatrix(n,K)}\newline -{\tt 25.\ \ \ \ \ \ \ \ quadraticForm\ m\ ==}\newline -{\tt 26.\ \ \ \ \ \ \ \ \ \ not\ symmetric?\ m\ =>\ error}\newline -{\tt 27.\ \ \ \ \ \ \ \ \ \ \ \ "quadraticForm\ requires\ a\ symmetric\ matrix"}\newline -{\tt 28.\ \ \ \ \ \ \ \ \ \ m\ ::\ \$}\newline -{\tt 29.\ \ \ \ \ \ \ \ matrix\ q\ ==\ q\ ::\ Rep}\newline -{\tt 30.\ \ \ \ \ \ \ \ elt(q,v)\ ==\ dot(v,\ (matrix\ q\ *\ v))}\newline -% -\caption{The \protect\axiomType{QuadraticForm} domain.}\label{fig-quadform} -\endImportant - -A domain constructor can take any number and type of parameters. -\axiomType{QuadraticForm} takes a positive integer \axiom{n} and a field -\axiom{K} as arguments. -Like a package, a domain has a set of explicit exports and an -implementation described by a capsule. -Domain constructors are documented in the same way as package constructors. - -Domain \axiomType{QuadraticForm(n, K)}, for a given positive integer -\axiom{n} and domain \axiom{K}, explicitly exports three operations: -% -\indent{4} -\beginitems -\item\axiom{quadraticForm(A)} creates a quadratic form from a matrix -\axiom{A}. -\item\axiom{matrix(q)} returns the matrix \axiom{A} used to create -the quadratic form \axiom{q}. -\item\axiom{q.v} computes the scalar \texht{$v^TAv$}{transpose(v)*A*v} -for a given vector \axiom{v}. -\enditems \indent{0} - -Compared with the corresponding syntax given for the definition of a -package, you see that a domain constructor has three optional parts to -its definition: {\it Category Assertions}, {\it Add Domain}, and -{\it Representation}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsAssertionsTitle}{Category Assertions} -\newcommand{\ugDomainsAssertionsNumber}{13.3.} - -@ -\subsection{13.3. Category Assertions} -\label{ugDomainsAssertionsPage} -\begin{itemize} -\item ugCategoriesCorrectnessPage \ref{ugCategoriesCorrectnessPage} on -page~\pageref{ugCategoriesCorrectnessPage} -\item ugCategoriesConditionalsPage \ref{ugCategoriesConditionalsPage} on -page~\pageref{ugCategoriesConditionalsPage} -\end{itemize} -\index{pages!ugDomainsAssertionsPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsAssertionsPage} -\index{ugDomainsAssertionsPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsAssertionsPage}{13.3. Category Assertions} -\beginscroll -% - -The {\it Category Assertions} part of your domain constructor -definition lists those categories of which all domains created by the -constructor are unconditionally members. The word ``unconditionally'' -means that membership in a category does not depend on the values of -the parameters to the domain constructor. This part thus defines the -link between the domains and the category hierarchies given on the -inside covers of this book. As described in -\downlink{``\ugCategoriesCorrectnessTitle''}{ugCategoriesCorrectnessPage} -in Section -\ugCategoriesCorrectnessNumber\ignore{ugCategoriesCorrectness}, it is -this link that makes it possible for you to pass objects of the -domains as arguments to other operations in Axiom. - -Every \axiomType{QuadraticForm} domain is declared to be -unconditionally a member of category \axiomType{AbelianGroup}. An -abelian group is a collection of elements closed under addition. -Every object {\it x} of an abelian group has an additive inverse {\it -y} such that \texht{$x + y = 0$}{\axiom{{\it x} + {\it y} = 0}}. The -exports of an abelian group include \axiom{0}, \axiomOp{+}, -\axiomOp{-}, and scalar multiplication by an integer. After asserting -that \axiomType{QuadraticForm} domains are abelian groups, it is -possible to pass quadratic forms to algorithms that only assume -arguments to have these abelian group properties. - -In -\downlink{``\ugCategoriesConditionalsTitle''}{ugCategoriesConditionalsPage} -in Section -\ugCategoriesConditionalsNumber\ignore{ugCategoriesConditionals}, you -saw that \axiomType{Fraction(R)}, a member of -\axiomType{QuotientFieldCategory(R)}, is a member of -\axiomType{OrderedSet} if \axiom{R} is a member of -\axiomType{OrderedSet}. Likewise, from the {\tt Exports} part of the -definition of \axiomType{ModMonic(R, S)}, \begin{verbatim} -UnivariatePolynomialCategory(R) with - if R has Finite then Finite - ... -\end{verbatim} -you see that \axiomType{ModMonic(R, S)} is a member of -\axiomType{Finite} is \axiom{R} is. - -The {\tt Exports} part of a domain definition is the same kind of -expression that can appear to the right of an \axiomSyntax{==} in a -category definition. If a domain constructor is unconditionally a -member of two or more categories, a \axiom{Join} form is used. -\spadkey{Join} The {\tt Exports} part of the definition of -\axiomType{FlexibleArray(S)} reads, for example: -\begin{verbatim} -Join(ExtensibleLinearAggregate(S), - OneDimensionalArrayAggregate(S)) with... -\end{verbatim} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsDemoTitle}{A Demo} -\newcommand{\ugDomainsDemoNumber}{13.4.} - -@ -\subsection{13.4. A Demo} -\label{ugDomainsDemoPage} -\index{pages!ugDomainsDemoPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsDemoPage} -\index{ugDomainsDemoPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsDemoPage}{13.4. A Demo} -\beginscroll -% -Before looking at the {\it Implementation} part of \axiomType{QuadraticForm}, -let's try some examples. - -\texht{\vskip 2pc}{} -\xtc{ -Build a domain \axiom{QF}. -}{ -\spadpaste{QF := QuadraticForm(2,Fraction Integer)\bound{x2}\free{x1}} -} -\xtc{ -Define a matrix to be used to construct -a quadratic form. -}{ -\spadpaste{A := matrix [[-1,1/2],[1/2,1]]\bound{x3}\free{x2}} -} -\xtc{ -Construct the quadratic form. -A package call {\tt \$QF} is necessary since there -are other \axiomType{QuadraticForm} domains. -}{ -\spadpaste{q : QF := quadraticForm(A)\bound{x4}\free{x3}} -} -\xtc{ -Looks like a matrix. Try computing -the number of rows. -Axiom won't let you. -}{ -\spadpaste{nrows q\free{x3}} -} -\xtc{ -Create a direct product element \axiom{v}. -A package call is again necessary, but Axiom -understands your list as denoting a vector. -}{ -\spadpaste{v := directProduct([2,-1])\$DirectProduct(2,Fraction Integer)\bound{x5}\free{x4}} -} -\xtc{ -Compute the product \texht{$v^TAv$}{transpose(v)*A*v}. -}{ -\spadpaste{q.v\free{x5}} -} -\xtc{ -What is 3 times \axiom{q} minus \axiom{q} plus \axiom{q}? -}{ -\spadpaste{3*q-q+q\free{x4}} -} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsBrowseTitle}{Browse} -\newcommand{\ugDomainsBrowseNumber}{13.5.} - -@ -\subsection{13.5. Browse} -\label{ugDomainsBrowsePage} -\index{pages!ugDomainsBrowsePage!ug13.ht} -\index{ug13.ht!pages!ugDomainsBrowsePage} -\index{ugDomainsBrowsePage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsBrowsePage}{13.5. Browse} -\beginscroll - -The \Browse{} facility of \HyperName{} is useful for -investigating -the properties of domains, packages, and categories. -From the main \HyperName{} menu, move your mouse to {\bf Browse} and -click on the left mouse button. -This brings up the \Browse{} first page. -Now, with your mouse pointer somewhere in this window, enter the -string ``quadraticform'' into the input area (all lower case -letters will do). -Move your mouse to {\bf Constructors} and click. -Up comes a page describing \axiomType{QuadraticForm}. - -From here, click on {\bf Description}. -This gives you a page that includes a part labeled by ``{\it -Description:}''. -You also see the types for arguments \axiom{n} and \axiom{K} -displayed as well as the fact that \axiomType{QuadraticForm} -returns an \axiomType{AbelianGroup}. -You can go and experiment a bit by selecting {\bf Field} with -your mouse. -Eventually, use -\UpButton{} -several times to return to the first page on -\axiomType{QuadraticForm}. - -Select {\bf Operations} to get a list of operations for -\axiomType{QuadraticForm}. -You can select an operation by clicking on it -to get an individual page with information about that operation. -Or you can select the buttons along the bottom to see alternative -views or get additional information on the operations. -Then return to the page on \axiomType{QuadraticForm}. - -Select {\bf Cross Reference} to get another menu. -This menu has buttons for {\bf Parents}, {\bf Ancestors}, and -others. -Clicking on {\bf Parents}, you see that \axiomType{QuadraticForm} -has one parent \axiomType{AbelianMonoid}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsRepTitle}{Representation} -\newcommand{\ugDomainsRepNumber}{13.6.} - -@ -\subsection{13.6. Representation} -\label{ugDomainsRepPage} -\begin{itemize} -\item ugDomainsDemoPage \ref{ugDomainsDemoPage} on -page~\pageref{ugDomainsDemoPage} -\end{itemize} -\index{pages!ugDomainsRepPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsRepPage} -\index{ugDomainsRepPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsRepPage}{13.6. Representation} -\beginscroll -% -The {\tt Implementation} part of an Axiom capsule for a -domain constructor uses the special variable \axiom{Rep} to -identify the lower level data type used to represent the objects -of the domain. -The \axiom{Rep} for quadratic forms is \axiomType{SquareMatrix(n, K)}. -This means that all objects of the domain are required to be -\axiom{n} by \axiom{n} matrices with elements from \axiomType{K}. - -The code for \axiomFun{quadraticForm} in Figure \ref{fig-quadform} on -page \pageref{fig-quadform} checks that the matrix is symmetric and -then converts it to \axiomSyntax{\$}, which means, as usual, ``this -domain.'' Such explicit conversions \index{conversion} are generally -required by the compiler. Aside from checking that the matrix is -symmetric, the code for this function essentially does nothing. The -{\frenchspacing\tt m :: \$} on line 28 coerces \axiom{m} to a -quadratic form. In fact, the quadratic form you created in step (3) -of \downlink{``\ugDomainsDemoTitle''}{ugDomainsDemoPage} in Section -\ugDomainsDemoNumber\ignore{ugDomainsDemo} is just the matrix you -passed it in disguise! Without seeing this definition, you would not -know that. Nor can you take advantage of this fact now that you do -know! When we try in the next step of -\downlink{``\ugDomainsDemoTitle''}{ugDomainsDemoPage} in Section -\ugDomainsDemoNumber\ignore{ugDomainsDemo} to regard \axiom{q} as a -matrix by asking for \axiomFun{nrows}, the number of its rows, Axiom -gives you an error message saying, in effect, ``Good try, but this -won't work!'' - -The definition for the \spadfunFrom{matrix}{QuadraticForm} -function could hardly be simpler: -it just returns its argument after explicitly -\spadglossSee{coercing}{coerce} its argument to a matrix. -Since the argument is already a matrix, this coercion does no computation. - -Within the context of a capsule, an object of \axiomSyntax{\$} is -regarded both as a quadratic form {\it and} as a -matrix.\footnote{In case each of \axiomSyntax{\$} and \axiom{Rep} -have the same named operation available, -the one from \axiom{\$} takes precedence. -Thus, if you want the one from \axiomSyntax{Rep}, you must -package call it using a \axiomSyntax{\$Rep} suffix.} -This makes the definition of \axiom{q.v} easy---it -just calls the \spadfunFrom{dot}{DirectProduct} product from -\axiomType{DirectProduct} to perform the indicated operation. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsMultipleRepsTitle}{Multiple Representations} -\newcommand{\ugDomainsMultipleRepsNumber}{13.7.} - -@ -\subsection{13.7. Multiple Representations} -\label{ugDomainsMultipleRepsPage} -\begin{itemize} -\item ugTypesUnionsPage \ref{ugTypesUnionsPage} on -page~\pageref{ugTypesUnionsPage} -\end{itemize} -\index{pages!ugDomainsMultipleRepsPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsMultipleRepsPage} -\index{ugDomainsMultipleRepsPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsMultipleRepsPage}{13.7. Multiple Representations} -\beginscroll -% - -To write functions that implement the operations of a domain, you -want to choose the most computationally efficient -data structure to represent the elements of your domain. - -A classic problem in computer algebra is the optimal choice for an -internal representation of polynomials. -If you create a polynomial, say \texht{$3x^2+ 5$}{\axiom{3*x**2 + 5}}, how -does Axiom hold this value internally? -There are many ways. -Axiom has nearly a dozen different representations of -polynomials, one to suit almost any purpose. -Algorithms for solving polynomial equations work most -efficiently with polynomials represented one way, whereas those for -factoring polynomials are most efficient using another. -One often-used representation is a list of terms, each term -consisting of exponent-coefficient records written in the order -of decreasing exponents. -For example, the polynomial \texht{$3x^2+5$}{3*x**2+5} is -%>> I changed the k's in next line to e's as I thought that was -%>> clearer. -represented by the list \axiom{[[e:2, c:3], [e:0, c:5]]}. - -What is the optimal data structure for a matrix? -It depends on the application. -For large sparse matrices, a linked-list structure of records -holding only the non-zero elements may be optimal. -If the elements can be defined by a simple formula -\texht{$f(i,j)$}{\axiom{f(i,j)}}, then a compiled function for -\axiom{f} may be optimal. -Some programmers prefer to represent ordinary matrices as vectors -of vectors. -Others prefer to represent matrices by one big linear array where -elements are accessed with linearly computable indexes. - -While all these simultaneous structures tend to be confusing, -Axiom provides a helpful organizational tool for such a purpose: -categories. -\axiomType{PolynomialCategory}, for example, provides a uniform user -interface across all polynomial types. -Each kind of polynomial implements functions for -all these operations, each in its own way. -If you use only the top-level operations in -\axiomType{PolynomialCategory} you usually do not care what kind -of polynomial implementation is used. - -%>> I've often thought, though, that it would be nice to be -%>> be able to use conditionals for representations. - -Within a given domain, however, you define (at most) one -representation.\footnote{You can make that representation a -\pspadtype{Union} type, however. See -\downlink{``\ugTypesUnionsTitle''}{ugTypesUnionsPage} in Section -\ugTypesUnionsNumber\ignore{ugTypesUnions} for examples of unions.} -If you want to have multiple representations (that is, several -domains, each with its own representation), use a category to describe -the {\tt Exports}, then define separate domains for each -representation. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsAddDomainTitle}{Add Domain} -\newcommand{\ugDomainsAddDomainNumber}{13.8.} - -@ -\subsection{13.8. Add Domain} -\label{ugDomainsAddDomainPage} -\begin{itemize} -\item ugDomainsDemoPage \ref{ugDomainsDemoPage} on -page~\pageref{ugDomainsDemoPage} -\end{itemize} -\index{pages!ugDomainsAddDomainPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsAddDomainPage} -\index{ugDomainsAddDomainPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsAddDomainPage}{13.8. Add Domain} -\beginscroll -% - -The capsule part of {\tt Implementation} defines functions that -implement the operations exported by the domain---usually only some of -the operations. In our demo in -\downlink{``\ugDomainsDemoTitle''}{ugDomainsDemoPage} in Section -\ugDomainsDemoNumber\ignore{ugDomainsDemo}, we asked for the value of -\axiom{3*q-q+q}. Where do the operations \axiomOp{*}, \axiomOp{+}, -and \axiomOp{-} come from? There is no definition for them in the -capsule! - -The {\tt Implementation} part of a definition can optionally specify -an ``add-domain'' to the left of an {\tt add} \spadkey{add} (for -\axiomType{QuadraticForm}, defines \axiomType{SquareMatrix(n,K)} is -the add-domain). The meaning of an add-domain is simply this: if the -capsule part of the {\tt Implementation} does not supply a function -for an operation, Axiom goes to the add-domain to find the function. -So do \axiomOpFrom{*}{QuadraticForm}, \axiomOpFrom{+}{QuadraticForm} -and \axiomOpFrom{-}{QuadraticForm} come from -\axiomType{SquareMatrix(n,K)}? - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsDefaultsTitle}{Defaults} -\newcommand{\ugDomainsDefaultsNumber}{13.9.} - -@ -\subsection{13.9. Defaults} -\label{ugDomainsDefaultsPage} -\begin{itemize} -\item ugPackagesPage \ref{ugPackagesPage} on -page~\pageref{ugPackagesPage} -\item ugCategoriesDefaultsPage \ref{ugCategoriesDefaultsPage} on -page~\pageref{ugCategoriesDefaultsPage} -\end{itemize} -\index{pages!ugDomainsDefaultsPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsDefaultsPage} -\index{ugDomainsDefaultsPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsDefaultsPage}{13.9. Defaults} -\beginscroll -% -In \downlink{``\ugPackagesTitle''}{ugPackagesPage} in -Chapter \ugPackagesNumber\ignore{ugPackages}, we saw that -categories can provide -default implementations for their operations. -How and when are they used? -When Axiom finds that \axiomType{QuadraticForm(2, Fraction Integer)} -does not implement the operations \axiomOp{*}, -\axiomOp{+}, and \axiomOp{-}, it goes to -\axiomType{SquareMatrix(2,Fraction Integer)} to find it. -As it turns out, \axiomType{SquareMatrix(2, Fraction Integer)} does -not implement {\it any} of these operations! - -What does Axiom do then? Here is its overall strategy. First, Axiom -looks for a function in the capsule for the domain. If it is not -there, Axiom looks in the add-domain for the operation. If that -fails, Axiom searches the add-domain of the add-domain, and so on. If -all those fail, it then searches the default packages for the -categories of which the domain is a member. In the case of -\axiomType{QuadraticForm}, it searches \axiomType{AbelianGroup}, then -its parents, grandparents, and so on. If this fails, it then searches -the default packages of the add-domain. Whenever a function is found, -the search stops immediately and the function is returned. When all -fails, the system calls \axiomFun{error} to report this unfortunate -news to you. To find out the actual order of constructors searched -for \axiomType{QuadraticForm}, consult \Browse{}: from the -\axiomType{QuadraticForm}, click on {\bf Cross Reference}, then on -{\bf Lineage}. - -Let's apply this search strategy for our example \axiom{3*q-q+q}. The -scalar multiplication comes first. Axiom finds a default -implementation in \axiomType{AbelianGroup\&}. Remember from -\downlink{``\ugCategoriesDefaultsTitle''}{ugCategoriesDefaultsPage} in -Section \ugCategoriesDefaultsNumber\ignore{ugCategoriesDefaults} that -\axiomType{SemiGroup} provides a default definition for -\texht{$x^n$}{x**n} by repeated squaring? \axiomType{AbelianGroup} -similarly provides a definition for \texht{$n x$}{n*x} by repeated -doubling. - -But the search of the defaults for \axiomType{QuadraticForm} fails to -find any \axiomOp{+} or \axiomOp{*} in the default packages for the -ancestors of \axiomType{QuadraticForm}. So it now searches among -those for \axiomType{SquareMatrix}. Category -\axiomType{MatrixCategory}, which provides a uniform interface for all -matrix domains, is a grandparent of \axiomType{SquareMatrix} and has a -capsule defining many functions for matrices, including matrix -addition, subtraction, and scalar multiplication. The default package -\axiomType{MatrixCategory\&} is where the functions for -\axiomOpFrom{+}{QuadraticForm} and \spadfunFrom{-}{QuadraticForm} come -from. - -You can use \Browse{} to discover where the operations for -\axiomType{QuadraticForm} are implemented. First, get the page -describing \axiomType{QuadraticForm}. With your mouse somewhere in -this window, type a ``2'', press the \texht{\fbox{\bf Tab}}{{\bf Tab}} -key, and then enter ``Fraction Integer'' to indicate that you want the -domain \axiomType{QuadraticForm(2, Fraction Integer)}. Now click on -{\bf Operations} to get a table of operations and on \axiomOp{*} to -get a page describing the \axiomOp{*} operation. Finally, click on -{\bf implementation} at the bottom. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsOriginsTitle}{Origins} -\newcommand{\ugDomainsOriginsNumber}{13.10.} - -@ -\subsection{13.10. Origins} -\label{ugDomainsOriginsPage} -\index{pages!ugDomainsOriginsPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsOriginsPage} -\index{ugDomainsOriginsPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsOriginsPage}{13.10. Origins} -\beginscroll -% - -Aside from the notion of where an operation is implemented, -a useful notion is the {\it origin} or ``home'' of an operation. -When an operation (such as -\spadfunFrom{quadraticForm}{QuadraticForm}) is explicitly exported by -a domain (such as \axiomType{QuadraticForm}), you can say that the -origin of that operation is that domain. -If an operation is not explicitly exported from a domain, it is inherited -from, and has as origin, the (closest) category that explicitly exports it. -The operations \axiomOpFrom{+}{AbelianMonoid} and -\axiomOpFrom{-}{AbelianMonoid} of \axiomType{QuadraticForm}, -for example, are inherited from \axiomType{AbelianMonoid}. -As it turns out, \axiomType{AbelianMonoid} is the origin of virtually every -\axiomOp{+} operation in Axiom! - -Again, you can use \Browse{} to discover the origins of -operations. -From the \Browse{} page on \axiomType{QuadraticForm}, click on {\bf -Operations}, then on {\bf origins} at the bottom of the page. - -The origin of the operation is the {\it only} place where on-line -documentation is given. -However, you can re-export an operation to give it special -documentation. -Suppose you have just invented the world's fastest algorithm for -inverting matrices using a particular internal representation for -matrices. -If your matrix domain just declares that it exports -\axiomType{MatrixCategory}, it exports the \axiomFun{inverse} -operation, but the documentation the user gets from \Browse{} is -the standard one from \axiomType{MatrixCategory}. -To give your version of \axiomFun{inverse} the attention it -deserves, simply export the operation explicitly with new -documentation. -This redundancy gives \axiomFun{inverse} a new origin and tells -\Browse{} to present your new documentation. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsShortFormsTitle}{Short Forms} -\newcommand{\ugDomainsShortFormsNumber}{13.11.} - -@ -\subsection{13.11. Short Forms} -\label{ugDomainsShortFormsPage} -\index{pages!ugDomainsShortFormsPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsShortFormsPage} -\index{ugDomainsShortFormsPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsShortFormsPage}{13.11. Short Forms} -\beginscroll -% -In Axiom, a domain could be defined using only an add-domain -and no capsule. -Although we talk about rational numbers as quotients of integers, -there is no type \pspadtype{RationalNumber} in Axiom. -To create such a type, you could compile the following -``short-form'' definition: - -\beginImportant - -\noindent -{\tt 1.\ \ \ RationalNumber()\ ==\ Fraction(Integer)}\newline -\endImportant - -The {\tt Exports} part of this definition is missing and is taken -to be equivalent to that of \axiomType{Fraction(Integer)}. -Because of the add-domain philosophy, you get precisely -what you want. -The effect is to create a little stub of a domain. -When a user asks to add two rational numbers, Axiom would -ask \pspadtype{RationalNumber} for a function implementing this -\axiomOp{+}. -Since the domain has no capsule, the domain then immediately -sends its request to \axiomType{Fraction (Integer)}. - -The short form definition for domains is used to -define such domains as \axiomType{MultivariatePolynomial}: - -\beginImportant - -\noindent -{\tt 1.\ \ \ MultivariatePolynomial(vl:\ List\ Symbol,\ R:\ Ring)\ ==}\newline -{\tt 2.\ \ \ \ \ \ SparseMultivariatePolynomial(R,}\newline -{\tt 3.\ \ \ \ \ \ \ \ \ OrderedVariableList\ vl)}\newline -\endImportant - -%% ********************************************************************* -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsCliffordTitle}{Example 1: Clifford Algebra} -\newcommand{\ugDomainsCliffordNumber}{13.12.} - -@ -\subsection{13.12. Example 1: Clifford Algebra} -\label{ugDomainsCliffordPage} -\begin{itemize} -\item CliffordAlgebraXmpPage \ref{CliffordAlgebraXmpPage} on -page~\pageref{CliffordAlgebraXmpPage} -\end{itemize} -\index{pages!ugDomainsCliffordPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsCliffordPage} -\index{ugDomainsCliffordPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsCliffordPage}{13.12. Example 1: Clifford Algebra} -\beginscroll -% - -Now that we have \axiomType{QuadraticForm} available, -let's put it to use. -Given some quadratic form \smath{Q} described by an -\smath{n} by \smath{n} matrix over a field \smath{K}, the domain -\axiomType{CliffordAlgebra(n, K, Q)} defines a vector space of -dimension \texht{$2^n$}{2**n} over \smath{K}. -This is an interesting domain since complex numbers, quaternions, -exterior algebras and spin algebras are all examples of Clifford -algebras. - -The basic idea is this: -the quadratic form \axiom{Q} defines a basis -\texht{$e_1,e_2\ldots,e_n$}{e1,e2,...,en} for the -vector space \texht{$K^n$}{K**n}---the direct product of \axiom{K} -with itself \axiom{n} times. -From this, the Clifford algebra generates a basis of -\texht{$2^n$}{2**n} elements given by all the possible products -of the \texht{$e_i$}{\axiom{ei}} in order without duplicates, that is, -\texht{ -1, -$e_1$, -$e_2$, -$e_1e_2$, -$e_3$, -$e_1e_3$, -$e_2e_3$, -$e_1e_2,e_3$}{1, e1, e2, e1*e2, e3, e1*e3, e2*e3, e1*e2*e3}, -and so on. - -The algebra is defined by the relations -\begin{verbatim} -ei*ei = Q(ei) -ei*ej = -ej*ei, i ^= j -\end{verbatim} - -Now look at the snapshot of its definition given in Figure -\ref{fig-clifalg}. -Lines 9-10 show part of the definitions of the {\tt Exports}. -A Clifford algebra over a field \axiom{K} is asserted to be a ring, -an algebra over \axiom{K}, and a vector space over \axiom{K}. -Its explicit exports include -\axiom{e(n),} which returns the \eth{\axiom{n}} unit element. - -\beginImportant - -\noindent -{\tt 1.\ \ \ NNI\ ==>\ NonNegativeInteger}\newline -{\tt 2.\ \ \ PI\ \ ==>\ PositiveInteger}\newline -{\tt 3.\ \ \ }\newline -{\tt 4.\ \ \ CliffordAlgebra(n,K,q):\ Exports\ ==\ Implementation\ where}\newline -{\tt 5.\ \ \ \ \ \ \ n:\ PI}\newline -{\tt 6.\ \ \ \ \ \ \ K:\ Field}\newline -{\tt 7.\ \ \ \ \ \ \ q:\ QuadraticForm(n,\ K)}\newline -{\tt 8.\ \ \ }\newline -{\tt 9.\ \ \ \ \ \ \ Exports\ ==\ Join(Ring,Algebra(K),VectorSpace(K))\ with}\newline -{\tt 10.\ \ \ \ \ \ \ \ e:\ PI\ ->\ \$}\newline -{\tt 11.\ \ \ \ \ \ \ \ \ \ \ \ ...\ \ \ \ \ \ \ \ }\newline -{\tt 12.\ \ }\newline -{\tt 13.\ \ \ \ \ \ Implementation\ ==\ add}\newline -{\tt 14.\ \ \ \ \ \ \ \ Qeelist\ :=\ \ }\newline -{\tt 15.\ \ \ \ \ \ \ \ \ \ [q.unitVector(i::PI)\ for\ i\ in\ 1..n]}\newline -{\tt 16.\ \ \ \ \ \ \ \ dim\ \ \ \ \ :=\ \ 2**n}\newline -{\tt 17.\ \ \ \ \ \ \ \ Rep\ \ \ \ \ :=\ PrimitiveArray\ K}\newline -{\tt 18.\ \ \ \ \ \ \ \ New\ ==>\ new(dim,\ 0\$K)\$Rep}\newline -{\tt 19.\ \ \ \ \ \ \ \ x\ +\ y\ ==}\newline -{\tt 20.\ \ \ \ \ \ \ \ \ \ z\ :=\ New}\newline -{\tt 21.\ \ \ \ \ \ \ \ \ \ for\ i\ in\ 0..dim-1\ repeat\ z.i\ :=\ x.i\ +\ y.i}\newline -{\tt 22.\ \ \ \ \ \ \ \ \ \ z}\newline -{\tt 23.\ \ \ \ \ \ \ \ addMonomProd:\ (K,\ NNI,\ K,\ NNI,\ \$)\ ->\ \$}\newline -{\tt 24.\ \ \ \ \ \ \ \ addMonomProd(c1,\ b1,\ c2,\ b2,\ z)\ ==\ \ ...}\newline -{\tt 25.\ \ \ \ \ \ \ \ x\ *\ y\ ==}\newline -{\tt 26.\ \ \ \ \ \ \ \ \ \ z\ :=\ New}\newline -{\tt 27.\ \ \ \ \ \ \ \ \ \ for\ ix\ in\ 0..dim-1\ repeat}\newline -{\tt 28.\ \ \ \ \ \ \ \ \ \ \ \ if\ x.ix\ \notequal{}\ 0\ then\ for\ iy\ in\ 0..dim-1\ repeat}\newline -{\tt 29.\ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ y.iy\ \notequal{}\ 0}\newline -{\tt 30.\ \ \ \ \ \ \ \ \ \ \ \ \ \ then\ addMonomProd(x.ix,ix,y.iy,iy,z)}\newline -{\tt 31.\ \ \ \ \ \ \ \ \ \ \ \ z}\newline -{\tt 32.\ \ \ \ \ \ \ \ \ \ \ \ \ ...}\newline -\caption{Part of the \protect\axiomType{CliffordAlgebra} domain.}\label{fig-clifalg} -\endImportant - -The {\tt Implementation} part begins by defining a local variable -\axiom{Qeelist} to hold the list of all \axiom{q.v} where \axiom{v} -runs over the unit vectors from 1 to the dimension \axiom{n}. -Another local variable \axiom{dim} is set to \texht{$2^n$}{2**n}, -computed once and for all. -The representation for the domain is -\axiomType{PrimitiveArray(K)}, -which is a basic array of elements from domain \axiom{K}. -Line 18 defines \axiom{New} as shorthand for the more lengthy -expression \axiom{new(dim, 0\$K)\$Rep}, which computes a primitive -array of length \texht{$2^n$}{2**n} filled with \axiom{0}'s from -domain \axiom{K}. - -Lines 19-22 define the sum of two elements \axiom{x} and \axiom{y} -straightforwardly. -First, a new array of all \axiom{0}'s is created, then filled with -the sum of the corresponding elements. -Indexing for primitive arrays starts at 0. -The definition of the product of \axiom{x} and \axiom{y} first requires -the definition of a local function \userfun{addMonomProd}. -Axiom knows it is local since it is not an exported function. -The types of all local functions must be declared. - -For a demonstration of \axiomType{CliffordAlgebra}, see -\downlink{`CliffordAlgebra'}{CliffordAlgebraXmpPage}\ignore{CliffordAlgebra}. - -\endscroll -\autobuttons +\end{scroll} \end{page} @ -<>= -\newcommand{\ugDomsinsDatabaseTitle}{Example 2: Building A Query Facility} -\newcommand{\ugDomsinsDatabaseNumber}{13.13.} - -@ -\subsection{13.13. Example 2: Building A Query Facility} -\label{ugDomsinsDatabasePage} -\begin{itemize} -\item ugDomainsQueryLanguagePage \ref{ugDomainsQueryLanguagePage} on -page~\pageref{ugDomainsQueryLanguagePage} -\item ugDomainsDatabaseConstructorPage \ref{ugDomainsDatabaseConstructorPage} on -page~\pageref{ugDomainsDatabaseConstructorPage} -\item ugDomainsQueryEquationsPage \ref{ugDomainsQueryEquationsPage} on -page~\pageref{ugDomainsQueryEquationsPage} -\item ugDomainsDataListsPage \ref{ugDomainsDataListsPage} on -page~\pageref{ugDomainsDataListsPage} -\item ugDomainsDatabasePage \ref{ugDomainsDatabasePage} on -page~\pageref{ugDomainsDatabasePage} -\item ugDomainsCreatingPage \ref{ugDomainsCreatingPage} on -page~\pageref{ugDomainsCreatingPage} -\item ugDomainsPuttingPage \ref{ugDomainsPuttingPage} on -page~\pageref{ugDomainsPuttingPage} -\item ugDomainsExamplesPage \ref{ugDomainsExamplesPage} on -page~\pageref{ugDomainsExamplesPage} -\end{itemize} -\index{pages!ugDomsinsDatabasePage!ug13.ht} -\index{ug13.ht!pages!ugDomsinsDatabasePage} -\index{ugDomsinsDatabasePage!ug13.ht!pages} -<>= -\begin{page}{ugDomsinsDatabasePage} -{13.13. Example 2: Building A Query Facility} -\beginscroll -% -We now turn to an entirely different kind of application, -building a query language for a database. - -Here is the practical problem to solve. -The \Browse{} facility of Axiom has a -database for all operations and constructors which is -stored on disk and accessed by \HyperName{}. -For our purposes here, we regard each line of this file as having -eight fields: -{\tt class, name, type, nargs, exposed, kind, origin,} and {\tt condition.} -Here is an example entry: - -\begin{verbatim} -o`determinant`$->R`1`x`d`Matrix(R)`has(R,commutative("*")) -\end{verbatim} - -In English, the entry means: -\texht{\begin{quotation}}{\newline} -\texht{\raggedright}{} -The operation \axiomFun{determinant}: \spadsig{\$}{R} with {\it 1} argument, is -{\it exposed} and is exported by {\it domain} \axiomType{Matrix(R)} -if {\tt R has commutative("*")}. -\texht{\end{quotation}}{\newline} - -Our task is to create a little query language that allows us -to get useful information from this database. - +\subsection{Optimization} +\label{UXANNAOpt} +\index{pages!UXANNAOpt!annaex.ht} +\index{annaex.ht!pages!UXANNAOpt} +\index{UXANNAOpt!annaex.ht!pages} +<>= +\begin{page}{UXANNAOpt}{Optimization} +Welcome to the Optimization section of {\tt +\inputbitmap{\htbmdir{}/anna.xbm.tiny}}, the {\em Axiom/NAG Expert System}. +This system chooses, and uses, NAG numerical routines. +\begin{scroll} +\blankline +\indent{2} \beginmenu - \menudownlink{{13.13.1. A Little Query Language}} -{ugDomainsQueryLanguagePage} - \menudownlink{{13.13.2. The Database Constructor}} -{ugDomainsDatabaseConstructorPage} - \menudownlink{{13.13.3. Query Equations}}{ugDomainsQueryEquationsPage} - \menudownlink{{13.13.4. DataLists}}{ugDomainsDataListsPage} - \menudownlink{{13.13.5. Index Cards}}{ugDomainsDatabasePage} - \menudownlink{{13.13.6. Creating a Database}}{ugDomainsCreatingPage} - \menudownlink{{13.13.7. Putting It All Together}}{ugDomainsPuttingPage} - \menudownlink{{13.13.8. Example Queries}}{ugDomainsExamplesPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsQueryLanguageTitle}{A Little Query Language} -\newcommand{\ugDomainsQueryLanguageNumber}{13.13.1.} - -@ -\subsection{13.13.1. A Little Query Language} -\label{ugDomainsQueryLanguagePage} -\index{pages!ugDomainsQueryLanguagePage!ug13.ht} -\index{ug13.ht!pages!ugDomainsQueryLanguagePage} -\index{ugDomainsQueryLanguagePage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsQueryLanguagePage}{13.13.1. A Little Query Language} -\beginscroll - -First we design a simple language for accessing information from -the database. -We have the following simple model in mind for its design. -Think of the database as a box of index cards. -There is only one search operation---it -takes the name of a field and a predicate -(a boolean-valued function) defined on the fields of the -index cards. -When applied, the search operation goes through the entire box -selecting only those index cards for which the predicate is true. -The result of a search is a new box of index cards. -This process can be repeated again and again. - -The predicates all have a particularly simple form: {\it symbol} -{\tt =} {\it pattern}, where {\it symbol} designates one of the -fields, and {\it pattern} is a ``search string''---a string -that may contain a ``{\tt *}'' as a -wildcard. -Wildcards match any substring, including the empty string. -Thus the pattern {\tt "*ma*t"} matches -{\tt "mat", "doormat"} and {\tt "smart".} - -To illustrate how queries are given, we give you a sneak preview -of the facility we are about to create. - -\xtc{ -Extract the database of all Axiom operations. -}{ -\spadpaste{ops := getDatabase("o")\bound{o1}} -} -\xtc{ -How many exposed three-argument \axiomFun{map} operations involving streams? -}{ -\spadpaste{ops.(name="map").(nargs="3").(type="*Stream*")\bound{o2}\free{o1}} -} - -As usual, the arguments of \axiomFun{elt} (\axiomSyntax{.}) -associate to the left. -The first \axiomFun{elt} produces the set of all operations with -name {\tt map}. -The second \axiomFun{elt} produces the set of all map operations -with three arguments. -The third \axiomFun{elt} produces the set of all three-argument map -operations having a type mentioning \axiomType{Stream}. - -Another thing we'd like to do is to extract one field from each of -the index cards in the box and look at the result. -Here is an example of that kind of request. - -\xtc{ -What constructors explicitly export a \axiomFun{determinant} operation? -}{ -\spadpaste{elt(elt(elt(elt(ops,name="determinant"),origin),sort),unique)\free{o1}} -} - -The first \axiomFun{elt} produces the set of all index cards with -name {\tt determinant}. -The second \axiomFun{elt} extracts the {\tt origin} component from -each index card. Each origin component -is the name of a constructor which directly -exports the operation represented by the index card. -Extracting a component from each index card produces what we call -a {\it datalist}. -The third \axiomFun{elt}, {\tt sort}, causes the datalist of -origins to be sorted in alphabetic -order. -The fourth, {\tt unique}, causes duplicates to be removed. - -Before giving you a more extensive demo of this facility, -we now build the necessary domains and packages to implement it. -%We will introduce a few of our minor conveniences. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsDatabaseConstructorTitle}{The Database Constructor} -\newcommand{\ugDomainsDatabaseConstructorNumber}{13.13.2.} - -@ -\subsection{13.13.2. The Database Constructor} -\label{ugDomainsDatabaseConstructorPage} -\index{pages!ugDomainsDatabaseConstructorPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsDatabaseConstructorPage} -\index{ugDomainsDatabaseConstructorPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsDatabaseConstructorPage} -{13.13.2. The Database Constructor} -\beginscroll - -We work from the top down. First, we define a database, -our box of index cards, as an abstract datatype. -For sake of illustration and generality, -we assume that an index card is some type \axiom{S}, and -that a database is a box of objects of type \axiom{S}. -Here is the Axiom program defining the \pspadtype{Database} -domain. - -\beginImportant - -\noindent -{\tt 1.\ \ \ PI\ ==>\ PositiveInteger}\newline -{\tt 2.\ \ \ Database(S):\ Exports\ ==\ Implementation\ where}\newline -{\tt 3.\ \ \ \ \ S:\ Object\ with\ }\newline -{\tt 4.\ \ \ \ \ \ \ elt:\ (\$,\ Symbol)\ ->\ String}\newline -{\tt 5.\ \ \ \ \ \ \ display:\ \$\ ->\ Void}\newline -{\tt 6.\ \ \ \ \ \ \ fullDisplay:\ \$\ ->\ Void}\newline -{\tt 7.\ \ \ }\newline -{\tt 8.\ \ \ \ \ Exports\ ==\ with}\newline -{\tt 9.\ \ \ \ \ \ \ elt:\ (\$,QueryEquation)\ ->\ \$}\newline -{\tt 10.\ \ \ \ \ \ elt:\ (\$,\ Symbol)\ ->\ DataList\ String}\newline -{\tt 11.\ \ \ \ \ \ "+":\ (\$,\$)\ ->\ \$}\newline -{\tt 12.\ \ \ \ \ \ "-":\ (\$,\$)\ ->\ \$}\newline -{\tt 13.\ \ \ \ \ \ display:\ \$\ ->\ Void}\newline -{\tt 14.\ \ \ \ \ \ fullDisplay:\ \$\ ->\ Void}\newline -{\tt 15.\ \ \ \ \ \ fullDisplay:\ (\$,PI,PI)\ ->\ Void}\newline -{\tt 16.\ \ \ \ \ \ coerce:\ \$\ ->\ OutputForm}\newline -{\tt 17.\ \ \ \ Implementation\ ==\ add}\newline -{\tt 18.\ \ \ \ \ \ \ \ ...}\newline -\endImportant - -The domain constructor takes a parameter \axiom{S}, which -stands for the class of index cards. -We describe an index card later. -Here think of an index card as a string which has -the eight fields mentioned above. - -First, we tell Axiom what operations we are going to require -from index cards. -We need an \axiomFun{elt} to extract the contents of a field -(such as {\tt name} and {\tt type}) as a string. -For example, -\axiom{c.name} returns a string that is the content of the -\axiom{name} field on the index card \axiom{c}. -We need to display an index card in two ways: -\pspadfun{display} shows only the name and type of an -operation; -\pspadfun{fullDisplay} displays all fields. -The display operations return no useful information and thus have -return type \axiomType{Void}. - -Next, we tell Axiom what operations the user can apply -to the database. -This part defines our little query language. -The most important operation is -{\frenchspacing\tt db . field = pattern} which -returns a new database, consisting of all index -cards of {\tt db} such that the \axiom{field} part of the index -card is matched by the string pattern called \axiom{pattern}. -The expression {\tt field = pattern} is an object of type -\axiomType{QueryEquation} (defined in the next section). - -Another \axiomFun{elt} is needed to produce a \pspadtype{DataList} -object. -Operation \axiomOp{+} is to merge two databases together; -\axiomOp{-} is used to subtract away common entries in a second -database from an initial database. -There are three display functions. -The \pspadfun{fullDisplay} function has two versions: one -that prints all the records, the other that prints only a fixed -number of records. -A \axiomFun{coerce} to \axiomType{OutputForm} creates a display -object. - -The {\tt Implementation} part of \axiomType{Database} is straightforward. -\beginImportant - -\noindent -{\tt 1.\ \ \ \ \ Implementation\ ==\ add}\newline -{\tt 2.\ \ \ \ \ \ \ s:\ Symbol}\newline -{\tt 3.\ \ \ \ \ \ \ Rep\ :=\ List\ S}\newline -{\tt 4.\ \ \ \ \ \ \ elt(db,equation)\ ==\ ...}\newline -{\tt 5.\ \ \ \ \ \ \ elt(db,key)\ ==\ [x.key\ for\ x\ in\ db]::DataList(String)}\newline -{\tt 6.\ \ \ \ \ \ \ display(db)\ ==\ \ for\ x\ in\ db\ repeat\ display\ x}\newline -{\tt 7.\ \ \ \ \ \ \ fullDisplay(db)\ ==\ for\ x\ in\ db\ repeat\ fullDisplay\ x}\newline -{\tt 8.\ \ \ \ \ \ \ fullDisplay(db,\ n,\ m)\ ==\ for\ x\ in\ db\ for\ i\ in\ 1..m}\newline -{\tt 9.\ \ \ \ \ \ \ \ \ repeat}\newline -{\tt 10.\ \ \ \ \ \ \ \ \ \ if\ i\ >=\ n\ then\ fullDisplay\ x}\newline -{\tt 11.\ \ \ \ \ \ x+y\ ==\ removeDuplicates!\ merge(x,y)}\newline -{\tt 12.\ \ \ \ \ \ x-y\ ==\ mergeDifference(copy(x::Rep),}\newline -{\tt 13.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ y::Rep)\$MergeThing(S)}\newline -{\tt 14.\ \ \ \ \ \ coerce(db):\ OutputForm\ ==\ (\#db)::\ OutputForm}\newline -\endImportant - -The database is represented by a list of elements of \axiom{S} (index cards). -We leave the definition of the first \axiomFun{elt} operation -(on line 4) until the next section. -The second \axiomFun{elt} collects all the strings with field name -{\it key} into a list. -The \axiomFun{display} function and first \axiomFun{fullDisplay} function -simply call the corresponding functions from \axiom{S}. -The second \axiomFun{fullDisplay} function provides an efficient way of -printing out a portion of a large list. -The \axiomOp{+} is defined by using the existing -\spadfunFrom{merge}{List} operation defined on lists, then -removing duplicates from the result. -The \axiomOp{-} operation requires writing a corresponding -subtraction operation. -A package \axiomType{MergeThing} (not shown) provides this. - -The \axiomFun{coerce} function converts the database to an -\axiomType{OutputForm} by computing the number of index cards. -This is a good example of the independence of -the representation of an Axiom object from how it presents -itself to the user. We usually do not want to look at a database---but -do care how many ``hits'' we get for a given query. -So we define the output representation of a database to be simply -the number of index cards our query finds. -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsQueryEquationsTitle}{Query Equations} -\newcommand{\ugDomainsQueryEquationsNumber}{13.13.3.} - -@ -\subsection{13.13.3. Query Equations} -\label{ugDomainsQueryEquationsPage} -\index{pages!ugDomainsQueryEquationsPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsQueryEquationsPage} -\index{ugDomainsQueryEquationsPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsQueryEquationsPage}{13.13.3. Query Equations} -\beginscroll - -The predicate for our search is given by an object of type -\pspadtype{QueryEquation}. -Axiom does not have such an object yet so we -have to invent it. - -\beginImportant - -\noindent -{\tt 1.\ \ \ QueryEquation():\ Exports\ ==\ Implementation\ where}\newline -{\tt 2.\ \ \ \ \ Exports\ ==\ with}\newline -{\tt 3.\ \ \ \ \ \ \ equation:\ (Symbol,\ String)\ ->\ \$}\newline -{\tt 4.\ \ \ \ \ \ \ variable:\ \$\ ->\ Symbol}\newline -{\tt 5.\ \ \ \ \ \ \ value:\\ \\ \\ \\ \$\ ->\ String}\newline -{\tt 6.\ \ \ }\newline -{\tt 7.\ \ \ \ \ Implementation\ ==\ add}\newline -{\tt 8.\ \ \ \ \ \ \ Rep\ :=\ Record(var:Symbol,\ val:String)}\newline -{\tt 9.\ \ \ \ \ \ \ equation(x,\ s)\ ==\ [x,\ s]}\newline -{\tt 10.\ \ \ \ \ \ variable\ q\ ==\ q.var}\newline -{\tt 11.\ \ \ \ \ \ value\\ \\ \\ \\ q\ ==\ q.val}\newline -\endImportant - -Axiom converts an input expression of the form -\axiom{{\it a} = {\it b}} to \axiom{equation({\it a, b})}. -Our equations always have a symbol on the left and a string -on the right. -The {\tt Exports} part thus specifies an operation -\axiomFun{equation} to create a query equation, and -\pspadfun{variable} and \pspadfun{value} to select the left- and -right-hand sides. -The {\tt Implementation} part uses \pspadtype{Record} for a -space-efficient representation of an equation. - -Here is the missing definition for the \axiomFun{elt} function of -\pspadtype{Database} in the last section: - -\beginImportant - -\noindent -{\tt 1.\ \ \ \ \ \ \ elt(db,eq)\ ==}\newline -{\tt 2.\ \ \ \ \ \ \ \ \ field\\ \ :=\ variable\ eq}\newline -{\tt 3.\ \ \ \ \ \ \ \ \ value\ :=\ value\ eq}\newline -{\tt 4.\ \ \ \ \ \ \ \ \ [x\ for\ x\ in\ db\ |\ matches?(value,x.field)]}\newline -\endImportant - -Recall that a database is represented by a list. -Line 4 simply runs over that list collecting all elements -such that the pattern (that is, \axiom{value}) -matches the selected field of the element. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsDataListsTitle}{DataLists} -\newcommand{\ugDomainsDataListsNumber}{13.13.4.} - -@ -\subsection{13.13.4. DataLists} -\label{ugDomainsDataListsPage} -\index{pages!ugDomainsDataListsPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsDataListsPage} -\index{ugDomainsDataListsPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsDataListsPage}{13.13.4. DataLists} -\beginscroll - -Type \pspadtype{DataList} is a new type invented to hold the result -of selecting one field from each of the index cards in the box. -It is useful to make datalists extensions of lists---lists that -have special \axiomFun{elt} operations defined on them for -sorting and removing duplicates. - -\beginImportant - -\noindent -{\tt 1.\ \ \ DataList(S:OrderedSet)\ :\ Exports\ ==\ Implementation\ where}\newline -{\tt 2.\ \ \ \ \ Exports\ ==\ ListAggregate(S)\ with}\newline -{\tt 3.\ \ \ \ \ \ \ elt:\ (\$,"unique")\ ->\ \$}\newline -{\tt 4.\ \ \ \ \ \ \ elt:\ (\$,"sort")\ ->\ \$}\newline -{\tt 5.\ \ \ \ \ \ \ elt:\ (\$,"count")\ ->\ NonNegativeInteger}\newline -{\tt 6.\ \ \ \ \ \ \ coerce:\ List\ S\ ->\ \$}\newline -{\tt 7.\ \ \ }\newline -{\tt 8.\ \ \ \ \ Implementation\ ==\ \ List(S)\ add}\newline -{\tt 9.\ \ \ \ \ \ \ Rep\ :=\ List\ S}\newline -{\tt 10.\ \ \ \ \ \ elt(x,"unique")\ ==\ removeDuplicates(x)}\newline -{\tt 11.\ \ \ \ \ \ elt(x,"sort")\ ==\ sort(x)}\newline -{\tt 12.\ \ \ \ \ \ elt(x,"count")\ ==\ \#x}\newline -{\tt 13.\ \ \ \ \ \ coerce(x:List\ S)\ ==\ x\ ::\ \$}\newline -\endImportant - -The {\tt Exports} part asserts that datalists belong to the -category \axiomType{ListAggregate}. -Therefore, you can use all the usual list operations on datalists, -such as \spadfunFrom{first}{List}, \spadfunFrom{rest}{List}, and -\spadfunFrom{concat}{List}. -In addition, datalists have four explicit operations. -Besides the three \axiomFun{elt} operations, there is a -\axiomFun{coerce} operation that creates datalists from lists. - -The {\tt Implementation} part needs only to define four functions. -All the rest are obtained from \axiomType{List(S)}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsDatabaseTitle}{Index Cards} -\newcommand{\ugDomainsDatabaseNumber}{13.13.5.} - -@ -\subsection{13.13.5. Index Cards} -\label{ugDomainsDatabasePage} -\index{pages!ugDomainsDatabasePage!ug13.ht} -\index{ug13.ht!pages!ugDomainsDatabasePage} -\index{ugDomainsDatabasePage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsDatabasePage}{13.13.5. Index Cards} -\beginscroll - -An index card comes from a file as one long string. -We define functions that extract substrings from the long -string. -Each field has a name that -is passed as a second argument to \axiomFun{elt}. - -\beginImportant - -\noindent -{\tt 1.\ \ \ IndexCard()\ ==\ Implementation\ where}\newline -{\tt 2.\ \ \ \ \ Exports\ ==\ with}\newline -{\tt 3.\ \ \ \ \ \ \ elt:\ (\$,\ Symbol)\ ->\ String}\newline -{\tt 4.\ \ \ \ \ \ \ display:\ \$\ ->\ Void}\newline -{\tt 5.\ \ \ \ \ \ \ fullDisplay:\ \$\ ->\ Void}\newline -{\tt 6.\ \ \ \ \ \ \ coerce:\ String\ ->\ \$}\newline -{\tt 7.\ \ \ \ \ Implementation\ ==\ String\ add\ ...}\newline -\endImportant - -We leave the {\tt Implementation} part to the reader. -All operations involve straightforward string manipulations. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsCreatingTitle}{Creating a Database} -\newcommand{\ugDomainsCreatingNumber}{13.13.6.} - -@ -\subsection{13.13.6. Creating a Database} -\label{ugDomainsCreatingPage} -\index{pages!ugDomainsCreatingPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsCreatingPage} -\index{ugDomainsCreatingPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsCreatingPage}{13.13.6. Creating a Database} -\beginscroll - -We must not forget one important operation: one that builds the database in the -first place! -We'll name it \pspadfun{getDatabase} and put it in a package. -This function is implemented by calling the \Lisp{} function -\axiom{getBrowseDatabase(s)} to get appropriate information from -\Browse{}. -This operation takes a string indicating which lines you -want from the database: \axiom{"o"} gives you all operation -lines, and \axiom{"k"}, all constructor lines. -Similarly, \axiom{"c"}, \axiom{"d"}, and \axiom{"p"} give -you all category, domain and package lines respectively. -% -\beginImportant - -\noindent -{\tt 1.\ \ \ OperationsQuery():\ Exports\ ==\ Implementation\ where}\newline -{\tt 2.\ \ \ \ \ Exports\ ==\ with}\newline -{\tt 3.\ \ \ \ \ \ \ getDatabase:\ String\ ->\ Database(IndexCard)}\newline -{\tt 4.\ \ \ }\newline -{\tt 5.\ \ \ \ \ Implementation\ ==\ add}\newline -{\tt 6.\ \ \ \ \ \ \ getDatabase(s)\ ==\ getBrowseDatabase(s)\$Lisp}\newline -\endImportant - -We do not bother creating a special name for databases of index -cards. -\pspadtype{Database (IndexCard)} will do. -Notice that we used the package \pspadtype{OperationsQuery} to -create, in effect, -a new kind of domain: \pspadtype{Database(IndexCard)}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsPuttingTitle}{Putting It All Together} -\newcommand{\ugDomainsPuttingNumber}{13.13.7.} - -@ -\subsection{13.13.7. Putting It All Together} -\label{ugDomainsPuttingPage} -\index{pages!ugDomainsPuttingPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsPuttingPage} -\index{ugDomainsPuttingPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsPuttingPage}{13.13.7. Putting It All Together} -\beginscroll - -To create the database facility, you put all these constructors -into one file.\footnote{You could use separate files, but we -are putting them all together because, organizationally, that is -the logical thing to do.} -At the top of the file put \spadcmd{)abbrev} commands, giving the -constructor abbreviations you created. - -\beginImportant - -\noindent -{\tt 1.\ \ \ )abbrev\ domain\ \ ICARD\ \ \ IndexCard}\newline -{\tt 2.\ \ \ )abbrev\ domain\ \ QEQUAT\ \ QueryEquation}\newline -{\tt 3.\ \ \ )abbrev\ domain\ \ MTHING\ \ MergeThing}\newline -{\tt 4.\ \ \ )abbrev\ domain\ \ DLIST\ \ \ DataList}\newline -{\tt 5.\ \ \ )abbrev\ domain\ \ DBASE\ \ \ Database}\newline -{\tt 6.\ \ \ )abbrev\ package\ OPQUERY\ OperationsQuery}\newline -\endImportant - -With all this in {\bf alql.spad}, for example, compile it using -\begin{verbatim} -)compile alql -\end{verbatim} -and then load each of the constructors: -\begin{verbatim} -)load ICARD QEQUAT MTHING DLIST DBASE OPQUERY -\end{verbatim} -You are ready to try some sample queries. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugDomainsExamplesTitle}{Example Queries} -\newcommand{\ugDomainsExamplesNumber}{13.13.8.} - -@ -\subsection{13.13.8. Example Queries} -\label{ugDomainsExamplesPage} -\index{pages!ugDomainsExamplesPage!ug13.ht} -\index{ug13.ht!pages!ugDomainsExamplesPage} -\index{ugDomainsExamplesPage!ug13.ht!pages} -<>= -\begin{page}{ugDomainsExamplesPage}{13.13.8. Example Queries} -\beginscroll - -Our first set of queries give some statistics on constructors in -the current Axiom system. - -\xtc{ -How many constructors does Axiom have? -}{ -\spadpaste{ks := getDatabase "k"\bound{q1}} -} -\xtc{ -Break this down into the number of categories, domains, and packages. -}{ -\spadpaste{[ks.(kind=k) for k in ["c","d","p"]]\bound{q3}\free{q1}} -} -\xtc{ -What are all the domain constructors that take no parameters? -}{ -\spadpaste{elt(ks.(kind="d").(nargs="0"),name)\bound{q4}\free{q1}} -} -\xtc{ -How many constructors have ``Matrix'' in their name? -}{ -\spadpaste{mk := ks.(name="*Matrix*")\bound{q5}\free{q1}} -} -\xtc{ -What are the names of those that are domains? -}{ -\spadpaste{elt(mk.(kind="d"),name)\bound{q6}\free{q5}} -} -\xtc{ -How many operations are there in the library? -}{ -\spadpaste{o := getDatabase "o"\bound{o1}} -} -\xtc{ -Break this down into categories, domains, and packages. -}{ -\spadpaste{[o.(kind=k) for k in ["c","d","p"]]\free{o1}} -} - -The query language is helpful in getting information about a -particular operation you might like to apply. -While this information can be obtained with -\Browse{}, the use of the query database gives you data that you -can manipulate in the workspace. - -\xtc{ -How many operations have ``eigen'' in the name? -}{ -\spadpaste{eigens := o.(name="*eigen*")\bound{eigens}\free{o1}} -} -\xtc{ -What are their names? -}{ -\spadpaste{elt(eigens,name)\free{eigens}} -} -\xtc{ -Where do they come from? -}{ -\spadpaste{elt(elt(elt(eigens,origin),sort),unique) \free{eigens}} -} - -The operations \axiomOp{+} and \axiomOp{-} are useful for -constructing small databases and combining them. -However, remember that the only matching you can do is string -matching. -Thus a pattern such as {\tt "*Matrix*"} on the type field -matches -any type containing \axiomType{Matrix}, \axiomType{MatrixCategory}, -\axiomType{SquareMatrix}, and so on. - -\xtc{ -How many operations mention ``Matrix'' in their type? -}{ -\spadpaste{tm := o.(type="*Matrix*")\bound{x10}\free{o1}} -} -\xtc{ -How many operations come from constructors with ``Matrix'' in -their name? -}{ -\spadpaste{fm := o.(origin="*Matrix*")\bound{x11}\free{o1}} -} -\xtc{ -How many operations are in \axiom{fm} but not in \axiom{tm}? -}{ -\spadpaste{fm-tm \bound{x12}\free{x10 x11}} -} -\xtc{ -Display the operations that both mention ``Matrix'' in their type -and come from a constructor having ``Matrix'' in their name. -}{ -\spadpaste{fullDisplay(fm-\%) \bound{x13}\free{x12}} -} -\xtc{ -How many operations involve matrices? -}{ -\spadpaste{m := tm+fm \bound{x14}\free{x10 x11}} -} -\xtc{ -Display 4 of them. -}{ -\spadpaste{fullDisplay(m, 202, 205) \free{x14}} -} -\xtc{ -How many distinct names of operations involving matrices are there? -}{ -\spadpaste{elt(elt(elt(m,name),unique),count) \free{x14}} -} - - - -\endscroll -\autobuttons -\end{page} - -@ -\section{ug14.ht} -<>= -\newcommand{\ugBrowseTitle}{Browse} -\newcommand{\ugBrowseNumber}{14.} - -@ -\subsection{14. Browse} -\label{ugBrowsePage} -\begin{itemize} -\item ugBrowseStartPage \ref{ugBrowseStartPage} on -page~\pageref{ugBrowseStartPage} -\item ugBrowseDomainPage \ref{ugBrowseDomainPage} on -page~\pageref{ugBrowseDomainPage} -\item ugBrowseMiscellaneousFeaturesPage \ref{ugBrowseMiscellaneousFeaturesPage} on -page~\pageref{ugBrowseMiscellaneousFeaturesPage} -\end{itemize} -\index{pages!ugBrowsePage!ug14.ht} -\index{ug14.ht!pages!ugBrowsePage} -\index{ugBrowsePage!ug14.ht!pages} -<>= -\begin{page}{ugBrowsePage}{14. Browse} -\beginscroll - -This chapter discusses the \Browse{} -component of \HyperName{}. -We suggest you invoke Axiom and work through this -chapter, section by section, following our examples to gain some -familiarity with \Browse{}. - +\item \menulispdownlink{Optimization of a Single Multivariate Function} +{(|annaOpt|)}\space{}\newline +\indent{6} Finding the minimum of a function in n variables. +\newline +\indent{6} Linear Programming and Quadratic Programming problems. +\blankline +\indent{4} \beginmenu - \menudownlink{{14.1. The Front Page: Searching the Library}} -{ugBrowseStartPage} - \menudownlink{{14.2. The Constructor Page}}{ugBrowseDomainPage} - \menudownlink{{14.3. Miscellaneous Features of Browse}} -{ugBrowseMiscellaneousFeaturesPage} +\menudownlink{Examples}{UXANNAOptEx}\newline +\indent{8} Examples of optimization problems with various constraint features. \endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugBrowseStartTitle}{The Front Page: Searching the Library} -\newcommand{\ugBrowseStartNumber}{14.1.} - -@ -\subsection{14.1. The Front Page: Searching the Library} -\label{ugBrowseStartPage} -\begin{itemize} -\item ugBrowseCapitalizationConventionPage -\ref{ugBrowseCapitalizationConventionPage} on -page~\pageref{ugBrowseCapitalizationConventionPage} -\item ugBrowseDomainPage \ref{ugBrowseDomainPage} on -page~\pageref{ugBrowseDomainPage} -\item ugBrowseViewsOfConstructorsPage \ref{ugBrowseViewsOfConstructorsPage} on -page~\pageref{ugBrowseViewsOfConstructorsPage} -\item ugBrowseViewsOfOperationsPage \ref{ugBrowseViewsOfOperationsPage} on -page~\pageref{ugBrowseViewsOfOperationsPage} -\end{itemize} -\index{pages!ugBrowseStartPage!ug14.ht} -\index{ug14.ht!pages!ugBrowseStartPage} -\index{ugBrowseStartPage!ug14.ht!pages} -<>= -\begin{page}{ugBrowseStartPage}{14.1. The Front Page: Searching the Library} -\beginscroll -To enter \Browse{}, click on {\bf Browse} on the top level page -of \HyperName{} to get the {\it front page} of \Browse{}. -% -%324pt is 4.5",180pt is 2.5",432pt is 6"=textwidth,54=(432-324)/2 -%ps files are 4.5"x2.5" except source 4.5"x2.5" -% - -To use this page, you first enter a \spadgloss{search string} into -the input area at the top, then click on one of the buttons below. -We show the use of each of the buttons by example. - -\subsubsection{Constructors} - -First enter the search string {\tt Matrix} into the input area and -click on {\bf Constructors}. What you get is the {\it constructor -page} for \axiomType{Matrix}. We show and describe this page in -detail in \downlink{``\ugBrowseDomainTitle''}{ugBrowseDomainPage} in -Section \ugBrowseDomainNumber\ignore{ugBrowseDomain}. By convention, -Axiom does a case-insensitive search for a match. Thus {\tt matrix} -is just as good as {\tt Matrix}, has the same effect as {\tt MaTrix}, -and so on. We recommend that you generally use small letters for -names however. A search string with only capital letters has a -special meaning (see -\downlink{``\ugBrowseCapitalizationConventionTitle''} -{ugBrowseCapitalizationConventionPage} -in Section -\ugBrowseCapitalizationConventionNumber -\ignore{ugBrowseCapitalizationConvention}). - - -Click on \UpBitmap{} to return to the \Browse{} front page. - -Use the symbol ``{\tt *}'' in search strings as a \spadgloss{wild -card}. -A wild card matches any substring, including the empty string. -For example, enter the search string {\tt *matrix*} into the input -area and click on {\bf Constructors}.\footnote{To get only -categories, domains, or packages, rather than all constructors, -you can click on the corresponding button to the right of {\bf -Constructors}.} -What you get is a table of all constructors whose names contain -the string ``{\tt matrix}.'' - -All constructors containing the string are listed, whether -\spadglossSee{exposed}{expose} or \spadglossSee{unexposed}{expose}. -You can hide the names of the unexposed constructors by clicking on -the {\it *=}{\bf unexposed} button in the {\it Views} panel at the -bottom of the window. (The button will change to {\bf exposed} {\it -only}.) - -One of the names in this table is \axiomType{Matrix}. Click on -\axiomType{Matrix}. What you get is again the constructor page for -\axiomType{Matrix}. As you see, \Browse{} gives you a large network -of information in which there are many ways to reach the same pages. - -Again click on the \UpBitmap{} to return to the table of constructors -whose names contain {\tt matrix}. Below the table is a {\it Views} -panel. This panel contains buttons that let you view constructors in -different ways. To learn about views of constructors, skip to -\downlink{``\ugBrowseViewsOfConstructorsTitle''} -{ugBrowseViewsOfConstructorsPage} -in Section -\ugBrowseViewsOfConstructorsNumber\ignore{ugBrowseViewsOfConstructors}. - -Click on \UpBitmap{} to return to the \Browse{} front page. - -\subsubsection{Operations} - -Enter {\tt *matrix} into the input area and click on {\bf Operations}. -This time you get a table of {\it operations} whose names end with -{\tt matrix} or {\tt Matrix}. - - -If you select an operation name, you go to a page describing all the -operations in Axiom of that name. At the bottom of an operation page -is another kind of {\it Views} panel, one for operation pages. To -learn more about these views, skip to -\downlink{``\ugBrowseViewsOfOperationsTitle''}{ugBrowseViewsOfOperationsPage} -in Section -\ugBrowseViewsOfOperationsNumber\ignore{ugBrowseViewsOfOperations}. - -Click on \UpBitmap{} to return to the \Browse{} front page. - -\subsubsection{Attributes} - -This button gives you a table of attribute names that match the -search string. Enter the search string {\tt *} and click on -{\bf Attributes} to get a list -of all system attributes. - -Click on \UpBitmap{} to return to the \Browse{} front page. - -Again there is a {\it Views} panel at the bottom with buttons that let -you view the attributes in different ways. - -\subsubsection{General} - -This button does a general search for all constructor, operation, and -attribute names matching the search string. Enter the search string -\allowbreak {\tt *matrix*} into the input area. Click on {\bf -General} to find all constructs that have {\tt matrix} as a part of -their name. - - -The summary gives you all the names under a heading when the number of -entries is less than 10. - -Click on \UpBitmap{} to return to the \Browse{} front page. - -\subsubsection{Documentation} - -Again enter the search key {\tt *matrix*} and this time click on -{\bf Documentation}. -This search matches any constructor, operation, or attribute -name whose documentation contains a substring matching {\tt -matrix}. - - -Click on \UpBitmap{} to return to the \Browse{} front page. - -\subsubsection{Complete} - -This search combines both {\bf General} and {\bf Documentation}. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugBrowseDomainTitle}{The Constructor Page} -\newcommand{\ugBrowseDomainNumber}{14.2.} - -@ -\subsection{14.2. The Constructor Page} -\label{ugBrowseDomainPage} -\index{pages!ugBrowseDomainPage!ug14.ht} -\index{ug14.ht!pages!ugBrowseDomainPage} -\index{ugBrowseDomainPage!ug14.ht!pages} -<>= -\begin{page}{ugBrowseDomainPage}{14.2. The Constructor Page} -\beginscroll - -In this section we look in detail at a constructor page for domain -\axiomType{Matrix}. -Enter {\tt matrix} into the input area on the main \Browse{} page -and click on {\bf Constructors}. - - - -The header part tells you that \axiomType{Matrix} has abbreviation -\axiomType{MATRIX} and one argument called {\tt R} that must be a -domain of category \axiomType{Ring}. -Just what domains can be arguments of \axiomType{Matrix}? -To find this out, click on the {\tt R} on the second line of the -heading. -What you get is a table of all acceptable domain parameter values -of {\tt R}, or a table of \spadgloss{rings} in Axiom. - - -Click on \UpBitmap{} to return to the constructor page for -\axiomType{Matrix}. -\texht{\newpage}{} - -If you have access to the source code of Axiom, the third -line of the heading gives you the name of the source file -containing the definition of \axiomType{Matrix}. -Click on it to pop up an editor window containing the source code -of \axiomType{Matrix}. - - -We recommend that you leave the editor window up while working -through this chapter as you occasionally may want to refer to it. -\texht{\newpage}{} - +\blankline +\item \menulispdownlink{Optimization of a set of observations of a data set} +{(|annaOpt2|)}\space{}\newline +\indent{6} Least-squares problems. +\newline +\indent{6} Checking the goodness of fit of a least-squares model. +\blankline +\indent{4} \beginmenu - \menudownlink{{14.2.1. Constructor Page Buttons}}{ugBrowseDomainButtonsPage} - \menudownlink{{14.2.2. Cross Reference}}{ugBrowseCrossReferencePage} - \menudownlink{{14.2.3. Views Of Constructors}}{ugBrowseViewsOfConstructorsPage} - \menudownlink{{14.2.4. Giving Parameters to Constructors}}{ugBrowseGivingParametersPage} +\menudownlink{Examples}{UXANNAOpt2Ex}\newline +\indent{8} Examples of least squares problems. +\endmenu \endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugBrowseDomainButtonsTitle}{Constructor Page Buttons} -\newcommand{\ugBrowseDomainButtonsNumber}{14.2.1.} - -@ -\subsection{14.2.1. Constructor Page Buttons} -\label{ugBrowseDomainButtonsPage} -\begin{itemize} -\item ugBrowseViewsOfOperationsPage \ref{ugBrowseViewsOfOperationsPage} on -page~\pageref{ugBrowseViewsOfOperationsPage} -\end{itemize} -\index{pages!ugBrowseDomainButtonsPage!ug14.ht} -\index{ug14.ht!pages!ugBrowseDomainButtonsPage} -\index{ugBrowseDomainButtonsPage!ug14.ht!pages} -<>= -\begin{page}{ugBrowseDomainButtonsPage}{14.2.1. Constructor Page Buttons} -\beginscroll - -We examine each button on this page in order. - -\labelSpace{2pc} - -\subsubsection{Description} - -Click here to bring up a page with a brief description of -constructor \axiomType{Matrix}. -If you have access to system source code, note that these comments -can be found directly over the constructor definition. - - -\subsubsection{Operations} - -Click here to get a table of operations exported by -\axiomType{Matrix}. -You may wish to widen the window to have multiple columns as -below. - - -If you click on an operation name, you bring up a description page for -the operations. For a detailed description of these pages, skip to -\downlink{``\ugBrowseViewsOfOperationsTitle''}{ugBrowseViewsOfOperationsPage} -in Section -\ugBrowseViewsOfOperationsNumber\ignore{ugBrowseViewsOfOperations}. - -\subsubsection{Attributes} - -Click here to get a table of the two attributes exported by -\axiomType{Matrix}: -\spadatt{\texht{fi\-nite\-Ag\-gre\-gate}{finiteAggregate}} and -\spadatt{shallowlyMutable}. -These are two computational properties that result from -\axiomType{Matrix} being regarded as a data structure. - -\subsubsection{Examples} - -Click here to get an {\it examples page} with examples of operations to -create and manipulate matrices. - -Read through this section. -Try selecting the various buttons. -Notice that if you click on an operation name, such as -\spadfunFrom{new}{Matrix}, you bring up a description page for that -operation from \axiomType{Matrix}. - -Example pages have several examples of Axiom commands. -Each example has an active button to its left. -Click on it! -A pre-computed answer is pasted into the page immediately following the -command. -If you click on the button a second time, the answer disappears. -This button thus acts as a toggle: -``now you see it; now you don't.'' - -Note also that the Axiom commands themselves are active. -If you want to see Axiom execute the command, then click on it! -A new Axiom window appears on your screen and the command is -executed. - -\httex{At the end of the page is generally a menu of buttons that lead -you to further sections. -Select one of these topics to explore its contents.}{} - -\subsubsection{Exports} - -Click here to see a page describing the exports of \axiomType{Matrix} -exactly as described by the source code. - - -As you see, \axiomType{Matrix} declares that it exports all the operations -and attributes exported by category -\axiomType{MatrixCategory(R, Row, Col)}. -In addition, two operations, \axiomFun{diagonalMatrix} and -\axiomFun{inverse}, are explicitly exported. - -To learn a little about the structure of Axiom, we suggest you do -the following exercise. -Otherwise, click on \UpButton{} and go on to the next section. -\axiomType{Matrix} explicitly exports only two operations. -The other operations are thus exports of \axiomType{MatrixCategory}. -In general, operations are usually not explicitly exported by a domain. -Typically they are \spadglossSee{inherited}{inherit} from several -different categories. -Let's find out from where the operations of \axiomType{Matrix} come. - -\indent{4} -\beginitems -\item[1. ] Click on {\bf MatrixCategory}, then on {\bf Exports}. -Here you see that {\bf MatrixCategory} explicitly exports many matrix -operations. -Also, it inherits its operations from -\axiomType{TwoDimensionalArrayCategory}. - -\item[2. ] Click on {\bf TwoDimensionalArrayCategory}, then on {\bf Exports}. -Here you see explicit operations dealing with rows and columns. -In addition, it inherits operations from -\axiomType{HomogeneousAggregate}. - -%\item Click on {\bf HomogeneousAggregate}, then on {\bf Exports}. -%And so on. -%If you continue doing this, eventually you will - -\item[3. ] Click on \UpBitmap{} and then -click on {\bf Object}, then on {\bf Exports}, where you see -there are no exports. - -\item[4. ] Click on \UpBitmap{} repeatedly to return to the constructor page -for \axiomType{Matrix}. - -\enditems -\indent{0} - -\subsubsection{Related Operations} - -Click here bringing up a table of operations that are exported by -\spadglossSee{packages}{package} but not by \axiomType{Matrix} itself. - - -To see a table of such packages, use the {\bf Relatives} button on the -{\bf Cross Reference} page described next. - - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugBrowseCrossReferenceTitle}{Cross Reference} -\newcommand{\ugBrowseCrossReferenceNumber}{14.2.2.} - -@ -\subsection{14.2.2. Cross Reference} -\label{ugBrowseCrossReferencePage} -\index{pages!ugBrowseCrossReferencePage!ug14.ht} -\index{ug14.ht!pages!ugBrowseCrossReferencePage} -\index{ugBrowseCrossReferencePage!ug14.ht!pages} -<>= -\begin{page}{ugBrowseCrossReferencePage}{14.2.2. Cross Reference} -\beginscroll -Click on the {\bf Cross Reference} button on the main constructor page -for \axiomType{Matrix}. -This gives you a page having various cross reference information stored -under the respective buttons. - - -\subsubsection{Parents} - -The parents of a domain are the same as the categories mentioned under -the {\bf Exports} button on the first page. -Domain \axiomType{Matrix} has only one parent but in general a domain can -have any number. - -\subsubsection{Ancestors} - -The \spadglossSee{ancestors}{ancestor} of a constructor consist of its parents, the -parents of its parents, and so on. -Did you perform the exercise in the last section under {\bf Exports}? -If so, you see here all the categories you found while ascending the -{\bf Exports} chain for \axiomType{Matrix}. - -\subsubsection{Relatives} - -The \spadglossSee{relatives}{relative} of a domain constructor are package -constructors that provide operations in addition to those -\spadglossSee{exported}{export} by the domain. - -Try this exercise. -\indent{4} -\beginitems -\item[1. ] Click on {\bf Relatives}, bringing up a list of -\spadglossSee{packages}{package}. - -\item[2. ] Click on {\bf LinearSystemMatrixPackage} bringing up its -constructor page.\footnote{You may want to widen your \HyperName{} -window to make what follows more legible.} - -\item[3. ] Click on {\bf Operations}. -Here you see \axiomFun{rank}, an operation also exported by -\axiomType{Matrix} itself. - -\item[4. ] Click on {\bf rank}. -This \spadfunFrom{rank}{LinearSystemMatrixPackage} has two arguments and -thus is different from the \spadfunFrom{rank}{Matrix} from -\axiomType{Matrix}. - -\item[5. ] Click on \UpBitmap{} to return to the list of operations for the -package \axiomType{LinearSystemMatrixPackage}. - -\item[6. ] Click on {\bf solve} to bring up a -\spadfunFrom{solve}{LinearSystemMatrixPackage} for linear systems of -equations. - -\item[7. ] Click on \UpBitmap{} several times to return to the cross -reference page for \axiomType{Matrix}. -\enditems -\indent{0} - -\subsubsection{Dependents} - -The \spadglossSee{dependents}{dependent} of a constructor are those -\spadglossSee{domains}{domain} or \spadglossSee{packages}{package} -that mention that -constructor either as an argument or in its \spadglossSee{exports}{export}. - -If you click on {\bf Dependents} two entries may surprise you: -\axiomType{RectangularMatrix} and \axiomType{SquareMatrix}. -This happens because \axiomType{Matrix}, as it turns out, appears in -signatures of operations exported by these domains. - -\subsubsection{Lineage} - -The term \spadgloss{lineage} refers to the {\it search order} for -functions. -If you are an expert user or curious about how the Axiom system -works, try the following exercise. -Otherwise, you best skip this button and go on to {\bf Clients}. - -Clicking on {\bf Lineage} gives you a -list of domain constructors: -\axiomType{InnerIndexedTwoDimensionalArray}, -\aliascon{MatrixCategory\&}{MATCAT-}, -\aliascon{TwoDimensionalArrayCategory\&}{ARR2CAT-}, -\aliascon{HomogeneousAggregate\&}{HOAGG-}, -\aliascon{Aggregate\&}{AGG-}. -What are these constructors and how are they used? - -We explain by an example. -Suppose you create a matrix using the interpreter, then ask for its -\axiomFun{rank}. -Axiom must then find a function implementing the \axiomFun{rank} -operation for matrices. -The first place Axiom looks for \axiomFun{rank} is in the \axiomType{Matrix} -domain. - -If not there, the lineage of \axiomType{Matrix} tells Axiom where -else to look. -Associated with the matrix domain are five other lineage domains. -Their order is important. -Axiom first searches the first one, -\axiomType{InnerIndexedTwoDimensionalArray}. -If not there, it searches the second \aliascon{MatrixCategory\&}{MATCAT-}. -And so on. - -Where do these {\it lineage constructors} come from? -The source code for \axiomType{Matrix} contains this syntax for the -\spadgloss{function body} of -\axiomType{Matrix}:\footnote{\axiomType{InnerIndexedTwoDimensionalArray} -is a special domain implemented for matrix-like domains to provide -efficient implementations of \twodim{} arrays. -For example, domains of category \axiomType{TwoDimensionalArrayCategory} -can have any integer as their \spad{minIndex}. -Matrices and other members of this special ``inner'' array have their -\spad{minIndex} defined as \spad{1}.} -\begin{verbatim} -InnerIndexedTwoDimensionalArray(R,mnRow,mnCol,Row,Col) - add ... -\end{verbatim} -where the ``{\tt ...}'' denotes all the code that follows. -In English, this means: -``The functions for matrices are defined as those from -\axiomType{InnerIndexedTwoDimensionalArray} domain augmented by those -defined in `{\tt ...}','' where the latter take precedence. - -This explains \axiomType{InnerIndexedTwoDimensionalArray}. -The other names, those with names ending with an ampersand \axiomSyntax{\&} are -\spadglossSee{default packages}{default package} -for categories to which \axiomType{Matrix} belongs. -Default packages are ordered by the notion of ``closest ancestor.'' - -\subsubsection{Clients} - -A client of \axiomType{Matrix} is any constructor that uses -\axiomType{Matrix} in its implementation. -For example, \axiomType{Complex} is a client of \axiomType{Matrix}; it -exports several operations that take matrices as arguments or return -matrices as values.\footnote{A constructor is a client of -\axiomType{Matrix} if it handles any matrix. -For example, a constructor having internal (unexported) operations -dealing with matrices is also a client.} - -\subsubsection{Benefactors} - -A \spadgloss{benefactor} of \axiomType{Matrix} is any constructor that -\axiomType{Matrix} uses in its implementation. -This information, like that for clients, is gathered from run-time -structures.\footnote{The benefactors exclude constructors such as -\axiomType{PrimitiveArray} whose operations macro-expand and so vanish -from sight!} - -Cross reference pages for categories have some different buttons on -them. -Starting with the constructor page of \axiomType{Matrix}, click on -\axiomType{Ring} producing its constructor page. -Click on {\bf Cross Reference}, -producing the cross-reference page for \axiomType{Ring}. -Here are buttons {\bf Parents} and {\bf Ancestors} similar to the notion -for domains, except for categories the relationship between parent and -child is defined through \spadgloss{category extension}. - -\subsubsection{Children} - -Category hierarchies go both ways. -There are children as well as parents. -A child can have any number of parents, but always at least one. -Every category is therefore a descendant of exactly one category: -\axiomType{Object}. - -\subsubsection{Descendants} - -These are children, children of children, and so on. - -Category hierarchies are complicated by the fact that categories take -parameters. -Where a parameterized category fits into a hierarchy {\it may} depend on -values of its parameters. -In general, the set of categories in Axiom forms a {\it directed -acyclic graph}, that is, a graph with directed arcs and no cycles. - -\subsubsection{Domains} - -This produces a table of all domain constructors that can possibly be -rings (members of category \axiomType{Ring}). -Some domains are unconditional rings. -Others are rings for some parameters and not for others. -To find out which, select the {\bf conditions} button in the views -panel. -For example, \axiomType{DirectProduct(n, R)} is a ring if {\tt R} is a -ring. - - - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugBrowseViewsOfConstructorsTitle}{Views Of Constructors} -\newcommand{\ugBrowseViewsOfConstructorsNumber}{14.2.3.} - -@ -\subsection{14.2.3. Views Of Constructors} -\label{ugBrowseViewsOfConstructorsPage} -\index{pages!ugBrowseViewsOfConstructorsPage!ug14.ht} -\index{ug14.ht!pages!ugBrowseViewsOfConstructorsPage} -\index{ugBrowseViewsOfConstructorsPage!ug14.ht!pages} -<>= -\begin{page}{ugBrowseViewsOfConstructorsPage}{14.2.3. Views Of Constructors} -\beginscroll - -Below every constructor table page is a {\it Views} panel. -As an example, click on {\bf Cross Reference} from -the constructor page of \axiomType{Matrix}, -then on {\bf Benefactors} to produce a -short table of constructor names. - -The {\it Views} panel is at the bottom of the page. -Two items, {\it names} and {\it conditions,} are in italics. -Others are active buttons. -The active buttons are those that give you useful alternative views -on this table of constructors. -Once you select a view, you notice that the button turns -off (becomes italicized) so that you cannot reselect it. - -\subsubsection{names} - -This view gives you a table of names. -Selecting any of these names brings up the constructor page for that -constructor. - -\subsubsection{abbrs} - -This view gives you a table of abbreviations, in the same order as the -original constructor names. -Abbreviations are in capitals and are limited to 7 characters. -They can be used interchangeably with constructor names in input areas. - -\subsubsection{kinds} - -This view organizes constructor names into -the three kinds: categories, domains and packages. - -\subsubsection{files} - -This view gives a table of file names for the source -code of the constructors in alphabetic order after removing -duplicates. - -\subsubsection{parameters} - -This view presents constructors with the arguments. -This view of the benefactors of \axiomType{Matrix} shows that -\axiomType{Matrix} uses as many as five different \axiomType{List} domains -in its implementation. - -\subsubsection{filter} - -This button is used to refine the list of names or abbreviations. -Starting with the {\it names} view, enter {\tt m*} into the input area -and click on {\bf filter}. -You then get a shorter table with only the names beginning with {\tt m}. - -\subsubsection{documentation} - -This gives you documentation for each of the constructors. - -\subsubsection{conditions} - -This page organizes the constructors according to predicates. -The view is not available for your example page since all constructors -are unconditional. -For a table with conditions, return to the {\bf Cross Reference} page -for \axiomType{Matrix}, click on {\bf Ancestors}, then on {\bf -conditions} in the view panel. -This page shows you that \axiomType{CoercibleTo(OutputForm)} and -\axiomType{SetCategory} are ancestors of \axiomType{Matrix(R)} only if {\tt R} -belongs to category \axiomType{SetCategory}. - -%********************************************************************* -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugBrowseGivingParametersTitle}{Giving Parameters to Constructors} -\newcommand{\ugBrowseGivingParametersNumber}{14.2.4.} - -@ -\subsection{14.2.4. Giving Parameters to Constructors} -\label{ugBrowseGivingParametersPage} -\index{pages!ugBrowseGivingParametersPage!ug14.ht} -\index{ug14.ht!pages!ugBrowseGivingParametersPage} -\index{ugBrowseGivingParametersPage!ug14.ht!pages} -<>= -\begin{page}{ugBrowseGivingParametersPage} -{14.2.4. Giving Parameters to Constructors} -\beginscroll -%********************************************************************* - -Notice the input area at the bottom of the constructor page. -If you leave this blank, then the information you get is for the -domain constructor \axiomType{Matrix(R)}, that is, \axiomType{Matrix} for an -arbitrary underlying domain {\tt R}. - -In general, however, the exports and other information {\it do} usually -depend on the actual value of {\tt R}. -For example, \axiomType{Matrix} exports the \axiomFun{inverse} operation -only if the domain {\tt R} is a \axiomType{Field}. -To see this, try this from the main constructor page: - -\indent{4} -\beginitems -\item[1. ] Enter {\tt Integer} into the input area at the bottom of the page. - -\item[2. ] Click on {\bf Operations}, producing a table of operations. -Note the number of operation names that appear at the top of the -page. - -\item[3. ] Click on \UpBitmap{} to return to the constructor page. - -\item[4. ] Use the -\texht{\fbox{\bf Delete}}{{\bf Delete}} -or -\texht{\fbox{\bf Backspace}}{{\bf Backspace}} -keys to erase {\tt Integer} from the input area. - -\item[5. ] Click on {\bf Operations} to produce a new table of operations. -Look at the number of operations you get. -This number is greater than what you had before. -Find, for example, the operation \axiomFun{inverse}. - -\item[6. ] Click on {\bf inverse} to produce a page describing the operation -\axiomFun{inverse}. -At the bottom of the description, you notice that the {\bf -Conditions} line says ``{\tt R} has \axiomType{Field}.'' -This operation is {\it not} exported by \axiomType{Matrix(Integer)} since -\axiomType{Integer} is not a \spadgloss{field}. - -Try putting the name of a domain such as \axiomType{Fraction Integer} -(which is a field) into the input area, then clicking on {\bf Operations}. -As you see, the operation \axiomFun{inverse} is exported. -\enditems \indent{0} - -\endscroll -\autobuttons +\end{scroll} +\autobutt{MainHelp} \end{page} @ -<>= -\newcommand{\ugBrowseMiscellaneousFeaturesTitle}{Miscellaneous Features of Browse} -\newcommand{\ugBrowseMiscellaneousFeaturesNumber}{14.3.} - -@ -\subsection{14.3. Miscellaneous Features of Browse} -\label{ugBrowseMiscellaneousFeaturesPage} -\index{pages!ugBrowseMiscellaneousFeaturesPage!ug14.ht} -\index{ug14.ht!pages!ugBrowseMiscellaneousFeaturesPage} -\index{ugBrowseMiscellaneousFeaturesPage!ug14.ht!pages} -<>= -\begin{page}{ugBrowseMiscellaneousFeaturesPage} -{14.3. Miscellaneous Features of Browse} -\beginscroll -\labelSpace{4pc} +\subsection{Partial Differential Equations} +\label{UXANNAPde} +\index{pages!UXANNAPde!annaex.ht} +\index{annaex.ht!pages!UXANNAPde} +\index{UXANNAPde!annaex.ht!pages} +<>= +\begin{page}{UXANNAPde}{Partial Differential Equations} +Welcome to the Partial Differential Equations section of {\tt +\inputbitmap{\htbmdir{}/anna.xbm.tiny}}, the +{\em Axiom/NAG Expert System}. +\begin{scroll} +\indent{2} \beginmenu - \menudownlink{{14.3.1. The Description Page for Operations}}{ugBrowseDescriptionPagePage} - \menudownlink{{14.3.2. Views of Operations}}{ugBrowseViewsOfOperationsPage} - \menudownlink{{14.3.3. Capitalization Convention}}{ugBrowseCapitalizationConventionPage} +\menulispdownlink{Second Order Elliptic Partial Differential Equation}{(|annaPDESolve|)} +\newline +\indent{4} Discretizing the PDE: +\newline +\centerline{\inputbitmap{\htbmdir{}/d03eef.xbm}} +defined on a rectangular region with boundary conditions of the form +\centerline{\inputbitmap{\htbmdir{}/d03eef1.bitmap}} +and solving the resulting +seven-diagonal finite difference equations using a multigrid technique. +\blankline +%\menulispdownlink{Helmholtz Equation in 3-D, Cartesian Coordinates}{(|d03fafVars|)} +%\newline +%\indent{4} Descretizing the PDE: +%\newline +%\centerline{\inputbitmap{\htbmdir{}/d03faf.xbm}} +%and solving the resulting +%seven-diagonal finite difference equations using a method based on the Fast +%Fourier Transform. \endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugBrowseDescriptionPageTitle}{The Description Page for Operations} -\newcommand{\ugBrowseDescriptionPageNumber}{14.3.1.} - -@ -\subsection{14.3.1. The Description Page for Operations} -\label{ugBrowseDescriptionPagePage} -\index{pages!ugBrowseDescriptionPagePage!ug14.ht} -\index{ug14.ht!pages!ugBrowseDescriptionPagePage} -\index{ugBrowseDescriptionPagePage!ug14.ht!pages} -<>= -\begin{page}{ugBrowseDescriptionPagePage} -{14.3.1. The Description Page for Operations} -\beginscroll -From the constructor page of \axiomType{Matrix}, -click on {\bf Operations} to bring up the table of operations -for \axiomType{Matrix}. - -Find the operation {\bf inverse} in the table and click on it. -This takes you to a page showing the documentation for this operation. - - -Here is the significance of the headings you see. - -\subsubsection{Arguments} - -This lists each of the arguments of the operation in turn, paraphrasing -the \spadgloss{signature} of the operation. -As for signatures, a \axiomSyntax{\$} is used to designate {\em this domain}, -that is, \axiomType{Matrix(R)}. - -\subsubsection{Returns} - -This describes the return value for the operation, analogous to the {\bf -Arguments} part. - -\subsubsection{Origin} - -This tells you which domain or category explicitly exports the -operation. -In this example, the domain itself is the {\it Origin}. - - -\subsubsection{Conditions} - -This tells you that the operation is exported by \axiomType{Matrix(R)} only if -``{\tt R} has \axiomType{Field},'' that is, ``{\tt R} is a member of -category \axiomType{Field}.'' -When no {\bf Conditions} part is given, the operation is exported for -all values of {\tt R}. - -\subsubsection{Description} - -Here are the \axiomSyntax{++} comments -that appear in the source code of its {\it Origin}, here \axiomType{Matrix}. -You find these comments in the source code for \axiomType{Matrix}. - - -Click on \UpBitmap{} to return to the table of operations. -Click on {\bf map}. -Here you find three different operations named \axiomFun{map}. -This should not surprise you. -Operations are identified by name and \spadgloss{signature}. -There are three operations named \axiomFun{map}, each with -different signatures. -What you see is the {\it descriptions} view of the operations. -If you like, select the button in the heading of one of these -descriptions to get {\it only} that operation. - -\subsubsection{Where} - -This part qualifies domain parameters mentioned in the arguments to the -operation. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugBrowseViewsOfOperationsTitle}{Views of Operations} -\newcommand{\ugBrowseViewsOfOperationsNumber}{14.3.2.} - -@ -\subsection{14.3.2. Views of Operations} -\label{ugBrowseViewsOfOperationsPage} -\index{pages!ugBrowseViewsOfOperationsPage!ug14.ht} -\index{ug14.ht!pages!ugBrowseViewsOfOperationsPage} -\index{ugBrowseViewsOfOperationsPage!ug14.ht!pages} -<>= -\begin{page}{ugBrowseViewsOfOperationsPage}{14.3.2. Views of Operations} -\beginscroll - -We suggest that you go to the constructor page for \axiomType{Matrix} -and click on {\bf Operations} to bring up a table of operations -with a {\it Views} panel at the bottom. - -\subsubsection{names} - -This view lists the names of the operations. -Unlike constructors, however, there may be several operations with the -same name. -The heading for the page tells you the number of unique names and the -number of distinct operations when these numbers are different. - -\subsubsection{filter} - -As for constructors, you can use this button to cut down the list of -operations you are looking at. -Enter, for example, {\tt m*} into the input area to the right of {\bf -filter} then click on {\bf filter}. -As usual, any logical expression is permitted. -For example, use -\begin{verbatim} -*! or *? -\end{verbatim} -to get a list of destructive operations and predicates. - -\subsubsection{documentation} - -This gives you the most information: -a detailed description of all the operations in the form you have seen -before. -Every other button summarizes these operations in some form. - -\subsubsection{signatures} - -This views the operations by showing their signatures. - -\subsubsection{parameters} - -This views the operations by their distinct syntactic forms with -parameters. - -\subsubsection{origins} - -This organizes the operations according to the constructor that -explicitly exports them. - -\subsubsection{conditions} - -This view organizes the operations into conditional and unconditional -operations. - -\subsubsection{usage} - -This button is only available if your user-level is set to {\it -development}. -The {\bf usage} button produces a table of constructors that reference this -operation.\footnote{Axiom requires an especially long time to -produce this table, so anticipate this when requesting this -information.} - -\subsubsection{implementation} - -This button is only available if your user-level is set to {\it -development}. -If you enter values for all domain parameters on the constructor page, -then the {\bf implementation} button appears in place of the {\bf -conditions} button. -This button tells you what domains or packages actually implement the -various operations.\footnote{This button often takes a long time; expect -a delay while you wait for an answer.} - -With your user-level set to {\it development}, we suggest you try this -exercise. -Return to the main constructor page for \axiomType{Matrix}, then enter -{\tt Integer} into the input area at the bottom as the value of {\tt R}. -Then click on {\bf Operations} to produce a table of operations. -Note that the {\bf conditions} part of the {\it Views} table is -replaced by {\bf implementation}. -Click on {\bf implementation}. -After some delay, you get a page describing what implements each of -the matrix operations, organized by the various domains and packages. - - -\subsubsection{generalize} - -This button only appears for an operation page of a constructor -involving a unique operation name. - -From an operations page for \axiomType{Matrix}, select any -operation name, say {\bf rank}. -In the views panel, the {\bf filter} button is replaced by -{\bf generalize}. -Click on it! -%% Replaced {\bf threshold} with 10 below. MGR 1995oct31 -What you get is a description of all Axiom operations -named \axiomFun{rank}.\footnote{If there were more than 10 -operations of the name, you get instead a page -with a {\it Views} panel at the bottom and the message to {\bf -Select a view below}. -To get the descriptions of all these operations as mentioned -above, select the {\bf description} button.} - -\subsubsection{all domains} - -This button only appears on an operation page resulting from a -search from the front page of \Browse{} or from selecting -{\bf generalize} from an operation page for a constructor. - -Note that the {\bf filter} button in the {\it Views} panel is -replaced by {\bf all domains}. -Click on it to produce a table of {\it all} domains or packages that -export a \axiomFun{rank} operation. - - -We note that this table specifically refers to all the \axiomFun{rank} -operations shown in the preceding page. -Return to the descriptions of all the \axiomFun{rank} operations and -select one of them by clicking on the button in its heading. -Select {\bf all domains}. -As you see, you have a smaller table of constructors. -When there is only one constructor, you get the -constructor page for that constructor. -\texht{\newpage}{} - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugBrowseCapitalizationConventionTitle}{Capitalization Convention} -\newcommand{\ugBrowseCapitalizationConventionNumber}{14.3.3.} - -@ -\subsection{14.3.3. Capitalization Convention} -\label{ugBrowseCapitalizationConventionPage} -\index{pages!ugBrowseCapitalizationConventionPage!ug14.ht} -\index{ug14.ht!pages!ugBrowseCapitalizationConventionPage} -\index{ugBrowseCapitalizationConventionPage!ug14.ht!pages} -<>= -\begin{page}{ugBrowseCapitalizationConventionPage} -{14.3.3. Capitalization Convention} -\beginscroll - -When entering search keys for constructors, you can use capital -letters to search for abbreviations. -For example, enter {\tt UTS} into the input area and click on {\bf -Constructors}. -Up comes a page describing \axiomType{UnivariateTaylorSeries} -whose abbreviation is \axiomType{UTS}. - -Constructor abbreviations always have three or more capital -letters. -For short constructor names (six letters or less), abbreviations -are not generally helpful as their abbreviation is typically the -constructor name in capitals. -For example, the abbreviation for \axiomType{Matrix} is -\axiomType{MATRIX}. - -Abbreviations can also contain numbers. -For example, \axiomType{POLY2} is the abbreviation for constructor -\axiomType{PolynomialFunctions2}. -For default packages, the abbreviation is the same as the -abbreviation for the corresponding category with the ``\&'' -replaced by ``-''. -For example, for the category default package -\aliascon{MatrixCategory\&}{MATCAT-} the abbreviation is -\axiomType{MATCAT-} since the corresponding category -\axiomType{MatrixCategory} has abbreviation \axiomType{MATCAT}. - -\endscroll -\autobuttons +\end{scroll} +\autobutt{MainHelp} \end{page} @ -\section{ug15.ht} -<>= -\newcommand{\ugWhatsNewTitle}{What's New in Axiom Version 2.0} -\newcommand{\ugWhatsNewNumber}{15.} - -@ -\subsection{15. What's New in Axiom Version 2.0} -\label{ugWhatsNewPage} -\index{pages!ugWhatsNewPage!ug15.ht} -\index{ug15.ht!pages!ugWhatsNewPage} -\index{ugWhatsNewPage!ug15.ht!pages} -<>= -\begin{page}{ugWhatsNewPage}{15. What's New in Axiom Version 2.0} -\beginscroll - -Many things have changed in this new version of Axiom and -we describe many of the more important topics here. - -%------------------------------------------------------------------------ +\subsection{Examples Using the Axiom/NAG Expert System} +\label{UXANNAOptEx} +\index{pages!UXANNAOptEx!annaex.ht} +\index{annaex.ht!pages!UXANNAOptEx} +\index{UXANNAOptEx!annaex.ht!pages} +<>= +\begin{page}{UXANNAOptEx}{Examples Using the Axiom/NAG Expert System} +\begin{scroll} +Select any of these examples and you will be presented with a page which +contains active areas for the function and its parameters. +\blankline +These parameters can be altered by selecting the area and replacing the +default parameters by the new values. +\blankline \beginmenu - \menudownlink{{15.1. Important Things to Read First}}{ugWhatsNewImportantPage} - \menudownlink{{15.2. The New Axiom Library Compiler}}{ugWhatsNewAsharpPage} - \menudownlink{{15.3. The NAG Library Link}}{nagLinkIntroPage} - \menudownlink{{15.4. Interactive Front-end and Language}}{ugWhatsNewLanguagePage} - \menudownlink{{15.5. Library}}{ugWhatsNewLibraryPage} - \menudownlink{{15.6. \HyperName}}{ugWhatsNewHyperDocPage} - \menudownlink{{15.7. Documentation}}{ugWhatsNewDocumentationPage} +\item \menulispdownlink{Example 1: \newline +\indent{2} Minimize the function: +\centerline{\inputbitmap{\htbmdir{}/opt1.xbm}}}{(|annaOptDefaultSolve1|)}\space{} +\blankline +\item \menulispdownlink{Example 2: \newline +\indent{2} Minimize the function: +\centerline{\inputbitmap{\htbmdir{}/opt2.xbm}}}{(|annaOptDefaultSolve2|)}\space{} +\newline \indent{3} With conditions: +\centerline{\inputbitmap{\htbmdir{}/opt2c.xbm}} +\blankline +\item \menulispdownlink{Example 3: \newline +\indent{2} Minimize the function: +\centerline{\inputbitmap{\htbmdir{}/opt3.xbm}}}{(|annaOptDefaultSolve3|)}\space{} +\newline \indent{3} With conditions: +\centerline{\inputbitmap{\htbmdir{}/opt3c1.xbm}} +\centerline{\inputbitmap{\htbmdir{}/opt3c2.xbm}} +\blankline +\item \menulispdownlink{Example 4: \newline +\indent{2} Minimize the function: +\centerline{\inputbitmap{\htbmdir{}/opt4.xbm}} +}{(|annaOptDefaultSolve4|)}\space{} +\newline \indent{3} With conditions: +\centerline{\inputbitmap{\htbmdir{}/opt4c1.xbm}} +\centerline{\inputbitmap{\htbmdir{}/opt4c2.xbm}} +\centerline{\inputbitmap{\htbmdir{}/opt4c3.xbm}} +\blankline +\item \menulispdownlink{Example 5: \newline +\indent{2} Minimize the function: +\centerline{\inputbitmap{\htbmdir{}/opt5.xbm}} +}{(|annaOptDefaultSolve5|)}\space{} +\newline \indent{3} With conditions: +\centerline{\inputbitmap{\htbmdir{}/opt4c1.xbm}} +\centerline{\inputbitmap{\htbmdir{}/opt4c2.xbm}} +\centerline{\inputbitmap{\htbmdir{}/opt4c3.xbm}} +\blankline \endmenu -\endscroll -\autobuttons +\end{scroll} +\autobutt{Mainhelp} \end{page} @ -<>= -\newcommand{\ugWhatsNewImportantTitle}{Important Things to Read First} -\newcommand{\ugWhatsNewImportantNumber}{15.1.} - -@ -\subsection{15.1. Important Things to Read First} -\label{ugWhatsNewImportantPage} -\index{pages!ugWhatsNewImportantPage!ug15.ht} -\index{ug15.ht!pages!ugWhatsNewImportantPage} -\index{ugWhatsNewImportantPage!ug15.ht!pages} -<>= -\begin{page}{ugWhatsNewImportantPage}{15.1. Important Things to Read First} -\beginscroll -%------------------------------------------------------------------------ - -If you have any private {\tt .spad} files (that is, library files -which were not shipped with Axiom) you will need to -recompile them. For example, if you wrote the file {\tt -regress.spad} then you should issue {\tt )compile regress.spad} -before trying to use it. - -The internal representation of \axiomType{Union} has changed. -This means that \texht{\linebreak}{} Axiom data saved -with Release 1.x may not -be readable by this Release. If you cannot recreate the saved data -by recomputing in Release 2.0, please contact NAG for assistance. - -%------------------------------------------------------------------------ -\endscroll -\autobuttons +\subsection{Examples Using the Axiom/NAG Expert System} +\label{UXANNAOpt2Ex} +\index{pages!UXANNAOpt2Ex!annaex.ht} +\index{annaex.ht!pages!UXANNAOpt2Ex} +\index{UXANNAOpt2Ex!annaex.ht!pages} +<>= +\begin{page}{UXANNAOpt2Ex}{Examples Using the Axiom/NAG Expert System} +\begin{scroll} +Select this example and you will be presented with a page which +contains active areas for the function and its parameters. +\blankline +These parameters can be altered by selecting the area and replacing the +default parameters by the new values. +\blankline +\beginmenu +\blankline +\item \menulispdownlink{Example 1: \newline +\indent{2} Calculate a least-squares minimization of the following functions: +\centerline{\inputbitmap{\htbmdir{}/opt61.xbm}} +\centerline{\inputbitmap{\htbmdir{}/opt62.xbm}} +\centerline{\inputbitmap{\htbmdir{}/opt63.xbm}}} +{(|annaOpt2DefaultSolve|)}\space{} +\endmenu +\end{scroll} +\autobutt{MainHelp} \end{page} -@ -<>= -\newcommand{\ugWhatsNewAsharpTitle}{The New Axiom Library Compiler} -\newcommand{\ugWhatsNewAsharpNumber}{15.2.} @ -\subsection{15.2. The New Axiom Library Compiler} -\label{ugWhatsNewAsharpPage} -\index{pages!ugWhatsNewAsharpPage!ug15.ht} -\index{ug15.ht!pages!ugWhatsNewAsharpPage} -\index{ugWhatsNewAsharpPage!ug15.ht!pages} -<>= -\begin{page}{ugWhatsNewAsharpPage}{15.2. The New Axiom Library Compiler} -\beginscroll -%------------------------------------------------------------------------ - -A new compiler is now available for Axiom. -The programming language is referred to as the Axiom Extension Language -(or \axiomxl{} for short), and -improves upon the old Axiom language in many ways. -The \spadcmd{)compile} command has been upgraded to be able to -invoke the new or old compilers. -The language and the compiler are described in the hard-copy -documentation which came with your Axiom system. - -To ease the chore of upgrading your {\it .spad} files (old -compiler) to {\it .as} files (new compiler), the -\spadcmd{)compile} command has been given a {\tt )translate} -option. This invokes a special version of the old compiler which -parses and analyzes your old code and produces augmented code -using the new syntax. -Please be aware that the translation is not necessarily one -hundred percent complete or correct. -You should attempt to compile the output with the \axiomxl{} compiler -and make any necessary corrections. - - -\endscroll -\autobuttons +\subsection{Examples Using the Axiom/NAG Expert System} +\label{UXANNAIntEx} +\index{pages!UXANNAIntEx!annaex.ht} +\index{annaex.ht!pages!UXANNAIntEx} +\index{UXANNAIntEx!annaex.ht!pages} +<>= +\begin{page}{UXANNAIntEx}{Examples Using the Axiom/NAG Expert System} +\begin{scroll} +Select any of these examples and you will be presented with a page which +contains active areas for the function and its parameters. +\blankline +These parameters can be altered by selecting the area and replacing the +default parameters by the new values. In this way you can investigate the +effect of the new parameters on the choice of method. +\blankline +\beginmenu +\item \menulispdownlink{Example 1: \newline +\centerline{\inputbitmap{\htbmdir{}/int1.xbm}}}{(|annaFoo|)}\space{} +\blankline +\item \menulispdownlink{Example 2: \newline +\centerline{\inputbitmap{\htbmdir{}/int2.xbm}}}{(|annaBar|)}\space{} +\blankline +\item \menulispdownlink{Example 3: \newline +\centerline{\inputbitmap{\htbmdir{}/int3.xbm}}}{(|annaJoe|)}\space{} +\blankline +\item \menulispdownlink{Example 4: \newline +\centerline{\inputbitmap{\htbmdir{}/int4.xbm}}}{(|annaSue|)}\space{} +\blankline +\item \menulispdownlink{Example 5: \newline +\centerline{\inputbitmap{\htbmdir{}/int5.xbm}}}{(|annaAnn|)}\space{} +\blankline +\item \menulispdownlink{Example 6: \newline +\centerline{\inputbitmap{\htbmdir{}/int6.xbm}}}{(|annaBab|)}\space{} +\blankline +\item \menulispdownlink{Example 7: \newline +\centerline{\inputbitmap{\htbmdir{}/int7.xbm}}}{(|annaFnar|)}\space{} +\blankline +\item \menulispdownlink{Example 8: \newline +\centerline{\inputbitmap{\htbmdir{}/int8.xbm}}}{(|annaDan|)}\space{} +\blankline +\item \menulispdownlink{Example 9: \newline +\centerline{\inputbitmap{\htbmdir{}/int9.xbm}}}{(|annaBlah|)}\space{} +\blankline +\item \menulispdownlink{Example 10: \newline +\centerline{\inputbitmap{\htbmdir{}/int10.xbm}}}{(|annaTub|)}\space{} +\blankline +\item \menulispdownlink{Example 11: \newline +\centerline{\inputbitmap{\htbmdir{}/int13.xbm}}}{(|annaRats|)}\space{} +\blankline +\item \menulispdownlink{Example 12: \newline +\centerline{\inputbitmap{\htbmdir{}/int11.xbm}}}{(|annaMInt|)}\space{} +\endmenu +\end{scroll} +\autobutt{MainHelp} \end{page} @ -<>= -\newcommand{\nagLinkIntroTitle}{The NAG Library Link} -\newcommand{\nagLinkIntroNumber}{15.3.} - -@ -\subsection{15.3. The NAG Library Link} -\label{nagLinkIntroPage} -\begin{itemize} -\item htxl1 \ref{htxl1} on -page~\pageref{htxl1} -\item nagDocumentationPage \ref{nagDocumentationPage} on -page~\pageref{nagDocumentationPage} -\item nagLinkUsagePage \ref{nagLinkUsagePage} on -page~\pageref{nagLinkUsagePage} -\item aspSectionPage \ref{aspSectionPage} on -page~\pageref{aspSectionPage} -\item generalFortranPage \ref{generalFortranPage} on -page~\pageref{generalFortranPage} -\item nagTechnicalPage \ref{nagTechnicalPage} on -page~\pageref{nagTechnicalPage} -\end{itemize} -\index{pages!nagLinkIntroPage!ug15.ht} -\index{ug15.ht!pages!nagLinkIntroPage} -\index{nagLinkIntroPage!ug15.ht!pages} -<>= -\begin{page}{nagLinkIntroPage}{15.3. The NAG Library Link} -\beginscroll - -The \naglib{} link allows you to call NAG Fortran -routines from within Axiom, passing Axiom objects as parameters -and getting them back as results. - -The \naglib{} and, consequently, the link are divided into {\em chapters}, -which cover different areas of numerical analysis. The statistical -and sorting {\em chapters} of the Library, however, are not included in the -link and various support and utility routines (mainly the F06 and X -{\em chapters}) have been omitted. - -Each {\em chapter} has a short (at most three-letter) name; -for example, the {\em chapter} devoted to the -solution of ordinary differential equations is called D02. When -using the link via the \downlink{\HyperName{} interface}{htxl1}, -you will be presented with a complete menu of these {\em chapters}. The -names of individual routines within each {\em chapter} are formed by -adding three letters to the {\em chapter} name, so for example the routine -for solving ODEs by Adams method is called -\axiomFunFrom{d02cjf}{NagOrdinaryDifferentialEquationsPackage}. - +\subsection{Examples Using the Axiom/NAG Expert System} +\label{UXANNAOdeEx} +\index{pages!UXANNAOdeEx!annaex.ht} +\index{annaex.ht!pages!UXANNAOdeEx} +\index{UXANNAOdeEx!annaex.ht!pages} +<>= +\begin{page}{UXANNAOdeEx}{Examples Using the Axiom/NAG Expert System} +\begin{scroll} +Analyses the function for various attributes, chooses and +then uses a suitable ODE solver to provide a +solution to the system of n ODEs \center{\htbitmap{d02gaf},} +for i = 1,2,...,n. +\blankline +Select either of these examples and you will be presented with a page which +contains active areas for the function and its parameters. +\blankline +These parameters can be altered by selecting the area and replacing the +default parameters by the new values. In this way you can investigate the +effect of the new parameters on the choice of method. +\blankline \beginmenu - \menudownlink{{15.3.1. Interpreting NAG Documentation}} -{nagDocumentationPage} - \menudownlink{{15.3.2. Using the Link}}{nagLinkUsagePage} - \menudownlink{{15.3.3. Providing values for Argument Subprograms}} -{aspSectionPage} - \menudownlink{{15.3.4. General Fortran-generation utilities in Axiom}} -{generalFortranPage} - \menudownlink{{15.3.5. Some technical information}}{nagTechnicalPage} +\item \menulispdownlink{Example 1: \tab{12} +\inputbitmap{\htbmdir{}/ode1.xbm}}{(|annaOdeDefaultSolve1|)} +\blankline with initial conditions: \newline +\tab{12}\inputbitmap{\htbmdir{}/y1.xbm} \space{1} and \space{1} +\inputbitmap{\htbmdir{}/x1.xbm} +\blankline +\blankline +\blankline +\item \menulispdownlink{Example 2: \tab{12} +\inputbitmap{\htbmdir{}/ode2.xbm}}{(|annaOdeDefaultSolve2|)} +\blankline with initial conditions: \newline +\tab{12}\inputbitmap{\htbmdir{}/y2.xbm} \space{1} and \space{1} +\inputbitmap{\htbmdir{}/x1.xbm} +\blankline +\blankline +\blankline \endmenu -\endscroll -\autobuttons +\end{scroll} +\autobutt{MainHelp} \end{page} @ -<>= -\newcommand{\nagDocumentationTitle}{Interpreting NAG Documentation} -\newcommand{\nagDocumentationNumber}{15.3.1.} - -@ -\subsection{15.3.1. Interpreting NAG Documentation} -\label{nagDocumentationPage} +\subsection{About the Axiom/NAG Expert System} +\label{UXANNATxt} \begin{itemize} -\item manpageXXintro \ref{manpageXXintro} on -page~\pageref{manpageXXintro} -\item manpageXXonline \ref{manpageXXonline} on -page~\pageref{manpageXXonline} -\item FoundationLibraryDocPage \ref{FoundationLibraryDocPage} on -page~\pageref{FoundationLibraryDocPage} -\item aspSectionPage \ref{aspSectionPage} on -page~\pageref{aspSectionPage} +\item UXANNAEx \ref{UXANNAEx} on page~\pageref{UXANNAEx} +\item UXANNAIntro \ref{UXANNAIntro} on page~\pageref{UXANNAIntro} +\item UXANNADec \ref{UXANNADec} on page~\pageref{UXANNADec} +\item UXANNAInfer \ref{UXANNAInfer} on page~\pageref{UXANNAInfer} +\item UXANNAMeas \ref{UXANNAMeas} on page~\pageref{UXANNAMeas} \end{itemize} -\index{pages!nagDocumentationPage!ug15.ht} -\index{ug15.ht!pages!nagDocumentationPage} -\index{nagDocumentationPage!ug15.ht!pages} -<>= -\begin{page}{nagDocumentationPage}{15.3.1. Interpreting NAG Documentation} -\beginscroll - -Information about using the \naglib{} in general, and about using -individual routines in particular, can be accessed via \HyperName{}. -This documentation refers to the Fortran routines directly; the -purpose of this subsection is to explain how this corresponds to the -Axiom routines. - -For general information about the \naglib{} users should consult -\downlink{Essential Introduction to the NAG Foundation Library} -{manpageXXintro}. -The documentation is in ASCII format, and a description of the conventions -used to represent mathematical symbols is given in -\downlink{Introduction to NAG On-Line Documentation}{manpageXXonline}. -Advice about choosing a routine from a particular {\em chapter} can -be found in the \downlink{Chapter Documents}{FoundationLibraryDocPage}. - -\subsubsection{Correspondence Between Fortran and Axiom types} - -The NAG documentation refers to the Fortran types of objects; in -general, the correspondence to Axiom types is as follows. -\indent{4} -\beginitems -\item[-] Fortran INTEGER corresponds to Axiom \axiomType{Integer}. -\item[-] Fortran DOUBLE PRECISION corresponds to Axiom \axiomType{DoubleFloat}. -\item[-] Fortran COMPLEX corresponds to Axiom \axiomType{Complex DoubleFloat}. -\item[-] Fortran LOGICAL corresponds to Axiom \axiomType{Boolean}. -\item[-] Fortran CHARACTER*(*) corresponds to Axiom \axiomType{String}. -\enditems -\indent{0} -(Exceptionally, for NAG EXTERNAL parameters -- ASPs in link parlance --- REAL and COMPLEX correspond to \axiomType{MachineFloat} and -\axiomType{MachineComplex}, -respectively; see \downlink{``\aspSectionTitle''}{aspSectionPage} -in Section \aspSectionNumber\ignore{aspSection}.) - -The correspondence for aggregates is as follows. -\indent{4} -\beginitems -\item[-] A one-dimensional Fortran array corresponds to an Axiom -\texht{\linebreak}{} - \axiomType{Matrix} with one column. -\item[-] A two-dimensional Fortran ARRAY corresponds to an Axiom -\texht{\linebreak}{} - \axiomType{Matrix}. -\item[-] A three-dimensional Fortran ARRAY corresponds to an Axiom -\texht{\linebreak}{} - \axiomType{ThreeDimensionalMatrix}. -\enditems -\indent{0} -Higher-dimensional arrays are not currently needed for the \naglib{}. - -Arguments which are Fortran FUNCTIONs or SUBROUTINEs correspond to -special ASP domains in Axiom. See -\downlink{``\aspSectionTitle''}{aspSectionPage} in Section -\aspSectionNumber\ignore{aspSection}. - -\subsubsection{Classification of NAG parameters} - -NAG parameters are classified as belonging to one (or more) of the -following categories: {\tt Input}, {\tt Output}, {\tt Workspace} or -{\tt External} procedure. Within {\tt External} procedures a similar -classification is used, and parameters may also be {\tt Dummies}, or -{\tt User Workspace} (data structures not used by the NAG routine but -provided for the convenience of the user). - -When calling a NAG routine via the link the user only provides values -for {\tt Input} and {\tt External} parameters. - -The order of the parameters is, in general, different from the order -specified in the \naglib{} documentation. The Browser description -for each routine helps in determining the correspondence. As a rule of -thumb, {\tt Input} parameters come first followed by {\tt Input/Output} -parameters. The {\tt External} parameters are always found at the end. - - -\subsubsection{IFAIL} - -NAG routines often return diagnostic information through a parameter called -\axiom{ifail}. With a few exceptions, the principle is that on input -\axiom{ifail} takes -one of the values $-1,0,1$. This determines how the routine behaves when -it encounters an error: -\indent{4} -\beginitems -\item[-] a value of 1 causes the NAG routine to return without printing -an error message; -\item[-] a value of 0 causes the NAG routine to print an error message -and abort; -\item[-] a value of -1 causes the NAG routine to return and print an -error message. -\enditems -\indent{0} - -The user is STRONGLY ADVISED to set \axiom{ifail} to \texht{$-1$}{-1} -when using the link. If \axiom{ifail} has been set to \texht{$1$}{1} -or \texht{$-1$}{-1} on input, then its value on output will determine -the possible cause of any error. A value of \texht{$0$}{0} indicates -successful completion, otherwise it provides an index into a table of -diagnostics provided as part of the routine documentation (accessible -via \Browse{}). - -\endscroll -\autobuttons +\index{pages!UXANNATxt!annaex.ht} +\index{annaex.ht!pages!UXANNATxt} +\index{UXANNATxt!annaex.ht!pages} +<>= +\begin{page}{UXANNATxt}{About the Axiom/NAG Expert System} +\begin{scroll} +\centerline{\tt\inputbitmap{\htbmdir{}/anna_logo.xbm}\rm} +\vspace{-30}\horizontalline +In applied mathematics, electronic and chemical engineering, the modelling +process can produce a number of mathematical problems which require numerical +solutions for which symbolic methods are either not possible or not obvious. +With the plethora of numerical library routines for the solution of these +problems often the numerical analyst has to answer the question {\em Which +routine to choose?} +\blankline +Some analysis needs to be carried out before the +appropriate routine can be identified i.e. {\em How stiff is this ODE?} and +{\em Is this function continuous?} It may well be the case that more than +one routine is applicable to the problem. So the question may become {\em +Which is likely to be the best?} Such a choice may be critical for both +accuracy and efficiency. +\blankline +An expert system is thus required to make this choice based on the result of +its own analysis of the problem, call the routine and act on the outcome. +This may be to put the answer in a relevant form or react to an apparent +failure of the chosen routine and thus choose and call an alternative. +It should also have sufficient explanation mechanisms to inform on the choice +of routine and the reasons for that choice. +\blankline +\end{scroll} +\downlink{ Examples }{UXANNAEx} +\downlink{ Introduction }{UXANNAIntro} +\downlink{ Decision Agents }{UXANNADec} +\downlink{ Inference Mechanisms }{UXANNAInfer} +\downlink{ Measure Functions }{UXANNAMeas} \end{page} @ -<>= -\newcommand{\nagLinkUsageTitle}{Using the Link} -\newcommand{\nagLinkUsageNumber}{15.3.2.} - -@ -\subsection{15.3.2. Using the Link} -\label{nagLinkUsagePage} +\subsection{Introduction to the Axiom/NAG Expert System} +\label{UXANNAIntro} \begin{itemize} -\item htxl1 \ref{htxl1} on -page~\pageref{htxl1} +\item UXANNADec \ref{UXANNADec} on page~\pageref{UXANNADec} +\item UXANNAInfer \ref{UXANNAInfer} on page~\pageref{UXANNAInfer} +\item UXANNAMeth \ref{UXANNAMeth} on page~\pageref{UXANNAMeth} +\item UXANNAMeas \ref{UXANNAMeas} on page~\pageref{UXANNAMeas} \end{itemize} -\index{pages!nagLinkUsagePage!ug15.ht} -\index{ug15.ht!pages!nagLinkUsagePage} -\index{nagLinkUsagePage!ug15.ht!pages} -<>= -\begin{page}{nagLinkUsagePage}{15.3.2. Using the Link} -\beginscroll - -The easiest way to use the link is via the -\downlink{\HyperName{} interface}{htxl1}. -You will be presented with a set of fill-in forms where -you can specify the parameters for each call. Initially, the forms -contain example values, demonstrating the use of each routine (these, -in fact, correspond to the standard NAG example program for the -routine in question). For some parameters, these values can provide -reasonable defaults; others, of course, represent data. When you -change a parameter which controls the size of an array, the data in -that array are reset to a ``neutral'' value -- usually zero. - -When you are satisfied with the values entered, clicking on the -``Continue'' button will display the Axiom command needed to -run the chosen NAG routine with these values. Clicking on the -``Do It'' button will then cause Axiom to execute this command -and return the result in the parent Axiom session, as described -below. Note that, for some routines, multiple HyperDoc ``pages'' are -required, due to the structure of the data. For these, returning to -an earlier page causes HyperDoc to reset the later pages (this is a -general feature of HyperDoc); in such a case, the simplest way to -repeat a call, varying a parameter on an earlier page, is probably to -modify the call displayed in the parent session. - -An alternative approach is to call NAG routines directly in your -normal Axiom session (that is, using the Axiom -interpreter). Such calls return an -object of type \axiomType{Result}. As not -all parameters in the underlying NAG routine are required in the -Axiom call (and the parameter ordering may be different), before -calling a NAG routine you should consult the description of the -Axiom operation in the Browser. (The quickest route to this -is to type the routine name, in lower case, into the Browser's -input area, then click on {\tt Operations}.) The parameter names -used coincide with NAG's, although they will appear here in lower -case. Of course, it is also possible to become familiar with the -Axiom form of a routine by first using it through the -\downlink{\HyperName{} interface}{htxl1}. - -\xtc{ -As an example of this mode of working, we can find a zero -of a function, lying between 3 and 4, as follows: -}{ -\spadpaste{answer:=c05adf(3.0,4.0,1.0e-5,0.0,-1,sin(X)::ASP1(F))\bound{answer} } -} -\xtc{ -By default, \axiomType{Result} only displays the type of returned values, -since the amount of information returned can be quite large. Individual -components can be examined as follows: -}{ -\spadpaste{answer . x\free{answer}} -} -\xtc{ -}{ -\spadpaste{answer . ifail\free{answer}} -} -\xtc{ -In order to avoid conflict with names defined in the workspace, you can also -get the values by using the \axiomType{String} type (the interpreter automatically -coerces them to \axiomType{Symbol}) -}{ -\spadpaste{answer "x"\free{answer}} -} - - -It is possible to have Axiom display the values of scalar or array -results automatically. For more details, see the commands -\axiomFunFrom{showScalarValues}{Result} -and \axiomFunFrom{showArrayValues}{Result}. - -\xtc{ -There is also a {\bf .input} file for each NAG routine, containing -Axiom interpreter commands to set up and run the standard NAG -example for that routine. -}{ -\spadpaste{)read c05adf.input} -} - -\endscroll +\index{pages!UXANNAIntro!annaex.ht} +\index{annaex.ht!pages!UXANNAIntro} +\index{UXANNAIntro!annaex.ht!pages} +<>= +\begin{page}{UXANNAIntro}{Introduction to the Axiom/NAG Expert System} +\begin{scroll} +\centerline{\tt\inputbitmap{\htbmdir{}/anna_logo.xbm}\rm} +\vspace{-30}\horizontalline +Deciding amongst, and then implementing, several possible approaches to +solving a numerical problem can be daunting for a novice user, or tedious for +an expert. Different attributes of the problem need to be +identified and their possible interactions weighed up before a final decision +about which method to use can be made. +\blankline +The implementation is then largely an +automatic, if laborious, process of writing, compiling and linking usually +Fortran code. The aim is to build an expert system which will use computer +algebra to analyse such features of a problem, inference mechanisms and a +knowledge base to choose a numerical method appropriate to the solution of a +given problem. +\blankline +Any interactive system is constrained by the need to provide a reasonable +response time for the user. Given the complexity of some of the analysis our +system will need to do, it is clear that we should only aim to select a good +method, rather than try to identify the best one available. The overall goal +is to provide a ``black-box'' interface to numerical software which allows +non-experts access to its full potential. It will also provide explanation +mechanisms commensurate with its role as a teaching aid. +\blankline +Given, say, an integration to perform (which may or may not be able to be +handled symbolically), the system should choose and apply an appropriate +method, thus mirroring as closely as possible the way that an experienced +numerical analyst would think so, for example, given an integration to +perform:\newline +{\it \centerline{\inputbitmap{\htbmdir{}/int1.xbm}}} +\newline +the experienced analyst would see that the integral is semi-infinite and +transform it by splitting the range and transforming the integral over {\it +[1,\inputbitmap{\htbmdir{}/infty.xbm}]} into an integral over +{\it [0,1] } using the transformation {\it x -> 1/t}. +A different numerical routine might be used over each +sub-region and the results added to give the final answer. +\blankline +It then requires +the translation of the problem into Fortran code which may be extensive. +Even with this simple example, the process is quite involved. +\blankline +\end{scroll} \autobuttons +\downlink{ Decision Agents }{UXANNADec} +\downlink{ Inference Mechanisms }{UXANNAInfer} +\downlink{ Method Domains }{UXANNAMeth} +\downlink{ Measure Functions }{UXANNAMeas} \end{page} @ -<>= -\newcommand{\aspSectionTitle}{Providing values for Argument Subprograms} -\newcommand{\aspSectionNumber}{15.3.3.} - -@ -\subsection{15.3.3. Providing values for Argument Subprograms} -\label{aspSectionPage} -\begin{itemize} -\item generalFortranPage \ref{generalFortranPage} on -page~\pageref{generalFortranPage} -\end{itemize} -\index{pages!aspSectionPage!ug15.ht} -\index{ug15.ht!pages!aspSectionPage} -\index{aspSectionPage!ug15.ht!pages} -<>= -\begin{page}{aspSectionPage}{15.3.3. Providing values for Argument Subprograms} -\beginscroll - -There are a number of ways in which users can provide values for argument -subprograms (ASPs). At the top level the user will see that NAG routines -require -an object from the \axiomType{Union} of a \axiomType{Filename} and an ASP. +\subsection{Example using the Axiom/NAG Expert System} +\label{UXANNAEx} +See UXANNAEx2 \ref{UXANNAEx2} on page~\pageref{UXANNAEx2} +\index{pages!UXANNAEx!annaex.ht} +\index{annaex.ht!pages!UXANNAEx} +\index{UXANNAEx!annaex.ht!pages} +<>= +\begin{page}{UXANNAEx}{Example using the Axiom/NAG Expert System} +\begin{scroll} \xtc{ -For example \axiomFun{c05adf} requires an object of type \texht{\linebreak}{} -\axiomType{Union}(fn: \axiomType{FileName},fp: \axiomType{Asp1 F}) -}{ -\spadpaste{)display operation c05adf} -} - -The user thus has a choice of providing the name of a file containing -Fortran source code, or of somehow generating the ASP within Axiom. -If a filename is specified, it is searched for in the {\it local} -machine, i.e., the machine that Axiom is running on. - -\subsubsection{Providing ASPs via \axiomType{FortranExpression}} - -The \axiomType{FortranExpression} domain is used to represent expressions -which can be translated into Fortran under certain circumstances. It is -very similar to \axiomType{Expression} except that only operators which exist -in Fortran can be used, and only certain variables can occur. -For -example the instantiation \axiomType{FortranExpression([X],[M],MachineFloat)} -is the domain of expressions containing the scalar \axiom{X} and the array -\axiom{M}. +{\bf Example 1}: The integral +{\centerline{\inputbitmap{\htbmdir{}/int1.xbm}}} +\newline +is performed as follows: +\blankline +}{} \xtc{ -This allows us to create expressions like: }{ -\spadpaste{f : FortranExpression([X],[M],MachineFloat) := sin(X)+M[3,1]} +\spadpaste{ans := integrate((exp(-X^3)+exp(-3*X^2))/sqrt(X),0.0..\%plusInfinity)\bound{ans} } } +\blankline \xtc{ -but not +It creates a composite structure for which the field containing the result can be +expanded as required.\blankline }{ -\spadpaste{f : FortranExpression([X],[M],MachineFloat) := sin(M)+Y} +\spadpaste{ans . 'result\free{ans}} } - -Those ASPs which represent expressions usually export a \axiomFun{coerce} from -an appropriate instantiation of \axiomType{FortranExpression} (or perhaps -\axiomType{Vector FortranExpression} etc.). For convenience there are also -retractions from appropriate instantiations of \axiomType{Expression}, -\axiomType{Polynomial} and \axiomType{Fraction Polynomial}. - -\subsubsection{Providing ASPs via \axiomType{FortranCode}} - -\texht{\exptypeindex{FortranCode}}{} \axiomType{FortranCode} allows us -to build arbitrarily complex ASPs via a kind of pseudo-code. It is -described fully in -\downlink{``\generalFortranTitle''}{generalFortranPage} in Section -\generalFortranNumber\ignore{generalFortran}. - -Every ASP exports two \axiomFun{coerce} functions: one from -\axiomType{FortranCode} and one from \axiomType{List FortranCode}. -There is also a \axiomFun{coerce} from \texht{\linebreak}{} -\axiomType{Record( localSymbols: SymbolTable, code: List FortranCode)} -which is used for passing extra symbol information about the ASP. - +\blankline \xtc{ -So for example, to integrate the function abs(x) we could use the built-in -\axiomFun{abs} function. But suppose we want to get back to basics and define -it directly, then we could do the following: }{ -\spadpaste{d01ajf(-1.0, 1.0, 0.0, 1.0e-5, 800, 200, -1, cond(LT(X,0), assign(F,-X), assign(F,X))) result } +\spadpaste{ans . 'abserr\free{ans}} } -The \axiomFunFrom{cond}{FortranCode} operation creates a conditional clause -and the \axiomFunFrom{assign}{FortranCode} an assignment statement. - -\subsubsection{Providing ASPs via \axiomType{FileName}} - -Suppose we have created the file ``asp.f'' as follows: -\begin{verbatim} - DOUBLE PRECISION FUNCTION F(X) - DOUBLE PRECISION X - F=4.0D0/(X*X+1.0D0) - RETURN - END -\end{verbatim} -and wish to pass it to the NAG -routine \axiomFun{d01ajf} which performs one-dimensional quadrature. -We can do this as follows: -\begin{verbatim} -d01ajf(0.0 ,1.0, 0.0, 1.0e-5, 800, 200, -1, "asp.f") -\end{verbatim} - -\endscroll +\blankline +This system has performed the analysis described above, done the necessary +problem transformation, written any necessary Fortran, called two different +numerical routines, and amalgamated their +results. This whole process was transparent to the user. +\end{scroll} \autobuttons +\downlink{Example 2}{UXANNAEx2} +%\downlink{Decision Agents}{UXANNADec} \end{page} @ -<>= -\newcommand{\generalFortranTitle}{General Fortran-generation utilities in Axiom} -\newcommand{\generalFortranNumber}{15.3.4.} - -@ -\subsection{15.3.4. General Fortran-generation utilities in Axiom} -\label{generalFortranPage} -\index{pages!generalFortranPage!ug15.ht} -\index{ug15.ht!pages!generalFortranPage} -\index{generalFortranPage!ug15.ht!pages} -<>= -\begin{page}{generalFortranPage} -{15.3.4. General Fortran-generation utilities in Axiom} -\beginscroll - -This section describes more advanced facilities which are available to users -who wish to generate Fortran code from within Axiom. There are -facilities to manipulate templates, store type information, and generate -code fragments or complete programs. - -\subsubsection{Template Manipulation} - -A template is a skeletal program which is ``fleshed out'' with data when -it is processed. It is a sequence of {\em active} and {\em passive} parts: -active parts are sequences of Axiom commands which are processed as if they -had been typed into the interpreter; passive parts are simply echoed -verbatim on the Fortran output stream. - -Suppose, for example, that we have the following template, stored in -the file ``test.tem'': -\begin{verbatim} --- A simple template -beginVerbatim - DOUBLE PRECISION FUNCTION F(X) - DOUBLE PRECISION X -endVerbatim -outputAsFortran("F",f) -beginVerbatim - RETURN - END -endVerbatim -\end{verbatim} -The passive parts lie between the two -tokens {\tt beginVerbatim} and \texht{\linebreak}{} {\tt endVerbatim}. There -are two active statements: one which is simply an Axiom ( -\texht{\verb+--+}{\-\-}) -comment, and one which produces an assignment to the current value -of {\tt f}. We could use it as follows: -\begin{verbatim} -(4) ->f := 4.0/(1+X**2) - - 4 - (4) ------ - 2 - X + 1 - -(5) ->processTemplate "test.tem" - DOUBLE PRECISION FUNCTION F(X) - DOUBLE PRECISION X - F=4.0D0/(X*X+1.0D0) - RETURN - END - - (5) "CONSOLE" -\end{verbatim} - -(A more reliable method of specifying the filename will be introduced -below.) Note that the Fortran assignment {\tt F=4.0D0/(X*X+1.0D0)} -automatically converted 4.0 and 1 into DOUBLE PRECISION numbers; in -general, the Axiom Fortran generation facility will convert -anything which should be a floating point object into either -a Fortran REAL or DOUBLE PRECISION object. -\xtc{ -Which alternative is used is determined by the command -}{ -\spadpaste{)set fortran precision} -} - -It is sometimes useful to end a template before the file itself ends (e.g. to -allow the template to be tested incrementally or so that a piece of text -describing how the template works can be included). It is of course possible -to ``comment-out'' the remainder of the file. Alternatively, the single token -{\tt endInput} as part of an active portion of the template will cause -processing to be ended prematurely at that point. - -The \axiomFun{processTemplate} command comes in two flavours. In the first case, -illustrated above, it takes one argument of domain \axiomType{FileName}, -the name of the template to be processed, and writes its output on the -current Fortran output stream. In general, a filename can be generated -from {\em directory}, {\em name} and {\em extension} components, using -the operation \axiomFun{filename}, as in -\begin{verbatim} -processTemplate filename("","test","tem") -\end{verbatim} -There is an alternative version of \axiomFun{processTemplate}, which -takes two arguments (both of domain \axiomType{FileName}). In this case the -first argument is the name of the template to be processed, and the -second is the file in which to write the results. Both versions return -the location of the generated Fortran code as their result -({\tt "CONSOLE"} in the above example). - -It is sometimes useful to be able to mix active and passive parts of a -line or statement. For example you might want to generate a Fortran -Comment describing your data set. For this kind of application we -provide three functions as follows: -\texht -{ -\begin{tabular}{p{1.8in}p{2.6in}} -\axiomFun{fortranLiteral} & writes a string on the Fortran output stream \\ - & \\ -\axiomFun{fortranCarriageReturn} & writes a carriage return on the Fortran output stream \\ -& \\ -\axiomFun{fortranLiteralLine} & writes a string followed by a return -on the Fortran output stream \\ -\end{tabular} -} -{ -\newline -\axiomFun{fortranLiteral}\tab{25}writes a string on the Fortran output stream\newline -\axiomFun{fortranCarriageReturn}\tab{25}writes a carriage return on the Fortran output stream\newline -\axiomFun{fortranLiteralLine}\tab{25}writes a string followed by a return on the Fortran output stream\newline -} -\xtc{ -So we could create our comment as follows: -}{ -\spadpaste{m := matrix [[1,2,3],[4,5,6]]\bound{m}} -} -\xtc{ -}{ -\spadpaste{fortranLiteralLine concat ["C\ \ \ \ \ \ The\ Matrix\ has\ ", nrows(m)::String, "\ rows\ and\ ", ncols(m)::String, "\ columns"]\free{m}} -} -\xtc{ -or, alternatively: -}{ -\spadpaste{fortranLiteral "C\ \ \ \ \ \ The\ Matrix\ has\ "} -} -\xtc{ -}{ -\spadpaste{fortranLiteral(nrows(m)::String)} -} -\xtc{ -}{ -\spadpaste{fortranLiteral "\ rows\ and\ "} -} -\xtc{ -}{ -\spadpaste{fortranLiteral(ncols(m)::String)\free{m}} -} -\xtc{ -}{ -\spadpaste{fortranLiteral "\ columns"} -} -\xtc{ -}{ -\spadpaste{fortranCarriageReturn()} -} - -We should stress that these functions, together with the \axiomFun{outputAsFortran} -function are the {\em only} sure ways -of getting output to appear on the Fortran output stream. Attempts to use -Axiom commands such as \axiomFun{output} or \axiomFunX{writeline} may appear to give -the required result when displayed on the console, but will give the wrong -result when Fortran and algebraic output are sent to differing locations. On -the other hand, these functions can be used to send helpful messages to the -user, without interfering with the generated Fortran. - -\subsubsection{Manipulating the Fortran Output Stream} -\texht{\exptypeindex{FortranOutputStackPackage}}{} - -Sometimes it is useful to manipulate the Fortran output stream in a program, -possibly without being aware of its current value. The main use of this is -for gathering type declarations (see ``Fortran Types'' below) but it can be useful -in other contexts as well. Thus we provide a set of commands to manipulate -a stack of (open) output streams. Only one stream can be written to at -any given time. The stack is never empty---its initial value is the -console or the current value of the Fortran output stream, and can be -determined using -\xtc{ -}{ -\spadpaste{topFortranOutputStack()} -} -(see below). -The commands available to manipulate the stack are: -\texht{ -\begin{tabular}{ll} -\axiomFun{clearFortranOutputStack} & resets the stack to the console \\ - & \\ -\axiomFun{pushFortranOutputStack} & pushes a \axiomType{FileName} onto the stack \\ - & \\ -\axiomFun{popFortranOutputStack} & pops the stack \\ - & \\ -\axiomFun{showFortranOutputStack} & returns the current stack \\ - & \\ -\axiomFun{topFortranOutputStack} & returns the top element of the stack \\ -\end{tabular} -} -{ -\newline -\axiomFun{clearFortranOutputStack}\tab{25}resets the stack\newline -\axiomFun{pushFortranOutputStack}\tab{25}pushes a \axiomType{FileName} onto the stack\newline -\axiomFun{popFortranOutputStack}\tab{25}pops the stack\newline -\axiomFun{showFortranOutputStack}\tab{25}returns the current stack\newline -\axiomFun{topFortranOutputStack}\tab{25}returns the top element of the stack\newline -} -These commands are all part of \axiomType{FortranOutputStackPackage}. - -\subsubsection{Fortran Types} - -When generating code it is important to keep track of the Fortran types of -the objects which we are generating. This is useful for a number of reasons, -not least to ensure that we are actually generating legal Fortran code. The -current type system is built up in several layers, and we shall describe each -in turn. - -\subsubsection{FortranScalarType} -\texht{\exptypeindex{FortranScalarType}}{} - -This domain represents the simple Fortran datatypes: REAL, DOUBLE PRECISION, -COMPLEX, LOGICAL, INTEGER, and CHARACTER. -It is possible to \axiomFun{coerce} a \axiomType{String} or \axiomType{Symbol} -into the domain, test whether two objects are equal, and also apply -the predicate functions \axiomFunFrom{real?}{FortranScalarType} etc. - -\subsubsection{FortranType} -\texht{\exptypeindex{FortranType}}{} - -This domain represents ``full'' types: i.e., datatype plus array dimensions -(where appropriate) plus whether or not the parameter is an external -subprogram. It is possible to \axiomFun{coerce} an object of -\axiomType{FortranScalarType} into the domain or \axiomFun{construct} one -from an element of \axiomType{FortranScalarType}, a list of -\axiomType{Polynomial Integer}s (which can of course be simple integers or -symbols) representing its dimensions, and -a \axiomType{Boolean} declaring whether it is external or not. The list -of dimensions must be empty if the \axiomType{Boolean} is {\tt true}. -The functions \axiomFun{scalarTypeOf}, \axiomFun{dimensionsOf} and -\axiomFun{external?} return the appropriate -parts, and it is possible to get the various basic Fortran Types via -functions like \axiomFun{fortranReal}. -\xtc{ -For example: -}{ -\spadpaste{type:=construct(real,[i,10],false)$FortranType} -} -\xtc{ -or -}{ -\spadpaste{type:=[real,[i,10],false]$FortranType\bound{type}} -} -\xtc{ -}{ -\spadpaste{scalarTypeOf type\free{type}} -} -\xtc{ -}{ -\spadpaste{dimensionsOf type\free{type}} -} -\xtc{ -}{ -\spadpaste{external? type\free{type}} -} -\xtc{ -}{ -\spadpaste{fortranLogical()} -} +\subsection{Example using the Axiom/NAG Expert System} +\label{UXANNAEx2} +See UXANNAEx3 \ref{UXANNAEx3} on page~\pageref{UXANNAEx3} +\index{pages!UXANNAEx2!annaex.ht} +\index{annaex.ht!pages!UXANNAEx2} +\index{UXANNAEx2!annaex.ht!pages} +<>= +\begin{page}{UXANNAEx2}{Example using the Axiom/NAG Expert System} +\begin{scroll} \xtc{ -}{ -\spadpaste{construct(integer,[],true)$FortranType} -} - -\subsubsection{SymbolTable} -\texht{\exptypeindex{SymbolTable}}{} - -This domain creates and manipulates a symbol table for generated Fortran code. -This is used by \axiomType{FortranProgram} to represent the types of objects in -a subprogram. The commands available are: -\texht{ -\begin{tabular}{ll} -\axiomFun{empty} & creates a new \axiomType{SymbolTable} \\ - & \\ -\axiomFunX{declare} & creates a new entry in a table \\ - & \\ -\axiomFun{fortranTypeOf} & returns the type of an object in a table \\ - & \\ -\axiomFun{parametersOf} & returns a list of all the symbols in the table \\ - & \\ -\axiomFun{typeList} & returns a list of all objects of a given type \\ - & \\ -\axiomFun{typeLists} & returns a list of lists of all objects sorted by type \\ - & \\ -\axiomFun{externalList} & returns a list of all {\tt EXTERNAL} objects \\ - & \\ -\axiomFun{printTypes} & produces Fortran type declarations from a table\\ -\end{tabular} -} -{ +{\bf Example 2}: The ODE +{\centerline{\inputbitmap{\htbmdir{}/ode3.xbm}\space{1}with +\space{1} +{\inputbitmap{\htbmdir{}/y3.xbm}}}} \newline -\axiomFun{empty}\tab{25}creates a new \axiomType{SymbolTable}\newline -\axiomFunX{declare}\tab{25}creates a new entry in a table \newline -\axiomFun{fortranTypeOf}\tab{25}returns the type of an object in a table \newline -\axiomFun{parametersOf}\tab{25}returns a list of all the symbols in the table \newline -\axiomFun{typeList}\tab{25}returns a list of all objects of a given type \newline -\axiomFun{typeLists}\tab{25}returns a list of lists of all objects sorted by type \newline -\axiomFun{externalList}\tab{25}returns a list of all {\tt EXTERNAL} objects \newline -\axiomFun{printTypes}\tab{25}produces Fortran type declarations from a table\newline -} -\xtc{ -}{ -\spadpaste{symbols := empty()$SymbolTable\bound{symbols}} -} -\xtc{ -}{ -\spadpaste{declare!(X,fortranReal(),symbols)\free{symbols}} -} -\xtc{ -}{ -\spadpaste{declare!(M,construct(real,[i,j],false)$FortranType,symbols)\free{symbols}} -} -\xtc{ -}{ -\spadpaste{declare!([i,j],fortranInteger(),symbols)\free{symbols}} -} -\xtc{ -}{ -\spadpaste{symbols\free{symbols}} -} +could be solved as follows: +\blankline +}{} \xtc{ }{ -\spadpaste{fortranTypeOf(i,symbols)\free{symbols}} +\spadpaste{ans2 := solve([Y[2],-1001*Y[2]-1000*Y[1]], 0.0, 10.0, +[1.0,-1.0], [2,4,6,8], 1.0e-4)\bound{ans2} } } +\blankline \xtc{ +It creates a composite structure for which the field containing the result can be +expanded as required.\blankline }{ -\spadpaste{typeList(real,symbols)\free{symbols}} +\spadpaste{ans2 . 'result\free{ans2}} } +\blankline \xtc{ }{ -\spadpaste{printTypes symbols\free{symbols}} +\spadpaste{ans2 . 'y\free{ans2}} } +\blankline +\end{scroll} +\autobuttons +\downlink{Example 3}{UXANNAEx3} +%\downlink{Decision Agents}{UXANNADec} +\end{page} -\subsubsection{TheSymbolTable} -\texht{\exptypeindex{TheSymbolTable}}{} - -This domain creates and manipulates one global symbol table to be used, for -example, during template processing. It is -also used when -linking to external Fortran routines. The -information stored for each subprogram (and the main program segment, where -relevant) is: -\indent{4} -\beginitems -\item[-] its name; -\item[-] its return type; -\item[-] its argument list; -\item[-] and its argument types. -\enditems -\indent{0} -Initially, any information provided is deemed to be for the main program -segment. -\xtc{ -Issuing the following command indicates that from now on all information -refers to the subprogram \axiom{F}. -}{ -\spadpaste{newSubProgram F} -} -\xtc{ -It is possible to return to processing the main program segment by issuing -the command: -}{ -\spadpaste{endSubProgram()} -} -The following commands exist: -\texht{ -\begin{tabular}{p{1.6in}p{2.8in}} -\axiomFunX{returnType} & declares the return type of the current subprogram \\ - & \\ -\axiomFun{returnTypeOf} & returns the return type of a subprogram \\ - & \\ -\axiomFunX{argumentList} & declares the argument list of the current subprogram \\ - & \\ -\axiomFun{argumentListOf} & returns the argument list of a subprogram \\ - & \\ -\axiomFunX{declare} & provides type declarations for parameters of the current subprogram \\ - & \\ -\axiomFun{symbolTableOf} & returns the symbol table of a subprogram \\ - & \\ -\axiomFun{printHeader} & produces the Fortran header for the current subprogram \\ -\end{tabular} -} -{ -\newline -\axiomFunX{returnType}\tab{25}declares the return type of the current subprogram \newline -\axiomFun{returnTypeOf}\tab{25}returns the return type of a subprogram \newline -\axiomFunX{argumentList}\tab{25}declares the argument list of the current subprogram \newline -\axiomFun{argumentListOf}\tab{25}returns the argument list of a subprogram \newline -\axiomFunX{declare}\tab{25}provides type declarations for parameters of the current subprogram \newline -\axiomFun{symbolTableOf}\tab{25}returns the symbol table of a subprogram \newline -\axiomFun{printHeader}\tab{25}produce the Fortran header for the current subprogram \newline -} -In addition there are versions of these commands which are parameterised by -the name of a subprogram, and others parameterised by both the name of a -subprogram and by an instance of \axiomType{TheSymbolTable}. -\xtc{ -}{ -\spadpaste{newSubProgram F \bound{forPleasure}} -} -\xtc{ -}{ -\spadpaste{argumentList!(F,[X])\free{forPleasure}} -} -\xtc{ -}{ -\spadpaste{returnType!(F,real)\free{forPleasure}} -} -\xtc{ -}{ -\spadpaste{declare!(X,fortranReal(),F)\free{forPleasure}} -} +@ +\subsection{Example using the Axiom/NAG Expert System} +\label{UXANNAEx3} +See UXANNADec \ref{UXANNADec} on page~\pageref{UXANNADec} +\index{pages!UXANNAEx3!annaex.ht} +\index{annaex.ht!pages!UXANNAEx3} +\index{UXANNAEx3!annaex.ht!pages} +<>= +\begin{page}{UXANNAEx3}{Example using the Axiom/NAG Expert System} +\begin{scroll} \xtc{ -}{ -\spadpaste{printHeader F\free{forPleasure}} -} - -\subsubsection{Advanced Fortran Code Generation} - -This section describes facilities for representing Fortran statements, and -building up complete subprograms from them. - -\subsubsection{Switch} -\texht{\exptypeindex{Switch}}{} - -This domain is used to represent statements like {\tt x < y}. Although -these can be represented directly in Axiom, it is a little cumbersome, -since Axiom evaluates the last statement, for example, to \axiom{true} -(since \axiom{x} is lexicographically less than \axiom{y}). - -Instead we have a set of operations, such as \axiomFun{LT} to represent \axiom{<}, -to let us build such statements. The available constructors are: -\texht{ -\centerline{{\begin{tabular}{ll}}} -\centerline{{\axiomFun{LT} & $<$ }} -\centerline{{\axiomFun{GT} & $>$ }} -\centerline{{\axiomFun{LE} & $\leq$ }} -\centerline{{\axiomFun{GE} & $\geq$ }} -\centerline{{\axiomFun{EQ} & $=$ }} -\centerline{{\axiomFun{AND} & $and$}} -\centerline{{\axiomFun{OR} & $or$ }} -\centerline{{\axiomFun{NOT} & $not$ }} -\centerline{{\end{tabular}}} -} -{ +{\bf Example 3}: The function +{\centerline{\inputbitmap{\htbmdir{}/opt2.xbm}}} +with simple bounds +{\centerline{\inputbitmap{\htbmdir{}/opt2c.xbm}}} \newline -\axiomFun{LT}\tab{25}\texht{$<$}{<} \newline -\axiomFun{GT}\tab{25}\texht{$>$}{>} \newline -\axiomFun{LE}\tab{25}\texht{$\leq$}{<=} \newline -\axiomFun{GE}\tab{25}\texht{$\geq$}{>=} \newline -\axiomFun{EQ}\tab{25}\texht{$=$}{=} \newline -\axiomFun{AND}\tab{25}\texht{$and$}{{\tt and}}\newline -\axiomFun{OR}\tab{25}\texht{$or$}{{\tt or}} \newline -\axiomFun{NOT}\tab{25}\texht{$not$}{{\tt not}} \newline -} -\xtc{ -So for example: -}{ -\spadpaste{LT(x,y)} -} - -\subsubsection{FortranCode} - -This domain represents code segments or operations: currently assignments, -conditionals, blocks, comments, gotos, continues, various kinds of loops, -and return statements. -\xtc{ -For example we can create quite a complicated conditional statement using -assignments, and then turn it into Fortran code: -}{ -\spadpaste{c := cond(LT(X,Y),assign(F,X),cond(GT(Y,Z),assign(F,Y),assign(F,Z)))\bound{c}} -} -\xtc{ -}{ -\spadpaste{printCode c\free{c}} -} - -The Fortran code is printed -on the current Fortran output stream. - -\subsubsection{FortranProgram} -\texht{\exptypeindex{FortranProgram}}{} - -This domain is used to construct complete Fortran subprograms out of -elements of \axiomType{FortranCode}. It is parameterised by the name of the -target subprogram (a \axiomType{Symbol}), its return type (from -\axiomType{Union}(\axiomType{FortranScalarType},``void'')), -its arguments (from \axiomType{List Symbol}), and -its symbol table (from \axiomType{SymbolTable}). One can -\axiomFun{coerce} elements of either \axiomType{FortranCode} -or \axiomType{Expression} into it. - -\xtc{ -First of all we create a symbol table: -}{ -\spadpaste{symbols := empty()$SymbolTable\bound{symbols}} -} -\xtc{ -Now put some type declarations into it: -}{ -\spadpaste{declare!([X,Y],fortranReal(),symbols)\free{symbols}} -} -\xtc{ -Then (for convenience) -we set up the particular instantiation of \axiomType{FortranProgram} -}{ -\spadpaste{FP := FortranProgram(F,real,[X,Y],symbols)\free{symbols}\bound{FP}} -} +could be minimized as follows: +\blankline +}{} \xtc{ -Create an object of type \axiomType{Expression(Integer)}: }{ -\spadpaste{asp := X*sin(Y)\bound{asp}} -} -\xtc{ -Now \axiomFun{coerce} it into \axiomType{FP}, and print its Fortran form: -}{ -\spadpaste{outputAsFortran(asp::FP)\free{FP asp}} +\spadpaste{ans3 := optimize((X[1]+10*X[2])**2 + 5*(X[3]-X[4])**2 + +(X[2]-2*X[3])**4 + 10*(X[1]-X[4])**4, [3,-1,0,1], [1,-2,\%minusInfinity,1], +[3,0,\%plusInfinity,3])\bound{ans3} } } - -We can generate a \axiomType{FortranProgram} using \axiom{FortranCode}. For -example: +\blankline \xtc{ -Augment our symbol table: +It creates a composite structure for which the field containing the minimum can be +expanded as required.\blankline }{ -\spadpaste{declare!(Z,fortranReal(),symbols)\free{symbols}\bound{Z}} +\spadpaste{ans3 . objf\free{ans3}} } +\blankline \xtc{ -and transform the conditional expression we prepared earlier: }{ -\spadpaste{outputAsFortran([c,returns()]::FP) \free{FP c Z}} +\spadpaste{ans3 . x\free{ans3}} } - -%------------------------------------------------------------------------ -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\nagTechnicalTitle}{Some technical information} -\newcommand{\nagTechnicalNumber}{15.3.5.} - -@ -\subsection{15.3.5. Some technical information} -\label{nagTechnicalPage} -\begin{itemize} -\item nugNagdPage \ref{nugNagdPage} on -page~\pageref{nugNagdPage} -\end{itemize} -\index{pages!nagTechnicalPage!ug15.ht} -\index{ug15.ht!pages!nagTechnicalPage} -\index{nagTechnicalPage!ug15.ht!pages} -<>= -\begin{page}{nagTechnicalPage}{15.3.5. Some technical information} -\beginscroll -%------------------------------------------------------------------------ - -The model adopted for the link is a server-client configuration --- Axiom acting as a client via a local agent -(a process called {\tt nagman}). The server side is implemented -by the {\tt nagd} daemon process which may run on a different host. -The {\tt nagman} local agent is started by default whenever you -start Axiom. The {\tt nagd} server must be started separately. -Instructions for installing and running the server are supplied -in \texht{\downlink{``\nugNagdTitle''}{nugNagdPage} in -Section \nugNagdNumber\ignore{nugNagd}}{printed form}. -Use the \spadcmd{)set naglink host} system command -to point your local agent to a server in your network. - -On the Axiom side, one sees a set of {\em packages} -(ask \Browse{} for {\em Nag*}) for each chapter, each exporting -operations with the same name as a routine in the \naglib{}. -The arguments and return value of each operation belong to -standard Axiom types. - -The {\tt man} pages for the \naglib{} are accessible via the description -of each operation in \Browse{} (among other places). - -In the implementation of each operation, the set of inputs is passed -to the local agent {\tt nagman}, which makes a -Remote Procedure Call (RPC) to the -remote {\tt nagd} daemon process. The local agent receives the RPC -results and forwards them to the Axiom workspace where they -are interpreted appropriately. - -How are Fortran subroutines turned into RPC calls? For each Fortran -routine in the \naglib{}, a C main() routine is supplied. Its job is -to assemble the RPC input (numeric) data stream into the appropriate -Fortran data structures for the routine, call the Fortran routine from -C and serialize the results into an RPC output data stream. - -Many \naglib{} routines accept ASPs (Argument Subprogram Parameters). -These specify user-supplied Fortran routines (e.g. a routine to -supply values of a function is required for numerical integration). -How are they handled? There are new facilities in Axiom to help. -A set of Axiom domains has been provided to turn values in standard - Axiom types (such as Expression Integer) into the appropriate -piece of Fortran for each case (a filename pointing to Fortran source -for the ASP can always be supplied instead). -Ask \Browse{} for {\em Asp*} to see these domains. The Fortran fragments -are included in the outgoing RPC stream, but {\tt nagd} intercepts them, -compiles them, and links them with the main() C program before executing -the resulting program on the numeric part of the RPC stream. - - -%------------------------------------------------------------------------ -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugWhatsNewLanguageTitle}{Interactive Front-end and Language} -\newcommand{\ugWhatsNewLanguageNumber}{15.4.} - -@ -\subsection{15.4. Interactive Front-end and Language} -\label{ugWhatsNewLanguagePage} -\begin{itemize} -\item ugLangLoopsBreakPage \ref{ugLangLoopsBreakPage} on -page~\pageref{ugLangLoopsBreakPage} -\item ugLangBlocksPage \ref{ugLangBlocksPage} on -page~\pageref{ugLangBlocksPage} -\end{itemize} -\index{pages!ugWhatsNewLanguagePage!ug15.ht} -\index{ug15.ht!pages!ugWhatsNewLanguagePage} -\index{ugWhatsNewLanguagePage!ug15.ht!pages} -<>= -\begin{page}{ugWhatsNewLanguagePage}{15.4. Interactive Front-end and Language} -\beginscroll -%------------------------------------------------------------------------ - -The \axiom{leave} keyword has been replaced by the \axiom{break} -keyword for compatibility with the new Axiom extension language. See -section \downlink{``\ugLangLoopsBreakTitle''}{ugLangLoopsBreakPage} in -Section \ugLangLoopsBreakNumber\ignore{ugLangLoopsBreak} for more -information. - -Curly braces are no longer used to create sets. Instead, use -\axiomFun{set} followed by a bracketed expression. For example, +\blankline \xtc{ }{ -\spadpaste{set [1,2,3,4]} -} - -Curly braces are now used to enclose a block (see section -\downlink{``\ugLangBlocksTitle''}{ugLangBlocksPage} in Section -\ugLangBlocksNumber\ignore{ugLangBlocks} for more information). For -compatibility, a block can still be enclosed by parentheses as well. - -``Free functions'' created by the \axiomxl{} compiler can now be -loaded and used within the Axiom interpreter. A {\it free -function} is a library function that is implemented outside a -domain or category constructor. - -New coercions to and from type \axiomType{Expression} have been -added. For example, it is now possible to map a polynomial -represented as an expression to an appropriate polynomial type. - -Various messages have been added or rewritten for clarity. - -%------------------------------------------------------------------------ -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugWhatsNewLibraryTitle}{Library} -\newcommand{\ugWhatsNewLibraryNumber}{15.5.} - -@ -\subsection{15.5. Library} -\label{ugWhatsNewLibraryPage} -\begin{itemize} -\item FullPartialFractionExpansionXmpPage -\ref{FullPartialFractionExpansionXmpPage} on -page~\pageref{FullPartialFractionExpansionXmpPage} -\end{itemize} -\index{pages!ugWhatsNewLibraryPage!ug15.ht} -\index{ug15.ht!pages!ugWhatsNewLibraryPage} -\index{ugWhatsNewLibraryPage!ug15.ht!pages} -<>= -\begin{page}{ugWhatsNewLibraryPage}{15.5. Library} -\beginscroll -%------------------------------------------------------------------------ - -The \axiomType{FullPartialFractionExpansion} -domain has been added. This domain computes factor-free full -partial fraction expansions. -See section -\downlink{`FullPartialFractionExpansion'} -{FullPartialFractionExpansionXmpPage}\ignore{FullPartialFractionExpansion} -for examples. - -We have implemented the Bertrand/Cantor algorithm for integrals of -hyperelliptic functions. This brings a major speedup for some -classes of algebraic integrals. - -We have implemented a new (direct) algorithm for integrating trigonometric -functions. This brings a speedup and an improvement in the answer -quality. - -The {\sf SmallFloat} domain has been renamed -\axiomType{DoubleFloat} and {\sf SmallInteger} has been renamed -\axiomType{SingleInteger}. The new abbreviations as -\axiomType{DFLOAT} and \axiomType{SINT}, respectively. -We have defined the macro {\sf SF}, the old abbreviation for {\sf -SmallFloat}, to expand to \axiomType{DoubleFloat} and modified -the documentation and input file examples to use the new names -and abbreviations. You should do the same in any private Axiom -files you have. - -There are many new categories, domains and packages related to the -NAG Library Link facility. See the file - -\unixcommand{\env{AXIOM}/../../src/algebra/exposed.lsp}{xterm\ -e\ vi\ +"/naglink"\ \env{AXIOM}/../../src/algebra/exposed.lsp} - -for a list of constructors in the {\bf naglink} Axiom exposure group. - -We have made improvements to the differential equation solvers -and there is a new facility for solving systems of first-order -linear differential equations. -In particular, an important fix was made to the solver for -inhomogeneous linear ordinary differential equations that -corrected the calculation of particular solutions. -We also made improvements to the polynomial -and transcendental equation solvers including the -ability to solve some classes of systems of transcendental -equations. - -The efficiency of power series have been improved and left and right -expansions of \spad{tan(f(x))} at \spad{x =} a pole of \spad{f(x)} -can now be computed. -A number of power series bugs were fixed and the \axiomType{GeneralUnivariatePowerSeries} -domain was added. -The power series variable can appear in the coefficients and when this -happens, you cannot differentiate or integrate the series. Differentiation -and integration with respect to other variables is supported. - -A domain was added for representing asymptotic expansions of a -function at an exponential singularity. - -For limits, the main new feature is the exponential expansion domain used -to treat certain exponential singularities. Previously, such singularities -were treated in an {\it ad hoc} way and only a few cases were covered. Now -Axiom can do things like - -\begin{verbatim} -limit( (x+1)**(x+1)/x**x - x**x/(x-1)**(x-1), x = %plusInfinity) -\end{verbatim} - -in a systematic way. It only does one level of nesting, though. In other -words, we can handle \spad{exp(} some function with a pole \spad{)}, but not -\texht{\linebreak}{} \spad{exp(exp(} some function with a pole \spad{)).} - -The computation of integral bases has been improved through careful -use of Hermite row reduction. A P-adic algorithm -for function fields of algebraic curves in finite characteristic has also -been developed. - -Miscellaneous: -There is improved conversion of definite and indefinite integrals to -\axiomType{InputForm}; -binomial coefficients are displayed in a new way; -some new simplifications of radicals have been implemented; -the operation \spadfun{complexForm} for converting to rectangular coordinates -has been added; -symmetric product operations have been added to \axiomType{LinearOrdinaryDifferentialOperator}. - -%------------------------------------------------------------------------ -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugWhatsNewHyperDocTitle}{\HyperName} -\newcommand{\ugWhatsNewHyperDocNumber}{15.6.} - -@ -\subsection{15.6. \HyperName} -\label{ugWhatsNewHyperDocPage} -\begin{itemize} -\item ugHyperKeysPage \ref{ugHyperKeysPage} on -page~\pageref{ugHyperKeysPage} -\end{itemize} -\index{pages!ugWhatsNewHyperDocPage!ug15.ht} -\index{ug15.ht!pages!ugWhatsNewHyperDocPage} -\index{ugWhatsNewHyperDocPage!ug15.ht!pages} -<>= -\begin{page}{ugWhatsNewHyperDocPage}{15.6. \HyperName} -\beginscroll -%------------------------------------------------------------------------ - -The buttons on the titlebar and scrollbar have been replaced -with ones which have a 3D effect. You can change the foreground and -background colors of these ``controls'' by including and modifying -the following lines in your {\bf .Xdefaults} file. -\begin{verbatim} -Axiom.hyperdoc.ControlBackground: White -Axiom.hyperdoc.ControlForeground: Black -\end{verbatim} - -For various reasons, \HyperName{} sometimes displays a -secondary window. You can control the size and placement of this -window by including and modifying -the following line in your {\bf .Xdefaults} file. -% -\begin{verbatim} -Axiom.hyperdoc.FormGeometry: =950x450+100+0 -\end{verbatim} -% -This setting is a standard X Window System geometry specification: -you are requesting a window 950 pixels wide by 450 deep and placed in -the upper left corner. - -Some key definitions have been changed to conform more closely with -the CUA guidelines. Press \texht{F9}{\downlink{F9}{ugHyperKeysPage}} -to see the current definitions. - -Input boxes (for example, in the Browser) now accept paste-ins from -the X Window System. Use the second button to paste in something -you have previously copied or cut. An example of how you can use this -is that you can paste the type from an Axiom computation -into the main Browser input box. - - -%------------------------------------------------------------------------ -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugWhatsNewDocumentationTitle}{Documentation} -\newcommand{\ugWhatsNewDocumentationNumber}{15.7.} - -@ -\subsection{15.7. Documentation} -\label{ugWhatsNewDocumentationPage} -\begin{itemize} -\item ugGraphTwoDbuildPage \ref{ugGraphTwoDbuildPage} on -page~\pageref{ugGraphTwoDbuildPage} -\item ugGraphTwoDappendPage \ref{ugGraphTwoDappendPage} on -page~\pageref{ugGraphTwoDappendPage} -\item ugIntroCallFunPage \ref{ugIntroCallFunPage} on -page~\pageref{ugIntroCallFunPage} -\item ugUserRulesPage \ref{ugUserRulesPage} on -page~\pageref{ugUserRulesPage} -\end{itemize} -\index{pages!ugWhatsNewDocumentationPage!ug15.ht} -\index{ug15.ht!pages!ugWhatsNewDocumentationPage} -\index{ugWhatsNewDocumentationPage!ug15.ht!pages} -<>= -\begin{page}{ugWhatsNewDocumentationPage}{15.7. Documentation} -\beginscroll -%------------------------------------------------------------------------ -\texht{ -We describe here a few additions to the on-line -version of the Axiom book which you can read with -HyperDoc. -}{} - -A section has been added to the graphics chapter, describing how to -build \twodim{} graphs from lists of points. An example is given -showing how to read the points from a file. See section -\downlink{``\ugGraphTwoDbuildTitle''}{ugGraphTwoDbuildPage} in Section -\ugGraphTwoDbuildNumber\ignore{ugGraphTwoDbuild} for details. - -A further section has been added to that same chapter, describing how -to add a \twodim{} graph to a viewport which already contains other -graphs. See section -\downlink{``\ugGraphTwoDappendTitle''}{ugGraphTwoDappendPage} in -Section \ugGraphTwoDappendNumber\ignore{ugGraphTwoDappend} for -details. - -Chapter 3 -and the on-line \HyperName{} help have been unified. - -An explanation of operation names ending in ``?'' and ``!'' has been -added to the first chapter. See the end of the section -\downlink{``\ugIntroCallFunTitle''}{ugIntroCallFunPage} in Section -\ugIntroCallFunNumber\ignore{ugIntroCallFun} for details. - -An expanded explanation of using predicates has been added to the -sixth chapter. See the example involving \userfun{evenRule} in the -middle of the section -\downlink{``\ugUserRulesTitle''}{ugUserRulesPage} in Section -\ugUserRulesNumber\ignore{ugUserRules} for details. - -Documentation for the \spadcmd{)compile}, \spadcmd{)library} and -\spadcmd{)load} commands has been greatly changed. This reflects -the ability of the \spadcmd{)compile} to now invoke the \axiomxl{} -compiler, the impending deletion of the \spadcmd{)load} command -and the new \spadcmd{)library} command. -The \spadcmd{)library} command replaces \spadcmd{)load} and is -compatible with the compiled output from both the old and new -compilers. - -\endscroll -\autobuttons -\end{page} - -@ -\section{ug16.ht} -<>= -\newcommand{\lanb}{{\tt [}} -\newcommand{\ranb}{{\tt ]}} -\newcommand{\vertline}{\texht{$|$}{{\tt |}}} -\newcommand{\ugSysCmdTitle}{Axiom System Commands} -\newcommand{\ugSysCmdNumber}{B.} - -@ -\subsection{B. Axiom System Commands} -\label{ugSysCmdPage} -\begin{itemize} -\item ugSysCmdOverviewPage \ref{ugSysCmdOverviewPage} on -page~\pageref{ugSysCmdOverviewPage} -\item ugSysCmdabbreviationPage \ref{ugSysCmdabbreviationPage} on -page~\pageref{ugSysCmdabbreviationPage} -\item ugSysCmdbootPage \ref{ugSysCmdbootPage} on -page~\pageref{ugSysCmdbootPage} -\item ugSysCmdcdPage \ref{ugSysCmdcdPage} on -page~\pageref{ugSysCmdcdPage} -\item ugSysCmdclosePage \ref{ugSysCmdclosePage} on -page~\pageref{ugSysCmdclosePage} -\item ugSysCmdclearPage \ref{ugSysCmdclearPage} on -page~\pageref{ugSysCmdclearPage} -\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on -page~\pageref{ugSysCmdcompilePage} -\item ugSysCmddisplayPage \ref{ugSysCmddisplayPage} on -page~\pageref{ugSysCmddisplayPage} -\item ugSysCmdeditPage \ref{ugSysCmdeditPage} on -page~\pageref{ugSysCmdeditPage} -\item ugSysCmdfinPage \ref{ugSysCmdfinPage} on -page~\pageref{ugSysCmdfinPage} -\item ugSysCmdframePage \ref{ugSysCmdframePage} on -page~\pageref{ugSysCmdframePage} -\item ugSysCmdhelpPage \ref{ugSysCmdhelpPage} on -page~\pageref{ugSysCmdhelpPage} -\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on -page~\pageref{ugSysCmdhistoryPage} -\item ugSysCmdlibraryPage \ref{ugSysCmdlibraryPage} on -page~\pageref{ugSysCmdlibraryPage} -\item ugSysCmdlispPage \ref{ugSysCmdlispPage} on -page~\pageref{ugSysCmdlispPage} -\item ugSysCmdloadPage \ref{ugSysCmdloadPage} on -page~\pageref{ugSysCmdloadPage} -\item ugSysCmdltracePage \ref{ugSysCmdltracePage} on -page~\pageref{ugSysCmdltracePage} -\item ugSysCmdpquitPage \ref{ugSysCmdpquitPage} on -page~\pageref{ugSysCmdpquitPage} -\item ugSysCmdquitPage \ref{ugSysCmdquitPage} on -page~\pageref{ugSysCmdquitPage} -\item ugSysCmdreadPage \ref{ugSysCmdreadPage} on -page~\pageref{ugSysCmdreadPage} -\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on -page~\pageref{ugSysCmdsetPage} -\item ugSysCmdshowPage \ref{ugSysCmdshowPage} on -page~\pageref{ugSysCmdshowPage} -\item ugSysCmdspoolPage \ref{ugSysCmdspoolPage} on -page~\pageref{ugSysCmdspoolPage} -\item ugSysCmdsynonymPage \ref{ugSysCmdsynonymPage} on -page~\pageref{ugSysCmdsynonymPage} -\item ugSysCmdsystemPage \ref{ugSysCmdsystemPage} on -page~\pageref{ugSysCmdsystemPage} -\item ugSysCmdtracePage \ref{ugSysCmdtracePage} on -page~\pageref{ugSysCmdtracePage} -\item ugSysCmdundoPage \ref{ugSysCmdundoPage} on -page~\pageref{ugSysCmdundoPage} -\item ugSysCmdwhatPage \ref{ugSysCmdwhatPage} on -page~\pageref{ugSysCmdwhatPage} -\end{itemize} -\index{pages!ugSysCmdPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdPage} -\index{ugSysCmdPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdPage}{B. Axiom System Commands} -\beginscroll - -\texht{\bgroup\baselineskip 10pt\ixpt{}\def\Isize{\SIsize}}{} - -This chapter describes system commands, the command-line -facilities used to control the Axiom environment. -The first section is an introduction and discusses the common -syntax of the commands available. - -\table{ - { \downlink{\menuitemstyle{A.1. Introduction}}{ugSysCmdOverviewPage} } - { \downlink{\menuitemstyle{A.2. )abbreviation}}{ugSysCmdabbreviationPage} } - { \downlink{\menuitemstyle{A.3. )boot}}{ugSysCmdbootPage} } - { \downlink{\menuitemstyle{A.4. )cd}}{ugSysCmdcdPage} } - { \downlink{\menuitemstyle{A.5. )close}}{ugSysCmdclosePage} } - { \downlink{\menuitemstyle{A.6. )clear}}{ugSysCmdclearPage} } - { \downlink{\menuitemstyle{A.7. )compile}}{ugSysCmdcompilePage} } - { \downlink{\menuitemstyle{A.8. )display}}{ugSysCmddisplayPage} } - { \downlink{\menuitemstyle{A.9. )edit}}{ugSysCmdeditPage} } - { \downlink{\menuitemstyle{A.10. )fin}}{ugSysCmdfinPage} } - { \downlink{\menuitemstyle{A.11. )frame}}{ugSysCmdframePage} } - { \downlink{\menuitemstyle{A.12. )help}}{ugSysCmdhelpPage} } - { \downlink{\menuitemstyle{A.13. )history}}{ugSysCmdhistoryPage} } - { \downlink{\menuitemstyle{A.14. )library}}{ugSysCmdlibraryPage} } - { \downlink{\menuitemstyle{A.15. )lisp}}{ugSysCmdlispPage} } - { \downlink{\menuitemstyle{A.16. )load}}{ugSysCmdloadPage} } - { \downlink{\menuitemstyle{A.17. )ltrace}}{ugSysCmdltracePage} } - { \downlink{\menuitemstyle{A.18. )pquit}}{ugSysCmdpquitPage} } - { \downlink{\menuitemstyle{A.19. )quit}}{ugSysCmdquitPage} } - { \downlink{\menuitemstyle{A.20. )read}}{ugSysCmdreadPage} } - { \downlink{\menuitemstyle{A.21. )set}}{ugSysCmdsetPage} } - { \downlink{\menuitemstyle{A.22. )show}}{ugSysCmdshowPage} } - { \downlink{\menuitemstyle{A.23. )spool}}{ugSysCmdspoolPage} } - { \downlink{\menuitemstyle{A.24. )synonym}}{ugSysCmdsynonymPage} } - { \downlink{\menuitemstyle{A.25. )system}}{ugSysCmdsystemPage} } - { \downlink{\menuitemstyle{A.26. )trace}}{ugSysCmdtracePage} } - { \downlink{\menuitemstyle{A.27. )undo}}{ugSysCmdundoPage} } - { \downlink{\menuitemstyle{A.28. )what}}{ugSysCmdwhatPage} } +\spadpaste{ans3 . attributes\free{ans3}} } -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdOverviewTitle}{Introduction} -\newcommand{\ugSysCmdOverviewNumber}{B.1.} - -@ -\subsection{B.1. Introduction} -\label{ugSysCmdOverviewPage} -\begin{itemize} -\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on -page~\pageref{ugSysCmdsetPage} -\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on -page~\pageref{ugSysCmdcompilePage} -\end{itemize} -\index{pages!ugSysCmdOverviewPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdOverviewPage} -\index{ugSysCmdOverviewPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdOverviewPage}{B.1. Introduction} -\beginscroll - -System commands are used to perform Axiom environment management. -Among the commands are those that display what has been defined or -computed, set up multiple logical Axiom environments (frames), clear -definitions, read files of expressions and commands, show what -functions are available, and terminate Axiom. - -Some commands are restricted: the commands -\begin{verbatim} -)set userlevel interpreter -)set userlevel compiler -)set userlevel development -\end{verbatim} -set the user-access level to the three possible choices. All commands -are available at {\tt development} level and the fewest are available -at {\tt interpreter} level. The default user-level is {\tt -interpreter}. In addition to the \spadcmd{)set} command (discussed in -\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} in Section -\ugSysCmdsetNumber\ignore{ugSysCmdset}) you can use the \HyperName{} -settings facility to change the {\it user-level.} \texht{}{Click on -\lispmemolink{Settings}{(|htSystemVariables|)} here to immediately go -to the settings facility.} - -Each command listing begins with one or more syntax pattern -descriptions plus examples of related commands. The syntax -descriptions are intended to be easy to read and do not necessarily -represent the most compact way of specifying all possible arguments -and options; the descriptions may occasionally be redundant. - -All system commands begin with a right parenthesis which should be in -the first available column of the input line (that is, immediately -after the input prompt, if any). System commands may be issued -directly to Axiom or be included in {\bf .input} files. - -A system command {\it argument} is a word that directly follows the -command name and is not followed or preceded by a right parenthesis. -A system command {\it option} follows the system command and is -directly preceded by a right parenthesis. Options may have arguments: -they directly follow the option. This example may make it easier to -remember what is an option and what is an argument: - -\centerline{{{\tt )syscmd {\it arg1 arg2} )opt1 {\it opt1arg1 opt1arg2} )opt2 {\it opt2arg1} ...}}} - -In the system command descriptions, optional arguments and options are -enclosed in brackets (``\lanb'' and ``\ranb''). If an argument or -option name is in italics, it is meant to be a variable and must have -some actual value substituted for it when the system command call is -made. For example, the syntax pattern description - -\noindent -{\tt )read} {\it fileName} {\tt \lanb{})quietly\ranb{}} - -\noindent -would imply that you must provide an actual file name for -{\it fileName} but need not use the {\tt )quietly} option. -Thus -\begin{verbatim} -)read matrix.input -\end{verbatim} -is a valid instance of the above pattern. - -System command names and options may be abbreviated and may be in -upper or lower case. -The case of actual arguments may be significant, depending on the -particular situation (such as in file names). -System command names and options may be abbreviated to the minimum -number of starting letters so that the name or option is unique. -Thus -\begin{verbatim} -)s Integer -\end{verbatim} -is not a valid abbreviation for the {\tt )set} command, -because both {\tt )set} and {\tt )show} -begin with the letter ``s''. -Typically, two or three letters are sufficient for disambiguating names. -In our descriptions of the commands, we have used no abbreviations for -either command names or options. - -In some syntax descriptions we use a vertical line ``\vertline'' -to indicate that you must specify one of the listed choices. -For example, in -\begin{verbatim} -)set output fortran on | off -\end{verbatim} -only {\tt on} and {\tt off} are acceptable words for following -{\tt boot}. -We also sometimes use ``...'' to indicate that additional arguments -or options of the listed form are allowed. -Finally, in the syntax descriptions we may also list the syntax of -related commands. - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdabbreviationTitle}{)abbreviation} -\newcommand{\ugSysCmdabbreviationNumber}{B.2.} - -@ -\subsection{B.2. )abbreviation} -\label{ugSysCmdabbreviationPage} -\index{pages!ugSysCmdabbreviationPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdabbreviationPage} -\index{ugSysCmdabbreviationPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdabbreviationPage}{B.2. )abbreviation} -\beginscroll - - -\par\noindent{\bf User Level Required:} compiler - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item {\tt )abbreviation query \lanb{}{\it nameOrAbbrev}\ranb{}} -\item {\tt )abbreviation category {\it abbrev fullname} \lanb{})quiet\ranb{}} -\item {\tt )abbreviation domain {\it abbrev fullname} \lanb{})quiet\ranb{}} -\item {\tt )abbreviation package {\it abbrev fullname} \lanb{})quiet\ranb{}} -\item {\tt )abbreviation remove {\it nameOrAbbrev}} -\end{items} - -\par\noindent{\bf Command Description:} - -This command is used to query, set and remove abbreviations for category, -domain and package constructors. -Every constructor must have a unique abbreviation. -This abbreviation is part of the name of the subdirectory -under which the components of the compiled constructor are -stored. -Furthermore, by issuing this command you -let the system know what file to load automatically if you use a new -constructor. -Abbreviations must start with a letter and then be followed by -up to seven letters or digits. -Any letters appearing in the abbreviation must be in uppercase. - -When used with the {\tt query} argument, -this command may be used to list the name -associated with a particular abbreviation or the abbreviation for a -constructor. -If no abbreviation or name is given, the names and corresponding -abbreviations for {\it all} constructors are listed. - -The following shows the abbreviation for the constructor \spadtype{List}: -\begin{verbatim} -)abbreviation query List -\end{verbatim} -The following shows the constructor name corresponding to the -abbreviation \spadtype{NNI}: -\begin{verbatim} -)abbreviation query NNI -\end{verbatim} -The following lists all constructor names and their abbreviations. -\begin{verbatim} -)abbreviation query -\end{verbatim} - -To add an abbreviation for a constructor, use this command with -{\tt category}, {\tt domain} or {\tt package}. -The following add abbreviations to the system for a -category, domain and package, respectively: -\begin{verbatim} -)abbreviation domain SET Set -)abbreviation category COMPCAT ComplexCategory -)abbreviation package LIST2MAP ListToMap -\end{verbatim} -If the {\tt )quiet} option is used, -no output is displayed from this command. -You would normally only define an abbreviation in a library source file. -If this command is issued for a constructor that has already been loaded, the -constructor will be reloaded next time it is referenced. In particular, you -can use this command to force the automatic reloading of constructors. - -To remove an abbreviation, the {\tt remove} argument is used. -This is usually -only used to correct a previous command that set an abbreviation for a -constructor name. -If, in fact, the abbreviation does exist, you are prompted -for confirmation of the removal request. -Either of the following commands -will remove the abbreviation \spadtype{VECTOR2} and the -constructor name \spadtype{VectorFunctions2} from the system: -\begin{verbatim} -)abbreviation remove VECTOR2 -)abbreviation remove VectorFunctions2 -\end{verbatim} - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} -in section \ugSysCmdcompileNumber - - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdbootTitle}{)boot} -\newcommand{\ugSysCmdbootNumber}{B.3.} - -@ -\subsection{B.3. )boot} -\label{ugSysCmdbootPage} -\begin{itemize} -\item ugSysCmdfinPage \ref{ugSysCmdfinPage} on -page~\pageref{ugSysCmdfinPage} -\item ugSysCmdlispPage \ref{ugSysCmdlispPage} on -page~\pageref{ugSysCmdlispPage} -\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on -page~\pageref{ugSysCmdsetPage} -\item ugSysCmdsystemPage \ref{ugSysCmdsystemPage} on -page~\pageref{ugSysCmdsystemPage} -\end{itemize} -\index{pages!ugSysCmdbootPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdbootPage} -\index{ugSysCmdbootPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdbootPage}{B.3. )boot} -\beginscroll - - -\par\noindent{\bf User Level Required:} development - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item {\tt )boot} {\it bootExpression} -\end{items} - -\par\noindent{\bf Command Description:} - -This command is used by Axiom system developers to execute -expressions written in the BOOT language. -For example, -\begin{verbatim} -)boot times3(x) == 3*x -\end{verbatim} -creates and compiles the \Lisp{} function ``times3'' -obtained by translating the BOOT code. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdfinTitle''}{ugSysCmdfinPage} in -section \ugSysCmdfinNumber -\downlink{``\ugSysCmdlispTitle''}{ugSysCmdlispPage} in -section \ugSysCmdlispNumber -\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} in -section \ugSysCmdsetNumber -\downlink{``\ugSysCmdsystemTitle''}{ugSysCmdsystemPage} in -section \ugSysCmdsystemNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdcdTitle}{)cd} -\newcommand{\ugSysCmdcdNumber}{B.4.} - -@ -\subsection{B.4. )cd} -\label{ugSysCmdcdPage} -\begin{itemize} -\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on -page~\pageref{ugSysCmdcompilePage} -\item ugSysCmdeditPage \ref{ugSysCmdeditPage} on -page~\pageref{ugSysCmdeditPage} -\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on -page~\pageref{ugSysCmdhistoryPage} -\item ugSysCmdlibraryPage \ref{ugSysCmdlibraryPage} on -page~\pageref{ugSysCmdlibraryPage} -\item ugSysCmdreadPage \ref{ugSysCmdreadPage} on -page~\pageref{ugSysCmdreadPage} -\item ugSysCmdspoolPage \ref{ugSysCmdspoolPage} on -page~\pageref{ugSysCmdspoolPage} -\end{itemize} -\index{pages!ugSysCmdcdPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdcdPage} -\index{ugSysCmdcdPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdcdPage}{B.4. )cd} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item {\tt )cd} {\it directory} -\end{items} - -\par\noindent{\bf Command Description:} - -This command sets the Axiom working current directory. -The current directory is used for looking for -input files (for {\tt )read}), -Axiom library source files (for {\tt )compile}), -saved history environment files (for {\tt )history )restore}), -compiled Axiom library files (for \spadcmd{)library}), and -files to edit (for {\tt )edit}). -It is also used for writing -spool files (via {\tt )spool}), -writing history input files (via {\tt )history )write}) and -history environment files (via {\tt )history )save}),and -compiled Axiom library files (via {\tt )compile}). - -If issued with no argument, this command sets the Axiom -current directory to your home directory. -If an argument is used, it must be a valid directory name. -Except for the ``{\tt )}'' at the beginning of the command, -this has the same syntax as the operating system {\tt cd} command. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} in -section \ugSysCmdcompileNumber -\downlink{``\ugSysCmdeditTitle''}{ugSysCmdeditPage} in -section \ugSysCmdeditNumber -\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} in -section \ugSysCmdhistoryNumber -\downlink{``\ugSysCmdlibraryTitle''}{ugSysCmdlibraryPage} in -section \ugSysCmdlibraryNumber -\downlink{``\ugSysCmdreadTitle''}{ugSysCmdreadPage} in -section \ugSysCmdreadNumber -\downlink{``\ugSysCmdspoolTitle''}{ugSysCmdspoolPage} in -section \ugSysCmdspoolNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdcloseTitle}{)close} -\newcommand{\ugSysCmdcloseNumber}{B.5.} - -@ -\subsection{B.5. )close} -\label{ugSysCmdclosePage} -\begin{itemize} -\item ugSysCmdquitPage \ref{ugSysCmdquitPage} on -page~\pageref{ugSysCmdquitPage} -\end{itemize} -\index{pages!ugSysCmdclosePage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdclosePage} -\index{ugSysCmdclosePage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdclosePage}{B.5. )close} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )close} -\item{\tt )close )quietly} -\end{items} -\par\noindent{\bf Command Description:} - -This command is used to close down interpreter client processes. -Such processes are started by \HyperName{} to run Axiom examples -when you click on their text. When you have finished examining or modifying the -example and you do not want the extra window around anymore, issue -\begin{verbatim} -)close -\end{verbatim} -to the Axiom prompt in the window. - -If you try to close down the last remaining interpreter client -process, Axiom will offer to close down the entire Axiom -session and return you to the operating system by displaying something -like -\begin{verbatim} - This is the last Axiom session. Do you want to kill Axiom? -\end{verbatim} -Type "y" (followed by the Return key) if this is what you had in mind. -Type "n" (followed by the Return key) to cancel the command. - -You can use the {\tt )quietly} option to force Axiom to -close down the interpreter client process without closing down -the entire Axiom session. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdquitTitle''}{ugSysCmdquitPage} in -section \ugSysCmdquitNumber -\downlink{``\ugSysCmdpquitTitle''}{ugSysCmdpquitPage} in -section \ugSysCmdpquitNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdclearTitle}{)clear} -\newcommand{\ugSysCmdclearNumber}{B.6.} - -@ -\subsection{B.6. )clear} -\label{ugSysCmdclearPage} -\begin{itemize} -\item ugSysCmddisplayPage \ref{ugSysCmddisplayPage} on -page~\pageref{ugSysCmddisplayPage} -\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on -page~\pageref{ugSysCmdhistoryPage} -\item ugSysCmdundoPage \ref{ugSysCmdundoPage} on -page~\pageref{ugSysCmdundoPage} -\end{itemize} -\index{pages!ugSysCmdclearPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdclearPage} -\index{ugSysCmdclearPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdclearPage}{B.6. )clear} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )clear all} -\item{\tt )clear completely} -\item{\tt )clear properties all} -\item{\tt )clear properties} {\it obj1 \lanb{}obj2 ...\ranb{}} -\item{\tt )clear value all} -\item{\tt )clear value} {\it obj1 \lanb{}obj2 ...\ranb{}} -\item{\tt )clear mode all} -\item{\tt )clear mode} {\it obj1 \lanb{}obj2 ...\ranb{}} -\end{items} -\par\noindent{\bf Command Description:} - -This command is used to remove function and variable declarations, definitions -and values from the workspace. -To empty the entire workspace and reset the -step counter to 1, issue -\begin{verbatim} -)clear all -\end{verbatim} -To remove everything in the workspace but not reset the step counter, issue -\begin{verbatim} -)clear properties all -\end{verbatim} -To remove everything about the object {\tt x}, issue -\begin{verbatim} -)clear properties x -\end{verbatim} -To remove everything about the objects {\tt x, y} and {\tt f}, issue -\begin{verbatim} -)clear properties x y f -\end{verbatim} - -The word {\tt properties} may be abbreviated to the single letter -``{\tt p}''. -\begin{verbatim} -)clear p all -)clear p x -)clear p x y f -\end{verbatim} -All definitions of functions and values of variables may be removed by either -\begin{verbatim} -)clear value all -)clear v all -\end{verbatim} -This retains whatever declarations the objects had. To remove definitions and -values for the specific objects {\tt x, y} and {\tt f}, issue -\begin{verbatim} -)clear value x y f -)clear v x y f -\end{verbatim} -To remove the declarations of everything while leaving the definitions and -values, issue -\begin{verbatim} -)clear mode all -)clear m all -\end{verbatim} -To remove declarations for the specific objects {\tt x, y} and {\tt f}, issue -\begin{verbatim} -)clear mode x y f -)clear m x y f -\end{verbatim} -The {\tt )display names} and {\tt )display properties} commands may be used -to see what is currently in the workspace. - -The command -\begin{verbatim} -)clear completely -\end{verbatim} -does everything that {\tt )clear all} does, and also clears the internal -system function and constructor caches. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmddisplayTitle''}{ugSysCmddisplayPage} -in section \ugSysCmddisplayNumber -\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} -in section \ugSysCmdhistoryNumber -\downlink{``\ugSysCmdundoTitle''}{ugSysCmdundoPage} -in section \ugSysCmdundoNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdcompileTitle}{)compile} -\newcommand{\ugSysCmdcompileNumber}{B.7.} - -@ -\subsection{B.7. )compile} -\label{ugSysCmdcompilePage} -\begin{itemize} -\item ugSysCmdcdPage \ref{ugSysCmdcdPage} on -page~\pageref{ugSysCmdcdPage} -\item ugSysCmdtracePage \ref{ugSysCmdtracePage} on -page~\pageref{ugSysCmdtracePage} -\item ugSysCmdabbreviationPage \ref{ugSysCmdabbreviationPage} on -page~\pageref{ugSysCmdabbreviationPage} -\item ugSysCmdeditPage \ref{ugSysCmdeditPage} on -page~\pageref{ugSysCmdeditPage} -\item ugSysCmdlibraryPage \ref{ugSysCmdlibraryPage} on -page~\pageref{ugSysCmdlibraryPage} -\end{itemize} -\index{pages!ugSysCmdcompilePage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdcompilePage} -\index{ugSysCmdcompilePage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdcompilePage}{B.7. )compile} -\beginscroll - - -\par\noindent{\bf User Level Required:} compiler - -\par\noindent{\bf Command Syntax:} - -\begin{items} -\item {\tt )compile} -\item {\tt )compile {\it fileName}} -\item {\tt )compile {\it fileName}.as} -\item {\tt )compile {\it directory/fileName}.as} -\item {\tt )compile {\it fileName}.ao} -\item {\tt )compile {\it directory/fileName}.ao} -\item {\tt )compile {\it fileName}.al} -\item {\tt )compile {\it directory/fileName}.al} -\item {\tt )compile {\it fileName}.lsp} -\item {\tt )compile {\it directory/fileName}.lsp} -\item {\tt )compile {\it fileName}.spad} -\item {\tt )compile {\it directory/fileName}.spad} -\item {\tt )compile {\it fileName} )new} -\item {\tt )compile {\it fileName} )old} -\item {\tt )compile {\it fileName} )translate} -\item {\tt )compile {\it fileName} )quiet} -\item {\tt )compile {\it fileName} )noquiet} -\item {\tt )compile {\it fileName} )moreargs} -\item {\tt )compile {\it fileName} )onlyargs} -\item {\tt )compile {\it fileName} )break} -\item {\tt )compile {\it fileName} )nobreak} -\item {\tt )compile {\it fileName} )library} -\item {\tt )compile {\it fileName} )nolibrary} -\item {\tt )compile {\it fileName} )vartrace} -\item {\tt )compile {\it fileName} )constructor} {\it nameOrAbbrev} -\end{items} - -\par\noindent{\bf Command Description:} - -You use this command to invoke the new Axiom library compiler or -the old Axiom system compiler. -The {\tt )compile} system command is actually a combination of -Axiom processing and a call to the \axiomxl{} compiler. -It is performing double-duty, acting as a front-end to -both the \axiomxl{} compiler and the old Axiom system -compiler. -(The old Axiom system compiler was written in Lisp and was -an integral part of the Axiom environment. -The \axiomxl{} compiler is written in C and executed by the operating system -when called from within Axiom.) - -The command compiles files with file extensions {\it .as, .ao} -and {\it .al} with the -\axiomxl{} compiler and files with file extension {\it .spad} with the -old Axiom system compiler. -It also can compile files with file extension {\it .lsp}. These -are assumed to be Lisp files genererated by the \axiomxl{} -compiler. -If you omit the file extension, the command looks to see if you -have specified the {\tt )new} or {\tt )old} option. -If you have given one of these options, the corresponding compiler -is used. -Otherwise, the command first looks in the standard system -directories for files with extension {\it .as, .ao} and {\it -.al} and then files with extension {\it .spad}. -The first file found has the appropriate compiler invoked on it. -If the command cannot find a matching file, an error message is -displayed and the command terminates. - -The {\tt )translate} option is used to invoke a special version -of the old system compiler that will translate a {\it .spad} file -to a {\it .as} file. That is, the {\it .spad} file will be parsed and -analyzed and a file using the new syntax will be created. By default, -the {\it .as} file is created in the same directory as the -{\it .spad} file. If that directory is not writable, the current -directory is used. If the current directory is not writable, an -error message is given and the command terminates. -Note that {\tt )translate} implies the {\tt )old} option so the -file extension can safely be omitted. If {\tt )translate} is -given, all other options are ignored. -Please be aware that the translation is not necessarily one -hundred percent complete or correct. -You should attempt to compile the output with the \axiomxl{} compiler -and make any necessary corrections. - -We now describe the options for the new \axiomxl{} compiler. - -The first thing {\tt )compile} does is look for a source code -filename among its arguments. -Thus -\begin{verbatim} -)compile mycode.as -)compile /u/jones/as/mycode.as -)compile mycode -\end{verbatim} -all invoke {\tt )compiler} on the file {\tt -/u/jones/as/mycode.as} if the current Axiom working -directory is {\tt /u/jones/as.} (Recall that you can set the -working directory via the {\tt )cd} command. If you don't set it -explicitly, it is the directory from which you started -Axiom.) - -This is frequently all you need to compile your file. -This simple command: -\indent{4} -\beginitems -\item[1. ] Invokes the \axiomxl{} compiler and produces Lisp output. -\item[2. ] Calls the Lisp compiler if the \axiomxl{} compilation was -successful. -\item[3. ] Uses the {\tt )library} command to tell Axiom about -the contents of your compiled file and arrange to have those -contents loaded on demand. -\enditems -\indent{0} - -Should you not want the {\tt )library} command automatically -invoked, call {\tt )compile} with the {\tt )nolibrary} option. -For example, -\begin{verbatim} -)compile mycode.as )nolibrary -\end{verbatim} - -The general description of \axiomxl{} command line arguments is in -the \axiomxl{} documentation. -The default options used by the {\tt )compile} command can be -viewed and set using the {\tt )set compiler args} Axiom -system command. -The current defaults are -\begin{verbatim} --O -Fasy -Fao -Flsp -laxiom -Mno-AXL_W_WillObsolete -DAxiom -\end{verbatim} -These options mean: -\indent{4} -\beginitems -\item[-] {\tt -O}: perform all optimizations, -\item[-] {\tt -Fasy}: generate a {\tt .asy} file, -\item[-] {\tt -Fao}: generate a {\tt .ao} file, -\item[-] {\tt -Flsp}: generate a {\tt .lsp} (Lisp) -file, -\item[-] {\tt -laxiom}: use the {\tt axiom} library {\tt libaxiom.al}, -\item[-] {\tt -Mno-AXL\_W\_WillObsolete}: do not display messages -about older generated files becoming obsolete, and -\item[-] {\tt -DAxiom}: define the global assertion {\tt Axiom} so that the -\axiomxl{} libraries for generating stand-alone code -are not accidentally used with Axiom. -\enditems -\indent{0} - -To supplement these default arguments, use the {\tt )moreargs} option on -{\tt )compile.} -For example, -\begin{verbatim} -)compile mycode.as )moreargs "-v" -\end{verbatim} -uses the default arguments and appends the {\tt -v} (verbose) -argument flag. -The additional argument specification {\bf must be enclosed in -double quotes.} - -To completely replace these default arguments for a particular -use of {\tt )compile}, use the {\tt )onlyargs} option. -For example, -\begin{verbatim} -)compile mycode.as )onlyargs "-v -O" -\end{verbatim} -only uses the {\tt -v} (verbose) and {\tt -O} (optimize) -arguments. -The argument specification {\bf must be enclosed in double quotes.} -In this example, Lisp code is not produced and so the compilation -output will not be available to Axiom. - -To completely replace the default arguments for all calls to {\tt -)compile} within your Axiom session, use {\tt )set compiler args.} -For example, to use the above arguments for all compilations, issue -\begin{verbatim} -)set compiler args "-v -O" -\end{verbatim} -Make sure you include the necessary {\tt -l} and {\tt -Y} -arguments along with those needed for Lisp file creation. -As above, {\bf the argument specification must be enclosed in double -quotes.} - -By default, the {\tt )library} system command {\it exposes} all -domains and categories it processes. -This means that the Axiom intepreter will consider those -domains and categories when it is trying to resolve a reference -to a function. -Sometimes domains and categories should not be exposed. -For example, a domain may just be used privately by another -domain and may not be meant for top-level use. -The {\tt )library} command should still be used, though, so that -the code will be loaded on demand. -In this case, you should use the {\tt )nolibrary} option on {\tt -)compile} and the {\tt )noexpose} option in the {\tt )library} -command. For example, -\begin{verbatim} -)compile mycode.as )nolibrary -)library mycode )noexpose -\end{verbatim} - -Once you have established your own collection of compiled code, -you may find it handy to use the {\tt )dir} option on the -{\tt )library} command. -This causes {\tt )library} to process all compiled code in the -specified directory. For example, -\begin{verbatim} -)library )dir /u/jones/as/quantum -\end{verbatim} -You must give an explicit directory after {\tt )dir}, even if you -want all compiled code in the current working directory -processed, e.g. -\begin{verbatim} -)library )dir . -\end{verbatim} - -The {\tt )compile} command works with several file extensions. We saw -above what happens when it is invoked on a file with extension {\tt -.as.} A {\tt .ao} file is a portable binary compiled version of a -{\tt .as} file, and {\tt )compile} simply passes the {\tt .ao} file -onto \axiomxl{}. The generated Lisp file is compiled and {\tt )library} -is automatically called, just as if you had specified a {\tt .as} file. - -A {\tt .al} file is an archive file containing {\tt .ao} files. The -archive is created (on Unix systems) with the {\tt ar} program. When -{\tt )compile} is given a {\tt .al} file, it creates a directory whose -name is based on that of the archive. For example, if you issue -\begin{verbatim} -)compile mylib.al -\end{verbatim} -the directory {\tt mylib.axldir} is created. All -members of the archive are unarchived into the -directory and {\tt )compile} is called on each {\tt .ao} file found. It -is your responsibility to remove the directory and its contents, if you -choose to do so. - -A {\tt .lsp} file is a Lisp source file, presumably, in our context, -generated by \axiomxl{} when called with the {\tt -Flsp} option. When -{\tt )compile} is used with a {\tt .lsp} file, the Lisp file is -compiled and {\tt )library} is called. You must also have present a -{\tt .asy} generated from the same source file. - -The following are descriptions of options for the old system compiler. - -You can compile category, domain, and package constructors -contained in files with file extension {\it .spad}. -You can compile individual constructors or every constructor -in a file. - -The full filename is remembered between invocations of this command and -{\tt )edit} commands. -The sequence of commands -\begin{verbatim} -)compile matrix.spad -)edit -)compile -\end{verbatim} -will call the compiler, edit, and then call the compiler again on the -file {\bf matrix.spad.} If you do not specify a {\it directory,} the -working current directory (see -\downlink{``\ugSysCmdcdTitle''}{ugSysCmdcdPage} in Section -\ugSysCmdcdNumber\ignore{ugSysCmdcd}) is searched for the file. If -the file is not found, the standard system directories are searched. - -If you do not give any options, all constructors within a file are -compiled. Each constructor should have an {\tt )abbreviation} command -in the file in which it is defined. We suggest that you place the -{\tt )abbreviation} commands at the top of the file in the order in -which the constructors are defined. The list of commands serves as a -table of contents for the file. - -The {\tt )library} option causes directories containing the compiled -code for each constructor to be created in the working current -directory. The name of such a directory consists of the constructor -abbreviation and the {\bf .nrlib} file extension. For example, the -directory containing the compiled code for the \axiomType{MATRIX} -constructor is called {\bf MATRIX.nrlib.} The {\tt )nolibrary} option -says that such files should not be created. The default is {\tt -)library.} Note that the semantics of {\tt )library} and {\tt -)nolibrary} for the new \axiomxl{} compiler and for the old system -compiler are completely different. - -The {\tt )vartrace} option causes the compiler to generate extra code -for the constructor to support conditional tracing of variable -assignments. (see -\downlink{``\ugSysCmdtraceTitle''}{ugSysCmdtracePage} in Section -\ugSysCmdtraceNumber\ignore{ugSysCmdtrace}). Without this option, this -code is suppressed and one cannot use the {\tt )vars} option for the -trace command. - -The {\tt )constructor} option is used to -specify a particular constructor to compile. -All other constructors in the file are ignored. -The constructor name or abbreviation follows {\tt )constructor.} -Thus either -\begin{verbatim} -)compile matrix.spad )constructor RectangularMatrix -\end{verbatim} -or -\begin{verbatim} -)compile matrix.spad )constructor RMATRIX -\end{verbatim} -compiles the \axiomType{RectangularMatrix} constructor -defined in {\bf matrix.spad.} - -The {\tt )break} and {\tt )nobreak} options determine what the old -system compiler does when it encounters an error. {\tt )break} is the -default and it indicates that processing should stop at the first -error. The value of the {\tt )set break} variable then controls what -happens. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdabbreviationTitle''}{ugSysCmdabbreviationPage} -in section \ugSysCmdabbreviationNumber -\downlink{``\ugSysCmdeditTitle''}{ugSysCmdeditPage} -in section \ugSysCmdeditNumber -\downlink{``\ugSysCmdlibraryTitle''}{ugSysCmdlibraryPage} -in section \ugSysCmdlibraryNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmddisplayTitle}{)display} -\newcommand{\ugSysCmddisplayNumber}{B.8.} - -@ -\subsection{B.8. )display} -\label{ugSysCmddisplayPage} -\begin{itemize} -\item ugSysCmdclearPage \ref{ugSysCmdclearPage} on -page~\pageref{ugSysCmdclearPage} -\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on -page~\pageref{ugSysCmdhistoryPage} -\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on -page~\pageref{ugSysCmdsetPage} -\item ugSysCmdshowPage \ref{ugSysCmdshowPage} on -page~\pageref{ugSysCmdshowPage} -\item ugSysCmdwhatPage \ref{ugSysCmdwhatPage} on -page~\pageref{ugSysCmdwhatPage} -\end{itemize} -\index{pages!ugSysCmddisplayPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmddisplayPage} -\index{ugSysCmddisplayPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmddisplayPage}{B.8. )display} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item {\tt )display all} -\item {\tt )display properties} -\item {\tt )display properties all} -\item {\tt )display properties} {\it \lanb{}obj1 \lanb{}obj2 ...\ranb{}\ranb{}} -\item {\tt )display value all} -\item {\tt )display value} {\it \lanb{}obj1 \lanb{}obj2 ...\ranb{}\ranb{}} -\item {\tt )display mode all} -\item {\tt )display mode} {\it \lanb{}obj1 \lanb{}obj2 ...\ranb{}\ranb{}} -\item {\tt )display names} -\item {\tt )display operations} {\it opName} -\end{items} -\par\noindent{\bf Command Description:} - -This command is used to display the contents of the workspace and -signatures of functions with a given name.\footnote{A -\spadgloss{signature} gives the argument and return types of a -function.} - -The command -\begin{verbatim} -)display names -\end{verbatim} -lists the names of all user-defined objects in the workspace. This is useful -if you do not wish to see everything about the objects and need only be -reminded of their names. - -The commands -\begin{verbatim} -)display all -)display properties -)display properties all -\end{verbatim} -all do the same thing: show the values and types and declared modes of all -variables in the workspace. If you have defined functions, their signatures -and definitions will also be displayed. - -To show all information about a particular variable or user functions, -for example, something named {\tt d}, issue -\begin{verbatim} -)display properties d -\end{verbatim} -To just show the value (and the type) of {\tt d}, issue -\begin{verbatim} -)display value d -\end{verbatim} -To just show the declared mode of {\tt d}, issue -\begin{verbatim} -)display mode d -\end{verbatim} - -All modemaps for a given operation may be -displayed by using {\tt )display operations}. -A \spadgloss{modemap} is a collection of information about a particular -reference -to an operation. This includes the types of the arguments and the return -value, the location of the implementation and any conditions on the types. -The modemap may contain patterns. The following displays the modemaps for the -operation \spadfunFrom{complex}{ComplexCategory}: -\begin{verbatim} -)d op complex -\end{verbatim} - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdclearTitle''}{ugSysCmdclearPage} -in section \ugSysCmdclearNumber -\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} -in section \ugSysCmdhistoryNumber -\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} -in section \ugSysCmdsetNumber -\downlink{``\ugSysCmdshowTitle''}{ugSysCmdshowPage} -in section \ugSysCmdshowNumber -\downlink{``\ugSysCmdwhatTitle''}{ugSysCmdwhatPage} -in section \ugSysCmdwhatNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdeditTitle}{)edit} -\newcommand{\ugSysCmdeditNumber}{B.9.} - -@ -\subsection{B.9. )edit} -\label{ugSysCmdeditPage} -\begin{itemize} -\item ugSysCmdsystemPage \ref{ugSysCmdsystemPage} on -page~\pageref{ugSysCmdsystemPage} -\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on -page~\pageref{ugSysCmdcompilePage} -\item ugSysCmdreadPage \ref{ugSysCmdreadPage} on -page~\pageref{ugSysCmdreadPage} -\end{itemize} -\index{pages!ugSysCmdeditPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdeditPage} -\index{ugSysCmdeditPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdeditPage}{B.9. )edit} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )edit} \lanb{}{\it filename}\ranb{} -\end{items} -\par\noindent{\bf Command Description:} - -This command is used to edit files. -It works in conjunction with the {\tt )read} -and {\tt )compile} commands to remember the name -of the file on which you are working. -By specifying the name fully, you can edit any file you wish. -Thus -\begin{verbatim} -)edit /u/julius/matrix.input -\end{verbatim} -will place you in an editor looking at the file -{\tt /u/julius/matrix.input}. -By default, the editor is {\tt vi}, -but if you have an EDITOR shell environment variable defined, that editor -will be used. -When Axiom is running under the X Window System, -it will try to open a separate {\tt xterm} running your editor if -it thinks one is necessary. -For example, under the Korn shell, if you issue -\begin{verbatim} -export EDITOR=emacs -\end{verbatim} -then the emacs -editor will be used by \spadcmd{)edit}. - -If you do not specify a file name, the last file you edited, -read or compiled will be used. -If there is no ``last file'' you will be placed in the editor editing -an empty unnamed file. - -It is possible to use the {\tt )system} command to edit a file directly. -For example, -\begin{verbatim} -)system emacs /etc/rc.tcpip -\end{verbatim} -calls {\tt emacs} to edit the file. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdsystemTitle''}{ugSysCmdsystemPage} -in section \ugSysCmdsystemNumber -\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} -in section \ugSysCmdcompileNumber -\downlink{``\ugSysCmdreadTitle''}{ugSysCmdreadPage} -in section \ugSysCmdreadNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdfinTitle}{)fin} -\newcommand{\ugSysCmdfinNumber}{B.10.} - -@ -\subsection{B.10. )fin} -\label{ugSysCmdfinPage} -\begin{itemize} -\item ugSysCmdpquitPage \ref{ugSysCmdpquitPage} on -page~\pageref{ugSysCmdpquitPage} -\end{itemize} -\index{pages!ugSysCmdfinPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdfinPage} -\index{ugSysCmdfinPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdfinPage}{B.10. )fin} -\beginscroll - - -\par\noindent{\bf User Level Required:} development - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item {\tt )fin} -\end{items} -\par\noindent{\bf Command Description:} - -This command is used by Axiom -developers to leave the Axiom system and return -to the underlying \Lisp{} system. -To return to Axiom, issue the -``{\tt (\vertline{}spad\vertline{})}'' -function call to \Lisp{}. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdpquitTitle''}{ugSysCmdpquitPage} -in section \ugSysCmdpquitNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdframeTitle}{)frame} -\newcommand{\ugSysCmdframeNumber}{B.11.} - -@ -\subsection{B.11. )frame} -\label{ugSysCmdframePage} -\begin{itemize} -\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on -page~\pageref{ugSysCmdhistoryPage} -\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on -page~\pageref{ugSysCmdsetPage} -\end{itemize} -\index{pages!ugSysCmdframePage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdframePage} -\index{ugSysCmdframePage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdframePage}{B.11. )frame} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )frame new {\it frameName}} -\item{\tt )frame drop {\it \lanb{}frameName\ranb{}}} -\item{\tt )frame next} -\item{\tt )frame last} -\item{\tt )frame names} -\item{\tt )frame import {\it frameName} {\it \lanb{}objectName1 \lanb{}objectName2 ...\ranb{}\ranb{}}} -\item{\tt )set message frame on \vertline{} off} -\item{\tt )set message prompt frame} -\end{items} - -\par\noindent{\bf Command Description:} - -A {\it frame} can be thought of as a logical session within the -physical session that you get when you start the system. You can -have as many frames as you want, within the limits of your computer's -storage, paging space, and so on. -Each frame has its own {\it step number}, {\it environment} and {\it history.} -You can have a variable named {\tt a} in one frame and it will -have nothing to do with anything that might be called {\tt a} in -any other frame. - -Some frames are created by the \HyperName{} program and these can -have pretty strange names, since they are generated automatically. -To find out the names -of all frames, issue -\begin{verbatim} -)frame names -\end{verbatim} -It will indicate the name of the current frame. - -You create a new frame -``{\bf quark}'' by issuing -\begin{verbatim} -)frame new quark -\end{verbatim} -The history facility can be turned on by issuing either -{\tt )set history on} or {\tt )history )on}. -If the history facility is on and you are saving history information -in a file rather than in the Axiom environment -then a history file with filename {\bf quark.axh} will -be created as you enter commands. -If you wish to go back to what -you were doing in the -``{\bf initial}'' frame, use -\begin{verbatim} -)frame next -\end{verbatim} -or -\begin{verbatim} -)frame last -\end{verbatim} -to cycle through the ring of available frames to get back to -``{\bf initial}''. - -If you want to throw -away a frame (say ``{\bf quark}''), issue -\begin{verbatim} -)frame drop quark -\end{verbatim} -If you omit the name, the current frame is dropped. - -If you do use frames with the history facility on and writing to a file, -you may want to delete some of the older history files. -These are directories, so you may want to issue a command like -{\tt rm -r quark.axh} to the operating system. - -You can bring things from another frame by using -{\tt )frame import}. -For example, to bring the {\tt f} and {\tt g} from the frame ``{\bf quark}'' -to the current frame, issue -\begin{verbatim} -)frame import quark f g -\end{verbatim} -If you want everything from the frame ``{\bf quark}'', issue -\begin{verbatim} -)frame import quark -\end{verbatim} -You will be asked to verify that you really want everything. - -There are two {\tt )set} flags -to make it easier to tell where you are. -\begin{verbatim} -)set message frame on | off -\end{verbatim} -will print more messages about frames when it is set on. -By default, it is off. -\begin{verbatim} -)set message prompt frame -\end{verbatim} -will give a prompt -that looks like -\begin{verbatim} -initial (1) -> -\end{verbatim} -when you start up. In this case, the frame name and step make up the -prompt. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} -in section \ugSysCmdhistoryNumber -\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} -in section \ugSysCmdsetNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdhelpTitle}{)help} -\newcommand{\ugSysCmdhelpNumber}{B.12.} - -@ -\subsection{B.12. )help} -\label{ugSysCmdhelpPage} -\index{pages!ugSysCmdhelpPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdhelpPage} -\index{ugSysCmdhelpPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdhelpPage}{B.12. )help} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )help} -\item{\tt )help} {\it commandName} -\end{items} - -\par\noindent{\bf Command Description:} - -This command displays help information about system commands. -If you issue -\begin{verbatim} -)help -\end{verbatim} -then this very text will be shown. -You can also give the name or abbreviation of a system command -to display information about it. -For example, -\begin{verbatim} -)help clear -\end{verbatim} -will display the description of the {\tt )clear} system command. - -All this material is available in the Axiom User Guide -and in \HyperName{}. -In \HyperName{}, choose the {\bf Commands} item from the -{\bf Reference} menu. - - - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdhistoryTitle}{)history} -\newcommand{\ugSysCmdhistoryNumber}{B.13.} - -@ -\subsection{B.13. )history} -\label{ugSysCmdhistoryPage} -\begin{itemize} -\item ugSysCmdframePage \ref{ugSysCmdframePage} on -page~\pageref{ugSysCmdframePage} -\item ugSysCmdcdPage \ref{ugSysCmdcdPage} on -page~\pageref{ugSysCmdcdPage} -\item ugSysCmdreadPage \ref{ugSysCmdreadPage} on -page~\pageref{ugSysCmdreadPage} -\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on -page~\pageref{ugSysCmdsetPage} -\item ugSysCmdundoPage \ref{ugSysCmdundoPage} on -page~\pageref{ugSysCmdundoPage} -\end{itemize} -\index{pages!ugSysCmdhistoryPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdhistoryPage} -\index{ugSysCmdhistoryPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdhistoryPage}{B.13. )history} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )history )on} -\item{\tt )history )off} -\item{\tt )history )write} {\it historyInputFileName} -\item{\tt )history )show \lanb{}{\it n}\ranb{} \lanb{}both\ranb{}} -\item{\tt )history )save} {\it savedHistoryName} -\item{\tt )history )restore} \lanb{}{\it savedHistoryName}\ranb{} -\item{\tt )history )reset} -\item{\tt )history )change} {\it n} -\item{\tt )history )memory} -\item{\tt )history )file} -\item{\tt \%} -\item{\tt \%\%({\it n})} -\item{\tt )set history on \vertline{} off} -\end{items} - -\par\noindent{\bf Command Description:} - -The {\it history} facility within Axiom allows you to restore your -environment to that of another session and recall previous -computational results. -Additional commands allow you to review previous -input lines and to create an {\bf .input} file of the lines typed to -Axiom. - -Axiom saves your input and output if the history facility is -turned on (which is the default). -This information is saved if either of -\begin{verbatim} -)set history on -)history )on -\end{verbatim} -has been issued. -Issuing either -\begin{verbatim} -)set history off -)history )off -\end{verbatim} -will discontinue the recording of information. - -Whether the facility is disabled or not, the value of \spadSyntax{\%} -in Axiom always refers to the result of the last computation. If you -have not yet entered anything, \spadSyntax{\%} evaluates to an object -of type \spadtype{Variable('\%)}. The function \spadSyntax{\%\%} may -be used to refer to other previous results if the history facility is -enabled. In that case, {\tt \%\%(n)} is the output from step {\tt n} -if {\tt n > 0}. If {\tt n < 0}, the step is computed relative to the -current step. Thus {\tt \%\%(-1)} is also the previous step, {\tt -\%\%(-2)}, is the step before that, and so on. If an invalid step -number is given, Axiom will signal an error. - -The {\it environment} information can either be saved in a file or -entirely in memory (the default). Each frame -(\downlink{``\ugSysCmdframeTitle''}{ugSysCmdframePage} in Section -\ugSysCmdframeNumber\ignore{ugSysCmdframe}) has its own history -database. When it is kept in a file, some of it may also be kept in -memory for efficiency. When the information is saved in a file, the -name of the file is of the form {\bf FRAME.axh} where ``{\bf FRAME}'' -is the name of the current frame. The history file is placed in the -current working directory (see -\downlink{``\ugSysCmdcdTitle''}{ugSysCmdcdPage} in Section -\ugSysCmdcdNumber\ignore{ugSysCmdcd}). Note that these history -database files are not text files (in fact, they are directories -themselves), and so are not in human-readable format. - -The options to the {\tt )history} command are as follows: - -\indent{0} -\beginitems -\item[{\tt )change} {\it n}] -will set the number of steps that are saved in memory to {\it n}. -This option only has effect when the history data is maintained in a -file. -If you have issued {\tt )history )memory} (or not changed the default) -there is no need to use {\tt )history )change}. - -\item[{\tt )on}] -will start the recording of information. -If the workspace is not empty, you will be asked to confirm this -request. -If you do so, the workspace will be cleared and history data will begin -being saved. -You can also turn the facility on by issuing {\tt )set history on}. - -\item[{\tt )off}] -will stop the recording of information. -The {\tt )history )show} command will not work after issuing this -command. -Note that this command may be issued to save time, as there is some -performance penalty paid for saving the environment data. -You can also turn the facility off by issuing {\tt )set history off}. - -\item[{\tt )file}] -indicates that history data should be saved in an external file on disk. - -\item[{\tt )memory}] -indicates that all history data should be kept in memory rather than -saved in a file. -Note that if you are computing with very large objects it may not be -practical to kept this data in memory. - -\item[{\tt )reset}] -will flush the internal list of the most recent workspace calculations -so that the data structures may be garbage collected by the underlying -\Lisp{} system. -Like {\tt )history )change}, this option only has real effect when -history data is being saved in a file. - -\item[{\tt )restore} \lanb{}{\it savedHistoryName}\ranb{}] -completely clears the environment and restores it to a saved session, if -possible. -The {\tt )save} option below allows you to save a session to a file -with a given name. If you had issued -{\tt )history )save jacobi} -the command -{\tt )history )restore jacobi} -would clear the current workspace and load the contents of the named -saved session. If no saved session name is specified, the system looks -for a file called {\bf last.axh}. - -\item[{\tt )save} {\it savedHistoryName}] -is used to save a snapshot of the environment in a file. -This file is placed in the current working directory -(see \downlink{``\ugSysCmdcdTitle''}{ugSysCmdcdPage} -in Section \ugSysCmdcdNumber\ignore{ugSysCmdcd}). -Use {\tt )history )restore} to restore the environment to the state -preserved in the file. -This option also creates an input file containing all the lines of input -since you created the workspace frame (for example, by starting your -Axiom session) or last did a \spadcmd{)clear all} or -\spadcmd{)clear completely}. - -\item[{\tt )show} \lanb{}{\it n}\ranb{} \lanb{}{\tt both}\ranb{}] -can show previous input lines and output results. -{\tt )show} will display up to twenty of the last input lines -(fewer if you haven't typed in twenty lines). -{\tt )show} {\it n} will display up to {\it n} of the last input lines. -{\tt )show both} will display up to five of the last input lines and -output results. -{\tt )show} {\it n} {\tt both} will display up to {\it n} of the last -input lines and output results. - -\item[{\tt )write} {\it historyInputFile}] -creates an {\bf .input} file with the input lines typed since the start -of the session/frame or the last {\tt )clear all} or {\tt )clear -completely}. -If {\it historyInputFileName} does not -contain a period (``.'') in the filename, -{\bf .input} is appended to it. -For example, -{\tt )history )write chaos} -and -{\tt )history )write chaos.input} -both write the input lines to a file called {\bf chaos.input} in your -current working directory. -If you issued one or more {\tt )undo} commands, -{\tt )history )write} -eliminates all -input lines backtracked over as a result of {\tt )undo}. -You can edit this file and then use {\tt )read} to have Axiom process -the contents. -\enditems -\indent{0} - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdframeTitle''}{ugSysCmdframePage} -in section \ugSysCmdframeNumber -\downlink{``\ugSysCmdreadTitle''}{ugSysCmdreadPage} -in section \ugSysCmdreadNumber -\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} -in section \ugSysCmdsetNumber -\downlink{``\ugSysCmdundoTitle''}{ugSysCmdundoPage} -in section \ugSysCmdundoNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdlibraryTitle}{)library} -\newcommand{\ugSysCmdlibraryNumber}{B.14.} - -@ -\subsection{B.14. )library} -\label{ugSysCmdlibraryPage} -\begin{itemize} -\item ugSysCmdcdPage \ref{ugSysCmdcdPage} on -page~\pageref{ugSysCmdcdPage} -\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on -page~\pageref{ugSysCmdcompilePage} -\item ugSysCmdframePage \ref{ugSysCmdframePage} on -page~\pageref{ugSysCmdframePage} -\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on -page~\pageref{ugSysCmdsetPage} -\end{itemize} -\index{pages!ugSysCmdlibraryPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdlibraryPage} -\index{ugSysCmdlibraryPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdlibraryPage}{B.14. )library} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )library {\it libName1 \lanb{}libName2 ...\ranb{}}} -\item{\tt )library )dir {\it dirName}} -\item{\tt )library )only {\it objName1 \lanb{}objlib2 ...\ranb{}}} -\item{\tt )library )noexpose} -\end{items} - -\par\noindent{\bf Command Description:} - -This command replaces the {\tt )load} system command that -was available in Axiom releases before version 2.0. -The \spadcmd{)library} command makes available to Axiom the compiled -objects in the libraries listed. - -For example, if you {\tt )compile dopler.as} in your home -directory, issue {\tt )library dopler} to have Axiom look -at the library, determine the category and domain constructors present, -update the internal database with various properties of the -constructors, and arrange for the constructors to be -automatically loaded when needed. -If the {\tt )noexpose} option has not been given, the -constructors will be exposed (that is, available) in the current -frame. - -If you compiled a file with the old system compiler, you will -have an {\it nrlib} present, for example, {\it DOPLER.nrlib,} -where {\tt DOPLER} is a constructor abbreviation. -The command {\tt )library DOPLER} will then do the analysis and -database updates as above. - -To tell the system about all libraries in a directory, use -{\tt )library )dir dirName} where {\tt dirName} is an explicit -directory. -You may specify ``.'' as the directory, which means the current -directory from which you started the system or the one you set -via the \spadcmd{)cd} command. The directory name is required. - -You may only want to tell the system about particular -constructors within a library. In this case, use the {\tt )only} -option. The command {\tt )library dopler )only Test1} will only -cause the {\sf Test1} constructor to be analyzed, autoloaded, -etc.. - -Finally, each constructor in a library are usually automatically exposed when the -\spadcmd{)library} command is used. Use the {\tt )noexpose} -option if you not want them exposed. At a later time you can use -{\tt )set expose add constructor} to expose any hidden -constructors. - -{\bf Note for Axiom beta testers:} At various times this -command was called {\tt )local} and {\tt )with} before the name -{\tt )library} became the official name. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdcdTitle''}{ugSysCmdcdPage} in section \ugSysCmdcdNumber -\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} -in section \ugSysCmdcompileNumber -\downlink{``\ugSysCmdframeTitle''}{ugSysCmdframePage} -in section \ugSysCmdframeNumber -\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} -in section \ugSysCmdsetNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdlispTitle}{)lisp} -\newcommand{\ugSysCmdlispNumber}{B.15.} - -@ -\subsection{B.15. )lisp} -\label{ugSysCmdlispPage} -\begin{itemize} -\item ugSysCmdsystemPage \ref{ugSysCmdsystemPage} on -page~\pageref{ugSysCmdsystemPage} -\item ugSysCmdbootPage \ref{ugSysCmdbootPage} on -page~\pageref{ugSysCmdbootPage} -\item ugSysCmdfinPage \ref{ugSysCmdfinPage} on -page~\pageref{ugSysCmdfinPage} -\end{itemize} -\index{pages!ugSysCmdlispPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdlispPage} -\index{ugSysCmdlispPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdlispPage}{B.15. )lisp} -\beginscroll - - -\par\noindent{\bf User Level Required:} development - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item {\tt )lisp} {\it\lanb{}lispExpression\ranb{}} -\end{items} - -\par\noindent{\bf Command Description:} - -This command is used by Axiom system developers to have single -expressions evaluated by the \Lisp{} system on which -Axiom is built. -The {\it lispExpression} is read by the \Lisp{} reader and -evaluated. -If this expression is not complete (unbalanced parentheses, say), the reader -will wait until a complete expression is entered. - -Since this command is only useful for evaluating single expressions, the -{\tt )fin} -command may be used to drop out of Axiom into \Lisp{}. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdsystemTitle''}{ugSysCmdsystemPage} -in section \ugSysCmdsystemNumber -\downlink{``\ugSysCmdbootTitle''}{ugSysCmdbootPage} -in section \ugSysCmdbootNumber -\downlink{``\ugSysCmdfinTitle''}{ugSysCmdfinPage} -in section \ugSysCmdfinNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdloadTitle}{)load} -\newcommand{\ugSysCmdloadNumber}{B.16.} - -@ -\subsection{B.16. )load} -\label{ugSysCmdloadPage} -\index{pages!ugSysCmdloadPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdloadPage} -\index{ugSysCmdloadPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdloadPage}{B.16. )load} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -%% BEGIN OBSOLETE -%% END OBSOLETE - -\par\noindent{\bf Command Description:} - -This command is obsolete. Use \spadcmd{)library} instead. - -%% BEGIN OBSOLETE - -% -% -% -% - -%% END OBSOLETE - - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdltraceTitle}{)ltrace} -\newcommand{\ugSysCmdltraceNumber}{B.17.} - -@ -\subsection{B.17. )ltrace} -\label{ugSysCmdltracePage} -\begin{itemize} -\item ugSysCmdbootPage \ref{ugSysCmdbootPage} on -page~\pageref{ugSysCmdbootPage} -\item ugSysCmdlispPage \ref{ugSysCmdlispPage} on -page~\pageref{ugSysCmdlispPage} -\item ugSysCmdtracePage \ref{ugSysCmdtracePage} on -page~\pageref{ugSysCmdtracePage} -\end{itemize} -\index{pages!ugSysCmdltracePage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdltracePage} -\index{ugSysCmdltracePage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdltracePage}{B.17. )ltrace} -\beginscroll - - -\par\noindent{\bf User Level Required:} development - -\par\noindent{\bf Command Syntax:} - -This command has the same arguments as options as the -\spadcmd{)trace} command. - -\par\noindent{\bf Command Description:} - -This command is used by Axiom system developers to trace -\Lisp{} or -BOOT functions. -It is not supported for general use. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdbootTitle''}{ugSysCmdbootPage} -in section \ugSysCmdbootNumber -\downlink{``\ugSysCmdlispTitle''}{ugSysCmdlispPage} -in section \ugSysCmdlispNumber -\downlink{``\ugSysCmdtraceTitle''}{ugSysCmdtracePage} -in section \ugSysCmdtraceNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdpquitTitle}{)pquit} -\newcommand{\ugSysCmdpquitNumber}{B.18.} - -@ -\subsection{B.18. )pquit} -\label{ugSysCmdpquitPage} -\begin{itemize} -\item ugSysCmdfinPage \ref{ugSysCmdfinPage} on -page~\pageref{ugSysCmdfinPage} -\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on -page~\pageref{ugSysCmdhistoryPage} -\item ugSysCmdclosePage \ref{ugSysCmdclosePage} on -page~\pageref{ugSysCmdclosePage} -\item ugSysCmdquitPage \ref{ugSysCmdquitPage} on -page~\pageref{ugSysCmdquitPage} -\item ugSysCmdsystemPage \ref{ugSysCmdsystemPage} on -page~\pageref{ugSysCmdsystemPage} -\end{itemize} -\index{pages!ugSysCmdpquitPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdpquitPage} -\index{ugSysCmdpquitPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdpquitPage}{B.18. )pquit} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )pquit} -\end{items} - -\par\noindent{\bf Command Description:} - -This command is used to terminate Axiom and return to the -operating system. -Other than by redoing all your computations or by -using the {\tt )history )restore} -command to try to restore your working environment, -you cannot return to Axiom in the same state. - -{\tt )pquit} differs from the {\tt )quit} in that it always asks for -confirmation that you want to terminate Axiom (the ``p'' is for -``protected''). -When you enter the {\tt )pquit} command, Axiom responds -% -\centerline{{Please enter {\bf y} or {\bf yes} if you really want to leave the interactive }} -\centerline{{environment and return to the operating system:}} -% -If you respond with {\tt y} or {\tt yes}, you will see the message -% -\centerline{{You are now leaving the Axiom interactive environment. }} -\centerline{{Issue the command {\bf axiom} to the operating system to start a new session.}} -% -and Axiom will terminate and return you to the operating -system (or the environment from which you invoked the system). -If you responded with something other than {\tt y} or {\tt yes}, then -the message -% -\centerline{{You have chosen to remain in the Axiom interactive environment.}} -% -will be displayed and, indeed, Axiom would still be running. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdfinTitle''}{ugSysCmdfinPage} -in section \ugSysCmdfinNumber -\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} -in section \ugSysCmdhistoryNumber -\downlink{``\ugSysCmdcloseTitle''}{ugSysCmdclosePage} -in section \ugSysCmdcloseNumber -\downlink{``\ugSysCmdquitTitle''}{ugSysCmdquitPage} -in section \ugSysCmdquitNumber -\downlink{``\ugSysCmdsystemTitle''}{ugSysCmdsystemPage} -in section \ugSysCmdsystemNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdquitTitle}{)quit} -\newcommand{\ugSysCmdquitNumber}{B.19.} - -@ -\subsection{B.19. )quit} -\label{ugSysCmdquitPage} -\begin{itemize} -\item ugSysCmdfinPage \ref{ugSysCmdfinPage} on -page~\pageref{ugSysCmdfinPage} -\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on -page~\pageref{ugSysCmdhistoryPage} -\item ugSysCmdclosePage \ref{ugSysCmdclosePage} on -page~\pageref{ugSysCmdclosePage} -\item ugSysCmdpquitPage \ref{ugSysCmdpquitPage} on -page~\pageref{ugSysCmdpquitPage} -\item ugSysCmdsystemPage \ref{ugSysCmdsystemPage} on -page~\pageref{ugSysCmdsystemPage} -\end{itemize} -\index{pages!ugSysCmdquitPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdquitPage} -\index{ugSysCmdquitPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdquitPage}{B.19. )quit} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )quit} -\item{\tt )set quit protected \vertline{} unprotected} -\end{items} - -\par\noindent{\bf Command Description:} - -This command is used to terminate Axiom and return to the -operating system. -Other than by redoing all your computations or by -using the {\tt )history )restore} -command to try to restore your working environment, -you cannot return to Axiom in the same state. - -{\tt )quit} differs from the {\tt )pquit} in that it asks for -confirmation only if the command -\begin{verbatim} -)set quit protected -\end{verbatim} -has been issued. -Otherwise, {\tt )quit} will make Axiom terminate and return you -to the operating system (or the environment from which you invoked the -system). - -The default setting is {\tt )set quit protected} so that {\tt )quit} -and {\tt )pquit} behave in the same way. -If you do issue -\begin{verbatim} -)set quit unprotected -\end{verbatim} -we -suggest that you do not (somehow) assign {\tt )quit} to be -executed when you press, say, a function key. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdfinTitle''}{ugSysCmdfinPage} -in section \ugSysCmdfinNumber -\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} -in section \ugSysCmdhistoryNumber -\downlink{``\ugSysCmdcloseTitle''}{ugSysCmdclosePage} -in section \ugSysCmdcloseNumber -\downlink{``\ugSysCmdpquitTitle''}{ugSysCmdpquitPage} -in section \ugSysCmdpquitNumber -\downlink{``\ugSysCmdsystemTitle''}{ugSysCmdsystemPage} -in section \ugSysCmdsystemNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdreadTitle}{)read} -\newcommand{\ugSysCmdreadNumber}{B.20.} - -@ -\subsection{B.20. )read} -\label{ugSysCmdreadPage} -\begin{itemize} -\item ugInOutInPage \ref{ugInOutInPage} on -page~\pageref{ugInOutInPage} -\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on -page~\pageref{ugSysCmdcompilePage} -\item ugSysCmdeditPage \ref{ugSysCmdeditPage} on -page~\pageref{ugSysCmdeditPage} -\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on -page~\pageref{ugSysCmdhistoryPage} -\end{itemize} -\index{pages!ugSysCmdreadPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdreadPage} -\index{ugSysCmdreadPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdreadPage}{B.20. )read} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item {\tt )read} {\it \lanb{}fileName\ranb{}} -\item {\tt )read} {\it \lanb{}fileName\ranb{}} \lanb{}{\tt )quiet}\ranb{} \lanb{}{\tt )ifthere}\ranb{} -\end{items} -\par\noindent{\bf Command Description:} - -This command is used to read {\bf .input} files into Axiom. -The command -\begin{verbatim} -)read matrix.input -\end{verbatim} -will read the contents of the file {\bf matrix.input} into Axiom. The -``.input'' file extension is optional. See -\downlink{``\ugInOutInTitle''}{ugInOutInPage} in Section -\ugInOutInNumber\ignore{ugInOutIn} for more information about {\bf -.input} files. - -This command remembers the previous file you edited, read or compiled. -If you do not specify a file name, the previous file will be read. - -The {\tt )ifthere} option checks to see whether the {\bf .input} file -exists. If it does not, the {\tt )read} command does nothing. If you -do not use this option and the file does not exist, you are asked to -give the name of an existing {\bf .input} file. - -The {\tt )quiet} option suppresses output while the file is being read. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} -in section \ugSysCmdcompileNumber -\downlink{``\ugSysCmdeditTitle''}{ugSysCmdeditPage} -in section \ugSysCmdeditNumber -\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} -in section \ugSysCmdhistoryNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdsetTitle}{)set} -\newcommand{\ugSysCmdsetNumber}{B.21.} - -@ -\subsection{B.21. )set} -\label{ugSysCmdsetPage} -\begin{itemize} -\item ugSysCmdquitPage \ref{ugSysCmdquitPage} on -page~\pageref{ugSysCmdquitPage} -\end{itemize} -\index{pages!ugSysCmdsetPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdsetPage} -\index{ugSysCmdsetPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdsetPage}{B.21. )set} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item {\tt )set} -\item {\tt )set} {\it label1 \lanb{}... labelN\ranb{}} -\item {\tt )set} {\it label1 \lanb{}... labelN\ranb{} newValue} -\end{items} -\par\noindent{\bf Command Description:} - -The {\tt )set} command is used to view or set system variables that -control what messages are displayed, the type of output desired, the -status of the history facility, the way Axiom user functions are -cached, and so on. -Since this collection is very large, we will not discuss them here. -Rather, we will show how the facility is used. -We urge you to explore the {\tt )set} options to familiarize yourself -with how you can modify your Axiom working environment. -There is a \HyperName{} version of this same facility available from the -main \HyperName{} menu. -\texht{}{Click \lispmemolink{here}{(|htSystemVariables|)} to go to it.} - -The {\tt )set} command is command-driven with a menu display. -It is tree-structured. -To see all top-level nodes, issue {\tt )set} by itself. -\begin{verbatim} -)set -\end{verbatim} -Variables with values have them displayed near the right margin. -Subtrees of selections have ``{\tt ...}'' -displayed in the value field. -For example, there are many kinds of messages, so issue -{\tt )set message} to see the choices. -\begin{verbatim} -)set message -\end{verbatim} -The current setting for the variable that displays -whether computation times -are displayed is visible in the menu displayed by the last command. -To see more information, issue -\begin{verbatim} -)set message time -\end{verbatim} -This shows that time printing is on now. -To turn it off, issue -\begin{verbatim} -)set message time off -\end{verbatim} - -As noted above, not all settings have so many qualifiers. -For example, to change the {\tt )quit} command to being unprotected -(that is, you will not be prompted for verification), you need only issue -\begin{verbatim} -)set quit unprotected -\end{verbatim} - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdquitTitle''}{ugSysCmdquitPage} -in section \ugSysCmdquitNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdshowTitle}{)show} -\newcommand{\ugSysCmdshowNumber}{B.22.} - -@ -\subsection{B.22. )show} -\label{ugSysCmdshowPage} -\begin{itemize} -\item ugSysCmddisplayPage \ref{ugSysCmddisplayPage} on -page~\pageref{ugSysCmddisplayPage} -\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on -page~\pageref{ugSysCmdsetPage} -\item ugSysCmdwhatPage \ref{ugSysCmdwhatPage} on -page~\pageref{ugSysCmdwhatPage} -\end{itemize} -\index{pages!ugSysCmdshowPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdshowPage} -\index{ugSysCmdshowPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdshowPage}{B.22. )show} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )show {\it nameOrAbbrev}} -\item{\tt )show {\it nameOrAbbrev} )operations} -\item{\tt )show {\it nameOrAbbrev} )attributes} -\end{items} - -\par\noindent{\bf Command Description:} -This command displays information about Axiom -domain, package and category {\it constructors}. -If no options are given, the {\tt )operations} option is assumed. -For example, -\begin{verbatim} -)show POLY -)show POLY )operations -)show Polynomial -)show Polynomial )operations -\end{verbatim} -each display basic information about the -\spadtype{Polynomial} domain constructor and then provide a -listing of operations. -Since \spadtype{Polynomial} requires a \spadtype{Ring} (for example, -\spadtype{Integer}) as argument, the above commands all refer -to a unspecified ring {\tt R}. -In the list of operations, \spadSyntax{\$} means -\spadtype{Polynomial(R)}. - -The basic information displayed includes the {\it signature} -of the constructor (the name and arguments), the constructor -{\it abbreviation}, the {\it exposure status} of the constructor, and the -name of the {\it library source file} for the constructor. - -If operation information about a specific domain is wanted, -the full or abbreviated domain name may be used. -For example, -\begin{verbatim} -)show POLY INT -)show POLY INT )operations -)show Polynomial Integer -)show Polynomial Integer )operations -\end{verbatim} -are among the combinations that will -display the operations exported by the -domain \spadtype{Polynomial(Integer)} (as opposed to the general -{\it domain constructor} \spadtype{Polynomial}). -Attributes may be listed by using the {\tt )attributes} option. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmddisplayTitle''}{ugSysCmddisplayPage} -in section \ugSysCmddisplayNumber -\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} -in section \ugSysCmdsetNumber -\downlink{``\ugSysCmdwhatTitle''}{ugSysCmdwhatPage} -in section \ugSysCmdwhatNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdspoolTitle}{)spool} -\newcommand{\ugSysCmdspoolNumber}{B.23.} - -@ -\subsection{B.23. )spool} -\label{ugSysCmdspoolPage} -\begin{itemize} -\item ugSysCmdcdPage \ref{ugSysCmdcdPage} on -page~\pageref{ugSysCmdcdPage} -\end{itemize} -\index{pages!ugSysCmdspoolPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdspoolPage} -\index{ugSysCmdspoolPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdspoolPage}{B.23. )spool} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )spool} \lanb{}{\it fileName}\ranb{} -\item{\tt )spool} -\end{items} - -\par\noindent{\bf Command Description:} - -This command is used to save {\it (spool)} all Axiom input and output -into a file, called a {\it spool file.} -You can only have one spool file active at a time. -To start spool, issue this command with a filename. For example, -\begin{verbatim} -)spool integrate.out -\end{verbatim} -To stop spooling, issue {\tt )spool} with no filename. - -If the filename is qualified with a directory, then the output will -be placed in that directory. -If no directory information is given, the spool file will be placed in the -{\it current directory.} -The current directory is the directory from which you started -Axiom or is the directory you specified using the -{\tt )cd} command. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdcdTitle''}{ugSysCmdcdPage} in section \ugSysCmdcdNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdsynonymTitle}{)synonym} -\newcommand{\ugSysCmdsynonymNumber}{B.24.} - -@ -\subsection{B.24. )synonym} -\label{ugSysCmdsynonymPage} -\begin{itemize} -\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on -page~\pageref{ugSysCmdsetPage} -\item ugSysCmdwhatPage \ref{ugSysCmdwhatPage} on -page~\pageref{ugSysCmdwhatPage} -\end{itemize} -\index{pages!ugSysCmdsynonymPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdsynonymPage} -\index{ugSysCmdsynonymPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdsynonymPage}{B.24. )synonym} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )synonym} -\item{\tt )synonym} {\it synonym fullCommand} -\item{\tt )what synonyms} -\end{items} - -\par\noindent{\bf Command Description:} - -This command is used to create short synonyms for system command expressions. -For example, the following synonyms might simplify commands you often -use. -\begin{verbatim} -)synonym save history )save -)synonym restore history )restore -)synonym mail system mail -)synonym ls system ls -)synonym fortran set output fortran -\end{verbatim} -Once defined, synonyms can be -used in place of the longer command expressions. -Thus -\begin{verbatim} -)fortran on -\end{verbatim} -is the same as the longer -\begin{verbatim} -)set fortran output on -\end{verbatim} -To list all defined synonyms, issue either of -\begin{verbatim} -)synonyms -)what synonyms -\end{verbatim} -To list, say, all synonyms that contain the substring -``{\tt ap}'', issue -\begin{verbatim} -)what synonyms ap -\end{verbatim} - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} -in section \ugSysCmdsetNumber -\downlink{``\ugSysCmdwhatTitle''}{ugSysCmdwhatPage} -in section \ugSysCmdwhatNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdsystemTitle}{)system} -\newcommand{\ugSysCmdsystemNumber}{B.25.} - -@ -\subsection{B.25. )system} -\label{ugSysCmdsystemPage} -\begin{itemize} -\item ugSysCmdbootPage \ref{ugSysCmdbootPage} on -page~\pageref{ugSysCmdbootPage} -\item ugSysCmdfinPage \ref{ugSysCmdfinPage} on -page~\pageref{ugSysCmdfinPage} -\item ugSysCmdlispPage \ref{ugSysCmdlispPage} on -page~\pageref{ugSysCmdlispPage} -\item ugSysCmdpquitPage \ref{ugSysCmdpquitPage} on -page~\pageref{ugSysCmdpquitPage} -\item ugSysCmdquitPage \ref{ugSysCmdquitPage} on -page~\pageref{ugSysCmdquitPage} -\end{itemize} -\index{pages!ugSysCmdsystemPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdsystemPage} -\index{ugSysCmdsystemPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdsystemPage}{B.25. )system} -\beginscroll - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )system} {\it cmdExpression} -\end{items} - -\par\noindent{\bf Command Description:} - -This command may be used to issue commands to the operating system while -remaining in Axiom. -The {\it cmdExpression} is passed to the operating system for -execution. - -To get an operating system shell, issue, for example, -\spadcmd{)system sh}. -When you enter the key combination, -\texht{\fbox{\bf Ctrl}--\fbox{\bf D}}{{\bf Ctrl-D}} -(pressing and holding the -\texht{\fbox{\bf Ctrl}}{{\bf Ctrl}} key and then pressing the -\texht{\fbox{\bf D}}{{\bf D}} key) -the shell will terminate and you will return to Axiom. -We do not recommend this way of creating a shell because -\Lisp{} may field some interrupts instead of the shell. -If possible, use a shell running in another window. - -If you execute programs that misbehave you may not be able to return to -Axiom. -If this happens, you may have no other choice than to restart -Axiom and restore the environment via {\tt )history )restore}, if -possible. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdbootTitle''}{ugSysCmdbootPage} -in section \ugSysCmdbootNumber -\downlink{``\ugSysCmdfinTitle''}{ugSysCmdfinPage} -in section \ugSysCmdfinNumber -\downlink{``\ugSysCmdlispTitle''}{ugSysCmdlispPage} -in section \ugSysCmdlispNumber -\downlink{``\ugSysCmdpquitTitle''}{ugSysCmdpquitPage} -in section \ugSysCmdpquitNumber -\downlink{``\ugSysCmdquitTitle''}{ugSysCmdquitPage} -in section \ugSysCmdquitNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdtraceTitle}{)trace} -\newcommand{\ugSysCmdtraceNumber}{B.26.} - -@ -\subsection{B.26. )trace} -\label{ugSysCmdtracePage} -\begin{itemize} -\item ugSysCmdcompilePage \ref{ugSysCmdcompilePage} on -page~\pageref{ugSysCmdcompilePage} -\item ugSysCmdbootPage \ref{ugSysCmdbootPage} on -page~\pageref{ugSysCmdbootPage} -\item ugSysCmdlispPage \ref{ugSysCmdlispPage} on -page~\pageref{ugSysCmdlispPage} -\item ugSysCmdltracePage \ref{ugSysCmdltracePage} on -page~\pageref{ugSysCmdltracePage} -\end{itemize} -\index{pages!ugSysCmdtracePage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdtracePage} -\index{ugSysCmdtracePage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdtracePage}{B.26. )trace} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )trace} -\item{\tt )trace )off} - -\item{\tt )trace} {\it function \lanb{}options\ranb{}} -\item{\tt )trace} {\it constructor \lanb{}options\ranb{}} -\item{\tt )trace} {\it domainOrPackage \lanb{}options\ranb{}} -\end{items} -% -where options can be one or more of -% -\begin{items} -\item{\tt )after} {\it S-expression} -\item{\tt )before} {\it S-expression} -\item{\tt )break after} -\item{\tt )break before} -\item{\tt )cond} {\it S-expression} -\item{\tt )count} -\item{\tt )count} {\it n} -\item{\tt )depth} {\it n} -\item{\tt )local} {\it op1 \lanb{}... opN\ranb{}} -\item{\tt )nonquietly} -\item{\tt )nt} -\item{\tt )off} -\item{\tt )only} {\it listOfDataToDisplay} -\item{\tt )ops} -\item{\tt )ops} {\it op1 \lanb{}... opN \ranb{}} -\item{\tt )restore} -\item{\tt )stats} -\item{\tt )stats reset} -\item{\tt )timer} -\item{\tt )varbreak} -\item{\tt )varbreak} {\it var1 \lanb{}... varN \ranb{}} -\item{\tt )vars} -\item{\tt )vars} {\it var1 \lanb{}... varN \ranb{}} -\item{\tt )within} {\it executingFunction} -\end{items} - -\par\noindent{\bf Command Description:} - -This command is used to trace the execution of functions that make -up the Axiom system, functions defined by users, -and functions from the system library. -Almost all options are available for each type of function but -exceptions will be noted below. - -To list all functions, constructors, domains and packages that are -traced, simply issue -\begin{verbatim} -)trace -\end{verbatim} -To untrace everything that is traced, issue -\begin{verbatim} -)trace )off -\end{verbatim} -When a function is traced, the default system action is to display -the arguments to the function and the return value when the -function is exited. -Note that if a function is left via an action such as a {\tt THROW}, no -return value will be displayed. -Also, optimization of tail recursion may decrease the number of -times a function is actually invoked and so may cause less trace -information to be displayed. -Other information can be displayed or collected when a function is -traced and this is controlled by the various options. -Most options will be of interest only to Axiom system -developers. -If a domain or package is traced, the default action is to trace -all functions exported. - -Individual interpreter, lisp or boot -functions can be traced by listing their names after -{\tt )trace}. -Any options that are present must follow the functions to be -traced. -\begin{verbatim} -)trace f -\end{verbatim} -traces the function {\tt f}. -To untrace {\tt f}, issue -\begin{verbatim} -)trace f )off -\end{verbatim} -Note that if a function name contains a special character, it will -be necessary to escape the character with an underscore -% -\begin{verbatim} -)trace _/D_,1 -\end{verbatim} -% -To trace all domains or packages that are or will be created from a particular -constructor, give the constructor name or abbreviation after -{\tt )trace}. -% -\begin{verbatim} -)trace MATRIX -)trace List Integer -\end{verbatim} -% -The first command traces all domains currently instantiated with -\spadtype{Matrix}. -If additional domains are instantiated with this constructor -(for example, if you have used \spadtype{Matrix(Integer)} and -\spadtype{Matrix(Float)}), they will be automatically traced. -The second command traces \spadtype{List(Integer)}. -It is possible to trace individual functions in a domain or -package. -See the {\tt )ops} option below. - -The following are the general options for the {\tt )trace} -command. - -%!! system command parser doesn't treat general s-expressions correctly, -%!! I recommand not documenting )after )before and )cond -\indent{0} -\beginitems -%\item[{\tt )after} {\it S-expression}] -%causes the given \Lisp{} {\it S-expression} to be -%executed after exiting the traced function. - -%\item[{\tt )before} {\it S-expression}] -%causes the given \Lisp{} {\it S-expression} to be -%executed before entering the traced function. - -\item[{\tt )break after}] -causes a \Lisp{} break loop to be entered after -exiting the traced function. - -\item[{\tt )break before}] -causes a \Lisp{} break loop to be entered before -entering the traced function. - -\item[{\tt )break}] -is the same as \spadcmd{)break before}. - -%\item[{\tt )cond} {\it S-expression}] -%causes trace information to be shown only if the given -%\Lisp{} {\it S-expression} evaluates to non-NIL. For -%example, the following command causes the system function -%{\tt resolveTT} to be traced but to have the information -%displayed only if the value of the variable -%{\tt \$reportBottomUpFlag} is non-NIL. -%\begin{verbatim} -%)trace resolveTT )cond \_\$reportBottomUpFlag} -%\end{verbatim} - -\item[{\tt )count}] -causes the system to keep a count of the number of times the -traced function is entered. The total can be displayed with -{\tt )trace )stats} and cleared with {\tt )trace )stats reset}. - -\item[{\tt )count} {\it n}] -causes information about the traced function to be displayed for -the first {\it n} executions. After the \eth{\it n} execution, the -function is untraced. - -\item[{\tt )depth} {\it n}] -causes trace information to be shown for only {\it n} levels of -recursion of the traced function. The command -\begin{verbatim} -)trace fib )depth 10 -\end{verbatim} -will cause the display of only 10 levels of trace information for -the recursive execution of a user function \userfun{fib}. - -\item[{\tt )math}] -causes the function arguments and return value to be displayed in the -Axiom monospace two-dimensional math format. - -\item[{\tt )nonquietly}] -causes the display of additional messages when a function is -traced. - -\item[{\tt )nt}] -This suppresses all normal trace information. This option is -useful if the {\tt )count} or {\tt )timer} options are used and -you are interested in the statistics but not the function calling -information. - -\item[{\tt )off}] -causes untracing of all or specific functions. Without an -argument, all functions, constructors, domains and packages are -untraced. Otherwise, the given functions and other objects -are untraced. To -immediately retrace the untraced functions, issue {\tt )trace -)restore}. - -\item[{\tt )only} {\it listOfDataToDisplay}] -causes only specific trace information to be shown. The items are -listed by using the following abbreviations: -\indent{0} -\beginitems -\item[a] display all arguments -\item[v] display return value -\item[1] display first argument -\item[2] display second argument -\item[15] display the 15th argument, and so on -\enditems -\indent{0} -\enditems -\indent{0} -\indent{0} -\beginitems - -\item[{\tt )restore}] -causes the last untraced functions to be retraced. If additional -options are present, they are added to those previously in effect. - -\item[{\tt )stats}] -causes the display of statistics collected by the use of the -{\tt )count} and {\tt )timer} options. - -\item[{\tt )stats reset}] -resets to 0 the statistics collected by the use of the -{\tt )count} and {\tt )timer} options. - -\item[{\tt )timer}] -causes the system to keep a count of execution times for the -traced function. The total can be displayed with {\tt )trace -)stats} and cleared with {\tt )trace )stats reset}. - -%!! only for lisp, boot, may not work in any case, recommend removing -%\item[{\tt )varbreak}] -%causes a \Lisp{} break loop to be entered after -%the assignment to any variable in the traced function. - -\item[{\tt )varbreak} {\it var1 \lanb{}... varN\ranb{}}] -causes a \Lisp{} break loop to be entered after -the assignment to any of the listed variables in the traced -function. - -\item[{\tt )vars}] -causes the display of the value of any variable after it is assigned -in the traced function. Note that library code must have been -compiled (see -\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} in Section -\ugSysCmdcompileNumber\ignore{ugSysCmdcompile}) using the {\tt -)vartrace} option in order to support this option. - -\item[{\tt )vars} {\it var1 \lanb{}... varN\ranb{}}] -causes the display of the value of any of the specified variables -after they are assigned in the traced function. Note that library -code must have been compiled (see -\downlink{``\ugSysCmdcompileTitle''}{ugSysCmdcompilePage} in Section -\ugSysCmdcompileNumber\ignore{ugSysCmdcompile}) using the {\tt -)vartrace} option in order to support this option. - -\item[{\tt )within} {\it executingFunction}] -causes the display of trace information only if the traced -function is called when the given {\it executingFunction} is running. -\enditems -\indent{0} - -The following are the options for tracing constructors, domains -and packages. - -\indent{0} -\beginitems -\item[{\tt )local} {\it \lanb{}op1 \lanb{}... opN\ranb{}\ranb{}}] -causes local functions of the constructor to be traced. Note that -to untrace an individual local function, you must use the fully -qualified internal name, using the escape character -\spadSyntax{\_} before the semicolon. -\begin{verbatim} -)trace FRAC )local -)trace FRAC_;cancelGcd )off -\end{verbatim} - -\item[{\tt )ops} {\it op1 \lanb{}... opN\ranb{}}] -By default, all operations from a domain or package are traced -when the domain or package is traced. This option allows you to -specify that only particular operations should be traced. The -command -% -\begin{verbatim} -)trace Integer )ops min max _+ _- -\end{verbatim} -% -traces four operations from the domain \spadtype{Integer}. Since -{\tt +} and {\tt -} are special -characters, it is necessary -to escape them with an underscore. -\enditems -\indent{0} - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdbootTitle''}{ugSysCmdbootPage} -in section \ugSysCmdbootNumber -\downlink{``\ugSysCmdlispTitle''}{ugSysCmdlispPage} -in section \ugSysCmdlispNumber -\downlink{``\ugSysCmdltraceTitle''}{ugSysCmdltracePage} -in section \ugSysCmdltraceNumber - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugSysCmdundoTitle}{)undo} -\newcommand{\ugSysCmdundoNumber}{B.27.} - -@ -\subsection{B.27. )undo} -\label{ugSysCmdundoPage} -\begin{itemize} -\item ugSysCmdhistoryPage \ref{ugSysCmdhistoryPage} on -page~\pageref{ugSysCmdhistoryPage} -\end{itemize} -\index{pages!ugSysCmdundoPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdundoPage} -\index{ugSysCmdundoPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdundoPage}{B.27. )undo} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )undo} -\item{\tt )undo} {\it integer} -\item{\tt )undo} {\it integer \lanb{}option\ranb{}} -\item{\tt )undo} {\tt )redo} -\end{items} -% -where {\it option} is one of -% -\begin{items} -\item{\tt )after} -\item{\tt )before} -\end{items} - -\par\noindent{\bf Command Description:} - -This command is used to -restore the state of the user environment to an earlier -point in the interactive session. -The argument of an {\tt )undo} is an integer which must designate some -step number in the interactive session. - -\begin{verbatim} -)undo n -)undo n )after -\end{verbatim} -These commands return the state of the interactive -environment to that immediately after step {\tt n}. -If {\tt n} is a positive number, then {\tt n} refers to step nummber -{\tt n}. If {\tt n} is a negative number, it refers to the \eth{\tt n} -previous command (that is, undoes the effects of the last \smath{-n} -commands). - -A {\tt )clear all} resets the {\tt )undo} facility. -Otherwise, an {\tt )undo} undoes the effect of {\tt )clear} with -options {\tt properties}, {\tt value}, and {\tt mode}, and -that of a previous {\tt undo}. -If any such system commands are given between steps \smath{n} and -\smath{n + 1} (\smath{n > 0}), their effect is undone -for {\tt )undo m} for any \texht{\smath{0 < m \leq n}.}{0 < m <= n}. - -The command {\tt )undo} is equivalent to {\tt )undo -1} (it undoes -the effect of the previous user expression). -The command {\tt )undo 0} undoes any of the above system commands -issued since the last user expression. - -\begin{verbatim} -)undo n )before -\end{verbatim} -This command returns the state of the interactive -environment to that immediately before step {\tt n}. -Any {\tt )undo} or {\tt )clear} system commands -given before step {\tt n} will not be undone. - -\begin{verbatim} -)undo )redo -\end{verbatim} -This command reads the file {\tt redo.input}. -created by the last {\tt )undo} command. -This file consists of all user input lines, excluding those -backtracked over due to a previous {\tt )undo}. - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmdhistoryTitle''}{ugSysCmdhistoryPage} -in section \ugSysCmdhistoryNumber -The command {\tt )history )write} will eliminate the ``undone'' command -lines of your program. - -\endscroll +\blankline +\end{scroll} \autobuttons +\downlink{Decision Agents}{UXANNADec} \end{page} @ -<>= -\newcommand{\ugSysCmdwhatTitle}{)what} -\newcommand{\ugSysCmdwhatNumber}{B.28.} - -@ -\subsection{B.28. )what} -\label{ugSysCmdwhatPage} +\subsection{Decision Agents} +\label{UXANNADec} \begin{itemize} -\item ugSysCmddisplayPage \ref{ugSysCmddisplayPage} on -page~\pageref{ugSysCmddisplayPage} -\item ugSysCmdsetPage \ref{ugSysCmdsetPage} on -page~\pageref{ugSysCmdsetPage} -\item ugSysCmdshowPage \ref{ugSysCmdshowPage} on -page~\pageref{ugSysCmdshowPage} +\item UXANNAInfer \ref{UXANNAInfer} on page~\pageref{UXANNAInfer} +\item UXANNAMeth \ref{UXANNAMeth} on page~\pageref{UXANNAMeth} +\item UXANNAMeas \ref{UXANNAMeas} on page~\pageref{UXANNAMeas} +\item UXANNAAgent \ref{UXANNAAgent} on page~\pageref{UXANNAAgent} \end{itemize} -\index{pages!ugSysCmdwhatPage!ug16.ht} -\index{ug16.ht!pages!ugSysCmdwhatPage} -\index{ugSysCmdwhatPage!ug16.ht!pages} -<>= -\begin{page}{ugSysCmdwhatPage}{B.28. )what} -\beginscroll - - -\par\noindent{\bf User Level Required:} interpreter - -\par\noindent{\bf Command Syntax:} -\begin{items} -\item{\tt )what categories} {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} -\item{\tt )what commands } {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} -\item{\tt )what domains } {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} -\item{\tt )what operations} {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} -\item{\tt )what packages } {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} -\item{\tt )what synonym } {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} -\item{\tt )what things } {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} -\item{\tt )apropos } {\it pattern1} \lanb{}{\it pattern2 ...\ranb{}} -\end{items} - -\par\noindent{\bf Command Description:} - -This command is used to display lists of things in the system. The -patterns are all strings and, if present, restrict the contents of the -lists. Only those items that contain one or more of the strings as -substrings are displayed. For example, -\begin{verbatim} -)what synonym -\end{verbatim} -displays all command synonyms, -\begin{verbatim} -)what synonym ver -\end{verbatim} -displays all command synonyms containing the substring ``{\tt ver}'', -\begin{verbatim} -)what synonym ver pr -\end{verbatim} -displays all command synonyms -containing the substring ``{\tt ver}'' or the substring -``{\tt pr}''. -Output similar to the following will be displayed -\begin{verbatim} ----------------- System Command Synonyms ----------------- - -user-defined synonyms satisfying patterns: - ver pr - - )apr ........................... )what things - )apropos ....................... )what things - )prompt ........................ )set message prompt - )version ....................... )lisp *yearweek* -\end{verbatim} - -Several other things can be listed with the {\tt )what} command: - -\indent{0} -\beginitems -\item[{\tt categories}] displays a list of category constructors. -\item[{\tt commands}] displays a list of system commands available at your -user-level. -Your user-level -is set via the {\tt )set userlevel} command. -To get a description of a particular command, such as ``{\tt )what}'', issue -{\tt )help what}. -\item[{\tt domains}] displays a list of domain constructors. -\item[{\tt operations}] displays a list of operations in the system library. -It is recommended that you qualify this command with one or -more patterns, as there are thousands of operations available. For -example, say you are looking for functions that involve computation of -eigenvalues. To find their names, try {\tt )what operations eig}. -A rather large list of operations is loaded into the workspace when -this command is first issued. This list will be deleted when you -clear the workspace via {\tt )clear all} or {\tt )clear completely}. -It will be re-created if it is needed again. -\item[{\tt packages}] displays a list of package constructors. -\item[{\tt synonym}] lists system command synonyms. -\item[{\tt things}] displays all of the above types for items containing -the pattern strings as substrings. -The command synonym {\tt )apropos} is equivalent to -{\tt )what things}. -\enditems -\indent{0} - -\par\noindent{\bf Also See:} -\downlink{``\ugSysCmddisplayTitle''}{ugSysCmddisplayPage} -in section \ugSysCmddisplayNumber -\downlink{``\ugSysCmdsetTitle''}{ugSysCmdsetPage} -in section \ugSysCmdsetNumber -\downlink{``\ugSysCmdshowTitle''}{ugSysCmdshowPage} -in section \ugSysCmdshowNumber - -\texht{\egroup}{} -\endscroll -\autobuttons -\end{page} - -@ -\section{ug21.ht} -<>= -\newcommand{\ugAppGraphicsTitle}{Programs for Axiom Images} -\newcommand{\ugAppGraphicsNumber}{G.} - -@ -\subsection{G. Programs for Axiom Images} -\label{ugAppGraphicsPage} -\index{pages!ugAppGraphicsPage!ug21.ht} -\index{ug21.ht!pages!ugAppGraphicsPage} -\index{ugAppGraphicsPage!ug21.ht!pages} -<>= -\begin{page}{ugAppGraphicsPage}{G. Programs for Axiom Images} -\beginscroll -% -This appendix contains the Axiom programs used to generate -the images in the \Gallery{} color insert of this book. -All these input files are included -with the Axiom system. -To produce the images -on page 6 of the \Gallery{} insert, for example, issue the command: -\begin{verbatim} -)read images6 -\end{verbatim} - -These images were produced on an IBM RS/6000 model 530 with a -standard color graphics adapter. The smooth shaded images -were made from X Window System screen dumps. -The remaining images were produced with Axiom-generated -PostScript output. The images were reproduced from slides made on an Agfa -ChromaScript PostScript interpreter with a Matrix Instruments QCR camera. - -\beginmenu - \menudownlink{{F.1. images1.input}}{ugFimagesOnePage} - \menudownlink{{F.2. images2.input}}{ugFimagesTwoPage} - \menudownlink{{F.3. images3.input}}{ugFimagesThreePage} - \menudownlink{{F.4. images5.input}}{ugFimagesFivePage} - \menudownlink{{F.5. images6.input}}{ugFimagesSixPage} - \menudownlink{{F.6. images7.input}}{ugFimagesSevenPage} - \menudownlink{{F.7. images8.input}}{ugFimagesEightPage} - \menudownlink{{F.8. conformal.input}}{ugFconformalPage} - \menudownlink{{F.9. tknot.input}}{ugFtknotPage} - \menudownlink{{F.10. ntube.input}}{ugFntubePage} - \menudownlink{{F.11. dhtri.input}}{ugFdhtriPage} - \menudownlink{{F.12. tetra.input}}{ugFtetraPage} - \menudownlink{{F.13. antoine.input}}{ugFantoinePage} - \menudownlink{{F.14. scherk.input}}{ugFscherkPage} -\endmenu -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFimagesOneTitle}{images1.input} -\newcommand{\ugFimagesOneNumber}{G.1.} - -@ -\subsection{G.1. images1.input} -\label{ugFimagesOnePage} -\index{pages!ugFimagesOnePage!ug21.ht} -\index{ug21.ht!pages!ugFimagesOnePage} -\index{ugFimagesOnePage!ug21.ht!pages} -<>= -\begin{page}{ugFimagesOnePage}{G.1. images1.input} -\beginscroll - -\labelSpace{3pc} - - -\noindent -{\tt 1.\ \ \ )read\ tknot}\newline -{\tt 2.\ \ \ }\newline -{\tt 3.\ \ \ torusKnot(15,17,\ 0.1,\ 6,\ 700)}\newline - -\noindent - -\newpage -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFimagesTwoTitle}{images2.input} -\newcommand{\ugFimagesTwoNumber}{G.2.} - -@ -\subsection{G.2. images2.input} -\label{ugFimagesTwoPage} -\index{pages!ugFimagesTwoPage!ug21.ht} -\index{ug21.ht!pages!ugFimagesTwoPage} -\index{ugFimagesTwoPage!ug21.ht!pages} -<>= -\begin{page}{ugFimagesTwoPage}{G.2. images2.input} -\beginscroll - -These images illustrate how Newton's method converges when computing the -complex cube roots of 2. Each point in the \smath{(x,y)}-plane represents the -complex number \smath{x + iy,} which is given as a starting point for Newton's -method. The poles in these images represent bad starting values. -The flat areas are the regions of convergence to the three roots. - - -\noindent -{\tt 1.\ \ \ )read\ newton}\newline -{\tt 2.\ \ \ )read\ vectors}\newline -{\tt 3.\ \ \ f\ :=\ newtonStep(x**3\ -\ 2)}\newline -{\tt 4.\ \ \ }\newline - -\noindent - -The function \texht{$f^n$}{f**n} computes $n$ steps of Newton's method. - - -\noindent -{\tt 1.\ \ \ clipValue\ :=\ 4}\newline -{\tt 2.\ \ \ drawComplexVectorField(f**3,\ -3..3,\ -3..3)}\newline -{\tt 3.\ \ \ drawComplex(f**3,\ -3..3,\ -3..3)}\newline -{\tt 4.\ \ \ drawComplex(f**4,\ -3..3,\ -3..3)}\newline - -\noindent - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFimagesThreeTitle}{images3.input} -\newcommand{\ugFimagesThreeNumber}{G.3.} - -@ -\subsection{G.3. images3.input} -\label{ugFimagesThreePage} -\index{pages!ugFimagesThreePage!ug21.ht} -\index{ug21.ht!pages!ugFimagesThreePage} -\index{ugFimagesThreePage!ug21.ht!pages} -<>= -\begin{page}{ugFimagesThreePage}{G.3. images3.input} -\beginscroll - - -\noindent -{\tt 1.\ \ \ )r\ tknot}\newline -{\tt 2.\ \ \ for\ i\ in\ 0..4\ repeat\ torusKnot(2,\ 2\ +\ i/4,\ 0.5,\ 25,\ 250)}\newline - -\noindent - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFimagesFiveTitle}{images5.input} -\newcommand{\ugFimagesFiveNumber}{G.4.} - -@ -\subsection{G.4. images5.input} -\label{ugFimagesFivePage} -\index{pages!ugFimagesFivePage!ug21.ht} -\index{ug21.ht!pages!ugFimagesFivePage} -\index{ugFimagesFivePage!ug21.ht!pages} -<>= -\begin{page}{ugFimagesFivePage}{G.4. images5.input} -\beginscroll - -The parameterization of the Etruscan Venus is due to George Frances. - - -\noindent -{\tt 1.\ \ \ venus(a,r,steps)\ ==}\newline -{\tt 2.\ \ \ \ \ surf\ :=\ (u:DFLOAT,\ v:DFLOAT):\ Point\ DFLOAT\ +->}\newline -{\tt 3.\ \ \ \ \ \ \ cv\ :=\ cos(v)}\newline -{\tt 4.\ \ \ \ \ \ \ sv\ :=\ sin(v)}\newline -{\tt 5.\ \ \ \ \ \ \ cu\ :=\ cos(u)}\newline -{\tt 6.\ \ \ \ \ \ \ su\ :=\ sin(u)}\newline -{\tt 7.\ \ \ \ \ \ \ x\ :=\ r\ *\ cos(2*u)\ *\ cv\ +\ sv\ *\ cu}\newline -{\tt 8.\ \ \ \ \ \ \ y\ :=\ r\ *\ sin(2*u)\ *\ cv\ -\ sv\ *\ su}\newline -{\tt 9.\ \ \ \ \ \ \ z\ :=\ a\ *\ cv}\newline -{\tt 10.\ \ \ \ \ \ point\ [x,y,z]}\newline -{\tt 11.\ \ \ \ draw(surf,\ 0..\%pi,\ -\%pi..\%pi,\ var1Steps==steps,}\newline -{\tt 12.\ \ \ \ \ \ \ \ \ var2Steps==steps,\ title\ ==\ "Etruscan\ Venus")}\newline -{\tt 13.\ \ }\newline -{\tt 14.\ \ venus(5/2,\ 13/10,\ 50)}\newline - -\noindent - -The Figure-8 Klein Bottle -parameterization is from -``Differential Geometry and Computer Graphics'' by Thomas Banchoff, -in {\it Perspectives in Mathematics,} Anniversary of Oberwolfasch 1984, -Birkh\"{a}user-Verlag, Basel, pp. 43-60. - - -\noindent -{\tt 1.\ \ \ klein(x,y)\ ==}\newline -{\tt 2.\ \ \ \ \ cx\ :=\ cos(x)}\newline -{\tt 3.\ \ \ \ \ cy\ :=\ cos(y)}\newline -{\tt 4.\ \ \ \ \ sx\ :=\ sin(x)}\newline -{\tt 5.\ \ \ \ \ sy\ :=\ sin(y)}\newline -{\tt 6.\ \ \ \ \ sx2\ :=\ sin(x/2)}\newline -{\tt 7.\ \ \ \ \ cx2\ :=\ cos(x/2)}\newline -{\tt 8.\ \ \ \ \ sq2\ :=\ sqrt(2.0@DFLOAT)}\newline -{\tt 9.\ \ \ \ \ point\ [cx\ *\ (cx2\ *\ (sq2\ +\ cy)\ +\ (sx2\ *\ sy\ *\ cy)),\ \_}\newline -{\tt 10.\ \ \ \ \ \ \ \ \ \ \ sx\ *\ (cx2\ *\ (sq2\ +\ cy)\ +\ (sx2\ *\ sy\ *\ cy)),\ \_}\newline -{\tt 11.\ \ \ \ \ \ \ \ \ \ \ -sx2\ *\ (sq2\ +\ cy)\ +\ cx2\ *\ sy\ *\ cy]}\newline -{\tt 12.\ \ }\newline -{\tt 13.\ \ draw(klein,\ 0..4*\%pi,\ 0..2*\%pi,\ var1Steps==50,}\newline -{\tt 14.\ \ \ \ \ \ \ var2Steps==50,title=="Figure\ Eight\ Klein\ Bottle")}\newline - -\noindent - -The next two images are examples of generalized tubes. - - -\noindent -{\tt 15.\ \ )read\ ntube}\newline -{\tt 16.\ \ rotateBy(p,\ theta)\ ==}\newline -{\tt 17.\ \ \ \ c\ :=\ cos(theta)}\newline -{\tt 18.\ \ \ \ s\ :=\ sin(theta)}\newline -{\tt 19.\ \ \ \ point\ [p.1*c\ -\ p.2*s,\ p.1*s\ +\ p.2*c]}\newline -{\tt 20.\ \ }\newline -{\tt 21.\ \ bcircle\ t\ ==\ }\newline -{\tt 22.\ \ \ \ point\ [3*cos\ t,\ 3*sin\ t,\ 0]}\newline -{\tt 23.\ \ \ }\newline -{\tt 24.\ \ twist(u,\ t)\ ==}\newline -{\tt 25.\ \ \ \ theta\ :=\ 4*t}\newline -{\tt 26.\ \ \ \ p\ :=\ point\ [sin\ u,\ cos(u)/2]}\newline -{\tt 27.\ \ \ \ rotateBy(p,\ theta)}\newline -{\tt 28.\ \ \ }\newline -{\tt 29.\ \ ntubeDrawOpt(bcircle,\ twist,\ 0..2*\%pi,\ 0..2*\%pi,}\newline -{\tt 30.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ var1Steps\ ==\ 70,\ var2Steps\ ==\ 250)}\newline -{\tt 31.\ \ }\newline -{\tt 32.\ \ twist2(u,\ t)\ ==}\newline -{\tt 33.\ \ \ \ theta\ :=\ t}\newline -{\tt 34.\ \ \ \ p\ :=\ point\ [sin\ u,\ cos(u)]}\newline -{\tt 35.\ \ \ \ rotateBy(p,\ theta)}\newline -{\tt 36.\ \ }\newline -{\tt 37.\ \ cf(u,v)\ ==\ sin(21*u)}\newline -{\tt 38.\ \ }\newline -{\tt 39.\ \ ntubeDrawOpt(bcircle,\ twist2,\ 0..2*\%pi,\ 0..2*\%pi,}\newline -{\tt 40.\ \ \ \ colorFunction\ ==\ cf,\ var1Steps\ ==\ 168,}\newline -{\tt 41.\ \ \ \ var2Steps\ ==\ 126)}\newline - -\noindent - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFimagesSixTitle}{images6.input} -\newcommand{\ugFimagesSixNumber}{G.5.} - -@ -\subsection{G.5. images6.input} -\label{ugFimagesSixPage} -\index{pages!ugFimagesSixPage!ug21.ht} -\index{ug21.ht!pages!ugFimagesSixPage} -\index{ugFimagesSixPage!ug21.ht!pages} -<>= -\begin{page}{ugFimagesSixPage}{G.5. images6.input} -\beginscroll - -\labelSpace{3pc} - -\noindent -{\tt 1.\ \ \ gam(x,y)\ ==\ }\newline -{\tt 2.\ \ \ \ \ g\ :=\ Gamma\ complex(x,y)}\newline -{\tt 3.\ \ \ \ \ point\ [x,y,max(min(real\ g,\ 4),\ -4),\ argument\ g]}\newline -{\tt 4.\ \ \ }\newline -{\tt 5.\ \ \ }\newline -{\tt 6.\ \ \ draw(gam,\ -\%pi..\%pi,\ -\%pi..\%pi,\ }\newline -{\tt 7.\ \ \ \ \ \ \ \ title\ ==\ "Gamma(x\ +\ \%i*y)",\ \_}\newline -{\tt 8.\ \ \ \ \ \ \ \ var1Steps\ ==\ 100,\ var2Steps\ ==\ 100)}\newline -{\tt 9.\ \ \ }\newline -{\tt 10.\ \ b(x,y)\ ==\ Beta(x,y)}\newline -{\tt 11.\ \ }\newline -{\tt 12.\ \ draw(b,\ -3.1..3,\ -3.1\ ..\ 3,\ title\ ==\ "Beta(x,y)")}\newline -{\tt 13.\ \ }\newline -{\tt 14.\ \ atf(x,y)\ ==\ }\newline -{\tt 15.\ \ \ \ a\ :=\ atan\ complex(x,y)}\newline -{\tt 16.\ \ \ \ point\ [x,y,real\ a,\ argument\ a]}\newline -{\tt 17.\ \ }\newline -{\tt 18.\ \ draw(atf,\ -3.0..\%pi,\ -3.0..\%pi)}\newline - -\noindent - - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFimagesSevenTitle}{images7.input} -\newcommand{\ugFimagesSevenNumber}{G.6.} - -@ -\subsection{G.6. images7.input} -\label{ugFimagesSevenPage} -\index{pages!ugFimagesSevenPage!ug21.ht} -\index{ug21.ht!pages!ugFimagesSevenPage} -\index{ugFimagesSevenPage!ug21.ht!pages} -<>= -\begin{page}{ugFimagesSevenPage}{G.6. images7.input} -\beginscroll - -First we look at the conformal -map \texht{$z \mapsto z + 1/z$}{z +-> z + 1/z}. -\labelSpace{2pc} - -\noindent -{\tt 1.\ \ \ )read\ conformal}\newline -{\tt 2.\ \ \ }\newline -{\tt 3.\ \ \ }\newline -{\tt 4.\ \ \ f\ z\ ==\ z}\newline -{\tt 5.\ \ \ }\newline -{\tt 6.\ \ \ conformalDraw(f,\ -2..2,\ -2..2,\ 9,\ 9,\ "cartesian")}\newline -{\tt 7.\ \ \ }\newline -{\tt 8.\ \ \ f\ z\ ==\ z\ +\ 1/z}\newline -{\tt 9.\ \ \ \ }\newline -{\tt 10.\ \ conformalDraw(f,\ -2..2,\ -2..2,\ 9,\ 9,\ "cartesian")}\newline - -\noindent - -The map \texht{$z \mapsto -(z+1)/(z-1)$}{z +-> -(z+1)/(z-1)} maps -the unit disk to the right half-plane, as shown -on the Riemann sphere. - - -\noindent -{\tt 1.\ \ \ f\ z\ ==\ z}\newline -{\tt 2.\ \ \ }\newline -{\tt 3.\ \ \ riemannConformalDraw(f,0.1..0.99,0..2*\%pi,7,11,"polar")}\newline -{\tt 4.\ \ \ }\newline -{\tt 5.\ \ \ f\ z\ ==\ -(z+1)/(z-1)}\newline -{\tt 6.\ \ \ }\newline -{\tt 7.\ \ \ riemannConformalDraw(f,0.1..0.99,0..2*\%pi,7,11,"polar")}\newline -{\tt 8.\ \ \ }\newline -{\tt 9.\ \ \ riemannSphereDraw(-4..4,\ -4..4,\ 7,\ 7,\ "cartesian")}\newline - -\noindent - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFimagesEightTitle}{images8.input} -\newcommand{\ugFimagesEightNumber}{G.7.} - -@ -\subsection{G.7. images8.input} -\label{ugFimagesEightPage} -\index{pages!ugFimagesEightPage!ug21.ht} -\index{ug21.ht!pages!ugFimagesEightPage} -\index{ugFimagesEightPage!ug21.ht!pages} -<>= -\begin{page}{ugFimagesEightPage}{G.7. images8.input} -\beginscroll - -\labelSpace{1pc} - -\noindent -{\tt 1.\ \ \ )read\ dhtri}\newline -{\tt 2.\ \ \ )read\ tetra}\newline -{\tt 3.\ \ \ drawPyramid\ 4}\newline -{\tt 4.\ \ \ }\newline -{\tt 5.\ \ \ )read\ antoine}\newline -{\tt 6.\ \ \ drawRings\ 2}\newline -{\tt 7.\ \ \ }\newline -{\tt 8.\ \ \ )read\ scherk}\newline -{\tt 9.\ \ \ drawScherk(3,3)}\newline -{\tt 10.\ \ }\newline -{\tt 11.\ \ )read\ ribbonsnew}\newline -{\tt 12.\ \ drawRibbons([x**i\ for\ i\ in\ 1..5],\ x=-1..1,\ y=0..2)}\newline - -\noindent - - -%\input{gallery/conformal.htex} -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFconformalTitle}{conformal.input} -\newcommand{\ugFconformalNumber}{G.8.} - -@ -\subsection{G.8. conformal.input} -\label{ugFconformalPage} -\index{pages!ugFconformalPage!ug21.ht} -\index{ug21.ht!pages!ugFconformalPage} -\index{ugFconformalPage!ug21.ht!pages} -<>= -\begin{page}{ugFconformalPage}{G.8. conformal.input} -\beginscroll -% -The functions in this section draw conformal maps both on the -plane and on the Riemann sphere. - -%-- Compile, don't interpret functions. -%\xmpLine{)set fun comp on}{} - -\noindent -{\tt 1.\ \ \ C\ :=\ Complex\ DoubleFloat}\newline -{\tt 2.\ \ \ S\ :=\ Segment\ DoubleFloat}\newline -{\tt 3.\ \ \ R3\ :=\ Point\ DFLOAT}\newline -{\tt 4.\ \ \ \ }\newline - -\noindent - -\userfun{conformalDraw}{\it (f, rRange, tRange, rSteps, tSteps, coord)} -draws the image of the coordinate grid under {\it f} in the complex plane. -The grid may be given in either polar or Cartesian coordinates. -Argument {\it f} is the function to draw; -{\it rRange} is the range of the radius (in polar) or real (in Cartesian); -{\it tRange} is the range of \texht{$\theta$}{\theta} (in polar) or imaginary (in Cartesian); -{\it tSteps, rSteps}, are the number of intervals in the {\it r} and -\texht{$\theta$}{\theta} directions; and -{\it coord} is the coordinate system to use (either {\tt "polar"} or -{\tt "cartesian"}). - - -\noindent -{\tt 1.\ \ \ conformalDraw:\ (C\ ->\ C,\ S,\ S,\ PI,\ PI,\ String)\ ->\ VIEW3D}\newline -{\tt 2.\ \ \ conformalDraw(f,rRange,tRange,rSteps,tSteps,coord)\ ==}\newline -{\tt 3.\ \ \ \ \ transformC\ :=}\newline -{\tt 4.\ \ \ \ \ \ \ coord\ =\ "polar"\ =>\ polar2Complex}\newline -{\tt 5.\ \ \ \ \ \ \ cartesian2Complex}\newline -{\tt 6.\ \ \ \ \ cm\ :=\ makeConformalMap(f,\ transformC)}\newline -{\tt 7.\ \ \ \ \ sp\ :=\ createThreeSpace()}\newline -{\tt 8.\ \ \ \ \ adaptGrid(sp,\ cm,\ rRange,\ tRange,\ rSteps,\ tSteps)}\newline -{\tt 9.\ \ \ \ \ makeViewport3D(sp,\ "Conformal\ Map")}\newline - -\noindent - -\userfun{riemannConformalDraw}{\it (f, rRange, tRange, rSteps, tSteps, coord)} -draws the image of the coordinate grid under {\it f} on the Riemann sphere. -The grid may be given in either polar or Cartesian coordinates. -Its arguments are the same as those for \userfun{conformalDraw}. - -\noindent -{\tt 10.\ \ riemannConformalDraw:(C->C,S,S,PI,PI,String)->VIEW3D}\newline -{\tt 11.\ \ riemannConformalDraw(f,\ rRange,\ tRange,}\newline -{\tt 12.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ rSteps,\ tSteps,\ coord)\ ==}\newline -{\tt 13.\ \ \ \ transformC\ :=}\newline -{\tt 14.\ \ \ \ \ \ coord\ =\ "polar"\ =>\ polar2Complex}\newline -{\tt 15.\ \ \ \ \ \ cartesian2Complex}\newline -{\tt 16.\ \ \ \ sp\ :=\ createThreeSpace()}\newline -{\tt 17.\ \ \ \ cm\ :=\ makeRiemannConformalMap(f,\ transformC)}\newline -{\tt 18.\ \ \ \ adaptGrid(sp,\ cm,\ rRange,\ tRange,\ rSteps,\ tSteps)}\newline -{\tt 19.\ \ \ \ curve(sp,[point\ [0,0,2.0@DFLOAT,0],point\ [0,0,2.0@DFLOAT,0]])}\newline -{\tt 20.\ \ \ \ makeViewport3D(sp,"Map\ on\ the\ Riemann\ Sphere")}\newline -{\tt 21.\ \ }\newline -{\tt 22.\ \ adaptGrid(sp,\ f,\ uRange,\ vRange,\ \ uSteps,\ vSteps)\ ==}\newline -{\tt 23.\ \ \ \ delU\ :=\ (hi(uRange)\ -\ lo(uRange))/uSteps}\newline -{\tt 24.\ \ \ \ delV\ :=\ (hi(vRange)\ -\ lo(vRange))/vSteps}\newline -{\tt 25.\ \ \ \ uSteps\ :=\ uSteps\ +\ 1;\ vSteps\ :=\ vSteps\ +\ 1}\newline -{\tt 26.\ \ \ \ u\ :=\ lo\ uRange}\newline -{\tt 27.\ \ \ \ for\ i\ in\ 1..uSteps\ repeat}\newline -{\tt 28.\ \ \ \ \ \ c\ :=\ curryLeft(f,u)}\newline -{\tt 29.\ \ \ \ \ \ cf\ :=\ (t:DFLOAT):DFLOAT\ +->\ 0}\newline -{\tt 30.\ \ \ \ \ \ makeObject(c,vRange::SEG\ Float,colorFunction==cf,}\newline -{\tt 31.\ \ \ \ \ \ \ \ space\ ==\ sp,\ tubeRadius\ ==\ .02,\ tubePoints\ ==\ 6)}\newline -{\tt 32.\ \ \ \ \ \ u\ :=\ u\ +\ delU}\newline -{\tt 33.\ \ \ \ v\ :=\ lo\ vRange}\newline -{\tt 34.\ \ \ \ for\ i\ in\ 1..vSteps\ repeat}\newline -{\tt 35.\ \ \ \ \ \ c\ :=\ curryRight(f,v)}\newline -{\tt 36.\ \ \ \ \ \ cf\ :=\ (t:DFLOAT):DFLOAT\ +->\ 1}\newline -{\tt 37.\ \ \ \ \ \ makeObject(c,uRange::SEG\ Float,colorFunction==cf,}\newline -{\tt 38.\ \ \ \ \ \ \ \ space\ ==\ sp,\ tubeRadius\ ==\ .02,\ tubePoints\ ==\ 6)}\newline -{\tt 39.\ \ \ \ \ \ v\ :=\ v\ +\ delV}\newline -{\tt 40.\ \ \ \ void()}\newline -{\tt 41.\ \ }\newline -{\tt 42.\ \ riemannTransform(z)\ ==}\newline -{\tt 43.\ \ \ \ r\ :=\ sqrt\ norm\ z}\newline -{\tt 44.\ \ \ \ cosTheta\ :=\ (real\ z)/r}\newline -{\tt 45.\ \ \ \ sinTheta\ :=\ (imag\ z)/r}\newline -{\tt 46.\ \ \ \ cp\ :=\ 4*r/(4+r**2)}\newline -{\tt 47.\ \ \ \ sp\ :=\ sqrt(1-cp*cp)}\newline -{\tt 48.\ \ \ \ if\ r>2\ then\ sp\ :=\ -sp}\newline -{\tt 49.\ \ \ \ point\ [cosTheta*cp,\ sinTheta*cp,\ -sp\ +\ 1]}\newline -{\tt 50.\ \ \ }\newline -{\tt 51.\ \ cartesian2Complex(r:DFLOAT,\ i:DFLOAT):C\ ==}\newline -{\tt 52.\ \ \ \ complex(r,\ i)}\newline -{\tt 53.\ \ }\newline -{\tt 54.\ \ polar2Complex(r:DFLOAT,\ th:DFLOAT):C\ ==\ }\newline -{\tt 55.\ \ \ \ complex(r*cos(th),\ r*sin(th))}\newline -{\tt 56.\ \ }\newline -{\tt 57.\ \ makeConformalMap(f,\ transformC)\ ==}\newline -{\tt 58.\ \ \ \ (u:DFLOAT,v:DFLOAT):R3\ +->\ }\newline -{\tt 59.\ \ \ \ \ \ z\ :=\ f\ transformC(u,\ v)}\newline -{\tt 60.\ \ \ \ \ \ point\ [real\ z,\ imag\ z,\ 0.0@DFLOAT]}\newline -{\tt 61.\ \ \ }\newline -{\tt 62.\ \ makeRiemannConformalMap(f,\ transformC)\ ==}\newline -{\tt 63.\ \ \ \ (u:DFLOAT,\ v:DFLOAT):R3\ +->}\newline -{\tt 64.\ \ \ \ \ \ riemannTransform\ f\ transformC(u,\ v)}\newline -{\tt 65.\ \ }\newline -{\tt 66.\ \ riemannSphereDraw:\ (S,\ S,\ PI,\ PI,\ String)\ ->\ VIEW3D}\newline -{\tt 67.\ \ riemannSphereDraw(rRange,tRange,rSteps,tSteps,coord)\ ==}\newline -{\tt 68.\ \ \ \ transformC\ :=}\newline -{\tt 69.\ \ \ \ \ \ coord\ =\ "polar"\ =>\ polar2Complex}\newline -{\tt 70.\ \ \ \ \ \ cartesian2Complex}\newline -{\tt 71.\ \ \ \ grid\ :=\ (u:DFLOAT,\ v:DFLOAT):\ R3\ +->\ }\newline -{\tt 72.\ \ \ \ \ \ z1\ :=\ transformC(u,\ v)}\newline -{\tt 73.\ \ \ \ \ \ point\ [real\ z1,\ imag\ z1,\ 0]}\newline -{\tt 74.\ \ \ \ sp\ :=\ createThreeSpace()}\newline -{\tt 75.\ \ \ \ adaptGrid(sp,\ grid,\ rRange,\ tRange,\ rSteps,\ tSteps)}\newline -{\tt 76.\ \ \ \ connectingLines(sp,grid,rRange,tRange,rSteps,tSteps)}\newline -{\tt 77.\ \ \ \ makeObject(riemannSphere,0..2*\%pi,0..\%pi,space==sp)}\newline -{\tt 78.\ \ \ \ f\ :=\ (z:C):C\ +->\ z}\newline -{\tt 79.\ \ \ \ cm\ :=\ makeRiemannConformalMap(f,\ transformC)}\newline -{\tt 80.\ \ \ \ adaptGrid(sp,\ cm,\ rRange,\ tRange,\ rSteps,\ tSteps)}\newline -{\tt 81.\ \ \ \ makeViewport3D(sp,\ "Riemann\ Sphere")}\newline -{\tt 82.\ \ \ }\newline -{\tt 83.\ \ connectingLines(sp,f,uRange,vRange,uSteps,vSteps)\ ==}\newline -{\tt 84.\ \ \ \ delU\ :=\ (hi(uRange)\ -\ lo(uRange))/uSteps}\newline -{\tt 85.\ \ \ \ delV\ :=\ (hi(vRange)\ -\ lo(vRange))/vSteps}\newline -{\tt 86.\ \ \ \ uSteps\ :=\ uSteps\ +\ 1;\ vSteps\ :=\ vSteps\ +\ 1}\newline -{\tt 87.\ \ \ \ u\ :=\ lo\ uRange}\newline -{\tt 88.\ \ \ \ for\ i\ in\ 1..uSteps\ repeat}\newline -{\tt 89.\ \ \ \ \ \ v\ :=\ lo\ vRange}\newline -{\tt 90.\ \ \ \ \ \ for\ j\ in\ 1..vSteps\ repeat}\newline -{\tt 91.\ \ \ \ \ \ \ \ p1\ :=\ f(u,v)}\newline -{\tt 92.\ \ \ \ \ \ \ \ p2\ :=\ riemannTransform\ complex(p1.1,\ p1.2)}\newline -{\tt 93.\ \ \ \ \ \ \ \ fun\ :=\ lineFromTo(p1,p2)}\newline -{\tt 94.\ \ \ \ \ \ \ \ cf\ :=\ (t:DFLOAT):DFLOAT\ +->\ 3}\newline -{\tt 95.\ \ \ \ \ \ \ \ makeObject(fun,\ 0..1,space==sp,tubePoints==4,}\newline -{\tt 96.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ tubeRadius==0.01,colorFunction==cf)}\newline -{\tt 97.\ \ \ \ \ \ \ \ v\ :=\ v\ +\ delV}\newline -{\tt 98.\ \ \ \ \ \ u\ :=\ u\ +\ delU}\newline -{\tt 99.\ \ \ \ void()}\newline -{\tt 100.\ \ }\newline -{\tt 101.\ riemannSphere(u,v)\ ==\ }\newline -{\tt 102.\ \ \ sv\ :=\ sin(v)}\newline -{\tt 103.\ \ \ 0.99@DFLOAT*(point\ [cos(u)*sv,sin(u)*sv,cos(v),0.0@DFLOAT])+}\newline -{\tt 104.\ \ \ \ \ point\ [0.0@DFLOAT,\ 0.0@DFLOAT,\ 1.0@DFLOAT,\ 4.0@DFLOAT]}\newline -{\tt 105.\ \ }\newline -{\tt 106.\ lineFromTo(p1,\ p2)\ ==}\newline -{\tt 107.\ \ \ d\ :=\ p2\ -\ p1}\newline -{\tt 108.\ \ \ (t:DFLOAT):Point\ DFLOAT\ +->}\newline -{\tt 109.\ \ \ \ \ p1\ +\ t*d}\newline - -\noindent - -%\input{gallery/tknot.htex} -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFtknotTitle}{tknot.input} -\newcommand{\ugFtknotNumber}{G.9.} - -@ -\subsection{G.9. tknot.input} -\label{ugFtknotPage} -\index{pages!ugFtknotPage!ug21.ht} -\index{ug21.ht!pages!ugFtknotPage} -\index{ugFtknotPage!ug21.ht!pages} -<>= -\begin{page}{ugFtknotPage}{G.9. tknot.input} -\beginscroll -% -Create a $(p,q)$ torus-knot with radius $r$ around the curve. -The formula was derived by Larry Lambe. +\index{pages!UXANNADec!annaex.ht} +\index{annaex.ht!pages!UXANNADec} +\index{UXANNADec!annaex.ht!pages} +<>= +\begin{page}{UXANNADec}{Decision Agents} +\begin{scroll} +\blankline +Some features are either present or absent in a problem. Examples of such +binary decisions include {\em is a matrix symmetric?} and {\em is a +function continuous?} However in practice many questions are about the {\em +degree} to which a problem exhibits a property: {\em how much does a +function oscillate?}, or {\em how stiff are these differential equations?} +\blankline +We have therefore created decision agents of two types, reflecting their +property --- {\em Binary Agents} are Boolean functions returning either true +or false and {\em Intensity Functions} are quantitative and return a range of +different values, either numerical or structured types. The framework we are +developing is able to deal with both these forms of information. +\blankline - -\noindent -{\tt 1.\ \ \ )read\ ntube}\newline -{\tt 2.\ \ \ torusKnot:\ (DFLOAT,\ DFLOAT,\ DFLOAT,\ PI,\ PI)\ ->\ VIEW3D}\newline -{\tt 3.\ \ \ torusKnot(p,\ q\ ,r,\ uSteps,\ tSteps)\ ==}\newline -{\tt 4.\ \ \ \ \ knot\ :=\ (t:DFLOAT):Point\ DFLOAT\ +->\ }\newline -{\tt 5.\ \ \ \ \ \ \ fac\ :=\ 4/(2.2@DFLOAT-sin(q*t))}\newline -{\tt 6.\ \ \ \ \ \ \ fac\ *\ point\ [cos(p*t),\ sin(p*t),\ cos(q*t)]}\newline -{\tt 7.\ \ \ \ \ circle\ :=\ (u:DFLOAT,\ t:DFLOAT):\ Point\ DFLOAT\ +->}\newline -{\tt 8.\ \ \ \ \ \ \ r\ *\ point\ [cos\ u,\ sin\ u]}\newline -{\tt 9.\ \ \ \ \ ntubeDrawOpt(knot,\ circle,\ 0..2*\%pi,\ 0..2*\%pi,}\newline -{\tt 10.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ var1Steps\ ==\ uSteps,\ var2Steps\ ==\ tSteps)}\newline -{\tt 11.\ \ }\newline - -\noindent +In any given problem area (for example solving ordinary differential +equations, optimization etc.) we have a selection of {\em methods}. These +might be to use a particular NAG routine, or they might involve employing a +higher-level strategy such as transforming the problem into an equivalent, +but easier to solve, form. +\blankline +Associated with every method we define a {\em +measure function} which assesses the suitability of that method to a +particular problem. Each measure function has access to a range of symbolic +{\em agents} which can answer questions about the various properties of the +problem in hand. +\blankline +\end{scroll} +\downlink{ Inference Mechanisms }{UXANNAInfer} +\downlink{ Method Domains }{UXANNAMeth} +\downlink{ Measure Functions }{UXANNAMeas} +\downlink{ Computational Agents }{UXANNAAgent} -%\input{gallery/ntube.htex} -\endscroll -\autobuttons \end{page} @ -<>= -\newcommand{\ugFntubeTitle}{ntube.input} -\newcommand{\ugFntubeNumber}{G.10.} - -@ -\subsection{G.10. ntube.input} -\label{ugFntubePage} +\subsection{Inference Mechanisms} +\label{UXANNAInfer} \begin{itemize} -\item ugFimagesFivePage \ref{ugFimagesFivePage} on -page~\pageref{ugFimagesFivePage} +\item UXANNAMeth \ref{UXANNAMeth} on page~\pageref{UXANNAMeth} +\item UXANNAMeas \ref{UXANNAMeas} on page~\pageref{UXANNAMeas} +\item UXANNAAgent \ref{UXANNAAgent} on page~\pageref{UXANNAAgent} +\item UXANNAEx \ref{UXANNAEx} on page~\pageref{UXANNAEx} \end{itemize} -\index{pages!ugFntubePage!ug21.ht} -\index{ug21.ht!pages!ugFntubePage} -\index{ugFntubePage!ug21.ht!pages} -<>= -\begin{page}{ugFntubePage}{G.10. ntube.input} -\beginscroll -% -The functions in this file create generalized tubes (also known as generalized -cylinders). -These functions draw a 2-d curve in the normal -planes around a 3-d curve. - - -\noindent -{\tt 1.\ \ \ R3\ :=\ Point\ DFLOAT}\newline -{\tt 2.\ \ \ R2\ :=\ Point\ DFLOAT}\newline -{\tt 3.\ \ \ S\ :=\ Segment\ Float}\newline -{\tt 4.\ \ \ }\newline -{\tt 5.\ \ \ ThreeCurve\ :=\ DFLOAT\ ->\ R3}\newline -{\tt 6.\ \ \ TwoCurve\ :=\ (DFLOAT,\ DFLOAT)\ ->\ R2}\newline -{\tt 7.\ \ \ Surface\ :=\ (DFLOAT,\ DFLOAT)\ ->\ R3}\newline -{\tt 8.\ \ \ }\newline -{\tt 9.\ \ \ FrenetFrame\ :=\ }\newline -{\tt 10.\ \ \ \ \ Record(value:R3,tangent:R3,normal:R3,binormal:R3)}\newline -{\tt 11.\ \ frame:\ FrenetFrame}\newline -{\tt 12.\ \ }\newline - -\noindent - -\userfun{ntubeDraw}{\it (spaceCurve, planeCurve,} -$u_0 .. u_1,$ $t_0 .. t_1)$ -draws {\it planeCurve} in the normal planes of {\it spaceCurve.} -The parameter $u_0 .. u_1$ specifies -the parameter range for {\it planeCurve} -and $t_0 .. t_1$ specifies the parameter range for {\it spaceCurve}. -Additionally, the plane curve function takes -a second parameter: the current parameter of {\it spaceCurve}. -This allows the plane curve to change shape -as it goes around the space curve. -See \downlink{``\ugFimagesFiveTitle''}{ugFimagesFivePage} -in Section \ugFimagesFiveNumber\ignore{ugFimagesFive} for an example of this. -% - -\noindent -{\tt 1.\ \ \ ntubeDraw:\ (ThreeCurve,TwoCurve,S,S)\ ->\ VIEW3D}\newline -{\tt 2.\ \ \ ntubeDraw(spaceCurve,planeCurve,uRange,tRange)\ ==}\newline -{\tt 3.\ \ \ \ \ ntubeDrawOpt(spaceCurve,\ planeCurve,\ uRange,\ \_}\newline -{\tt 4.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ tRange,\ []\$List\ DROPT)}\newline -{\tt 5.\ \ \ \ }\newline -{\tt 6.\ \ \ ntubeDrawOpt:\ (ThreeCurve,TwoCurve,S,S,List\ DROPT)}\newline -{\tt 7.\ \ \ \ \ \ \ ->\ VIEW3D}\newline -{\tt 8.\ \ \ ntubeDrawOpt(spaceCurve,planeCurve,uRange,tRange,l)\ ==}\newline -{\tt 9.\ \ \ \ \ \ \ \ \ \ \ \ \ }\newline -{\tt 10.\ \ \ \ delT:DFLOAT\ :=\ (hi(tRange)\ -\ lo(tRange))/10000}\newline -{\tt 11.\ \ \ \ oldT:DFLOAT\ :=\ lo(tRange)\ -\ 1}\newline -{\tt 12.\ \ \ \ fun\ :=\ ngeneralTube(spaceCurve,planeCurve,delT,oldT)}\newline -{\tt 13.\ \ \ \ draw(fun,\ uRange,\ tRange,\ l)}\newline -{\tt 14.\ \ }\newline - -\noindent - -\userfun{nfrenetFrame}{\it (c, t, delT)} -numerically computes the Frenet frame -about the curve {\it c} at {\it t}. -Parameter {\it delT} is a small number used to -compute derivatives. - -\noindent -{\tt 15.\ \ nfrenetFrame(c,\ t,\ delT)\ ==}\newline -{\tt 16.\ \ \ \ f0\ :=\ c(t)}\newline -{\tt 17.\ \ \ \ f1\ :=\ c(t+delT)}\newline -{\tt 18.\ \ \ \ t0\ :=\ f1\ -\ f0}\newline -{\tt 19.\ \ \ \ n0\ :=\ f1\ +\ f0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\newline -{\tt 20.\ \ \ \ b\ :=\ cross(t0,\ n0)}\newline -{\tt 21.\ \ \ \ n\ :=\ cross(b,t0)}\newline -{\tt 22.\ \ \ \ ln\ :=\ length\ n}\newline -{\tt 23.\ \ \ \ lb\ :=\ length\ b}\newline -{\tt 24.\ \ \ \ ln\ =\ 0\ or\ lb\ =\ 0\ =>}\newline -{\tt 25.\ \ \ \ \ \ \ \ error\ "Frenet\ Frame\ not\ well\ defined"}\newline -{\tt 26.\ \ \ \ n\ :=\ (1/ln)*n}\newline -{\tt 27.\ \ \ \ b\ :=\ (1/lb)*b}\newline -{\tt 28.\ \ \ \ [f0,\ t0,\ n,\ b]\$FrenetFrame}\newline - -\noindent - -\userfun{ngeneralTube}{\it (spaceCurve, planeCurve,}{\it delT, oltT)} -creates a function that can be passed to the system axiomFun{draw} command. -The function is a parameterized surface for the general tube -around {\it spaceCurve}. {\it delT} is a small number used to compute -derivatives. {\it oldT} is used to hold the current value of the -{\it t} parameter for {\it spaceCurve.} This is an efficiency measure -to ensure that frames are only computed once for each value of {\it t}. - -\noindent -{\tt 29.\ \ ngeneralTube:\ (ThreeCurve,\ TwoCurve,\ DFLOAT,\ DFLOAT)\ ->\ Surface}\newline -{\tt 30.\ \ ngeneralTube(spaceCurve,\ planeCurve,\ delT,\ oldT)\ ==}\newline -{\tt 31.\ \ \ \ free\ frame}\newline -{\tt 32.\ \ \ \ (v:DFLOAT,\ t:\ DFLOAT):\ R3\ +->}\newline -{\tt 33.\ \ \ \ \ \ if\ (t\ \texht{$\sim$}{~}=\ oldT)\ then}\newline -{\tt 34.\ \ \ \ \ \ \ \ frame\ :=\ nfrenetFrame(spaceCurve,\ t,\ delT)}\newline -{\tt 35.\ \ \ \ \ \ \ \ oldT\ :=\ t}\newline -{\tt 36.\ \ \ \ \ \ p\ :=\ planeCurve(v,\ t)}\newline -{\tt 37.\ \ \ \ \ \ frame.value\ +\ p.1*frame.normal\ +\ p.2*frame.binormal}\newline - -\noindent - -%\input{gallery/dhtri.htex} -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFdhtriTitle}{dhtri.input} -\newcommand{\ugFdhtriNumber}{G.11.} - -@ -\subsection{G.11. dhtri.input} -\label{ugFdhtriPage} -\index{pages!ugFdhtriPage!ug21.ht} -\index{ug21.ht!pages!ugFdhtriPage} -\index{ugFdhtriPage!ug21.ht!pages} -<>= -\begin{page}{ugFdhtriPage}{G.11. dhtri.input} -\beginscroll -% -Create affine transformations (DH matrices) that transform -a given triangle into another. - - -\noindent -{\tt 1.\ \ \ tri2tri:\ (List\ Point\ DFLOAT,\ List\ Point\ DFLOAT)\ ->\ DHMATRIX(DFLOAT)}\newline -{\tt 2.\ \ \ tri2tri(t1,\ t2)\ ==}\newline -{\tt 3.\ \ \ \ \ n1\ :=\ triangleNormal(t1)}\newline -{\tt 4.\ \ \ \ \ n2\ :=\ triangleNormal(t2)}\newline -{\tt 5.\ \ \ \ \ tet2tet(concat(t1,\ n1),\ concat(t2,\ n2))}\newline -{\tt 6.\ \ \ \ }\newline -{\tt 7.\ \ \ tet2tet:\ (List\ Point\ DFLOAT,\ List\ Point\ DFLOAT)\ ->\ DHMATRIX(DFLOAT)}\newline -{\tt 8.\ \ \ tet2tet(t1,\ t2)\ ==}\newline -{\tt 9.\ \ \ \ \ m1\ :=\ makeColumnMatrix\ t1}\newline -{\tt 10.\ \ \ \ m2\ :=\ makeColumnMatrix\ t2}\newline -{\tt 11.\ \ \ \ m2\ *\ inverse(m1)}\newline -{\tt 12.\ \ \ }\newline -{\tt 13.\ \ makeColumnMatrix(t)\ ==}\newline -{\tt 14.\ \ \ \ m\ :=\ new(4,4,0)\$DHMATRIX(DFLOAT)}\newline -{\tt 15.\ \ \ \ for\ x\ in\ t\ for\ i\ in\ 1..repeat}\newline -{\tt 16.\ \ \ \ \ \ for\ j\ in\ 1..3\ repeat}\newline -{\tt 17.\ \ \ \ \ \ \ \ m(j,i)\ :=\ x.j}\newline -{\tt 18.\ \ \ \ \ \ m(4,i)\ :=\ 1}\newline -{\tt 19.\ \ \ \ m}\newline -{\tt 20.\ \ \ }\newline -{\tt 21.\ \ triangleNormal(t)\ ==}\newline -{\tt 22.\ \ \ \ a\ :=\ triangleArea\ t}\newline -{\tt 23.\ \ \ \ p1\ :=\ t.2\ -\ t.1}\newline -{\tt 24.\ \ \ \ p2\ :=\ t.3\ -\ t.2}\newline -{\tt 25.\ \ \ \ c\ :=\ cross(p1,\ p2)}\newline -{\tt 26.\ \ \ \ len\ :=\ length(c)}\newline -{\tt 27.\ \ \ \ len\ =\ 0\ =>\ error\ "degenerate\ triangle!"}\newline -{\tt 28.\ \ \ \ c\ :=\ (1/len)*c}\newline -{\tt 29.\ \ \ \ t.1\ +\ sqrt(a)\ *\ c}\newline -{\tt 30.\ \ \ }\newline -{\tt 31.\ \ triangleArea\ t\ ==}\newline -{\tt 32.\ \ \ \ a\ :=\ length(t.2\ -\ t.1)}\newline -{\tt 33.\ \ \ \ b\ :=\ length(t.3\ -\ t.2)}\newline -{\tt 34.\ \ \ \ c\ :=\ length(t.1\ -\ t.3)}\newline -{\tt 35.\ \ \ \ s\ :=\ (a+b+c)/2}\newline -{\tt 36.\ \ \ \ sqrt(s*(s-a)*(s-b)*(s-c))}\newline - -\noindent - - -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFtetraTitle}{tetra.input} -\newcommand{\ugFtetraNumber}{G.12.} - -@ -\subsection{G.12. tetra.input} -\label{ugFtetraPage} -\index{pages!ugFtetraPage!ug21.ht} -\index{ug21.ht!pages!ugFtetraPage} -\index{ugFtetraPage!ug21.ht!pages} -<>= -\begin{page}{ugFtetraPage}{G.12. tetra.input} -\beginscroll -% -%\input{gallery/tetra.htex} -%\outdent{Sierpinsky's Tetrahedron} - -\labelSpace{3pc} - - -\noindent -{\tt 1.\ \ \ )set\ expose\ add\ con\ DenavitHartenbergMatrix}\newline -{\tt 2.\ \ \ }\newline -{\tt 3.\ \ \ x1:DFLOAT\ :=\ sqrt(2.0@DFLOAT/3.0@DFLOAT)}\newline -{\tt 4.\ \ \ x2:DFLOAT\ :=\ sqrt(3.0@DFLOAT)/6}\newline -{\tt 5.\ \ \ }\newline -{\tt 6.\ \ \ p1\ :=\ point\ [-0.5@DFLOAT,\ -x2,\ 0.0@DFLOAT]}\newline -{\tt 7.\ \ \ p2\ :=\ point\ [0.5@DFLOAT,\ -x2,\ 0.0@DFLOAT]}\newline -{\tt 8.\ \ \ p3\ :=\ point\ [0.0@DFLOAT,\ 2*x2,\ 0.0@DFLOAT]}\newline -{\tt 9.\ \ \ p4\ :=\ point\ [0.0@DFLOAT,\ 0.0@DFLOAT,\ x1]}\newline -{\tt 10.\ \ \ }\newline -{\tt 11.\ \ baseTriangle\ \ :=\ [p2,\ p1,\ p3]}\newline -{\tt 12.\ \ }\newline -{\tt 13.\ \ mt\ \ :=\ [0.5@DFLOAT*(p2+p1),\ 0.5@DFLOAT*(p1+p3),\ 0.5@DFLOAT*(p3+p2)]}\newline -{\tt 14.\ \ }\newline -{\tt 15.\ \ bt1\ :=\ [mt.1,\ p1,\ mt.2]}\newline -{\tt 16.\ \ bt2\ :=\ [p2,\ mt.1,\ mt.3]}\newline -{\tt 17.\ \ bt3\ :=\ [mt.2,\ p3,\ mt.3]}\newline -{\tt 18.\ \ bt4\ :=\ [0.5@DFLOAT*(p2+p4),\ 0.5@DFLOAT*(p1+p4),\ 0.5@DFLOAT*(p3+p4)]}\newline -{\tt 19.\ \ }\newline -{\tt 20.\ \ tt1\ :=\ tri2tri(baseTriangle,\ bt1)}\newline -{\tt 21.\ \ tt2\ :=\ tri2tri(baseTriangle,\ bt2)}\newline -{\tt 22.\ \ tt3\ :=\ tri2tri(baseTriangle,\ bt3)}\newline -{\tt 23.\ \ tt4\ :=\ tri2tri(baseTriangle,\ bt4)}\newline -{\tt 24.\ \ }\newline -{\tt 25.\ \ drawPyramid(n)\ ==}\newline -{\tt 26.\ \ \ \ s\ :=\ createThreeSpace()}\newline -{\tt 27.\ \ \ \ dh\ :=\ rotatex(0.0@DFLOAT)}\newline -{\tt 28.\ \ \ \ drawPyramidInner(s,\ n,\ dh)}\newline -{\tt 29.\ \ \ \ makeViewport3D(s,\ "Sierpinsky\ Tetrahedron")}\newline -{\tt 30.\ \ }\newline -{\tt 31.\ \ drawPyramidInner(s,\ n,\ dh)\ ==}\newline -{\tt 32.\ \ \ \ n\ =\ 0\ =>\ makeTetrahedron(s,\ dh,\ n)}\newline -{\tt 33.\ \ \ \ drawPyramidInner(s,\ n-1,\ dh\ *\ tt1)}\newline -{\tt 34.\ \ \ \ drawPyramidInner(s,\ n-1,\ dh\ *\ tt2)}\newline -{\tt 35.\ \ \ \ drawPyramidInner(s,\ n-1,\ dh\ *\ tt3)}\newline -{\tt 36.\ \ \ \ drawPyramidInner(s,\ n-1,\ dh\ *\ tt4)}\newline -{\tt 37.\ \ }\newline -{\tt 38.\ \ makeTetrahedron(sp,\ dh,\ color)\ ==}\newline -{\tt 39.\ \ \ \ w1\ :=\ dh*p1}\newline -{\tt 40.\ \ \ \ w2\ :=\ dh*p2}\newline -{\tt 41.\ \ \ \ w3\ :=\ dh*p3}\newline -{\tt 42.\ \ \ \ w4\ :=\ dh*p4}\newline -{\tt 43.\ \ \ \ polygon(sp,\ [w1,\ w2,\ w4])}\newline -{\tt 44.\ \ \ \ polygon(sp,\ [w1,\ w3,\ w4])}\newline -{\tt 45.\ \ \ \ polygon(sp,\ [w2,\ w3,\ w4])}\newline -{\tt 46.\ \ \ \ void()}\newline - -\noindent - - -%\input{gallery/antoine.htex} -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFantoineTitle}{antoine.input} -\newcommand{\ugFantoineNumber}{G.13.} - -@ -\subsection{G.13. antoine.input} -\label{ugFantoinePage} -\index{pages!ugFantoinePage!ug21.ht} -\index{ug21.ht!pages!ugFantoinePage} -\index{ugFantoinePage!ug21.ht!pages} -<>= -\begin{page}{ugFantoinePage}{G.13. antoine.input} -\beginscroll -% -Draw Antoine's Necklace. -Thank you to Matthew Grayson at IBM's T.J Watson Research Center for the idea. - - -\noindent -{\tt 1.\ \ \ )set\ expose\ add\ con\ DenavitHartenbergMatrix}\newline -{\tt 2.\ \ \ }\newline -{\tt 3.\ \ \ torusRot:\ DHMATRIX(DFLOAT)}\newline -{\tt 4.\ \ \ }\newline -{\tt 5.\ \ \ }\newline -{\tt 6.\ \ \ drawRings(n)\ ==}\newline -{\tt 7.\ \ \ \ \ s\ :=\ createThreeSpace()}\newline -{\tt 8.\ \ \ \ \ dh:DHMATRIX(DFLOAT)\ :=\ identity()}\newline -{\tt 9.\ \ \ \ \ drawRingsInner(s,\ n,\ dh)}\newline -{\tt 10.\ \ \ \ makeViewport3D(s,\ "Antoine's\ Necklace")}\newline -{\tt 11.\ \ }\newline - -\noindent - -In order to draw Antoine rings, we take one ring, scale it down to -a smaller size, rotate it around its central axis, translate it -to the edge of the larger ring and rotate it around the edge to -a point corresponding to its count (there are 10 positions around -the edge of the larger ring). For each of these new rings we -recursively perform the operations, each ring becoming 10 smaller -rings. Notice how the \axiomType{DHMATRIX} operations are used to build up -the proper matrix composing all these transformations. - - -\noindent -{\tt 1.\ \ \ drawRingsInner(s,\ n,\ dh)\ ==}\newline -{\tt 2.\ \ \ \ \ n\ =\ 0\ =>}\newline -{\tt 3.\ \ \ \ \ \ \ drawRing(s,\ dh)}\newline -{\tt 4.\ \ \ \ \ \ \ void()}\newline -{\tt 5.\ \ \ \ \ t\ :=\ 0.0@DFLOAT}\newline -{\tt 6.\ \ \ \ \ p\ :=\ 0.0@DFLOAT}\newline -{\tt 7.\ \ \ \ \ tr\ :=\ 1.0@DFLOAT}\newline -{\tt 8.\ \ \ \ \ inc\ :=\ 0.1@DFLOAT}\newline -{\tt 9.\ \ \ \ \ for\ i\ in\ 1..10\ repeat}\newline -{\tt 10.\ \ \ \ \ \ tr\ :=\ tr\ +\ inc}\newline -{\tt 11.\ \ \ \ \ \ inc\ :=\ -inc}\newline -{\tt 12.\ \ \ \ \ \ dh'\ :=\ dh*rotatez(t)*translate(tr,0.0@DFLOAT,0.0@DFLOAT)*}\newline -{\tt 13.\ \ \ \ \ \ \ \ \ \ \ \ \ rotatey(p)*scale(0.35@DFLOAT,\ 0.48@DFLOAT,\ 0.4@DFLOAT)}\newline -{\tt 14.\ \ \ \ \ \ drawRingsInner(s,\ n-1,\ dh')}\newline -{\tt 15.\ \ \ \ \ \ t\ :=\ t\ +\ 36.0@DFLOAT}\newline -{\tt 16.\ \ \ \ \ \ p\ :=\ p\ +\ 90.0@DFLOAT}\newline -{\tt 17.\ \ \ \ void()}\newline -{\tt 18.\ \ }\newline -{\tt 19.\ \ drawRing(s,\ dh)\ ==}\newline -{\tt 20.\ \ \ \ free\ torusRot}\newline -{\tt 21.\ \ \ \ torusRot\ :=\ dh}\newline -{\tt 22.\ \ \ \ makeObject(torus,\ 0..2*\%pi,\ 0..2*\%pi,\ var1Steps\ ==\ 6,}\newline -{\tt 23.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ space\ ==\ s,\ var2Steps\ ==\ 15)}\newline -{\tt 24.\ \ }\newline -{\tt 25.\ \ torus(u\ ,v)\ ==}\newline -{\tt 26.\ \ \ \ cu\ :=\ cos(u)/6}\newline -{\tt 27.\ \ \ \ torusRot*point\ [(1+cu)*cos(v),(1+cu)*sin(v),(sin\ u)/6]}\newline - -\noindent - -%\input{gallery/scherk.htex} -\endscroll -\autobuttons -\end{page} - -@ -<>= -\newcommand{\ugFscherkTitle}{scherk.input} -\newcommand{\ugFscherkNumber}{G.14.} - -@ -\subsection{G.14. scherk.input} -\label{ugFscherkPage} -\index{pages!ugFscherkPage!ug21.ht} -\index{ug21.ht!pages!ugFscherkPage} -\index{ugFscherkPage!ug21.ht!pages} -<>= -\begin{page}{ugFscherkPage}{G.14. scherk.input} -\beginscroll -% - -Scherk's minimal surface, defined by: -\texht{$e^z \cos(x) = \cos(y)$}{\axiom{exp(z) * cos(x) = cos(y)}}. -See: {\it A Comprehensive Introduction to Differential Geometry,} Vol. 3, -by Michael Spivak, Publish Or Perish, Berkeley, 1979, pp. 249-252. - - -\noindent -{\tt 1.\ \ \ (xOffset,\ yOffset):DFLOAT}\newline -{\tt 2.\ \ \ \ }\newline -{\tt 3.\ \ \ }\newline -{\tt 4.\ \ \ drawScherk(m,n)\ ==}\newline -{\tt 5.\ \ \ \ \ free\ xOffset,\ yOffset}\newline -{\tt 6.\ \ \ \ \ space\ :=\ createThreeSpace()}\newline -{\tt 7.\ \ \ \ \ for\ i\ in\ 0..m-1\ repeat}\newline -{\tt 8.\ \ \ \ \ \ \ xOffset\ :=\ i*\%pi}\newline -{\tt 9.\ \ \ \ \ \ \ for\ j\ in\ 0\ ..\ n-1\ repeat}\newline -{\tt 10.\ \ \ \ \ \ \ \ rem(i+j,\ 2)\ =\ 0\ =>\ 'iter}\newline -{\tt 11.\ \ \ \ \ \ \ \ yOffset\ :=\ j*\%pi}\newline -{\tt 12.\ \ \ \ \ \ \ \ drawOneScherk(space)}\newline -{\tt 13.\ \ \ \ makeViewport3D(space,\ "Scherk's\ Minimal\ Surface")}\newline -{\tt 14.\ \ }\newline -{\tt 15.\ \ scherk1(u,v)\ ==}\newline -{\tt 16.\ \ \ \ x\ :=\ cos(u)/exp(v)}\newline -{\tt 17.\ \ \ \ point\ [xOffset\ +\ acos(x),\ yOffset\ +\ u,\ v,\ abs(v)]}\newline -{\tt 18.\ \ \ }\newline -{\tt 19.\ \ scherk2(u,v)\ ==}\newline -{\tt 20.\ \ \ \ x\ :=\ cos(u)/exp(v)}\newline -{\tt 21.\ \ \ \ point\ [xOffset\ -\ acos(x),\ yOffset\ +\ u,\ v,\ abs(v)]}\newline -{\tt 22.\ \ \ }\newline -{\tt 23.\ \ scherk3(u,v)\ ==\ }\newline -{\tt 24.\ \ \ \ x\ :=\ exp(v)\ *\ cos(u)}\newline -{\tt 25.\ \ \ \ point\ [xOffset\ +\ u,\ yOffset\ +\ acos(x),\ v,\ abs(v)]}\newline -{\tt 26.\ \ \ }\newline -{\tt 27.\ \ scherk4(u,v)\ ==\ }\newline -{\tt 28.\ \ \ \ x\ :=\ exp(v)\ *\ cos(u)}\newline -{\tt 29.\ \ \ \ point\ [xOffset\ +\ u,\ yOffset\ -\ acos(x),\ v,\ abs(v)]}\newline -{\tt 30.\ \ \ }\newline -{\tt 31.\ \ drawOneScherk(s)\ ==}\newline -{\tt 32.\ \ \ \ makeObject(scherk1,-\%pi/2..\%pi/2,0..\%pi/2,space==s,}\newline -{\tt 33.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ var1Steps\ ==\ 28,\ var2Steps\ ==\ 28)}\newline -{\tt 34.\ \ \ \ makeObject(scherk2,-\%pi/2..\%pi/2,0..\%pi/2,space==s,}\newline -{\tt 35.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ var1Steps\ ==\ 28,\ var2Steps\ ==\ 28)}\newline -{\tt 36.\ \ \ \ makeObject(scherk3,-\%pi/2..\%pi/2,-\%pi/2..0,space==s,}\newline -{\tt 37.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ var1Steps\ ==\ 28,\ var2Steps\ ==\ 28)}\newline -{\tt 38.\ \ \ \ makeObject(scherk4,-\%pi/2..\%pi/2,-\%pi/2..0,space==s,}\newline -{\tt 39.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ var1Steps\ ==\ 28,\ var2Steps\ ==\ 28)}\newline -{\tt 40.\ \ \ \ void()}\newline - -\noindent -\endscroll -\autobuttons +\index{pages!UXANNAInfer!annaex.ht} +\index{annaex.ht!pages!UXANNAInfer} +\index{UXANNAInfer!annaex.ht!pages} +<>= +\begin{page}{UXANNAInfer}{Inference Mechanisms} +\begin{scroll} +\blankline +The inference machine will take the problem description as provided by the +user and perform an initial analysis to verify its validity. It will +consider, in turn, all of the available methods within its knowledge base +which might solve that problem. In doing so it analyses the input problem to +find out about any attributes that could affect the ability of the methods +under consideration to perform effectively. +\blankline +Some of these +measures may use lazy evaluation in the sense that, if a method already +assessed is believed to be a good candidate, and if evaluating the current +measure will be relatively expensive, then that measure will not be evaluated +unless later evidence shows that the selected method is not, in fact, a +successful strategy, for example if it has failed. +\end{scroll} +\downlink{ Method Domains }{UXANNAMeth} +\downlink{ Measure Functions }{UXANNAMeas} +\downlink{ Computational Agents }{UXANNAAgent} +\downlink{ Examples }{UXANNAEx} \end{page} @ -\section{union.ht} -\subsection{Domain {\bf Union(a:A,...,b:B)}} -\label{DomainUnion} -\index{pages!DomainUnion!union.ht} -\index{union.ht!pages!DomainUnion} -\index{DomainUnion!union.ht!pages} -<>= -\begin{page}{DomainUnion}{Domain {\em Union(a:A,...,b:B)}} -\beginscroll -{\em Union} takes any number of "tag"-domain pairs of arguments: -\indentrel{2} -\newline \spad{a}, a tag, an element of domain \spadtype{Symbol} -\newline \spad{A}, a domain of category \spadtype{SetCategory} -\newline\tab{10}... -\newline \spad{b}, a tag, an element of domain \spadtype{Symbol} -\newline \spad{B}, a domain of category \spadtype{SetCategory} -\indentrel{-2}\newline -This constructor is a primitive in Axiom. -\newline -\beginmenu -\item\menulispdownlink{Description}{(|dbSpecialDescription| '|Union|)) }\tab{15}General description -\item\menulispdownlink{Operations}{(|dbSpecialOperations| '|Union|)}\tab{15}All exported operations of \spad{Union(a:A,b:B)} -%\item\menudownlink{Examples} {UnionExamples} \tab{15}Examples illustrating use -\item\menulispdownlink{Exports}{(|dbSpecialExports| '|Union|)}\tab{15}Explicit categories and operations -\endmenu -\vspace{1}\newline -In this tagged \spad{Union}, tags \spad{a,...,b} must be distinct. -\newline -For an alternate "untagged" form of \spad{Union}, see \downlink{Union(A,B)}{UntaggedUnion}. -\endscroll\end{page} - -@ -\subsection{Domain Constructor {\bf Union}} -\label{UnionDescription} -\index{pages!UnionDescription!union.ht} -\index{union.ht!pages!UnionDescription} -\index{UnionDescription!union.ht!pages} -<>= -\begin{page}{UnionDescription}{Domain Constructor {\em Union}} -\beginscroll -\newline\menuitemstyle{}\tab{2}Union({\em a:A},{\em b:B}) -\newline\tab{2}{\em Arguments:}\indent{17}\tab{-2} -{\em a}, a tag, an element of domain \spadtype{Symbol} -\newline\tab{-2} -{\em A}, a domain of category \spadtype{SetCategory} -\newline\tab{-2} -{\em b}, a tag, an element of domain \spadtype{Symbol} -\newline\tab{-2} -{\em B}, a domain of category \spadtype{SetCategory} -\indent{0}\newline\tab{2}{\em Returns:}\indent{17}\tab{-2} -the "union of {\em A} and {\em B}" as described below. -\indent{0}\newline\tab{2}{\em Description:}\indent{15}\tab{0} -{\em Union(a:A,b:B)} denotes the class of objects -which are either members of domain {\em A} or of domain {\em B}. -The symbols {\em a} and {\em b} are called "tags" and -are used to identify the two "branches" -of the union. -The {\em Union} constructor can take any number of arguments and -has an alternate form without {\em tags}. -This tagged {\em Union} type is necessary, for example, to disambiguate -two branches of a union where {\em A} and {\em B} denote the same type. -{\em Union} is a primitive domain of Axiom which cannot be -defined in the Axiom language. -\endscroll\end{page} - -@ -\subsection{Domain {\bf Union(A,...,B)}} -\label{UntaggedUnion} -\index{pages!UntaggedUnion!union.ht} -\index{union.ht!pages!UntaggedUnion} -\index{UntaggedUnion!union.ht!pages} -<>= -\begin{page}{UntaggedUnion}{Domain {\em Union(A,...,B)}} -\beginscroll -{\em Union} takes any number of domain arguments: -\indentrel{2} -\newline \spad{A}, a domain of category \spadtype{SetCategory} -\newline\tab{10}... -\newline \spad{B}, a domain of category \spadtype{SetCategory} -\indentrel{-2}\newline -\spad{Union} is a primitive constructor in Axiom. -\newline -\beginmenu -\item\menulispdownlink{Description}{(|dbSpecialDescription| '|UntaggedUnion|)) }\tab{15}General description -\item\menulispdownlink{Operations}{(|dbSpecialOperations| '|UntaggedUnion|)}\tab{15}All exported operations of \spad{Union(A,B)} -%\item\menudownlink{Examples} {UTUnionExamples} \tab{15}Examples illustrating use -%\item\menudownlink{Exports} {UTUnionExports} \tab{15}Explicit categories and operations -\endmenu -\vspace{1}\newline -In this untagged form of \spad{Union}, domains \spad{A,...,B} must be distinct. -\endscroll\end{page} - -@ -\subsection{Domain Constructor {\bf Union}} -\label{UTUnionDescription} -\index{pages!UTUnionDescription!union.ht} -\index{union.ht!pages!UTUnionDescription} -\index{UTUnionDescription!union.ht!pages} -<>= -\begin{page}{UTUnionDescription}{Domain Constructor {\em Union}} -\beginscroll -\newline\menuitemstyle{}\tab{2}Union({\em A},{\em B}) -\newline\tab{2}{\em Arguments:}\indent{17}\tab{-2} -{\em A}, a domain of category \spadtype{SetCategory} -\newline\tab{-2} -{\em B}, a domain of category \spadtype{SetCategory} -\indent{0}\newline\tab{2}{\em Returns:}\indent{17}\tab{-2} -the "union of {\em A} and {\em B}" as described below. -\indent{0}\newline\tab{2}{\em Description:}\indent{15}\tab{0} -{\em Union(A,B)} denotes the class of objects which are -which are either members of domain {\em A} or of domain {\em B}. -The {\em Union} constructor can take any number of arguments and -has an alternate form using {\em tags}. -{\em Union} is a primitive domain of Axiom which cannot be -defined in the Axiom language. -\endscroll\end{page} - - -@ -\subsection{TITLE} -\label{TPD} -\index{pages!TPD!alist.ht} -\index{alist.ht!pages!TPD} -\index{TPD!alist.ht!pages} -<>= - - -@ -\section{uniseg.ht} -<>= -\newcommand{\UniversalSegmentXmpTitle}{UniversalSegment} -\newcommand{\UniversalSegmentXmpNumber}{9.84} - -@ -\subsection{UniversalSegment} -\label{UniversalSegmentXmpPage} +\subsection{Method Domains} +\label{UXANNAMeth} \begin{itemize} -\item SegmentXmpPage \ref{SegmentXmpPage} on -page~pageref{SegmentXmpPage} -\item SegmentBindingXmpPage \ref{SegmentBindingXmpPage} on -page~pageref{SegmentBindingXmpPage} -\item ListXmpPage \ref{ListXmpPage} on -page~pageref{ListXmpPage} -\item StreamXmpPage \ref{StreamXmpPage} on -page~pageref{StreamXmpPage} +\item UXANNAMeas \ref{UXANNAMeas} on page~\pageref{UXANNAMeas} +\item UXANNAAgent \ref{UXANNAAgent} on page~\pageref{UXANNAAgent} +\item UXANNAEx \ref{UXANNAEx} on page~\pageref{UXANNAEx} \end{itemize} -\index{pages!UniversalSegmentXmpPage!uniseg.ht} -\index{uniseg.ht!pages!UniversalSegmentXmpPage} -\index{UniversalSegmentXmpPage!uniseg.ht!pages} -<>= -\begin{page}{UniversalSegmentXmpPage}{UniversalSegment} -\beginscroll - -The \spadtype{UniversalSegment} domain generalizes \spadtype{Segment} -by allowing segments without a ``hi'' end point. -\xtc{ -}{ -\spadpaste{pints := 1.. \bound{pints}} -} -\xtc{ -}{ -\spadpaste{nevens := (0..) by -2 \bound{nevens}} -} -\xtc{ -Values of type \spadtype{Segment} are automatically converted to -type \spadtype{UniversalSegment} when appropriate. -}{ -\spadpaste{useg: UniversalSegment(Integer) := 3..10 \bound{useg}} -} -\xtc{ -The operation \spadfunFrom{hasHi}{UniversalSegment} is used to test -whether a segment has a \spad{hi} end point. -}{ -\spadpaste{hasHi pints \free{pints}} -} -\xtc{ -}{ -\spadpaste{hasHi nevens \free{nevens}} -} -\xtc{ -}{ -\spadpaste{hasHi useg \free{useg}} -} -\xtc{ -All operations available on type \spadtype{Segment} apply to -\spadtype{UniversalSegment}, with the proviso that expansions produce -streams rather than lists. -This is to accommodate infinite expansions. -}{ -\spadpaste{expand pints \free{pints}} -} -\xtc{ -}{ -\spadpaste{expand nevens \free{nevens}} -} -\xtc{ -}{ -\spadpaste{expand [1, 3, 10..15, 100..]} -} - -For more information on related topics, see -\downlink{`Segment'}{SegmentXmpPage}\ignore{Segment}, -\downlink{`SegmentBinding'}{SegmentBindingXmpPage}\ignore{SegmentBinding}, -\downlink{`List'}{ListXmpPage}\ignore{List}, and -\downlink{`Stream'}{StreamXmpPage}\ignore{Stream}. -\showBlurb{UniversalSegment} -\endscroll -\autobuttons +\index{pages!UXANNAMeth!annaex.ht} +\index{annaex.ht!pages!UXANNAMeth} +\index{UXANNAMeth!annaex.ht!pages} +<>= +\begin{page}{UXANNAMeth}{Method Domains} +\begin{scroll} +\blankline +An Axiom {\em domain} has been created for each method or strategy for +solving the problem. These method domains each implement two functions with +a uniform (method independant) interface. +\blankline {\bf measure:} A function which calculates an estimate of suitability of +this particular method to the problem if there is a possibility that the +method under consideration is more appropriate than one already investigated. +\blankline +If it may be possible to improve on the current favourite method, the function +will call computational agents to analyse the problem for specific features +and calculate the measure from the results these agents return, +using a variation on the Lucks/Gladwell intensity and compatibility +model if conflict between attributes, as investigated by these computational +agents, may be present. +\blankline +{\bf implementation:} A function which may be one of two distinct kinds. +The first kind uses the interface to the NAG Library to call a particular +routine with the required parameters. Some of the parameters may need to be +calculated from the data provided before the external function call. +\blankline +The other kind will apply a ``high level'' strategy to try to solve the +problem e.g.~a transformation of an expression from one that is difficult to +solve to one which is easier, or a splitting of the problem into several more +easily solvable parts. For example, for a solution of the equation above, +since the integral is semi-infinite we might wish to transform the range by, +say, using the mapping {\it y -> 1/x} on the section {\it 1 +< x < \inputbitmap{\htbmdir{}/infty.xbm}}) and +adding the result to the unmapped section {\it 0 < x < 1}. +\blankline +\end{scroll} +\downlink{ Measure Functions }{UXANNAMeas} +\downlink{ Computational Agents }{UXANNAAgent} +\downlink{ Examples }{UXANNAEx} \end{page} -% - -@ -\section{up.ht} -<>= -\newcommand{\UnivariatePolynomialXmpTitle}{UnivariatePolynomial} -\newcommand{\UnivariatePolynomialXmpNumber}{9.83} @ -\subsection{UnivariatePolynomial} -\label{UnivariatePolynomialXmpPage} +\subsection{Measure Functions} +\label{UXANNAMeas} \begin{itemize} -\item ugProblemFactorPage \ref{ugProblemFactorPage} on -page~pageref{ugProblemFactorPage} -\item ugIntroVariablesPage \ref{ugIntroVariablesPage} on -page~pageref{ugIntroVariablesPage} -\item ugTypesConvertPage \ref{ugTypesConvertPage} on -page~pageref{ugTypesConvertPage} -\item PolynomialXmpPage \ref{PolynomialXmpPage} on -page~pageref{PolynomialXmpPage} -\item MultivariatePolynomialXmpPage \ref{MultivariatePolynomialXmpPage} on -page~pageref{MultivariatePolynomialXmpPage} -\item DistributedMultivariatePolynomialXmpPage \ref{DistributedMultivariatePolynomialXmpPage} on -page~pageref{DistributedMultivariatePolynomialXmpPage} +\item UXANNAAgent \ref{UXANNAAgent} on page~\pageref{UXANNAAgent} +\item UXANNAEx \ref{UXANNAEx} on page~\pageref{UXANNAEx} \end{itemize} -\index{pages!UnivariatePolynomialXmpPage!up.ht} -\index{up.ht!pages!UnivariatePolynomialXmpPage} -\index{UnivariatePolynomialXmpPage!up.ht!pages} -<>= -\begin{page}{UnivariatePolynomialXmpPage}{UnivariatePolynomial} -\beginscroll - -The domain constructor \spadtype{UnivariatePolynomial} -(abbreviated \spadtype{UP}) -creates domains of univariate polynomials in a specified variable. -For example, the domain -\spadtype{UP(a1,POLY FRAC INT)} provides polynomials in the single variable -\spad{a1} whose coefficients are general polynomials with rational -number coefficients. - -\beginImportant -\noindent {\bf Restriction:} -\texht{\begin{quotation}\noindent}{\newline\indent{5}} -Axiom does not allow you to create types where -\spadtype{UnivariatePolynomial} is contained in the coefficient type of -\spadtype{Polynomial}. Therefore, -\spadtype{UP(x,POLY INT)} is legal but \spadtype{POLY UP(x,INT)} is not. -\texht{\end{quotation}}{\indent{0}} -\endImportant - -\xtc{ -\spadtype{UP(x,INT)} is the domain of polynomials in the single -variable \spad{x} with integer coefficients. -}{ -\spadpaste{(p,q) : UP(x,INT) \bound{pdec}\bound{qdec}} -} -\xtc{ -}{ -\spadpaste{p := (3*x-1)**2 * (2*x + 8) \free{pdec}\bound{p}} -} -\xtc{ -}{ -\spadpaste{q := (1 - 6*x + 9*x**2)**2 \free{qdec}\bound{q}} -} -\xtc{ -The usual arithmetic operations are available for univariate -polynomials. -}{ -\spadpaste{p**2 + p*q \free{p q}} -} -\xtc{ -The operation \spadfunFrom{leadingCoefficient}{UnivariatePolynomial} -extracts the coefficient of the term of highest degree. -}{ -\spadpaste{leadingCoefficient p \free{p}} -} -\xtc{ -The operation \spadfunFrom{degree}{UnivariatePolynomial} returns -the degree of the polynomial. -Since the polynomial has only one variable, the variable is not supplied -to operations like \spadfunFrom{degree}{UnivariatePolynomial}. -}{ -\spadpaste{degree p \free{p}} -} -\xtc{ -The reductum of the polynomial, the polynomial obtained by -subtracting the term of highest order, is returned by -\spadfunFrom{reductum}{UnivariatePolynomial}. -}{ -\spadpaste{reductum p \free{p}} -} -\xtc{ -The operation \spadfunFrom{gcd}{UnivariatePolynomial} computes the -greatest common divisor of two polynomials. -}{ -\spadpaste{gcd(p,q) \free{p q}} -} -\xtc{ -The operation \spadfunFrom{lcm}{UnivariatePolynomial} computes the -least common multiple. -}{ -\spadpaste{lcm(p,q) \free{p q}} -} -\xtc{ -The operation \spadfunFrom{resultant}{UnivariatePolynomial} -computes the resultant of two univariate polynomials. -In the case of \spad{p} and \spad{q}, the resultant is \spad{0} because they -share a common root. -}{ -\spadpaste{resultant(p,q) \free{p q}} -} -\xtc{ -To compute the derivative of a univariate polynomial with respect to its -variable, use \spadfunFrom{D}{UnivariatePolynomial}. -}{ -\spadpaste{D p \free{p}} -} -\xtc{ -Univariate polynomials can also be used as if they were functions. -To evaluate a univariate polynomial at some point, apply -the polynomial to the point. -}{ -\spadpaste{p(2) \free{p}} -} -\xtc{ -The same syntax is used for composing two univariate polynomials, i.e. -substituting one polynomial for the variable in another. -This substitutes \spad{q} for the variable in \spad{p}. -}{ -\spadpaste{p(q) \free{p q}} -} -\xtc{ -This substitutes \spad{p} for the variable in \spad{q}. -}{ -\spadpaste{q(p) \free{p q}} -} -\xtc{ -To obtain a list of coefficients of the polynomial, use -\spadfunFrom{coefficients}{UnivariatePolynomial}. -}{ -\spadpaste{l := coefficients p \free{p}\bound{l}} -} -\xtc{ -From this you can use \spadfunFrom{gcd}{UnivariatePolynomial} -and \spadfunFrom{reduce}{List} -to compute the content of the polynomial. -}{ -\spadpaste{reduce(gcd,l) \free{l}} -} -\xtc{ -Alternatively (and more easily), -you can just call \spadfunFrom{content}{UnivariatePolynomial}. -}{ -\spadpaste{content p \free{p}} -} - -Note that the operation \spadfunFrom{coefficients}{UnivariatePolynomial} -omits the zero coefficients from the list. -Sometimes it is useful to convert a univariate polynomial -to a vector whose \eth{\spad{i }} position contains the degree \spad{i-1} -coefficient of the polynomial. -\xtc{ -}{ -\spadpaste{ux := (x**4+2*x+3)::UP(x,INT) \bound{ux}} -} -\xtc{ -To get a complete vector of coefficients, use the operation -\spadfunFrom{vectorise}{UnivariatePolynomial}, which takes a -univariate polynomial and an integer denoting the length of the -desired vector. -}{ -\spadpaste{vectorise(ux,5) \free{ux}} -} - -It is common to want to do something to every term of a polynomial, -creating a new polynomial in the process. -\xtc{ -This is a function for iterating across the terms of a polynomial, -squaring each term. -}{ -\begin{spadsrc}[\bound{squareTerms}] -squareTerms(p) == - reduce(+,[t**2 for t in monomials p]) -\end{spadsrc} -} -\xtc{ -Recall what \spad{p} looked like. -}{ -\spadpaste{p \free{p}} -} -\xtc{ -We can demonstrate \userfun{squareTerms} on \spad{p}. -}{ -\spadpaste{squareTerms p \free{p}\free{squareTerms}} -} - -When the coefficients of the univariate polynomial belong to a -field,\footnote{For example, when the coefficients are rational -numbers, as opposed to integers. The important property of -a field is that non-zero elements can be divided and produce -another element. The quotient of the integers 2 and 3 is not -another integer.} -it is possible to compute quotients and remainders. -\xtc{ -}{ -\spadpaste{(r,s) : UP(a1,FRAC INT) \bound{rdec}\bound{sdec}} -} -\xtc{ -}{ -\spadpaste{r := a1**2 - 2/3 \free{rdec}\bound{r}} -} -\xtc{ -}{ -\spadpaste{s := a1 + 4 \free{sdec}\bound{s}} -} -\xtc{ -When the coefficients are rational numbers or rational expressions, the -operation \spadfunFrom{quo}{UnivariatePolynomial} computes the quotient -of two polynomials. -}{ -\spadpaste{r quo s \free{r s}} -} -\xtc{ -The operation -\spadfunFrom{rem}{UnivariatePolynomial} computes the remainder. -}{ -\spadpaste{r rem s \free{r s}} -} -\xtc{ -The operation \spadfunFrom{divide}{UnivariatePolynomial} can be used to -return a record of both components. -}{ -\spadpaste{d := divide(r, s) \free{r s}\bound{d}} -} -\xtc{ -Now we check the arithmetic! -}{ -\spadpaste{r - (d.quotient * s + d.remainder) \free{r s d}} -} -\xtc{ -It is also possible to integrate univariate polynomials when the -coefficients belong to a field. -}{ -\spadpaste{integrate r \free{r}} -} -\xtc{ -}{ -\spadpaste{integrate s \free{s}} -} - -One application of univariate polynomials is to see expressions in terms -of a specific variable. -% -\xtc{ -We start with a polynomial in \spad{a1} whose coefficients -are quotients of polynomials in \spad{b1} and \spad{b2}. -}{ -\spadpaste{t : UP(a1,FRAC POLY INT) \bound{tdec}} -} -\xtc{ -Since in this case we are not talking about using multivariate -polynomials in only two variables, we use \spadtype{Polynomial}. -We also use \spadtype{Fraction} because we want fractions. -}{ -\spadpaste{t := a1**2 - a1/b2 + (b1**2-b1)/(b2+3) \free{tdec}\bound{t}} -} -\xtc{ -We push all the variables into a single quotient of polynomials. -}{ -\spadpaste{u : FRAC POLY INT := t \bound{u}\free{t}} -} -\xtc{ -Alternatively, we can view this as a polynomial in the variable -This is a {\it mode-directed} conversion: you indicate -as much of the structure as you care about and let Axiom -decide on the full type and how to do the transformation. -}{ -\spadpaste{u :: UP(b1,?) \free{u}} -} - -See \downlink{``\ugProblemFactorTitle''}{ugProblemFactorPage} in -Section \ugProblemFactorNumber\ignore{ugProblemFactor} -for a discussion of the factorization facilities -in Axiom for univariate polynomials. -For more information on related topics, see -\downlink{``\ugIntroVariablesTitle''}{ugIntroVariablesPage} in -Section \ugIntroVariablesNumber\ignore{ugIntroVariables}, -\downlink{``\ugTypesConvertTitle''}{ugTypesConvertPage} in -Section \ugTypesConvertNumber\ignore{ugTypesConvert}, -\downlink{`Polynomial'}{PolynomialXmpPage}\ignore{Polynomial}, -\downlink{`MultivariatePolynomial'}{MultivariatePolynomialXmpPage} -\ignore{MultivariatePolynomial}, and -\downlink{`DistributedMultivariatePolynomial'} -{DistributedMultivariatePolynomialXmpPage} -\ignore{DistributedMultivariatePolynomial}. -% -\showBlurb{UnivariatePolynomial} -\endscroll -\autobuttons +\index{pages!UXANNAMeas!annaex.ht} +\index{annaex.ht!pages!UXANNAMeas} +\index{UXANNAMeas!annaex.ht!pages} +<>= +\begin{page}{UXANNAMeas}{Measure Functions} +\begin{scroll} +\blankline +Each measure function will estimate the ability of a particular method to +solve a problem. It will consult whichever agents are needed to perform +analysis on the problem in order to calculate the measure. There is a +parameter which would contain the best compatibility +value found so far. +\blankline +However, the interpretation we give to the results of some tests is not +always clear-cut. If a set of tests give +conflicting advice as to the appropriateness of a particular method, it +becomes important to decide not only {\it whether} certain properties are +present but also their {\it degree}. This gives us a basis for estimating the +compatibility of each property. +\blankline +We have taken for our model the system recommended by Lucks and Gladwell +which uses a system of measurement of compatibility allowing for interaction +and conflict between a number of attributes. All of these processes may not +be required if the choice is clear-cut e.g. we have an integral to calculate +which has a particular singularity structure for which one particular method +has been specifically constructed. However, for more difficult cases a +composite picture should be built up to calculate a true measurement. +\blankline +How the compatibility functions interpret the measurements of various +attributes is up to them and may vary between differing methods. It is this +area that takes as its basis the {\it judgement} of Numerical Analysis +`experts' whether that be from the documentation (which may be deficient in +certain respects) or from alternative sources. However, its assessment of +the suitability or otherwise of a particular method is reflected in a single +normalised value facilitating the direct comparison of the suitability of a +number of possible methods. +\blankline +\end{scroll} +\downlink{ Computational Agents }{UXANNAAgent} +\downlink{ Examples }{UXANNAEx} \end{page} @ -\section{vector.ht} -<>= -\newcommand{\VectorXmpTitle}{Vector} -\newcommand{\VectorXmpNumber}{9.85} - -@ -\subsection{Vector} -\label{VectorXmpPage} -\begin{itemize} -\item OneDimensionalArrayXmpPage \ref{OneDimensionalArrayXmpPage} on -page~pageref{OneDimensionalArrayXmpPage} -\item ListXmpPage \ref{ListXmpPage} on -page~pageref{ListXmpPage} -\item MatrixXmpPage \ref{MatrixXmpPage} on -page~pageref{MatrixXmpPage} -\item OneDimensionalArrayXmpPage \ref{OneDimensionalArrayXmpPage} on -page~pageref{OneDimensionalArrayXmpPage} -\item SetXmpPage \ref{SetXmpPage} on -page~pageref{SetXmpPage} -\item TableXmpPage \ref{TableXmpPage} on -page~pageref{TableXmpPage} -\item TwoDimensionalArrayXmpPage \ref{TwoDimensionalArrayXmpPage} on -page~pageref{TwoDimensionalArrayXmpPage} -\end{itemize} -\index{pages!VectorXmpPage!vector.ht} -\index{vector.ht!pages!VectorXmpPage} -\index{VectorXmpPage!vector.ht!pages} -<>= -\begin{page}{VectorXmpPage}{Vector} -\beginscroll - -The \spadtype{Vector} domain is used for storing data in a one-dimensional -indexed data structure. -A vector is a homogeneous data structure in that all the components of the -vector must belong to the same Axiom domain. -Each vector has a fixed length specified by the user; vectors are not -extensible. -This domain is similar to the \spadtype{OneDimensionalArray} domain, -except that when the components of a \spadtype{Vector} belong to a -\spadtype{Ring}, arithmetic operations are provided. -For more examples of operations that are defined for both -\spadtype{Vector} and \spadtype{OneDimensionalArray}, see -\downlink{`OneDimensionalArray'}{OneDimensionalArrayXmpPage} -\ignore{OneDimensionalArray}. - -As with the \spadtype{OneDimensionalArray} domain, a \spadtype{Vector} can -be created by calling the operation \spadfunFrom{new}{Vector}, its components -can be accessed by calling the operations \spadfunFrom{elt}{Vector} and -\spadfunFrom{qelt}{Vector}, and its components can be reset by calling the -operations \spadfunFrom{setelt}{Vector} and -\spadfunFromX{qsetelt}{Vector}. -\xtc{ -This creates a vector of integers of length -\spad{5} all of whose components are \spad{12}. -}{ -\spadpaste{u : VECTOR INT := new(5,12) \bound{u}} -} -\xtc{ -This is how you create a vector from a list of its components. -}{ -\spadpaste{v : VECTOR INT := vector([1,2,3,4,5]) \bound{v}} -} - -\xtc{ -Indexing for vectors begins at \spad{1}. -The last element has index equal to the length of the vector, -which is computed by \spadopFrom{\#}{Vector}. -}{ -\spadpaste{\#(v) \free{v}} -} -\xtc{ -This is the standard way to use \spadfunFrom{elt}{Vector} to extract an -element. -Functionally, it is the same as if you had typed \spad{elt(v,2)}. -}{ -\spadpaste{v.2 \free{v}} -} -\xtc{ -This is the standard way to use \spadfunFrom{setelt}{Vector} to change an -element. -It is the same as if you had typed \spad{setelt(v,3,99)}. -}{ -\spadpaste{v.3 := 99 \free{v}\bound{vdelta}} -} -\xtc{ -Now look at \spad{v} to see the change. -You can -use \spadfunFrom{qelt}{Vector} and \spadfunFromX{qsetelt}{Vector} (instead -of \spadfunFrom{elt}{Vector} and \spadfunFrom{setelt}{Vector}, -respectively) but {\it only} when you know that the index is within the valid -range. -}{ -\spadpaste{v \free{vdelta}} -} - -\xtc{ -When the components belong to a \spadtype{Ring}, Axiom -provides arithmetic operations for \spadtype{Vector}. -These include left and right scalar multiplication. -}{ -\spadpaste{5 * v \free{vdelta}} -} -\xtc{ -}{ -\spadpaste{v * 7 \free{vdelta}} -} -\xtc{ -}{ -\spadpaste{w : VECTOR INT := vector([2,3,4,5,6]) \bound{w}} -} +\subsection{Computational Agents} +\label{UXANNAAgent} +See UXANNAEx \ref{UXANNAEx} on page~\pageref{UXANNAEx} +\index{pages!UXANNAAgent!annaex.ht} +\index{annaex.ht!pages!UXANNAAgent} +\index{UXANNAAgent!annaex.ht!pages} +<>= +\begin{page}{UXANNAAgent}{Computational Agents} +\begin{scroll} +\blankline +Computational Agents are those program segments which investigate the +attributes of the input function or functions, such as +{\bf stiffnessAndStabilityOfODEIF} +(the {\em IF} indicates that it is an {\em Intensity Function} i.e. one that +returns a normalised real number or a set of normalised real numbers). They +are usually functions or programs written completely in the Axiom +language and implemented using computer algebra. +\blankline +Some agents will be common to more than one problem domain whereas others +will be specific to a single domain. They also vary greatly in their +complexity. It is a fairly simple task to return details about the range of +a function since this information will have been included in the problem +specification. It is a different order of complexity to return details of +its singularity structure. +\blankline \xtc{ -Addition and subtraction are also available. +As an example, here is a call to the computational agent {\bf +singularitiesOf} to obtain the list of singularities of the function +{\it tan x} which are in the range +{\it 0..12\inputbitmap{\htbmdir{}/pi.xbm}}: +\blankline }{ -\spadpaste{v + w \free{vdelta w}} } \xtc{ -Of course, when adding or subtracting, the two vectors must have the same -length or an error message is displayed. }{ -\spadpaste{v - w \free{vdelta w}} +\spadpaste{s := singularitiesOf(tan x,[x],0..12*\%pi)$ESCONT \free{lib3} } } - -For more information about other aggregate domains, -see the following: -\downlink{`List'}{ListXmpPage}\ignore{List}, -\downlink{`Matrix'}{MatrixXmpPage}\ignore{Matrix}, -\downlink{`OneDimensionalArray'}{OneDimensionalArrayXmpPage}\ignore{OneDimensionalArray}, -\downlink{`Set'}{SetXmpPage}\ignore{Set}, -\downlink{`Table'}{TableXmpPage}\ignore{Table}, and -\downlink{`TwoDimensionalArray'}{TwoDimensionalArrayXmpPage}\ignore{TwoDimensionalArray}. -Issue the system command \spadcmd{)show Vector} -to display the full list of operations defined by -\spadtype{Vector}. - -\endscroll -\autobuttons +\blankline +Each of these computational agents which may be called by a number of method +domains retain their output in a dynamic hash-table, so speeding the process +and retaining efficiency. +\end{scroll} +\downlink{ Examples }{UXANNAEx} \end{page} -% - -@ -\section{void.ht} -<>= -\newcommand{\VoidXmpTitle}{Void} -\newcommand{\VoidXmpNumber}{9.86} @ -\subsection{Void} -\label{VoidXmpPage} -\index{pages!VoidXmpPage!void.ht} -\index{void.ht!pages!VoidXmpPage} -\index{VoidXmpPage!void.ht!pages} -<>= -\begin{page}{VoidXmpPage}{Void} -\beginscroll - -When an expression is not in a value context, it is given type \spadtype{Void}. -For example, in the expression +\chapter{ANNA Algebra Code} \begin{verbatim} -r := (a; b; if c then d else e; f) +)co annacat.spad +)co cont.spad +)co d01Package.spad +)co d01agents.spad +)co d01routine.spad +)co d01transform.spad +)co d01weights.spad +)co d02Package.spad +)co d02agents.spad +)co d02routine.spad +)co d03Package.spad +)co d03agents.spad +)co d03routine.spad +)co e04Package.spad +)co e04agents.spad +)co e04routine.spad +)co functions.spad +)co routines.spad +)co tools.spad \end{verbatim} -values are used only from the subexpressions \spad{c} and \spad{f}: all -others are thrown away. -The subexpressions \spad{a}, \spad{b}, \spad{d} and \spad{e} -are evaluated for side-effects only and have type \spadtype{Void}. -There is a unique value of type \spadtype{Void}. - -\xtc{ -You will most often see results of type \spadtype{Void} when you -declare a variable. -}{ -\spadpaste{a : Integer} -} -\noOutputXtc{ -Usually no output is displayed for \spadtype{Void} results. -You can force the display of a rather ugly object by issuing -\spadcmd{)set message void on}. -}{ -\spadpaste{)set message void on} -} -\xtc{ -}{ -\spadpaste{b : Fraction Integer} -} -\noOutputXtc{ -}{ -\spadpaste{)set message void off} -} -\xtc{ -All values can be converted to type \spadtype{Void}. -}{ -\spadpaste{3::Void \bound{prev}} -} -\xtc{ -Once a value has been converted to \spadtype{Void}, it cannot be recovered. -}{ -\spadpaste{\% :: PositiveInteger \free{prev}} -} -\endscroll -\autobuttons -\end{page} - -@ -\section{wutset.ht} -<>= -\newcommand{\WuWenTsunTriangularSetXmpTitle}{WuWenTsunTriangularSet} -\newcommand{\WuWenTsunTriangularSetXmpNumber}{9.87} - -@ -\subsection{WuWenTsunTriangularSet} -\label{WuWenTsunTriangularSetXmpPage} -\index{pages!WuWenTsunTriangularSetXmpPage!wutset.ht} -\index{wutset.ht!pages!WuWenTsunTriangularSetXmpPage} -\index{WuWenTsunTriangularSetXmpPage!wutset.ht!pages} -<>= -\begin{page}{WuWenTsunTriangularSetXmpPage}{WuWenTsunTriangularSet} -\beginscroll -The \spadtype{WuWenTsunTriangularSet} domain constructor implements -the characteristic set method of Wu Wen Tsun. -This algorithm computes a list of triangular sets from a list -of polynomials such that the algebraic variety defined by the -given list of polynomials decomposes into the union of the regular-zero sets -of the computed triangular sets. -The constructor takes four arguments. -The first one, {\bf R}, is the coefficient ring of the polynomials; -it must belong to the category \spadtype{IntegralDomain}. -The second one, {\bf E}, is the exponent monoid of the polynomials; -it must belong to the category \spadtype{OrderedAbelianMonoidSup}. -The third one, {\bf V}, is the ordered set of variables; -it must belong to the category \spadtype{OrderedSet}. -The last one is the polynomial ring; -it must belong to the category \spadtype{RecursivePolynomialCategory(R,E,V)}. -The abbreviation for \spadtype{WuWenTsunTriangularSet} is -\spadtype{WUTSET}. - -Let us illustrate the facilities by an example. - -\xtc{ -Define the coefficient ring. -}{ -\spadpaste{R := Integer \bound{R}} -} -\xtc{ -Define the list of variables, -}{ -\spadpaste{ls : List Symbol := [x,y,z,t] \bound{ls}} -} -\xtc{ -and make it an ordered set; -}{ -\spadpaste{V := OVAR(ls) \free{ls} \bound{V}} -} -\xtc{ -then define the exponent monoid. -}{ -\spadpaste{E := IndexedExponents V \free{V} \bound{E}} -} -\xtc{ -Define the polynomial ring. -}{ -\spadpaste{P := NSMP(R, V) \free{R} \free{V} \bound{P}} -} -\xtc{ -Let the variables be polynomial. -}{ -\spadpaste{x: P := 'x \free{P} \bound{x}} -} -\xtc{ -}{ -\spadpaste{y: P := 'y \free{P} \bound{y}} -} -\xtc{ -}{ -\spadpaste{z: P := 'z \free{P} \bound{z}} -} -\xtc{ -}{ -\spadpaste{t: P := 't \free{P} \bound{t}} -} -\xtc{ -Now call the \spadtype{WuWenTsunTriangularSet} domain constructor. -}{ -\spadpaste{T := WUTSET(R,E,V,P) \free{R} \free{E} \free{V} \free{P} \bound{T} } -} -\xtc{ -Define a polynomial system. -}{ -\spadpaste{p1 := x ** 31 - x ** 6 - x - y \free{x} \free{y} \bound{p1}} -} -\xtc{ -}{ -\spadpaste{p2 := x ** 8 - z \free{x} \free{z} \bound{p2}} -} -\xtc{ -}{ -\spadpaste{p3 := x ** 10 - t \free{x} \free{t} \bound{p3}} -} -\xtc{ -}{ -\spadpaste{lp := [p1, p2, p3] \free{p1} \free{p2} \free{p3} \bound{lp}} -} -\xtc{ -Compute a characteristic set of the system. -}{ -\spadpaste{characteristicSet(lp)$T \free{lp} \free{T}} -} -\xtc{ -Solve the system. -}{ -\spadpaste{zeroSetSplit(lp)$T \free{lp} \free{T}} -} - - -The \spadtype{RegularTriangularSet} and -\spadtype{SquareFreeRegularTriangularSet} domain constructors, -and the \spadtype{LazardSetSolvingPackage}, -\spadtype{SquareFreeRegularTriangularSet} -and \spadtype{ZeroDimensionalSolvePackage} package constructors -also provide operations to compute triangular -decompositions of algebraic varieties. -These five constructor use a special kind of -characteristic sets, called regular triangular sets. -These special characteristic sets have better -properties than the general ones. -Regular triangular sets and their related concepts are presented in -the paper "On the Theories of Triangular sets" By P. Aubry, D. Lazard -and M. Moreno Maza (to appear in the Journal of Symbolic Computation). -The decomposition algorithm (due to the third author) available in the -four above constructors provide generally better timings than -the characteristic set method. -In fact, the \spadtype{WUTSET} constructor remains interesting -for the purpose of manipulating characteristic sets whereas -the other constructors are more convenient for solving polynomial systems. - -Note that the way of understanding triangular decompositions -is detailed in the example of the \spadtype{RegularTriangularSet} -constructor. -\endscroll -\autobuttons -\end{page} - -@ -\section{xmpexp.ht} -<>= -\newcommand{\ExamplesExposedTitle}{Some Examples of Domains and Packages} -\newcommand{\ExamplesExposedNumber}{9.} - -@ -\subsection{Some Examples of Domains and Packages} -\label{ExamplesExposedPage} -\begin{itemize} -\item AssociationListXmpPage \ref{AssociationListXmpPage} on -page~pageref{AssociationListXmpPage} -\item BalancedBinaryTreeXmpPage \ref{BalancedBinaryTreeXmpPage} on -page~pageref{BalancedBinaryTreeXmpPage} -\item BasicOperatorXmpPage \ref{BasicOperatorXmpPage} on -page~pageref{BasicOperatorXmpPage} -\item BinaryExpansionXmpPage \ref{BinaryExpansionXmpPage} on -page~pageref{BinaryExpansionXmpPage} -\item BinarySearchTreeXmpPage \ref{BinarySearchTreeXmpPage} on -page~pageref{BinarySearchTreeXmpPage} -\item CardinalNumberXmpPage \ref{CardinalNumberXmpPage} on -page~pageref{CardinalNumberXmpPage} -\item CartesianTensorXmpPage \ref{CartesianTensorXmpPage} on -page~pageref{CartesianTensorXmpPage} -\item CharacterXmpPage \ref{CharacterXmpPage} on -page~pageref{CharacterXmpPage} -\item CharacterClassXmpPage \ref{CharacterClassXmpPage} on -page~pageref{CharacterClassXmpPage} -\item CliffordAlgebraXmpPage \ref{CliffordAlgebraXmpPage} on -page~pageref{CliffordAlgebraXmpPage} -\item ComplexXmpPage \ref{ComplexXmpPage} on -page~pageref{ComplexXmpPage} -\item ContinuedFractionXmpPage \ref{ContinuedFractionXmpPage} on -page~pageref{ContinuedFractionXmpPage} -\item CycleIndicatorsXmpPage \ref{CycleIndicatorsXmpPage} on -page~pageref{CycleIndicatorsXmpPage} -\item DeRhamComplexXmpPage \ref{DeRhamComplexXmpPage} on -page~pageref{DeRhamComplexXmpPage} -\item DecimalExpansionXmpPage \ref{DecimalExpansionXmpPage} on -page~pageref{DecimalExpansionXmpPage} -\item DistributedMultivariatePolynomialXmpPage -\ref{DistributedMultivariatePolynomialXmpPage} on -page~pageref{DistributedMultivariatePolynomialXmpPage} -\item DoubleFloatXmpPage \ref{DoubleFloatXmpPage} on -page~pageref{DoubleFloatXmpPage} -\item EqTableXmpPage \ref{EqTableXmpPage} on -page~pageref{EqTableXmpPage} -\item EquationXmpPage \ref{EquationXmpPage} on -page~pageref{EquationXmpPage} -\item ExitXmpPage \ref{ExitXmpPage} on -page~pageref{ExitXmpPage} -\item ExpressionXmpPage \ref{ExpressionXmpPage} on -page~pageref{ExpressionXmpPage} -\item FactoredXmpPage \ref{FactoredXmpPage} on -page~pageref{FactoredXmpPage} -\item FactoredFunctionsTwoXmpPage \ref{FactoredFunctionsTwoXmpPage} on -page~pageref{FactoredFunctionsTwoXmpPage} -\item FileXmpPage \ref{FileXmpPage} on -page~pageref{FileXmpPage} -\item FileNameXmpPage \ref{FileNameXmpPage} on -page~pageref{FileNameXmpPage} -\item FlexibleArrayXmpPage \ref{FlexibleArrayXmpPage} on -page~pageref{FlexibleArrayXmpPage} -\item FloatXmpPage \ref{FloatXmpPage} on -page~pageref{FloatXmpPage} -\item FractionXmpPage \ref{FractionXmpPage} on -page~pageref{FractionXmpPage} -\item FullPartialFractionExpansionXmpPage -\ref{FullPartialFractionExpansionXmpPage} on -page~pageref{FullPartialFractionExpansionXmpPage} -\item GeneralSparseTableXmpPage \ref{GeneralSparseTableXmpPage} on -page~pageref{GeneralSparseTableXmpPage} -\item GroebnerFactorizationPackageXmpPage -\ref{GroebnerFactorizationPackageXmpPage} on -page~pageref{GroebnerFactorizationPackageXmpPage} -\item HeapXmpPage \ref{HeapXmpPage} on -page~pageref{HeapXmpPage} -\item HexadecimalExpansionXmpPage \ref{HexadecimalExpansionXmpPage} on -page~pageref{HexadecimalExpansionXmpPage} -\item IntegerXmpPage \ref{IntegerXmpPage} on -page~pageref{IntegerXmpPage} -\item IntegerLinearDependenceXmpPage \ref{IntegerLinearDependenceXmpPage} on -page~pageref{IntegerLinearDependenceXmpPage} -\item IntegerNumberTheoryFunctionsXmpPage -\ref{IntegerNumberTheoryFunctionsXmpPage} on -page~pageref{IntegerNumberTheoryFunctionsXmpPage} -\item KernelXmpPage \ref{KernelXmpPage} on -page~pageref{KernelXmpPage} -\item KeyedAccessFileXmpPage \ref{KeyedAccessFileXmpPage} on -page~pageref{KeyedAccessFileXmpPage} -\item LexTriangularPackageXmpPage \ref{LexTriangularPackageXmpPage} on -page~pageref{LexTriangularPackageXmpPage} -\item LazardSetSolvingPackageXmpPage \ref{LazardSetSolvingPackageXmpPage} on -page~pageref{LazardSetSolvingPackageXmpPage} -\item LibraryXmpPage \ref{LibraryXmpPage} on -page~pageref{LibraryXmpPage} -\item LieExponentialsXmpPage \ref{LieExponentialsXmpPage} on -page~pageref{LieExponentialsXmpPage} -\item LiePolynomialXmpPage \ref{LiePolynomialXmpPage} on -page~pageref{LiePolynomialXmpPage} -\item LinearOrdinaryDifferentialOperatorXmpPage -\ref{LinearOrdinaryDifferentialOperatorXmpPage} on -page~pageref{LinearOrdinaryDifferentialOperatorXmpPage} -\item LinearOrdinaryDifferentialOperatorOneXmpPage -\ref{LinearOrdinaryDifferentialOperatorOneXmpPage} on -page~pageref{LinearOrdinaryDifferentialOperatorOneXmpPage} -\item LinearOrdinaryDifferentialOperatorTwoXmpPage -\ref{LinearOrdinaryDifferentialOperatorTwoXmpPage} on -page~pageref{LinearOrdinaryDifferentialOperatorTwoXmpPage} -\item ListXmpPage \ref{ListXmpPage} on -page~pageref{ListXmpPage} -\item LyndonWordXmpPage \ref{LyndonWordXmpPage} on -page~pageref{LyndonWordXmpPage} -\item MagmaXmpPage \ref{MagmaXmpPage} on -page~pageref{MagmaXmpPage} -\item MakeFunctionXmpPage \ref{MakeFunctionXmpPage} on -page~pageref{MakeFunctionXmpPage} -\item MappingPackageOneXmpPage \ref{MappingPackageOneXmpPage} on -page~pageref{MappingPackageOneXmpPage} -\item MatrixXmpPage \ref{MatrixXmpPage} on -page~pageref{MatrixXmpPage} -\item MultiSetXmpPage \ref{MultiSetXmpPage} on -page~pageref{MultiSetXmpPage} -\item MultivariatePolynomialXmpPage \ref{MultivariatePolynomialXmpPage} on -page~pageref{MultivariatePolynomialXmpPage} -\item NoneXmpPage \ref{NoneXmpPage} on -page~pageref{NoneXmpPage} -\item OctonionXmpPage \ref{OctonionXmpPage} on -page~pageref{OctonionXmpPage} -\item OneDimensionalArrayXmpPage \ref{OneDimensionalArrayXmpPage} on -page~pageref{OneDimensionalArrayXmpPage} -\item OperatorXmpPage \ref{OperatorXmpPage} on -page~pageref{OperatorXmpPage} -\item OrderedVariableListXmpPage \ref{OrderedVariableListXmpPage} on -page~pageref{OrderedVariableListXmpPage} -\item OrderlyDifferentialPolynomialXmpPage -\ref{OrderlyDifferentialPolynomialXmpPage} on -page~pageref{OrderlyDifferentialPolynomialXmpPage} -\item PartialFractionXmpPage \ref{PartialFractionXmpPage} on -page~pageref{PartialFractionXmpPage} -\item PermanentXmpPage \ref{PermanentXmpPage} on -page~pageref{PermanentXmpPage} -\item PolynomialXmpPage \ref{PolynomialXmpPage} on -page~pageref{PolynomialXmpPage} -\item QuaternionXmpPage \ref{QuaternionXmpPage} on -page~pageref{QuaternionXmpPage} -\item RadixExpansionXmpPage \ref{RadixExpansionXmpPage} on -page~pageref{RadixExpansionXmpPage} -\item RealClosureXmpPage \ref{RealClosureXmpPage} on -page~pageref{RealClosureXmpPage} -\item RegularTriangularSetXmpPage \ref{RegularTriangularSetXmpPage} on -page~pageref{RegularTriangularSetXmpPage} -\item RomanNumeralXmpPage \ref{RomanNumeralXmpPage} on -page~pageref{RomanNumeralXmpPage} -\item SegmentXmpPage \ref{SegmentXmpPage} on -page~pageref{SegmentXmpPage} -\item SegmentBindingXmpPage \ref{SegmentBindingXmpPage} on -page~pageref{SegmentBindingXmpPage} -\item SetXmpPage \ref{SetXmpPage} on -page~pageref{SetXmpPage} -\item SingleIntegerXmpPage \ref{SingleIntegerXmpPage} on -page~pageref{SingleIntegerXmpPage} -\item SparseTableXmpPage \ref{SparseTableXmpPage} on -page~pageref{SparseTableXmpPage} -\item SquareMatrixXmpPage \ref{SquareMatrixXmpPage} on -page~pageref{SquareMatrixXmpPage} -\item SquareFreeRegularTriangularSetXmpPage -\ref{SquareFreeRegularTriangularSetXmpPage} on -page~pageref{SquareFreeRegularTriangularSetXmpPage} -\item StreamXmpPage \ref{StreamXmpPage} on -page~pageref{StreamXmpPage} -\item StringXmpPage \ref{StringXmpPage} on -page~pageref{StringXmpPage} -\item StringTableXmpPage \ref{StringTableXmpPage} on -page~pageref{StringTableXmpPage} -\item SymbolXmpPage \ref{SymbolXmpPage} on -page~pageref{SymbolXmpPage} -\item TableXmpPage \ref{TableXmpPage} on -page~pageref{TableXmpPage} -\item TextFileXmpPage \ref{TextFileXmpPage} on -page~pageref{TextFileXmpPage} -\item TwoDimensionalArrayXmpPage \ref{TwoDimensionalArrayXmpPage} on -page~pageref{TwoDimensionalArrayXmpPage} -\item UnivariatePolynomialXmpPage \ref{UnivariatePolynomialXmpPage} on -page~pageref{UnivariatePolynomialXmpPage} -\item UniversalSegmentXmpPage \ref{UniversalSegmentXmpPage} on -page~pageref{UniversalSegmentXmpPage} -\item VectorXmpPage \ref{VectorXmpPage} on -page~pageref{VectorXmpPage} -\item VoidXmpPage \ref{VoidXmpPage} on -page~pageref{VoidXmpPage} -\item WuWenTsunTriangularSetXmpPage \ref{WuWenTsunTriangularSetXmpPage} on -page~pageref{WuWenTsunTriangularSetXmpPage} -\item XPBWPolynomialXmpPage \ref{XPBWPolynomialXmpPage} on -page~pageref{XPBWPolynomialXmpPage} -\item XPolynomialXmpPage \ref{XPolynomialXmpPage} on -page~pageref{XPolynomialXmpPage} -\item XPolynomialRingXmpPage \ref{XPolynomialRingXmpPage} on -page~pageref{XPolynomialRingXmpPage} -\item ZeroDimensionalSolvePackageXmpPage -\ref{ZeroDimensionalSolvePackageXmpPage} on -page~pageref{ZeroDimensionalSolvePackageXmpPage} -\end{itemize} -\index{pages!ExamplesExposedPage!xmpexp.ht} -\index{xmpexp.ht!pages!ExamplesExposedPage} -\index{ExamplesExposedPage!xmpexp.ht!pages} -<>= -\begin{page}{ExamplesExposedPage}{Some Examples of Domains and Packages} -This is a menu of examples of some domains and packages. -Click on any item below to see that section. -\beginscroll -\table{ -{ \downlink{AssociationList}{AssociationListXmpPage} } -{ \downlink{BalancedBinaryTree}{BalancedBinaryTreeXmpPage} } -{ \downlink{BasicOperator}{BasicOperatorXmpPage} } -{ \downlink{BinaryExpansion}{BinaryExpansionXmpPage} } -{ \downlink{BinarySearchTree}{BinarySearchTreeXmpPage} } -{ \downlink{CardinalNumber}{CardinalNumberXmpPage} } -{ \downlink{CartesianTensor}{CartesianTensorXmpPage} } -{ \downlink{Character}{CharacterXmpPage} } -{ \downlink{CharacterClass}{CharacterClassXmpPage} } -{ \downlink{CliffordAlgebra}{CliffordAlgebraXmpPage} } -{ \downlink{Complex}{ComplexXmpPage} } -{ \downlink{ContinuedFraction}{ContinuedFractionXmpPage} } -{ \downlink{CycleIndicators}{CycleIndicatorsXmpPage} } -{ \downlink{DeRhamComplex}{DeRhamComplexXmpPage} } -{ \downlink{DecimalExpansion}{DecimalExpansionXmpPage} } -{ \downlink{DistributedMultivariatePolynomial}{DistributedMultivariatePolynomialXmpPage} } -{ \downlink{DoubleFloat}{DoubleFloatXmpPage} } -{ \downlink{EqTable}{EqTableXmpPage} } -{ \downlink{Equation}{EquationXmpPage} } -{ \downlink{Exit}{ExitXmpPage} } -{ \downlink{Expression}{ExpressionXmpPage} } -{ \downlink{Factored}{FactoredXmpPage} } -{ \downlink{FactoredFunctions2}{FactoredFunctionsTwoXmpPage} } -{ \downlink{File}{FileXmpPage} } -{ \downlink{FileName}{FileNameXmpPage} } -{ \downlink{FlexibleArray}{FlexibleArrayXmpPage} } -{ \downlink{Float}{FloatXmpPage} } -{ \downlink{Fraction}{FractionXmpPage} } -{ \downlink{FullPartialFractionExpansion}{FullPartialFractionExpansionXmpPage} } -{ \downlink{GeneralSparseTable}{GeneralSparseTableXmpPage} } -{ \downlink{GroebnerFactorizationPackage}{GroebnerFactorizationPackageXmpPage} } -{ \downlink{Heap}{HeapXmpPage} } -{ \downlink{HexadecimalExpansion}{HexadecimalExpansionXmpPage} } -{ \downlink{Integer}{IntegerXmpPage} } -{ \downlink{IntegerLinearDependence}{IntegerLinearDependenceXmpPage} } -{ \downlink{IntegerNumberTheoryFunctions}{IntegerNumberTheoryFunctionsXmpPage} } -{ \downlink{Kernel}{KernelXmpPage} } -{ \downlink{KeyedAccessFile}{KeyedAccessFileXmpPage} } -{ \downlink{LexTriangularPackage}{LexTriangularPackageXmpPage} } -{ \downlink{LazardSetSolvingPackage}{LazardSetSolvingPackageXmpPage} } -{ \downlink{Library}{LibraryXmpPage} } -{ \downlink{LieExponentials}{LieExponentialsXmpPage} } -{ \downlink{LiePolynomial}{LiePolynomialXmpPage} } -{ \downlink{LinearOrdinaryDifferentialOperator}{LinearOrdinaryDifferentialOperatorXmpPage} } -{ \downlink{LinearOrdinaryDifferentialOperator1}{LinearOrdinaryDifferentialOperatorOneXmpPage} } -{ \downlink{LinearOrdinaryDifferentialOperator2}{LinearOrdinaryDifferentialOperatorTwoXmpPage} } -{ \downlink{List}{ListXmpPage} } -{ \downlink{LyndonWord}{LyndonWordXmpPage} } -{ \downlink{Magma}{MagmaXmpPage} } -{ \downlink{MakeFunction}{MakeFunctionXmpPage} } -{ \downlink{MappingPackage1}{MappingPackageOneXmpPage} } -{ \downlink{Matrix}{MatrixXmpPage} } -{ \downlink{MultiSet}{MultiSetXmpPage} } -{ \downlink{MultivariatePolynomial}{MultivariatePolynomialXmpPage} } -{ \downlink{None}{NoneXmpPage} } -{ \downlink{Octonion}{OctonionXmpPage} } -{ \downlink{OneDimensionalArray}{OneDimensionalArrayXmpPage} } -{ \downlink{Operator}{OperatorXmpPage} } -{ \downlink{OrderedVariableList}{OrderedVariableListXmpPage} } -{ \downlink{OrderlyDifferentialPolynomial}{OrderlyDifferentialPolynomialXmpPage} } -{ \downlink{PartialFraction}{PartialFractionXmpPage} } -{ \downlink{Permanent}{PermanentXmpPage} } -{ \downlink{Polynomial}{PolynomialXmpPage} } -{ \downlink{Quaternion}{QuaternionXmpPage} } -{ \downlink{RadixExpansion}{RadixExpansionXmpPage} } -{ \downlink{RealClosure}{RealClosureXmpPage} } -{ \downlink{RegularTriangularSet}{RegularTriangularSetXmpPage} } -{ \downlink{RomanNumeral}{RomanNumeralXmpPage} } -{ \downlink{Segment}{SegmentXmpPage} } -{ \downlink{SegmentBinding}{SegmentBindingXmpPage} } -{ \downlink{Set}{SetXmpPage} } -{ \downlink{SingleInteger}{SingleIntegerXmpPage} } -{ \downlink{SparseTable}{SparseTableXmpPage} } -{ \downlink{SquareMatrix}{SquareMatrixXmpPage} } -{ \downlink{SquareFreeRegularTriangularSet}{SquareFreeRegularTriangularSetXmpPage} } -{ \downlink{Stream}{StreamXmpPage} } -{ \downlink{String}{StringXmpPage} } -{ \downlink{StringTable}{StringTableXmpPage} } -{ \downlink{Symbol}{SymbolXmpPage} } -{ \downlink{Table}{TableXmpPage} } -{ \downlink{TextFile}{TextFileXmpPage} } -{ \downlink{TwoDimensionalArray}{TwoDimensionalArrayXmpPage} } -{ \downlink{UnivariatePolynomial}{UnivariatePolynomialXmpPage} } -{ \downlink{UniversalSegment}{UniversalSegmentXmpPage} } -{ \downlink{Vector}{VectorXmpPage} } -{ \downlink{Void}{VoidXmpPage} } -{ \downlink{WuWenTsunTriangularSet}{WuWenTsunTriangularSetXmpPage} } -{ \downlink{XPBWPolynomial}{XPBWPolynomialXmpPage} } -{ \downlink{XPolynomial}{XPolynomialXmpPage} } -{ \downlink{XPolynomialRing}{XPolynomialRingXmpPage} } -{ \downlink{ZeroDimensionalSolvePackage}{ZeroDimensionalSolvePackageXmpPage} } -} -\endscroll -\autobuttons -\end{page} - -@ -\section{xpbwpoly.ht} -<>= -\newcommand{\XPBWPolynomialXmpTitle}{XPBWPolynomial} -\newcommand{\XPBWPolynomialXmpNumber}{9.88} - -@ -\subsection{XPBWPolynomial} -\label{XPBWPolynomialXmpPage} -\index{pages!XPBWPolynomialXmpPage!xpbwpoly.ht} -\index{xpbwpoly.ht!pages!XPBWPolynomialXmpPage} -\index{XPBWPolynomialXmpPage!xpbwpoly.ht!pages} -<>= -\begin{page}{XPBWPolynomialXmpPage}{XPBWPolynomial} -\beginscroll -Initialisations -\xtc{ -}{ -\spadpaste{a:Symbol := 'a \bound{a}} -} -\xtc{ -}{ -\spadpaste{b:Symbol := 'b \bound{b}} -} -\xtc{ -}{ -\spadpaste{RN := Fraction(Integer) \bound{RN}} -} -\xtc{ -}{ -\spadpaste{word := OrderedFreeMonoid Symbol \bound{word}} -} -\xtc{ -}{ -\spadpaste{lword := LyndonWord(Symbol) \bound{lword}} -} -\xtc{ -}{ -\spadpaste{base := PoincareBirkhoffWittLyndonBasis Symbol \bound{base}} -} -\xtc{ -}{ -\spadpaste{dpoly := XDistributedPolynomial(Symbol, RN) \bound{dpoly} \free{RN}} -} -\xtc{ -}{ -\spadpaste{rpoly := XRecursivePolynomial(Symbol, RN) \bound{rpoly} \free{RN}} -} -\xtc{ -}{ -\spadpaste{lpoly := LiePolynomial(Symbol, RN) \bound{lpoly} \free{RN}} -} -\xtc{ -}{ -\spadpaste{poly := XPBWPolynomial(Symbol, RN) \bound{poly} \free{RN}} -} -\xtc{ -}{ -\spadpaste{liste : List lword := LyndonWordsList([a,b], 6) \bound{liste} \free{lword a b }} -} - -Let's make some polynomials -\xtc{ -}{ -\spadpaste{0$poly \free{poly}} -} -\xtc{ -}{ -\spadpaste{1$poly \free{poly}} -} -\xtc{ -}{ -\spadpaste{p : poly := a \free{a poly} \bound{p}} -} -\xtc{ -}{ -\spadpaste{q : poly := b \free{b poly} \bound{q}} -} -\xtc{ -}{ -\spadpaste{pq: poly := p*q \free{p q poly} \bound{pq}} -} -\xtc{ -Coerce to distributed polynomial -}{ -\spadpaste{pq :: dpoly \free{pq dpoly}} -} - -Check some polynomial operations -\xtc{ -}{ -\spadpaste{mirror pq \free{pq}} -} -\xtc{ -}{ -\spadpaste{ListOfTerms pq \free{pq}} -} -\xtc{ -}{ -\spadpaste{reductum pq \free{pq}} -} -\xtc{ -}{ -\spadpaste{leadingMonomial pq \free{pq}} -} -\xtc{ -}{ -\spadpaste{coefficients pq \free{pq}} -} -\xtc{ -}{ -\spadpaste{leadingTerm pq \free{pq}} -} -\xtc{ -}{ -\spadpaste{degree pq \free{pq}} -} -\xtc{ -}{ -\spadpaste{pq4:=exp(pq,4) \bound{pq4} \free{pq}} -} -\xtc{ -}{ -\spadpaste{log(pq4,4) - pq \free{pq4 pq} } -} - -Calculations with verification in \axiomType{XDistributedPolynomial}. -\xtc{ -}{ -\spadpaste{lp1 :lpoly := LiePoly liste.10 \free{liste lpoly} \bound{lp1}} -} -\xtc{ -}{ -\spadpaste{lp2 :lpoly := LiePoly liste.11 \free{liste lpoly} \bound{lp2}} -} -\xtc{ -}{ -\spadpaste{lp :lpoly := [lp1, lp2] \free{lp1 lp2 lpoly} \bound{lp}} -} -\xtc{ -}{ -\spadpaste{lpd1: dpoly := lp1 \free{lp1 dpoly} \bound{lpd1}} -} -\xtc{ -}{ -\spadpaste{lpd2: dpoly := lp2 \free{lp2 dpoly} \bound{lpd2}} -} -\xtc{ -}{ -\spadpaste{lpd : dpoly := lpd1 * lpd2 - lpd2 * lpd1 \free{dpoly lpd1 lpd2} \bound{lpd}} -} -\xtc{ -}{ -\spadpaste{lp :: dpoly - lpd \free{lpd dpoly lp}} -} - -Calculations with verification in \axiomType{XRecursivePolynomial}. -\xtc{ -}{ -\spadpaste{p := 3 * lp \free{lp} \bound{pp}} -} -\xtc{ -}{ -\spadpaste{q := lp1 \free{lp1} \bound{qq}} -} -\xtc{ -}{ -\spadpaste{pq:= p * q \free{pp qq} \bound{pqpq}} -} -\xtc{ -}{ -\spadpaste{pr:rpoly := p :: rpoly \free{rpoly pp} \bound{pr}} -} -\xtc{ -}{ -\spadpaste{qr:rpoly := q :: rpoly \free{rpoly qq} \bound{qr}} -} -\xtc{ -}{ -\spadpaste{pq :: rpoly - pr*qr \free{pr qr rpoly pqpq} } -} -\endscroll -\autobuttons -\end{page} - -@ -\section{xpoly.ht} -<>= -\newcommand{\XPolynomialXmpTitle}{XPolynomial} -\newcommand{\XPolynomialXmpNumber}{9.89} - -@ -\subsection{XPolynomial} -\label{XPolynomialXmpPage} -\index{pages!XPolynomialXmpPage!xpoly.ht.ht} -\index{xpoly.ht.ht!pages!XPolynomialXmpPage} -\index{XPolynomialXmpPage!xpoly.ht.ht!pages} -<>= -\begin{page}{XPolynomialXmpPage}{XPolynomial} -\beginscroll -The \spadtype{XPolynomial} domain constructor implements -multivariate polynomials -whose set of variables is \spadtype{Symbol}. -These variables do not commute. -The only parameter of this construtor is -the coefficient ring which may be non-commutative. -However, coefficients and variables commute. -The representation of the polynomials is recursive. -The abbreviation for \spadtype{XPolynomial} is \spadtype{XPOLY}. - -Other constructors like \spadtype{XPolynomialRing}, -\spadtype{XRecursivePolynomial} -\spadtype{XDistributedPolynomial}, -\spadtype{LiePolynomial} and -\spadtype{XPBWPolynomial} -implement multivariate polynomials -in non-commutative variables. - -We illustrate now some of the facilities of the \spadtype{XPOLY} domain constructor. - - -\xtc{ -Define a polynomial ring over the integers. -}{ -\spadpaste{poly := XPolynomial(Integer) \bound{poly}} -} - -\xtc{ -Define a first polynomial, -}{ -\spadpaste{pr: poly := 2*x + 3*y-5 \free{poly} \bound{pr}} -} - - -\xtc{ -and a second one. -}{ -\spadpaste{pr2: poly := pr*pr \free{poly} \bound{pr2}} -} - -\xtc{ -Rewrite {\bf pr} in a distributive way, -}{ -\spadpaste{pd := expand pr \free{pr} \bound{pd}} -} - -\xtc{ -compute its square, -}{ -\spadpaste{pd2 := pd*pd \free{pd} \bound{pd2}} -} - -\xtc{ -and checks that: -}{ -\spadpaste{expand(pr2) - pd2 \free{pr2} \free{pd2}} -} - - -\xtc{ -We define: -}{ -\spadpaste{qr := pr**3 \free{pr} \bound{qr}} -} - -\xtc{ -and: -}{ -\spadpaste{qd := pd**3 \free{pd} \bound{qd}} -} - -\xtc{ -We truncate {\bf qd} at degree {\bf 3}: -}{ -\spadpaste{ trunc(qd,2) \free{qd}} -} - -\xtc{ -The same for {\bf qr}: -}{ -\spadpaste{trunc(qr,2) \free{qr}} -} - -\xtc{ -We define: -}{ -\spadpaste{Word := OrderedFreeMonoid Symbol \bound{Word}} -} - -\xtc{ -and: -}{ -\spadpaste{w: Word := x*y**2 \free{Word} \bound{w}} -} - -\xtc{ -The we can compute the right-quotient of {\bf qr} by {\bf r}: -}{ -\spadpaste{rquo(qr,w) \free{qr} \free{w}} -} - -\xtc{ -and the shuffle-product of {\bf pr} by {\bf r}: -}{ -\spadpaste{sh(pr,w::poly) \free{pr} \free{w}} -} -\endscroll -\autobuttons -\end{page} - -@ -\section{xpr.ht} -<>= -\newcommand{\XPolynomialRingXmpTitle}{XPolynomialRing} -\newcommand{\XPolynomialRingXmpNumber}{9.90} - -@ -\subsection{XPolynomialRing} -\label{XPolynomialRingXmpPage} -\index{pages!XPolynomialRingXmpPage!xpr.ht} -\index{xpr.ht!pages!XPolynomialRingXmpPage} -\index{XPolynomialRingXmpPage!xpr.ht!pages} -<>= -\begin{page}{XPolynomialRingXmpPage}{XPolynomialRing} -\beginscroll -The \spadtype{XPolynomialRing} domain constructor implements -generalized polynomials with coefficients from an arbitrary \spadtype{Ring} -(not necessarily commutative) and whose exponents are -words from an arbitrary \spadtype{OrderedMonoid} -(not necessarily commutative too). -Thus these polynomials are (finite) linear combinations of words. - -This constructor takes two arguments. -The first one is a \spadtype{Ring} -and the second is an \spadtype{OrderedMonoid}. -The abbreviation for \spadtype{XPolynomialRing} is \spadtype{XPR}. - -Other constructors like \spadtype{XPolynomial}, -\spadtype{XRecursivePolynomial} -\spadtype{XDistributedPolynomial}, -\spadtype{LiePolynomial} and -\spadtype{XPBWPolynomial} -implement multivariate polynomials -in non-commutative variables. - -We illustrate now some of the facilities of the \spadtype{XPR} domain constructor. - -\xtc{ -Define the free ordered monoid generated by the symbols. -}{ -\spadpaste{Word := OrderedFreeMonoid(Symbol) \bound{Word}} -} - -\xtc{ -Define the linear combinations of these words with integer coefficients. -}{ -\spadpaste{poly:= XPR(Integer,Word) \free{Word} \bound{poly}} -} - - -\xtc{ -Then we define a first element from {\bf poly}. -}{ -\spadpaste{p:poly := 2 * x - 3 * y + 1 \free{poly} \bound{p}} -} - -\xtc{ -And a second one. -}{ -\spadpaste{q:poly := 2 * x + 1 \free{poly} \bound{q}} -} - - -\xtc{ -We compute their sum, -}{ -\spadpaste{p + q \free{p}\free{q} } -} - -\xtc{ -their product, -}{ -\spadpaste{p * q \free{p}\free{q} } -} - -\xtc{ -and see that variables do not commute. -}{ -\spadpaste{(p +q)^2 -p^2 -q^2 - 2*p*q \free{p}\free{q} } -} - - - -\xtc{ -Now we define a ring of square matrices, -}{ -\spadpaste{M := SquareMatrix(2,Fraction Integer) \bound{M}} -} - -\xtc{ -and the linear combinations of words with these matrices as coefficients. -}{ -\spadpaste{poly1:= XPR(M,Word) \free{Word} \free{M} \bound{poly1}} -} - - -\xtc{ -Define a first matrix, -}{ -\spadpaste{m1:M := matrix [[i*j**2 for i in 1..2] for j in 1..2] \free{M} \bound{m1}} -} - -\xtc{ -a second one, -}{ -\spadpaste{m2:M := m1 - 5/4 \free{M} \free{m1} \bound{m2}} -} - -\xtc{ -and a third one. -}{ -\spadpaste{m3: M := m2**2 \free{M} \free{m2} \bound{m3}} -} - -\xtc{ -Define a polynomial, -}{ -\spadpaste{pm:poly1 := m1*x + m2*y + m3*z - 2/3 \free{poly1} \free{m1} \free{m2} \free{m3} \bound{pm}} -} - - -\xtc{ -a second one, -}{ -\spadpaste{qm:poly1 := pm - m1*x \free{m1} \free{pm} \bound{qm}} -} - -\xtc{ -and the following power. -}{ -\spadpaste{qm**3 \bound{qm}} -} - -\endscroll -\autobuttons -\end{page} - -@ -\section{zdsolve.ht} -<>= -\newcommand{\ZeroDimensionalSolvePackageXmpTitle}{ZeroDimensionalSolvePackage} -\newcommand{\ZeroDimensionalSolvePackageXmpNumber}{9.91} - -@ -\subsection{ZeroDimensionalSolvePackage} -\label{ZeroDimensionalSolvePackageXmpPage} -\index{pages!ZeroDimensionalSolvePackageXmpPage!zdsolve.ht} -\index{zdsolve.ht!pages!ZeroDimensionalSolvePackageXmpPage} -\index{ZeroDimensionalSolvePackageXmpPage!zdsolve.ht!pages} -<>= -\begin{page}{ZeroDimensionalSolvePackageXmpPage}{ZeroDimensionalSolvePackage} -\beginscroll -The \spadtype{ZeroDimensionalSolvePackage} package constructor -provides operations for computing symbolically the complex or real roots of -zero-dimensional algebraic systems. - -The package provides {\bf no} multiplicity information (i.e. some returned -roots may be double or higher) but only distinct roots are returned. - -Complex roots are given by means of univariate representations -of irreducible regular chains. -These representations are computed by the -\axiomOpFrom{univariateSolve}{ZeroDimensionalSolvePackage} -operation (by calling the -\spadtype{InternalRationalUnivariateRepresentationPackage} -package constructor which does the job). - -Real roots are given by means of tuples -of coordinates lying in the \spadtype{RealClosure} of the coefficient ring. -They are computed by the \axiomOpFrom{realSolve}{ZeroDimensionalSolvePackage} -and \axiomOpFrom{positiveSolve}{ZeroDimensionalSolvePackage} operations. -The former computes all the solutions of the input system with real coordinates -whereas the later concentrate -on the solutions with (strictly) positive coordinates. -In both cases, the computations -are performed by the \spadtype{RealClosure} constructor. - -Both computations of complex roots -and real roots rely on triangular decompositions. -These decompositions can be computed in two different ways. -First, by a applying the \axiomOpFrom{zeroSetSplit}{RegularTriangularSet} -operation from the \spadtype{REGSET} domain constructor. -In that case, no Groebner bases are computed. -This strategy is used by default. -Secondly, by applying the \axiomOpFrom{zeroSetSplit}{LexTriangularPackage} -from \spadtype{LEXTRIPK}. -To use this later strategy with the operations -\axiomOpFrom{univariateSolve}{ZeroDimensionalSolvePackage}, -\axiomOpFrom{realSolve}{ZeroDimensionalSolvePackage} -and \axiomOpFrom{positiveSolve}{ZeroDimensionalSolvePackage} -one just needs to use an extra boolean argument. - -Note that the way of understanding triangular decompositions -is detailed in the example of the \spadtype{RegularTriangularSet} -constructor. - -The \spadtype{ZeroDimensionalSolvePackage} constructor takes three arguments. -The first one {\bf R} is the coefficient ring; -it must belong to the categories -\spadtype{OrderedRing}, \spadtype{EuclideanDomain}, -\spadtype{CharacteristicZero} -and \spadtype{RealConstant}. -This means essentially that {\bf R} is \spadtype{Integer} or -\spadtype{Fraction(Integer)}. -The second argument {\bf ls} is the list of variables involved -in the systems to solve. -The third one MUST BE {\bf concat(ls,s)} where -{\bf s} is an additional symbol used for the univariate representations. -The abbreviation for \spadtype{ZeroDimensionalSolvePackage} is -\spadtype{ZDSOLVE}. - -We illustrate now how to use the constructor \spadtype{ZDSOLVE} -by two examples: the {\em Arnborg and Lazard} system and the -{\em L-3} system (Aubry and Moreno Maza). -Note that the use of this package is also demonstrated in the example -of the \spadtype{LexTriangularPackage} constructor. - -\xtc{ -Define the coefficient ring. -}{ -\spadpaste{R := Integer \bound{R}} -} - -\xtc{ -Define the lists of variables: -}{ -\spadpaste{ls : List Symbol := [x,y,z,t] \bound{ls}} -} - -\xtc{ -and: -}{ -\spadpaste{ls2 : List Symbol := [x,y,z,t,new()$Symbol] \bound{ls2}} -} - -\xtc{ -Call the package: -}{ -\spadpaste{pack := ZDSOLVE(R,ls,ls2) \free{ls} \free{ls2} \free{R} \bound{pack}} -} - -\xtc{ -Define a polynomial system (Arnborg-Lazard) -}{ -\spadpaste{p1 := x**2*y*z + x*y**2*z + x*y*z**2 + x*y*z + x*y + x*z + y*z \bound{p1}} -} -\xtc{ -}{ -\spadpaste{p2 := x**2*y**2*z + x*y**2*z**2 + x**2*y*z + x*y*z + y*z + x + z \bound{p2}} -} -\xtc{ -}{ -\spadpaste{p3 := x**2*y**2*z**2 + x**2*y**2*z + x*y**2*z + x*y*z + x*z + z + 1 \bound{p3}} -} -\xtc{ -}{ -\spadpaste{lp := [p1, p2, p3] \free{p1} \free{p2} \free{p3} \bound{lp}} -} -Note that these polynomials do not involve the variable {\bf t}; -we will use it in the second example. - -\xtc{ -First compute a decomposition into regular chains -(i.e. regular triangular sets). -}{ -\spadpaste{triangSolve(lp)$pack \free{lp} \free{pack}} -} - -We can see easily from this decomposition (consisting of a single -regular chain) that the input system has 20 complex roots. - -\xtc{ -Then we compute a univariate representation of this regular chain. -}{ -\spadpaste{univariateSolve(lp)$pack \free{lp} \free{pack}} -} - -We see that the zeros of our regular chain are split into three components. -This is due to the use of univariate polynomial factorization. - -Each of these components consist of two parts. -The first one is an irreducible univariate polynomial {\bf p(?)} which defines -a simple algebraic extension of the field of fractions of {\bf R}. -The second one consists of multivariate polynomials {\bf pol1(x,\%A)}, -{\bf pol2(y,\%A)} and {\bf pol3(z,\%A)}. -Each of these polynomials involve two variables: one is an indeterminate -{\bf x}, {\bf y} or {\bf z} -of the input system {\bf lp} and the -other is {\bf \%A} which represents any root of {\bf p(?)}. -Recall that this {\bf \%A} is the last element of the third parameter of -\spadtype{ZDSOLVE}. -Thus any complex root {\bf ?} of {\bf p(?)} -leads to a solution of the input system {\bf lp} -by replacing {\bf \%A} by this {\bf ?} in {\bf pol1(x,\%A)}, -{\bf pol2(y,\%A)} and {\bf pol3(z,\%A)}. -Note that the polynomials {\bf pol1(x,\%A)}, -{\bf pol2(y,\%A)} and {\bf pol3(z,\%A)} have degree one -w.r.t. {\bf x}, {\bf y} or {\bf z} respectively. -This is always the case for all univariate representations. -Hence the operation {\bf univariateSolve} replaces a -system of multivariate polynomials by a list of univariate -polynomials, what justifies its name. -Another example of univariate representations illustrates -the \spadtype{LexTriangularPackage} package constructor. - -\xtc{ -We now compute the solutions with real coordinates: -}{ -\spadpaste{lr := realSolve(lp)$pack \free{lp} \free{pack} \bound{lr}} -} - -\xtc{ -The number of real solutions for the input system is: -}{ -\spadpaste{\# lr \free{lr}} -} - -Each of these real solutions is given by a -list of elements in \spadtype{RealClosure(R)}. -In these 8 lists, the first element is a value of {\bf z}, -the second of {\bf y} and the last of {\bf x}. -This is logical since by setting the list of variables of the package -to {\bf [x,y,z,t]} we mean that the elimination ordering on the -variables is {\bf t < z < y < x }. -Note that each system treated by the \spadtype{ZDSOLVE} package constructor -needs only to be zero-dimensional w.r.t. the variables involved in the system it-self -and not necessarily w.r.t. all the variables used to define the package. - -\xtc{ -We can approximate these real numbers as follows. -This computation takes between 30 sec. and 5 min, depending on your machine. -}{ -\spadpaste{[[approximate(r,1/1000000) for r in point] for point in lr] \free{lr}} -} - -\xtc{ -We can also concentrate on the solutions with real (strictly) positive coordinates: -}{ -\spadpaste{lpr := positiveSolve(lp)$pack \free{lp} \free{pack} \bound{lpr}} -} - -Thus we have checked that the input system has no solution with strictly positive coordinates. - - -\xtc{ -Let us define another polynomial system ({\em L-3}). -}{ -\spadpaste{f0 := x**3 + y + z + t- 1 \bound{f0}} -} -\xtc{ -}{ -\spadpaste{f1 := x + y**3 + z + t -1 \bound{f1}} -} -\xtc{ -}{ -\spadpaste{f2 := x + y + z**3 + t-1 \bound{f2}} -} -\xtc{ -}{ -\spadpaste{f3 := x + y + z + t**3 -1 \bound{f3}} -} -\xtc{ -}{ -\spadpaste{lf := [f0, f1, f2, f3] \free{f0} \free{f1} \free{f2} \free{f3} \bound{lf}} -} - - -\xtc{ -First compute a decomposition into regular chains -(i.e. regular triangular sets). -}{ -\spadpaste{lts := triangSolve(lf)$pack \free{lf} \free{pack} \bound{lts}} -} - - -\xtc{ -Then we compute a univariate representation. -}{ -\spadpaste{univariateSolve(lf)$pack \free{lf} \free{pack}} -} - -Note that this computation is made from the input system {\bf lf}. -\xtc{ -However it is possible to reuse a pre-computed regular chain as follows: -}{ -\spadpaste{ts := lts.1 \free{lts} \bound{ts}} -} -\xtc{ -}{ -\spadpaste{univariateSolve(ts)$pack \free{ts} \free{pack}} -} -\xtc{ -}{ -\spadpaste{realSolve(ts)$pack \free{ts} \free{pack}} -} - -\xtc{ -We compute now the full set of points with real coordinates: -}{ -\spadpaste{lr2 := realSolve(lf)$pack \free{lf} \free{pack} \bound{lr2}} -} - - -\xtc{ -The number of real solutions for the input system is: -}{ -\spadpaste{\#lr2 \free{lr2}} -} -Another example of computation of real solutions illustrates -the \spadtype{LexTriangularPackage} package constructor. - -\xtc{ -We concentrate now on the solutions with real (strictly) positive coordinates: -}{ -\spadpaste{lpr2 := positiveSolve(lf)$pack \free{lf} \free{pack} \bound{lpr2}} -} - -\xtc{ -Finally, we approximate the coordinates of this point with 20 exact digits: -}{ -\spadpaste{[approximate(r,1/10**21)::Float for r in lpr2.1] \free{lpr2}} -} -\endscroll -\autobuttons -\end{page} - -@ -\section{zlindep.ht} -<>= -\newcommand{\IntegerLinearDependenceXmpTitle}{IntegerLinearDependence} -\newcommand{\IntegerLinearDependenceXmpNumber}{9.35} - -@ -\subsection{IntegerLinearDependence} -\label{IntegerLinearDependenceXmpPage} -\index{pages!IntegerLinearDependenceXmpPage!zlindep.ht} -\index{zlindep.ht!pages!IntegerLinearDependenceXmpPage} -\index{IntegerLinearDependenceXmpPage!zlindep.ht!pages} -<>= -\begin{page}{IntegerLinearDependenceXmpPage}{IntegerLinearDependence} -\beginscroll - -The elements \texht{$v_1, \dots,v_n$}{\spad{v1,...,vn}} -of a module \spad{M} over a ring \spad{R} are -said to be {\it linearly dependent over \spad{R}} if there exist -\texht{$c_1,\dots,c_n$}{\spad{c1, ..., cn}} in \spad{R}, -not all \smath{0}, -such that -\texht{$c_1 v_1 + \dots c_n v_n = 0$}{\spad{c1*v1 + ... + cn*vn = 0}}. -If such \texht{$c_i$}{\spad{ci}}'s exist, -they form what is called a {\it linear dependence -relation over \spad{R}} for the \texht{$v_i$}{\spad{vi}}'s. - -The package \spadtype{IntegerLinearDependence} provides functions -for testing whether some elements of a module over the integers are -linearly dependent over the integers, and to find the linear -dependence relations, if any. -% -\xtc{ -Consider the domain of two by two square matrices with integer entries. -}{ -\spadpaste{M := SQMATRIX(2,INT) \bound{M}} -} -% -% -\xtc{ -Now create three such matrices. -}{ -\spadpaste{m1: M := squareMatrix matrix [[1, 2], [0, -1]] \free{M}\bound{m1}} -} -\xtc{ -}{ -\spadpaste{m2: M := squareMatrix matrix [[2, 3], [1, -2]] \free{M}\bound{m2}} -} -\xtc{ -}{ -\spadpaste{m3: M := squareMatrix matrix [[3, 4], [2, -3]] \free{M}\bound{m3}} -} -% -% -\xtc{ -This tells you whether \spad{m1}, \spad{m2} and \spad{m3} are linearly -dependent over the integers. -}{ -\spadpaste{linearlyDependentOverZ? vector [m1, m2, m3] \free{m1 m2 m3}} -} -% -% -\xtc{ -Since they are linearly dependent, you can ask for the dependence -relation. -}{ -\spadpaste{c := linearDependenceOverZ vector [m1, m2, m3] \free{m1 m2 m3}\bound{c}} -} -% -% -\xtc{ -This means that the following linear combination should be \spad{0}. -}{ -\spadpaste{c.1 * m1 + c.2 * m2 + c.3 * m3 \free{c m1 m2 m3}} -} -% -When a given set of elements are linearly dependent over \spad{R}, this -also means that at least one of them can be rewritten as a linear -combination of the others with coefficients in the quotient field of -\spad{R}. -% -\xtc{ -To express a given element in terms of other elements, use the operation -\spadfunFrom{solveLinearlyOverQ}{IntegerLinearDependence}. -}{ -\spadpaste{solveLinearlyOverQ(vector [m1, m3], m2) \free{m1 m2 m3}} -} -\endscroll -\autobuttons -\end{page} - -@ \chapter{Page hierarchy layout} This is the forest of pages in hyperdoc. Any page at the leftmost margin is a root page. Notice that the roots are disconnnected. @@ -124184,8 +124319,8 @@ RootPage ugGraphPage ugProblemNumericPage DoubleFloatXmpPage - ugFloatIntroPage - ugFloatConvertPage + ugxFloatIntroPage + ugxFloatConvertPage ugxFloatOutputPage ugxFloatHilbertPage ComplexXmpPage @@ -124225,7 +124360,7 @@ RootPage EquationPage ugxProblemLinSysPage ugxProblemOnePolPage - ugxProblemPolySysPage + ugxProblemPolSysPage ugProblemDEQPage CalculusPage ugProblemLimitsPage @@ -124237,7 +124372,7 @@ RootPage ugProblemDEQPage LinAlgPage ugIntroTwoDimPage - ugMatrixCreatePage + ugxMatrixCreatePage ugxMatrixOpsPage ugProblemEigenPage ugxFloatHilbertPage @@ -124372,7 +124507,7 @@ RootPage RadixExpansion DistributedMultivariatePolynomialXmpPage ugIntroVariablesPage - utTypesConvertPage + ugTypesConvertPage PolynomialXmpPage UnivariatePolynomialXmpPage MultivariatePolynomialXmpPage @@ -124437,7 +124572,7 @@ RootPage ugxIntegerPrimesPage FactoredXmpPage ComplexXmpPage - ugxIntegerNtPage + ugxIntegerNTPage IntegerNumberTheoryFunctionsXmpPage IntegerLinearDependenceXmpPage IntegerNumberTheoryFunctionsXmpPage @@ -125021,7 +125156,7 @@ UsersGuideExposedPage ContinuedFractionXmpPage PartialFractionXmpPage RadixExpansionXmpPage - ugxProblemFinitePrimeTitle + ugxProblemFinitePrimePage ugIntroCollectPage ListXmpPage ugLangItsPage diff --git a/books/ps/v71algebrapage.eps b/books/ps/v71algebrapage.eps new file mode 100644 index 0000000..0ef18d8 --- /dev/null +++ b/books/ps/v71algebrapage.eps @@ -0,0 +1,2228 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner +%%Title: algebrapage.eps +%%CreationDate: Sat Jun 21 10:59:41 2008 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 696 475 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 459.83362537429304 translate +681.59055118110246 -459.83362537429304 scale +% Image geometry +710 479 8 +% Transformation matrix +[ 710 0 0 479 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 710 string def +/gstr 710 string def +/bstr 710 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 108050 ASCII Bytes +colorimage +quD:2JN\QIJN\QI`BF,!J,~> +quD:/JNA?CJNA?C`B*nsJ,~> +quD:,JN&-=JN&-=`Ad\pJ,~> +rW)s]JcC<$JcC<$JcE^hs#p>]J,~> +rW)sZJcC<$JcC<$JcE^hs#U,ZJ,~> +rW)sWJcC<$JcC<$JcE^hs#9oWJ,~> +rr<*`rr.KIJc1/uJc1/u`Voi9!^-M`J,~> +rr<*]rr.KIJc1/uJc1/u`Voi9!]g;]J,~> +rr<*ZrV_ +!WYC^Jc()sJc()sNr84$rVYu>rVYu>rqliX4TL!~> +!WY:[Jbt#qJbt#qNr/.#rVPo=rVPo=rqccV3WO[~> +!WY1WJbjroJbjroNr&(!rVGi;rVGi;rqZ]T2ZS@~> +!WYC]JbjroJbjroO88m7bjGE6b_l8nMTkJf"jDl#qMNMars$])qYK/6!.Y~> +!WY:YJbalmJbalmO8/g6bjGE6b_l5lMTkJf"jDl"q23D`rs$])q>&u1!.Y~> +!WY1VJbXfkJbXfkO8&a4bjGE6b_c,iM9PAe"jDhupkd5^rs$](q"Wc+!.Y~> +!Bp>Xq#LHro)O@;JbalmJbc):!K-jCr!!%Vq>#pHmJI.dMY[(*rU'L`rJLUM!T?1l~> +!BU)TpAk6po)O@9JbO`iJbPr6!K$dBr!!%Up\0OCmJI.dM>-b$rU'L`rJCOJ!T,qg~> +!B9iPo`5$no)O@7Jb=TeJb>f2!JgX@qZZqRp%=+=mJ@(cL\:=qrU'I_rJ1CF!So\b~> +!Bp;WpB/E6`%CW^JbO`iJbO`iU\=eGr9a=ar/(1BM>Zc;"oO5OpPJh8q>pMNrq?HN4b*~> +!BU&So`N34`%CW^Jb=TeJb=TeU\+YCqsF1_qhOk;L\pK7"oF)JonWG3q#UAJrq- +!B9fOo)m!2`%CW^Jb+HaJb+HaU[nM@qsF.^qhF_6LAUB5"oF&Go7m/0p]:8Hrpp0F2h1~> +!Bp;Wp(.1.qQ+s_PA6:)B9P$56BcuoJbJL)!B;b3p&R-+j7WI4r\"=mJ$k^M"^OuqsF.ZqhY7F!T#ti~> +!BU#RoFLt,qQ+s_PA6:)B9P$56BcumJb8@%!B2Y1oDpm'j7E=1r[n7:En#[4Jb8!p!JgO=p'(;J +o^mq8mIg_[L\14oqX*tWqM5(B!Sf_d~> +!B9cNnIPY)qQ+s_PA6:)B9P$56BcujJar-t!AuJ.nGtL!j7*+,r[e18E6s1+Jaqdj!JU=9oEG#D +naV>.mIUSWL%4\eq!I\SpkA_;!SKD^~> +!Bp5UoFLu0rRn3jg"`aZgP!Sqn*,DqJb8@%!B;b3oDpp)j7ER90=\&s00%=0oRZYqoDsaDmIg_[ +L\14oqYU!^!;lHnqM4_8L\goArrE#krrDri!W%TNoE!`1J,~> +!BTuQndkc.rRn3jg"`aZgP!Sqn*,DoJb&4!!B)S0nc:X$j73F50"7in/iLt*nq$Amnc=L?mIUSW +L@Xniq"s^Z!;lBlpkJA1LA:Z +!B9]LmLT?*rRn3jg"`aZgP!Sqn*,DkJaVpn!AuJ.mK#0sj6d.0/[VEf/N(\%mXafemK&"8mI:AS +K^S8]p\XLV!;l9ipOqu&K_PB6rrE#frrDrd!V_9HmK(ouJ,~> +!Bp5Uo+1j^q.'!S]bf~> +!BTrPn.5O[q.'=Kq;_S5;$s8()tXJai=$!JU:8nHJZ@nF2/+qsjI^qsajaL%+Sc +p\XL[!<;Tg!;l9epP&V9!SBG`~> +!B9ZKljs+Wq.'rqsF1Zqs=RZK'_iU +o_\%T!<;Hc!;l-aoRd)/!S',Z~> +!Bp2TnIM9cSg;Z[PNqO4eC2_7]E!NQJar-t!B2\2Zlq:[naX"?D=QmSRIMpd@VIK2n_lPt_JM!T +nO,$*M"*DWrp^W@008X&035j%<%k2602J^[R+d,]JarC&!JU:8nHJZ@naV>-qsaXdqsaXdqsaja +L%4\ep\OFW!;c3dpP&V:!SKVd~> +!BToOmLPs`Sg;Z[PNqO4eC2_7]E!NNJaVpn!B)S0YotqVmd@D6D!pLMR-lR^@:q3,mbTul^hb[N +mQrO#L$giOrpCE:/ii?s/lfQr;_Fo./kr@SQe-fVJaW0u!JL.5mKN9:md>c$qsFFaqsFFaqsFX\ +K^S8]p%n+R!;c*aon<>4!S9A_~> +!B9TIl49O\Sg;Z[PNqO4eC2_7]E!NJJa2Xf!AuJ.Y9>YQlKYT*C?jkAPj0hT?Y1m&lJ" +!Bp/SnGWCrR)/p$U':T##6Y89!.jWjnEo]F2u>9.n/^gX1ukMmj7"]_l.n!Qn=VFeiMS?!n3\kb +nF/@irpUEO0/;rh0@'(VbqD^X0?o(;Jai0u!JU46mfiB +!BTlNm/?tnR)/p$U':T##6Y89!.jKfm-X->2Z#-,llG7O1Z+uchs;sUjk27Gm%,h\h4lTjlp<>Y +m-HV_rp1-G/hlW`0$qqs+4^qs+4^qs+FWK'_iUoD._N +!;Yp]o7Hu.!S'5]~> +!B9QHkPbGiR)/p$U':T##6Y89!.j]!*k8iSD1#&BYgZL.Ji7'>;kF4&Pfq9p_k/MH9X/]Qu:`%=MG/]<5'J`lOc!J'\,jot7)kN@BbqrRkYqrRkYqrS(OJEQ*GnG25F +!;YaXn::N$!RNcU~> +!BouNkl(Pb/K"OJ,l%Fkk^hsbkQ*UqroaAA0E1/FHnV'iHKaQG6g3Yc0B\/h0*?jj6SJH&!B2\2 +kRPH_7-HBZjlkph0/>78idp +!BTZHj8K#]/K"OJ,l%Fkj+67XirM%jro4#;0)jl@GV5F_GN7^960$oV0&hT_/d$[b5q`/s!B)S0 +isrdU6fTmRi8`kU/ho%4h1=U;j7)(0Ic0V;"lOjij*oq`bQ%Y?bQ%Y?bQZpRj5YUHq98d;q9/lt +IfA@.brU@~> +!B99@g\q0U/K"OJ,l%FkgO\,HgAs,_rn@H1/cOK7F=ibRF5,G$5MOjC/_YdR/H^CT5:ulh!AlD- +gCCYD6/+%Eg"Y96/MAb/eUcJ+g[NquH.hT#"ke1UgNhKL^]4B3^]4B3^]iD:gY7#,q7uq/q7m$a +H2cP!`]&D~> +!BouNkl1Vb#V@VJpAfd.J`uLb!B2\2kQ*Uqroap-01.D6kiaZekgqITkaX;Qr9+/K0E1/92_Y0o% +X9XRkXmMKkig#>91CSJJ`q[KnE9n'jmCP$jacRYJE?[X!!)oG!!)oG"m(9uk^_dkeGB7Be,eZ]r +oaC14b*~> +!BTZHj8T)]#V@VJpAfd)J`H.X!B)S0irM%jro4R#/jV,.j5VaXj3oVIj-_NFr8RfD0)jl32D5!h% +WsCLj%(f?j5[s.8OP2AJ`D=AnDaOui9e_li-s_HIc1+I!!)o?!!)o?"lOjij*oq_bkhD:bQ6XNr +o4%(3e.~> +!B99@g]%6U#V@VJpAfd!J_TSH!AlD-gAs,_rnA!j/O(i#gY4;EgWM06gQX:4r7_6:/cOK*1bJ^]% +WO(CgI +!BouNkl1Vc*9u5B"o&(Kk^hsbkQ*UqroaAA0E1/;k=714roanH4N;n)K]q/U1Q8W6XQW#)rob.W +0=Iir01=FUUb>]X\5P&VQ7kY"\":fpk^hsikQ-4qqpbEAqpYf2JEZ3IjnmO-!;k7G!;k7LjacRY +JE?[XrW)uJrW)iF!Tek2kQ0'oJ,~> +!BT]IjSo2_*9u5B"o&(KjFQCZj8h.kro=)<0)jo6j$kY,ro=VC4MlP"J`PEI0oE0+WoQGuro=kR +0!_?h/k"1LTIs0O[8JWMP:f4oZ^]'fjFQCaj8j_fqonj9qof6%IcTR=i;:^u!;jt?!;jtDi-sbJ +Ic1+IrW)uBrW)i>!T8G+j8mOeJ,~> +!B96a>O"EYbXd6hTgk"8Qg];`SqnW"-qnNBgHJI;%g&&Pb!;jP3!;jP8fm;H/ +HJ/22rW)u6rW)i2!SMeug]>DRJ,~> +!Bp#Ol2CYh`gQi;/L:B8*$kL`Ja%aMmHFX10E12:2_Y-o!fAY7rosD8%5r=fl06H-3\WspksI-' +kls("0/,eCf`(+EX&_&7=0(TLSPM$t9uV\JJa)gk!J0A0eG0+Ae-4rbl03c\qpbEAqpYf2Ja)EM +jnmR-!<(FI!;k7HjamEq!Ra,]~> +!BT]IjSf,c`gQi;/L:B8*$kL`J`MCCmGn:+0)jo42D4sh!f&D.roF&2%5i1^jQ+Eq3%mUgj?YEt +j9@Lp/h]V?e,JD;W)PQ0Ll9>Q2?J`QIa!Iiu(bkV89bQZpRjQ(dJqonj9qof6%IcTR= +i;:au!<(.A!;jt@i-t[d!R<`V~> +!B9 +!Bp#Ol2CYh`gZq,[EWpW`6nPaJa%aMiopM`7Ha[7!A?fkl%/*AklH@smF2=$Ja)EMjmCP$jal[\ +J`Z:K!Ten3klK3qJ,~> +!BT]Ijo,5d`gZq,[EWpW`6nPaJ`VIEioL5[7-":.!A6ZhjalO9jT0khmE>alJ*#dAi9e_li.'kM +J)K_ +!B9?Bh>RB\`gZq,[EWpW`6nPaJ_bn5inXZO6ehUr!A-Neh1=D)h#ViUmD/t[HJRD'g?l][g3VT2 +HJ7c&!SVl!h#YPTJ,~> +!Bp#OlM^bi`gQl,3g9Tn"BYR&Ja.gOj6?]S09uM$!A?fkl@J6Cl2cIumF;C&Ja2NOk3^\&k(2g_ +J`c@M!Tnt4l2f?sJ,~> +!BT]Ijo,5d`gQl,3g9Tn"BYR&J`VIEj5g?J/s6+o!A6ZhjalO9jT0kimEGgnJ*#dAiU+kniIBtN +J)Te>!TAP-jT3[gJ,~> +!B9?BhYmK]`gQl,3g9Tn"BYR&J_kt7j5'j>/WK_c!A-QfhLXP+h>quWmD/t[Hf!V+g?l][g3_]5 +HeRl'!SVo"h>t\VJ,~> +!Bp#OlMghk&_t2%fn@#Go66o-!.jEdlJq.2Sqc&!l2dfcJa.gOb3B"Yk3^\&k(2g_J`c@M"m1C$ +l@J*beH+f`rosO54b*~> +!BT`Jk5PDg&_t2%fn@#Go66o-!.j9`k2YS*S:oSojoM9YJ`_OGb2r_SiU+kniIC"PJ)Te>"lXsn +k'u@WblQdQroO7-3e.~> +!B9?BhZ!Q_&_t2%fn@#Go66o-!.j!XhW*GoQ@RB]h>s4EJ_kt7b2*/Gg?l][g3_]5HeRl'"kn=[ +hL!uD_#`8:rn[[s2h1~> +!Bp#OlMghk'5_SV(2[7W6#A@U!.jEdl@J5OlD*VFJ[k+0"h9-Kl@HJ4jor8GlKWr1mH+GZJc=p8 +dli3~> +!BT`Jk5PDg'5_SV(2[7W6#A@U!.j9`k(2ZGk+h&>J$eV%"gidAk'sc*i +!B9BChu +!Bp&PlgXt+l[eAQl[eArlg&`mlg&`mlg&`mlN,KuJ,~> +!BTcKkOAP'kCMfIkCMfjkNd-dkNd-dkNd-dk5ipjJ,~> +!B9BCi:-eui.9g;i.9g\i9P1Wi9P1Wi9P1WhuUtZJ,~> +!Bp%*l[eAQl[eAQlbD`de3/<~> +!BTb%kCMfIkCMfIkJ-0\coQ[~> +!B9@ri.9g;i.9g;i4n1Nau=h~> +!Boe#i.9g;i.9g;i4e+L4b*~> +!BTIrg4@t/g4@t/g:l8@3e.~> +!B9%id"0Ppd"0Ppd([j,2h1~> +!'PmaJUrB'JUrB']n$/HJ,~> +!'5[SJTcTfJTcTf]ljB:J,~> +!&oIAJS0OHJS0OH]k7=(J,~> +!BpJ^m5t=JrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&c!S0Da~> +!BU8[kr\nFrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&_!R<`V~> +!B:&Xj#d8@rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&Y!Q-jH~> +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rp9a;4b*~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rojI/3e.~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!ro4$s2h1~> +!BpJ^mDo8,!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)um/bd$J,~> +!BU8[l,Wi(!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uklK'jJ,~> +!B:&Xj2_3"!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uirR%VJ,~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls5j:\!2]_o +!9O7\!.k1!rriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!!*&um/bd$J,~> +!BU8[kl:__rrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls5j:\!2]_o +!9O7\!.k1!rriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!!*&uklK'jJ,~> +!B:&XirB)YrrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls5j:\!2]_o +!9O7\!.k1!rriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!!*&uirR%VJ,~> +!BpJ^m0 +r;c]o!!) +!BU8[km%.frrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcG6> +r;c]o!!) +!B:&Xis,M`rrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcG6> +r;c]o!!) +!BpJ^m/R.crrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1: +rr<&qrr<&arr<&Mrr<&hrr<&nrr<&[rr<%Ms3puO!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1: +rr<&qrr<&arr<&Mrr<&hrr<&nrr<&[rr<%Ms3puO!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1: +rr<&qrr<&arr<&Mrr<&hrr<&nrr<&[rr<%Ms3puO!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcG0 +!B:&Xis,M`rrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcG0 +!BpJ^m/R.crrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1; +rrN3#!;lcs!<;utqu?Tp!WN/us7u`ps8Duus8E#qs8;ros8;ourrE#tq>g6h!W`6#q#:^Bn +!ri6#rVufrqu6Zss8;rrs8Duus8E#qs8;qKs6]gi!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u'`e76rrE'!rrE'!rrE'!rrE'!rrE)o!#5G5 +rrE'!rrE'!rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__rrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1; +rrN3#!;lcs!<;utqu?Tp!WN/us7u`ps8Duus8E#qs8;ros8;ourrE#tq>g6h!W`6#q#:^Bn +!ri6#rVufrqu6Zss8;rrs8Duus8E#qs8;qKs6]gi!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u'`e76rrE'!rrE'!rrE'!rrE'!rrE)o!#5G5 +rrE'!rrE'!rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)YrrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1; +rrN3#!;lcs!<;utqu?Tp!WN/us7u`ps8Duus8E#qs8;ros8;ourrE#tq>g6h!W`6#q#:^Bn +!ri6#rVufrqu6Zss8;rrs8Duus8E#qs8;qKs6]gi!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u'`e76rrE'!rrE'!rrE'!rrE'!rrE)o!#5G5 +rrE'!rrE'!rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcG3=!!*#u!!)rsrrE#t!!)ut!!)utrrDrr!!)forrE&u!!)ut!!)ut!!)rs!!)utrrDrr +!!)Wj!!*#u!!)ip!!)lq!!)utrrE#t!!)ut!!)rsrrE#t!!)rsrrE&u!!)ut!!)ut!!%TMn,E@f +rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p4 +!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcG3=!!*#u!!)rsrrE#t!!)ut!!)utrrDrr!!)forrE&u!!)ut!!)ut!!)rs!!)utrrDrr +!!)Wj!!*#u!!)ip!!)lq!!)utrrE#t!!)ut!!)rsrrE#t!!)rsrrE&u!!)ut!!)ut!!%TMn,E@f +rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p4 +!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls6fme!<2uu!;uis!;lcr!<2uu +!;uis!;lcr!;QQo!;$3j!<)ot!;lcr!;lcr!;$3j!<2uu!;ZWp!;lcr!;lcr!<2uu!;lcr!<)ot +!;lcr!<)ot!;$3j!.k1 +!BU8[kl:__rrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls6fme!<2uu!;uis!;lcr!<2uu +!;uis!;lcr!;QQo!;$3j!<)ot!;lcr!;lcr!;$3j!<2uu!;ZWp!;lcr!;lcr!<2uu!;lcr!<)ot +!;lcr!<)ot!;$3j!.k1 +!B:&XirB)YrrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls6fme!<2uu!;uis!;lcr!<2uu +!;uis!;lcr!;QQo!;$3j!<)ot!;lcr!;lcr!;$3j!<2uu!;ZWp!;lcr!;lcr!<2uu!;lcr!<)ot +!;lcr!<)ot!;$3j!.k1 +!BpJ^m0!!)rs!!)ut!!)or!!)utrW)`n!!)fo +!!)foqZ-Tp!!)Zk!!)Zk!!)rs!!)lq!!)or!!)or!!*#uq#LBn!!)or!!)ut!!)foqZ)3In,E@f +rr3'#rrE)o!!<0#s7cQos7?9ks7cQqrrE)u!<)p0!<3'!!<3'!!<3'!!<3'!!<; +!BU8[km%.frrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcG6>!!)rs!!)ut!!)or!!)utrW)`n!!)fo +!!)foqZ-Tp!!)Zk!!)Zk!!)rs!!)lq!!)or!!)or!!*#uq#LBn!!)or!!)ut!!)foqZ)3In,E@f +rr3'#rrE)o!!<0#s7cQos7?9ks7cQqrrE)u!<)p0!<3'!!<3'!!<3'!!<3'!!<; +!B:&Xis,M`rrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcG6>!!)rs!!)ut!!)or!!)utrW)`n!!)fo +!!)foqZ-Tp!!)Zk!!)Zk!!)rs!!)lq!!)or!!)or!!*#uq#LBn!!)or!!)ut!!)foqZ)3In,E@f +rr3'#rrE)o!!<0#s7cQos7?9ks7cQqrrE)u!<)p0!<3'!!<3'!!<3'!!<3'!!<; +!BpJ^m/R.crrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!BU8[kl:__rrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!B:&XirB)YrrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!BpJ^m0UEpr;Q`srVlito`"mkp&>!lqYpNqqu6Wrqu6Wr +qu6Wrrr2rupAY*mqu6WrrVlitq>UEpr;Q`sJcG3=!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duu +s6p!irrE)u!!<0#s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'! +!<<#urp9a;4b*~> +!BU8[km%.frrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLnc&Rh +qYpNqrr2ruqu6Wrrr2rur;Q`squ6Wrq#:UEpr;Q`srVlito`"mkp&>!lqYpNqqu6Wrqu6Wr +qu6Wrrr2rupAY*mqu6WrrVlitq>UEpr;Q`sJcG3=!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duu +s6p!irrE)u!!<0#s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'! +!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLnc&Rh +qYpNqrr2ruqu6Wrrr2rur;Q`squ6Wrq#:UEpr;Q`srVlito`"mkp&>!lqYpNqqu6Wrqu6Wr +qu6Wrrr2rupAY*mqu6WrrVlitq>UEpr;Q`sJcG3=!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duu +s6p!irrE)u!!<0#s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'! +!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u!rr<&qrr<&us8N)t +rr<&ts8N)trr<&rrr<&trr<&trr<&prr<&ts8N)srr<&ts8N)rrr<&trr<&qrr<&qrr<&rrr<&q +rr<&ts8N)trr<&ts8N)ts8N)trr<&srr<&prr<&ts8N(Ms6fmj!<3'!!<;rs!<;rs!<<#u!ri9# +qu?`srVururVururVurup&G0o!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'! +rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u!rr<&qrr<&us8N)t +rr<&ts8N)trr<&rrr<&trr<&trr<&prr<&ts8N)srr<&ts8N)rrr<&trr<&qrr<&qrr<&rrr<&q +rr<&ts8N)trr<&ts8N)ts8N)trr<&srr<&prr<&ts8N(Ms6fmj!<3'!!<;rs!<;rs!<<#u!ri9# +qu?`srVururVururVurup&G0o!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'! +rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u!rr<&qrr<&us8N)t +rr<&ts8N)trr<&rrr<&trr<&trr<&prr<&ts8N)srr<&ts8N)rrr<&trr<&qrr<&qrr<&rrr<&q +rr<&ts8N)trr<&ts8N)ts8N)trr<&srr<&prr<&ts8N(Ms6fmj!<3'!!<;rs!<;rs!<<#u!ri9# +qu?`srVururVururVurup&G0o!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'! +rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0gHnr;ZitrW)osr;cWmr;c]or;cisr;cltq>gHnr;Zlu!;ulq +!;uls!!*&t!<)ro!;ulq!!*&u!.k1?rr<&urrW9$!<<#u!ri9#rVuruqu?fu!<<#u!<; +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLo)JXgrr;os +"9/?$s8;rqrrE-"r;cZnr;cisq>gHnr;ZitrW)osr;cWmr;c]or;cisr;cltq>gHnr;Zlu!;ulq +!;uls!!*&t!<)ro!;ulq!!*&u!.k1?rr<&urrW9$!<<#u!ri9#rVuruqu?fu!<<#u!<; +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLo)JXgrr;os +"9/?$s8;rqrrE-"r;cZnr;cisq>gHnr;ZitrW)osr;cWmr;c]or;cisr;cltq>gHnr;Zlu!;ulq +!;uls!!*&t!<)ro!;ulq!!*&u!.k1?rr<&urrW9$!<<#u!ri9#rVuruqu?fu!<<#u!<; +!BpJ^m/R.crrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLJcGKE +!!%TM`;]f;rr3'#rrE)u!!<0#s8Duus82iurrE)u!!*&g!!rT)rrE'!rrE)u!<)p4!<3'!!<3'! +!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLJcGKE +!!%TM`;]f;rr3'#rrE)u!!<0#s8Duus82iurrE)u!!*&g!!rT)rrE'!rrE)u!<)p4!<3'!!<3'! +!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLJcG]KquD +!B:&Xis,M`rrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLJcG]KquD +!BpJ^m/R.crrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BU8[kl:__rrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!B:&XirB)YrrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/[4ea8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8MBdeieN~> +!BU8[klCeaa8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M6`c8pI~> +!B:&XirK/[a8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M$Z_`*)~> +!BpJ^m/[1+!<<) +!BU8[klCb'!<<) +!B:&XirK,!!<<) +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8MBdeieN~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M6`c8pI~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G +!BU8[l%/m+s8N(Xs8;rRs8;r/s8;qKs+13ds8M6`c8pI~> +!B:&Xj+77%s8N(Xs8;rRs8;r/s8;qKs+13ds8M$Z_`*)~> +!BpJ^mHafN!:9^c!3lJ'!;-9k!5AI5!7CfH!9*qX!;HKn!;HKn!;QQo!;?Em!8RSS!8[YT!7q/M +!;?Em!8[YT!9!kW!8RSS!/LURm/bd$J,~> +!BU8[l0JBJ!:9^c!3lJ'!;-9k!5AI5!7CfH!9*qX!;HKn!;HKn!;QQo!;?Em!8RSS!8[YT!7q/M +!;?Em!8[YT!9!kW!8RSS!/LURklK'jJ,~> +!B:&Xj6QaD!:9^c!3lJ'!;-9k!5AI5!7CfH!9*qX!;HKn!;HKn!;QQo!;?Em!8RSS!8[YT!7q/M +!;?Em!8[YT!9!kW!8RSS!/LURirR%VJ,~> +!BpJ^mHFQM!:9^c!3lJ'!;-9k!5AI5!7LlI!9!kW!;HKn!;HKn!;QQo!;?Em!8[YT!8RSS!7q/M +!;?Em!8[YT!9!kW!8RSS!/LURm/bd$J,~> +!BU8[l0/-I!:9^c!3lJ'!;-9k!5AI5!7LlI!9!kW!;HKn!;HKn!;QQo!;?Em!8[YT!8RSS!7q/M +!;?Em!8[YT!9!kW!8RSS!/LURklK'jJ,~> +!B:&Xj66LC!:9^c!3lJ'!;-9k!5AI5!7LlI!9!kW!;HKn!;HKn!;QQo!;?Em!8[YT!8RSS!7q/M +!;?Em!8[YT!9!kW!8RSS!/LURirR%VJ,~> +!BpJ^mHOWP!<3%Yrr<%Zrr<&Lrr<&drr<&Hrr<&Srr<&Mrr<&Hrr<%Ms1eU5m/bd$J,~> +!BU8[l083L!<3%Yrr<%Zrr<&Lrr<&drr<&Hrr<&Srr<&Mrr<&Hrr<%Ms1eU5klK'jJ,~> +!B:&Xj6?RF!<3%Yrr<%Zrr<&Lrr<&drr<&Hrr<&Srr<&Mrr<&Hrr<%Ms1eU5irR%VJ,~> +!BpJ^mHOWP!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&ps8N'!s8;rrs8Duus8E#qs8;rq +s8E#ts8E#ss8E#os8;ourrDusr;c]or;Zlu!;ZZo!<3#t!<)rr!;ulr!!*&u!;lfq!;ZZn!;uls +!<)rt!;ulq!!3*"q#C0jr;Z]qqZ$Ko!WN/ts8E#mrr<&ps8E#ps7u`ns8E#os8;ros8;ourrDio +q>gHnr;ccqrVururW)]mq>gNprVururW)iqr;c]or;c`pq>gHnrW)iqrr<'!r;c`pr;Zp!!!)ip +q>gHnr;ccqrr<'!r;c`prW)cor;Zlu!;ulq!!3*"p](3mqu?Zr!<;utPlLaM!S0Da~> +!BU8[l083L!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&ps8N'!s8;rrs8Duus8E#qs8;rq +s8E#ts8E#ss8E#os8;ourrDusr;c]or;Zlu!;ZZo!<3#t!<)rr!;ulr!!*&u!;lfq!;ZZn!;uls +!<)rt!;ulq!!3*"q#C0jr;Z]qqZ$Ko!WN/ts8E#mrr<&ps8E#ps7u`ns8E#os8;ros8;ourrDio +q>gHnr;ccqrVururW)]mq>gNprVururW)iqr;c]or;c`pq>gHnrW)iqrr<'!r;c`pr;Zp!!!)ip +q>gHnr;ccqrr<'!r;c`prW)cor;Zlu!;ulq!!3*"p](3mqu?Zr!<;utPlLaI!R<`V~> +!B:&Xj6?RF!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&ps8N'!s8;rrs8Duus8E#qs8;rq +s8E#ts8E#ss8E#os8;ourrDusr;c]or;Zlu!;ZZo!<3#t!<)rr!;ulr!!*&u!;lfq!;ZZn!;uls +!<)rt!;ulq!!3*"q#C0jr;Z]qqZ$Ko!WN/ts8E#mrr<&ps8E#ps7u`ns8E#os8;ros8;ourrDio +q>gHnr;ccqrVururW)]mq>gNprVururW)iqr;c]or;c`pq>gHnrW)iqrr<'!r;c`pr;Zp!!!)ip +q>gHnr;ccqrr<'!r;c`prW)cor;Zlu!;ulq!!3*"p](3mqu?Zr!<;utPlLaC!Q-jH~> +!BpJ^mHX]O!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!;ZZp!<)ot!;uls!<2uu +!<)ot!<)ot!;uis!;uis!;c]q!;c]q!<)rt!<)ot!<)ot!;uis!<)rt!;QQo!;uis!<)ot!<)ot +!;lfr!<2uu!;c]q!;c]q!<)ot!;uis!;uis!<)ot!<)rt!;?Em!;ZWp!<)ot!;uis!<)rt!;c]q +!;HKn!;HKn!;QQo!;?Em!;c]q!<)ot!;uis!<)rt!;?Em!;ZWp!<)ot!;lfr!<2uu!;?Em!;QTo +!<2uu!<)ot!<)ot!;uis!<)ot!;c]q!;?Em!;c`q!<)ot!<)ot!<)rt!;?Em!;ZWp!<)ot!;uls +!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!;6?l!;c`q!<)ot!1!T`m/bd$J,~> +!BU8[l0A9K!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!;ZZp!<)ot!;uls!<2uu +!<)ot!<)ot!;uis!;uis!;c]q!;c]q!<)rt!<)ot!<)ot!;uis!<)rt!;QQo!;uis!<)ot!<)ot +!;lfr!<2uu!;c]q!;c]q!<)ot!;uis!;uis!<)ot!<)rt!;?Em!;ZWp!<)ot!;uis!<)rt!;c]q +!;HKn!;HKn!;QQo!;?Em!;c]q!<)ot!;uis!<)rt!;?Em!;ZWp!<)ot!;lfr!<2uu!;?Em!;QTo +!<2uu!<)ot!<)ot!;uis!<)ot!;c]q!;?Em!;c`q!<)ot!<)ot!<)rt!;?Em!;ZWp!<)ot!;uls +!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!;6?l!;c`q!<)ot!1!T`klK'jJ,~> +!B:&Xj6HXE!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!;ZZp!<)ot!;uls!<2uu +!<)ot!<)ot!;uis!;uis!;c]q!;c]q!<)rt!<)ot!<)ot!;uis!<)rt!;QQo!;uis!<)ot!<)ot +!;lfr!<2uu!;c]q!;c]q!<)ot!;uis!;uis!<)ot!<)rt!;?Em!;ZWp!<)ot!;uis!<)rt!;c]q +!;HKn!;HKn!;QQo!;?Em!;c]q!<)ot!;uis!<)rt!;?Em!;ZWp!<)ot!;lfr!<2uu!;?Em!;QTo +!<2uu!<)ot!<)ot!;uis!<)ot!;c]q!;?Em!;c`q!<)ot!<)ot!<)rt!;?Em!;ZWp!<)ot!;uls +!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!;6?l!;c`q!<)ot!1!T`irR%VJ,~> +!BpJ^mHX]O!<2uu!;lcu!<<'!q#:UEpqu6WrrVlitq>UEp +qu6Wrr;Q`srr2ruq>UEpqu6Wrqu6Wrrr2ruqu6WrrVlitr;Q`sp\t3nrr2rup\t3nqu6Wrp&>!l +qu6Wrqu6WrrVlitr;Q`srVlitr;Q`spAY*mo`"mkrVlitqu6WrqYpNqp\t3np\t3nq#:UEpqu6Wrq#:!l +qYpNqr;Q`sQ2gjN!S0Da~> +!BU8[l0A9K!<2uu!;lcu!<<'!q#:UEpqu6WrrVlitq>UEp +qu6Wrr;Q`srr2ruq>UEpqu6Wrqu6Wrrr2ruqu6WrrVlitr;Q`sp\t3nrr2rup\t3nqu6Wrp&>!l +qu6Wrqu6WrrVlitr;Q`srVlitr;Q`spAY*mo`"mkrVlitqu6WrqYpNqp\t3np\t3nq#:UEpqu6Wrq#:!l +qYpNqr;Q`sQ2gjJ!R<`V~> +!B:&Xj6HXE!<2uu!;lcu!<<'!q#:UEpqu6WrrVlitq>UEp +qu6Wrr;Q`srr2ruq>UEpqu6Wrqu6Wrrr2ruqu6WrrVlitr;Q`sp\t3nrr2rup\t3nqu6Wrp&>!l +qu6Wrqu6WrrVlitr;Q`srVlitr;Q`spAY*mo`"mkrVlitqu6WrqYpNqp\t3np\t3nq#:UEpqu6Wrq#:!l +qYpNqr;Q`sQ2gjD!Q-jH~> +!BpJ^mHacP!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;ZWp!;lcr!<)ot!;ZWp!;lcr +!;uis!<2uu!;ZWp!;lcr!;lcr!<3#o!;ulr!;-9k!<2uu!;ulo!;lcr!;6?l!;lcr!;lcr!<)ot +!;uis!;ulr!;$3j!;ZZl!<)ot!;$3j!;HKn!;HKn!;QQo!;?Em!;lfl!;ulr!;$3j!;c]q!;lcr +!;uis!:g'h!;QQo!;ZZj!<)rp!;c]q!;?Em!;c]q!;uis!<2uu!;lcr!;?Em!;c]q!;lcr!<)ot +!;lcr!;lcr!;lcr!;6Bk!:p-i!;c]q!;uis!1!T`m/bd$J,~> +!BU8[l0J?L!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;ZWp!;lcr!<)ot!;ZWp!;lcr +!;uis!<2uu!;ZWp!;lcr!;lcr!<3#o!;ulr!;-9k!<2uu!;ulo!;lcr!;6?l!;lcr!;lcr!<)ot +!;uis!;ulr!;$3j!;ZZl!<)ot!;$3j!;HKn!;HKn!;QQo!;?Em!;lfl!;ulr!;$3j!;c]q!;lcr +!;uis!:g'h!;QQo!;ZZj!<)rp!;c]q!;?Em!;c]q!;uis!<2uu!;lcr!;?Em!;c]q!;lcr!<)ot +!;lcr!;lcr!;lcr!;6Bk!:p-i!;c]q!;uis!1!T`klK'jJ,~> +!B:&Xj6Q^F!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;ZWp!;lcr!<)ot!;ZWp!;lcr +!;uis!<2uu!;ZWp!;lcr!;lcr!<3#o!;ulr!;-9k!<2uu!;ulo!;lcr!;6?l!;lcr!;lcr!<)ot +!;uis!;ulr!;$3j!;ZZl!<)ot!;$3j!;HKn!;HKn!;QQo!;?Em!;lfl!;ulr!;$3j!;c]q!;lcr +!;uis!:g'h!;QQo!;ZZj!<)rp!;c]q!;?Em!;c]q!;uis!<2uu!;lcr!;?Em!;c]q!;lcr!<)ot +!;lcr!;lcr!;lcr!;6Bk!:p-i!;c]q!;uis!1!T`irR%VJ,~> +!BpJ^mHafK!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;ZWp!;lcr!<)ot!;ZWp!;lcr!;lct +!<3&orr<&rrr<&rrr<&urr<&is8N)lrrN3#!;uis!;uis!;lcr!;6?l!;lcr!;lcr!<)ot!;uis +!;ZZp!;6?l!;c]q!;uis!<)ot!;$3j!;HKn!;HKn!;QQo!;?Em!;lcr!:p0i!;6?l!;c]q!;lcr +!;uis!:g'h!;QQo!;ZWp!;HKn!;uis!;c]q!;?Em!;c]q!;uis!<2uu!;lcr!;?Em!;c]q!;lcr +!<)ot!;lcr!;lcr!;lcr!:p0i!;-9k!;c]q!;uis!1!T`m/bd$J,~> +!BU8[l0JBG!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;ZWp!;lcr!<)ot!;ZWp!;lcr!;lct +!<3&orr<&rrr<&rrr<&urr<&is8N)lrrN3#!;uis!;uis!;lcr!;6?l!;lcr!;lcr!<)ot!;uis +!;ZZp!;6?l!;c]q!;uis!<)ot!;$3j!;HKn!;HKn!;QQo!;?Em!;lcr!:p0i!;6?l!;c]q!;lcr +!;uis!:g'h!;QQo!;ZWp!;HKn!;uis!;c]q!;?Em!;c]q!;uis!<2uu!;lcr!;?Em!;c]q!;lcr +!<)ot!;lcr!;lcr!;lcr!:p0i!;-9k!;c]q!;uis!1!T`klK'jJ,~> +!B:&Xj6QaA!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;ZWp!;lcr!<)ot!;ZWp!;lcr!;lct +!<3&orr<&rrr<&rrr<&urr<&is8N)lrrN3#!;uis!;uis!;lcr!;6?l!;lcr!;lcr!<)ot!;uis +!;ZZp!;6?l!;c]q!;uis!<)ot!;$3j!;HKn!;HKn!;QQo!;?Em!;lcr!:p0i!;6?l!;c]q!;lcr +!;uis!:g'h!;QQo!;ZWp!;HKn!;uis!;c]q!;?Em!;c]q!;uis!<2uu!;lcr!;?Em!;c]q!;lcr +!<)ot!;lcr!;lcr!;lcr!:p0i!;-9k!;c]q!;uis!1!T`irR%VJ,~> +!BpJ^mHjiQ!;c]q!<)p"!<<'!q#:UEpqu6WrrVlitq>UEp +qu6Wrqu6]trrDio!!)or!!)or!!*#u!!)`m!!)rs!!)`m!W`6#r;Q`sr;Q`squ6Wrp&>!lqu6Wr +qu6WrrVlitr;Q`srVlitr;Q`spAY*mqYpNqr;Q`srVlitoD\djp\t3np\t3nq#:UEpp\t3nr;Q`sqYpNqpAY*mqYpNqr;Q`s +rr2ruqu6WrpAY*mqYpNqqu6WrrVlitqu6Wrqu6Wrqu6WrpAY*mr;Q`sp&>!lqYpNqr;Q`sQ2gjN +!S0Da~> +!BU8[l0SEM!;c]q!<)p"!<<'!q#:UEpqu6WrrVlitq>UEp +qu6Wrqu6]trrDio!!)or!!)or!!*#u!!)`m!!)rs!!)`m!W`6#r;Q`sr;Q`squ6Wrp&>!lqu6Wr +qu6WrrVlitr;Q`srVlitr;Q`spAY*mqYpNqr;Q`srVlitoD\djp\t3np\t3nq#:UEpp\t3nr;Q`sqYpNqpAY*mqYpNqr;Q`s +rr2ruqu6WrpAY*mqYpNqqu6WrrVlitqu6Wrqu6Wrqu6WrpAY*mr;Q`sp&>!lqYpNqr;Q`sQ2gjJ +!R<`V~> +!B:&Xj6ZdG!;c]q!<)p"!<<'!q#:UEpqu6WrrVlitq>UEp +qu6Wrqu6]trrDio!!)or!!)or!!*#u!!)`m!!)rs!!)`m!W`6#r;Q`sr;Q`squ6Wrp&>!lqu6Wr +qu6WrrVlitr;Q`srVlitr;Q`spAY*mqYpNqr;Q`srVlitoD\djp\t3np\t3nq#:UEpp\t3nr;Q`sqYpNqpAY*mqYpNqr;Q`s +rr2ruqu6WrpAY*mqYpNqqu6WrrVlitqu6Wrqu6Wrqu6WrpAY*mr;Q`sp&>!lqYpNqr;Q`sQ2gjD +!Q-jH~> +!BpJ^mHjiQ!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;ZZp!<)ot!;uis!;QQo +!<)ot!;ZWp!;HKn!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot!;6?l!;lcr!<)rt!;lcr!;6?l!;c]q +!<)ot!;uis!<)rt!<)rt!<)ot!;?Em!;c]q!<)rt!;uis!<)rt!;c]q!;HKn!;HKn!;QQo!<)ot +!;lcr!;c]q!<)rt!<)rt!<)ot!;?Em!;ZWp!<)ot!;lcr!:g'h!<)ot!<)ot!;QQo!<)rt!<2uu +!<)rt!;c]q!<)ot!;lcr!;c]q!;uis!<)ot!<)rt!;?Em!<)ot!<2uu!<)ot!;uls!<)ot!;c]q +!;c]q!<)rt!<)rt!<)ot!;6?l!;c]q!;uis!1!T`m/bd$J,~> +!BU8[l0SEM!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;ZZp!<)ot!;uis!;QQo +!<)ot!;ZWp!;HKn!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot!;6?l!;lcr!<)rt!;lcr!;6?l!;c]q +!<)ot!;uis!<)rt!<)rt!<)ot!;?Em!;c]q!<)rt!;uis!<)rt!;c]q!;HKn!;HKn!;QQo!<)ot +!;lcr!;c]q!<)rt!<)rt!<)ot!;?Em!;ZWp!<)ot!;lcr!:g'h!<)ot!<)ot!;QQo!<)rt!<2uu +!<)rt!;c]q!<)ot!;lcr!;c]q!;uis!<)ot!<)rt!;?Em!<)ot!<2uu!<)ot!;uls!<)ot!;c]q +!;c]q!<)rt!<)rt!<)ot!;6?l!;c]q!;uis!1!T`klK'jJ,~> +!B:&Xj6ZdG!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;ZZp!<)ot!;uis!;QQo +!<)ot!;ZWp!;HKn!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot!;6?l!;lcr!<)rt!;lcr!;6?l!;c]q +!<)ot!;uis!<)rt!<)rt!<)ot!;?Em!;c]q!<)rt!;uis!<)rt!;c]q!;HKn!;HKn!;QQo!<)ot +!;lcr!;c]q!<)rt!<)rt!<)ot!;?Em!;ZWp!<)ot!;lcr!:g'h!<)ot!<)ot!;QQo!<)rt!<2uu +!<)rt!;c]q!<)ot!;lcr!;c]q!;uis!<)ot!<)rt!;?Em!<)ot!<2uu!<)ot!;uls!<)ot!;c]q +!;c]q!<)rt!<)rt!<)ot!;6?l!;c]q!;uis!1!T`irR%VJ,~> +!BpJ^mHsrP!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!;c]r!<;utrVu]oqu?Tpq#:gKor;ZitrW)osr;c`pq>gKoq>gKoq>gBlr;cfrq>gHnr;c`p!gNprW)rtrW&8arp9a;4b*~> +!BU8[l0\NL!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!;c]r!<;utrVu]oqu?Tpq#:gKor;ZitrW)osr;c`pq>gKoq>gKoq>gBlr;cfrq>gHnr;c`p!gNprW)rtrW&8arojI/3e.~> +!B:&Xj6cmF!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!;c]r!<;utrVu]oqu?Tpq#:gKor;ZitrW)osr;c`pq>gKoq>gKoq>gBlr;cfrq>gHnr;c`p!gNprW)rtrW&8aro4$s2h1~> +!BpJ^mB?Ni!.k0$s+145rr<&Yrr<%Ms3q#Im/bd$J,~> +!BU8[l*(*e!.k0$s+145rr<&Yrr<%Ms3q#IklK'jJ,~> +!B:&Xj0/I_!.k0$s+145rr<&Yrr<%Ms3q#IirR%VJ,~> +!BpJ^mB?Ni!.k0$s+145rr<&Yrr<%Ms3q#Im/bd$J,~> +!BU8[l*(*e!.k0$s+145rr<&Yrr<%Ms3q#IklK'jJ,~> +!B:&Xj0/I_!.k0$s+145rr<&Yrr<%Ms3q#IirR%VJ,~> +!BpJ^mB?Ni!.k0$s+146rr<&Xrr<%Ms3q#Im/bd$J,~> +!BU8[l*(*e!.k0$s+146rr<&Xrr<%Ms3q#IklK'jJ,~> +!B:&Xj0/I_!.k0$s+146rr<&Xrr<%Ms3q#IirR%VJ,~> +!BpJ^mBHWh!.k0$s+14=s82lUs8;qKs4./Km/bd$J,~> +!BU8[l*13d!.k0$s+14=s82lUs8;qKs4./KklK'jJ,~> +!B:&Xj08R^!.k0$s+14=s82lUs8;qKs4./KirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mG\*F!2]_o!9O7\!.k0$s+13$s5j:[m/bd$J,~> +!BU8[l/D[B!2]_o!9O7\!.k0$s+13$s5j:[klK'jJ,~> +!B:&Xj5L% +!BpJ^mGS!E!:'Ra!7q/M!9X:]!9F.[!.k0$s+13$s5j:[m/bd$J,~> +!BU8[l/;RA!:'Ra!7q/M!9X:]!9F.[!.k0$s+13$s5j:[klK'jJ,~> +!B:&Xj5Bq;!:'Ra!7q/M!9X:]!9F.[!.k0$s+13$s5j:[irR%VJ,~> +!BpJ^mGS!E!:'Ra!7q/M!9X:]!9F.[!.k0$s+13$s5j:[m/bd$J,~> +!BU8[l/;RA!:'Ra!7q/M!9X:]!9F.[!.k0$s+13$s5j:[klK'jJ,~> +!B:&Xj5Bq;!:'Ra!7q/M!9X:]!9F.[!.k0$s+13$s5j:[irR%VJ,~> +!BpJ^mGS!E!:'Ra!7q/M!9X:]!9F.[!.k0$s+13$s5j:[m/bd$J,~> +!BU8[l/;RA!:'Ra!7q/M!9X:]!9F.[!.k0$s+13$s5j:[klK'jJ,~> +!B:&Xj5Bq;!:'Ra!7q/M!9X:]!9F.[!.k0$s+13$s5j:[irR%VJ,~> +!BpJ^mHX`M!;lcs!<;utqu?Tp!WN/us7u`ps8Duus8E#qs8;ros8;ourrE#tq>g9ir;cWm!!)ip +r;Zp!!!)utr;c`p! +!BU8[l0Ag9ir;cWm!!)ip +r;Zp!!!)utr;c`p! +!B:&Xj6H[C!;lcs!<;utqu?Tp!WN/us7u`ps8Duus8E#qs8;ros8;ourrE#tq>g9ir;cWm!!)ip +r;Zp!!!)utr;c`p! +!BpJ^mHacP!<)ot!;uls!<)ot!<)ot!<)rt!;lcr!;QTo!<2uu!<)ot!<)ot!;uis!<)rt!;lcr +!;-9k!<)ot!;ZWp!;c]q!<)rt!<)ot!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot!.k0$s+13$ +rrE)um/bd$J,~> +!BU8[l0J?L!<)ot!;uls!<)ot!<)ot!<)rt!;lcr!;QTo!<2uu!<)ot!<)ot!;uis!<)rt!;lcr +!;-9k!<)ot!;ZWp!;c]q!<)rt!<)ot!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot!.k0$s+13$ +rrE)uklK'jJ,~> +!B:&Xj6Q^F!<)ot!;uls!<)ot!<)ot!<)rt!;lcr!;QTo!<2uu!<)ot!<)ot!;uis!<)rt!;lcr +!;-9k!<)ot!;ZWp!;c]q!<)rt!<)ot!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot!.k0$s+13$ +rrE)uirR%VJ,~> +!BpJ^mH4EK!;uis!;lcr!<2uu!;uis!;lcr!;QQo!;$3j!<)ot!;lcr!;lcr!:Tpf!;ZWp!;lcr +!;lcr!<2uu!;lcr!<)ot!;lcr!<)ot!;$3j!.k0$s+13$rrE)um/bd$J,~> +!BU8[l/r!G!;uis!;lcr!<2uu!;uis!;lcr!;QQo!;$3j!<)ot!;lcr!;lcr!:Tpf!;ZWp!;lcr +!;lcr!<2uu!;lcr!<)ot!;lcr!<)ot!;$3j!.k0$s+13$rrE)uklK'jJ,~> +!B:&Xj6$@A!;uis!;lcr!<2uu!;uis!;lcr!;QQo!;$3j!<)ot!;lcr!;lcr!:Tpf!;ZWp!;lcr +!;lcr!<2uu!;lcr!<)ot!;lcr!<)ot!;$3j!.k0$s+13$rrE)uirR%VJ,~> +!BpJ^mHafL!;uis!;lcr!<)rs!;QQo!;QQo!;QTk!<)ot!;-9k!;- +!BU8[l0JBH!;uis!;lcr!<)rs!;QQo!;QQo!;QTk!<)ot!;-9k!;- +!B:&Xj6QaB!;uis!;lcr!<)rs!;QQo!;QQo!;QTk!<)ot!;-9k!;- +!BpJ^mHjiQ!;uis!;uis!;lcr!;c`q!;c]q!;QQo!;ZWp!;uis!<)ot!;-9k!;6?l!;uis!;ZWp +!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!.k0$s+13$rrE)um/bd$J,~> +!BU8[l0SEM!;uis!;uis!;lcr!;c`q!;c]q!;QQo!;ZWp!;uis!<)ot!;-9k!;6?l!;uis!;ZWp +!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!.k0$s+13$rrE)uklK'jJ,~> +!B:&Xj6ZdG!;uis!;uis!;lcr!;c`q!;c]q!;QQo!;ZWp!;uis!<)ot!;-9k!;6?l!;uis!;ZWp +!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!.k0$s+13$rrE)uirR%VJ,~> +!BpJ^mHjiQ!;uis!;uis!;lcr!<2uu!;uis!;lcr!;QQo!;ZWp!;uis!<)ot!;-9k!;6?l!;uis +!;ZWp!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!.k0$s+13$rrE)um/bd$J,~> +!BU8[l0SEM!;uis!;uis!;lcr!<2uu!;uis!;lcr!;QQo!;ZWp!;uis!<)ot!;-9k!;6?l!;uis +!;ZWp!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!.k0$s+13$rrE)uklK'jJ,~> +!B:&Xj6ZdG!;uis!;uis!;lcr!<2uu!;uis!;lcr!;QQo!;ZWp!;uis!<)ot!;-9k!;6?l!;uis +!;ZWp!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!.k0$s+13$rrE)uirR%VJ,~> +!BpJ^mHjiQ!<)rt!;uls!<)ot!<)rt!<)ot!;lcr!<)ot!<)ot!;ZWp!<)rt!;uis!<)rt!;lcr +!<)ot!;c]q!<)rt!;ZWp!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot!;uis!;ZWp!<)rt!;c`q!.k0$ +s+13,s8MBdeieN~> +!BU8[l0SEM!<)rt!;uls!<)ot!<)rt!<)ot!;lcr!<)ot!<)ot!;ZWp!<)rt!;uis!<)rt!;lcr +!<)ot!;c]q!<)rt!;ZWp!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot!;uis!;ZWp!<)rt!;c`q!.k0$ +s+13,s8M6`c8pI~> +!B:&Xj6ZdG!<)rt!;uls!<)ot!<)rt!<)ot!;lcr!<)ot!<)ot!;ZWp!<)rt!;uis!<)rt!;lcr +!<)ot!;c]q!<)rt!;ZWp!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot!;uis!;ZWp!<)rt!;c`q!.k0$ +s+13,s8M$Z_`*)~> +!BpJ^mHafN!!*&u!<<*!!!*&t!;uit!<;utq>^Bnrr;fpr;Z]q!<<#urVufrq#C9mq#C9m!<<#u +rr;fpr;Z]q!WN/ts8;rqs8N'!s8;rrs7u`ns8;ots8E#rs8N(Ms+13$s,$dTm/bd$J,~> +!BU8[l0JBJ!!*&u!<<*!!!*&t!;uit!<;utq>^Bnrr;fpr;Z]q!<<#urVufrq#C9mq#C9m!<<#u +rr;fpr;Z]q!WN/ts8;rqs8N'!s8;rrs7u`ns8;ots8E#rs8N(Ms+13$s,$dTklK'jJ,~> +!B:&Xj6QaD!!*&u!<<*!!!*&t!;uit!<;utq>^Bnrr;fpr;Z]q!<<#urVufrq#C9mq#C9m!<<#u +rr;fpr;Z]q!WN/ts8;rqs8N'!s8;rrs7u`ns8;ots8E#rs8N(Ms+13$s,$dTirR%VJ,~> +!BpJ^m=G<.rr<%Ms+13$s+14#s8MBdeieN~> +!BU8[l%/m*rr<%Ms+13$s+14#s8M6`c8pI~> +!B:&Xj+77$rr<%Ms+13$s+14#s8M$Z_`*)~> +!BpJ^m=G<.rr<%Ms+13$s+14#s8MBdeieN~> +!BU8[l%/m*rr<%Ms+13$s+14#s8M6`c8pI~> +!B:&Xj+77$rr<%Ms+13$s+14#s8M$Z_`*)~> +!BpJ^m=G +!BU8[l%/m+rr<%Ms+13$s+14"s8M6`c8pI~> +!B:&Xj+77%rr<%Ms+13$s+14"s8M$Z_`*)~> +!BpJ^m=G<4s82kJs+13$s+14!s8MBdeieN~> +!BU8[l%/m0s82kJs+13$s+14!s8M6`c8pI~> +!B:&Xj+77*s82kJs+13$s+14!s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mC`Ju!7UuI!.k0$s+13$s1\O4m/bd$J,~> +!BU8[l+I&q!7UuI!.k0$s+13$s1\O4klK'jJ,~> +!B:&Xj1PEk!7UuI!.k0$s+13$s1\O4irR%VJ,~> +!BpJ^mG7gA!<<)s!:'U`!8dbM!!*&u!.k0$s+13$s1\O4m/bd$J,~> +!BU8[l.uC=!<<)s!:'U`!8dbM!!*&u!.k0$s+13$s1\O4klK'jJ,~> +!B:&Xj5'b7!<<)s!:'U`!8dbM!!*&u!.k0$s+13$s1\O4irR%VJ,~> +!BpJ^mHsrH!<)rr!!*&s!9sO`!8dbM!<<*!!.k0$s+13$s1\O4m/bd$J,~> +!BU8[l0\ND!<)rr!!*&s!9sO`!8dbM!<<*!!.k0$s+13$s1\O4klK'jJ,~> +!B:&Xj6cm>!<)rr!!*&s!9sO`!8dbM!<<*!!.k0$s+13$s1\O4irR%VJ,~> +!BpJ^mHsrH!;ulr!<3#u!<<)u!<<)t!!*&u!!E6$!<<#urr;uu!<;utqu?TprVufrs8W&uqZ$Qq +s8W*!s8W*!s8W*!!<;utqu?TpqZ$KorVufrs8W&us8W#ts8W#tJcC<$JcC<$nc/UU!S0Da~> +!BU8[l0\ND!;ulr!<3#u!<<)u!<<)t!!*&u!!E6$!<<#urr;uu!<;utqu?TprVufrs8W&uqZ$Qq +s8W*!s8W*!s8W*!!<;utqu?TpqZ$KorVufrs8W&us8W#ts8W#tJcC<$JcC<$nc/UQ!R<`V~> +!B:&Xj6cm>!;ulr!<3#u!<<)u!<<)t!!*&u!!E6$!<<#urr;uu!<;utqu?TprVufrs8W&uqZ$Qq +s8W*!s8W*!s8W*!!<;utqu?TpqZ$KorVufrs8W&us8W#ts8W#tJcC<$JcC<$nc/UK!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8;rts8N*!s8E#us8;ots7QHms7lZos7lZps7ZNjs8N*!s8N*! +s8N*!s7lZos7lZos7lZps7ZKns8;rts8;qKs+13$s+14?s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8;rts8N*!s8E#us8;ots7QHms7lZos7lZps7ZNjs8N*!s8N*! +s8N*!s7lZos7lZos7lZps7ZKns8;rts8;qKs+13$s+14?s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8;rts8N*!s8E#us8;ots7QHms7lZos7lZps7ZNjs8N*!s8N*! +s8N*!s7lZos7lZos7lZps7ZKns8;rts8;qKs+13$s+14?s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'&rrE*!!!*#urrE#trrE*!rVururW!*$!!*'!rW)rtrVuru +rW)osrW)rtr;cltrrDrrrrE*!rrE*!rrE*!rW)rtrrE*!rW)osrVururW)osrW)rtr;cltrrE*! +rrE#trr@WMJcC<$JcG6>rp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'&rrE*!!!*#urrE#trrE*!rVururW!*$!!*'!rW)rtrVuru +rW)osrW)rtr;cltrrDrrrrE*!rrE*!rrE*!rW)rtrrE*!rW)osrVururW)osrW)rtr;cltrrE*! +rrE#trr@WMJcC<$JcG6>rojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'&rrE*!!!*#urrE#trrE*!rVururW!*$!!*'!rW)rtrVuru +rW)osrW)rtr;cltrrDrrrrE*!rrE*!rrE*!rW)rtrrE*!rW)osrVururW)osrW)rtr;cltrrE*! +rrE#trr@WMJcC<$JcG6>ro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N'&rr<'!!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<-# +!!)orrrE&urW)NhrrDrrrrE#trrE*!rrDrrrr<-#!!)orrrE&urW)fprrE#trr@WMJcC<$JcG6> +rp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N'&rr<'!!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<-# +!!)orrrE&urW)NhrrDrrrrE#trrE*!rrDrrrr<-#!!)orrrE&urW)fprrE#trr@WMJcC<$JcG6> +rojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N'&rr<'!!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<-# +!!)orrrE&urW)NhrrDrrrrE#trrE*!rrDrrrr<-#!!)orrrE&urW)fprrE#trr@WMJcC<$JcG6> +ro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N*!rrW9$!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<'! +pAk3mrrDThrrDrrrrE#trrE*!pAb9p!!)orrrE&urrDiorrE*!rr@WMJcC<$JcG3=rp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N*!rrW9$!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<'! +pAk3mrrDThrrDrrrrE#trrE*!pAb9p!!)orrrE&urrDiorrE*!rr@WMJcC<$JcG3=rojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N*!rrW9$!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<'! +pAk3mrrDThrrDrrrrE#trrE*!pAb9p!!)orrrE&urrDiorrE*!rr@WMJcC<$JcG3=ro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N*!s8;rss8N)ts8N*!s8N*!s8N*!s8N*!s8N)ss8N'!s7ZNm +s8N)hs8N)rs8N)ts8N*!s7ZKprr<&rs8N)us8N)os8N'#rr<%Ms+13$s+14 +!BU8[l0\NN!!`H'rrE'!s8E#rs8N*!s8;rss8N)ts8N*!s8N*!s8N*!s8N*!s8N)ss8N'!s7ZNm +s8N)hs8N)rs8N)ts8N*!s7ZKprr<&rs8N)us8N)os8N'#rr<%Ms+13$s+14 +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N*!s8;rss8N)ts8N*!s8N*!s8N*!s8N*!s8N)ss8N'!s7ZNm +s8N)hs8N)rs8N)ts8N*!s7ZKprr<&rs8N)us8N)os8N'#rr<%Ms+13$s+14 +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)us8E#ts8N)us8E#us8N*!s8N*!s8N*!s8E#ts8Duus8E#m +s8N)hs8N)rs8N)ts8N*!s8E#os8E#ss8E#ts8N)ns8;qKs+13$s+14 +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)us8E#ts8N)us8E#us8N*!s8N*!s8N*!s8E#ts8Duus8E#m +s8N)hs8N)rs8N)ts8N*!s8E#os8E#ss8E#ts8N)ns8;qKs+13$s+14 +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)us8E#ts8N)us8E#us8N*!s8N*!s8N*!s8E#ts8Duus8E#m +s8N)hs8N)rs8N)ts8N*!s8E#os8E#ss8E#ts8N)ns8;qKs+13$s+14 +!BpJ^mHsrR!!`H'rrE'!s8E#ss82iss8E#ts7?9ks8Duus7HBks7lZps7lZhs8)fqs8;rts8;rt +s7lZos7lZps7lZls8E"Ls+13$s+14;s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss82iss8E#ts7?9ks8Duus7HBks7lZps7lZhs8)fqs8;rts8;rt +s7lZos7lZps7lZls8E"Ls+13$s+14;s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss82iss8E#ts7?9ks8Duus7HBks7lZps7lZhs8)fqs8;rts8;rt +s7lZos7lZps7lZls8E"Ls+13$s+14;s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts82lss8N)ts8;ots7u]qs8Duus8)crs8;rps8)frs7lZhs8)fq +s8;rts8;rrs8)fos8;rrs7lZls8N(Ms+13$s+14:s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts82lss8N)ts8;ots7u]qs8Duus8)crs8;rps8)frs7lZhs8)fq +s8;rts8;rrs8)fos8;rrs7lZls8N(Ms+13$s+14:s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts82lss8N)ts8;ots7u]qs8Duus8)crs8;rps8)frs7lZhs8)fq +s8;rts8;rrs8)fos8;rrs7lZls8N(Ms+13$s+14:s8M$Z_`*)~> +!BpJ^mHsrH!.k1Js8N(Ms+13$s+14:s8MBdeieN~> +!BU8[l0\ND!.k1Js8N(Ms+13$s+14:s8M6`c8pI~> +!B:&Xj6cm>!.k1Js8N(Ms+13$s+14:s8M$Z_`*)~> +!BpJ^mHsrH!.k1Ks8N(Ms+13$s+149s8MBdeieN~> +!BU8[l0\ND!.k1Ks8N(Ms+13$s+149s8M6`c8pI~> +!B:&Xj6cm>!.k1Ks8N(Ms+13$s+149s8M$Z_`*)~> +!BpJ^m=G;ps8)eIs+13$s+14;s8MBdeieN~> +!BU8[l%/lls8)eIs+13$s+14;s8M6`c8pI~> +!B:&Xj+76fs8)eIs+13$s+14;s8M$Z_`*)~> +!BpJ^m=G;ps8)eIs+13$s+14;s8MBdeieN~> +!BU8[l%/lls8)eIs+13$s+14;s8M6`c8pI~> +!B:&Xj+76fs8)eIs+13$s+14;s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G<*s8;rZs8N(rs8N)Is8N(Ms+13+s8MBdeieN~> +!BU8[l%/m&s8;rZs8N(rs8N)Is8N(Ms+13+s8M6`c8pI~> +!B:&Xj+76us8;rZs8N(rs8N)Is8N(Ms+13+s8M$Z_`*)~> +!BpJ^mG.a:!9O4\!8RSS!8RSS!9F.[!8d_U!6P6@!8@GQ!;ZWp!.k0$s+p^Sm/bd$J,~> +!BU8[l.l=6!9O4\!8RSS!8RSS!9F.[!8d_U!6P6@!8@GQ!;ZWp!.k0$s+p^SklK'jJ,~> +!B:&Xj4s\0!9O4\!8RSS!8RSS!9F.[!8d_U!6P6@!8@GQ!;ZWp!.k0$s+p^SirR%VJ,~> +!BpJ^mG.^A!<2uu!<2uu!9O4\!8RSS!8RSS!9F.[!8d_U!6P6@!8@GQ!;ZWp!.k0$s+p^Sm/bd$ +J,~> +!BU8[l.l:=!<2uu!<2uu!9O4\!8RSS!8RSS!9F.[!8d_U!6P6@!8@GQ!;ZWp!.k0$s+p^SklK'j +J,~> +!B:&Xj4sY7!<2uu!<2uu!9O4\!8RSS!8RSS!9F.[!8d_U!6P6@!8@GQ!;ZWp!.k0$s+p^SirR%V +J,~> +!BpJ^mG.^A!<2uu!<2uu!1Eie!9F.[!2]\q!8@GQ!;ZWp!.k0$s+p^Sm/bd$J,~> +!BU8[l.l:=!<2uu!<2uu!1Eie!9F.[!2]\q!8@GQ!;ZWp!.k0$s+p^SklK'jJ,~> +!B:&Xj4sY7!<2uu!<2uu!1Eie!9F.[!2]\q!8@GQ!;ZWp!.k0$s+p^SirR%VJ,~> +!BpJ^mG.^A!<2uu!<2uu!<)rr!;uls!!*&t!;lfq!;ZZn!!3*"r;Z]q!WN/os8E#qs8N'!s8;rk +s8;rmrr<&ps8;p!rr<&ts8;rprrE-"r;cfrrVururW)iqr;c]orW)cor;Zlu!;ZZp!!*&t!<)rt +!<)rt!<<*!!!`H'!<<'!!<)ou!<;utqu?Tpr;Z`r!<<#up]('irVllus8;rps8;ros8;rqs8Duu +s8E#ss8E#ts8E"Ls+13^s8MBdeieN~> +!BU8[l.l:=!<2uu!<2uu!<)rr!;uls!!*&t!;lfq!;ZZn!!3*"r;Z]q!WN/os8E#qs8N'!s8;rk +s8;rmrr<&ps8;p!rr<&ts8;rprrE-"r;cfrrVururW)iqr;c]orW)cor;Zlu!;ZZp!!*&t!<)rt +!<)rt!<<*!!!`H'!<<'!!<)ou!<;utqu?Tpr;Z`r!<<#up]('irVllus8;rps8;ros8;rqs8Duu +s8E#ss8E#ts8E"Ls+13^s8M6`c8pI~> +!B:&Xj4sY7!<2uu!<2uu!<)rr!;uls!!*&t!;lfq!;ZZn!!3*"r;Z]q!WN/os8E#qs8N'!s8;rk +s8;rmrr<&ps8;p!rr<&ts8;rprrE-"r;cfrrVururW)iqr;c]orW)cor;Zlu!;ZZp!!*&t!<)rt +!<)rt!<<*!!!`H'!<<'!!<)ou!<;utqu?Tpr;Z`r!<<#up]('irVllus8;rps8;ros8;rqs8Duu +s8E#ss8E#ts8E"Ls+13^s8M$Z_`*)~> +!BpJ^mF_F=!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!;6?l!;c`q!<)ot!;QQo +!<)ot!;ZWp!;c]q!<)rt!<)ot!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot!;ZWp!;c]q!<)rt +!;QTo!<)ot!<)ot!;uis!<3#u!<<*!!<<'!!<3#u!<)ot!<)ot!<)ot!;lfr!<2uu!;?Em!;ZZp +!<)ot!<)ot!<)ot!;uis!<)ot!;lfr!<2uu!<)ot!;uis!.k0$s1870m/bd$J,~> +!BU8[l.H"9!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!;6?l!;c`q!<)ot!;QQo +!<)ot!;ZWp!;c]q!<)rt!<)ot!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot!;ZWp!;c]q!<)rt +!;QTo!<)ot!<)ot!;uis!<3#u!<<*!!<<'!!<3#u!<)ot!<)ot!<)ot!;lfr!<2uu!;?Em!;ZZp +!<)ot!<)ot!<)ot!;uis!<)ot!;lfr!<2uu!<)ot!;uis!.k0$s1870klK'jJ,~> +!B:&Xj4OA3!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!;6?l!;c`q!<)ot!;QQo +!<)ot!;ZWp!;c]q!<)rt!<)ot!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot!;ZWp!;c]q!<)rt +!;QTo!<)ot!<)ot!;uis!<3#u!<<*!!<<'!!<3#u!<)ot!<)ot!<)ot!;lfr!<2uu!;?Em!;ZZp +!<)ot!<)ot!<)ot!;uis!<)ot!;lfr!<2uu!<)ot!;uis!.k0$s1870irR%VJ,~> +!BpJ^mF_F=!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!;6?l!;c]q!;uis!;$3j +!;ZWp!;lcr!;lcr!<2uu!;lcr!<)ot!;lcr!<)ot!;$3j!;ZWp!;lcr!;lcr!;QQo!;uis!<)ot +!;uis!<2uu!<2uu!<2uu!<2uu!;lcu!<<'!qu6Wrr;Q`snc&Rhq>UEpr;Q`srr2ruqu6Wrrr2ru +qu6Wrr;Q`sq#: +!BU8[l.H"9!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!;6?l!;c]q!;uis!;$3j +!;ZWp!;lcr!;lcr!<2uu!;lcr!<)ot!;lcr!<)ot!;$3j!;ZWp!;lcr!;lcr!;QQo!;uis!<)ot +!;uis!<2uu!<2uu!<2uu!<2uu!;lcu!<<'!qu6Wrr;Q`snc&Rhq>UEpr;Q`srr2ruqu6Wrrr2ru +qu6Wrr;Q`sq#: +!B:&Xj4OA3!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!;6?l!;c]q!;uis!;$3j +!;ZWp!;lcr!;lcr!<2uu!;lcr!<)ot!;lcr!<)ot!;$3j!;ZWp!;lcr!;lcr!;QQo!;uis!<)ot +!;uis!<2uu!<2uu!<2uu!<2uu!;lcu!<<'!qu6Wrr;Q`snc&Rhq>UEpr;Q`srr2ruqu6Wrrr2ru +qu6Wrr;Q`sq#: +!BpJ^mF_F=!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;6Bk!:p-i!;c]q!;uis!;QTk!;ZWp!;lcr +!;lcr!<3#o!<)ot!;lcr!<)ot!;QTk!;ZWp!;lcr!:g'h!;uis!<)ot!;uis!<2uu!<2uu!<2uu +!<2uu!;lct!<<)p!;uis!:g'h!;ZWp!;uis!<3#o!<2uu!;lcr!;uis!;HKn!<2uu!.k0$s1/1/ +m/bd$J,~> +!BU8[l.H"9!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;6Bk!:p-i!;c]q!;uis!;QTk!;ZWp!;lcr +!;lcr!<3#o!<)ot!;lcr!<)ot!;QTk!;ZWp!;lcr!:g'h!;uis!<)ot!;uis!<2uu!<2uu!<2uu +!<2uu!;lct!<<)p!;uis!:g'h!;ZWp!;uis!<3#o!<2uu!;lcr!;uis!;HKn!<2uu!.k0$s1/1/ +klK'jJ,~> +!B:&Xj4OA3!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;6Bk!:p-i!;c]q!;uis!;QTk!;ZWp!;lcr +!;lcr!<3#o!<)ot!;lcr!<)ot!;QTk!;ZWp!;lcr!:g'h!;uis!<)ot!;uis!<2uu!<2uu!<2uu +!<2uu!;lct!<<)p!;uis!:g'h!;ZWp!;uis!<3#o!<2uu!;lcr!;uis!;HKn!<2uu!.k0$s1/1/ +irR%VJ,~> +!BpJ^mF_F=!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!:p0i!;-9k!;c]q!;uis!;ZWp!;uis!;ZWp +!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!;ZWp!;lcr!:g'h!;uis!<)ot!;uis!<2uu +!<2uu!<2uu!<2uu!;lcu!<<'!p&>!lnc&Rhq>UEpr;Q`srr2rup\t3nqu6Wrr;Q`sp\t3nrr2ru +JcC<$\c;Zr!S0Da~> +!BU8[l.H"9!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!:p0i!;-9k!;c]q!;uis!;ZWp!;uis!;ZWp +!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!;ZWp!;lcr!:g'h!;uis!<)ot!;uis!<2uu +!<2uu!<2uu!<2uu!;lcu!<<'!p&>!lnc&Rhq>UEpr;Q`srr2rup\t3nqu6Wrr;Q`sp\t3nrr2ru +JcC<$\c;Zn!R<`V~> +!B:&Xj4OA3!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!:p0i!;-9k!;c]q!;uis!;ZWp!;uis!;ZWp +!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!;ZWp!;lcr!:g'h!;uis!<)ot!;uis!<2uu +!<2uu!<2uu!<2uu!;lcu!<<'!p&>!lnc&Rhq>UEpr;Q`srr2rup\t3nqu6Wrr;Q`sp\t3nrr2ru +JcC<$\c;Zh!Q-jH~> +!BpJ^mF_F=!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;?Em!;uis!;6?l!;c]q!;uis!;ZWp!;uis +!;ZWp!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!;ZWp!;lcr!:g'h!;uis!<)ot!;uis +!<2uu!<2uu!<2uu!<2uu!;lcu!<<'!p&>!lnc&Rhq>UEpr;Q`srr2rup\t3nqu6Wrr;Q`spAY0o +rr@WMJcE7[rp9a;4b*~> +!BU8[l.H"9!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;?Em!;uis!;6?l!;c]q!;uis!;ZWp!;uis +!;ZWp!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!;ZWp!;lcr!:g'h!;uis!<)ot!;uis +!<2uu!<2uu!<2uu!<2uu!;lcu!<<'!p&>!lnc&Rhq>UEpr;Q`srr2rup\t3nqu6Wrr;Q`spAY0o +rr@WMJcE7[rojI/3e.~> +!B:&Xj4OA3!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;?Em!;uis!;6?l!;c]q!;uis!;ZWp!;uis +!;ZWp!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!;ZWp!;lcr!:g'h!;uis!<)ot!;uis +!<2uu!<2uu!<2uu!<2uu!;lcu!<<'!p&>!lnc&Rhq>UEpr;Q`srr2rup\t3nqu6Wrr;Q`spAY0o +rr@WMJcE7[ro4$s2h1~> +!BpJ^mF_F=!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot!;6?l!;c]q!;uis!;ZWp +!<)rt!;ZWp!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot!;uis!;ZWp!<)rt!;ZWp!;c]q!<)rt!;QQo +!;uis!<)ot!<)rt!<2uu!<2uu!<2uu!<3#u!<)ot!<)ot!<)rt!;uis!:g'h!<)ot!<2uu!;uis +!<)ot!<)rt!<)ot!<)ot!;lcr!;?Eo!<3&ps8N(Ms+13es8MBdeieN~> +!BU8[l.H"9!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot!;6?l!;c]q!;uis!;ZWp +!<)rt!;ZWp!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot!;uis!;ZWp!<)rt!;ZWp!;c]q!<)rt!;QQo +!;uis!<)ot!<)rt!<2uu!<2uu!<2uu!<3#u!<)ot!<)ot!<)rt!;uis!:g'h!<)ot!<2uu!;uis +!<)ot!<)rt!<)ot!<)ot!;lcr!;?Eo!<3&ps8N(Ms+13es8M6`c8pI~> +!B:&Xj4OA3!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot!;6?l!;c]q!;uis!;ZWp +!<)rt!;ZWp!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot!;uis!;ZWp!<)rt!;ZWp!;c]q!<)rt!;QQo +!;uis!<)ot!<)rt!<2uu!<2uu!<2uu!<3#u!<)ot!<)ot!<)rt!;uis!:g'h!<)ot!<2uu!;uis +!<)ot!<)rt!<)ot!<)ot!;lcr!;?Eo!<3&ps8N(Ms+13es8M$Z_`*)~> +!BpJ^mFqUgHnr;ZitrW)rtq>gHnr;cTlrW)rtrW)osr;Zs"!!*&u!<<*! +!<<*!!!E6$!<;utqu?Tpr;ZTno`+jirr;rtrr;rtrVufrqZ$Kor;ZTnq>UEpq#C?oJcC<$_Z0W& +!S0Da~> +!BU8[l.Z18!;lfp!;lcs!<;utr;ZTnr;Z]qqu6Zss8;rls7u`ps8E#ts8E#os8;ots8E#ts7u`n +s8;ourrDusr;ccqrr<'!r;cfrq>gHnr;ZitrW)rtq>gHnr;cTlrW)rtrW)osr;Zs"!!*&u!<<*! +!<<*!!!E6$!<;utqu?Tpr;ZTno`+jirr;rtrr;rtrVufrqZ$Kor;ZTnq>UEpq#C?oJcC<$_Z0W" +!R<`V~> +!B:&Xj4aP2!;lfp!;lcs!<;utr;ZTnr;Z]qqu6Zss8;rls7u`ps8E#ts8E#os8;ots8E#ts7u`n +s8;ourrDusr;ccqrr<'!r;cfrq>gHnr;ZitrW)rtq>gHnr;cTlrW)rtrW)osr;Zs"!!*&u!<<*! +!<<*!!!E6$!<;utqu?Tpr;ZTno`+jirr;rtrr;rtrVufrqZ$Kor;ZTnq>UEpq#C?oJcC<$_Z0Vq +!Q-jH~> +!BpJ^mD])*!1Nof!.k0Xrr<%Ms+13Zs8MBdeieN~> +!BU8[l,EZ&!1Nof!.k0Xrr<%Ms+13Zs8M6`c8pI~> +!B:&Xj2M#u!1Nof!.k0Xrr<%Ms+13Zs8M$Z_`*)~> +!BpJ^mD])*!1Nof!.k0Yrr<%Ms+13Ys8MBdeieN~> +!BU8[l,EZ&!1Nof!.k0Yrr<%Ms+13Ys8M6`c8pI~> +!B:&Xj2M#u!1Nof!.k0Yrr<%Ms+13Ys8M$Z_`*)~> +!BpJ^mD])*!1Wug!.k0Xrr<%Ms+13Ys8MBdeieN~> +!BU8[l,EZ&!1Wug!.k0Xrr<%Ms+13Ys8M6`c8pI~> +!B:&Xj2M#u!1Wug!.k0Xrr<%Ms+13Ys8M$Z_`*)~> +!BpJ^mDf2)!2BMk!.k0Zs82kJs+13Zs8MBdeieN~> +!BU8[l,Nc%!2BMk!.k0Zs82kJs+13Zs8M6`c8pI~> +!B:&Xj2V,t!2BMk!.k0Zs82kJs+13Zs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m?[eO!.k0$s+13$s0Mb)m/bd$J,~> +!BU8[l'DAK!.k0$s+13$s0Mb)klK'jJ,~> +!B:&Xj-K`E!.k0$s+13$s0Mb)irR%VJ,~> +!BpJ^mFqU=!!<0#!71]>!!*&u!.k0$s+13$s0Mb)m/bd$J,~> +!BU8[l.Z19!!<0#!71]>!!*&u!.k0$s+13$s0Mb)klK'jJ,~> +!B:&Xj4aP3!!<0#!71]>!!*&u!.k0$s+13$s0Mb)irR%VJ,~> +!BpJ^mHsrH!;ull!71]>!<<*!!.k0$s+13$s0Mb)m/bd$J,~> +!BU8[l0\ND!;ull!71]>!<<*!!.k0$s+13$s0Mb)klK'jJ,~> +!B:&Xj6cm>!;ull!71]>!<<*!!.k0$s+13$s0Mb)irR%VJ,~> +!BpJ^mHsrH!;uls!<)rs!!*&t!<<)u!;ulq!<)rs!<<)t!<<)u!!*&t!;ZZp!<<*!!<<*!!<<*! +!!*&t!;lfp!;c`o!<)rr!<<)u!<<)t!<<)t!.k0$s+13$s5s@\m/bd$J,~> +!BU8[l0\ND!;uls!<)rs!!*&t!<<)u!;ulq!<)rs!<<)t!<<)u!!*&t!;ZZp!<<*!!<<*!!<<*! +!!*&t!;lfp!;c`o!<)rr!<<)u!<<)t!<<)t!.k0$s+13$s5s@\klK'jJ,~> +!B:&Xj6cm>!;uls!<)rs!!*&t!<<)u!;ulq!<)rs!<<)t!<<)u!!*&t!;ZZp!<<*!!<<*!!<<*! +!!*&t!;lfp!;c`o!<)rr!<<)u!<<)t!<<)t!.k0$s+13$s5s@\irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N'!s7ZNns7lZps8E#us8;rts7cTjs8N*!s8N*!s8N*! +s7lZos7lZos7lZps7ZKns8;rts8;qKs+13$s+144s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N'!s7ZNns7lZps8E#us8;rts7cTjs8N*!s8N*!s8N*! +s7lZos7lZos7lZps7ZKns8;rts8;qKs+13$s+144s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N'!s7ZNns7lZps8E#us8;rts7cTjs8N*!s8N*!s8N*! +s7lZos7lZos7lZps7ZKns8;rts8;qKs+13$s+144s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)ms8;rts8N'!s8E#ss8E#us8N)ts8N)us8E#ts8E#qs8N*! +s8N*!s8N*!s8E#ts8N*!s8E#ss8Duus8E#ss8E#ts8;rts8N*!s8N)ts8N(Ms+13$s+143s8MBd +eieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)ms8;rts8N'!s8E#ss8E#us8N)ts8N)us8E#ts8E#qs8N*! +s8N*!s8N*!s8E#ts8N*!s8E#ss8Duus8E#ss8E#ts8;rts8N*!s8N)ts8N(Ms+13$s+143s8M6` +c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)ms8;rts8N'!s8E#ss8E#us8N)ts8N)us8E#ts8E#qs8N*! +s8N*!s8N*!s8E#ts8N*!s8E#ss8Duus8E#ss8E#ts8;rts8N*!s8N)ts8N(Ms+13$s+143s8M$Z +_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)ms8E#qs8N)rs8N*!s8N)ts8N)us8N)ss8N)ns8N)rs8N)t +s8N*!s8N)rs8N'#rr<&rs8N)us8E#ps8N)ts8N(Ms+13$s+143s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)ms8E#qs8N)rs8N*!s8N)ts8N)us8N)ss8N)ns8N)rs8N)t +s8N*!s8N)rs8N'#rr<&rs8N)us8E#ps8N)ts8N(Ms+13$s+143s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)ms8E#qs8N)rs8N*!s8N)ts8N)us8N)ss8N)ns8N)rs8N)t +s8N*!s8N)rs8N'#rr<&rs8N)us8E#ps8N)ts8N(Ms+13$s+143s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)us8)frs8N)qs8N)rs8N*!s8N)ts8N)us8N)ss8N)ns8N)r +s8N)ts8N*!s7ZKprr<&rs8N)us8N)os8N*!s8N(Ms+13$s+142s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)us8)frs8N)qs8N)rs8N*!s8N)ts8N)us8N)ss8N)ns8N)r +s8N)ts8N*!s7ZKprr<&rs8N)us8N)os8N*!s8N(Ms+13$s+142s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)us8)frs8N)qs8N)rs8N*!s8N)ts8N)us8N)ss8N)ns8N)r +s8N)ts8N*!s7ZKprr<&rs8N)us8N)os8N*!s8N(Ms+13$s+142s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)us8)frs8N)qs8N)rs8N*!s8N)ts8N)us8N)ss8N)ns8N)r +s8N)ts8N*!s7ZKprr<&rs8N)us8N)os8N'#rr<%Ms+13$s+141s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)us8)frs8N)qs8N)rs8N*!s8N)ts8N)us8N)ss8N)ns8N)r +s8N)ts8N*!s7ZKprr<&rs8N)us8N)os8N'#rr<%Ms+13$s+141s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)us8)frs8N)qs8N)rs8N*!s8N)ts8N)us8N)ss8N)ns8N)r +s8N)ts8N*!s7ZKprr<&rs8N)us8N)os8N'#rr<%Ms+13$s+141s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N)us8N)qs8E#ss8E#us8N)us8E#ts8E#ts8E#ms8N)r +s8N)ts8N*!s8E#os8E#ss8E#ts8N)ns8;qKs+13$s+141s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N)us8N)qs8E#ss8E#us8N)us8E#ts8E#ts8E#ms8N)r +s8N)ts8N*!s8E#os8E#ss8E#ts8N)ns8;qKs+13$s+141s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N)us8N)qs8E#ss8E#us8N)us8E#ts8E#ts8E#ms8N)r +s8N)ts8N*!s8E#os8E#ss8E#ts8N)ns8;qKs+13$s+141s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7cQos7lZns7lZos7cTos7lZis8)fqs8;rts8;rts7lZos7lZp +s7lZls8E"Ls+13$s+140s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7cQos7lZns7lZos7cTos7lZis8)fqs8;rts8;rts7lZos7lZp +s7lZls8E"Ls+13$s+140s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7cQos7lZns7lZos7cTos7lZis8)fqs8;rts8;rts7lZos7lZp +s7lZls8E"Ls+13$s+140s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&qs8)frs7lZls8;rps8;ots8E#us8N'!s8;rls8)fqs8;rts8;rr +s8)fos8;rrs7lZls8N(Ms+13$s+14/s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&qs8)frs7lZls8;rps8;ots8E#us8N'!s8;rls8)fqs8;rts8;rr +s8)fos8;rrs7lZls8N(Ms+13$s+14/s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&qs8)frs7lZls8;rps8;ots8E#us8N'!s8;rls8)fqs8;rts8;rr +s8)fos8;rrs7lZls8N(Ms+13$s+14/s8M$Z_`*)~> +!BpJ^mHsrH!7:cG!4r41!.k0$s+13$s5F"Wm/bd$J,~> +!BU8[l0\ND!7:cG!4r41!.k0$s+13$s5F"WklK'jJ,~> +!B:&Xj6cm>!7:cG!4r41!.k0$s+13$s5F"WirR%VJ,~> +!BpJ^mHsrH!7:cG!5&:2!.k0$s+13$s5 +!BU8[l0\ND!7:cG!5&:2!.k0$s+13$s5 +!B:&Xj6cm>!7:cG!5&:2!.k0$s+13$s5 +!BpJ^mBQ]h!5JR2!.k0$s+13$s5O(Xm/bd$J,~> +!BU8[l*:9d!5JR2!.k0$s+13$s5O(XklK'jJ,~> +!B:&Xj0AX^!5JR2!.k0$s+13$s5O(XirR%VJ,~> +!BpJ^mBQ]h!5JR2!.k0$s+13$s5O(Xm/bd$J,~> +!BU8[l*:9d!5JR2!.k0$s+13$s5O(XklK'jJ,~> +!B:&Xj0AX^!5JR2!.k0$s+13$s5O(XirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+140s8N(Ms+144s8MBdeieN~> +!BU8[l%/kcs+140s8N(Ms+144s8M6`c8pI~> +!B:&Xj+75]s+140s8N(Ms+144s8M$Z_`*)~> +!BpJ^mG.a +!BU8[l.l=8!7(TE!:9^c!;?Em!.k0Vrr<&crr<&mrr<&Trr<&prr<%Ms+144s8M6`c8pI~> +!B:&Xj4s\2!7(TE!:9^c!;?Em!.k0Vrr<&crr<&mrr<&Trr<&prr<%Ms+144s8M$Z_`*)~> +!BpJ^mG%X@!;uis!71ZF!:9^c!;?Em!.k0Vrr<&crr<&mrr<&Trr<&prr<%Ms+144s8MBdeieN~> +!BU8[l.c4 +!B:&Xj4jS6!;uis!71ZF!:9^c!;?Em!.k0Vrr<&crr<&mrr<&Trr<&prr<%Ms+144s8M$Z_`*)~> +!BpJ^mG%X@!;lcr!7:`G!:9^c!.k0Jrr<&crr<&Hrr<&prr<%Ms+144s8MBdeieN~> +!BU8[l.c4 +!B:&Xj4jS6!;lcr!7:`G!:9^c!.k0Jrr<&crr<&Hrr<&prr<%Ms+144s8M$Z_`*)~> +!BpJ^mG%X@!;lcr!<)rr!;ulr!!*&u!<3#u!!`H'!<<'!!<3#u!<)rt!<)ro!;ulq!;lfm!;ulr +!;ZZn!;uls!!*&t!;?Hk!!N<%!<<)u!!*&u!;lfp!;uls!<)rt!<3#u!!*&t!;lfp!!3*"qZ$Qq +p](3m!<<#uqu?Tpr;Zcs!<;utrVuis!<<#uqu?TpqZ$Ko!WN/ts8;rqs8N'!s8;rqs7u`ns8;rp +s7u`ns8E#os8;rqs8N'!s8;rls7u`orrE-"r;c`pr;c]or;ccqrVururW)osrW)rtrW%NLRK*9R +!S0Da~> +!BU8[l.c4 +!B:&Xj4jS6!;lcr!<)rr!;ulr!!*&u!<3#u!!`H'!<<'!!<3#u!<)rt!<)ro!;ulq!;lfm!;ulr +!;ZZn!;uls!!*&t!;?Hk!!N<%!<<)u!!*&u!;lfp!;uls!<)rt!<3#u!!*&t!;lfp!!3*"qZ$Qq +p](3m!<<#uqu?Tpr;Zcs!<;utrVuis!<<#uqu?TpqZ$Ko!WN/ts8;rqs8N'!s8;rqs7u`ns8;rp +s7u`ns8E#os8;rqs8N'!s8;rls7u`orrE-"r;c`pr;c]or;ccqrVururW)osrW)rtrW%NLRK*9H +!Q-jH~> +!BpJ^mG%X@!;lcr!<2uu!<)ot!;lfr!<2uu!<3#u!<<*!!<<'!!<2uu!;uis!;lcr!;ZWp!<)ot +!;c]q!;?Em!;c]q!<)ot!;uls!<)ot!;QQo!<)rt!;uls!<2uu!<)ot!<)ot!;uis!;uis!<)rt +!<)ot!<)ot!<)rt!;c`q!;6Bl!<2uu!<)ot!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot!;uis +!<)rt!<)ot!<)ot!;uls!<)ot!;lcr!;ZWp!<)ot!;c]q!;?Em!;c]q!<)ot!;uls!<)ot!;?Em +!;ZZp!<)ot!<)ot!<)ot!;uis!<)ot!;lfr!<2uu!<)ot!;uis!.k0;s8MBdeieN~> +!BU8[l.c4 +!B:&Xj4jS6!;lcr!<2uu!<)ot!;lfr!<2uu!<3#u!<<*!!<<'!!<2uu!;uis!;lcr!;ZWp!<)ot +!;c]q!;?Em!;c]q!<)ot!;uls!<)ot!;QQo!<)rt!;uls!<2uu!<)ot!<)ot!;uis!;uis!<)rt +!<)ot!<)ot!<)rt!;c`q!;6Bl!<2uu!<)ot!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot!;uis +!<)rt!<)ot!<)ot!;uls!<)ot!;lcr!;ZWp!<)ot!;c]q!;?Em!;c]q!<)ot!;uls!<)ot!;?Em +!;ZZp!<)ot!<)ot!<)ot!;uis!<)ot!;lfr!<2uu!<)ot!;uis!.k0;s8M$Z_`*)~> +!BpJ^mG%X@!;uis!<2uu!;lcr!;uis!;ZWp!<2uu!<2uu!<2uu!;uis!;lcr!;-9k!;c]q!;?Em +!;lcr!;lcr!<)ot!;uis!;ZWp!;lcr!;uis!;ZWp!;lcr!<)ot!;uis!<)ot!;lcr!<2uu!;uis +!:9^c!;ZWp!;lcr!<)ot!;lcr!<)ot!;ZWp!;lcr!<)ot!;uis!<2uu!;lcr!<)ot!;uis!;lcr +!;-9k!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;?Em!;ZWp!;uis!<2uu!;lcr!<2uu!;lcr!;uis +!;QQo!;uis!.k0;s8MBdeieN~> +!BU8[l.c4 +!B:&Xj4jS6!;uis!<2uu!;lcr!;uis!;ZWp!<2uu!<2uu!<2uu!;uis!;lcr!;-9k!;c]q!;?Em +!;lcr!;lcr!<)ot!;uis!;ZWp!;lcr!;uis!;ZWp!;lcr!<)ot!;uis!<)ot!;lcr!<2uu!;uis +!:9^c!;ZWp!;lcr!<)ot!;lcr!<)ot!;ZWp!;lcr!<)ot!;uis!<2uu!;lcr!<)ot!;uis!;lcr +!;-9k!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;?Em!;ZWp!;uis!<2uu!;lcr!<2uu!;lcr!;uis +!;QQo!;uis!.k0;s8M$Z_`*)~> +!BpJ^mG%[ +!BU8[l.c78!<)rn!;uis!;ZWp!<2uu!<2uu!<2uu!;uis!;lcr!;ZZl!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!;ZWp!;lcr!;uis!;ZWp!;lcr!<)ot!;uis!<)ot!;lcr!<)rs!9sL`!;ZZj!<)ot +!;lcr!<)ot!;ZZj!;ulr!;lfl!<)ot!;uis!;lcr!;ZZl!;c]q!;?Em!;lcr!;lcr!<)ot!;uis +!;?Em!;ZWp!;uis!<3#o!<2uu!;lcr!;uis!;HKn!<2uu!.k0:s8M6`c8pI~> +!B:&Xj4jV2!<)rn!;uis!;ZWp!<2uu!<2uu!<2uu!;uis!;lcr!;ZZl!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!;ZWp!;lcr!;uis!;ZWp!;lcr!<)ot!;uis!<)ot!;lcr!<)rs!9sL`!;ZZj!<)ot +!;lcr!<)ot!;ZZj!;ulr!;lfl!<)ot!;uis!;lcr!;ZZl!;c]q!;?Em!;lcr!;lcr!<)ot!;uis +!;?Em!;ZWp!;uis!<3#o!<2uu!;lcr!;uis!;HKn!<2uu!.k0:s8M$Z_`*)~> +!BpJ^mG%X@!;QQo!;6?l!;ZWp!<2uu!<2uu!<2uu!;uis!;lcr!;c]q!;uis!;c]q!;?Em!;lcr +!;lcr!<)ot!;uis!;ZWp!;lcr!;uis!;ZWp!;lcr!<)ot!;uis!<)ot!;lcr!;c`q!:0Xb!;ZWp +!;?Em!;lcr!<)ot!;ZWp!:p0i!<)ot!;?Em!;uis!;lcr!;c]q!;uis!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!;?Em!;ZWp!;uis!<2uu!;HKn!;lcr!;uis!;HKn!<2uu!.k0:s8MBdeieN~> +!BU8[l.c4 +!B:&Xj4jS6!;QQo!;6?l!;ZWp!<2uu!<2uu!<2uu!;uis!;lcr!;c]q!;uis!;c]q!;?Em!;lcr +!;lcr!<)ot!;uis!;ZWp!;lcr!;uis!;ZWp!;lcr!<)ot!;uis!<)ot!;lcr!;c`q!:0Xb!;ZWp +!;?Em!;lcr!<)ot!;ZWp!:p0i!<)ot!;?Em!;uis!;lcr!;c]q!;uis!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!;?Em!;ZWp!;uis!<2uu!;HKn!;lcr!;uis!;HKn!<2uu!.k0:s8M$Z_`*)~> +!BpJ^mG%X@!;QQo!;6?l!;ZWp!<2uu!<2uu!<2uu!;uis!;lcr!;c]q!;uis!;c]q!;?Em!;lcr +!;lcr!<)ot!;uis!;ZWp!;lcr!;uis!;ZWp!;lcr!<)ot!;uis!<)ot!;lcr!<2uu!;uis!:9^c +!;ZWp!;?Em!;lcr!<)ot!;ZWp!;?Em!;uis!<2uu!;?Em!;uis!;lcr!;c]q!;uis!;c]q!;?Em +!;lcr!;lcr!<)ot!;uis!;?Em!;ZWp!;uis!<2uu!;HKn!;lcr!;uis!;?Eo!<3%Ms-E]am/bd$ +J,~> +!BU8[l.c4 +!B:&Xj4jS6!;QQo!;6?l!;ZWp!<2uu!<2uu!<2uu!;uis!;lcr!;c]q!;uis!;c]q!;?Em!;lcr +!;lcr!<)ot!;uis!;ZWp!;lcr!;uis!;ZWp!;lcr!<)ot!;uis!<)ot!;lcr!<2uu!;uis!:9^c +!;ZWp!;?Em!;lcr!<)ot!;ZWp!;?Em!;uis!<2uu!;?Em!;uis!;lcr!;c]q!;uis!;c]q!;?Em +!;lcr!;lcr!<)ot!;uis!;?Em!;ZWp!;uis!<2uu!;HKn!;lcr!;uis!;?Eo!<3%Ms-E]airR%V +J,~> +!BpJ^mG%X@!;HKn!<)rt!;uis!;ZWp!<2uu!<2uu!<2uu!<)rt!;lcr!<)p"!<<'!rVultqYpNq +rVlitqu6WrqYpNqrVlitr;Q`sr;Q`sq#: +!BU8[l.c4 +!B:&Xj4jS6!;HKn!<)rt!;uis!;ZWp!<2uu!<2uu!<2uu!<)rt!;lcr!<)p"!<<'!rVultqYpNq +rVlitqu6WrqYpNqrVlitr;Q`sr;Q`sq#: +!BpJ^mG.a>!;ZZn!;uln!<3#t!<<*!!<<*!!<3#s!!<0#!;lfp!<)rr!!*&u!;lfp!<)ro!;ulq +!;ulr!<3#t!;QTm!!3*"rr;fpqu?TpqZ$Ko!ri6#rr3!!s8;rqrrE-"r;c]orrDcmq>gEmr;c`p +!UEpq#C?oJcDDCrp9a;4b*~> +!BU8[l.l=:!;ZZn!;uln!<3#t!<<*!!<<*!!<3#s!!<0#!;lfp!<)rr!!*&u!;lfp!<)ro!;ulq +!;ulr!<3#t!;QTm!!3*"rr;fpqu?TpqZ$Ko!ri6#rr3!!s8;rqrrE-"r;c]orrDcmq>gEmr;c`p +!UEpq#C?oJcDDCrojI/3e.~> +!B:&Xj4s\4!;ZZn!;uln!<3#t!<<*!!<<*!!<3#s!!<0#!;lfp!<)rr!!*&u!;lfp!<)ro!;ulq +!;ulr!<3#t!;QTm!!3*"rr;fpqu?TpqZ$Ko!ri6#rr3!!s8;rqrrE-"r;c]orrDcmq>gEmr;c`p +!UEpq#C?oJcDDCro4$s2h1~> +!BpJ^m=G;hrr<&Srr<&bs8N)Urr<%Ms1eR6!.k08s8MBdeieN~> +!BU8[l%/ldrr<&Srr<&bs8N)Urr<%Ms1eR6!.k08s8M6`c8pI~> +!B:&Xj+76^rr<&Srr<&bs8N)Urr<%Ms1eR6!.k08s8M$Z_`*)~> +!BpJ^m=G;hrr<&Srr<&bs8N)Urr<%Ms1nX7!.k07s8MBdeieN~> +!BU8[l%/ldrr<&Srr<&bs8N)Urr<%Ms1nX7!.k07s8M6`c8pI~> +!B:&Xj+76^rr<&Srr<&bs8N)Urr<%Ms1nX7!.k07s8M$Z_`*)~> +!BpJ^m=G;irr<&Rrr<&cs8N)Trr<%Ms1nX7!.k07s8MBdeieN~> +!BU8[l%/lerr<&Rrr<&cs8N)Trr<%Ms1nX7!.k07s8M6`c8pI~> +!B:&Xj+76_rr<&Rrr<&cs8N)Trr<%Ms1nX7!.k07s8M$Z_`*)~> +!BpJ^m=G;ns82lOs8;r>s8;qKs2G$9!.k08s8MBdeieN~> +!BU8[l%/ljs82lOs8;r>s8;qKs2G$9!.k08s8M6`c8pI~> +!B:&Xj+76ds82lOs8;r>s8;qKs2G$9!.k08s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6eq)D'eq)D'f"T]84b*~> +!BU73c@O8lc@O8lcG%R(3e.~> +!B:%0_h#^V_h#^V_nO"g2h1~> +JN\QIJN\QIJN^V.J,~> +JNA?CJNA?CJNCD(J,~> +JN&-=JN&-=JN(2"J,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/books/ps/v71calculus.eps b/books/ps/v71calculus.eps new file mode 100644 index 0000000..f423891 --- /dev/null +++ b/books/ps/v71calculus.eps @@ -0,0 +1,2087 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner +%%Title: calculus.eps +%%CreationDate: Sat Jun 21 10:34:43 2008 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 696 475 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 459.83362537429304 translate +681.59055118110246 -459.83362537429304 scale +% Image geometry +710 479 8 +% Transformation matrix +[ 710 0 0 479 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 710 string def +/gstr 710 string def +/bstr 710 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 96686 ASCII Bytes +colorimage +quD:2JN\QIJN\QI`BF,!J,~> +quD:/JNA?CJNA?C`B*nsJ,~> +quD:,JN&-=JN&-=`Ad\pJ,~> +rW)s]JcC<$JcC<$JcE^hs#p>]J,~> +rW)sZJcC<$JcC<$JcE^hs#U,ZJ,~> +rW)sWJcC<$JcC<$JcE^hs#9oWJ,~> +rr<*`rr.KIJc1/uJc1/u`Voi9!^-M`J,~> +rr<*]rr.KIJc1/uJc1/u`Voi9!]g;]J,~> +rr<*ZrV_ +!WYC^Jc()sJc()sNr84$rVYu>rVYu>rqliX4TL!~> +!WY:[Jbt#qJbt#qNr/.#rVPo=rVPo=rqccV3WO[~> +!WY1WJbjroJbjroNr&(!rVGi;rVGi;rqZ]T2ZS@~> +!WYC]JbjroJbjroO88m7bjGE6b_l8nMTkJf"jDl#qMNMars$])qYK/6!.Y~> +!WY:YJbalmJbalmO8/g6bjGE6b_l5lMTkJf"jDl"q23D`rs$])q>&u1!.Y~> +!WY1VJbXfkJbXfkO8&a4bjGE6b_c,iM9PAe"jDhupkd5^rs$](q"Wc+!.Y~> +!Bp>Xq#LHro)O@;JbalmJbc):!K-jCr!!%Vq>#pHmJI.dMY[(*rU'L`rJLUM!T?1l~> +!BU)TpAk6po)O@9JbO`iJbPr6!K$dBr!!%Up\0OCmJI.dM>-b$rU'L`rJCOJ!T,qg~> +!B9iPo`5$no)O@7Jb=TeJb>f2!JgX@qZZqRp%=+=mJ@(cL\:=qrU'I_rJ1CF!So\b~> +!Bp;WpB/E6`%CW^JbO`iJbO`iU\=eGr9a=ar/(1BM>Zc;"oO5OpPJh8q>pMNrq?HN4b*~> +!BU&So`N34`%CW^Jb=TeJb=TeU\+YCqsF1_qhOk;L\pK7"oF)JonWG3q#UAJrq- +!B9fOo)m!2`%CW^Jb+HaJb+HaU[nM@qsF.^qhF_6LAUB5"oF&Go7m/0p]:8Hrpp0F2h1~> +!Bp;Wp(.1.qQ+s_PA6:)B9P$56BcuoJbJL)!B;b3p&R-+j7WI4r\"=mJ$k^M"^OuqsF.ZqhY7F!T#ti~> +!BU#RoFLt,qQ+s_PA6:)B9P$56BcumJb8@%!B2Y1oDpm'j7E=1r[n7:En#[4Jb8!p!JgO=p'(;J +o^mq8mIg_[L\14oqX*tWqM5(B!Sf_d~> +!B9cNnIPY)qQ+s_PA6:)B9P$56BcujJar-t!AuJ.nGtL!j7*+,r[e18E6s1+Jaqdj!JU=9oEG#D +naV>.mIUSWL%4\eq!I\SpkA_;!SKD^~> +!Bp5UoFLu0rRn3jg"`aZgP!Sqn*,DqJb8@%!B;b3oDpp)j7ER90=\&s00%=0oRZYqoDsaDmIg_[ +L\14oqYU!^!;lHnqM4_8L\goArrE#krrDri!W%TNoE!`1J,~> +!BTuQndkc.rRn3jg"`aZgP!Sqn*,DoJb&4!!B)S0nc:X$j73F50"7in/iLt*nq$Amnc=L?mIUSW +L@Xniq"s^Z!;lBlpkJA1LA:Z +!B9]LmLT?*rRn3jg"`aZgP!Sqn*,DkJaVpn!AuJ.mK#0sj6d.0/[VEf/N(\%mXafemK&"8mI:AS +K^S8]p\XLV!;l9ipOqu&K_PB6rrE#frrDrd!V_9HmK(ouJ,~> +!Bp5Uo+1j^q.'!S]bf~> +!BTrPn.5O[q.'=Kq;_S5;$s8()tXJai=$!JU:8nHJZ@nF2/+qsjI^qsajaL%+Sc +p\XL[!<;Tg!;l9epP&V9!SBG`~> +!B9ZKljs+Wq.'rqsF1Zqs=RZK'_iU +o_\%T!<;Hc!;l-aoRd)/!S',Z~> +!Bp2TnIM9cSg;Z[PNqO4eC2_7]E!NQJar-t!B2\2Zlq:[naX"?D=QmSRIMpd@VIK2n_lPt_JM!T +nO,$*M"*DWrp^W@008X&035j%<%k2602J^[R+d,]JarC&!JU:8nHJZ@naV>-qsaXdqsaXdqsaja +L%4\ep\OFW!;c3dpP&V:!SKVd~> +!BToOmLPs`Sg;Z[PNqO4eC2_7]E!NNJaVpn!B)S0YotqVmd@D6D!pLMR-lR^@:q3,mbTul^hb[N +mQrO#L$giOrpCE:/ii?s/lfQr;_Fo./kr@SQe-fVJaW0u!JL.5mKN9:md>c$qsFFaqsFFaqsFX\ +K^S8]p%n+R!;c*aon<>4!S9A_~> +!B9TIl49O\Sg;Z[PNqO4eC2_7]E!NJJa2Xf!AuJ.Y9>YQlKYT*C?jkAPj0hT?Y1m&lJ" +!Bp/SnGWCrR)/p$U':T##6Y89!.jWjnEo]F2u>9.n/^gX1ukMmj7"]_l.n!Qn=VFeiMS?!n3\kb +nF/@irpUEO0/;rh0@'(VbqD^X0?o(;Jai0u!JU46mfiB +!BTlNm/?tnR)/p$U':T##6Y89!.jKfm-X->2Z#-,llG7O1Z+uchs;sUjk27Gm%,h\h4lTjlp<>Y +m-HV_rp1-G/hlW`0$qqs+4^qs+4^qs+FWK'_iUoD._N +!;Yp]o7Hu.!S'5]~> +!B9QHkPbGiR)/p$U':T##6Y89!.j]!*k8iSD1#&BYgZL.Ji7'>;kF4&Pfq9p_k/MH9X/]Qu:`%=MG/]<5'J`lOc!J'\,jot7)kN@BbqrRkYqrRkYqrS(OJEQ*GnG25F +!;YaXn::N$!RNcU~> +!BouNkl(Pb/K"OJ,l%Fkk^hsbkQ*UqroaAA0E1/FHnV'iHKaQG6g3Yc0B\/h0*?jj6SJH&!B2\2 +kRPH_7-HBZjlkph0/>78idp +!BTZHj8K#]/K"OJ,l%Fkj+67XirM%jro4#;0)jl@GV5F_GN7^960$oV0&hT_/d$[b5q`/s!B)S0 +isrdU6fTmRi8`kU/ho%4h1=U;j7)(0Ic0V;"lOjij*oq`bQ%Y?bQ%Y?bQZpRj5YUHq98d;q9/lt +IfA@.brU@~> +!B99@g\q0U/K"OJ,l%FkgO\,HgAs,_rn@H1/cOK7F=ibRF5,G$5MOjC/_YdR/H^CT5:ulh!AlD- +gCCYD6/+%Eg"Y96/MAb/eUcJ+g[NquH.hT#"ke1UgNhKL^]4B3^]4B3^]iD:gY7#,q7uq/q7m$a +H2cP!`]&D~> +!BouNkl1Vb#V@VJpAfd.J`uLb!B2\2kQ*Uqroap-01.D6kiaZekgqITkaX;Qr9+/K0E1/92_Y0o% +X9XRkXmMKkig#>91CSJJ`q[KnE9n'jmCP$jacRYJE?[X!!)oG!!)oG"m(9uk^_dkeGB7Be,eZ]r +oaC14b*~> +!BTZHj8T)]#V@VJpAfd)J`H.X!B)S0irM%jro4R#/jV,.j5VaXj3oVIj-_NFr8RfD0)jl32D5!h% +WsCLj%(f?j5[s.8OP2AJ`D=AnDaOui9e_li-s_HIc1+I!!)o?!!)o?"lOjij*oq_bkhD:bQ6XNr +o4%(3e.~> +!B99@g]%6U#V@VJpAfd!J_TSH!AlD-gAs,_rnA!j/O(i#gY4;EgWM06gQX:4r7_6:/cOK*1bJ^]% +WO(CgI +!BouNkl1Vc*9u5B"o&(Kk^hsbkQ*UqroaAA0E1/;k=714roanH4N;n)K]q/U1Q8W6XQW#)rob.W +0=Iir01=FUUb>]X\5P&VQ7kY"\":fpk^hsikQ-4qqpbEAqpYf2JEZ3IjnmO-!;k7G!;k7LjacRY +JE?[XrW)uJrW)iF!Tek2kQ0'oJ,~> +!BT]IjSo2_*9u5B"o&(KjFQCZj8h.kro=)<0)jo6j$kY,ro=VC4MlP"J`PEI0oE0+WoQGuro=kR +0!_?h/k"1LTIs0O[8JWMP:f4oZ^]'fjFQCaj8j_fqonj9qof6%IcTR=i;:^u!;jt?!;jtDi-sbJ +Ic1+IrW)uBrW)i>!T8G+j8mOeJ,~> +!B96a>O"EYbXd6hTgk"8Qg];`SqnW"-qnNBgHJI;%g&&Pb!;jP3!;jP8fm;H/ +HJ/22rW)u6rW)i2!SMeug]>DRJ,~> +!Bp#Ol2CYh`gQi;/L:B8*$kL`Ja%aMmHFX10E12:2_Y-o!fAY7rosD8%5r=fl06H-3\WspksI-' +kls("0/,eCf`(+EX&_&7=0(TLSPM$t9uV\JJa)gk!J0A0eG0+Ae-4rbl03c\qpbEAqpYf2Ja)EM +jnmR-!<(FI!;k7HjamEq!Ra,]~> +!BT]IjSf,c`gQi;/L:B8*$kL`J`MCCmGn:+0)jo42D4sh!f&D.roF&2%5i1^jQ+Eq3%mUgj?YEt +j9@Lp/h]V?e,JD;W)PQ0Ll9>Q2?J`QIa!Iiu(bkV89bQZpRjQ(dJqonj9qof6%IcTR= +i;:au!<(.A!;jt@i-t[d!R<`V~> +!B9 +!Bp#Ol2CYh`gZq,[EWpW`6nPaJa%aMiopM`7Ha[7!A?fkl%/*AklH@smF2=$Ja)EMjmCP$jal[\ +J`Z:K!Ten3klK3qJ,~> +!BT]Ijo,5d`gZq,[EWpW`6nPaJ`VIEioL5[7-":.!A6ZhjalO9jT0khmE>alJ*#dAi9e_li.'kM +J)K_ +!B9?Bh>RB\`gZq,[EWpW`6nPaJ_bn5inXZO6ehUr!A-Neh1=D)h#ViUmD/t[HJRD'g?l][g3VT2 +HJ7c&!SVl!h#YPTJ,~> +!Bp#OlM^bi`gQl,3g9Tn"BYR&Ja.gOj6?]S09uM$!A?fkl@J6Cl2cIumF;C&Ja2NOk3^\&k(2g_ +J`c@M!Tnt4l2f?sJ,~> +!BT]Ijo,5d`gQl,3g9Tn"BYR&J`VIEj5g?J/s6+o!A6ZhjalO9jT0kimEGgnJ*#dAiU+kniIBtN +J)Te>!TAP-jT3[gJ,~> +!B9?BhYmK]`gQl,3g9Tn"BYR&J_kt7j5'j>/WK_c!A-QfhLXP+h>quWmD/t[Hf!V+g?l][g3_]5 +HeRl'!SVo"h>t\VJ,~> +!Bp#OlMghk&_t2%fn@#Go66o-!.jEdlJq.2Sqc&!l2dfcJa.gOb3B"Yk3^\&k(2g_J`c@M"m1C$ +l@J*beH+f`rosO54b*~> +!BT`Jk5PDg&_t2%fn@#Go66o-!.j9`k2YS*S:oSojoM9YJ`_OGb2r_SiU+kniIC"PJ)Te>"lXsn +k'u@WblQdQroO7-3e.~> +!B9?BhZ!Q_&_t2%fn@#Go66o-!.j!XhW*GoQ@RB]h>s4EJ_kt7b2*/Gg?l][g3_]5HeRl'"kn=[ +hL!uD_#`8:rn[[s2h1~> +!Bp#OlMghk'5_SV(2[7W6#A@U!.jEdl@J5OlD*VFJ[k+0"h9-Kl@HJ4jor8GlKWr1mH+GZJc=p8 +dli3~> +!BT`Jk5PDg'5_SV(2[7W6#A@U!.j9`k(2ZGk+h&>J$eV%"gidAk'sc*i +!B9BChu +!Bp&PlgXt+l[eAQl[eArlg&`mlg&`mlg&`mlN,KuJ,~> +!BTcKkOAP'kCMfIkCMfjkNd-dkNd-dkNd-dk5ipjJ,~> +!B9BCi:-eui.9g;i.9g\i9P1Wi9P1Wi9P1WhuUtZJ,~> +!Bp%*l[eAQl[eAQlbD`de3/<~> +!BTb%kCMfIkCMfIkJ-0\coQ[~> +!B9@ri.9g;i.9g;i4n1Nau=h~> +!Boe#i.9g;i.9g;i4e+L4b*~> +!BTIrg4@t/g4@t/g:l8@3e.~> +!B9%id"0Ppd"0Ppd([j,2h1~> +!'PmaJUrB'JUrB']n$/HJ,~> +!'5[SJTcTfJTcTf]ljB:J,~> +!&oIAJS0OHJS0OH]k7=(J,~> +!BpJ^m5t=JrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&c!S0Da~> +!BU8[kr\nFrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&_!R<`V~> +!B:&Xj#d8@rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&Y!Q-jH~> +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rp9a;4b*~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rojI/3e.~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!ro4$s2h1~> +!BpJ^mDo8,!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)um/bd$J,~> +!BU8[l,Wi(!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uklK'jJ,~> +!B:&Xj2_3"!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uirR%VJ,~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls02P%!9F1Y +!.k0PrriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!!*&um/bd$J,~> +!BU8[kl:__rrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls02P%!9F1Y +!.k0PrriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!!*&uklK'jJ,~> +!B:&XirB)YrrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls02P%!9F1Y +!.k0PrriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!!*&uirR%VJ,~> +!BpJ^m0 +!BU8[km%.frrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcE^h +r;Zlu!:^!g!9*qX!.k0Qrr<&urrW9$!<<#u!ri9#rW";F!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<<#urVneVrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE)u!<23`c8pI~> +!B:&Xis,M`rrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcE^h +r;Zlu!:^!g!9*qX!.k0Qrr<&urrW9$!<<#u!ri9#rW";F!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<<#urVneVrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE)u!<2!Z_`*)~> +!BpJ^m/R.crrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0i +s8N)ts8N)grr<&Xrr<%Ms/l;)!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0i +s8N)ts8N)grr<&Xrr<%Ms/l;)!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0i +s8N)ts8N)grr<&Xrr<%Ms/l;)!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcEdj!!)or!!)Ng!!)!X!!%TMY5\J%rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p8!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<;lq(B4C7 +!<3'!!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcEdj!!)or!!)Ng!!)!X!!%TMY5\J%rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p8!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<;lq(B4C7 +!<3'!!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0j +rr<&ls8;rmrr<&ps8;ourrE&urrE#trrDoq!!)orrrE#trrDusr;Zlu!.k0irriE&!<3'!qu?`s +quA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#us8N'!rr3]5rrE'!rrE'! +rrE'!rrE'!rrE'!s7cR.rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0j +rr<&ls8;rmrr<&ps8;ourrE&urrE#trrDoq!!)orrrE#trrDusr;Zlu!.k0irriE&!<3'!qu?`s +quA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#us8N'!rr3]5rrE'!rrE'! +rrE'!rrE'!rrE'!s7cR.rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0j +rr<&ls8;rmrr<&ps8;ourrE&urrE#trrDoq!!)orrrE#trrDusr;Zlu!.k0irriE&!<3'!qu?`s +quA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#us8N'!rr3]5rrE'!rrE'! +rrE'!rrE'!rrE'!s7cR.rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[km%.frrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcEgk!!)`m!!)ut!!)ip!!)lq!!)utrrE#t!!)rs!!)lq!!)lq!!)rs!!)ut!!)utrr@WM +a8Z,>rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcEgk!!)`m!!)ut!!)ip!!)lq!!)utrrE#t!!)rs!!)lq!!)lq!!)rs!!)ut!!)utrr@WM +a8Z,>rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls2Y->!:g'h!;ZWp!;lcr!;lcr +!<)ot!;uis!;c]q!;c]q!;uis!<)ot!;uis!.k0irriE&!<3'!qu?`squ?fu!<;lq!ri9#rVuru +rVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'! +rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls2Y->!:g'h!;ZWp!;lcr!;lcr +!<)ot!;uis!;c]q!;c]q!;uis!<)ot!;uis!.k0irriE&!<3'!qu?`squ?fu!<;lq!ri9#rVuru +rVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'! +rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls2Y->!:g'h!;ZWp!;lcr!;lcr +!<)ot!;uis!;c]q!;c]q!;uis!<)ot!;uis!.k0irriE&!<3'!qu?`squ?fu!<;lq!ri9#rVuru +rVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'! +rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcEgk!!)`mqZ-Hl!!)or!!)`m!!)rs!!)lq +!!)lq!!)rs!!)rsrW%NL`;]f;rr3'#rrE)o!!<0#s7cQos7?9ks7cQqrrE)u!<)p0!<3'!!<3'! +!<3'!!<3'!!<; +!B:&Xis,M`rrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcEgk!!)`mqZ-Hl!!)or!!)`m!!)rs!!)lq +!!)lq!!)rs!!)rsrW%NL`;]f;rr3'#rrE)o!!<0#s7cQos7?9ks7cQqrrE)u!<)p0!<3'!!<3'! +!<3'!!<3'!!<; +!BpJ^m/R.crrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +!!;HKn!;uis!;ZWp!;lcr +!;?Em!;uis!;c]q!;c]q!;uis!;ZZp!.k0hrriE&!<3'!p&G*mqu?`srW!$"!<<#u!<<#u!<<#u +!<;rs!<;rs!ri9#rW)uu!!*#u%06D.rrE'!rrE'!rrE)_!"Al-rrE'!rrE'!rrE)u!!*&um/bd$ +J,~> +!BU8[kl:__rrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +!!;HKn!;uis!;ZWp!;lcr +!;?Em!;uis!;c]q!;c]q!;uis!;ZZp!.k0hrriE&!<3'!p&G*mqu?`srW!$"!<<#u!<<#u!<<#u +!<;rs!<;rs!ri9#rW)uu!!*#u%06D.rrE'!rrE'!rrE)_!"Al-rrE'!rrE'!rrE)u!!*&uklK'j +J,~> +!B:&XirB)YrrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +!!;HKn!;uis!;ZWp!;lcr +!;?Em!;uis!;c]q!;c]q!;uis!;ZZp!.k0hrriE&!<3'!p&G*mqu?`srW!$"!<<#u!<<#u!<<#u +!<;rs!<;rs!ri9#rW)uu!!*#u%06D.rrE'!rrE'!rrE)_!"Al-rrE'!rrE'!rrE)u!!*&uirR%V +J,~> +!BpJ^m0 +qu6`us8N)srr<&prr<&rrr<&mrr<&srr<&qrr<&qrr<&srr<&trr<&srr<%Ms2Y->!<3!#!<3'! +rW!$"!<<#u!<;rs!ri9#rVurun,NOi!<<#u!ri9#rW)os'`e76rrE'!rrE'!rrE'!rrE'!rrE)i +!##;3rrE'!rrE'!rrE'!rrE'!s8E#tm/bd$J,~> +!BU8[km%.frrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLa8Z,> +qu6`us8N)srr<&prr<&rrr<&mrr<&srr<&qrr<&qrr<&srr<&trr<&srr<%Ms2Y->!<3!#!<3'! +rW!$"!<<#u!<;rs!ri9#rVurun,NOi!<<#u!ri9#rW)os'`e76rrE'!rrE'!rrE'!rrE'!rrE)i +!##;3rrE'!rrE'!rrE'!rrE'!s8E#tklK'jJ,~> +!B:&Xis,M`rrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLa8Z,> +qu6`us8N)srr<&prr<&rrr<&mrr<&srr<&qrr<&qrr<&srr<&trr<&srr<%Ms2Y->!<3!#!<3'! +rW!$"!<<#u!<;rs!ri9#rVurun,NOi!<<#u!ri9#rW)os'`e76rrE'!rrE'!rrE'!rrE'!rrE)i +!##;3rrE'!rrE'!rrE'!rrE'!s8E#tirR%VJ,~> +!BpJ^m/R.crrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NL`W,l:r;Z]q +!<<#urr;fpr;Z]qqZ$Ko!ri6#rr;fpr;Z]q!ri6#rr3!!s8;qKs2P'=!<3!#!<3'!rW!$"!<<#u +!<;rs!ri9#rVurul2Unc!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'! +rrE'!rrE)u!<23`c8pI~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NL`W,l:r;Z]q +!<<#urr;fpr;Z]qqZ$Ko!ri6#rr;fpr;Z]q!ri6#rr3!!s8;qKs2P'=!<3!#!<3'!rW!$"!<<#u +!<;rs!ri9#rVurul2Unc!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'! +rrE'!rrE)u!<2!Z_`*)~> +!BpJ^m/R.crrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLJcC<$ +\c2X0rr3'#rrE)u!!<0#s8Duus82iurrE)u!!*&g!!rT)rrE'!rrE)u!<)p4!<3'!!<3'!!<3'! +!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLJcC<$ +\c2X0rr3'#rrE)u!!<0#s8Duus82iurrE)u!!*&g!!rT)rrE'!rrE)u!<)p4!<3'!!<3'!!<3'! +!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLJcC<$\c2X0rr3'#rrE)u!!<0# +s8E!"rrE)o!!*&k!!*&o!!<0#s8E#ss#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLJcC<$\c2X0rr3'#rrE)u!!<0# +s8E!"rrE)o!!*&k!!*&o!!<0#s8E#ss#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BU8[kl:__rrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!B:&XirB)YrrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/[4ea8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8MBdeieN~> +!BU8[klCeaa8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M6`c8pI~> +!B:&XirK/[a8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M$Z_`*)~> +!BpJ^m/[1+!<<) +!BU8[klCb'!<<) +!B:&XirK,!!<<) +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8MBdeieN~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M6`c8pI~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mG\*F!5&:0!;6Bl!7LoG!:^$g!6>->!.k0$s+13ds8MBdeieN~> +!BU8[l/D[B!5&:0!;6Bl!7LoG!:^$g!6>->!.k0$s+13ds8M6`c8pI~> +!B:&Xj5L%->!.k0$s+13ds8M$Z_`*)~> +!BpJ^mHsrP!<3#s!<<'!!:'Ra!7:`G!;-9k!71ZF!;HKn!;c]q!9O4\!9=(Z!:g*e!.k0$s+14$ +s8MBdeieN~> +!BU8[l0\NL!<3#s!<<'!!:'Ra!7:`G!;-9k!71ZF!;HKn!;c]q!9O4\!9=(Z!:g*e!.k0$s+14$ +s8M6`c8pI~> +!B:&Xj6cmF!<3#s!<<'!!:'Ra!7:`G!;-9k!71ZF!;HKn!;c]q!9O4\!9=(Z!:g*e!.k0$s+14$ +s8M$Z_`*)~> +!BpJ^mHjiQ!;c]q!<2uu!:'Ra!7:`G!;-9k!71ZF!;HKn!;c]q!9O4\!9=(Z!:p-i!<)rt!.k0$ +s+14%s8MBdeieN~> +!BU8[l0SEM!;c]q!<2uu!:'Ra!7:`G!;-9k!71ZF!;HKn!;c]q!9O4\!9=(Z!:p-i!<)rt!.k0$ +s+14%s8M6`c8pI~> +!B:&Xj6ZdG!;c]q!<2uu!:'Ra!7:`G!;-9k!71ZF!;HKn!;c]q!9O4\!9=(Z!:p-i!<)rt!.k0$ +s+14%s8M$Z_`*)~> +!BpJ^mHjiQ!<2uu!<2uu!<2uu!:'Ra!7:`G!;-9k!71ZF!:Tpf!9O4\!9=(Z!:p-i!;uis!.k0$ +s+14%s8MBdeieN~> +!BU8[l0SEM!<2uu!<2uu!<2uu!:'Ra!7:`G!;-9k!71ZF!:Tpf!9O4\!9=(Z!:p-i!;uis!.k0$ +s+14%s8M6`c8pI~> +!B:&Xj6ZdG!<2uu!<2uu!<2uu!:'Ra!7:`G!;-9k!71ZF!:Tpf!9O4\!9=(Z!:p-i!;uis!.k0$ +s+14%s8M$Z_`*)~> +!BpJ^mHjiQ!<2uu!<2uu!<3!!!<;utqu?Tpqu?Kmq>^Eorr;rtrVufrr;ZcsrVultqYpNqq>^Bn +!WN/qs8E#ts8E#ss8;rqs8N)ts8N)lrr<&ps8E#prrN3#s8;rqs8;rks7u`ns8;rjs8;ourrDus +r;cNj!!%TMJcC<$fDkj;!S0Da~> +!BU8[l0SEM!<2uu!<2uu!<3!!!<;utqu?Tpqu?Kmq>^Eorr;rtrVufrr;ZcsrVultqYpNqq>^Bn +!WN/qs8E#ts8E#ss8;rqs8N)ts8N)lrr<&ps8E#prrN3#s8;rqs8;rks7u`ns8;rjs8;ourrDus +r;cNj!!%TMJcC<$fDkj7!R<`V~> +!B:&Xj6ZdG!<2uu!<2uu!<3!!!<;utqu?Tpqu?Kmq>^Eorr;rtrVufrr;ZcsrVultqYpNqq>^Bn +!WN/qs8E#ts8E#ss8;rqs8N)ts8N)lrr<&ps8E#prrN3#s8;rqs8;rks7u`ns8;rjs8;ourrDus +r;cNj!!%TMJcC<$fDkj1!Q-jH~> +!BpJ^mHjiQ!<2uu!<2uu!<3#u!<)ot!<)ot!<)ot!;c]q!;-9k!;uis!<)ot!<)ot!;uis!;uis +!;c]q!;c]q!<)rt!;QQo!;uis!<)ot!<)ot!;uis!;uis!;6?l!;HKn!;c]q!<2uu!;lcr!<)ot +!;6?l!;ZWp!<)ot!;HKn!<)rt!<)ot!<)ot!;HKn!.k0$s+14$s8MBdeieN~> +!BU8[l0SEM!<2uu!<2uu!<3#u!<)ot!<)ot!<)ot!;c]q!;-9k!;uis!<)ot!<)ot!;uis!;uis +!;c]q!;c]q!<)rt!;QQo!;uis!<)ot!<)ot!;uis!;uis!;6?l!;HKn!;c]q!<2uu!;lcr!<)ot +!;6?l!;ZWp!<)ot!;HKn!<)rt!<)ot!<)ot!;HKn!.k0$s+14$s8M6`c8pI~> +!B:&Xj6ZdG!<2uu!<2uu!<3#u!<)ot!<)ot!<)ot!;c]q!;-9k!;uis!<)ot!<)ot!;uis!;uis +!;c]q!;c]q!<)rt!;QQo!;uis!<)ot!<)ot!;uis!;uis!;6?l!;HKn!;c]q!<2uu!;lcr!<)ot +!;6?l!;ZWp!<)ot!;HKn!<)rt!<)ot!<)ot!;HKn!.k0$s+14$s8M$Z_`*)~> +!BpJ^mHacV!<3'!!<3&trr<&srr<&orr<&qrr<&krrrK'rrE*!!<2uu!;lcr!<)ot!;uis!;c]q +!;lcr!;lcr!;QQo!;uis!<2uu!;lcr!<)ot!;uis!;6?l!;HKn!;c]t!<<'!qu6Wrqu6WrpAY*m +qYpNqqu6Wrq>UEpqu6Wrrr2ruqu6Wrq>UEpJcC<$JcF:#rp9a;4b*~> +!BU8[l0J?R!<3'!!<3&trr<&srr<&orr<&qrr<&krrrK'rrE*!!<2uu!;lcr!<)ot!;uis!;c]q +!;lcr!;lcr!;QQo!;uis!<2uu!;lcr!<)ot!;uis!;6?l!;HKn!;c]t!<<'!qu6Wrqu6WrpAY*m +qYpNqqu6Wrq>UEpqu6Wrrr2ruqu6Wrq>UEpJcC<$JcF:#rojI/3e.~> +!B:&Xj6Q^L!<3'!!<3&trr<&srr<&orr<&qrr<&krrrK'rrE*!!<2uu!;lcr!<)ot!;uis!;c]q +!;lcr!;lcr!;QQo!;uis!<2uu!;lcr!<)ot!;uis!;6?l!;HKn!;c]t!<<'!qu6Wrqu6WrpAY*m +qYpNqqu6Wrq>UEpqu6Wrrr2ruqu6Wrq>UEpJcC<$JcF:#ro4$s2h1~> +!BpJ^mHacV!<3'!!<3&trr<&srr<&ts8)fmrr<&krrrK'rrE*!!<2uu!;lcr!<)ot!;uis!;c]q +!;lcr!;lcr!;HKn!<2uu!<)ot!;lcr!<)ot!;uis!;6?l!;HKn!;c`p!;c`k!;?Em!;c]q!;lcr +!;ZWp!;lcr!<2uu!;lcr!;lfr!.k0$s+14"s8MBdeieN~> +!BU8[l0J?R!<3'!!<3&trr<&srr<&ts8)fmrr<&krrrK'rrE*!!<2uu!;lcr!<)ot!;uis!;c]q +!;lcr!;lcr!;HKn!<2uu!<)ot!;lcr!<)ot!;uis!;6?l!;HKn!;c`p!;c`k!;?Em!;c]q!;lcr +!;ZWp!;lcr!<2uu!;lcr!;lfr!.k0$s+14"s8M6`c8pI~> +!B:&Xj6Q^L!<3'!!<3&trr<&srr<&ts8)fmrr<&krrrK'rrE*!!<2uu!;lcr!<)ot!;uis!;c]q +!;lcr!;lcr!;HKn!<2uu!<)ot!;lcr!<)ot!;uis!;6?l!;HKn!;c`p!;c`k!;?Em!;c]q!;lcr +!;ZWp!;lcr!<2uu!;lcr!;lfr!.k0$s+14"s8M$Z_`*)~> +!BpJ^mHacV!<3'!!<3&trr<&srr<&urr<&srr<&qrr<&krrrK'!<3'!!<2uu!;lcr!<)ot!;uis +!;c]q!;lcr!;lcr!;HKn!<2uu!<)ot!;lcr!<)ot!;uis!;6?l!;HKn!;c]t!<<'!qu6Wrn,E@f +qYpNqqu6Wrq>UEpqu6Wrrr2ruqu6Wrqu6WrJcC<$JcF4!rp9a;4b*~> +!BU8[l0J?R!<3'!!<3&trr<&srr<&urr<&srr<&qrr<&krrrK'!<3'!!<2uu!;lcr!<)ot!;uis +!;c]q!;lcr!;lcr!;HKn!<2uu!<)ot!;lcr!<)ot!;uis!;6?l!;HKn!;c]t!<<'!qu6Wrn,E@f +qYpNqqu6Wrq>UEpqu6Wrrr2ruqu6Wrqu6WrJcC<$JcF4!rojI/3e.~> +!B:&Xj6Q^L!<3'!!<3&trr<&srr<&urr<&srr<&qrr<&krrrK'!<3'!!<2uu!;lcr!<)ot!;uis +!;c]q!;lcr!;lcr!;HKn!<2uu!<)ot!;lcr!<)ot!;uis!;6?l!;HKn!;c]t!<<'!qu6Wrn,E@f +qYpNqqu6Wrq>UEpqu6Wrrr2ruqu6Wrqu6WrJcC<$JcF4!ro4$s2h1~> +!BpJ^mHacV!<3'!!<3&trr<&srr<&urr<&srr<&qrr<&krrrK'!<3'!!<2uu!;lcr!<)ot!;uis +!;c]q!;lcr!;lcr!;?Eo!<3&srr<&rrr<&trr<&srr<&lrr<&nrr<&qrr<&urr<&srr<&frr<&q +rr<&rrr<&prr<&rrr<&urr<&rrr<%Ms+13$s31NBm/bd$J,~> +!BU8[l0J?R!<3'!!<3&trr<&srr<&urr<&srr<&qrr<&krrrK'!<3'!!<2uu!;lcr!<)ot!;uis +!;c]q!;lcr!;lcr!;?Eo!<3&srr<&rrr<&trr<&srr<&lrr<&nrr<&qrr<&urr<&srr<&frr<&q +rr<&rrr<&prr<&rrr<&urr<&rrr<%Ms+13$s31NBklK'jJ,~> +!B:&Xj6Q^L!<3'!!<3&trr<&srr<&urr<&srr<&qrr<&krrrK'!<3'!!<2uu!;lcr!<)ot!;uis +!;c]q!;lcr!;lcr!;?Eo!<3&srr<&rrr<&trr<&srr<&lrr<&nrr<&qrr<&urr<&srr<&frr<&q +rr<&rrr<&prr<&rrr<&urr<&rrr<%Ms+13$s31NBirR%VJ,~> +!BpJ^mHX]O!<2uu!;uis!;uis!<2uu!<)rt!;c]q!<)ot!;QQo!<2uu!;uis!<)ot!;uis!<)rt +!;c]q!;c]q!<)rt!;?Eo!<3&rrr<&trr<&srr<&ts8N)lrr<&nrr<&qrr<&trr<&srr<&ts8N)m +rr<&trr<&urr<&trr<&nrr<&ts8N)trr<&trr<&qs8N(Ms+13$s4%)Jm/bd$J,~> +!BU8[l0A9K!<2uu!;uis!;uis!<2uu!<)rt!;c]q!<)ot!;QQo!<2uu!;uis!<)ot!;uis!<)rt +!;c]q!;c]q!<)rt!;?Eo!<3&rrr<&trr<&srr<&ts8N)lrr<&nrr<&qrr<&trr<&srr<&ts8N)m +rr<&trr<&urr<&trr<&nrr<&ts8N)trr<&trr<&qs8N(Ms+13$s4%)JklK'jJ,~> +!B:&Xj6HXE!<2uu!;uis!;uis!<2uu!<)rt!;c]q!<)ot!;QQo!<2uu!;uis!<)ot!;uis!<)rt +!;c]q!;c]q!<)rt!;?Eo!<3&rrr<&trr<&srr<&ts8N)lrr<&nrr<&qrr<&trr<&srr<&ts8N)m +rr<&trr<&urr<&trr<&nrr<&ts8N)trr<&trr<&qs8N(Ms+13$s4%)JirR%VJ,~> +!BpJ^mHX]O!<2uu!<)rs!<3#t!<3#s!!*&u!;lfp!;HKn!<2uu!;lfp!;c`o!!<0#!<3#p!;ulq +!!<0#!;?Em!;ZZn!;c`o!!<0#!;ZZk!<)ro!<3#u!<3#s!<)rr!;$6h!;ulq!;6Bj!!<0#!<)rr +!;ZZp!.k0$s+14"s8MBdeieN~> +!BU8[l0A9K!<2uu!<)rs!<3#t!<3#s!!*&u!;lfp!;HKn!<2uu!;lfp!;c`o!!<0#!<3#p!;ulq +!!<0#!;?Em!;ZZn!;c`o!!<0#!;ZZk!<)ro!<3#u!<3#s!<)rr!;$6h!;ulq!;6Bj!!<0#!<)rr +!;ZZp!.k0$s+14"s8M6`c8pI~> +!B:&Xj6HXE!<2uu!<)rs!<3#t!<3#s!!*&u!;lfp!;HKn!<2uu!;lfp!;c`o!!<0#!<3#p!;ulq +!!<0#!;?Em!;ZZn!;c`o!!<0#!;ZZk!<)ro!<3#u!<3#s!<)rr!;$6h!;ulq!;6Bj!!<0#!<)rr +!;ZZp!.k0$s+14"s8M$Z_`*)~> +!BpJ^m=G<7rr<%Ms+13$s+13os8MBdeieN~> +!BU8[l%/m3rr<%Ms+13$s+13os8M6`c8pI~> +!B:&Xj+77-rr<%Ms+13$s+13os8M$Z_`*)~> +!BpJ^m=G<8rr<%Ms+13$s+13ns8MBdeieN~> +!BU8[l%/m4rr<%Ms+13$s+13ns8M6`c8pI~> +!B:&Xj+77.rr<%Ms+13$s+13ns8M$Z_`*)~> +!BpJ^m=G<8rr<%Ms+13$s+13ns8MBdeieN~> +!BU8[l%/m4rr<%Ms+13$s+13ns8M6`c8pI~> +!B:&Xj+77.rr<%Ms+13$s+13ns8M$Z_`*)~> +!BpJ^m=G<;s82kJs+13$s+13os8MBdeieN~> +!BU8[l%/m7s82kJs+13$s+13os8M6`c8pI~> +!B:&Xj+771s82kJs+13$s+13os8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mEYb3!;QTk!;ulo!7LoI!;?Hm!:Tsf!.k0$s+13$s5s@\m/bd$J,~> +!BU8[l-B>/!;QTk!;ulo!7LoI!;?Hm!:Tsf!.k0$s+13$s5s@\klK'jJ,~> +!B:&Xj3I])!;QTk!;ulo!7LoI!;?Hm!:Tsf!.k0$s+13$s5s@\irR%VJ,~> +!BpJ^mG7g=!;ZZp!;ZZk!<)ro!7LoI!;?Hm!:Tsf!.k0$s+13$s5s@\m/bd$J,~> +!BU8[l.uC9!;ZZp!;ZZk!<)ro!7LoI!;?Hm!:Tsf!.k0$s+13$s5s@\klK'jJ,~> +!B:&Xj5'b3!;ZZp!;ZZk!<)ro!7LoI!;?Hm!:Tsf!.k0$s+13$s5s@\irR%VJ,~> +!BpJ^mHsrH!<)rm!:g*h!;QTo!6tQD!94%Y!.k0$s+13$s5s@\m/bd$J,~> +!BU8[l0\ND!<)rm!:g*h!;QTo!6tQD!94%Y!.k0$s+13$s5s@\klK'jJ,~> +!B:&Xj6cm>!<)rm!:g*h!;QTo!6tQD!94%Y!.k0$s+13$s5s@\irR%VJ,~> +!BpJ^mHsrH!;uls!<)rt!<3#r!;lfl!<3#o!;ulq!<)rr!<<)u!;ulq!<)rs!!*&t!<3#o!<)rq +!;c`m!<3#o!;lfp!.k0$s+13$s7H?jm/bd$J,~> +!BU8[l0\ND!;uls!<)rt!<3#r!;lfl!<3#o!;ulq!<)rr!<<)u!;ulq!<)rs!!*&t!<3#o!<)rq +!;c`m!<3#o!;lfp!.k0$s+13$s7H?jklK'jJ,~> +!B:&Xj6cm>!;uls!<)rt!<3#r!;lfl!<3#o!;ulq!<)rr!<<)u!;ulq!<)rs!!*&t!<3#o!<)rq +!;c`m!<3#o!;lfp!.k0$s+13$s7H?jirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s82los7lZos7lZos7lZps7ZNns7lZps7cTos7lZn +s82los7lZps7lZns7lYGs+13$s+14Ds8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s82los7lZos7lZos7lZps7ZNns7lZps7cTos7lZn +s82los7lZps7lZns7lYGs+13$s+14Ds8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s82los7lZos7lZos7lZps7ZNns7lZps7cTos7lZn +s82los7lZps7lZns7lYGs+13$s+14Ds8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N)ss8N)ps8N)os8N)rs8E#ss8E#ts8;rts8N'!s8E#s +s8E#us8E#ts8N)ts8N)ms8N)rs8N)ts8N)ts8N)qs8E#ss8E"Ls+13$s+14Es8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N)ss8N)ps8N)os8N)rs8E#ss8E#ts8;rts8N'!s8E#s +s8E#us8E#ts8N)ts8N)ms8N)rs8N)ts8N)ts8N)qs8E#ss8E"Ls+13$s+14Es8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N)ss8N)ps8N)os8N)rs8E#ss8E#ts8;rts8N'!s8E#s +s8E#us8E#ts8N)ts8N)ms8N)rs8N)ts8N)ts8N)qs8E#ss8E"Ls+13$s+14Es8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ps8N)os8N)rs8N)rs8N)us8E#qs8N)rs8N*! +s8N)ts8N)ts8N)ms8N)ls8N)ts8N)qs8N)rs8N(Ms+13$s+14Es8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ps8N)os8N)rs8N)rs8N)us8E#qs8N)rs8N*! +s8N)ts8N)ts8N)ms8N)ls8N)ts8N)qs8N)rs8N(Ms+13$s+14Es8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ps8N)os8N)rs8N)rs8N)us8E#qs8N)rs8N*! +s8N)ts8N)ts8N)ms8N)ls8N)ts8N)qs8N)rs8N(Ms+13$s+14Es8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)rs7lZns8N)qs7ZMEs+13$s+14Es8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)rs7lZns8N)qs7ZMEs+13$s+14Es8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)rs7lZns8N)qs7ZMEs+13$s+14Es8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)ss7cTms8N)qs7ZMEs+13$s+14Es8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)ss7cTms8N)qs7ZMEs+13$s+14Es8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)ss7cTms8N)qs7ZMEs+13$s+14Es8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8N)rs8N)ps8N)os8N)rs8E#ms8N)qs8E#ns8N)ts8N)t +s8N)ts8N)ss8N)ss8N)ss8N)ts8N)ts8N'!s8E"Ls+13$s+14>s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8N)rs8N)ps8N)os8N)rs8E#ms8N)qs8E#ns8N)ts8N)t +s8N)ts8N)ss8N)ss8N)ss8N)ts8N)ts8N'!s8E"Ls+13$s+14>s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8N)rs8N)ps8N)os8N)rs8E#ms8N)qs8E#ns8N)ts8N)t +s8N)ts8N)ss8N)ss8N)ss8N)ts8N)ts8N'!s8E"Ls+13$s+14>s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7cTns7lZos7lZos7lZos7lZps7lZns7lZps8;rts8;rss7lZp +s7lZps7ZNms7lZps7lYGs+13$s+14Ds8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7cTns7lZos7lZos7lZos7lZps7lZns7lZps8;rts8;rss7lZp +s7lZps7ZNms7lZps7lYGs+13$s+14Ds8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7cTns7lZos7lZos7lZos7lZps7lZns7lZps8;rts8;rss7lZp +s7lZps7ZNms7lZps7lYGs+13$s+14Ds8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7u`ns7lZos7lZos7lZms8)frs7lZls8)frs8;rts8;rrs82lq +s7lZos82iss8E#ss82los8)eIs+13$s+14Ds8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts7u`ns7lZos7lZos7lZms8)frs7lZls8)frs8;rts8;rrs82lq +s7lZos82iss8E#ss82los8)eIs+13$s+14Ds8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts7u`ns7lZos7lZos7lZms8)frs7lZls8)frs8;rts8;rrs82lq +s7lZos82iss8E#ss82los8)eIs+13$s+14Ds8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m>M#D!:^$c!;uls!:Bgd!;c`q!7LoI!6tQA!.k0$s+143s8MBdeieN~> +!BU8[l&5T@!:^$c!;uls!:Bgd!;c`q!7LoI!6tQA!.k0$s+143s8M6`c8pI~> +!B:&Xj, +!BpJ^mG7g=!7CiB!:Kmd!:g*c!;uls!:Bgd!;c`q!9sOZ!:p0i!6tQA!.k0$s+143s8MBdeieN~> +!BU8[l.uC9!7CiB!:Kmd!:g*c!;uls!:Bgd!;c`q!9sOZ!:p0i!6tQA!.k0$s+143s8M6`c8pI~> +!B:&Xj5'b3!7CiB!:Kmd!:g*c!;uls!:Bgd!;c`q!9sOZ!:p0i!6tQA!.k0$s+143s8M$Z_`*)~> +!BpJ^mHsrH!<)rm!7UuD!:Bgd!:g*h!8.>O!9sOZ!:p0i!6Y?A!.k0$s+143s8MBdeieN~> +!BU8[l0\ND!<)rm!7UuD!:Bgd!:g*h!8.>O!9sOZ!:p0i!6Y?A!.k0$s+143s8M6`c8pI~> +!B:&Xj6cm>!<)rm!7UuD!:Bgd!:g*h!8.>O!9sOZ!:p0i!6Y?A!.k0$s+143s8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rt!;ulq!;?Hi!<3#t!!*&t!;6Bl!;ulr!!*&t!;ulq!!<0#!;ulq!;ulm +!<3#r!;ulr!!*&t!<)rq!;ulm!;lfp!;- +!BU8[l0\ND!;uls!<)rt!;ulq!;?Hi!<3#t!!*&t!;6Bl!;ulr!!*&t!;ulq!!<0#!;ulq!;ulm +!<3#r!;ulr!!*&t!<)rq!;ulm!;lfp!;- +!B:&Xj6cm>!;uls!<)rt!;ulq!;?Hi!<3#t!!*&t!;6Bl!;ulr!!*&t!;ulq!!<0#!;ulq!;ulm +!<3#r!;ulr!!*&t!<)rq!;ulm!;lfp!;- +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZjs7lZps7cTfs8N)ss7cTns7lZos7lZos7lZo +s82lps7cTns82lps7lZns7lZgs8N)ss7cTos7lZns7lZos7cQos7ZNns7lZls8N(Ms+13$s5j:[ +m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZjs7lZps7cTfs8N)ss7cTns7lZos7lZos7lZo +s82lps7cTns82lps7lZns7lZgs8N)ss7cTos7lZns7lZos7cQos7ZNns7lZls8N(Ms+13$s5j:[ +klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZjs7lZps7cTfs8N)ss7cTns7lZos7lZos7lZo +s82lps7cTns82lps7lZns7lZgs8N)ss7cTos7lZns7lZos7cQos7ZNns7lZls8N(Ms+13$s5j:[ +irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ps8N)ts8N)us8E#ts8N)ms8N)rs8E#t +s8N*!s8E#ts8E#us8E#ss8E#ss8N)ns8N)rs8E#ts8N)rs8N)qs8N)qs8E#ss8E#ms8N)rs8E#t +s8N)ts8N)qs8E#ss8Duus8E#ts8E#ss8;rts8N*!s8N)ts8N)rs8N(Ms+13$s5j:[m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ps8N)ts8N)us8E#ts8N)ms8N)rs8E#t +s8N*!s8E#ts8E#us8E#ss8E#ss8N)ns8N)rs8E#ts8N)rs8N)qs8N)qs8E#ss8E#ms8N)rs8E#t +s8N)ts8N)qs8E#ss8Duus8E#ts8E#ss8;rts8N*!s8N)ts8N)rs8N(Ms+13$s5j:[klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ps8N)ts8N)us8E#ts8N)ms8N)rs8E#t +s8N*!s8E#ts8E#us8E#ss8E#ss8N)ns8N)rs8E#ts8N)rs8N)qs8N)qs8E#ss8E#ms8N)rs8E#t +s8N)ts8N)qs8E#ss8Duus8E#ts8E#ss8;rts8N*!s8N)ts8N)rs8N(Ms+13$s5j:[irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ks8N)us8N)ts8N)ms8N)rs8N)ts8N*! +s8N)ss8N*!s8N)rs8N)ts8N)ns8N)rs8N)ts8N)rs8N)qs8N)qs8N)rs8N)ns8N)rs8N)ts8N)t +s8N)qs8N)rs8N'#rr<&ss8N)ts8E#js8N)rs8N(Ms+13$s5j:[m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ks8N)us8N)ts8N)ms8N)rs8N)ts8N*! +s8N)ss8N*!s8N)rs8N)ts8N)ns8N)rs8N)ts8N)rs8N)qs8N)qs8N)rs8N)ns8N)rs8N)ts8N)t +s8N)qs8N)rs8N'#rr<&ss8N)ts8E#js8N)rs8N(Ms+13$s5j:[klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ks8N)us8N)ts8N)ms8N)rs8N)ts8N*! +s8N)ss8N*!s8N)rs8N)ts8N)ns8N)rs8N)ts8N)rs8N)qs8N)qs8N)rs8N)ns8N)rs8N)ts8N)t +s8N)qs8N)rs8N'#rr<&ss8N)ts8E#js8N)rs8N(Ms+13$s5j:[irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'#rr<&rs8N)qs7lZos8N)ts8N)ms8N)rs8N)ts8N*! +s8N)ss8N*!s7ZNls8N)ns8N)rs8N)ts8N)rs8N)qs8N)qs7ZNfs8N)rs8N)ts8N)ts8N)qs7ZKp +rr<&ss8N)ts8N)ps7lZls8N(Ms+13$s5j:[m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'#rr<&rs8N)qs7lZos8N)ts8N)ms8N)rs8N)ts8N*! +s8N)ss8N*!s7ZNls8N)ns8N)rs8N)ts8N)rs8N)qs8N)qs7ZNfs8N)rs8N)ts8N)ts8N)qs7ZKp +rr<&ss8N)ts8N)ps7lZls8N(Ms+13$s5j:[klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'#rr<&rs8N)qs7lZos8N)ts8N)ms8N)rs8N)ts8N*! +s8N)ss8N*!s7ZNls8N)ns8N)rs8N)ts8N)rs8N)qs8N)qs7ZNfs8N)rs8N)ts8N)ts8N)qs7ZKp +rr<&ss8N)ts8N)ps7lZls8N(Ms+13$s5j:[irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)rs7cTns8N)ts8N)ms8N)rs8N)ts8N*! +s8N)ss8N*!s7ZNls8N)ns8N)rs8N)ts8N)rs8N)qs8N)qs7ZNfs8N)rs8N)ts8N)ts8N)qs7ZKp +rr<&ss8N)ts8N)qs7cTks8N(Ms+13$s5j:[m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)rs7cTns8N)ts8N)ms8N)rs8N)ts8N*! +s8N)ss8N*!s7ZNls8N)ns8N)rs8N)ts8N)rs8N)qs8N)qs7ZNfs8N)rs8N)ts8N)ts8N)qs7ZKp +rr<&ss8N)ts8N)qs7cTks8N(Ms+13$s5j:[klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)rs7cTns8N)ts8N)ms8N)rs8N)ts8N*! +s8N)ss8N*!s7ZNls8N)ns8N)rs8N)ts8N)rs8N)qs8N)qs7ZNfs8N)rs8N)ts8N)ts8N)qs7ZKp +rr<&ss8N)ts8N)qs7cTks8N(Ms+13$s5j:[irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ss8E#qs8N)ss8N)us8N)ts8N)ms8N)rs8N)t +s8N*!s8E#ts8E#us8E#ls8N)ns8N)rs8N)ts8N)rs8N)qs8N)ts8N'!s8E#fs8N)rs8N)ts8N)t +s8N)ts8N'!s8E#os8E#ts8E#ss8N)qs8N)ss8N)rs8N(Ms+13$s5j:[m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ss8E#qs8N)ss8N)us8N)ts8N)ms8N)rs8N)t +s8N*!s8E#ts8E#us8E#ls8N)ns8N)rs8N)ts8N)rs8N)qs8N)ts8N'!s8E#fs8N)rs8N)ts8N)t +s8N)ts8N'!s8E#os8E#ts8E#ss8N)qs8N)ss8N)rs8N(Ms+13$s5j:[klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ss8E#qs8N)ss8N)us8N)ts8N)ms8N)rs8N)t +s8N*!s8E#ts8E#us8E#ls8N)ns8N)rs8N)ts8N)rs8N)qs8N)ts8N'!s8E#fs8N)rs8N)ts8N)t +s8N)ts8N'!s8E#os8E#ts8E#ss8N)qs8N)ss8N)rs8N(Ms+13$s5j:[irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7cTns7lZks7ZKns8;rts8;ros7lZps8;rts8;rts7cTos7lZo +s7lZos7lZps8;rts8;rts7lZns7lZps7lZjs7lZps8;rts8;rss7lZps7lZos7lZps7lZos7ZNn +s7lYGs+13$s60L^m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7cTns7lZks7ZKns8;rts8;ros7lZps8;rts8;rts7cTos7lZo +s7lZos7lZps8;rts8;rts7lZns7lZps7lZjs7lZps8;rts8;rss7lZps7lZos7lZps7lZos7ZNn +s7lYGs+13$s60L^klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7cTns7lZks7ZKns8;rts8;ros7lZps8;rts8;rts7cTos7lZo +s7lZos7lZps8;rts8;rts7lZns7lZps7lZjs7lZps8;rts8;rss7lZps7lZos7lZps7lZos7ZNn +s7lYGs+13$s60L^irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7u`ls8;rls82iss8Duus8;rts8;ros7lZps8;rts8;rss8;ot +s8E#ss8)fqs7lZos7lZps8;rts8;rts7lZms82los8)fls7lZps8;rts8;rrs82los8)fps8;p# +rr<'!s7lZns82iss8E#us7lYGs+13$s60L^m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts7u`ls8;rls82iss8Duus8;rts8;ros7lZps8;rts8;rss8;ot +s8E#ss8)fqs7lZos7lZps8;rts8;rts7lZms82los8)fls7lZps8;rts8;rrs82los8)fps8;p# +rr<'!s7lZns82iss8E#us7lYGs+13$s60L^klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts7u`ls8;rls82iss8Duus8;rts8;ros7lZps8;rts8;rss8;ot +s8E#ss8)fqs7lZos7lZps8;rts8;rts7lZms82los8)fls7lZps8;rts8;rrs82los8)fps8;p# +rr<'!s7lZns82iss8E#us7lYGs+13$s60L^irR%VJ,~> +!BpJ^mHsrH!.k0Ds8N(Ms+13$s2Y0=m/bd$J,~> +!BU8[l0\ND!.k0Ds8N(Ms+13$s2Y0=klK'jJ,~> +!B:&Xj6cm>!.k0Ds8N(Ms+13$s2Y0=irR%VJ,~> +!BpJ^mHsrH!.k0Es8E"Ls+13$s2Y0=m/bd$J,~> +!BU8[l0\ND!.k0Es8E"Ls+13$s2Y0=klK'jJ,~> +!B:&Xj6cm>!.k0Es8E"Ls+13$s2Y0=irR%VJ,~> +!BpJ^m=G:ls8)eIs+13$s2P* +!BU8[l%/khs8)eIs+13$s2P* +!B:&Xj+75bs8)eIs+13$s2P* +!BpJ^m=G:ls82kJs+13$s2G$;m/bd$J,~> +!BU8[l%/khs82kJs+13$s2G$;klK'jJ,~> +!B:&Xj+75bs82kJs+13$s2G$;irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m?mqN!;uls!:Bgd!;c`q!7LoI!6tQA!.k0$s+13gs8MBdeieN~> +!BU8[l'VMJ!;uls!:Bgd!;c`q!7LoI!6tQA!.k0$s+13gs8M6`c8pI~> +!B:&Xj-]lD!;uls!:Bgd!;c`q!7LoI!6tQA!.k0$s+13gs8M$Z_`*)~> +!BpJ^mG7g=!8[\O!:Tsa!;uls!:Bgd!;c`q!9sOZ!:p0i!6tQA!.k0$s+13gs8MBdeieN~> +!BU8[l.uC9!8[\O!:Tsa!;uls!:Bgd!;c`q!9sOZ!:p0i!6tQA!.k0$s+13gs8M6`c8pI~> +!B:&Xj5'b3!8[\O!:Tsa!;uls!:Bgd!;c`q!9sOZ!:p0i!6tQA!.k0$s+13gs8M$Z_`*)~> +!BpJ^mHsrH!<)rm!8mhO!:g*h!8.>O!9sOZ!:p0i!6Y?A!.k0$s+13gs8MBdeieN~> +!BU8[l0\ND!<)rm!8mhO!:g*h!8.>O!9sOZ!:p0i!6Y?A!.k0$s+13gs8M6`c8pI~> +!B:&Xj6cm>!<)rm!8mhO!:g*h!8.>O!9sOZ!:p0i!6Y?A!.k0$s+13gs8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rt!;ulq!;?Hi!;QTo!<)rt!;ulq!;ulm!<3#r!;ulr!!*&t!<)rq!;ulm +!;lfp!;- +!BU8[l0\ND!;uls!<)rt!;ulq!;?Hi!;QTo!<)rt!;ulq!;ulm!<3#r!;ulr!!*&t!<)rq!;ulm +!;lfp!;- +!B:&Xj6cm>!;uls!<)rt!;ulq!;?Hi!;QTo!<)rt!;ulq!;ulm!<3#r!;ulr!!*&t!<)rq!;ulm +!;lfp!;- +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZjs7lZjs8N)ss8N*!s7lZos7lZos82lps7cTn +s82lps7lZns7lZgs8N)ss7cTos7lZns7lZos7cQos7ZNns7lZls8N(Ms+13$s2=s:m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZjs7lZjs8N)ss8N*!s7lZos7lZos82lps7cTn +s82lps7lZns7lZgs8N)ss7cTos7lZns7lZos7cQos7ZNns7lZls8N(Ms+13$s2=s:klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZjs7lZjs8N)ss8N*!s7lZos7lZos82lps7cTn +s82lps7lZns7lZgs8N)ss7cTos7lZns7lZos7cQos7ZNns7lZls8N(Ms+13$s2=s:irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ps8N)ts8N)ps8N)ss8N'!s8E#ss8E#s +s8N)ns8N)rs8E#ts8N)rs8N)qs8N)qs8E#ss8E#ms8N)rs8E#ts8N)ts8N)qs8E#ss8Duus8E#t +s8E#ss8;rts8N*!s8N)ts8N)rs8N(Ms+13$s2=s:m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ps8N)ts8N)ps8N)ss8N'!s8E#ss8E#s +s8N)ns8N)rs8E#ts8N)rs8N)qs8N)qs8E#ss8E#ms8N)rs8E#ts8N)ts8N)qs8E#ss8Duus8E#t +s8E#ss8;rts8N*!s8N)ts8N)rs8N(Ms+13$s2=s:klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ps8N)ts8N)ps8N)ss8N'!s8E#ss8E#s +s8N)ns8N)rs8E#ts8N)rs8N)qs8N)qs8E#ss8E#ms8N)rs8E#ts8N)ts8N)qs8E#ss8Duus8E#t +s8E#ss8;rts8N*!s8N)ts8N)rs8N(Ms+13$s2=s:irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ks8N)ps8N)ss8N'#rr<&rs8N)ts8N)n +s8N)rs8N)ts8N)rs8N)qs8N)qs8N)rs8N)ns8N)rs8N)ts8N)ts8N)qs8N)rs8N'#rr<&ss8N)t +s8E#js8N)rs8N(Ms+13$s2=s:m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ks8N)ps8N)ss8N'#rr<&rs8N)ts8N)n +s8N)rs8N)ts8N)rs8N)qs8N)qs8N)rs8N)ns8N)rs8N)ts8N)ts8N)qs8N)rs8N'#rr<&ss8N)t +s8E#js8N)rs8N(Ms+13$s2=s:klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ks8N)ps8N)ss8N'#rr<&rs8N)ts8N)n +s8N)rs8N)ts8N)rs8N)qs8N)qs8N)rs8N)ns8N)rs8N)ts8N)ts8N)qs8N)rs8N'#rr<&ss8N)t +s8E#js8N)rs8N(Ms+13$s2=s:irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'#rr<&rs8N)qs7lZjs8N)ss8N'!s7ZNls8N)ns8N)r +s8N)ts8N)rs8N)qs8N)qs7ZNfs8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N)ts8N)ps7lZls8N(M +s+13$s2=s:m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'#rr<&rs8N)qs7lZjs8N)ss8N'!s7ZNls8N)ns8N)r +s8N)ts8N)rs8N)qs8N)qs7ZNfs8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N)ts8N)ps7lZls8N(M +s+13$s2=s:klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'#rr<&rs8N)qs7lZjs8N)ss8N'!s7ZNls8N)ns8N)r +s8N)ts8N)rs8N)qs8N)qs7ZNfs8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N)ts8N)ps7lZls8N(M +s+13$s2=s:irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)rs7cTis8N)ss8N'!s7ZNls8N)ns8N)r +s8N)ts8N)rs8N)qs8N)qs7ZNfs8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N)ts8N)qs7cTks8N(M +s+13$s2=s:m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)rs7cTis8N)ss8N'!s7ZNls8N)ns8N)r +s8N)ts8N)rs8N)qs8N)qs7ZNfs8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N)ts8N)qs7cTks8N(M +s+13$s2=s:klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)rs7cTis8N)ss8N'!s7ZNls8N)ns8N)r +s8N)ts8N)rs8N)qs8N)qs7ZNfs8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N)ts8N)qs7cTks8N(M +s+13$s2=s:irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ss8E#qs8N)ss8N)ps8N)ts8N*!s8E#ls8N)n +s8N)rs8N)ts8N)rs8N)qs8N)ts8N'!s8E#fs8N)rs8N)ts8N)ts8N)ts8N'!s8E#os8E#ts8E#s +s8N)qs8N)ss8N)rs8N(Ms+13$s2=s:m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ss8E#qs8N)ss8N)ps8N)ts8N*!s8E#ls8N)n +s8N)rs8N)ts8N)rs8N)qs8N)ts8N'!s8E#fs8N)rs8N)ts8N)ts8N)ts8N'!s8E#os8E#ts8E#s +s8N)qs8N)ss8N)rs8N(Ms+13$s2=s:klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ss8E#qs8N)ss8N)ps8N)ts8N*!s8E#ls8N)n +s8N)rs8N)ts8N)rs8N)qs8N)ts8N'!s8E#fs8N)rs8N)ts8N)ts8N)ts8N'!s8E#os8E#ts8E#s +s8N)qs8N)ss8N)rs8N(Ms+13$s2=s:irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7cTns7lZks7ZNjs7cTns7lZos7lZos7lZps8;rts8;rts7lZn +s7lZps7lZjs7lZps8;rts8;rss7lZps7lZos7lZps7lZos7ZNns7lYGs+13$s2Y0=m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7cTns7lZks7ZNjs7cTns7lZos7lZos7lZps8;rts8;rts7lZn +s7lZps7lZjs7lZps8;rts8;rss7lZps7lZos7lZps7lZos7ZNns7lYGs+13$s2Y0=klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7cTns7lZks7ZNjs7cTns7lZos7lZos7lZps8;rts8;rts7lZn +s7lZps7lZjs7lZps8;rts8;rss7lZps7lZos7lZps7lZos7ZNns7lYGs+13$s2Y0=irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7u`ls8;rls82iss8E#qs7u`ls8)fqs7lZos7lZps8;rts8;rt +s7lZms82los8)fls7lZps8;rts8;rrs82los8)fps8;p#rr<'!s7lZns82iss8E#us7lYGs+13$ +s2Y0=m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts7u`ls8;rls82iss8E#qs7u`ls8)fqs7lZos7lZps8;rts8;rt +s7lZms82los8)fls7lZps8;rts8;rrs82los8)fps8;p#rr<'!s7lZns82iss8E#us7lYGs+13$ +s2Y0=klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts7u`ls8;rls82iss8E#qs7u`ls8)fqs7lZos7lZps8;rts8;rt +s7lZms82los8)fls7lZps8;rts8;rrs82los8)fps8;p#rr<'!s7lZns82iss8E#us7lYGs+13$ +s2Y0=irR%VJ,~> +!BpJ^mHsrH!.k0es8N(Ms+13$s/,hqm/bd$J,~> +!BU8[l0\ND!.k0es8N(Ms+13$s/,hqklK'jJ,~> +!B:&Xj6cm>!.k0es8N(Ms+13$s/,hqirR%VJ,~> +!BpJ^mHsrH!.k0fs8E"Ls+13$s/,hqm/bd$J,~> +!BU8[l0\ND!.k0fs8E"Ls+13$s/,hqklK'jJ,~> +!B:&Xj6cm>!.k0fs8E"Ls+13$s/,hqirR%VJ,~> +!BpJ^m=G;8s8)eIs+13$s/#bpm/bd$J,~> +!BU8[l%/l4s8)eIs+13$s/#bpklK'jJ,~> +!B:&Xj+76.s8)eIs+13$s/#bpirR%VJ,~> +!BpJ^m=G;8s82kJs+13$s.o\om/bd$J,~> +!BU8[l%/l4s82kJs+13$s.o\oklK'jJ,~> +!B:&Xj+76.s82kJs+13$s.o\oirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mEYb3!:0[a!9sO]!;QTo!:Bgd!;c`q!.k0$s+13$s4[MPm/bd$J,~> +!BU8[l-B>/!:0[a!9sO]!;QTo!:Bgd!;c`q!.k0$s+13$s4[MPklK'jJ,~> +!B:&Xj3I])!:0[a!9sO]!;QTo!:Bgd!;c`q!.k0$s+13$s4[MPirR%VJ,~> +!BpJ^mG7g:!;uls!:0[a!9sO]!;QTo!:Bgd!;c`q!.k0$s+13$s4[MPm/bd$J,~> +!BU8[l.uC6!;uls!:0[a!9sO]!;QTo!:Bgd!;c`q!.k0$s+13$s4[MPklK'jJ,~> +!B:&Xj5'b0!;uls!:0[a!9sO]!;QTo!:Bgd!;c`q!.k0$s+13$s4[MPirR%VJ,~> +!BpJ^mHsrH!<)rl!9=+Z!9X=]!87DP!.k0$s+13$s4[MPm/bd$J,~> +!BU8[l0\ND!<)rl!9=+Z!9X=]!87DP!.k0$s+13$s4[MPklK'jJ,~> +!B:&Xj6cm>!<)rl!9=+Z!9X=]!87DP!.k0$s+13$s4[MPirR%VJ,~> +!BpJ^mHsrH!;lfr!<)rt!<<)s!;ulr!!*&t!;ulq!!<0#!;QTk!;6Bl!;lfo!<)rs!!E6$!<<#u +rr;lrr;ZQmJcC<$JcC<$hZ*TB!S0Da~> +!BU8[l0\ND!;lfr!<)rt!<<)s!;ulr!!*&t!;ulq!!<0#!;QTk!;6Bl!;lfo!<)rs!!E6$!<<#u +rr;lrr;ZQmJcC<$JcC<$hZ*T>!R<`V~> +!B:&Xj6cm>!;lfr!<)rt!<<)s!;ulr!!*&t!;ulq!!<0#!;QTk!;6Bl!;lfo!<)rs!!E6$!<<#u +rr;lrr;ZQmJcC<$JcC<$hZ*T8!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N*!rriE&!!*'!quHZpp]1 +!BU8[l0\NN!!`H'rrE'!s8E#qs8N*!rriE&!!*'!quHZpp]1 +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N*!rriE&!!*'!quHZpp]1 +!BpJ^mHsrQ!!rT)rrE'!rr<&rs82lms8N)rs8E#ts8N*!s8E#ts8E#os8N)ts8N)ms8N)os8N)s +s8Duus8E!"rr<&ss8N)qs8N(Ms+13$s+14(s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs82lms8N)rs8E#ts8N*!s8E#ts8E#os8N)ts8N)ms8N)os8N)s +s8Duus8E!"rr<&ss8N)qs8N(Ms+13$s+14(s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs82lms8N)rs8E#ts8N*!s8E#ts8E#os8N)ts8N)ms8N)os8N)s +s8Duus8E!"rr<&ss8N)qs8N(Ms+13$s+14(s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs82lms8N)rs8N)ts8N*!s8N)ss8N)js8N)ms8N)os8N)ss8N*! +s8N*!s8N)ss8N)qs8N(Ms+13$s+14(s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs82lms8N)rs8N)ts8N*!s8N)ss8N)js8N)ms8N)os8N)ss8N*! +s8N*!s8N)ss8N)qs8N(Ms+13$s+14(s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs82lms8N)rs8N)ts8N*!s8N)ss8N)js8N)ms8N)os8N)ss8N*! +s8N*!s8N)ss8N)qs8N(Ms+13$s+14(s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N*!rr<&ps8N)rs8N)ts8N*!s8N)ss8N)ps7lZgs8N)os8N)s +s8N*!s8N*!s8N)ss8N)qs8N(Ms+13$s+14(s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N*!rr<&ps8N)rs8N)ts8N*!s8N)ss8N)ps7lZgs8N)os8N)s +s8N*!s8N*!s8N)ss8N)qs8N(Ms+13$s+14(s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N*!rr<&ps8N)rs8N)ts8N*!s8N)ss8N)ps7lZgs8N)os8N)s +s8N*!s8N*!s8N)ss8N)qs8N(Ms+13$s+14(s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ms8N)rs8N)ts8N*!s8N)ss8N)qs7cTfs8N)os8N)ss8N*! +s8N*!s8N)ss8N)qs8N(Ms+13$s+14(s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ms8N)rs8N)ts8N*!s8N)ss8N)qs7cTfs8N)os8N)ss8N*! +s8N*!s8N)ss8N)qs8N(Ms+13$s+14(s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ms8N)rs8N)ts8N*!s8N)ss8N)qs7cTfs8N)os8N)ss8N*! +s8N*!s8N)ss8N)qs8N(Ms+13$s+14(s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ms8N)rs8N)ts8N*!s8E#ts8E#ps8N)ss8N)ms8N)os8N)s +s8N*!s8N*!s8N)ss8N)qs8N)ts8N(Ms+13$s+14.s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ms8N)rs8N)ts8N*!s8E#ts8E#ps8N)ss8N)ms8N)os8N)s +s8N*!s8N*!s8N)ss8N)qs8N)ts8N(Ms+13$s+14.s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ms8N)rs8N)ts8N*!s8E#ts8E#ps8N)ss8N)ms8N)os8N)s +s8N*!s8N*!s8N)ss8N)qs8N)ts8N(Ms+13$s+14.s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7u`ns7lZps8;rts8;rts7cTks7ZNis7lZos7lWps8;ots8Duu +s8Duus7lZns7lYGs+13$s+14.s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7u`ns7lZps8;rts8;rts7cTks7ZNis7lZos7lWps8;ots8Duu +s8Duus7lZns7lYGs+13$s+14.s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7u`ns7lZps8;rts8;rts7cTks7ZNis7lZos7lWps8;ots8Duu +s8Duus7lZns7lYGs+13$s+14.s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7u`ns7lZps8;rts8;rss8;ots8E#ps82iss8E#ps7lZos7lWp +s8;ots8Duus8Duus7lZms82kJs+13$s+14,s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts7u`ns7lZps8;rts8;rss8;ots8E#ps82iss8E#ps7lZos7lWp +s8;ots8Duus8Duus7lZms82kJs+13$s+14,s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts7u`ns7lZps8;rts8;rss8;ots8E#ps82iss8E#ps7lZos7lWp +s8;ots8Duus8Duus7lZms82kJs+13$s+14,s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G<5s8N)ms8N(Ms+13$s+14*s8MBdeieN~> +!BU8[l%/m1s8N)ms8N(Ms+13$s+14*s8M6`c8pI~> +!B:&Xj+77+s8N)ms8N(Ms+13$s+14*s8M$Z_`*)~> +!BpJ^mG7g=!2TYp!;?Hm!.k0$s+13$s4mYRm/bd$J,~> +!BU8[l.uC9!2TYp!;?Hm!.k0$s+13$s4mYRklK'jJ,~> +!B:&Xj5'b3!2TYp!;?Hm!.k0$s+13$s4mYRirR%VJ,~> +!BpJ^mHsrH!<)rm!2fer!.k0$s+13$s3L`Em/bd$J,~> +!BU8[l0\ND!<)rm!2fer!.k0$s+13$s3L`EklK'jJ,~> +!B:&Xj6cm>!<)rm!2fer!.k0$s+13$s3L`EirR%VJ,~> +!BpJ^mHsrH!;uls!<)rt!;ulq!;?Hi!;HNi!<<)u!<<)t!!*&u!!E6$!<<#u!<<#u"9/?$s8E#s +s8)fqs7lZns82lms8;rrs8Duus8;qKs+13$s+14Bs8MBdeieN~> +!BU8[l0\ND!;uls!<)rt!;ulq!;?Hi!;HNi!<<)u!<<)t!!*&u!!E6$!<<#u!<<#u"9/?$s8E#s +s8)fqs7lZns82lms8;rrs8Duus8;qKs+13$s+14Bs8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rt!;ulq!;?Hi!;HNi!<<)u!<<)t!!*&u!!E6$!<<#u!<<#u"9/?$s8E#s +s8)fqs7lZns82lms8;rrs8Duus8;qKs+13$s+14Bs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZjs7lZjs7lZps8E#us8;ots6B[bs7lZps7lZn +s82los7lZps7cSFs+13$s+14Cs8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZjs7lZjs7lZps8E#us8;ots6B[bs7lZps7lZn +s82los7lZps7cSFs+13$s+14Cs8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZjs7lZjs7lZps8E#us8;ots6B[bs7lZps7lZn +s82los7lZps7cSFs+13$s+14Cs8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ps8N)ts8N)ps8N)ts8N)us8N)ts8N*! +s8Duus8E!#rr<'!rVururW!0&!!*'!!!)utrrE#trrDcmrrDusrW)osrW)uurW)rtrr@WMJcC<$ +JcGECrp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ps8N)ts8N)ps8N)ts8N)us8N)ts8N*! +s8Duus8E!#rr<'!rVururW!0&!!*'!!!)utrrE#trrDcmrrDusrW)osrW)uurW)rtrr@WMJcC<$ +JcGECrojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ps8N)ts8N)ps8N)ts8N)us8N)ts8N*! +s8Duus8E!#rr<'!rVururW!0&!!*'!!!)utrrE#trrDcmrrDusrW)osrW)uurW)rtrr@WMJcC<$ +JcGECro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ks8N)ps8;ros8N)ts8N*!s8N*!s8N*! +s8N'+rr<'!rr<'!rr<&ps8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+14Cs8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ks8N)ps8;ros8N)ts8N*!s8N*!s8N*! +s8N'+rr<'!rr<'!rr<&ps8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+14Cs8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ks8N)ps8;ros8N)ts8N*!s8N*!s8N*! +s8N'+rr<'!rr<'!rr<&ps8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+14Cs8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'#rr<&rs8N)qs7lZis8)fps8N)ts8N*!s8N*!s8N*! +s8N'-rr<'!rr<'!rr<'!s7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+14Cs8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'#rr<&rs8N)qs7lZis8)fps8N)ts8N*!s8N*!s8N*! +s8N'-rr<'!rr<'!rr<'!s7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+14Cs8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'#rr<&rs8N)qs7lZis8)fps8N)ts8N*!s8N*!s8N*! +s8N'-rr<'!rr<'!rr<'!s7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+14Cs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)rs7cTfs82lrs8N)ts8N*!s8N*!s8N*! +s8N',rr<'!rr<'!rr<'!p]19mrrDcmrrDusrrDrrrrE*!rrE#trr@WMJcC<$JcGECrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)rs7cTfs82lrs8N)ts8N*!s8N*!s8N*! +s8N',rr<'!rr<'!rr<'!p]19mrrDcmrrDusrrDrrrrE*!rrE#trr@WMJcC<$JcGECrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)rs7cTfs82lrs8N)ts8N*!s8N*!s8N*! +s8N',rr<'!rr<'!rr<'!p]19mrrDcmrrDusrrDrrrrE*!rrE#trr@WMJcC<$JcGECro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ss8E#qs8N)ss8N)ps8N)ts8N)us8N)us8E#u +s8N*!s8N*!s8N'.rr<'!rr<'!rr<'!!!)rsrrE#trrE#trrDusrrDusrW)osrW)uurrE#trr@WM +JcC<$JcGECrp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ss8E#qs8N)ss8N)ps8N)ts8N)us8N)us8E#u +s8N*!s8N*!s8N'.rr<'!rr<'!rr<'!!!)rsrrE#trrE#trrDusrrDusrW)osrW)uurrE#trr@WM +JcC<$JcGECrojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ss8E#qs8N)ss8N)ps8N)ts8N)us8N)us8E#u +s8N*!s8N*!s8N'.rr<'!rr<'!rr<'!!!)rsrrE#trrE#trrDusrrDusrW)osrW)uurrE#trr@WM +JcC<$JcGECro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7cTns7lZks7ZNis7lZos7?9ks8Duus8)crs8Duus7? +!BU8[l0\NN!!`H'rrE'!s8E#ss7cTns7lZks7ZNis7lZos7?9ks8Duus8)crs8Duus7? +!B:&Xj6cmH!!`H'rrE'!s8E#ss7cTns7lZks7ZNis7lZos7?9ks8Duus8)crs8Duus7? +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7u`ls8;rls82iss8E#ps7u`ns8;ots7u]qs8Duus8)crs8Duu +s8Duus82iss8E#ss82lqs7lZms8;rrs8;rts8;qKs+13$s+14Ds8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts7u`ls8;rls82iss8E#ps7u`ns8;ots7u]qs8Duus8)crs8Duu +s8Duus82iss8E#ss82lqs7lZms8;rrs8;rts8;qKs+13$s+14Ds8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts7u`ls8;rls82iss8E#ps7u`ns8;ots7u]qs8Duus8)crs8Duu +s8Duus82iss8E#ss82lqs7lZms8;rrs8;rts8;qKs+13$s+14Ds8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6eq)D'eq)D'f"T]84b*~> +!BU73c@O8lc@O8lcG%R(3e.~> +!B:%0_h#^V_h#^V_nO"g2h1~> +JN\QIJN\QIJN^V.J,~> +JNA?CJNA?CJNCD(J,~> +JN&-=JN&-=JN(2"J,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/books/ps/v71calculuspage.eps b/books/ps/v71calculuspage.eps new file mode 100644 index 0000000..bc4d535 --- /dev/null +++ b/books/ps/v71calculuspage.eps @@ -0,0 +1,2645 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner +%%Title: calculuspage.eps +%%CreationDate: Sat Jun 21 10:55:26 2008 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 696 475 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 459.83362537429304 translate +681.59055118110246 -459.83362537429304 scale +% Image geometry +710 479 8 +% Transformation matrix +[ 710 0 0 479 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 710 string def +/gstr 710 string def +/bstr 710 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 139025 ASCII Bytes +colorimage +quD:2JN\QIJN\QI`BF,!J,~> +quD:/JNA?CJNA?C`B*nsJ,~> +quD:,JN&-=JN&-=`Ad\pJ,~> +rW)s]JcC<$JcC<$JcE^hs#p>]J,~> +rW)sZJcC<$JcC<$JcE^hs#U,ZJ,~> +rW)sWJcC<$JcC<$JcE^hs#9oWJ,~> +rr<*`rr.KIJc1/uJc1/u`Voi9!^-M`J,~> +rr<*]rr.KIJc1/uJc1/u`Voi9!]g;]J,~> +rr<*ZrV_ +!WYC^Jc()sJc()sNr84$rVYu>rVYu>rqliX4TL!~> +!WY:[Jbt#qJbt#qNr/.#rVPo=rVPo=rqccV3WO[~> +!WY1WJbjroJbjroNr&(!rVGi;rVGi;rqZ]T2ZS@~> +!WYC]JbjroJbjroO88m7bjGE6b_l8nMTkJf"jDl#qMNMars$])qYK/6!.Y~> +!WY:YJbalmJbalmO8/g6bjGE6b_l5lMTkJf"jDl"q23D`rs$])q>&u1!.Y~> +!WY1VJbXfkJbXfkO8&a4bjGE6b_c,iM9PAe"jDhupkd5^rs$](q"Wc+!.Y~> +!Bp>Xq#LHro)O@;JbalmJbc):!K-jCr!!%Vq>#pHmJI.dMY[(*rU'L`rJLUM!T?1l~> +!BU)TpAk6po)O@9JbO`iJbPr6!K$dBr!!%Up\0OCmJI.dM>-b$rU'L`rJCOJ!T,qg~> +!B9iPo`5$no)O@7Jb=TeJb>f2!JgX@qZZqRp%=+=mJ@(cL\:=qrU'I_rJ1CF!So\b~> +!Bp;WpB/E6`%CW^JbO`iJbO`iU\=eGr9a=ar/(1BM>Zc;"oO5OpPJh8q>pMNrq?HN4b*~> +!BU&So`N34`%CW^Jb=TeJb=TeU\+YCqsF1_qhOk;L\pK7"oF)JonWG3q#UAJrq- +!B9fOo)m!2`%CW^Jb+HaJb+HaU[nM@qsF.^qhF_6LAUB5"oF&Go7m/0p]:8Hrpp0F2h1~> +!Bp;Wp(.1.qQ+s_PA6:)B9P$56BcuoJbJL)!B;b3p&R-+j7WI4r\"=mJ$k^M"^OuqsF.ZqhY7F!T#ti~> +!BU#RoFLt,qQ+s_PA6:)B9P$56BcumJb8@%!B2Y1oDpm'j7E=1r[n7:En#[4Jb8!p!JgO=p'(;J +o^mq8mIg_[L\14oqX*tWqM5(B!Sf_d~> +!B9cNnIPY)qQ+s_PA6:)B9P$56BcujJar-t!AuJ.nGtL!j7*+,r[e18E6s1+Jaqdj!JU=9oEG#D +naV>.mIUSWL%4\eq!I\SpkA_;!SKD^~> +!Bp5UoFLu0rRn3jg"`aZgP!Sqn*,DqJb8@%!B;b3oDpp)j7ER90=\&s00%=0oRZYqoDsaDmIg_[ +L\14oqYU!^!;lHnqM4_8L\goArrE#krrDri!W%TNoE!`1J,~> +!BTuQndkc.rRn3jg"`aZgP!Sqn*,DoJb&4!!B)S0nc:X$j73F50"7in/iLt*nq$Amnc=L?mIUSW +L@Xniq"s^Z!;lBlpkJA1LA:Z +!B9]LmLT?*rRn3jg"`aZgP!Sqn*,DkJaVpn!AuJ.mK#0sj6d.0/[VEf/N(\%mXafemK&"8mI:AS +K^S8]p\XLV!;l9ipOqu&K_PB6rrE#frrDrd!V_9HmK(ouJ,~> +!Bp5Uo+1j^q.'!S]bf~> +!BTrPn.5O[q.'=Kq;_S5;$s8()tXJai=$!JU:8nHJZ@nF2/+qsjI^qsajaL%+Sc +p\XL[!<;Tg!;l9epP&V9!SBG`~> +!B9ZKljs+Wq.'rqsF1Zqs=RZK'_iU +o_\%T!<;Hc!;l-aoRd)/!S',Z~> +!Bp2TnIM9cSg;Z[PNqO4eC2_7]E!NQJar-t!B2\2Zlq:[naX"?D=QmSRIMpd@VIK2n_lPt_JM!T +nO,$*M"*DWrp^W@008X&035j%<%k2602J^[R+d,]JarC&!JU:8nHJZ@naV>-qsaXdqsaXdqsaja +L%4\ep\OFW!;c3dpP&V:!SKVd~> +!BToOmLPs`Sg;Z[PNqO4eC2_7]E!NNJaVpn!B)S0YotqVmd@D6D!pLMR-lR^@:q3,mbTul^hb[N +mQrO#L$giOrpCE:/ii?s/lfQr;_Fo./kr@SQe-fVJaW0u!JL.5mKN9:md>c$qsFFaqsFFaqsFX\ +K^S8]p%n+R!;c*aon<>4!S9A_~> +!B9TIl49O\Sg;Z[PNqO4eC2_7]E!NJJa2Xf!AuJ.Y9>YQlKYT*C?jkAPj0hT?Y1m&lJ" +!Bp/SnGWCrR)/p$U':T##6Y89!.jWjnEo]F2u>9.n/^gX1ukMmj7"]_l.n!Qn=VFeiMS?!n3\kb +nF/@irpUEO0/;rh0@'(VbqD^X0?o(;Jai0u!JU46mfiB +!BTlNm/?tnR)/p$U':T##6Y89!.jKfm-X->2Z#-,llG7O1Z+uchs;sUjk27Gm%,h\h4lTjlp<>Y +m-HV_rp1-G/hlW`0$qqs+4^qs+4^qs+FWK'_iUoD._N +!;Yp]o7Hu.!S'5]~> +!B9QHkPbGiR)/p$U':T##6Y89!.j]!*k8iSD1#&BYgZL.Ji7'>;kF4&Pfq9p_k/MH9X/]Qu:`%=MG/]<5'J`lOc!J'\,jot7)kN@BbqrRkYqrRkYqrS(OJEQ*GnG25F +!;YaXn::N$!RNcU~> +!BouNkl(Pb/K"OJ,l%Fkk^hsbkQ*UqroaAA0E1/FHnV'iHKaQG6g3Yc0B\/h0*?jj6SJH&!B2\2 +kRPH_7-HBZjlkph0/>78idp +!BTZHj8K#]/K"OJ,l%Fkj+67XirM%jro4#;0)jl@GV5F_GN7^960$oV0&hT_/d$[b5q`/s!B)S0 +isrdU6fTmRi8`kU/ho%4h1=U;j7)(0Ic0V;"lOjij*oq`bQ%Y?bQ%Y?bQZpRj5YUHq98d;q9/lt +IfA@.brU@~> +!B99@g\q0U/K"OJ,l%FkgO\,HgAs,_rn@H1/cOK7F=ibRF5,G$5MOjC/_YdR/H^CT5:ulh!AlD- +gCCYD6/+%Eg"Y96/MAb/eUcJ+g[NquH.hT#"ke1UgNhKL^]4B3^]4B3^]iD:gY7#,q7uq/q7m$a +H2cP!`]&D~> +!BouNkl1Vb#V@VJpAfd.J`uLb!B2\2kQ*Uqroap-01.D6kiaZekgqITkaX;Qr9+/K0E1/92_Y0o% +X9XRkXmMKkig#>91CSJJ`q[KnE9n'jmCP$jacRYJE?[X!!)oG!!)oG"m(9uk^_dkeGB7Be,eZ]r +oaC14b*~> +!BTZHj8T)]#V@VJpAfd)J`H.X!B)S0irM%jro4R#/jV,.j5VaXj3oVIj-_NFr8RfD0)jl32D5!h% +WsCLj%(f?j5[s.8OP2AJ`D=AnDaOui9e_li-s_HIc1+I!!)o?!!)o?"lOjij*oq_bkhD:bQ6XNr +o4%(3e.~> +!B99@g]%6U#V@VJpAfd!J_TSH!AlD-gAs,_rnA!j/O(i#gY4;EgWM06gQX:4r7_6:/cOK*1bJ^]% +WO(CgI +!BouNkl1Vc*9u5B"o&(Kk^hsbkQ*UqroaAA0E1/;k=714roanH4N;n)K]q/U1Q8W6XQW#)rob.W +0=Iir01=FUUb>]X\5P&VQ7kY"\":fpk^hsikQ-4qqpbEAqpYf2JEZ3IjnmO-!;k7G!;k7LjacRY +JE?[XrW)uJrW)iF!Tek2kQ0'oJ,~> +!BT]IjSo2_*9u5B"o&(KjFQCZj8h.kro=)<0)jo6j$kY,ro=VC4MlP"J`PEI0oE0+WoQGuro=kR +0!_?h/k"1LTIs0O[8JWMP:f4oZ^]'fjFQCaj8j_fqonj9qof6%IcTR=i;:^u!;jt?!;jtDi-sbJ +Ic1+IrW)uBrW)i>!T8G+j8mOeJ,~> +!B96a>O"EYbXd6hTgk"8Qg];`SqnW"-qnNBgHJI;%g&&Pb!;jP3!;jP8fm;H/ +HJ/22rW)u6rW)i2!SMeug]>DRJ,~> +!Bp#Ol2CYh`gQi;/L:B8*$kL`Ja%aMmHFX10E12:2_Y-o!fAY7rosD8%5r=fl06H-3\WspksI-' +kls("0/,eCf`(+EX&_&7=0(TLSPM$t9uV\JJa)gk!J0A0eG0+Ae-4rbl03c\qpbEAqpYf2Ja)EM +jnmR-!<(FI!;k7HjamEq!Ra,]~> +!BT]IjSf,c`gQi;/L:B8*$kL`J`MCCmGn:+0)jo42D4sh!f&D.roF&2%5i1^jQ+Eq3%mUgj?YEt +j9@Lp/h]V?e,JD;W)PQ0Ll9>Q2?J`QIa!Iiu(bkV89bQZpRjQ(dJqonj9qof6%IcTR= +i;:au!<(.A!;jt@i-t[d!R<`V~> +!B9 +!Bp#Ol2CYh`gZq,[EWpW`6nPaJa%aMiopM`7Ha[7!A?fkl%/*AklH@smF2=$Ja)EMjmCP$jal[\ +J`Z:K!Ten3klK3qJ,~> +!BT]Ijo,5d`gZq,[EWpW`6nPaJ`VIEioL5[7-":.!A6ZhjalO9jT0khmE>alJ*#dAi9e_li.'kM +J)K_ +!B9?Bh>RB\`gZq,[EWpW`6nPaJ_bn5inXZO6ehUr!A-Neh1=D)h#ViUmD/t[HJRD'g?l][g3VT2 +HJ7c&!SVl!h#YPTJ,~> +!Bp#OlM^bi`gQl,3g9Tn"BYR&Ja.gOj6?]S09uM$!A?fkl@J6Cl2cIumF;C&Ja2NOk3^\&k(2g_ +J`c@M!Tnt4l2f?sJ,~> +!BT]Ijo,5d`gQl,3g9Tn"BYR&J`VIEj5g?J/s6+o!A6ZhjalO9jT0kimEGgnJ*#dAiU+kniIBtN +J)Te>!TAP-jT3[gJ,~> +!B9?BhYmK]`gQl,3g9Tn"BYR&J_kt7j5'j>/WK_c!A-QfhLXP+h>quWmD/t[Hf!V+g?l][g3_]5 +HeRl'!SVo"h>t\VJ,~> +!Bp#OlMghk&_t2%fn@#Go66o-!.jEdlJq.2Sqc&!l2dfcJa.gOb3B"Yk3^\&k(2g_J`c@M"m1C$ +l@J*beH+f`rosO54b*~> +!BT`Jk5PDg&_t2%fn@#Go66o-!.j9`k2YS*S:oSojoM9YJ`_OGb2r_SiU+kniIC"PJ)Te>"lXsn +k'u@WblQdQroO7-3e.~> +!B9?BhZ!Q_&_t2%fn@#Go66o-!.j!XhW*GoQ@RB]h>s4EJ_kt7b2*/Gg?l][g3_]5HeRl'"kn=[ +hL!uD_#`8:rn[[s2h1~> +!Bp#OlMghk'5_SV(2[7W6#A@U!.jEdl@J5OlD*VFJ[k+0"h9-Kl@HJ4jor8GlKWr1mH+GZJc=p8 +dli3~> +!BT`Jk5PDg'5_SV(2[7W6#A@U!.j9`k(2ZGk+h&>J$eV%"gidAk'sc*i +!B9BChu +!Bp&PlgXt+l[eAQl[eArlg&`mlg&`mlg&`mlN,KuJ,~> +!BTcKkOAP'kCMfIkCMfjkNd-dkNd-dkNd-dk5ipjJ,~> +!B9BCi:-eui.9g;i.9g\i9P1Wi9P1Wi9P1WhuUtZJ,~> +!Bp%*l[eAQl[eAQlbD`de3/<~> +!BTb%kCMfIkCMfIkJ-0\coQ[~> +!B9@ri.9g;i.9g;i4n1Nau=h~> +!Boe#i.9g;i.9g;i4e+L4b*~> +!BTIrg4@t/g4@t/g:l8@3e.~> +!B9%id"0Ppd"0Ppd([j,2h1~> +!'PmaJUrB'JUrB']n$/HJ,~> +!'5[SJTcTfJTcTf]ljB:J,~> +!&oIAJS0OHJS0OH]k7=(J,~> +!BpJ^m5t=JrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&c!S0Da~> +!BU8[kr\nFrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&_!R<`V~> +!B:&Xj#d8@rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&Y!Q-jH~> +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rp9a;4b*~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rojI/3e.~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!ro4$s2h1~> +!BpJ^mDo8,!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)um/bd$J,~> +!BU8[l,Wi(!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uklK'jJ,~> +!B:&Xj2_3"!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uirR%VJ,~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls02P%!9F1Y +!.k0PrriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!!*&um/bd$J,~> +!BU8[kl:__rrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls02P%!9F1Y +!.k0PrriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!!*&uklK'jJ,~> +!B:&XirB)YrrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls02P%!9F1Y +!.k0PrriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!!*&uirR%VJ,~> +!BpJ^m0 +!BU8[km%.frrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcE^h +r;Zlu!:^!g!9*qX!.k0Qrr<&urrW9$!<<#u!ri9#rW";F!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<<#urVneVrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE)u!<23`c8pI~> +!B:&Xis,M`rrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcE^h +r;Zlu!:^!g!9*qX!.k0Qrr<&urrW9$!<<#u!ri9#rW";F!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<<#urVneVrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE)u!<2!Z_`*)~> +!BpJ^m/R.crrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0i +s8N)ts8N)grr<&Xrr<%Ms/l;)!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0i +s8N)ts8N)grr<&Xrr<%Ms/l;)!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0i +s8N)ts8N)grr<&Xrr<%Ms/l;)!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcEdj!!)or!!)Ng!!)!X!!%TMY5\J%rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p8!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<;lq(B4C7 +!<3'!!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcEdj!!)or!!)Ng!!)!X!!%TMY5\J%rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p8!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<;lq(B4C7 +!<3'!!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0j +rr<&ls8;rmrr<&ps8;ourrE&urrE#trrDoq!!)orrrE#trrDusr;Zlu!.k0irriE&!<3'!qu?`s +quA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#us8N'!rr3]5rrE'!rrE'! +rrE'!rrE'!rrE'!s7cR.rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0j +rr<&ls8;rmrr<&ps8;ourrE&urrE#trrDoq!!)orrrE#trrDusr;Zlu!.k0irriE&!<3'!qu?`s +quA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#us8N'!rr3]5rrE'!rrE'! +rrE'!rrE'!rrE'!s7cR.rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0j +rr<&ls8;rmrr<&ps8;ourrE&urrE#trrDoq!!)orrrE#trrDusr;Zlu!.k0irriE&!<3'!qu?`s +quA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#us8N'!rr3]5rrE'!rrE'! +rrE'!rrE'!rrE'!s7cR.rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[km%.frrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcEgk!!)`m!!)ut!!)ip!!)lq!!)utrrE#t!!)rs!!)lq!!)lq!!)rs!!)ut!!)utrr@WM +a8Z,>rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcEgk!!)`m!!)ut!!)ip!!)lq!!)utrrE#t!!)rs!!)lq!!)lq!!)rs!!)ut!!)utrr@WM +a8Z,>rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls2Y->!:g'h!;ZWp!;lcr!;lcr +!<)ot!;uis!;c]q!;c]q!;uis!<)ot!;uis!.k0irriE&!<3'!qu?`squ?fu!<;lq!ri9#rVuru +rVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'! +rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls2Y->!:g'h!;ZWp!;lcr!;lcr +!<)ot!;uis!;c]q!;c]q!;uis!<)ot!;uis!.k0irriE&!<3'!qu?`squ?fu!<;lq!ri9#rVuru +rVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'! +rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls2Y->!:g'h!;ZWp!;lcr!;lcr +!<)ot!;uis!;c]q!;c]q!;uis!<)ot!;uis!.k0irriE&!<3'!qu?`squ?fu!<;lq!ri9#rVuru +rVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'! +rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcEgk!!)`mqZ-Hl!!)or!!)`m!!)rs!!)lq +!!)lq!!)rs!!)rsrW%NL`;]f;rr3'#rrE)o!!<0#s7cQos7?9ks7cQqrrE)u!<)p0!<3'!!<3'! +!<3'!!<3'!!<; +!B:&Xis,M`rrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcEgk!!)`mqZ-Hl!!)or!!)`m!!)rs!!)lq +!!)lq!!)rs!!)rsrW%NL`;]f;rr3'#rrE)o!!<0#s7cQos7?9ks7cQqrrE)u!<)p0!<3'!!<3'! +!<3'!!<3'!!<; +!BpJ^m/R.crrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +!!;HKn!;uis!;ZWp!;lcr +!;?Em!;uis!;c]q!;c]q!;uis!;ZZp!.k0hrriE&!<3'!p&G*mqu?`srW!$"!<<#u!<<#u!<<#u +!<;rs!<;rs!ri9#rW)uu!!*#u%06D.rrE'!rrE'!rrE)_!"Al-rrE'!rrE'!rrE)u!!*&um/bd$ +J,~> +!BU8[kl:__rrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +!!;HKn!;uis!;ZWp!;lcr +!;?Em!;uis!;c]q!;c]q!;uis!;ZZp!.k0hrriE&!<3'!p&G*mqu?`srW!$"!<<#u!<<#u!<<#u +!<;rs!<;rs!ri9#rW)uu!!*#u%06D.rrE'!rrE'!rrE)_!"Al-rrE'!rrE'!rrE)u!!*&uklK'j +J,~> +!B:&XirB)YrrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +!!;HKn!;uis!;ZWp!;lcr +!;?Em!;uis!;c]q!;c]q!;uis!;ZZp!.k0hrriE&!<3'!p&G*mqu?`srW!$"!<<#u!<<#u!<<#u +!<;rs!<;rs!ri9#rW)uu!!*#u%06D.rrE'!rrE'!rrE)_!"Al-rrE'!rrE'!rrE)u!!*&uirR%V +J,~> +!BpJ^m0 +qu6`us8N)srr<&prr<&rrr<&mrr<&srr<&qrr<&qrr<&srr<&trr<&srr<%Ms2Y->!<3!#!<3'! +rW!$"!<<#u!<;rs!ri9#rVurun,NOi!<<#u!ri9#rW)os'`e76rrE'!rrE'!rrE'!rrE'!rrE)i +!##;3rrE'!rrE'!rrE'!rrE'!s8E#tm/bd$J,~> +!BU8[km%.frrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLa8Z,> +qu6`us8N)srr<&prr<&rrr<&mrr<&srr<&qrr<&qrr<&srr<&trr<&srr<%Ms2Y->!<3!#!<3'! +rW!$"!<<#u!<;rs!ri9#rVurun,NOi!<<#u!ri9#rW)os'`e76rrE'!rrE'!rrE'!rrE'!rrE)i +!##;3rrE'!rrE'!rrE'!rrE'!s8E#tklK'jJ,~> +!B:&Xis,M`rrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLa8Z,> +qu6`us8N)srr<&prr<&rrr<&mrr<&srr<&qrr<&qrr<&srr<&trr<&srr<%Ms2Y->!<3!#!<3'! +rW!$"!<<#u!<;rs!ri9#rVurun,NOi!<<#u!ri9#rW)os'`e76rrE'!rrE'!rrE'!rrE'!rrE)i +!##;3rrE'!rrE'!rrE'!rrE'!s8E#tirR%VJ,~> +!BpJ^m/R.crrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NL`W,l:r;Z]q +!<<#urr;fpr;Z]qqZ$Ko!ri6#rr;fpr;Z]q!ri6#rr3!!s8;qKs2P'=!<3!#!<3'!rW!$"!<<#u +!<;rs!ri9#rVurul2Unc!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'! +rrE'!rrE)u!<23`c8pI~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NL`W,l:r;Z]q +!<<#urr;fpr;Z]qqZ$Ko!ri6#rr;fpr;Z]q!ri6#rr3!!s8;qKs2P'=!<3!#!<3'!rW!$"!<<#u +!<;rs!ri9#rVurul2Unc!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'! +rrE'!rrE)u!<2!Z_`*)~> +!BpJ^m/R.crrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLJcC<$ +\c2X0rr3'#rrE)u!!<0#s8Duus82iurrE)u!!*&g!!rT)rrE'!rrE)u!<)p4!<3'!!<3'!!<3'! +!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLJcC<$ +\c2X0rr3'#rrE)u!!<0#s8Duus82iurrE)u!!*&g!!rT)rrE'!rrE)u!<)p4!<3'!!<3'!!<3'! +!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLJcC<$\c2X0rr3'#rrE)u!!<0# +s8E!"rrE)o!!*&k!!*&o!!<0#s8E#ss#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLJcC<$\c2X0rr3'#rrE)u!!<0# +s8E!"rrE)o!!*&k!!*&o!!<0#s8E#ss#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BU8[kl:__rrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!B:&XirB)YrrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/[4ea8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8MBdeieN~> +!BU8[klCeaa8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M6`c8pI~> +!B:&XirK/[a8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M$Z_`*)~> +!BpJ^m/[1+!<<) +!BU8[klCb'!<<) +!B:&XirK,!!<<) +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8MBdeieN~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M6`c8pI~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mEYb3!:Bgd!;c`q!.k0Es8;r$s8;rjs8;qps8;qKs2"a7m/bd$J,~> +!BU8[l-B>/!:Bgd!;c`q!.k0Es8;r$s8;rjs8;qps8;qKs2"a7klK'jJ,~> +!B:&Xj3I])!:Bgd!;c`q!.k0Es8;r$s8;rjs8;qps8;qKs2"a7irR%VJ,~> +!BpJ^mG7g>!;QTo!:Bgd!;c`q!.k1@s8;ourrCFG!!)0]!!)cn!!)Bc!!)fo!!(dR!!)Ti!!(XN +!!)`m!!(UM!!&kq!!&Vjrp9a;4b*~> +!BU8[l.uC:!;QTo!:Bgd!;c`q!.k1@s8;ourrCFG!!)0]!!)cn!!)Bc!!)fo!!(dR!!)Ti!!(XN +!!)`m!!(UM!!&kq!!&VjrojI/3e.~> +!B:&Xj5'b4!;QTo!:Bgd!;c`q!.k1@s8;ourrCFG!!)0]!!)cn!!)Bc!!)fo!!(dR!!)Ti!!(XN +!!)`m!!(UM!!&kq!!&Vjro4$s2h1~> +!BpJ^mHsrH!<)rp!87DP!.k1Bs8N)ts8N)Grr<&]rr<&nrr<&crr<&orr<&Srr<&irr<&Mrr<&m +rr<&Mrr<%qrr<%js8MBdeieN~> +!BU8[l0\ND!<)rp!87DP!.k1Bs8N)ts8N)Grr<&]rr<&nrr<&crr<&orr<&Srr<&irr<&Mrr<&m +rr<&Mrr<%qrr<%js8M6`c8pI~> +!B:&Xj6cm>!<)rp!87DP!.k1Bs8N)ts8N)Grr<&]rr<&nrr<&crr<&orr<&Srr<&irr<&Mrr<&m +rr<&Mrr<%qrr<%js8M$Z_`*)~> +!BpJ^mHsrH!;lfr!;ZZm!<)rs!!E6$!<<#urr;lrr;ZQmr;ZTnK`;#Pqu6Wrd/O(Gk5PD]fDbgN +h#@?So)A[if)G^Mb5VGAJcERdrp9a;4b*~> +!BU8[l0\ND!;lfr!;ZZm!<)rs!!E6$!<<#urr;lrr;ZQmr;ZTnK`;#Pqu6Wrd/O(Gk5PD]fDbgN +h#@?So)A[if)G^Mb5VGAJcERdrojI/3e.~> +!B:&Xj6cm>!;lfr!;ZZm!<)rs!!E6$!<<#urr;lrr;ZQmr;ZTnK`;#Pqu6Wrd/O(Gk5PD]fDbgN +h#@?So)A[if)G^Mb5VGAJcERdro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ps82lqs7QHms82lps7lZns7lYKrr<&ls8;rrs8N''rr<'! +rr<&us8N'!s8;rrs8N)ts8N)ts7u`ns8;rhrr<&ps8E#rs8N''rr<'!rr<&ss8E#ps7u`ns8;ou +rrDfnr;c`pq>ggNprrE#trrE&urr<'!r;c`pr;Zlu!<)ro!;ulr!;ZZn!;uls!!*&t!;lfp +!;QQo!;- +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ps82lqs7QHms82lps7lZns7lYKrr<&ls8;rrs8N''rr<'! +rr<&us8N'!s8;rrs8N)ts8N)ts7u`ns8;rhrr<&ps8E#rs8N''rr<'!rr<&ss8E#ps7u`ns8;ou +rrDfnr;c`pq>ggNprrE#trrE&urr<'!r;c`pr;Zlu!<)ro!;ulr!;ZZn!;uls!!*&t!;lfp +!;QQo!;- +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ps82lqs7QHms82lps7lZns7lYKrr<&ls8;rrs8N''rr<'! +rr<&us8N'!s8;rrs8N)ts8N)ts7u`ns8;rhrr<&ps8E#rs8N''rr<'!rr<&ss8E#ps7u`ns8;ou +rrDfnr;c`pq>ggNprrE#trrE&urr<'!r;c`pr;Zlu!<)ro!;ulr!;ZZn!;uls!!*&t!;lfp +!;QQo!;- +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ms8N)ss8Duus8E!"rr<&ss8N)qs8N)ps8N)ts8N(Qrr<&m +rr<&trr<&ts8N*!s8N*!rr<&us8N)trr<&trr<&srr<&rrr<&prr<&trr<&krr<&nrr<&rs8N*! +s8N*!rr<&rrr<&orr<&prr<&ts8N)orr<&trr<&qrr<&irr<&prr<&srr<&ts8N)trr<&trr<&t +s8N)rrr<&mrr<&qrr<&trr<&ss8N)trr<&trr<&trr<&prr<&lrr<&trr<&srr<&trr<&ss8N)t +rr<&ss8N)urr<&trr<&trr<&srr<&ts8N)trr<&ts8N)qrr<&qrr<&trr<&ss8N)trr<&trr<&t +s8N)9s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ms8N)ss8Duus8E!"rr<&ss8N)qs8N)ps8N)ts8N(Qrr<&m +rr<&trr<&ts8N*!s8N*!rr<&us8N)trr<&trr<&srr<&rrr<&prr<&trr<&krr<&nrr<&rs8N*! +s8N*!rr<&rrr<&orr<&prr<&ts8N)orr<&trr<&qrr<&irr<&prr<&srr<&ts8N)trr<&trr<&t +s8N)rrr<&mrr<&qrr<&trr<&ss8N)trr<&trr<&trr<&prr<&lrr<&trr<&srr<&trr<&ss8N)t +rr<&ss8N)urr<&trr<&trr<&srr<&ts8N)trr<&ts8N)qrr<&qrr<&trr<&ss8N)trr<&trr<&t +s8N)9s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ms8N)ss8Duus8E!"rr<&ss8N)qs8N)ps8N)ts8N(Qrr<&m +rr<&trr<&ts8N*!s8N*!rr<&us8N)trr<&trr<&srr<&rrr<&prr<&trr<&krr<&nrr<&rs8N*! +s8N*!rr<&rrr<&orr<&prr<&ts8N)orr<&trr<&qrr<&irr<&prr<&srr<&ts8N)trr<&trr<&t +s8N)rrr<&mrr<&qrr<&trr<&ss8N)trr<&trr<&trr<&prr<&lrr<&trr<&srr<&trr<&ss8N)t +rr<&ss8N)urr<&trr<&trr<&srr<&ts8N)trr<&ts8N)qrr<&qrr<&trr<&ss8N)trr<&trr<&t +s8N)9s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ms8N)ss8N*!s8N*!s8N)ss8N)qs8N)ps8;qKrr<&nrr<&r +rr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&rrr<&lrr<&nrr<&rrr<&urr<&u +rr<&rrr<&orr<&prr<&srr<&prr<&rrr<&rrr<&irr<&prr<&srr<&trr<&srr<&urr<&rrr<&r +rr<&mrr<&rrr<&rrr<&trr<&srr<&orr<&prr<&mrr<&rrr<&srrW9$rrDrr!!)or!!)ut!!)ip +!!)or!!)ut!!)rs!!)ut!!)rs!!)lq!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!'n9rp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ms8N)ss8N*!s8N*!s8N)ss8N)qs8N)ps8;qKrr<&nrr<&r +rr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&rrr<&lrr<&nrr<&rrr<&urr<&u +rr<&rrr<&orr<&prr<&srr<&prr<&rrr<&rrr<&irr<&prr<&srr<&trr<&srr<&urr<&rrr<&r +rr<&mrr<&rrr<&rrr<&trr<&srr<&orr<&prr<&mrr<&rrr<&srrW9$rrDrr!!)or!!)ut!!)ip +!!)or!!)ut!!)rs!!)ut!!)rs!!)lq!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!'n9rojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ms8N)ss8N*!s8N*!s8N)ss8N)qs8N)ps8;qKrr<&nrr<&r +rr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&rrr<&lrr<&nrr<&rrr<&urr<&u +rr<&rrr<&orr<&prr<&srr<&prr<&rrr<&rrr<&irr<&prr<&srr<&trr<&srr<&urr<&rrr<&r +rr<&mrr<&rrr<&rrr<&trr<&srr<&orr<&prr<&mrr<&rrr<&srrW9$rrDrr!!)or!!)ut!!)ip +!!)or!!)ut!!)rs!!)ut!!)rs!!)lq!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!'n9ro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8N*!s8N*!s8N)ss8N)qs8N)os8)eLrr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qs7lZfrr<&nrr<&rrr<&urr<&u +rr<&rrr<&orr<&os8E#lrr<&rrr<&rrr<&irr<&prr<&srr<&trr<&srr<&urr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&ts8)flrr<&ms7lZls8N)qrr<&rrr<&trr<&ps7lZms8E#os8E#mrr<&r +rr<&rrr<&trr<&srr<&ss8E#5s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8N*!s8N*!s8N)ss8N)qs8N)os8)eLrr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qs7lZfrr<&nrr<&rrr<&urr<&u +rr<&rrr<&orr<&os8E#lrr<&rrr<&rrr<&irr<&prr<&srr<&trr<&srr<&urr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&ts8)flrr<&ms7lZls8N)qrr<&rrr<&trr<&ps7lZms8E#os8E#mrr<&r +rr<&rrr<&trr<&srr<&ss8E#5s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8N*!s8N*!s8N)ss8N)qs8N)os8)eLrr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qs7lZfrr<&nrr<&rrr<&urr<&u +rr<&rrr<&orr<&os8E#lrr<&rrr<&rrr<&irr<&prr<&srr<&trr<&srr<&urr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&ts8)flrr<&ms7lZls8N)qrr<&rrr<&trr<&ps7lZms8E#os8E#mrr<&r +rr<&rrr<&trr<&srr<&ss8E#5s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N)ss8N)ss8N*!s8N*!s8N)ss8N)qs8N)ms82kNrr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&err<&nrr<&rrr<&urr<&u +rr<&rrr<&orr<&ls8N)orr<&rrr<&rrr<&irr<&prr<&srr<&trr<&srr<&urr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&urr<&srr<&prr<&mrr<&ks8N)qrr<&rrr<&trr<&prr<&is8N)os8N)p +rr<&rrr<&rrr<&trr<&srr<&ps8N)8s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N)ss8N)ss8N*!s8N*!s8N)ss8N)qs8N)ms82kNrr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&err<&nrr<&rrr<&urr<&u +rr<&rrr<&orr<&ls8N)orr<&rrr<&rrr<&irr<&prr<&srr<&trr<&srr<&urr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&urr<&srr<&prr<&mrr<&ks8N)qrr<&rrr<&trr<&prr<&is8N)os8N)p +rr<&rrr<&rrr<&trr<&srr<&ps8N)8s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N)ss8N)ss8N*!s8N*!s8N)ss8N)qs8N)ms82kNrr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&err<&nrr<&rrr<&urr<&u +rr<&rrr<&orr<&ls8N)orr<&rrr<&rrr<&irr<&prr<&srr<&trr<&srr<&urr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&urr<&srr<&prr<&mrr<&ks8N)qrr<&rrr<&trr<&prr<&is8N)os8N)p +rr<&rrr<&rrr<&trr<&srr<&ps8N)8s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8N*!s8N*!s8N)ss8N)qs8N)ts8N*!s8N)t +s8N(Prr<&rrrW9$rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!*#u!!)rs!!)or!!)lq!!)He!!)cn +!!)or!!*#u!!*#u!!)or!!)fo!!)ip!!)rs!!)ip!!)or!!)or!!)Ti!!)ip!!)rs!!)ut!!)rs +!!*#u!!)Zk!!)`m!!)or!!)or!!)ut!!)rs!!*#u!!)rs!!)ip!!)`m!!)]l!s&B$!;lcr!;lcr +!<)ot!;ZWp!;?Em!;uis!<)ot!;uis!;c]q!;lcr!;lcr!<)ot!;uis!<)ot!;uis!5ed8m/bd$ +J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8N*!s8N*!s8N)ss8N)qs8N)ts8N*!s8N)t +s8N(Prr<&rrrW9$rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!*#u!!)rs!!)or!!)lq!!)He!!)cn +!!)or!!*#u!!*#u!!)or!!)fo!!)ip!!)rs!!)ip!!)or!!)or!!)Ti!!)ip!!)rs!!)ut!!)rs +!!*#u!!)Zk!!)`m!!)or!!)or!!)ut!!)rs!!*#u!!)rs!!)ip!!)`m!!)]l!s&B$!;lcr!;lcr +!<)ot!;ZWp!;?Em!;uis!<)ot!;uis!;c]q!;lcr!;lcr!<)ot!;uis!<)ot!;uis!5ed8klK'j +J,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8N*!s8N*!s8N)ss8N)qs8N)ts8N*!s8N)t +s8N(Prr<&rrrW9$rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!*#u!!)rs!!)or!!)lq!!)He!!)cn +!!)or!!*#u!!*#u!!)or!!)fo!!)ip!!)rs!!)ip!!)or!!)or!!)Ti!!)ip!!)rs!!)ut!!)rs +!!*#u!!)Zk!!)`m!!)or!!)or!!)ut!!)rs!!*#u!!)rs!!)ip!!)`m!!)]l!s&B$!;lcr!;lcr +!<)ot!;ZWp!;?Em!;uis!<)ot!;uis!;c]q!;lcr!;lcr!<)ot!;uis!<)ot!;uis!5ed8irR%V +J,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7ZNns7lWps8;ots8Duus8Duus7lZns7lZps7lYJs8N)trr<&t +rr<&trr<&trr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&trr<&urr<&ts8N)lrr<&nrr<&r +rr<&urr<&urr<&rrr<&orr<&trr<&us8N)trr<&orr<&trr<&qrr<&irr<&prr<&ts8N)trr<&s +rr<&trr<&ts8N)rrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&urr<&ts8N)prr<&lrr<&ts8N)t +rr<&trr<&ss8N)trr<&srr<&orr<&ts8N)ts8N)trr<&ts8N)trr<&qrr<&qrr<&trr<&srr<&s +rr<&ts8N)trr<&rs8N)As8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7ZNns7lWps8;ots8Duus8Duus7lZns7lZps7lYJs8N)trr<&t +rr<&trr<&trr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&trr<&urr<&ts8N)lrr<&nrr<&r +rr<&urr<&urr<&rrr<&orr<&trr<&us8N)trr<&orr<&trr<&qrr<&irr<&prr<&ts8N)trr<&s +rr<&trr<&ts8N)rrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&urr<&ts8N)prr<&lrr<&ts8N)t +rr<&trr<&ss8N)trr<&srr<&orr<&ts8N)ts8N)trr<&ts8N)trr<&qrr<&qrr<&trr<&srr<&s +rr<&ts8N)trr<&rs8N)As8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7ZNns7lWps8;ots8Duus8Duus7lZns7lZps7lYJs8N)trr<&t +rr<&trr<&trr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&trr<&urr<&ts8N)lrr<&nrr<&r +rr<&urr<&urr<&rrr<&orr<&trr<&us8N)trr<&orr<&trr<&qrr<&irr<&prr<&ts8N)trr<&s +rr<&trr<&ts8N)rrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&urr<&ts8N)prr<&lrr<&ts8N)t +rr<&trr<&ss8N)trr<&srr<&orr<&ts8N)ts8N)trr<&ts8N)trr<&qrr<&qrr<&trr<&srr<&s +rr<&ts8N)trr<&rs8N)As8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7ZNns7lWps8;ots8Duus8Duus7lZms82lqs7u_Hs8;rps8;rr +s8E#us8N*!s8N*!rrE-"r;c`pr;Zp!!!)orr;ccqr;cQkq>gKoq>gQqrW)uurrE*!rrE*!q>gBl +r;cfr!gHn +r;ccqrW)rtrW)rt! +!BU8[l0\NM!!rT)rrE'!rr<&ts7ZNns7lWps8;ots8Duus8Duus7lZms82lqs7u_Hs8;rps8;rr +s8E#us8N*!s8N*!rrE-"r;c`pr;Zp!!!)orr;ccqr;cQkq>gKoq>gQqrW)uurrE*!rrE*!q>gBl +r;cfr!gHn +r;ccqrW)rtrW)rt! +!B:&Xj6cmG!!rT)rrE'!rr<&ts7ZNns7lWps8;ots8Duus8Duus7lZms82lqs7u_Hs8;rps8;rr +s8E#us8N*!s8N*!rrE-"r;c`pr;Zp!!!)orr;ccqr;cQkq>gKoq>gQqrW)uurrE*!rrE*!q>gBl +r;cfr!gHn +r;ccqrW)rtrW)rt! +!BpJ^mHsrH!.k0Brr<%Ms+144rr<%Ms5a4Zm/bd$J,~> +!BU8[l0\ND!.k0Brr<%Ms+144rr<%Ms5a4ZklK'jJ,~> +!B:&Xj6cm>!.k0Brr<%Ms+144rr<%Ms5a4ZirR%VJ,~> +!BpJ^mHsrH!.k0Brr<%Ms+144rr<%Ms5a4Zm/bd$J,~> +!BU8[l0\ND!.k0Brr<%Ms+144rr<%Ms5a4ZklK'jJ,~> +!B:&Xj6cm>!.k0Brr<%Ms+144rr<%Ms5a4ZirR%VJ,~> +!BpJ^m=G:gs8W*!!.k0$s5s=]!.k12s8MBdeieN~> +!BU8[l%/kcs8W*!!.k0$s5s=]!.k12s8M6`c8pI~> +!B:&Xj+75]s8W*!!.k0$s5s=]!.k12s8M$Z_`*)~> +!BpJ^m=G:grrE)t!.k0$s69R^!.k14s8MBdeieN~> +!BU8[l%/kcrrE)t!.k0$s69R^!.k14s8M6`c8pI~> +!B:&Xj+75]rrE)t!.k0$s69R^!.k14s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mC<2r!9F1[!;?Hm!.k0cs8N(Ms6p!f!4Mq+!.k10s8MBdeieN~> +!BU8[l+$cn!9F1[!;?Hm!.k0cs8N(Ms6p!f!4Mq+!.k10s8M6`c8pI~> +!B:&Xj1,-h!9F1[!;?Hm!.k0cs8N(Ms6p!f!4Mq+!.k10s8M$Z_`*)~> +!BpJ^mG7g=!9=+Z!9F1[!;?Hm!1!T_!!3*"d/O(Gj8T)ZjSo2[ir8uYpAY*m\GlO/ec,ULpAY*m +m/I%cJcFa0rp9a;4b*~> +!BU8[l.uC9!9=+Z!9F1[!;?Hm!1!T_!!3*"d/O(Gj8T)ZjSo2[ir8uYpAY*m\GlO/ec,ULpAY*m +m/I%cJcFa0rojI/3e.~> +!B:&Xj5'b3!9=+Z!9F1[!;?Hm!1!T_!!3*"d/O(Gj8T)ZjSo2[ir8uYpAY*m\GlO/ec,ULpAY*m +m/I%cJcFa0ro4$s2h1~> +!BpJ^mHsrH!<)rm!65'=!/ggV!<)rt!7:`G!9=(Z!9F.[!94"Y!;?Em!4`%/!7h)L!;?Em!:9^c +!.k10s8MBdeieN~> +!BU8[l0\ND!<)rm!65'=!/ggV!<)rt!7:`G!9=(Z!9F.[!94"Y!;?Em!4`%/!7h)L!;?Em!:9^c +!.k10s8M6`c8pI~> +!B:&Xj6cm>!<)rm!65'=!/ggV!<)rt!7:`G!9=(Z!9F.[!94"Y!;?Em!4`%/!7h)L!;?Em!:9^c +!.k10s8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rt!;ulq!<)rr!<<)u!<3#r!;ulq!<<)t!<3#q!<3#o!<)rq!;ulq!<<)t +!<)rr!;lfm!5&72!;lcr!7:`G!9=(Z!6"m;!3H2#!7h)L!9!kW!.k10s8MBdeieN~> +!BU8[l0\ND!;uls!<)rt!;ulq!<)rr!<<)u!<3#r!;ulq!<<)t!<3#q!<3#o!<)rq!;ulq!<<)t +!<)rr!;lfm!5&72!;lcr!7:`G!9=(Z!6"m;!3H2#!7h)L!9!kW!.k10s8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rt!;ulq!<)rr!<<)u!<3#r!;ulq!<<)t!<3#q!<3#o!<)rq!;ulq!<<)t +!<)rr!;lfm!5&72!;lcr!7:`G!9=(Z!6"m;!3H2#!7h)L!9!kW!.k10s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7ZNns82lps8;rts8;rts7lZps7lZns82lp +s8;rts8;rts7lZos7lZ-rr<&ls8;rrs8N''rr<'!rr<&us8N'!s8;rrs8N)ts8N)ts7u`ns8;rj +s8;ourrDusr;ccqrVururW)iqrW)iqrW)rtrW)osr;c`pq>gHnrW)iqrW)rtrW)osr;c]or;Zlu +!;HNl!;uls!!*&t!;lfp!!3*"q>^Hp!<;utqu?Tpr;Z`r!<<#ur;ZTnr;Z`rq>^Bnq#: +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7ZNns82lps8;rts8;rts7lZps7lZns82lp +s8;rts8;rts7lZos7lZ-rr<&ls8;rrs8N''rr<'!rr<&us8N'!s8;rrs8N)ts8N)ts7u`ns8;rj +s8;ourrDusr;ccqrVururW)iqrW)iqrW)rtrW)osr;c`pq>gHnrW)iqrW)rtrW)osr;c]or;Zlu +!;HNl!;uls!!*&t!;lfp!!3*"q>^Hp!<;utqu?Tpr;Z`r!<<#ur;ZTnr;Z`rq>^Bnq#: +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7ZNns82lps8;rts8;rts7lZps7lZns82lp +s8;rts8;rts7lZos7lZ-rr<&ls8;rrs8N''rr<'!rr<&us8N'!s8;rrs8N)ts8N)ts7u`ns8;rj +s8;ourrDusr;ccqrVururW)iqrW)iqrW)rtrW)osr;c`pq>gHnrW)iqrW)rtrW)osr;c]or;Zlu +!;HNl!;uls!!*&t!;lfp!!3*"q>^Hp!<;utqu?Tpr;Z`r!<<#ur;ZTnr;Z`rq>^Bnq#: +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ts8;rts8N)ss8N)rs8N)ts8N)us8N)t +s8N)ts8N)ms8N)rs8N)ts8N*!s8E#ss8E#us8N)ts8N)3rr<&mrr<&trr<&ts8N*!s8N*!rr<&u +s8N)trr<&trr<&srr<&rrr<&prr<&trr<&nrr<&ts8N)trr<&trr<&rs8N)urr<&qrr<&qrr<&s +rr<&trr<&trr<&qrr<&mrr<&qrr<&srr<&trr<&trr<&srr<&ts8N)orr<&trr<&ss8N)trr<&t +rr<&ts8N)os8N)trr<&trr<&trr<&rs8N)urr<&rrr<&mrr<&qrr<&trr<&prr<%Ms5O(Xm/bd$ +J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ts8;rts8N)ss8N)rs8N)ts8N)us8N)t +s8N)ts8N)ms8N)rs8N)ts8N*!s8E#ss8E#us8N)ts8N)3rr<&mrr<&trr<&ts8N*!s8N*!rr<&u +s8N)trr<&trr<&srr<&rrr<&prr<&trr<&nrr<&ts8N)trr<&trr<&rs8N)urr<&qrr<&qrr<&s +rr<&trr<&trr<&qrr<&mrr<&qrr<&srr<&trr<&trr<&srr<&ts8N)orr<&trr<&ss8N)trr<&t +rr<&ts8N)os8N)trr<&trr<&trr<&rs8N)urr<&rrr<&mrr<&qrr<&trr<&prr<%Ms5O(XklK'j +J,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ts8;rts8N)ss8N)rs8N)ts8N)us8N)t +s8N)ts8N)ms8N)rs8N)ts8N*!s8E#ss8E#us8N)ts8N)3rr<&mrr<&trr<&ts8N*!s8N*!rr<&u +s8N)trr<&trr<&srr<&rrr<&prr<&trr<&nrr<&ts8N)trr<&trr<&rs8N)urr<&qrr<&qrr<&s +rr<&trr<&trr<&qrr<&mrr<&qrr<&srr<&trr<&trr<&srr<&ts8N)orr<&trr<&ss8N)trr<&t +rr<&ts8N)os8N)trr<&trr<&trr<&rs8N)urr<&rrr<&mrr<&qrr<&trr<&prr<%Ms5O(XirR%V +J,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)us8E#ms8N)rs8N)ts8N)os8N)ts8N)m +s8N)rs8N)ts8N*!s8N)rs8N*!s8;r-rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&s +rr<&rrr<&qrr<&rrr<&prr<&rrr<&urr<&rrr<&srr<&lrr<&prr<&urr<&nrr<&qrr<&mrr<&p +rr<&urr<&trr<&rrr<&trr<&srr<&jrr<&srr<&srr<&urr<&rrr<&orr<&rrr<&prr<&rrr<&m +rr<&mrr<&lrr<&prr<%Ms5O(Xm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)us8E#ms8N)rs8N)ts8N)os8N)ts8N)m +s8N)rs8N)ts8N*!s8N)rs8N*!s8;r-rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&s +rr<&rrr<&qrr<&rrr<&prr<&rrr<&urr<&rrr<&srr<&lrr<&prr<&urr<&nrr<&qrr<&mrr<&p +rr<&urr<&trr<&rrr<&trr<&srr<&jrr<&srr<&srr<&urr<&rrr<&orr<&rrr<&prr<&rrr<&m +rr<&mrr<&lrr<&prr<%Ms5O(XklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)us8E#ms8N)rs8N)ts8N)os8N)ts8N)m +s8N)rs8N)ts8N*!s8N)rs8N*!s8;r-rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&s +rr<&rrr<&qrr<&rrr<&prr<&rrr<&urr<&rrr<&srr<&lrr<&prr<&urr<&nrr<&qrr<&mrr<&p +rr<&urr<&trr<&rrr<&trr<&srr<&jrr<&srr<&srr<&urr<&rrr<&orr<&rrr<&prr<&rrr<&m +rr<&mrr<&lrr<&prr<%Ms5O(XirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'!s7ZNms8N)ms8N)qs8N*!s8N)ts7lZns8N)ms8N)q +s8N*!s8N)us7ZNms8)f.rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&q +s7lZjrr<&rrr<&us7lZmrr<&lrr<&prr<&urr<&ss8)fmrr<&mrr<&prr<&urr<&ts7lZms8E#k +s8)forr<&srr<&urr<&rrr<&orr<&rrr<&us8)fnrr<&mrr<&mrr<&qs8)flrr<%Ms5O(Xm/bd$ +J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'!s7ZNms8N)ms8N)qs8N*!s8N)ts7lZns8N)ms8N)q +s8N*!s8N)us7ZNms8)f.rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&q +s7lZjrr<&rrr<&us7lZmrr<&lrr<&prr<&urr<&ss8)fmrr<&mrr<&prr<&urr<&ts7lZms8E#k +s8)forr<&srr<&urr<&rrr<&orr<&rrr<&us8)fnrr<&mrr<&mrr<&qs8)flrr<%Ms5O(XklK'j +J,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'!s7ZNms8N)ms8N)qs8N*!s8N)ts7lZns8N)ms8N)q +s8N*!s8N)us7ZNms8)f.rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&q +s7lZjrr<&rrr<&us7lZmrr<&lrr<&prr<&urr<&ss8)fmrr<&mrr<&prr<&urr<&ts7lZms8E#k +s8)forr<&srr<&urr<&rrr<&orr<&rrr<&us8)fnrr<&mrr<&mrr<&qs8)flrr<%Ms5O(XirR%V +J,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'!s7ZNms8N)ms8N)qs8N*!s8N)us7cTms8N)ms8N)q +s8N*!s8N)us7ZNks82l0rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&q +rr<&irr<&rrr<&urr<&lrr<&lrr<&orrN3#!;uis!;uis!;c]q!;?Em!;QQq!<3&srr<&is8N)o +rr<&srr<&srr<&srr<&urr<&rrr<&orr<&rrrW9$rrDus!!)or!!)`m!!)`m!!)or!!)rs!!)ip +!!%TMirB#F!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'!s7ZNms8N)ms8N)qs8N*!s8N)us7cTms8N)ms8N)q +s8N*!s8N)us7ZNks82l0rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&q +rr<&irr<&rrr<&urr<&lrr<&lrr<&orrN3#!;uis!;uis!;c]q!;?Em!;QQq!<3&srr<&is8N)o +rr<&srr<&srr<&srr<&urr<&rrr<&orr<&rrrW9$rrDus!!)or!!)`m!!)`m!!)or!!)rs!!)ip +!!%TMirB#B!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'!s7ZNms8N)ms8N)qs8N*!s8N)us7cTms8N)ms8N)q +s8N*!s8N)us7ZNks82l0rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&q +rr<&irr<&rrr<&urr<&lrr<&lrr<&orrN3#!;uis!;uis!;c]q!;?Em!;QQq!<3&srr<&is8N)o +rr<&srr<&srr<&srr<&urr<&rrr<&orr<&rrrW9$rrDus!!)or!!)`m!!)`m!!)or!!)rs!!)ip +!!%TMirB# +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ms8N)ms8N)ps8;rrs8N)ss8N)ts8N)ts8N)s +s8N)ps8;rrs8E#ns8N)ts8N)2rr<&rrrW9$rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!*#u!!)rs +!!)or!!)lq!!)Ti!!)or!!*#u!!)]l!!)]l!!)fo!W`6#r;Q`sr;Q`sqYpNqpAY*mq#:BqrrDus +!!)`m!!)rs!!)ip!!)rs!!)rs!!)rs!!*#u!!)or!!)fo!!)or!s&B$!;uis!;lcr!;?Em!;?Em +!;lcr!;uis!;ZWp!.k10s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ms8N)ms8N)ps8;rrs8N)ss8N)ts8N)ts8N)s +s8N)ps8;rrs8E#ns8N)ts8N)2rr<&rrrW9$rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!*#u!!)rs +!!)or!!)lq!!)Ti!!)or!!*#u!!)]l!!)]l!!)fo!W`6#r;Q`sr;Q`sqYpNqpAY*mq#:BqrrDus +!!)`m!!)rs!!)ip!!)rs!!)rs!!)rs!!*#u!!)or!!)fo!!)or!s&B$!;uis!;lcr!;?Em!;?Em +!;lcr!;uis!;ZWp!.k10s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ms8N)ms8N)ps8;rrs8N)ss8N)ts8N)ts8N)s +s8N)ps8;rrs8E#ns8N)ts8N)2rr<&rrrW9$rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!*#u!!)rs +!!)or!!)lq!!)Ti!!)or!!*#u!!)]l!!)]l!!)fo!W`6#r;Q`sr;Q`sqYpNqpAY*mq#:BqrrDus +!!)`m!!)rs!!)ip!!)rs!!)rs!!)rs!!*#u!!)or!!)fo!!)or!s&B$!;uis!;lcr!;?Em!;?Em +!;lcr!;uis!;ZWp!.k10s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7cTns7lZps7lZns7lZms8;rrs7ZNms7lZps7lZms8;rqs7lZo +s7lZ,s8N)trr<&trr<&trr<&trr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&trr<&urr<&t +s8N)orr<&ts8N)trr<&ts8N)srr<&lrr<&nrr<&rrr<&ts8N)qrr<&trr<&rrr<&nrr<&qrr<&t +s8N)ts8N)trr<&prr<&ts8N)srr<&srr<&trr<&ts8N)os8N)trr<&urr<&ts8N)rrr<&mrr<&t +rr<&rrr<&rrr<&ts8N)prr<%Ms5O(Xm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7cTns7lZps7lZns7lZms8;rrs7ZNms7lZps7lZms8;rqs7lZo +s7lZ,s8N)trr<&trr<&trr<&trr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&trr<&urr<&t +s8N)orr<&ts8N)trr<&ts8N)srr<&lrr<&nrr<&rrr<&ts8N)qrr<&trr<&rrr<&nrr<&qrr<&t +s8N)ts8N)trr<&prr<&ts8N)srr<&srr<&trr<&ts8N)os8N)trr<&urr<&ts8N)rrr<&mrr<&t +rr<&rrr<&rrr<&ts8N)prr<%Ms5O(XklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7cTns7lZps7lZns7lZms8;rrs7ZNms7lZps7lZms8;rqs7lZo +s7lZ,s8N)trr<&trr<&trr<&trr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&trr<&urr<&t +s8N)orr<&ts8N)trr<&ts8N)srr<&lrr<&nrr<&rrr<&ts8N)qrr<&trr<&rrr<&nrr<&qrr<&t +s8N)ts8N)trr<&prr<&ts8N)srr<&srr<&trr<&ts8N)os8N)trr<&urr<&ts8N)rrr<&mrr<&t +rr<&rrr<&rrr<&ts8N)prr<%Ms5O(XirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7u`ls8)frs7lZns7lZls8N)rs82iss8E#ss82lqs7lZls8N)p +s8)fqs7u`*s8;rps8;rrs8E#us8N*!s8N*!rrE-"r;c`pr;Zp!!!)orr;ccqr;cNjr;Zp!!!)ut +r;ccqq>gHnq>gBl!!)lqr;ZitrW)iqr;cfrq>gBl!!)ipr;c`p!^BnrVu]orVufr!<<#urr;fpJcFj3rp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ts7u`ls8)frs7lZns7lZls8N)rs82iss8E#ss82lqs7lZls8N)p +s8)fqs7u`*s8;rps8;rrs8E#us8N*!s8N*!rrE-"r;c`pr;Zp!!!)orr;ccqr;cNjr;Zp!!!)ut +r;ccqq>gHnq>gBl!!)lqr;ZitrW)iqr;cfrq>gBl!!)ipr;c`p!^BnrVu]orVufr!<<#urr;fpJcFj3rojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts7u`ls8)frs7lZns7lZls8N)rs82iss8E#ss82lqs7lZls8N)p +s8)fqs7u`*s8;rps8;rrs8E#us8N*!s8N*!rrE-"r;c`pr;Zp!!!)orr;ccqr;cNjr;Zp!!!)ut +r;ccqq>gHnq>gBl!!)lqr;ZitrW)iqr;cfrq>gBl!!)ipr;c`p!^BnrVu]orVufr!<<#urr;fpJcFj3ro4$s2h1~> +!BpJ^mHsrH!.k0Brr<%Ms/l;$!.k0@s8MBdeieN~> +!BU8[l0\ND!.k0Brr<%Ms/l;$!.k0@s8M6`c8pI~> +!B:&Xj6cm>!.k0Brr<%Ms/l;$!.k0@s8M$Z_`*)~> +!BpJ^mHsrH!.k0Brr<%Ms/l;$!.k0@s8MBdeieN~> +!BU8[l0\ND!.k0Brr<%Ms/l;$!.k0@s8M6`c8pI~> +!B:&Xj6cm>!.k0Brr<%Ms/l;$!.k0@s8M$Z_`*)~> +!BpJ^m=G:gs8W*!!.k0Prr<%Ms.02hm/bd$J,~> +!BU8[l%/kcs8W*!!.k0Prr<%Ms.02hklK'jJ,~> +!B:&Xj+75]s8W*!!.k0Prr<%Ms.02hirR%VJ,~> +!BpJ^m=G:grrE)t!.k0Ss8;qKs.B>jm/bd$J,~> +!BU8[l%/kcrrE)t!.k0Ss8;qKs.B>jklK'jJ,~> +!B:&Xj+75]rrE)t!.k0Ss8;qKs.B>jirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mFM=;!.k0$s+13$s+14@s8MBdeieN~> +!BU8[l.5n7!.k0$s+13$s+14@s8M6`c8pI~> +!B:&Xj4=81!.k0$s+13$s+14@s8M$Z_`*)~> +!BpJ^mFD4:!9F.[!94"Y!;?Em!.k0$s+13$s1JC2m/bd$J,~> +!BU8[l.,e6!9F.[!94"Y!;?Em!.k0$s+13$s1JC2klK'jJ,~> +!B:&Xj44/0!9F.[!94"Y!;?Em!.k0$s+13$s1JC2irR%VJ,~> +!BpJ^mFD4:!9F.[!94"Y!;?Em!.k0$s+13$s1JC2m/bd$J,~> +!BU8[l.,e6!9F.[!94"Y!;?Em!.k0$s+13$s1JC2klK'jJ,~> +!B:&Xj44/0!9F.[!94"Y!;?Em!.k0$s+13$s1JC2irR%VJ,~> +!BpJ^mFD4:!6"m;!.k0$s+13$s02P&m/bd$J,~> +!BU8[l.,e6!6"m;!.k0$s+13$s02P&klK'jJ,~> +!B:&Xj44/0!6"m;!.k0$s+13$s02P&irR%VJ,~> +!BpJ^mFqU=!!3*"r;Z]qr;Z`r!<<#uqu?Wqqu?Wqrr;rtrVufrqu?Kmr;Z`rqu?Wqrr;rtrVufr +qZ$Ko!WN.Ns+13$s+14.s8MBdeieN~> +!BU8[l.Z19!!3*"r;Z]qr;Z`r!<<#uqu?Wqqu?Wqrr;rtrVufrqu?Kmr;Z`rqu?Wqrr;rtrVufr +qZ$Ko!WN.Ns+13$s+14.s8M6`c8pI~> +!B:&Xj4aP3!!3*"r;Z]qr;Z`r!<<#uqu?Wqqu?Wqrr;rtrVufrqu?Kmr;Z`rqu?Wqrr;rtrVufr +qZ$Ko!WN.Ns+13$s+14.s8M$Z_`*)~> +!BpJ^mG%X@!<)rt!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!;uis!<)ot!<)ot!;c]q!;?Em!;c]q +!;uis!<)ot!<)ot!;uis!<)rt!.k0$s+13$s5 +!BU8[l.c4 +!B:&Xj4jS6!<)rt!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!;uis!<)ot!<)ot!;c]q!;?Em!;c]q +!;uis!<)ot!<)ot!;uis!<)rt!.k0$s+13$s5 +!BpJ^mG.^A!;lcr!<2uu!;lcr!;uis!;6?l!;ZWp!<2uu!;HKn!;c]q!;?Em!;ZWp!<2uu!<)ot +!;lcr!<)ot!;uis!.k0$s+13$s5 +!BU8[l.l:=!;lcr!<2uu!;lcr!;uis!;6?l!;ZWp!<2uu!;HKn!;c]q!;?Em!;ZWp!<2uu!<)ot +!;lcr!<)ot!;uis!.k0$s+13$s5 +!B:&Xj4sY7!;lcr!<2uu!;lcr!;uis!;6?l!;ZWp!<2uu!;HKn!;c]q!;?Em!;ZWp!<2uu!<)ot +!;lcr!<)ot!;uis!.k0$s+13$s5 +!BpJ^mG.^A!;lcr!<3#o!;uis!;6?l!;ZWp!<2uu!;ulo!;c]q!;?Em!;ZWp!<2uu!<)rn!;ulr +!.k0$s+13$s5!_Sm/bd$J,~> +!BU8[l.l:=!;lcr!<3#o!;uis!;6?l!;ZWp!<2uu!;ulo!;c]q!;?Em!;ZWp!<2uu!<)rn!;ulr +!.k0$s+13$s5!_SklK'jJ,~> +!B:&Xj4sY7!;lcr!<3#o!;uis!;6?l!;ZWp!<2uu!;ulo!;c]q!;?Em!;ZWp!<2uu!<)rn!;ulr +!.k0$s+13$s5!_SirR%VJ,~> +!BpJ^mG.^A!;lcr!<2uu!;6?l!;6?l!;QQq!<3&srr<&srr<&qrr<&mrr<&orrN3#!;uis!:p0i +!.k0$s+13$s53kUm/bd$J,~> +!BU8[l.l:=!;lcr!<2uu!;6?l!;6?l!;QQq!<3&srr<&srr<&qrr<&mrr<&orrN3#!;uis!:p0i +!.k0$s+13$s53kUklK'jJ,~> +!B:&Xj4sY7!;lcr!<2uu!;6?l!;6?l!;QQq!<3&srr<&srr<&qrr<&mrr<&orrN3#!;uis!:p0i +!.k0$s+13$s53kUirR%VJ,~> +!BpJ^mG.^A!;lcr!<2uu!;6?l!;6?l!;QQq!<3&srr<&srr<&qrr<&mrr<&orrN3#!;uis!;?Em +!;uis!.k0$s+13$s5 +!BU8[l.l:=!;lcr!<2uu!;6?l!;6?l!;QQq!<3&srr<&srr<&qrr<&mrr<&orrN3#!;uis!;?Em +!;uis!.k0$s+13$s5 +!B:&Xj4sY7!;lcr!<2uu!;6?l!;6?l!;QQq!<3&srr<&srr<&qrr<&mrr<&orrN3#!;uis!;?Em +!;uis!.k0$s+13$s5 +!BpJ^mG%X@!<)rt!<)ot!<)rt!;uis!;6?l!;HKn!;lcr!<)rt!;c]q!<)ot!;lcr!;HKn!;c]q +!<)rt!<)rt!<)ot!;lfr!.k0$s+13$s60L^m/bd$J,~> +!BU8[l.c4 +!B:&Xj4jS6!<)rt!<)ot!<)rt!;uis!;6?l!;HKn!;lcr!<)rt!;c]q!<)ot!;lcr!;HKn!;c]q +!<)rt!<)rt!<)ot!;lfr!.k0$s+13$s60L^irR%VJ,~> +!BpJ^mFqU=!!<0#!<)rr!;uln!;uln!;c]q!;c`o!!*&u!;lfp!<)ro!;c]q!;ZZn!;lcs!<;ut +qZ$QqJcC<$JcC<$kl:YL!S0Da~> +!BU8[l.Z19!!<0#!<)rr!;uln!;uln!;c]q!;c`o!!*&u!;lfp!<)ro!;c]q!;ZZn!;lcs!<;ut +qZ$QqJcC<$JcC<$kl:YH!R<`V~> +!B:&Xj4aP3!!<0#!<)rr!;uln!;uln!;c]q!;c`o!!*&u!;lfp!<)ro!;c]q!;ZZn!;lcs!<;ut +qZ$QqJcC<$JcC<$kl:YB!Q-jH~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mD],*!6tQA!.k1)s8N(Ms5O(Y!6Y?A!:9aa!.k1%s8MBdeieN~> +!BU8[l,E]&!6tQA!.k1)s8N(Ms5O(Y!6Y?A!:9aa!.k1%s8M6`c8pI~> +!B:&Xj2M&u!6tQA!.k1)s8N(Ms5O(Y!6Y?A!:9aa!.k1%s8M$Z_`*)~> +!BpJ^mG.a;!:p0i!6tQA!13`^!:^!g!8[YT!9O4\!;?Em!8[YT!9sO^!:9^c!94%Y!6P6@!9sL` +!;HKn!.k10s8MBdeieN~> +!BU8[l.l=7!:p0i!6tQA!13`^!:^!g!8[YT!9O4\!;?Em!8[YT!9sO^!:9^c!94%Y!6P6@!9sL` +!;HKn!.k10s8M6`c8pI~> +!B:&Xj4s\1!:p0i!6tQA!13`^!:^!g!8[YT!9O4\!;?Em!8[YT!9sO^!:9^c!94%Y!6P6@!9sL` +!;HKn!.k10s8M$Z_`*)~> +!BpJ^mHsrH!;ulm!:p0i!6Y?A!0mK`!:Bdd!8[YT!9O4\!;?Em!8[YT!9X:]!:9^c!94%Y!6P6@ +!9sL`!;HKn!.k10s8MBdeieN~> +!BU8[l0\ND!;ulm!:p0i!6Y?A!0mK`!:Bdd!8[YT!9O4\!;?Em!8[YT!9X:]!:9^c!94%Y!6P6@ +!9sL`!;HKn!.k10s8M6`c8pI~> +!B:&Xj6cm>!;ulm!:p0i!6Y?A!0mK`!:Bdd!8[YT!9O4\!;?Em!8[YT!9X:]!:9^c!94%Y!6P6@ +!9sL`!;HKn!.k10s8M$Z_`*)~> +!BpJ^mHsrH!;ZZp!;ulr!!*&t!<3#o!;lfp!;lfp!!*&u!!*&t!<<)u!<)rp!;c`q!;c`l!2BJn +!:Bdd!8[YT!9O4\!7CfH!9a@`!<3&Crr<&@rr<&`rr<%Ms4@;Mm/bd$J,~> +!BU8[l0\ND!;ZZp!;ulr!!*&t!<3#o!;lfp!;lfp!!*&u!!*&t!<<)u!<)rp!;c`q!;c`l!2BJn +!:Bdd!8[YT!9O4\!7CfH!9a@`!<3&Crr<&@rr<&`rr<%Ms4@;MklK'jJ,~> +!B:&Xj6cm>!;ZZp!;ulr!!*&t!<3#o!;lfp!;lfp!!*&u!!*&t!<<)u!<)rp!;c`q!;c`l!2BJn +!:Bdd!8[YT!9O4\!7CfH!9a@`!<3&Crr<&@rr<&`rr<%Ms4@;MirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#os8N)ss7cTos7lZns7lZos7cQos7ZNns7lZls8N)rs7lYhrr<&r +s8N'!s8;rqs7u`ps8Duus8E#qs8;ros8;ourrE&urrE#trrDusr;Zlu!<)ro!;ulr!;ZZn!;uls +!!*&t!;HNi!;ulq!;-9m!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&qrr<&ps8;ourrDfn +r;Zlu!<3#t!<3#t!"&Z*!<3$!s8N'!rVllus8;rps8;rmrr<&ps8E#os8;ourr@WMnGiLT!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#os8N)ss7cTos7lZns7lZos7cQos7ZNns7lZls8N)rs7lYhrr<&r +s8N'!s8;rqs7u`ps8Duus8E#qs8;ros8;ourrE&urrE#trrDusr;Zlu!<)ro!;ulr!;ZZn!;uls +!!*&t!;HNi!;ulq!;-9m!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&qrr<&ps8;ourrDfn +r;Zlu!<3#t!<3#t!"&Z*!<3$!s8N'!rVllus8;rps8;rmrr<&ps8E#os8;ourr@WMnGiLP!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#os8N)ss7cTos7lZns7lZos7cQos7ZNns7lZls8N)rs7lYhrr<&r +s8N'!s8;rqs7u`ps8Duus8E#qs8;ros8;ourrE&urrE#trrDusr;Zlu!<)ro!;ulr!;ZZn!;uls +!!*&t!;HNi!;ulq!;-9m!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&qrr<&ps8;ourrDfn +r;Zlu!<3#t!<3#t!"&Z*!<3$!s8N'!rVllus8;rps8;rmrr<&ps8E#os8;ourr@WMnGiLJ!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ps8N)rs8E#ts8N)ts8N)qs8E#ss8Duus8E#ts8E#ss8;rts8N*! +s8N)ts8N)rs8N)rs8N)ts8N(nrr<&qs8N)trr<&rrr<&os8N)urr<&trr<&trr<&srr<&ts8N)t +rr<&srr<&trr<&ts8N)rrr<&mrr<&qrr<&trr<&ss8N)trr<&mrr<&prr<&trr<&mrr<&urr<&s +rr<&trr<&prr<&qrr<&trr<&ts8N*!s8N*!rr<&jrr<&ts8N)orr<&ts8N)trr<&srr<&us8N*! +s8N*!rr<&us8N)trr<&trr<&trr<&prr<&nrr<&qrr<&ts8N(Ms7$'fm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ps8N)rs8E#ts8N)ts8N)qs8E#ss8Duus8E#ts8E#ss8;rts8N*! +s8N)ts8N)rs8N)rs8N)ts8N(nrr<&qs8N)trr<&rrr<&os8N)urr<&trr<&trr<&srr<&ts8N)t +rr<&srr<&trr<&ts8N)rrr<&mrr<&qrr<&trr<&ss8N)trr<&mrr<&prr<&trr<&mrr<&urr<&s +rr<&trr<&prr<&qrr<&trr<&ts8N*!s8N*!rr<&jrr<&ts8N)orr<&ts8N)trr<&srr<&us8N*! +s8N*!rr<&us8N)trr<&trr<&trr<&prr<&nrr<&qrr<&ts8N(Ms7$'fklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ps8N)rs8E#ts8N)ts8N)qs8E#ss8Duus8E#ts8E#ss8;rts8N*! +s8N)ts8N)rs8N)rs8N)ts8N(nrr<&qs8N)trr<&rrr<&os8N)urr<&trr<&trr<&srr<&ts8N)t +rr<&srr<&trr<&ts8N)rrr<&mrr<&qrr<&trr<&ss8N)trr<&mrr<&prr<&trr<&mrr<&urr<&s +rr<&trr<&prr<&qrr<&trr<&ts8N*!s8N*!rr<&jrr<&ts8N)orr<&ts8N)trr<&srr<&us8N*! +s8N*!rr<&us8N)trr<&trr<&trr<&prr<&nrr<&qrr<&ts8N(Ms7$'firR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)qs8N)rs8N'#rr<&ss8N)ts8E#js8N)r +s8N)rs8;qhrr<&qrr<&srr<&rrr<&orr<&prr<&rrr<&urr<&rrr<&trr<&srr<&urr<&rrr<&r +rr<&mrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&nrr<&urr<&rrrW9$rrDio!!)or!!)or +!!*#u!!*#u!!*#u!!)Wj!!)rs!!)fo!!)rs!!)ut!!)rs!!*#u!!*#u!!*#u!!*#u!!)or!s&B$ +!;lcr!;c]q!;HKn!;lcr!;lcr!.k1>s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)qs8N)rs8N'#rr<&ss8N)ts8E#js8N)r +s8N)rs8;qhrr<&qrr<&srr<&rrr<&orr<&prr<&rrr<&urr<&rrr<&trr<&srr<&urr<&rrr<&r +rr<&mrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&nrr<&urr<&rrrW9$rrDio!!)or!!)or +!!*#u!!*#u!!*#u!!)Wj!!)rs!!)fo!!)rs!!)ut!!)rs!!*#u!!*#u!!*#u!!*#u!!)or!s&B$ +!;lcr!;c]q!;HKn!;lcr!;lcr!.k1>s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)qs8N)rs8N'#rr<&ss8N)ts8E#js8N)r +s8N)rs8;qhrr<&qrr<&srr<&rrr<&orr<&prr<&rrr<&urr<&rrr<&trr<&srr<&urr<&rrr<&r +rr<&mrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&nrr<&urr<&rrrW9$rrDio!!)or!!)or +!!*#u!!*#u!!*#u!!)Wj!!)rs!!)fo!!)rs!!)ut!!)rs!!*#u!!*#u!!*#u!!*#u!!)or!s&B$ +!;lcr!;c]q!;HKn!;lcr!;lcr!.k1>s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N)ts8N)ps7lZls8N)q +s8)eirr<&qrr<&srr<&rrr<&orr<&prr<&rrr<&urr<&rrr<&trr<&srr<&urr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&orr<&srr<&rs8N)nrr<&rrr<&rrr<&urr<&urr<&u +rr<&is8E#js8E#orr<&urr<&trr<&urr<&urr<&urr<&rrrW9$rrDrr!!)lq!!)cn!!)or!!%TM +l2UbM!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N)ts8N)ps7lZls8N)q +s8)eirr<&qrr<&srr<&rrr<&orr<&prr<&rrr<&urr<&rrr<&trr<&srr<&urr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&orr<&srr<&rs8N)nrr<&rrr<&rrr<&urr<&urr<&u +rr<&is8E#js8E#orr<&urr<&trr<&urr<&urr<&urr<&rrrW9$rrDrr!!)lq!!)cn!!)or!!%TM +l2UbI!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N)ts8N)ps7lZls8N)q +s8)eirr<&qrr<&srr<&rrr<&orr<&prr<&rrr<&urr<&rrr<&trr<&srr<&urr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&orr<&srr<&rs8N)nrr<&rrr<&rrr<&urr<&urr<&u +rr<&is8E#js8E#orr<&urr<&trr<&urr<&urr<&urr<&rrrW9$rrDrr!!)lq!!)cn!!)or!!%TM +l2UbC!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N)ts8N)qs7cTks8N)o +s82kkrr<&qrr<&srr<&rrr<&orr<&prr<&rrr<&urr<&rrr<&trr<&srr<&urr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&os7u`ms8N)nrr<&rrr<&rrr<&urr<&urr<&urr<&f +s8N)js8N)rrr<&urr<&trr<&urr<&urr<&urr<&rrrW9$rrDrr!!)lq!!)cn!!)or!!%TMl2UbM +!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N)ts8N)qs7cTks8N)o +s82kkrr<&qrr<&srr<&rrr<&orr<&prr<&rrr<&urr<&rrr<&trr<&srr<&urr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&os7u`ms8N)nrr<&rrr<&rrr<&urr<&urr<&urr<&f +s8N)js8N)rrr<&urr<&trr<&urr<&urr<&urr<&rrrW9$rrDrr!!)lq!!)cn!!)or!!%TMl2UbI +!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N)ts8N)qs7cTks8N)o +s82kkrr<&qrr<&srr<&rrr<&orr<&prr<&rrr<&urr<&rrr<&trr<&srr<&urr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&os7u`ms8N)nrr<&rrr<&rrr<&urr<&urr<&urr<&f +s8N)js8N)rrr<&urr<&trr<&urr<&urr<&urr<&rrrW9$rrDrr!!)lq!!)cn!!)or!!%TMl2UbC +!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)ts8N'!s8E#os8E#ts8E#ss8N)qs8N)s +s8N)rs8N)rs8N)ts8N(nrr<&qrr<&srr<&rrr<&orr<&prr<&rrr<&urr<&rrr<&trr<&srr<&u +rr<&krr<&mrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&prr<&qrr<&trrW9$rrDio!!)or +!!)or!!*#u!!*#u!!*#u!!)Wj!!)rs!!)fo!!)rs!!)or!W`6#r;Q`srr2rurr2rurr2ruqu6`u +s8N)rrr<&qrr<&nrr<&rrr<%Ms69R_m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)ts8N'!s8E#os8E#ts8E#ss8N)qs8N)s +s8N)rs8N)rs8N)ts8N(nrr<&qrr<&srr<&rrr<&orr<&prr<&rrr<&urr<&rrr<&trr<&srr<&u +rr<&krr<&mrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&prr<&qrr<&trrW9$rrDio!!)or +!!)or!!*#u!!*#u!!*#u!!)Wj!!)rs!!)fo!!)rs!!)or!W`6#r;Q`srr2rurr2rurr2ruqu6`u +s8N)rrr<&qrr<&nrr<&rrr<%Ms69R_klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)ts8N'!s8E#os8E#ts8E#ss8N)qs8N)s +s8N)rs8N)rs8N)ts8N(nrr<&qrr<&srr<&rrr<&orr<&prr<&rrr<&urr<&rrr<&trr<&srr<&u +rr<&krr<&mrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&prr<&qrr<&trrW9$rrDio!!)or +!!)or!!*#u!!*#u!!*#u!!)Wj!!)rs!!)fo!!)rs!!)or!W`6#r;Q`srr2rurr2rurr2ruqu6`u +s8N)rrr<&qrr<&nrr<&rrr<%Ms69R_irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZps8;rts8;rss7lZps7lZos7lZps7lZos7ZNns7lZos7lYh +rr<&qrr<&srr<&rrr<&trr<&trr<&orr<&trr<&srr<&ts8N)trr<&ts8N)trr<&ts8N)rrr<&t +rr<&rrr<&qrr<&trr<&srr<&srr<&mrr<&trr<&urr<&trr<&orr<&qrr<&urr<&trr<&prr<&q +rr<&trr<&trr<&urr<&urr<&js8N)trr<&os8N)trr<&rrrN3#!;uis!<2uu!<2uu!<3#u!<)ot +!<)ot!<)ot!;ZWp!;HKn!;c]q!<)rt!.k1>s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZps8;rts8;rss7lZps7lZos7lZps7lZos7ZNns7lZos7lYh +rr<&qrr<&srr<&rrr<&trr<&trr<&orr<&trr<&srr<&ts8N)trr<&ts8N)trr<&ts8N)rrr<&t +rr<&rrr<&qrr<&trr<&srr<&srr<&mrr<&trr<&urr<&trr<&orr<&qrr<&urr<&trr<&prr<&q +rr<&trr<&trr<&urr<&urr<&js8N)trr<&os8N)trr<&rrrN3#!;uis!<2uu!<2uu!<3#u!<)ot +!<)ot!<)ot!;ZWp!;HKn!;c]q!<)rt!.k1>s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZps8;rts8;rss7lZps7lZos7lZps7lZos7ZNns7lZos7lYh +rr<&qrr<&srr<&rrr<&trr<&trr<&orr<&trr<&srr<&ts8N)trr<&ts8N)trr<&ts8N)rrr<&t +rr<&rrr<&qrr<&trr<&srr<&srr<&mrr<&trr<&urr<&trr<&orr<&qrr<&urr<&trr<&prr<&q +rr<&trr<&trr<&urr<&urr<&js8N)trr<&os8N)trr<&rrrN3#!;uis!<2uu!<2uu!<3#u!<)ot +!<)ot!<)ot!;ZWp!;HKn!;c]q!<)rt!.k1>s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7lZps8;rts8;rrs82los8)fps8;p#rr<'!s7lZns82iss8E#u +s7lZos7u_ks7u`ps8E#ts8E#qs8;rss7u`ms8;ros8;p!rr<&ts8;p!rr<&ts8;rms8;rrs7u`n +s8;rqs8E#ts8E#ls8;rqs8;rms8;rss8;ots8E#us8E#ss7u`ns8;rrs8E#us8N*!s8N)krrE-" +r;cTl! +!BU8[l0\NM!!rT)rrE'!rr<&ss7lZps8;rts8;rrs82los8)fps8;p#rr<'!s7lZns82iss8E#u +s7lZos7u_ks7u`ps8E#ts8E#qs8;rss7u`ms8;ros8;p!rr<&ts8;p!rr<&ts8;rms8;rrs7u`n +s8;rqs8E#ts8E#ls8;rqs8;rms8;rss8;ots8E#us8E#ss7u`ns8;rrs8E#us8N*!s8N)krrE-" +r;cTl! +!B:&Xj6cmG!!rT)rrE'!rr<&ss7lZps8;rts8;rrs82los8)fps8;p#rr<'!s7lZns82iss8E#u +s7lZos7u_ks7u`ps8E#ts8E#qs8;rss7u`ms8;ros8;p!rr<&ts8;p!rr<&ts8;rms8;rrs7u`n +s8;rqs8E#ts8E#ls8;rqs8;rms8;rss8;ots8E#us8E#ss7u`ns8;rrs8E#us8N*!s8N)krrE-" +r;cTl! +!BpJ^mHsrH!6Y?A!.k0$s+14Crr<%Ms/Z2!m/bd$J,~> +!BU8[l0\ND!6Y?A!.k0$s+14Crr<%Ms/Z2!klK'jJ,~> +!B:&Xj6cm>!6Y?A!.k0$s+14Crr<%Ms/Z2!irR%VJ,~> +!BpJ^mHsrH!6bEA!.k0$s+14Drr<%Ms/Q+um/bd$J,~> +!BU8[l0\ND!6bEA!.k0$s+14Drr<%Ms/Q+uklK'jJ,~> +!B:&Xj6cm>!6bEA!.k0$s+14Drr<%Ms/Q+uirR%VJ,~> +!BpJ^mB?Qe!.k0$s+14Crr<%Ms/Q+um/bd$J,~> +!BU8[l*(-a!.k0$s+14Crr<%Ms/Q+uklK'jJ,~> +!B:&Xj0/L[!.k0$s+14Crr<%Ms/Q+uirR%VJ,~> +!BpJ^mB?Qf!.k0$s+14Es82kJs/Z2!m/bd$J,~> +!BU8[l*(-b!.k0$s+14Es82kJs/Z2!klK'jJ,~> +!B:&Xj0/L\!.k0$s+14Es82kJs/Z2!irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mF_F=!:Bdd!6bBB!.k0$s+13$s1A=1m/bd$J,~> +!BU8[l.H"9!:Bdd!6bBB!.k0$s+13$s1A=1klK'jJ,~> +!B:&Xj4OA3!:Bdd!6bBB!.k0$s+13$s1A=1irR%VJ,~> +!BpJ^mF_F=!:Bdd!6bBB!.k0$s+13$s1A=1m/bd$J,~> +!BU8[l.H"9!:Bdd!6bBB!.k0$s+13$s1A=1klK'jJ,~> +!B:&Xj4OA3!:Bdd!6bBB!.k0$s+13$s1A=1irR%VJ,~> +!BpJ^mDJr(!6bBB!.k0$s+13$s1A=1m/bd$J,~> +!BU8[l,3N$!6bBB!.k0$s+13$s1A=1klK'jJ,~> +!B:&Xj2:ls!6bBB!.k0$s+13$s1A=1irR%VJ,~> +!BpJ^mFqU>!;lfr!!*&t!;uln!;ulq!;c`o!!N<%!<<)u!!*&u!;lfp!;lfm!;ulq!;ulr!!*&u +!.k0$s+13$s4%)Jm/bd$J,~> +!BU8[l.Z1:!;lfr!!*&t!;uln!;ulq!;c`o!!N<%!<<)u!!*&u!;lfp!;lfm!;ulq!;ulr!!*&u +!.k0$s+13$s4%)JklK'jJ,~> +!B:&Xj4aP4!;lfr!!*&t!;uln!;ulq!;c`o!!N<%!<<)u!!*&u!;lfp!;lfm!;ulq!;ulr!!*&u +!.k0$s+13$s4%)JirR%VJ,~> +!BpJ^mF_F=!;c`q!<)ot!;lcr!;ZWp!<)ot!;uis!<)rt!;uls!<2uu!<)ot!<)ot!;c]q!;ZWp +!<)ot!;lfr!<2uu!.k0$s+13$s4./Km/bd$J,~> +!BU8[l.H"9!;c`q!<)ot!;lcr!;ZWp!<)ot!;uis!<)rt!;uls!<2uu!<)ot!<)ot!;c]q!;ZWp +!<)ot!;lfr!<2uu!.k0$s+13$s4./KklK'jJ,~> +!B:&Xj4OA3!;c`q!<)ot!;lcr!;ZWp!<)ot!;uis!<)rt!;uls!<2uu!<)ot!<)ot!;c]q!;ZWp +!<)ot!;lfr!<2uu!.k0$s+13$s4./KirR%VJ,~> +!BpJ^mF_F=!;c]q!;uis!;lcr!;c]q!;lcr!<2uu!;lcr!;uis!;$3j!;c]q!;c]q!;lcr!;uis +!.k0$s+13$s3UfFm/bd$J,~> +!BU8[l.H"9!;c]q!;uis!;lcr!;c]q!;lcr!<2uu!;lcr!;uis!;$3j!;c]q!;c]q!;lcr!;uis +!.k0$s+13$s3UfFklK'jJ,~> +!B:&Xj4OA3!;c]q!;uis!;lcr!;c]q!;lcr!<2uu!;lcr!;uis!;$3j!;c]q!;c]q!;lcr!;uis +!.k0$s+13$s3UfFirR%VJ,~> +!BpJ^mF_F=!;c]q!;uis!;lcr!;c`k!<2uu!;lcr!;uis!;QTk!;c]q!;c]q!;lcr!;uis!.k0$ +s+13$s3UfFm/bd$J,~> +!BU8[l.H"9!;c]q!;uis!;lcr!;c`k!<2uu!;lcr!;uis!;QTk!;c]q!;c]q!;lcr!;uis!.k0$ +s+13$s3UfFklK'jJ,~> +!B:&Xj4OA3!;c]q!;uis!;lcr!;c`k!<2uu!;lcr!;uis!;QTk!;c]q!;c]q!;lcr!;uis!.k0$ +s+13$s3UfFirR%VJ,~> +!BpJ^mF_F=!;c]q!;uis!;lcr!;c]q!;HKn!;lcr!;uis!;ZWp!;uis!;c]q!;c]q!;lcr!;uis +!.k0$s+13$s3UfFm/bd$J,~> +!BU8[l.H"9!;c]q!;uis!;lcr!;c]q!;HKn!;lcr!;uis!;ZWp!;uis!;c]q!;c]q!;lcr!;uis +!.k0$s+13$s3UfFklK'jJ,~> +!B:&Xj4OA3!;c]q!;uis!;lcr!;c]q!;HKn!;lcr!;uis!;ZWp!;uis!;c]q!;c]q!;lcr!;uis +!.k0$s+13$s3UfFirR%VJ,~> +!BpJ^mF_F=!;c]q!;uis!;lcr!;c]q!;HKn!;lcr!;uis!;ZWp!;uis!;c]q!;c]q!;lcr!;uis +!.k0$s+13$s3UfFm/bd$J,~> +!BU8[l.H"9!;c]q!;uis!;lcr!;c]q!;HKn!;lcr!;uis!;ZWp!;uis!;c]q!;c]q!;lcr!;uis +!.k0$s+13$s3UfFklK'jJ,~> +!B:&Xj4OA3!;c]q!;uis!;lcr!;c]q!;HKn!;lcr!;uis!;ZWp!;uis!;c]q!;c]q!;lcr!;uis +!.k0$s+13$s3UfFirR%VJ,~> +!BpJ^mF_F=!;c]q!;uis!;lcr!<)ot!<2uu!<)rt!<)ot!<)rt!;uis!;ZWp!<)rt!;c]q!<)ot +!<2uu!<)ot!;lcr!;?Hm!.k0$s+13$s5!_Sm/bd$J,~> +!BU8[l.H"9!;c]q!;uis!;lcr!<)ot!<2uu!<)rt!<)ot!<)rt!;uis!;ZWp!<)rt!;c]q!<)ot +!<2uu!<)ot!;lcr!;?Hm!.k0$s+13$s5!_SklK'jJ,~> +!B:&Xj4OA3!;c]q!;uis!;lcr!<)ot!<2uu!<)rt!<)ot!<)rt!;uis!;ZWp!<)rt!;c]q!<)ot +!<2uu!<)ot!;lcr!;?Hm!.k0$s+13$s5!_SirR%VJ,~> +!BpJ^mG%[;!<3#t!<3#t!;lfp!;ulq!;c`o!!3*"rr;fpr;Z]q!<<#uqu?Tpr;Z]qr;ZTnqZ$Qq +JcC<$JcC<$h>dKA!S0Da~> +!BU8[l.c77!<3#t!<3#t!;lfp!;ulq!;c`o!!3*"rr;fpr;Z]q!<<#uqu?Tpr;Z]qr;ZTnqZ$Qq +JcC<$JcC<$h>dK=!R<`V~> +!B:&Xj4jV1!<3#t!<3#t!;lfp!;ulq!;c`o!!3*"rr;fpr;Z]q!<<#uqu?Tpr;Z]qr;ZTnqZ$Qq +JcC<$JcC<$h>dK7!Q-jH~> +!BpJ^mA^*c!.k0$s+13$s.98im/bd$J,~> +!BU8[l)F[_!.k0$s+13$s.98iklK'jJ,~> +!B:&Xj/N%Y!.k0$s+13$s.98iirR%VJ,~> +!BpJ^mA^*c!.k0$s+13$s.98im/bd$J,~> +!BU8[l)F[_!.k0$s+13$s.98iklK'jJ,~> +!B:&Xj/N%Y!.k0$s+13$s.98iirR%VJ,~> +!BpJ^mAg0d!.k0$s+13$s.02hm/bd$J,~> +!BU8[l)Oa`!.k0$s+13$s.02hklK'jJ,~> +!B:&Xj/W+Z!.k0$s+13$s.02hirR%VJ,~> +!BpJ^mB?Qf!.k0$s+13$s.',gm/bd$J,~> +!BU8[l*(-b!.k0$s+13$s.',gklK'jJ,~> +!B:&Xj0/L\!.k0$s+13$s.',girR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m?IYN!6tQA!.k1Ks8;qas8N)(s8N)cs8;qKs31NBm/bd$J,~> +!BU8[l'25J!6tQA!.k1Ks8;qas8N)(s8N)cs8;qKs31NBklK'jJ,~> +!B:&Xj-9TD!6tQA!.k1Ks8;qas8N)(s8N)cs8;qKs31NBirR%VJ,~> +!BpJ^mG7gA!;ulr!8@JK!:p0i!6tQA!6Y?@!;ulr!7q/M!:9^c!6kHC!;?Em!7_#K!8meV!7UrJ +!9sL`!;HKn!.k1%s8MBdeieN~> +!BU8[l.uC=!;ulr!8@JK!:p0i!6tQA!6Y?@!;ulr!7q/M!:9^c!6kHC!;?Em!7_#K!8meV!7UrJ +!9sL`!;HKn!.k1%s8M6`c8pI~> +!B:&Xj5'b7!;ulr!8@JK!:p0i!6tQA!6Y?@!;ulr!7q/M!:9^c!6kHC!;?Em!7_#K!8meV!7UrJ +!9sL`!;HKn!.k1%s8M$Z_`*)~> +!BpJ^mHsrH!<)rs!;ulr!8@JK!:p0i!6Y?A!6P9@!;uls!7h)L!:Bdd!6bBB!;?Em!7_#K!8meV +!7UrJ!9sL`!;HKn!.k1%s8MBdeieN~> +!BU8[l0\ND!<)rs!;ulr!8@JK!:p0i!6Y?A!6P9@!;uls!7h)L!:Bdd!6bBB!;?Em!7_#K!8meV +!7UrJ!9sL`!;HKn!.k1%s8M6`c8pI~> +!B:&Xj6cm>!<)rs!;ulr!8@JK!:p0i!6Y?A!6P9@!;uls!7h)L!:Bdd!6bBB!;?Em!7_#K!8meV +!7UrJ!9sL`!;HKn!.k1%s8M$Z_`*)~> +!BpJ^mHsrH!;ulr!<3#t!<)rr!<)rr!<<)u!;ulq!;- +!BU8[l0\ND!;ulr!<3#t!<)rr!<)rr!<<)u!;ulq!;- +!B:&Xj6cm>!;ulr!<3#t!<)rr!<)rr!<<)u!;ulq!;- +!BpJ^mHsrR!!`H'rrE'!s8E#rs8E#ts8E#us7lZps7ZNns7lZgs8N)ss7cTos7lZns7lZos7cQo +s7ZNns7lZls8N)rs7lZHrrN3#!<3!"!<3&ts8;rqs8Duus8E#qs8;rjs8E#qs8N'!s8;rqs7u`n +s8;rqs8Duus8E#ts8N''rr<'!rr<&ss8;rps7u`ns8E#os8;rqs8N'!s8;rks8;rprrE-"r;c`p +r;ccqrrE#trrE#tq>g9ir;Zlu!<3#t!<3#t!"&Z*!<3$!s8N'!rVllus8;rps8;rmrr<&ps8E#o +s8;ourr@WMjo>>I!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8E#ts8E#us7lZps7ZNns7lZgs8N)ss7cTos7lZns7lZos7cQo +s7ZNns7lZls8N)rs7lZHrrN3#!<3!"!<3&ts8;rqs8Duus8E#qs8;rjs8E#qs8N'!s8;rqs7u`n +s8;rqs8Duus8E#ts8N''rr<'!rr<&ss8;rps7u`ns8E#os8;rqs8N'!s8;rks8;rprrE-"r;c`p +r;ccqrrE#trrE#tq>g9ir;Zlu!<3#t!<3#t!"&Z*!<3$!s8N'!rVllus8;rps8;rmrr<&ps8E#o +s8;ourr@WMjo>>E!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8E#ts8E#us7lZps7ZNns7lZgs8N)ss7cTos7lZns7lZos7cQo +s7ZNns7lZls8N)rs7lZHrrN3#!<3!"!<3&ts8;rqs8Duus8E#qs8;rjs8E#qs8N'!s8;rqs7u`n +s8;rqs8Duus8E#ts8N''rr<'!rr<&ss8;rps7u`ns8E#os8;rqs8N'!s8;rks8;rprrE-"r;c`p +r;ccqrrE#trrE#tq>g9ir;Zlu!<3#t!<3#t!"&Z*!<3$!s8N'!rVllus8;rps8;rmrr<&ps8E#o +s8;ourr@WMjo>>?!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8;ots8;ots8E#ss8E#ts8;rts8N'!s8E#ss8E#ms8N)rs8E#t +s8N)ts8N)qs8E#ss8Duus8E#ts8E#ss8;rts8N*!s8N)ts8N)rs8N)rs8N)ts8N)Nrs/W)rrE'! +s8N)urr<&trr<&rs8N)urr<&trr<&trr<&krr<&qs8N)trr<&rrr<&prr<&trr<&rs8N)urr<&u +s8N*!s8N*!rr<&urr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<&orr<&trr<&ss8N)trr<&t +rr<&trr<&srr<&srr<&rrr<&krr<&ts8N)trr<&srr<&us8N*!s8N*!rr<&us8N)trr<&trr<&t +rr<&prr<&nrr<&qrr<&ts8N(Ms5j:[m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8;ots8;ots8E#ss8E#ts8;rts8N'!s8E#ss8E#ms8N)rs8E#t +s8N)ts8N)qs8E#ss8Duus8E#ts8E#ss8;rts8N*!s8N)ts8N)rs8N)rs8N)ts8N)Nrs/W)rrE'! +s8N)urr<&trr<&rs8N)urr<&trr<&trr<&krr<&qs8N)trr<&rrr<&prr<&trr<&rs8N)urr<&u +s8N*!s8N*!rr<&urr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<&orr<&trr<&ss8N)trr<&t +rr<&trr<&srr<&srr<&rrr<&krr<&ts8N)trr<&srr<&us8N*!s8N*!rr<&us8N)trr<&trr<&t +rr<&prr<&nrr<&qrr<&ts8N(Ms5j:[klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8;ots8;ots8E#ss8E#ts8;rts8N'!s8E#ss8E#ms8N)rs8E#t +s8N)ts8N)qs8E#ss8Duus8E#ts8E#ss8;rts8N*!s8N)ts8N)rs8N)rs8N)ts8N)Nrs/W)rrE'! +s8N)urr<&trr<&rs8N)urr<&trr<&trr<&krr<&qs8N)trr<&rrr<&prr<&trr<&rs8N)urr<&u +s8N*!s8N*!rr<&urr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<&orr<&trr<&ss8N)trr<&t +rr<&trr<&srr<&srr<&rrr<&krr<&ts8N)trr<&srr<&us8N*!s8N*!rr<&us8N)trr<&trr<&t +rr<&prr<&nrr<&qrr<&ts8N(Ms5j:[irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7cQqrr<&rs8N)us8E#qs8N)rs8N)ns8N)rs8N)ts8N)ts8N)q +s8N)rs8N'#rr<&ss8N)ts8E#js8N)rs8N)rs8;rHrsJi,rrE'!s8N*!rrDrr!!)rs!!)ip!!)or +!!)]l!!)lq!!)rs!!)or!!)lq!!)or!!)rs!!)ip!!*#u!!*#u!!)ip!!)lq!!)`m!!)or!!)or +!!)ut!!)rs!!)Wj!!)rs!!)or!s&B$!;lcr!<)ot!;uis!;lcr!;-9k!;uis!<)ot!;uis!<2uu +!<2uu!<2uu!<2uu!;lcu!<<'!qu6WrqYpNqp\t3nqu6Wrqu6WrJcFj3rp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7cQqrr<&rs8N)us8E#qs8N)rs8N)ns8N)rs8N)ts8N)ts8N)q +s8N)rs8N'#rr<&ss8N)ts8E#js8N)rs8N)rs8;rHrsJi,rrE'!s8N*!rrDrr!!)rs!!)ip!!)or +!!)]l!!)lq!!)rs!!)or!!)lq!!)or!!)rs!!)ip!!*#u!!*#u!!)ip!!)lq!!)`m!!)or!!)or +!!)ut!!)rs!!)Wj!!)rs!!)or!s&B$!;lcr!<)ot!;uis!;lcr!;-9k!;uis!<)ot!;uis!<2uu +!<2uu!<2uu!<2uu!;lcu!<<'!qu6WrqYpNqp\t3nqu6Wrqu6WrJcFj3rojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7cQqrr<&rs8N)us8E#qs8N)rs8N)ns8N)rs8N)ts8N)ts8N)q +s8N)rs8N'#rr<&ss8N)ts8E#js8N)rs8N)rs8;rHrsJi,rrE'!s8N*!rrDrr!!)rs!!)ip!!)or +!!)]l!!)lq!!)rs!!)or!!)lq!!)or!!)rs!!)ip!!*#u!!*#u!!)ip!!)lq!!)`m!!)or!!)or +!!)ut!!)rs!!)Wj!!)rs!!)or!s&B$!;lcr!<)ot!;uis!;lcr!;-9k!;uis!<)ot!;uis!<2uu +!<2uu!<2uu!<2uu!;lcu!<<'!qu6WrqYpNqp\t3nqu6Wrqu6WrJcFj3ro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8E!%rr<'!!!)orrrE&urrDoqpAjsfrrDrrrrE#trrE#t +rrDoqpAb9p!!)rsrrE#trrDlpq#LUEprr2rurVlitrr2rurr2ru +rr2ruqu6`us8N)rrr<&qrr<&nrr<&rrr<%Ms5*eTm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8E!%rr<'!!!)orrrE&urrDoqpAjsfrrDrrrrE#trrE#t +rrDoqpAb9p!!)rsrrE#trrDlpq#LUEprr2rurVlitrr2rurr2ru +rr2ruqu6`us8N)rrr<&qrr<&nrr<&rrr<%Ms5*eTklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8E!%rr<'!!!)orrrE&urrDoqpAjsfrrDrrrrE#trrE#t +rrDoqpAb9p!!)rsrrE#trrDlpq#LUEprr2rurVlitrr2rurr2ru +rr2ruqu6`us8N)rrr<&qrr<&nrr<&rrr<%Ms5*eTirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N*!rs&Q(rr<'!!!)orrrE&urrDoqpAjsfrrDrrrrE#trrE#t +rrDoqpAb9p!!)rsrrE#trrDoqp]13krrDioquG@K!!*#u!!*#u!s&B$!;lcr!;uis!;ZWp!:Kje +!;c]q!;uis!;lcr!;c]q!;lcr!;uis!;ZWp!<2uu!<3!#!<<'!r;Q`sqYpNqpAY*mqu6Wrqu6Wr +rVlitr;Q`sq>UEpr;Q`sr;Q`squ6`us8N)rrr<&trr<&srr<&rrr<&gs8N)rrr<&urr<&trr<&u +rr<&urr<&urr<&rrrW9$rrDrr!!)lq!!)cn!!)or!!%TMhZ*TB!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N*!rs&Q(rr<'!!!)orrrE&urrDoqpAjsfrrDrrrrE#trrE#t +rrDoqpAb9p!!)rsrrE#trrDoqp]13krrDioquG@K!!*#u!!*#u!s&B$!;lcr!;uis!;ZWp!:Kje +!;c]q!;uis!;lcr!;c]q!;lcr!;uis!;ZWp!<2uu!<3!#!<<'!r;Q`sqYpNqpAY*mqu6Wrqu6Wr +rVlitr;Q`sq>UEpr;Q`sr;Q`squ6`us8N)rrr<&trr<&srr<&rrr<&gs8N)rrr<&urr<&trr<&u +rr<&urr<&urr<&rrrW9$rrDrr!!)lq!!)cn!!)or!!%TMhZ*T>!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N*!rs&Q(rr<'!!!)orrrE&urrDoqpAjsfrrDrrrrE#trrE#t +rrDoqpAb9p!!)rsrrE#trrDoqp]13krrDioquG@K!!*#u!!*#u!s&B$!;lcr!;uis!;ZWp!:Kje +!;c]q!;uis!;lcr!;c]q!;lcr!;uis!;ZWp!<2uu!<3!#!<<'!r;Q`sqYpNqpAY*mqu6Wrqu6Wr +rVlitr;Q`sq>UEpr;Q`sr;Q`squ6`us8N)rrr<&trr<&srr<&rrr<&gs8N)rrr<&urr<&trr<&u +rr<&urr<&urr<&rrrW9$rrDrr!!)lq!!)cn!!)or!!%TMhZ*T8!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ts8N)qs8E#fs8N)rs8N)ts8N)ts8N)t +s8N'!s8E#os8E#ts8E#ss8N)qs8N)ss8N)rs8N)rs8N)ts8N)Nrr<&qrrW9$rrDrr!!)rs!!)ip +!!)He!!)lq!!)rs!!)or!!)lq!!)or!!)rs!!)ip!!*#u!!*#u!s&B$!;uis!;c]q!;?Em!;lcr +!;lcr!<)ot!;uis!;ZWp!;uis!;uis!;lcu!<<'!qu6WrrVlitr;Q`squ6Wro`"mkr;Q`squ6]t +rrDus!!*#u!!*#u!!*#u!!)or!s&B$!;lcr!;c]q!;HKn!;lcr!.k1,s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ts8N)qs8E#fs8N)rs8N)ts8N)ts8N)t +s8N'!s8E#os8E#ts8E#ss8N)qs8N)ss8N)rs8N)rs8N)ts8N)Nrr<&qrrW9$rrDrr!!)rs!!)ip +!!)He!!)lq!!)rs!!)or!!)lq!!)or!!)rs!!)ip!!*#u!!*#u!s&B$!;uis!;c]q!;?Em!;lcr +!;lcr!<)ot!;uis!;ZWp!;uis!;uis!;lcu!<<'!qu6WrrVlitr;Q`squ6Wro`"mkr;Q`squ6]t +rrDus!!*#u!!*#u!!*#u!!)or!s&B$!;lcr!;c]q!;HKn!;lcr!.k1,s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#ts8N)qs8E#fs8N)rs8N)ts8N)ts8N)t +s8N'!s8E#os8E#ts8E#ss8N)qs8N)ss8N)rs8N)rs8N)ts8N)Nrr<&qrrW9$rrDrr!!)rs!!)ip +!!)He!!)lq!!)rs!!)or!!)lq!!)or!!)rs!!)ip!!*#u!!*#u!s&B$!;uis!;c]q!;?Em!;lcr +!;lcr!<)ot!;uis!;ZWp!;uis!;uis!;lcu!<<'!qu6WrrVlitr;Q`squ6Wro`"mkr;Q`squ6]t +rrDus!!*#u!!*#u!!*#u!!)or!s&B$!;lcr!;c]q!;HKn!;lcr!.k1,s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss82iss82iss7lZps7lZns7lZjs7lZps8;rts8;rss7lZps7lZo +s7lZps7lZos7ZNns7lZos7lZHrr<&qrr<&urr<&trr<&rrr<&orr<&ts8N)lrr<&qrr<&srr<&r +rr<&prr<&trr<&rrr<&prr<&urr<&urrW9$rrE#trrDoq!!)ut!!)or!!)lq!!)ut!!)rs!!)rs +!!)ip!!)utrrDusrrE#t!!)ut!!)ut!!)rs!!)utrrDrr!!)ut!!)iprrE#t!!)or!W`6#r;Q`s +rr2rurr2rurr;uurVlitrVlitrVlitq>UEpp\t3nqYpNqrVultJcFj3rp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#ss82iss82iss7lZps7lZns7lZjs7lZps8;rts8;rss7lZps7lZo +s7lZps7lZos7ZNns7lZos7lZHrr<&qrr<&urr<&trr<&rrr<&orr<&ts8N)lrr<&qrr<&srr<&r +rr<&prr<&trr<&rrr<&prr<&urr<&urrW9$rrE#trrDoq!!)ut!!)or!!)lq!!)ut!!)rs!!)rs +!!)ip!!)utrrDusrrE#t!!)ut!!)ut!!)rs!!)utrrDrr!!)ut!!)iprrE#t!!)or!W`6#r;Q`s +rr2rurr2rurr;uurVlitrVlitrVlitq>UEpp\t3nqYpNqrVultJcFj3rojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss82iss82iss7lZps7lZns7lZjs7lZps8;rts8;rss7lZps7lZo +s7lZps7lZos7ZNns7lZos7lZHrr<&qrr<&urr<&trr<&rrr<&orr<&ts8N)lrr<&qrr<&srr<&r +rr<&prr<&trr<&rrr<&prr<&urr<&urrW9$rrE#trrDoq!!)ut!!)or!!)lq!!)ut!!)rs!!)rs +!!)ip!!)utrrDusrrE#t!!)ut!!)ut!!)rs!!)utrrDrr!!)ut!!)iprrE#t!!)or!W`6#r;Q`s +rr2rurr2rurr;uurVlitrVlitrVlitq>UEpp\t3nqYpNqrVultJcFj3ro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts82iss82lrs8;rrs7lZls8)fls7lZps8;rts8;rrs82los8)fp +s8;p#rr<'!s7lZns82iss8E#us7lZos7u`Is8;rss8;rss8;rqs7u`ms8;rks7u`ps8E#ts8E#t +s7u`ns8;rqs7u`ps8E#us8N*!s8N*!s8;ots8E#qs8;rrs7u`ns8;rqs8E#ts8E#os8;ots8E#u +s8N'!s8;rps8;ros8;p!rr<&rs8;rmrrE-"r;cZn!!)rsrW)uurrE*!rr<0$!!*&t!;lfp!;lfm +!<)ro!;ulq!.k11s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts82iss82lrs8;rrs7lZls8)fls7lZps8;rts8;rrs82los8)fp +s8;p#rr<'!s7lZns82iss8E#us7lZos7u`Is8;rss8;rss8;rqs7u`ms8;rks7u`ps8E#ts8E#t +s7u`ns8;rqs7u`ps8E#us8N*!s8N*!s8;ots8E#qs8;rrs7u`ns8;rqs8E#ts8E#os8;ots8E#u +s8N'!s8;rps8;ros8;p!rr<&rs8;rmrrE-"r;cZn!!)rsrW)uurrE*!rr<0$!!*&t!;lfp!;lfm +!<)ro!;ulq!.k11s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts82iss82lrs8;rrs7lZls8)fls7lZps8;rts8;rrs82los8)fp +s8;p#rr<'!s7lZns82iss8E#us7lZos7u`Is8;rss8;rss8;rqs7u`ms8;rks7u`ps8E#ts8E#t +s7u`ns8;rqs7u`ps8E#us8N*!s8N*!s8;ots8E#qs8;rrs7u`ns8;rqs8E#ts8E#os8;ots8E#u +s8N'!s8;rps8;ros8;p!rr<&rs8;rmrrE-"r;cZn!!)rsrW)uurrE*!rr<0$!!*&t!;lfp!;lfm +!<)ro!;ulq!.k11s8M$Z_`*)~> +!BpJ^mHsrH!1Ele!.k0$s0;S(!.k0Cs8MBdeieN~> +!BU8[l0\ND!1Ele!.k0$s0;S(!.k0Cs8M6`c8pI~> +!B:&Xj6cm>!1Ele!.k0$s0;S(!.k0Cs8M$Z_`*)~> +!BpJ^mHsrH!1Nre!.k0$s0DY)!.k0Bs8MBdeieN~> +!BU8[l0\ND!1Nre!.k0$s0DY)!.k0Bs8M6`c8pI~> +!B:&Xj6cm>!1Nre!.k0$s0DY)!.k0Bs8M$Z_`*)~> +!BpJ^m=G<:s8)eIs+13Trr<%Ms.B>jm/bd$J,~> +!BU8[l%/m6s8)eIs+13Trr<%Ms.B>jklK'jJ,~> +!B:&Xj+770s8)eIs+13Trr<%Ms.B>jirR%VJ,~> +!BpJ^m=G<:s82kJs+13Vs82kJs.KDkm/bd$J,~> +!BU8[l%/m6s82kJs+13Vs82kJs.KDkklK'jJ,~> +!B:&Xj+770s82kJs+13Vs82kJs.KDkirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mF_F=!:Bdd!6bBB!;?Em!.k0$s+13$s2Y0=m/bd$J,~> +!BU8[l.H"9!:Bdd!6bBB!;?Em!.k0$s+13$s2Y0=klK'jJ,~> +!B:&Xj4OA3!:Bdd!6bBB!;?Em!.k0$s+13$s2Y0=irR%VJ,~> +!BpJ^mF_F=!:Bdd!6bBB!;?Em!.k0$s+13$s2Y0=m/bd$J,~> +!BU8[l.H"9!:Bdd!6bBB!;?Em!.k0$s+13$s2Y0=klK'jJ,~> +!B:&Xj4OA3!:Bdd!6bBB!;?Em!.k0$s+13$s2Y0=irR%VJ,~> +!BpJ^mDJr(!6bBB!.k0$s+13$s1A=1m/bd$J,~> +!BU8[l,3N$!6bBB!.k0$s+13$s1A=1klK'jJ,~> +!B:&Xj2:ls!6bBB!.k0$s+13$s1A=1irR%VJ,~> +!BpJ^mFqU>!;lfr!!*&t!;uln!;ulq!;c`o!!N<%!<<)u!!*&u!;lfp!;lfm!;ulr!;ZZn!;uls +!!*&t!.k0$s+13$s53kUm/bd$J,~> +!BU8[l.Z1:!;lfr!!*&t!;uln!;ulq!;c`o!!N<%!<<)u!!*&u!;lfp!;lfm!;ulr!;ZZn!;uls +!!*&t!.k0$s+13$s53kUklK'jJ,~> +!B:&Xj4aP4!;lfr!!*&t!;uln!;ulq!;c`o!!N<%!<<)u!!*&u!;lfp!;lfm!;ulr!;ZZn!;uls +!!*&t!.k0$s+13$s53kUirR%VJ,~> +!BpJ^mF_F=!;c`q!<)ot!;lcr!;ZWp!<)ot!;uis!<)rt!;uls!<2uu!<)ot!<)ot!;c]q!;?Em +!;c]q!<)ot!;uls!<)ot!.k0$s+13$s5 +!BU8[l.H"9!;c`q!<)ot!;lcr!;ZWp!<)ot!;uis!<)rt!;uls!<2uu!<)ot!<)ot!;c]q!;?Em +!;c]q!<)ot!;uls!<)ot!.k0$s+13$s5 +!B:&Xj4OA3!;c`q!<)ot!;lcr!;ZWp!<)ot!;uis!<)rt!;uls!<2uu!<)ot!<)ot!;c]q!;?Em +!;c]q!<)ot!;uls!<)ot!.k0$s+13$s5 +!BpJ^mF_F=!;c]q!;uis!;lcr!;c]q!;lcr!<2uu!;lcr!;uis!;$3j!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!.k0$s+13$s5 +!BU8[l.H"9!;c]q!;uis!;lcr!;c]q!;lcr!<2uu!;lcr!;uis!;$3j!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!.k0$s+13$s5 +!B:&Xj4OA3!;c]q!;uis!;lcr!;c]q!;lcr!<2uu!;lcr!;uis!;$3j!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!.k0$s+13$s5 +!BpJ^mF_F=!;c]q!;uis!;lcr!;c`k!<2uu!;lcr!;uis!;QTk!;c]q!;?Em!;lcr!;lcr!<)ot +!;uis!.k0$s+13$s5 +!BU8[l.H"9!;c]q!;uis!;lcr!;c`k!<2uu!;lcr!;uis!;QTk!;c]q!;?Em!;lcr!;lcr!<)ot +!;uis!.k0$s+13$s5 +!B:&Xj4OA3!;c]q!;uis!;lcr!;c`k!<2uu!;lcr!;uis!;QTk!;c]q!;?Em!;lcr!;lcr!<)ot +!;uis!.k0$s+13$s5 +!BpJ^mF_F=!;c]q!;uis!;lcr!;c]q!;HKn!;lcr!;uis!;ZWp!;uis!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!.k0$s+13$s5 +!BU8[l.H"9!;c]q!;uis!;lcr!;c]q!;HKn!;lcr!;uis!;ZWp!;uis!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!.k0$s+13$s5 +!B:&Xj4OA3!;c]q!;uis!;lcr!;c]q!;HKn!;lcr!;uis!;ZWp!;uis!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!.k0$s+13$s5 +!BpJ^mF_F=!;c]q!;uis!;lcr!;c]q!;HKn!;lcr!;uis!;ZWp!;uis!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!.k0$s+13$s5 +!BU8[l.H"9!;c]q!;uis!;lcr!;c]q!;HKn!;lcr!;uis!;ZWp!;uis!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!.k0$s+13$s5 +!B:&Xj4OA3!;c]q!;uis!;lcr!;c]q!;HKn!;lcr!;uis!;ZWp!;uis!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!.k0$s+13$s5 +!BpJ^mF_F=!;c]q!;uis!;lcr!<)ot!<2uu!<)rt!<)ot!<)rt!;uis!;ZWp!<)rt!;c]q!<)ot +!;lcr!;c]q!<)ot!;uis!;uis!;lfr!.k0$s+13$s60L^m/bd$J,~> +!BU8[l.H"9!;c]q!;uis!;lcr!<)ot!<2uu!<)rt!<)ot!<)rt!;uis!;ZWp!<)rt!;c]q!<)ot +!;lcr!;c]q!<)ot!;uis!;uis!;lfr!.k0$s+13$s60L^klK'jJ,~> +!B:&Xj4OA3!;c]q!;uis!;lcr!<)ot!<2uu!<)rt!<)ot!<)rt!;uis!;ZWp!<)rt!;c]q!<)ot +!;lcr!;c]q!<)ot!;uis!;uis!;lfr!.k0$s+13$s60L^irR%VJ,~> +!BpJ^mG%[;!<3#t!<3#t!;lfp!;ulq!;c`o!!3*"rr;fpr;Z]q!<<#uqu?TprVu]or;Z]qr;Z`r +rr;rtr;ZcsJcC<$JcC<$kl:YL!S0Da~> +!BU8[l.c77!<3#t!<3#t!;lfp!;ulq!;c`o!!3*"rr;fpr;Z]q!<<#uqu?TprVu]or;Z]qr;Z`r +rr;rtr;ZcsJcC<$JcC<$kl:YH!R<`V~> +!B:&Xj4jV1!<3#t!<3#t!;lfp!;ulq!;c`o!!3*"rr;fpr;Z]q!<<#uqu?TprVu]or;Z]qr;Z`r +rr;rtr;ZcsJcC<$JcC<$kl:YB!Q-jH~> +!BpJ^mA^*c!.k0$s+13$s.98im/bd$J,~> +!BU8[l)F[_!.k0$s+13$s.98iklK'jJ,~> +!B:&Xj/N%Y!.k0$s+13$s.98iirR%VJ,~> +!BpJ^mA^*c!.k0$s+13$s.98im/bd$J,~> +!BU8[l)F[_!.k0$s+13$s.98iklK'jJ,~> +!B:&Xj/N%Y!.k0$s+13$s.98iirR%VJ,~> +!BpJ^mAg0d!.k0$s+13$s.02hm/bd$J,~> +!BU8[l)Oa`!.k0$s+13$s.02hklK'jJ,~> +!B:&Xj/W+Z!.k0$s+13$s.02hirR%VJ,~> +!BpJ^mB?Qf!.k0$s+13$s.',gm/bd$J,~> +!BU8[l*(-b!.k0$s+13$s.',gklK'jJ,~> +!B:&Xj0/L\!.k0$s+13$s.',girR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mCWDr!.k0$s5O(W!1Elc!.k0Bs8MBdeieN~> +!BU8[l+?un!.k0$s5O(W!1Elc!.k0Bs8M6`c8pI~> +!B:&Xj1G?h!.k0$s5O(W!1Elc!.k0Bs8M$Z_`*)~> +!BpJ^mG7g>!9O7Y!.k17s8;ourrCFG!!)`m!!(sWquG^U!!(II!!(1A!!%TMS,`KT!S0Da~> +!BU8[l.uC:!9O7Y!.k17s8;ourrCFG!!)`m!!(sWquG^U!!(II!!(1A!!%TMS,`KP!R<`V~> +!B:&Xj5'b4!9O7Y!.k17s8;ourrCFG!!)`m!!(sWquG^U!!(II!!(1A!!%TMS,`KJ!Q-jH~> +!BpJ^mHsrH!<)rp!94%Y!.k19s8N)ts8N)Grr<&mrr<&Urr<&Vrr<&Irr<&Brr<%Ms-iuem/bd$ +J,~> +!BU8[l0\ND!<)rp!94%Y!.k19s8N)ts8N)Grr<&mrr<&Urr<&Vrr<&Irr<&Brr<%Ms-iueklK'j +J,~> +!B:&Xj6cm>!<)rp!94%Y!.k19s8N)ts8N)Grr<&mrr<&Urr<&Vrr<&Irr<&Brr<%Ms-iueirR%V +J,~> +!BpJ^mHsrH!;lfr!;QTk!<3#t!!*&t!;c`q!;c`m!;ulq!!<0#!;ulq!0.!Y!;lcr!7:`G!7LlI +!8meV!7LlI!6bBB!.k0=s8MBdeieN~> +!BU8[l0\ND!;lfr!;QTk!<3#t!!*&t!;c`q!;c`m!;ulq!!<0#!;ulq!0.!Y!;lcr!7:`G!7LlI +!8meV!7LlI!6bBB!.k0=s8M6`c8pI~> +!B:&Xj6cm>!;lfr!;QTk!<3#t!!*&t!;c`q!;c`m!;ulq!!<0#!;ulq!0.!Y!;lcr!7:`G!7LlI +!8meV!7LlI!6bBB!.k0=s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ps7lZps7cTks8N)rs7lZos7lZos7lYVrr<&ls8;rrs8N'' +rr<'!rr<&us8N'!s8;rrs8N)ts8N)ts7u`ns8E#qs8N'!s8;rps8;p!rr<&orr<&ns8;rqs8N'! +s8;rnrr<&ps8;ros8;ourrDusr;cQkq>gNprVururW)iqr;ccqrr<'!r;c`pr;Zlu!<)ro!;ulq +!;ulr!!*&u!<3#u!!`H'!<<'!!;ulq!!3*"JcEmmrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ps7lZps7cTks8N)rs7lZos7lZos7lYVrr<&ls8;rrs8N'' +rr<'!rr<&us8N'!s8;rrs8N)ts8N)ts7u`ns8E#qs8N'!s8;rps8;p!rr<&orr<&ns8;rqs8N'! +s8;rnrr<&ps8;ros8;ourrDusr;cQkq>gNprVururW)iqr;ccqrr<'!r;c`pr;Zlu!<)ro!;ulq +!;ulr!!*&u!<3#u!!`H'!<<'!!;ulq!!3*"JcEmmrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ps7lZps7cTks8N)rs7lZos7lZos7lYVrr<&ls8;rrs8N'' +rr<'!rr<&us8N'!s8;rrs8N)ts8N)ts7u`ns8E#qs8N'!s8;rps8;p!rr<&orr<&ns8;rqs8N'! +s8;rnrr<&ps8;ros8;ourrDusr;cQkq>gNprVururW)iqr;ccqrr<'!r;c`pr;Zlu!<)ro!;ulq +!;ulr!!*&u!<3#u!!`H'!<<'!!;ulq!!3*"JcEmmro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ps8N)ts8N)us8E#ts8E#rs8N)rs8N)ts8N*!s8E#ts8E#u +s8E#ss8E"\rr<&mrr<&trr<&ts8N*!s8N*!rr<&us8N)trr<&trr<&srr<&rrr<&mrr<&qs8N)t +rr<&trr<&ts8N)nrr<&orr<&trr<&ss8N)trr<&qrr<&qrr<&trr<&srr<&ts8N)trr<&trr<&l +rr<&os8N)urr<&trr<&trr<&ss8N)trr<&trr<&ts8N)rrr<&prr<&trr<&rs8N)urr<&us8N*! +s8N*!rr<&urr<&ts8N(Ms2tB@m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ps8N)ts8N)us8E#ts8E#rs8N)rs8N)ts8N*!s8E#ts8E#u +s8E#ss8E"\rr<&mrr<&trr<&ts8N*!s8N*!rr<&us8N)trr<&trr<&srr<&rrr<&mrr<&qs8N)t +rr<&trr<&ts8N)nrr<&orr<&trr<&ss8N)trr<&qrr<&qrr<&trr<&srr<&ts8N)trr<&trr<&l +rr<&os8N)urr<&trr<&trr<&ss8N)trr<&trr<&ts8N)rrr<&prr<&trr<&rs8N)urr<&us8N*! +s8N*!rr<&urr<&ts8N(Ms2tB@klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ps8N)ts8N)us8E#ts8E#rs8N)rs8N)ts8N*!s8E#ts8E#u +s8E#ss8E"\rr<&mrr<&trr<&ts8N*!s8N*!rr<&us8N)trr<&trr<&srr<&rrr<&mrr<&qs8N)t +rr<&trr<&ts8N)nrr<&orr<&trr<&ss8N)trr<&qrr<&qrr<&trr<&srr<&ts8N)trr<&trr<&l +rr<&os8N)urr<&trr<&trr<&ss8N)trr<&trr<&ts8N)rrr<&prr<&trr<&rs8N)urr<&us8N*! +s8N*!rr<&urr<&ts8N(Ms2tB@irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)js8N)us8N)ss8N)ss8N)ls8N*!s8N)ss8N*!s8N)rs8N(] +rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&mrr<&qrr<&srr<&urr<&r +rr<&nrr<&jrr<&srr<&rrr<&rrr<&lrr<&trr<&rrr<&urr<&rrr<&mrr<&orr<&jrr<&srr<&s +rr<&trr<&srr<&rrr<&qrr<&rrr<&srr<&prr<&urr<&urr<&urr<&srr<%Ms2tB@m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)js8N)us8N)ss8N)ss8N)ls8N*!s8N)ss8N*!s8N)rs8N(] +rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&mrr<&qrr<&srr<&urr<&r +rr<&nrr<&jrr<&srr<&rrr<&rrr<&lrr<&trr<&rrr<&urr<&rrr<&mrr<&orr<&jrr<&srr<&s +rr<&trr<&srr<&rrr<&qrr<&rrr<&srr<&prr<&urr<&urr<&urr<&srr<%Ms2tB@klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)js8N)us8N)ss8N)ss8N)ls8N*!s8N)ss8N*!s8N)rs8N(] +rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&mrr<&qrr<&srr<&urr<&r +rr<&nrr<&jrr<&srr<&rrr<&rrr<&lrr<&trr<&rrr<&urr<&rrr<&mrr<&orr<&jrr<&srr<&s +rr<&trr<&srr<&rrr<&qrr<&rrr<&srr<&prr<&urr<&urr<&urr<&srr<%Ms2tB@irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N*!s7lZos8N)ss8N)ss8N)rs7lZps8N)os7ZMUrr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&mrr<&qrr<&srr<&urr<&rrr<&n +rr<&os8)forr<&rrr<&rrr<&qs8)fprr<&ns7lZgrr<&orr<&os8)forr<&srr<&ss8E#nrr<&q +rr<&rrr<&srr<&prr<&urr<&urr<&ts8E"Ls2Y0=m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N*!s7lZos8N)ss8N)ss8N)rs7lZps8N)os7ZMUrr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&mrr<&qrr<&srr<&urr<&rrr<&n +rr<&os8)forr<&rrr<&rrr<&qs8)fprr<&ns7lZgrr<&orr<&os8)forr<&srr<&ss8E#nrr<&q +rr<&rrr<&srr<&prr<&urr<&urr<&ts8E"Ls2Y0=klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N*!s7lZos8N)ss8N)ss8N)rs7lZps8N)os7ZMUrr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&mrr<&qrr<&srr<&urr<&rrr<&n +rr<&os8)forr<&rrr<&rrr<&qs8)fprr<&ns7lZgrr<&orr<&os8)forr<&srr<&ss8E#nrr<&q +rr<&rrr<&srr<&prr<&urr<&urr<&ts8E"Ls2Y0=irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N'!s7cTns8N)ss8N)ss8N)ss7cTos8N)os7ZMUrr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&mrr<&qrr<&srr<&urr<&rrr<&n +rr<&srrW9$rrDus!!)rs!!)or!!)or!!)or!!)rs!!)ut!!)cn!!)Kf!!)fo!!)ip!!)rs!!)rs +!!)rs!!)iprrDoq!!)lq!!)or!!)rs!!)ip!!*#u!!*#u!!)lqrr@WMaoDA-!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N'!s7cTns8N)ss8N)ss8N)ss7cTos8N)os7ZMUrr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&mrr<&qrr<&srr<&urr<&rrr<&n +rr<&srrW9$rrDus!!)rs!!)or!!)or!!)or!!)rs!!)ut!!)cn!!)Kf!!)fo!!)ip!!)rs!!)rs +!!)rs!!)iprrDoq!!)lq!!)or!!)rs!!)ip!!*#u!!*#u!!)lqrr@WMaoDA)!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N'!s7cTns8N)ss8N)ss8N)ss7cTos8N)os7ZMUrr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&mrr<&qrr<&srr<&urr<&rrr<&n +rr<&srrW9$rrDus!!)rs!!)or!!)or!!)or!!)rs!!)ut!!)cn!!)Kf!!)fo!!)ip!!)rs!!)rs +!!)rs!!)iprrDoq!!)lq!!)or!!)rs!!)ip!!*#u!!*#u!!)lqrr@WMaoDA#!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N'#rr<&ss8N)us8E#ts8E#rs8N)ss8N)ss8N*!s8E#s +s8Duus8E"Trr<&rrrW9$rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!*#u!!)rs!!)or!!)`m!!)lq +!!)rs!!*#u!!)or!!)cn!!)rs!s&B$!;uis!;uis!;lcr!;lcr!;lcr!;uis!<)ot!;HKn!:Tpf +!;QQo!;ZWp!;uis!;uis!;uis!<)ot!;uis!;lcr!;c]q!;lcr!;uis!;ZWp!<2uu!<2uu!<2uu +!;uis!.k0ms8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N'#rr<&ss8N)us8E#ts8E#rs8N)ss8N)ss8N*!s8E#s +s8Duus8E"Trr<&rrrW9$rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!*#u!!)rs!!)or!!)`m!!)lq +!!)rs!!*#u!!)or!!)cn!!)rs!s&B$!;uis!;uis!;lcr!;lcr!;lcr!;uis!<)ot!;HKn!:Tpf +!;QQo!;ZWp!;uis!;uis!;uis!<)ot!;uis!;lcr!;c]q!;lcr!;uis!;ZWp!<2uu!<2uu!<2uu +!;uis!.k0ms8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N'#rr<&ss8N)us8E#ts8E#rs8N)ss8N)ss8N*!s8E#s +s8Duus8E"Trr<&rrrW9$rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!*#u!!)rs!!)or!!)`m!!)lq +!!)rs!!*#u!!)or!!)cn!!)rs!s&B$!;uis!;uis!;lcr!;lcr!;lcr!;uis!<)ot!;HKn!:Tpf +!;QQo!;ZWp!;uis!;uis!;uis!<)ot!;uis!;lcr!;c]q!;lcr!;uis!;ZWp!<2uu!<2uu!<2uu +!;uis!.k0ms8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7ZKns7ZNns7lZos7lZps7ZNns7cTos7lYUs8N)trr<&trr<&t +rr<&trr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&trr<&rrr<&qrr<&srr<&trr<&ts8N)n +rr<&srrW9$rrE#trrDusrrE#t!!)lq!!)or!!)utrrDus!!)utrrE#t!!)utrrDcm!!)ut!!)ut +!!)ip!!)utrrDus!!)rs!!)utrrE#t!!)or!!)ip!!)ut!!)or!!)ip!!*#u!!*#u!!*#urrE#t +!!)orrr@WMdf9=6!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7ZKns7ZNns7lZos7lZps7ZNns7cTos7lYUs8N)trr<&trr<&t +rr<&trr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&trr<&rrr<&qrr<&srr<&trr<&ts8N)n +rr<&srrW9$rrE#trrDusrrE#t!!)lq!!)or!!)utrrDus!!)utrrE#t!!)utrrDcm!!)ut!!)ut +!!)ip!!)utrrDus!!)rs!!)utrrE#t!!)or!!)ip!!)ut!!)or!!)ip!!*#u!!*#u!!*#urrE#t +!!)orrr@WMdf9=2!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7ZKns7ZNns7lZos7lZps7ZNns7cTos7lYUs8N)trr<&trr<&t +rr<&trr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&trr<&rrr<&qrr<&srr<&trr<&ts8N)n +rr<&srrW9$rrE#trrDusrrE#t!!)lq!!)or!!)utrrDus!!)utrrE#t!!)utrrDcm!!)ut!!)ut +!!)ip!!)utrrDus!!)rs!!)utrrE#t!!)or!!)ip!!)ut!!)or!!)ip!!*#u!!*#u!!*#urrE#t +!!)orrr@WMdf9=,!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7ZNns82iss8E#us8N'!s8;rrs7lZos82iss8E#ts8)fns8)eU +s8;rps8;rrs8E#us8N*!s8N*!rrE-"r;c`pr;Zp!!!)orr;cfrq>gNprW)rtrW)osr;Zlu!;ZZi +!<3#s!!*&u!<3!!!<;utr;ZTnrVufr!<<#urVufrqZ$KooDeahrr;fpr;Z]q!<<#us8W&urr;rt +rr3!!s8;rqs7u`ns8;rqs7u`ps8E#us8N*!s8N*!rrE-"r;c]orr@WMdf9=6!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ts7ZNns82iss8E#us8N'!s8;rrs7lZos82iss8E#ts8)fns8)eU +s8;rps8;rrs8E#us8N*!s8N*!rrE-"r;c`pr;Zp!!!)orr;cfrq>gNprW)rtrW)osr;Zlu!;ZZi +!<3#s!!*&u!<3!!!<;utr;ZTnrVufr!<<#urVufrqZ$KooDeahrr;fpr;Z]q!<<#us8W&urr;rt +rr3!!s8;rqs7u`ns8;rqs7u`ps8E#us8N*!s8N*!rrE-"r;c]orr@WMdf9=2!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts7ZNns82iss8E#us8N'!s8;rrs7lZos82iss8E#ts8)fns8)eU +s8;rps8;rrs8E#us8N*!s8N*!rrE-"r;c`pr;Zp!!!)orr;cfrq>gNprW)rtrW)osr;Zlu!;ZZi +!<3#s!!*&u!<3!!!<;utr;ZTnrVufr!<<#urVufrqZ$KooDeahrr;fpr;Z]q!<<#us8W&urr;rt +rr3!!s8;rqs7u`ns8;rqs7u`ps8E#us8N*!s8N*!rrE-"r;c]orr@WMdf9=,!Q-jH~> +!BpJ^mHsrH!9X=]!.k0_rr<& +!BU8[l0\ND!9X=]!.k0_rr<& +!B:&Xj6cm>!9X=]!.k0_rr<& +!BpJ^mHsrH!9X=]!.k0_rr<& +!BU8[l0\ND!9X=]!.k0_rr<& +!B:&Xj6cm>!9X=]!.k0_rr<& +!BpJ^mDo8)!.k0arr<&=rr<&Xrr<%Ms+13Hs8MBdeieN~> +!BU8[l,Wi%!.k0arr<&=rr<&Xrr<%Ms+13Hs8M6`c8pI~> +!B:&Xj2_2t!.k0arr<&=rr<&Xrr<%Ms+13Hs8M$Z_`*)~> +!BpJ^mDo8)!.k0bs8;rBs82lUs8;qKs+13Js8MBdeieN~> +!BU8[l,Wi%!.k0bs8;rBs82lUs8;qKs+13Js8M6`c8pI~> +!B:&Xj2_2t!.k0bs8;rBs82lUs8;qKs+13Js8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mC<2r!.k0$s+13ss8;qKs2G$;m/bd$J,~> +!BU8[l+$cn!.k0$s+13ss8;qKs2G$;klK'jJ,~> +!B:&Xj1,-h!.k0$s+13ss8;qKs2G$;irR%VJ,~> +!BpJ^mFqU=!!<0#!9X=]!.k17s8;ourrCFG!!(" +!BU8[l.Z19!!<0#!9X=]!.k17s8;ourrCFG!!(" +!B:&Xj4aP3!!<0#!9X=]!.k17s8;ourrCFG!!(" +!BpJ^mHsrH!;ull!.k0qs8N)ts8N)Grr<&rr<%prr<%js8MBdeieN~> +!BU8[l0\ND!;ull!.k0qs8N)ts8N)Grr<&rr<%prr<%js8M6`c8pI~> +!B:&Xj6cm>!;ull!.k0qs8N)ts8N)Grr<&rr<%prr<%js8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rs!<)rr!<)rr!<<)u!<3#r!;ZZn!;lfm!/1@P!;lcr!7:`G!.k0Err<%M +s1n[6m/bd$J,~> +!BU8[l0\ND!;uls!<)rs!<)rr!<)rr!<<)u!<3#r!;ZZn!;lfm!/1@P!;lcr!7:`G!.k0Err<%M +s1n[6klK'jJ,~> +!B:&Xj6cm>!;uls!<)rs!<)rr!<)rr!<<)u!<3#r!;ZZn!;lfm!/1@P!;lcr!7:`G!.k0Err<%M +s1n[6irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7ZNns82los7lZos7lYKrr<&ls8;rrs8N'' +rr<'!rr<&us8N'!s8;rrs8N)ts8N)ts7u`ns8;rjs8;ourrDusr;ccqrVururW)iqrW)cor;c]o +r;Zlu!;HNl!;ulr!<<)u!<3#u!!*&t!;lfp!;uls!!*&t!;lfp!!3*"r;Z`rq>^Bnr;Zcs!<;ut +qu?Tp!WN/os8;rps7u`is8;rqs8E#us8E#ts8N'!s8;rrs8Duus8E#qs8;ros8;ourrDusr;Zlu +!;ulr!;ZZn!;uls!!*&t!;lfp!!3*"_Z0W&!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7ZNns82los7lZos7lYKrr<&ls8;rrs8N'' +rr<'!rr<&us8N'!s8;rrs8N)ts8N)ts7u`ns8;rjs8;ourrDusr;ccqrVururW)iqrW)cor;c]o +r;Zlu!;HNl!;ulr!<<)u!<3#u!!*&t!;lfp!;uls!!*&t!;lfp!!3*"r;Z`rq>^Bnr;Zcs!<;ut +qu?Tp!WN/os8;rps7u`is8;rqs8E#us8E#ts8N'!s8;rrs8Duus8E#qs8;ros8;ourrDusr;Zlu +!;ulr!;ZZn!;uls!!*&t!;lfp!!3*"_Z0W"!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7ZNns82los7lZos7lYKrr<&ls8;rrs8N'' +rr<'!rr<&us8N'!s8;rrs8N)ts8N)ts7u`ns8;rjs8;ourrDusr;ccqrVururW)iqrW)cor;c]o +r;Zlu!;HNl!;ulr!<<)u!<3#u!!*&t!;lfp!;uls!!*&t!;lfp!!3*"r;Z`rq>^Bnr;Zcs!<;ut +qu?Tp!WN/os8;rps7u`is8;rqs8E#us8E#ts8N'!s8;rrs8Duus8E#qs8;ros8;ourrDusr;Zlu +!;ulr!;ZZn!;uls!!*&t!;lfp!!3*"_Z0Vq!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss82lps8E#ss8E#ts8;rts8N)ss8N)ss8E#ss8E#us8N)ts8N(Q +rr<&mrr<&trr<&ts8N*!s8N*!rr<&us8N)trr<&trr<&srr<&rrr<&prr<&trr<&nrr<&ts8N)t +rr<&trr<&rs8N)urr<&qrr<&qrr<&trr<&srr<&ts8N)orr<&trr<&srr<&trr<&ss8N)trr<&t +rr<&trr<&ss8N)trr<&trr<&ts8N)qrr<&qrr<&trr<&ss8N)trr<&trr<&ts8N)orr<&trr<&q +rr<&krr<&trr<&srr<&trr<&ss8N)trr<&ss8N)urr<&trr<&trr<&srr<&ts8N)trr<&ts8N)q +rr<&qrr<&trr<&ss8N)trr<&trr<&ts8N)9s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss82lps8E#ss8E#ts8;rts8N)ss8N)ss8E#ss8E#us8N)ts8N(Q +rr<&mrr<&trr<&ts8N*!s8N*!rr<&us8N)trr<&trr<&srr<&rrr<&prr<&trr<&nrr<&ts8N)t +rr<&trr<&rs8N)urr<&qrr<&qrr<&trr<&srr<&ts8N)orr<&trr<&srr<&trr<&ss8N)trr<&t +rr<&trr<&ss8N)trr<&trr<&ts8N)qrr<&qrr<&trr<&ss8N)trr<&trr<&ts8N)orr<&trr<&q +rr<&krr<&trr<&srr<&trr<&ss8N)trr<&ss8N)urr<&trr<&trr<&srr<&ts8N)trr<&ts8N)q +rr<&qrr<&trr<&ss8N)trr<&trr<&ts8N)9s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss82lps8E#ss8E#ts8;rts8N)ss8N)ss8E#ss8E#us8N)ts8N(Q +rr<&mrr<&trr<&ts8N*!s8N*!rr<&us8N)trr<&trr<&srr<&rrr<&prr<&trr<&nrr<&ts8N)t +rr<&trr<&rs8N)urr<&qrr<&qrr<&trr<&srr<&ts8N)orr<&trr<&srr<&trr<&ss8N)trr<&t +rr<&trr<&ss8N)trr<&trr<&ts8N)qrr<&qrr<&trr<&ss8N)trr<&trr<&ts8N)orr<&trr<&q +rr<&krr<&trr<&srr<&trr<&ss8N)trr<&ss8N)urr<&trr<&trr<&srr<&ts8N)trr<&ts8N)q +rr<&qrr<&trr<&ss8N)trr<&trr<&ts8N)9s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs7u`qs8N)rs8N)us8E#ms8N)ss8N)rs8N*!s8;qKrr<&nrr<&r +rr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&rrr<&orr<&srr<&urr<&rrr<&s +rr<&lrr<&rrr<&rrr<&trr<&srr<&prr<&rrr<&srrW9$rrDrr!!)or!!)ip!!)rs!!)rs!!)ut +!!)rs!!)lq!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!)ip!!)or!!)or!!)]l!!)or!!)rs!s&B$ +!;lcr!;lcr!<)ot!;ZWp!;lcr!<)ot!;uis!<)ot!;uis!;c]q!;lcr!;lcr!<)ot!;uis!<)ot +!;uis!5ed8m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs7u`qs8N)rs8N)us8E#ms8N)ss8N)rs8N*!s8;qKrr<&nrr<&r +rr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&rrr<&orr<&srr<&urr<&rrr<&s +rr<&lrr<&rrr<&rrr<&trr<&srr<&prr<&rrr<&srrW9$rrDrr!!)or!!)ip!!)rs!!)rs!!)ut +!!)rs!!)lq!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!)ip!!)or!!)or!!)]l!!)or!!)rs!s&B$ +!;lcr!;lcr!<)ot!;ZWp!;lcr!<)ot!;uis!<)ot!;uis!;c]q!;lcr!;lcr!<)ot!;uis!<)ot +!;uis!5ed8klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs7u`qs8N)rs8N)us8E#ms8N)ss8N)rs8N*!s8;qKrr<&nrr<&r +rr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&rrr<&orr<&srr<&urr<&rrr<&s +rr<&lrr<&rrr<&rrr<&trr<&srr<&prr<&rrr<&srrW9$rrDrr!!)or!!)ip!!)rs!!)rs!!)ut +!!)rs!!)lq!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!)ip!!)or!!)or!!)]l!!)or!!)rs!s&B$ +!;lcr!;lcr!<)ot!;ZWp!;lcr!<)ot!;uis!<)ot!;uis!;c]q!;lcr!;lcr!<)ot!;uis!<)ot +!;uis!5ed8irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&os82iss7ZNms8N)ms8N)ss7ZNms8)eLrr<&nrr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qs7lZhs8E#qs7lZmrr<&lrr<&rs7lZms8E#ls7lZl +s8N)qrr<&rrr<&us8)forr<&srr<&ss8E#mrr<&rrr<&rrr<&trr<&srr<&ss8E#lrr<&rrr<&r +rr<&ls7lZls8N)qrr<&rrr<&trr<&ps7lZms8E#os8E#mrr<&rrr<&rrr<&trr<&srr<&ss8E#5 +s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&os82iss7ZNms8N)ms8N)ss7ZNms8)eLrr<&nrr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qs7lZhs8E#qs7lZmrr<&lrr<&rs7lZms8E#ls7lZl +s8N)qrr<&rrr<&us8)forr<&srr<&ss8E#mrr<&rrr<&rrr<&trr<&srr<&ss8E#lrr<&rrr<&r +rr<&ls7lZls8N)qrr<&rrr<&trr<&ps7lZms8E#os8E#mrr<&rrr<&rrr<&trr<&srr<&ss8E#5 +s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&os82iss7ZNms8N)ms8N)ss7ZNms8)eLrr<&nrr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qs7lZhs8E#qs7lZmrr<&lrr<&rs7lZms8E#ls7lZl +s8N)qrr<&rrr<&us8)forr<&srr<&ss8E#mrr<&rrr<&rrr<&trr<&srr<&ss8E#lrr<&rrr<&r +rr<&ls7lZls8N)qrr<&rrr<&trr<&ps7lZms8E#os8E#mrr<&rrr<&rrr<&trr<&srr<&ss8E#5 +s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'!s7ZNms8N)ms8N)ss7ZNks82kNrr<&nrr<&rrr<&u +rr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&ds8N)trr<&lrr<&lrr<&rrr<&is8N)o +rr<&ks8N)qrr<&rrrW9$rrDus!!)rs!!)rs!!)iprrDlp!!)or!!)or!!)ut!!)rs!!)iprrDio +!!)or!!)or!!)]l!!)ZkrrDoq!!)or!!)ut!!)ip!!)TirrDiorrDlp!!)or!!)or!!)ut!!)rs +!!)iprrBn8rp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'!s7ZNms8N)ms8N)ss7ZNks82kNrr<&nrr<&rrr<&u +rr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&ds8N)trr<&lrr<&lrr<&rrr<&is8N)o +rr<&ks8N)qrr<&rrrW9$rrDus!!)rs!!)rs!!)iprrDlp!!)or!!)or!!)ut!!)rs!!)iprrDio +!!)or!!)or!!)]l!!)ZkrrDoq!!)or!!)ut!!)ip!!)TirrDiorrDlp!!)or!!)or!!)ut!!)rs +!!)iprrBn8rojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'!s7ZNms8N)ms8N)ss7ZNks82kNrr<&nrr<&rrr<&u +rr<&urr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&ds8N)trr<&lrr<&lrr<&rrr<&is8N)o +rr<&ks8N)qrr<&rrrW9$rrDus!!)rs!!)rs!!)iprrDlp!!)or!!)or!!)ut!!)rs!!)iprrDio +!!)or!!)or!!)]l!!)ZkrrDoq!!)or!!)ut!!)ip!!)TirrDiorrDlp!!)or!!)or!!)ut!!)rs +!!)iprrBn8ro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8;rss8N'!s8E#ms8N)ms8N)ss8E#ns8N)ts8N(Prr<&rrrW9$ +rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!*#u!!)rs!!)or!!)lq!!)Qh!!)rs!!*#u!!)]l!!)]l +!!)or!!)`m!!)rs!!)ip!!)]l!s&B$!;lcr!;lcu!<<'!r;Q`sr;Q`sr;Q`srVlitr;Q`sqYpNq +qu6Wrqu6WrrVlitr;Q`srVlitr;Q`sq>UEpqu6Wrqu6Wrp&>!lp&>*os8N)rrr<&rrr<&trr<&p +rr<&mrr<&srr<&trr<&srr<&qrr<&rrr<&rrr<&trr<&srr<&trr<&srr<&9s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8;rss8N'!s8E#ms8N)ms8N)ss8E#ns8N)ts8N(Prr<&rrrW9$ +rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!*#u!!)rs!!)or!!)lq!!)Qh!!)rs!!*#u!!)]l!!)]l +!!)or!!)`m!!)rs!!)ip!!)]l!s&B$!;lcr!;lcu!<<'!r;Q`sr;Q`sr;Q`srVlitr;Q`sqYpNq +qu6Wrqu6WrrVlitr;Q`srVlitr;Q`sq>UEpqu6Wrqu6Wrp&>!lp&>*os8N)rrr<&rrr<&trr<&p +rr<&mrr<&srr<&trr<&srr<&qrr<&rrr<&rrr<&trr<&srr<&trr<&srr<&9s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8;rss8N'!s8E#ms8N)ms8N)ss8E#ns8N)ts8N(Prr<&rrrW9$ +rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!*#u!!)rs!!)or!!)lq!!)Qh!!)rs!!*#u!!)]l!!)]l +!!)or!!)`m!!)rs!!)ip!!)]l!s&B$!;lcr!;lcu!<<'!r;Q`sr;Q`sr;Q`srVlitr;Q`sqYpNq +qu6Wrqu6WrrVlitr;Q`srVlitr;Q`sq>UEpqu6Wrqu6Wrp&>!lp&>*os8N)rrr<&rrr<&trr<&p +rr<&mrr<&srr<&trr<&srr<&qrr<&rrr<&rrr<&trr<&srr<&trr<&srr<&9s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7lZps7lZns7lZos7lZos7lYJs8N)trr<&trr<&trr<&t +rr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&trr<&urr<&ts8N)os8N)trr<&trr<&ts8N)s +rr<&lrr<&qrr<&ts8N)ts8N)trr<&orr<&ts8N)trr<&trr<&ss8N)trr<&urr<&ts8N)srr<&s +rr<&ts8N)trr<&qrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&orr<&trr<&qrr<&krr<&ts8N)t +rr<&trr<&ss8N)trr<&srr<&orr<&ts8N)ts8N)trr<&ts8N)trr<&qrr<&qrr<&trr<&srr<&s +rr<&ts8N)trr<&rs8N)As8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7lZps7lZns7lZos7lZos7lYJs8N)trr<&trr<&trr<&t +rr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&trr<&urr<&ts8N)os8N)trr<&trr<&ts8N)s +rr<&lrr<&qrr<&ts8N)ts8N)trr<&orr<&ts8N)trr<&trr<&ss8N)trr<&urr<&ts8N)srr<&s +rr<&ts8N)trr<&qrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&orr<&trr<&qrr<&krr<&ts8N)t +rr<&trr<&ss8N)trr<&srr<&orr<&ts8N)ts8N)trr<&ts8N)trr<&qrr<&qrr<&trr<&srr<&s +rr<&ts8N)trr<&rs8N)As8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7lZps7lZns7lZos7lZos7lYJs8N)trr<&trr<&trr<&t +rr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&trr<&urr<&ts8N)os8N)trr<&trr<&ts8N)s +rr<&lrr<&qrr<&ts8N)ts8N)trr<&orr<&ts8N)trr<&trr<&ss8N)trr<&urr<&ts8N)srr<&s +rr<&ts8N)trr<&qrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&orr<&trr<&qrr<&krr<&ts8N)t +rr<&trr<&ss8N)trr<&srr<&orr<&ts8N)ts8N)trr<&ts8N)trr<&qrr<&qrr<&trr<&srr<&s +rr<&ts8N)trr<&rs8N)As8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;rps8)frs7lZns7lZms8)fqs7u_Hs8;rps8;rrs8E#u +s8N*!s8N*!rrE-"r;c`pr;Zp!!!)orr;ccqr;cQk!gHnr;ccqrW)rtrW)rt +!gHn +r;ccqrW)rtrW)rt! +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;rps8)frs7lZns7lZms8)fqs7u_Hs8;rps8;rrs8E#u +s8N*!s8N*!rrE-"r;c`pr;Zp!!!)orr;ccqr;cQk!gHnr;ccqrW)rtrW)rt +!gHn +r;ccqrW)rtrW)rt! +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;rps8)frs7lZns7lZms8)fqs7u_Hs8;rps8;rrs8E#u +s8N*!s8N*!rrE-"r;c`pr;Zp!!!)orr;ccqr;cQk!gHnr;ccqrW)rtrW)rt +!gHn +r;ccqrW)rtrW)rt! +!BpJ^mHsrH!.k0Brr<%Ms7H +!BU8[l0\ND!.k0Brr<%Ms7H +!B:&Xj6cm>!.k0Brr<%Ms7H +!BpJ^mHsrH!.k0Brr<%Ms7H +!BU8[l0\ND!.k0Brr<%Ms7H +!B:&Xj6cm>!.k0Brr<%Ms7H +!BpJ^m=G:gs8W*!!.k1Brr<%Ms7H +!BU8[l%/kcs8W*!!.k1Brr<%Ms7H +!B:&Xj+75]s8W*!!.k1Brr<%Ms7H +!BpJ^m=G:grrE)t!.k1Es8;qKs7cQl!.k14s8MBdeieN~> +!BU8[l%/kcrrE)t!.k1Es8;qKs7cQl!.k14s8M6`c8pI~> +!B:&Xj+75]rrE)t!.k1Es8;qKs7cQl!.k14s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mEYb3!;QTk!;ulo!7LoI!;?Hm!:^$d!3Q;"!8@JQ!:Kmc!;c`o!3uS&!.k0$s53kUm/bd$ +J,~> +!BU8[l-B>/!;QTk!;ulo!7LoI!;?Hm!:^$d!3Q;"!8@JQ!:Kmc!;c`o!3uS&!.k0$s53kUklK'j +J,~> +!B:&Xj3I])!;QTk!;ulo!7LoI!;?Hm!:^$d!3Q;"!8@JQ!:Kmc!;c`o!3uS&!.k0$s53kUirR%V +J,~> +!BpJ^mG7g=!;ZZp!;ZZk!<)ro!7LoI!;?Hm!:^$d!;HNf!7h,K!!3*"n,E@fg&D$PqYpNqp\t3n +p\t3nbl7YCpAY*mm/I%ca8Z,>pAY*mJcDVIrp9a;4b*~> +!BU8[l.uC9!;ZZp!;ZZk!<)ro!7LoI!;?Hm!:^$d!;HNf!7h,K!!3*"n,E@fg&D$PqYpNqp\t3n +p\t3nbl7YCpAY*mm/I%ca8Z,>pAY*mJcDVIrojI/3e.~> +!B:&Xj5'b3!;ZZp!;ZZk!<)ro!7LoI!;?Hm!:^$d!;HNf!7h,K!!3*"n,E@fg&D$PqYpNqp\t3n +p\t3nbl7YCpAY*mm/I%ca8Z,>pAY*mJcDVIro4$s2h1~> +!BpJ^mHsrH!<)rm!:g*h!;QTo!6tQD!9!nW!;HNf!7q/M!<3#u!:Tpf!87AP!;c]q!;QQo!;HKn +!6bBB!;?Em!:9^c!6>*>!;?Em!.k0Is8MBdeieN~> +!BU8[l0\ND!<)rm!:g*h!;QTo!6tQD!9!nW!;HNf!7q/M!<3#u!:Tpf!87AP!;c]q!;QQo!;HKn +!6bBB!;?Em!:9^c!6>*>!;?Em!.k0Is8M6`c8pI~> +!B:&Xj6cm>!<)rm!:g*h!;QTo!6tQD!9!nW!;HNf!7q/M!<3#u!:Tpf!87AP!;c]q!;QQo!;HKn +!6bBB!;?Em!:9^c!6>*>!;?Em!.k0Is8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rt!<3#r!;lfl!<3#o!;ulq!<)rr!<<)u!;ulq!<)rs!!*&t!<3#o!<)rq +!;c`m!;c`q!;6Bl!<)rt!<3#s!!*&u!!*&u!!*&t!;uln!;HKn!;uis!:Tpf!87AP!:^!g!;HKn +!6bBB!9!kW!6>*>!.k0=s8MBdeieN~> +!BU8[l0\ND!;uls!<)rt!<3#r!;lfl!<3#o!;ulq!<)rr!<<)u!;ulq!<)rs!!*&t!<3#o!<)rq +!;c`m!;c`q!;6Bl!<)rt!<3#s!!*&u!!*&u!!*&t!;uln!;HKn!;uis!:Tpf!87AP!:^!g!;HKn +!6bBB!9!kW!6>*>!.k0=s8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rt!<3#r!;lfl!<3#o!;ulq!<)rr!<<)u!;ulq!<)rs!!*&t!<3#o!<)rq +!;c`m!;c`q!;6Bl!<)rt!<3#s!!*&u!!*&u!!*&t!;uln!;HKn!;uis!:Tpf!87AP!:^!g!;HKn +!6bBB!9!kW!6>*>!.k0=s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s82los7lZos7lZos7lZps7ZNns7lZps7cTos7lZn +s82los7lZls8N)ls8N*!rriE&!!*'!p]( +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s82los7lZos7lZos7lZps7ZNns7lZps7cTos7lZn +s82los7lZls8N)ls8N*!rriE&!!*'!p]( +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s82los7lZos7lZos7lZps7ZNns7lZps7cTos7lZn +s82los7lZls8N)ls8N*!rriE&!!*'!p]( +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N)ss8N)ps8N)os8N)rs8E#ss8E#ts8;rts8N'!s8E#s +s8E#us8E#ts8N)ts8N)ms8N)rs8N)ts8N)rs8N)ls82lqs8E#ts8E#ts8E#ts8N)us8N)ts8N)m +rr<&orr<&trr<&prr<&qrr<&srr<&trr<&trr<&nrr<&ts8N)qrr<&orr<&nrr<&prr<&trr<&r +s8N)urr<&trr<&trr<&ss8N)trr<&rrr<&mrr<&qrr<&trr<&prr<&lrr<&trr<&srr<&ts8N)t +rr<&srr<&trr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<&trr<&ts8N(Ms2tB@m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N)ss8N)ps8N)os8N)rs8E#ss8E#ts8;rts8N'!s8E#s +s8E#us8E#ts8N)ts8N)ms8N)rs8N)ts8N)rs8N)ls82lqs8E#ts8E#ts8E#ts8N)us8N)ts8N)m +rr<&orr<&trr<&prr<&qrr<&srr<&trr<&trr<&nrr<&ts8N)qrr<&orr<&nrr<&prr<&trr<&r +s8N)urr<&trr<&trr<&ss8N)trr<&rrr<&mrr<&qrr<&trr<&prr<&lrr<&trr<&srr<&ts8N)t +rr<&srr<&trr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<&trr<&ts8N(Ms2tB@klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N)ss8N)ps8N)os8N)rs8E#ss8E#ts8;rts8N'!s8E#s +s8E#us8E#ts8N)ts8N)ms8N)rs8N)ts8N)rs8N)ls82lqs8E#ts8E#ts8E#ts8N)us8N)ts8N)m +rr<&orr<&trr<&prr<&qrr<&srr<&trr<&trr<&nrr<&ts8N)qrr<&orr<&nrr<&prr<&trr<&r +s8N)urr<&trr<&trr<&ss8N)trr<&rrr<&mrr<&qrr<&trr<&prr<&lrr<&trr<&srr<&ts8N)t +rr<&srr<&trr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<&trr<&ts8N(Ms2tB@irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ps8N)os8N)rs8N)rs8N)us8E#qs8N)rs8N*! +s8N)ts8N)ts8N)ms8N)ls8N)rs8N)ls82lqs8N)ss8N)us8N)ts8N)us8;rfs8;rrrr<&rrr<&q +rr<&prr<&urr<&trr<&rrr<&prr<&rrr<&qrr<&orr<&nrr<&qrr<&rrr<&srr<&prr<&rrr<&t +rr<&srr<&rrr<&mrr<&lrr<&prr<&mrr<&rrr<&urr<&rrr<&trr<&srr<&orr<&qrr<&mrr<&r +rr<&rrr<&trr<&srr<&trr<&srr<%Ms2tB@m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ps8N)os8N)rs8N)rs8N)us8E#qs8N)rs8N*! +s8N)ts8N)ts8N)ms8N)ls8N)rs8N)ls82lqs8N)ss8N)us8N)ts8N)us8;rfs8;rrrr<&rrr<&q +rr<&prr<&urr<&trr<&rrr<&prr<&rrr<&qrr<&orr<&nrr<&qrr<&rrr<&srr<&prr<&rrr<&t +rr<&srr<&rrr<&mrr<&lrr<&prr<&mrr<&rrr<&urr<&rrr<&trr<&srr<&orr<&qrr<&mrr<&r +rr<&rrr<&trr<&srr<&trr<&srr<%Ms2tB@klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ps8N)os8N)rs8N)rs8N)us8E#qs8N)rs8N*! +s8N)ts8N)ts8N)ms8N)ls8N)rs8N)ls82lqs8N)ss8N)us8N)ts8N)us8;rfs8;rrrr<&rrr<&q +rr<&prr<&urr<&trr<&rrr<&prr<&rrr<&qrr<&orr<&nrr<&qrr<&rrr<&srr<&prr<&rrr<&t +rr<&srr<&rrr<&mrr<&lrr<&prr<&mrr<&rrr<&urr<&rrr<&trr<&srr<&orr<&qrr<&mrr<&r +rr<&rrr<&trr<&srr<&trr<&srr<%Ms2tB@irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)rs7lZls8N)ls8N*!rr<&ts8N)ss8N)us8N)ts8N)ts8)fcrr<&urr<&rrr<&qrr<&p +rr<&urr<&ts7lZjrr<&rrr<&qrr<&orr<&nrr<&qs7lZmrr<&ps7lZnrr<&srr<&rrr<&mrr<&q +s8)flrr<&ms7lZorr<&rrr<&trr<&srr<&ts8)fmrr<&mrr<&rrr<&rrr<&trr<&srr<&ss8E"L +s2Y0=m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)rs7lZls8N)ls8N*!rr<&ts8N)ss8N)us8N)ts8N)ts8)fcrr<&urr<&rrr<&qrr<&p +rr<&urr<&ts7lZjrr<&rrr<&qrr<&orr<&nrr<&qs7lZmrr<&ps7lZnrr<&srr<&rrr<&mrr<&q +s8)flrr<&ms7lZorr<&rrr<&trr<&srr<&ts8)fmrr<&mrr<&rrr<&rrr<&trr<&srr<&ss8E"L +s2Y0=klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)rs7lZls8N)ls8N*!rr<&ts8N)ss8N)us8N)ts8N)ts8)fcrr<&urr<&rrr<&qrr<&p +rr<&urr<&ts7lZjrr<&rrr<&qrr<&orr<&nrr<&qs7lZmrr<&ps7lZnrr<&srr<&rrr<&mrr<&q +s8)flrr<&ms7lZorr<&rrr<&trr<&srr<&ts8)fmrr<&mrr<&rrr<&rrr<&trr<&srr<&ss8E"L +s2Y0=irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)ss7cTks8N)ls8N)ts8N'#rr<&ss8N)us8N)ts8N)rs82ldrrW9$rrDrr!!)lq!!)fo +!W`6#r;Q`so)A[iqu6WrqYpNqq#:!lq>UEppAY*mr;Q`squ6WrpAY*mqu6Wr +r;Q`sq>UEppAY*mp\t3nqu6WrrVlitr;Q`srr2rur;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`s +q>^HpJcEjlrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)ss7cTks8N)ls8N)ts8N'#rr<&ss8N)us8N)ts8N)rs82ldrrW9$rrDrr!!)lq!!)fo +!W`6#r;Q`so)A[iqu6WrqYpNqq#:!lq>UEppAY*mr;Q`squ6WrpAY*mqu6Wr +r;Q`sq>UEppAY*mp\t3nqu6WrrVlitr;Q`srr2rur;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`s +q>^HpJcEjlrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)ss7cTks8N)ls8N)ts8N'#rr<&ss8N)us8N)ts8N)rs82ldrrW9$rrDrr!!)lq!!)fo +!W`6#r;Q`so)A[iqu6WrqYpNqq#:!lq>UEppAY*mr;Q`squ6WrpAY*mqu6Wr +r;Q`sq>UEppAY*mp\t3nqu6WrrVlitr;Q`srr2rur;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`s +q>^HpJcEjlro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8N)rs8N)ps8N)os8N)rs8E#ms8N)qs8E#ns8N)ts8N)t +s8N)ts8N)ss8N)ss8N)ss8N)rs8N)ls8N)ts8N'!s8E#ts8E#ts8N)ts8N)us8N)ts8N)nrr<&r +rrW9$rrDrr!!)lq!!)fo!W`6#r;Q`so)A[iqu6WrqYpNqq#:!lq>UEppAY*m +r;Q`squ6WrpAY*mqu6Wrr;Q`sq>UEppAY*mp\t3nqu6WrrVlitr;Q`srr2rur;Q`sqYpNqpAY*m +qu6Wrqu6WrrVlitr;Q`srVlitr;Q`sJcEmmrp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8N)rs8N)ps8N)os8N)rs8E#ms8N)qs8E#ns8N)ts8N)t +s8N)ts8N)ss8N)ss8N)ss8N)rs8N)ls8N)ts8N'!s8E#ts8E#ts8N)ts8N)us8N)ts8N)nrr<&r +rrW9$rrDrr!!)lq!!)fo!W`6#r;Q`so)A[iqu6WrqYpNqq#:!lq>UEppAY*m +r;Q`squ6WrpAY*mqu6Wrr;Q`sq>UEppAY*mp\t3nqu6WrrVlitr;Q`srr2rur;Q`sqYpNqpAY*m +qu6Wrqu6WrrVlitr;Q`srVlitr;Q`sJcEmmrojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8N)rs8N)ps8N)os8N)rs8E#ms8N)qs8E#ns8N)ts8N)t +s8N)ts8N)ss8N)ss8N)ss8N)rs8N)ls8N)ts8N'!s8E#ts8E#ts8N)ts8N)us8N)ts8N)nrr<&r +rrW9$rrDrr!!)lq!!)fo!W`6#r;Q`so)A[iqu6WrqYpNqq#:!lq>UEppAY*m +r;Q`squ6WrpAY*mqu6Wrr;Q`sq>UEppAY*mp\t3nqu6WrrVlitr;Q`srr2rur;Q`sqYpNqpAY*m +qu6Wrqu6WrrVlitr;Q`srVlitr;Q`sJcEmmro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7cTns7lZos7lZos7lZos7lZps7lZns7lZps8;rts8;rss7lZp +s7lZps7ZNns7lZks7ZNns7lZps8;rts8;rts7lZhs8N)trr<&trr<&trr<&prr<&nrr<&qrr<&t +s8N)orr<&ts8N)qrr<&orr<&nrr<&prr<&ts8N)srr<&orr<&ts8N)trr<&srr<&rrr<&trr<&r +rr<&rrr<&ts8N)prr<&lrr<&ts8N)trr<&ts8N)trr<&ts8N)urr<&ts8N)qrr<&trr<&rrr<&q +rr<&trr<&srr<&srr<&ts8N)trr<&rs8N(Ms3grHm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7cTns7lZos7lZos7lZos7lZps7lZns7lZps8;rts8;rss7lZp +s7lZps7ZNns7lZks7ZNns7lZps8;rts8;rts7lZhs8N)trr<&trr<&trr<&prr<&nrr<&qrr<&t +s8N)orr<&ts8N)qrr<&orr<&nrr<&prr<&ts8N)srr<&orr<&ts8N)trr<&srr<&rrr<&trr<&r +rr<&rrr<&ts8N)prr<&lrr<&ts8N)trr<&ts8N)trr<&ts8N)urr<&ts8N)qrr<&trr<&rrr<&q +rr<&trr<&srr<&srr<&ts8N)trr<&rs8N(Ms3grHklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7cTns7lZos7lZos7lZos7lZps7lZns7lZps8;rts8;rss7lZp +s7lZps7ZNns7lZks7ZNns7lZps8;rts8;rts7lZhs8N)trr<&trr<&trr<&prr<&nrr<&qrr<&t +s8N)orr<&ts8N)qrr<&orr<&nrr<&prr<&ts8N)srr<&orr<&ts8N)trr<&srr<&rrr<&trr<&r +rr<&rrr<&ts8N)prr<&lrr<&ts8N)trr<&ts8N)trr<&ts8N)urr<&ts8N)qrr<&trr<&rrr<&q +rr<&trr<&srr<&srr<&ts8N)trr<&rs8N(Ms3grHirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7u`ns7lZos7lZos7lZms8)frs7lZls8)frs8;rts8;rrs82lq +s7lZos82iss8E#us7lZks7ZNms8;p#rr<'!s8;rts8;rts7u`hrrE-"r;c`pr;c`pq>gBl!!)ip +r;cNjr;Zp!!!*#uq>gKoq>gKoq>gHnr;ccqq>gEmr;ccqrW)rtrW)iqr;cfrq>gKor;ZitrW)rt +q>g9ir;c]or;Zlu!;ulq!!<0#!<3#s!!*&u!;lfp!<)ro!;ulq!;ulr!<3#t!<3!!!<;utqZ$Qq +JcF0urp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ts7u`ns7lZos7lZos7lZms8)frs7lZls8)frs8;rts8;rrs82lq +s7lZos82iss8E#us7lZks7ZNms8;p#rr<'!s8;rts8;rts7u`hrrE-"r;c`pr;c`pq>gBl!!)ip +r;cNjr;Zp!!!*#uq>gKoq>gKoq>gHnr;ccqq>gEmr;ccqrW)rtrW)iqr;cfrq>gKor;ZitrW)rt +q>g9ir;c]or;Zlu!;ulq!!<0#!<3#s!!*&u!;lfp!<)ro!;ulq!;ulr!<3#t!<3!!!<;utqZ$Qq +JcF0urojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts7u`ns7lZos7lZos7lZms8)frs7lZls8)frs8;rts8;rrs82lq +s7lZos82iss8E#us7lZks7ZNms8;p#rr<'!s8;rts8;rts7u`hrrE-"r;c`pr;c`pq>gBl!!)ip +r;cNjr;Zp!!!*#uq>gKoq>gKoq>gHnr;ccqq>gEmr;ccqrW)rtrW)iqr;cfrq>gKor;ZitrW)rt +q>g9ir;c]or;Zlu!;ulq!!<0#!<3#s!!*&u!;lfp!<)ro!;ulq!;ulr!<3#t!<3!!!<;utqZ$Qq +JcF0uro4$s2h1~> +!BpJ^mHsrH!.k10s8N(Ms,6mW!.k0$s8Dusm/bd$J,~> +!BU8[l0\ND!.k10s8N(Ms,6mW!.k0$s8DusklK'jJ,~> +!B:&Xj6cm>!.k10s8N(Ms,6mW!.k0$s8DusirR%VJ,~> +!BpJ^mHsrH!.k10s8N(Ms,6mW!.k0$s8Dusm/bd$J,~> +!BU8[l0\ND!.k10s8N(Ms,6mW!.k0$s8DusklK'jJ,~> +!B:&Xj6cm>!.k10s8N(Ms,6mW!.k0$s8DusirR%VJ,~> +!BpJ^m=G;Us82kJs,?sX!.k0$s8Dusm/bd$J,~> +!BU8[l%/lQs82kJs,?sX!.k0$s8DusklK'jJ,~> +!B:&Xj+76Ks82kJs,?sX!.k0$s8DusirR%VJ,~> +!BpJ^m=G;Us82kJs,R-X!.k0$s8N&tm/bd$J,~> +!BU8[l%/lQs82kJs,R-X!.k0$s8N&tklK'jJ,~> +!B:&Xj+76Ks82kJs,R-X!.k0$s8N&tirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6eq)D'eq)D'f"T]84b*~> +!BU73c@O8lc@O8lcG%R(3e.~> +!B:%0_h#^V_h#^V_nO"g2h1~> +JN\QIJN\QIJN^V.J,~> +JNA?CJNA?CJNCD(J,~> +JN&-=JN&-=JN(2"J,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/books/ps/v71equationpage.eps b/books/ps/v71equationpage.eps new file mode 100644 index 0000000..c5c319d --- /dev/null +++ b/books/ps/v71equationpage.eps @@ -0,0 +1,2672 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner +%%Title: equationpage.eps +%%CreationDate: Sat Jun 21 10:53:47 2008 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 696 475 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 459.83362537429304 translate +681.59055118110246 -459.83362537429304 scale +% Image geometry +710 479 8 +% Transformation matrix +[ 710 0 0 479 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 710 string def +/gstr 710 string def +/bstr 710 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 142082 ASCII Bytes +colorimage +quD:2JN\QIJN\QI`BF,!J,~> +quD:/JNA?CJNA?C`B*nsJ,~> +quD:,JN&-=JN&-=`Ad\pJ,~> +rW)s]JcC<$JcC<$JcE^hs#p>]J,~> +rW)sZJcC<$JcC<$JcE^hs#U,ZJ,~> +rW)sWJcC<$JcC<$JcE^hs#9oWJ,~> +rr<*`rr.KIJc1/uJc1/u`Voi9!^-M`J,~> +rr<*]rr.KIJc1/uJc1/u`Voi9!]g;]J,~> +rr<*ZrV_ +!WYC^Jc()sJc()sNr84$rVYu>rVYu>rqliX4TL!~> +!WY:[Jbt#qJbt#qNr/.#rVPo=rVPo=rqccV3WO[~> +!WY1WJbjroJbjroNr&(!rVGi;rVGi;rqZ]T2ZS@~> +!WYC]JbjroJbjroO88m7bjGE6b_l8nMTkJf"jDl#qMNMars$])qYK/6!.Y~> +!WY:YJbalmJbalmO8/g6bjGE6b_l5lMTkJf"jDl"q23D`rs$])q>&u1!.Y~> +!WY1VJbXfkJbXfkO8&a4bjGE6b_c,iM9PAe"jDhupkd5^rs$](q"Wc+!.Y~> +!Bp>Xq#LHro)O@;JbalmJbc):!K-jCr!!%Vq>#pHmJI.dMY[(*rU'L`rJLUM!T?1l~> +!BU)TpAk6po)O@9JbO`iJbPr6!K$dBr!!%Up\0OCmJI.dM>-b$rU'L`rJCOJ!T,qg~> +!B9iPo`5$no)O@7Jb=TeJb>f2!JgX@qZZqRp%=+=mJ@(cL\:=qrU'I_rJ1CF!So\b~> +!Bp;WpB/E6`%CW^JbO`iJbO`iU\=eGr9a=ar/(1BM>Zc;"oO5OpPJh8q>pMNrq?HN4b*~> +!BU&So`N34`%CW^Jb=TeJb=TeU\+YCqsF1_qhOk;L\pK7"oF)JonWG3q#UAJrq- +!B9fOo)m!2`%CW^Jb+HaJb+HaU[nM@qsF.^qhF_6LAUB5"oF&Go7m/0p]:8Hrpp0F2h1~> +!Bp;Wp(.1.qQ+s_PA6:)B9P$56BcuoJbJL)!B;b3p&R-+j7WI4r\"=mJ$k^M"^OuqsF.ZqhY7F!T#ti~> +!BU#RoFLt,qQ+s_PA6:)B9P$56BcumJb8@%!B2Y1oDpm'j7E=1r[n7:En#[4Jb8!p!JgO=p'(;J +o^mq8mIg_[L\14oqX*tWqM5(B!Sf_d~> +!B9cNnIPY)qQ+s_PA6:)B9P$56BcujJar-t!AuJ.nGtL!j7*+,r[e18E6s1+Jaqdj!JU=9oEG#D +naV>.mIUSWL%4\eq!I\SpkA_;!SKD^~> +!Bp5UoFLu0rRn3jg"`aZgP!Sqn*,DqJb8@%!B;b3oDpp)j7ER90=\&s00%=0oRZYqoDsaDmIg_[ +L\14oqYU!^!;lHnqM4_8L\goArrE#krrDri!W%TNoE!`1J,~> +!BTuQndkc.rRn3jg"`aZgP!Sqn*,DoJb&4!!B)S0nc:X$j73F50"7in/iLt*nq$Amnc=L?mIUSW +L@Xniq"s^Z!;lBlpkJA1LA:Z +!B9]LmLT?*rRn3jg"`aZgP!Sqn*,DkJaVpn!AuJ.mK#0sj6d.0/[VEf/N(\%mXafemK&"8mI:AS +K^S8]p\XLV!;l9ipOqu&K_PB6rrE#frrDrd!V_9HmK(ouJ,~> +!Bp5Uo+1j^q.'!S]bf~> +!BTrPn.5O[q.'=Kq;_S5;$s8()tXJai=$!JU:8nHJZ@nF2/+qsjI^qsajaL%+Sc +p\XL[!<;Tg!;l9epP&V9!SBG`~> +!B9ZKljs+Wq.'rqsF1Zqs=RZK'_iU +o_\%T!<;Hc!;l-aoRd)/!S',Z~> +!Bp2TnIM9cSg;Z[PNqO4eC2_7]E!NQJar-t!B2\2Zlq:[naX"?D=QmSRIMpd@VIK2n_lPt_JM!T +nO,$*M"*DWrp^W@008X&035j%<%k2602J^[R+d,]JarC&!JU:8nHJZ@naV>-qsaXdqsaXdqsaja +L%4\ep\OFW!;c3dpP&V:!SKVd~> +!BToOmLPs`Sg;Z[PNqO4eC2_7]E!NNJaVpn!B)S0YotqVmd@D6D!pLMR-lR^@:q3,mbTul^hb[N +mQrO#L$giOrpCE:/ii?s/lfQr;_Fo./kr@SQe-fVJaW0u!JL.5mKN9:md>c$qsFFaqsFFaqsFX\ +K^S8]p%n+R!;c*aon<>4!S9A_~> +!B9TIl49O\Sg;Z[PNqO4eC2_7]E!NJJa2Xf!AuJ.Y9>YQlKYT*C?jkAPj0hT?Y1m&lJ" +!Bp/SnGWCrR)/p$U':T##6Y89!.jWjnEo]F2u>9.n/^gX1ukMmj7"]_l.n!Qn=VFeiMS?!n3\kb +nF/@irpUEO0/;rh0@'(VbqD^X0?o(;Jai0u!JU46mfiB +!BTlNm/?tnR)/p$U':T##6Y89!.jKfm-X->2Z#-,llG7O1Z+uchs;sUjk27Gm%,h\h4lTjlp<>Y +m-HV_rp1-G/hlW`0$qqs+4^qs+4^qs+FWK'_iUoD._N +!;Yp]o7Hu.!S'5]~> +!B9QHkPbGiR)/p$U':T##6Y89!.j]!*k8iSD1#&BYgZL.Ji7'>;kF4&Pfq9p_k/MH9X/]Qu:`%=MG/]<5'J`lOc!J'\,jot7)kN@BbqrRkYqrRkYqrS(OJEQ*GnG25F +!;YaXn::N$!RNcU~> +!BouNkl(Pb/K"OJ,l%Fkk^hsbkQ*UqroaAA0E1/FHnV'iHKaQG6g3Yc0B\/h0*?jj6SJH&!B2\2 +kRPH_7-HBZjlkph0/>78idp +!BTZHj8K#]/K"OJ,l%Fkj+67XirM%jro4#;0)jl@GV5F_GN7^960$oV0&hT_/d$[b5q`/s!B)S0 +isrdU6fTmRi8`kU/ho%4h1=U;j7)(0Ic0V;"lOjij*oq`bQ%Y?bQ%Y?bQZpRj5YUHq98d;q9/lt +IfA@.brU@~> +!B99@g\q0U/K"OJ,l%FkgO\,HgAs,_rn@H1/cOK7F=ibRF5,G$5MOjC/_YdR/H^CT5:ulh!AlD- +gCCYD6/+%Eg"Y96/MAb/eUcJ+g[NquH.hT#"ke1UgNhKL^]4B3^]4B3^]iD:gY7#,q7uq/q7m$a +H2cP!`]&D~> +!BouNkl1Vb#V@VJpAfd.J`uLb!B2\2kQ*Uqroap-01.D6kiaZekgqITkaX;Qr9+/K0E1/92_Y0o% +X9XRkXmMKkig#>91CSJJ`q[KnE9n'jmCP$jacRYJE?[X!!)oG!!)oG"m(9uk^_dkeGB7Be,eZ]r +oaC14b*~> +!BTZHj8T)]#V@VJpAfd)J`H.X!B)S0irM%jro4R#/jV,.j5VaXj3oVIj-_NFr8RfD0)jl32D5!h% +WsCLj%(f?j5[s.8OP2AJ`D=AnDaOui9e_li-s_HIc1+I!!)o?!!)o?"lOjij*oq_bkhD:bQ6XNr +o4%(3e.~> +!B99@g]%6U#V@VJpAfd!J_TSH!AlD-gAs,_rnA!j/O(i#gY4;EgWM06gQX:4r7_6:/cOK*1bJ^]% +WO(CgI +!BouNkl1Vc*9u5B"o&(Kk^hsbkQ*UqroaAA0E1/;k=714roanH4N;n)K]q/U1Q8W6XQW#)rob.W +0=Iir01=FUUb>]X\5P&VQ7kY"\":fpk^hsikQ-4qqpbEAqpYf2JEZ3IjnmO-!;k7G!;k7LjacRY +JE?[XrW)uJrW)iF!Tek2kQ0'oJ,~> +!BT]IjSo2_*9u5B"o&(KjFQCZj8h.kro=)<0)jo6j$kY,ro=VC4MlP"J`PEI0oE0+WoQGuro=kR +0!_?h/k"1LTIs0O[8JWMP:f4oZ^]'fjFQCaj8j_fqonj9qof6%IcTR=i;:^u!;jt?!;jtDi-sbJ +Ic1+IrW)uBrW)i>!T8G+j8mOeJ,~> +!B96a>O"EYbXd6hTgk"8Qg];`SqnW"-qnNBgHJI;%g&&Pb!;jP3!;jP8fm;H/ +HJ/22rW)u6rW)i2!SMeug]>DRJ,~> +!Bp#Ol2CYh`gQi;/L:B8*$kL`Ja%aMmHFX10E12:2_Y-o!fAY7rosD8%5r=fl06H-3\WspksI-' +kls("0/,eCf`(+EX&_&7=0(TLSPM$t9uV\JJa)gk!J0A0eG0+Ae-4rbl03c\qpbEAqpYf2Ja)EM +jnmR-!<(FI!;k7HjamEq!Ra,]~> +!BT]IjSf,c`gQi;/L:B8*$kL`J`MCCmGn:+0)jo42D4sh!f&D.roF&2%5i1^jQ+Eq3%mUgj?YEt +j9@Lp/h]V?e,JD;W)PQ0Ll9>Q2?J`QIa!Iiu(bkV89bQZpRjQ(dJqonj9qof6%IcTR= +i;:au!<(.A!;jt@i-t[d!R<`V~> +!B9 +!Bp#Ol2CYh`gZq,[EWpW`6nPaJa%aMiopM`7Ha[7!A?fkl%/*AklH@smF2=$Ja)EMjmCP$jal[\ +J`Z:K!Ten3klK3qJ,~> +!BT]Ijo,5d`gZq,[EWpW`6nPaJ`VIEioL5[7-":.!A6ZhjalO9jT0khmE>alJ*#dAi9e_li.'kM +J)K_ +!B9?Bh>RB\`gZq,[EWpW`6nPaJ_bn5inXZO6ehUr!A-Neh1=D)h#ViUmD/t[HJRD'g?l][g3VT2 +HJ7c&!SVl!h#YPTJ,~> +!Bp#OlM^bi`gQl,3g9Tn"BYR&Ja.gOj6?]S09uM$!A?fkl@J6Cl2cIumF;C&Ja2NOk3^\&k(2g_ +J`c@M!Tnt4l2f?sJ,~> +!BT]Ijo,5d`gQl,3g9Tn"BYR&J`VIEj5g?J/s6+o!A6ZhjalO9jT0kimEGgnJ*#dAiU+kniIBtN +J)Te>!TAP-jT3[gJ,~> +!B9?BhYmK]`gQl,3g9Tn"BYR&J_kt7j5'j>/WK_c!A-QfhLXP+h>quWmD/t[Hf!V+g?l][g3_]5 +HeRl'!SVo"h>t\VJ,~> +!Bp#OlMghk&_t2%fn@#Go66o-!.jEdlJq.2Sqc&!l2dfcJa.gOb3B"Yk3^\&k(2g_J`c@M"m1C$ +l@J*beH+f`rosO54b*~> +!BT`Jk5PDg&_t2%fn@#Go66o-!.j9`k2YS*S:oSojoM9YJ`_OGb2r_SiU+kniIC"PJ)Te>"lXsn +k'u@WblQdQroO7-3e.~> +!B9?BhZ!Q_&_t2%fn@#Go66o-!.j!XhW*GoQ@RB]h>s4EJ_kt7b2*/Gg?l][g3_]5HeRl'"kn=[ +hL!uD_#`8:rn[[s2h1~> +!Bp#OlMghk'5_SV(2[7W6#A@U!.jEdl@J5OlD*VFJ[k+0"h9-Kl@HJ4jor8GlKWr1mH+GZJc=p8 +dli3~> +!BT`Jk5PDg'5_SV(2[7W6#A@U!.j9`k(2ZGk+h&>J$eV%"gidAk'sc*i +!B9BChu +!Bp&PlgXt+l[eAQl[eArlg&`mlg&`mlg&`mlN,KuJ,~> +!BTcKkOAP'kCMfIkCMfjkNd-dkNd-dkNd-dk5ipjJ,~> +!B9BCi:-eui.9g;i.9g\i9P1Wi9P1Wi9P1WhuUtZJ,~> +!Bp%*l[eAQl[eAQlbD`de3/<~> +!BTb%kCMfIkCMfIkJ-0\coQ[~> +!B9@ri.9g;i.9g;i4n1Nau=h~> +!Boe#i.9g;i.9g;i4e+L4b*~> +!BTIrg4@t/g4@t/g:l8@3e.~> +!B9%id"0Ppd"0Ppd([j,2h1~> +!'PmaJUrB'JUrB']n$/HJ,~> +!'5[SJTcTfJTcTf]ljB:J,~> +!&oIAJS0OHJS0OH]k7=(J,~> +!BpJ^m5t=JrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&c!S0Da~> +!BU8[kr\nFrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&_!R<`V~> +!B:&Xj#d8@rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&Y!Q-jH~> +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rp9a;4b*~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rojI/3e.~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!ro4$s2h1~> +!BpJ^mDo8,!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)um/bd$J,~> +!BU8[l,Wi(!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uklK'jJ,~> +!B:&Xj2_3"!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uirR%VJ,~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls5*eS!.k0$ +s5*bZ!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu +!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duu +s8MBdeieN~> +!BU8[kl:__rrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls5*eS!.k0$ +s5*bZ!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu +!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duu +s8M6`c8pI~> +!B:&XirB)YrrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls5*eS!.k0$ +s5*bZ!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu +!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duu +s8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcG?A +rW!!!!:Tpf!:9^c!9!nQ!8@GQ!;?Em!.k0urr<&urrW9$!<<#u!ri9#rW";F!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#urVneVrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<23`c8pI~> +!B:&Xis,M`rrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcG?A +rW!!!!:Tpf!:9^c!9!nQ!8@GQ!;?Em!.k0urr<&urrW9$!<<#u!ri9#rW";F!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#urVneVrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<2!Z_`*)~> +!BpJ^m/R.crrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1A +rr<&us8N)frr<&crr<&Vrr<&srr<&Qrr<&mrr<%Ms3^iM!<3'!!<;rs!<;rs-N=)G!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1A +rr<&us8N)frr<&crr<&Vrr<&srr<&Qrr<&mrr<%Ms3^iM!<3'!!<;rs!<;rs-N=)G!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1A +rr<&us8N)frr<&crr<&Vrr<&srr<&Qrr<&mrr<%Ms3^iM!<3'!!<;rs!<;rs-N=)G!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcGEC!!)rs!!)Kf!!(.@!!)rs!!(aQ!!%TM`r?#=rr3'#rrE)u!!<0#s8E!FrrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p8!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<;lq(B4C7!<3'!!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcGEC!!)rs!!)Kf!!(.@!!)rs!!(aQ!!%TM`r?#=rr3'#rrE)u!!<0#s8E!FrrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p8!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<;lq(B4C7!<3'!!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1B +rr<&ms8;rmrr<&rs8E#ts8E#ss8E#qs8N'!s8;rps8;p!rr<&prr<&srr<&ss8;p%rr<'!rr<&t +s8N)ss8;rps7u`ns8E#os8;rqs8N'!s8;rps8;ourr@WMp&>0qrrE'!s82iss82jDrrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<<'!!<3!5!<3'!!<3'!!<3'!!<3'!!<3'! +!<;fo'`S15!<3'!!<3'!!<3'!!<3'!!<<#u!<<&c!S0Da~> +!BU8[kl:__rrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1B +rr<&ms8;rmrr<&rs8E#ts8E#ss8E#qs8N'!s8;rps8;p!rr<&prr<&srr<&ss8;p%rr<'!rr<&t +s8N)ss8;rps7u`ns8E#os8;rqs8N'!s8;rps8;ourr@WMp&>0qrrE'!s82iss82jDrrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<<'!!<3!5!<3'!!<3'!!<3'!!<3'!!<3'! +!<;fo'`S15!<3'!!<3'!!<3'!!<3'!!<<#u!<<&_!R<`V~> +!B:&XirB)YrrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1B +rr<&ms8;rmrr<&rs8E#ts8E#ss8E#qs8N'!s8;rps8;p!rr<&prr<&srr<&ss8;p%rr<'!rr<&t +s8N)ss8;rps7u`ns8E#os8;rqs8N'!s8;rps8;ourr@WMp&>0qrrE'!s82iss82jDrrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<<'!!<3!5!<3'!!<3'!!<3'!!<3'!!<3'! +!<;fo'`S15!<3'!!<3'!!<3'!!<3'!!<<#u!<<&Y!Q-jH~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcGBB!!)fo!!)ut!!)ip!!)lq!!)rs!!)lq!!)lqrrE#t!!)ut!!)utrrDio!s&B$!;c]q +!<)rt!<)ot!;uis!<)ot!<)ot!;c]q!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!.k1Drr<&u +rrW9$!<<#u!ri9#rW";F!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#urVmT4 +rrE'!rrE'!rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u!<23`c8pI~> +!B:&Xis,M`rrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcGBB!!)fo!!)ut!!)ip!!)lq!!)rs!!)lq!!)lqrrE#t!!)ut!!)utrrDio!s&B$!;c]q +!<)rt!<)ot!;uis!<)ot!<)ot!;c]q!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!.k1Drr<&u +rrW9$!<<#u!ri9#rW";F!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#urVmT4 +rrE'!rrE'!rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u!<2!Z_`*)~> +!BpJ^m/R.crrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls763g!<)ot!;lcr!;c]q!;ZWp +!<2uu!;ZWp!;c]q!;uis!<2uu!;lcr!;QTm!;lcr!;lcr!<)ot!;uis!;QQo!;c]q!;?Em!;lcr +!;lcr!<)ot!;uis!<)ot!;uis!.k1CrriE&!<3'!qu?`squ?fu!<;lq!ri9#rVururVururW!$" +!<;lq"TJK%!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'!rrE'!s8Duu +s8MBdeieN~> +!BU8[kl:__rrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls763g!<)ot!;lcr!;c]q!;ZWp +!<2uu!;ZWp!;c]q!;uis!<2uu!;lcr!;QTm!;lcr!;lcr!<)ot!;uis!;QQo!;c]q!;?Em!;lcr +!;lcr!<)ot!;uis!<)ot!;uis!.k1CrriE&!<3'!qu?`squ?fu!<;lq!ri9#rVururVururW!$" +!<;lq"TJK%!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'!rrE'!s8Duu +s8M6`c8pI~> +!B:&XirB)YrrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls763g!<)ot!;lcr!;c]q!;ZWp +!<2uu!;ZWp!;c]q!;uis!<2uu!;lcr!;QTm!;lcr!;lcr!<)ot!;uis!;QQo!;c]q!;?Em!;lcr +!;lcr!<)ot!;uis!<)ot!;uis!.k1CrriE&!<3'!qu?`squ?fu!<;lq!ri9#rVururVururW!$" +!<;lq"TJK%!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'!rrE'!s8Duu +s8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcG3=!!*#u!!)or!!)lq!!)ip!!*#u!!)ip +!!)lq!!)rs!!*#u!!)or!!)fo!s&B$!;lcr!;lcr!<)ot!;uis!<)rp!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!;ulr!.k1Arr<&urrW9$!<;fo!ri9#p]( +!B:&Xis,M`rrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcG3=!!*#u!!)or!!)lq!!)ip!!*#u!!)ip +!!)lq!!)rs!!*#u!!)or!!)fo!s&B$!;lcr!;lcr!<)ot!;uis!<)rp!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!;ulr!.k1Arr<&urrW9$!<;fo!ri9#p]( +!BpJ^m/R.crrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!BU8[kl:__rrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!B:&XirB)YrrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!BpJ^m0!l +qu6`us8N)rrr<&qrr<&orrN3#!;QQo!;c]q!;uis!<2uu!;lcr!;QQo!;uis!<2uu!;lcr!<)ot +!;uis!<2uu!;uis!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!.k1Drr<&urrW9$!<<#u +!ri9#rVuruqu?fu!<<#u!<;Ng!ri9#rW!$"!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'!s7-.& +rrE'!rrE'!rrE'!rrE'!rrE)u!<2?deieN~> +!BU8[km%.frrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLp&>!l +qu6`us8N)rrr<&qrr<&orrN3#!;QQo!;c]q!;uis!<2uu!;lcr!;QQo!;uis!<2uu!;lcr!<)ot +!;uis!<2uu!;uis!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!.k1Drr<&urrW9$!<<#u +!ri9#rVuruqu?fu!<<#u!<;Ng!ri9#rW!$"!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'!s7-.& +rrE'!rrE'!rrE'!rrE'!rrE)u!<23`c8pI~> +!B:&Xis,M`rrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLp&>!l +qu6`us8N)rrr<&qrr<&orrN3#!;QQo!;c]q!;uis!<2uu!;lcr!;QQo!;uis!<2uu!;lcr!<)ot +!;uis!<2uu!;uis!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!.k1Drr<&urrW9$!<<#u +!ri9#rVuruqu?fu!<<#u!<;Ng!ri9#rW!$"!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'!s7-.& +rrE'!rrE'!rrE'!rrE'!rrE)u!<2!Z_`*)~> +!BpJ^m/R.crrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0$ms8;rp +s8;rps7u`lrr<&qs7u`ps8E#ts8E#ss8;ourrDlpq#L?mr;Zlu!;ulq!!<0#!<3#s!!*&u!;lfp +!<)ro!;ulq!;ulr!<3#t!<3!!!<;utJcGEC!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus69Rc +rrE)u!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLp&>$ms8;rp +s8;rps7u`lrr<&qs7u`ps8E#ts8E#ss8;ourrDlpq#L?mr;Zlu!;ulq!!<0#!<3#s!!*&u!;lfp +!<)ro!;ulq!;ulr!<3#t!<3!!!<;utJcGEC!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus69Rc +rrE)u!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLp&>$ms8;rp +s8;rps7u`lrr<&qs7u`ps8E#ts8E#ss8;ourrDlpq#L?mr;Zlu!;ulq!!<0#!<3#s!!*&u!;lfp +!<)ro!;ulq!;ulr!<3#t!<3!!!<;utJcGEC!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus69Rc +rrE)u!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u!r$!<3'!!<;rs!<;rs!<<#u!ri9#qu?`srVururVururVururW!<*!<3'!!<3'!!<<#u +s8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u!r$!<3'!!<;rs!<;rs!<<#u!ri9#qu?`srVururVururVururW!<*!<3'!!<3'!!<<#u +s8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u!r$!<3'!!<;rs!<;rs!<<#u!ri9#qu?`srVururVururVururW!<*!<3'!!<3'!!<<#u +s8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLXoAA$ +kPkM^JcD_L!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus6p!orrE'!rrE'!s8E#srtPP6!<3'! +!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLXoAA$ +kPkM^JcD_L!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus6p!orrE'!rrE'!s8E#srtPP6!<3'! +!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u!r$!<3'!!<;rs!<;rs!<;rs!<<#u!ri9#rVururVururVuruqu?fu!<<#u!ri9#rW)uu!!*#u +1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8MBd +eieN~> +!BU8[kl:__rrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u!r$!<3'!!<;rs!<;rs!<;rs!<<#u!ri9#rVururVururVuruqu?fu!<<#u!ri9#rW)uu!!*#u +1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M6` +c8pI~> +!B:&XirB)YrrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u!r$!<3'!!<;rs!<;rs!<;rs!<<#u!ri9#rVururVururVuruqu?fu!<<#u!ri9#rW)uu!!*#u +1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z +_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLZiBq'kPtJ\JcDbM!!*#u!s&?$ +s8E!"rrE)u!!<0#s7cQos7?9ks7cQqrrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLZiBq'kPtJ\JcDbM!!*#u!s&?$ +s8E!"rrE)u!!<0#s7cQos7?9ks7cQqrrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BU8[kl:__rrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!B:&XirB)YrrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/[4ea8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8MBdeieN~> +!BU8[klCeaa8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M6`c8pI~> +!B:&XirK/[a8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M$Z_`*)~> +!BpJ^m/[1+!<<) +!BU8[klCb'!<<) +!B:&XirK,!!<<) +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8MBdeieN~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M6`c8pI~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mB?Qg!1 +!BU8[l*(-c!1 +!B:&Xj0/L]!1 +!BpJ^mHafN!:9^c!8RSS!:Bdd!36&!!3uP(!;?Em!65$=!7CfH!7LlI!.k0%s8MBdeieN~> +!BU8[l0JBJ!:9^c!8RSS!:Bdd!36&!!3uP(!;?Em!65$=!7CfH!7LlI!.k0%s8M6`c8pI~> +!B:&Xj6QaD!:9^c!8RSS!:Bdd!36&!!3uP(!;?Em!65$=!7CfH!7LlI!.k0%s8M$Z_`*)~> +!BpJ^mHFQM!:9^c!8RSS!:Bdd!36&!!3uP(!;?Em!6>*>!7:`G!7LlI!.k0%s8MBdeieN~> +!BU8[l0/-I!:9^c!8RSS!:Bdd!36&!!3uP(!;?Em!6>*>!7:`G!7LlI!.k0%s8M6`c8pI~> +!B:&Xj66LC!:9^c!8RSS!:Bdd!36&!!3uP(!;?Em!6>*>!7:`G!7LlI!.k0%s8M$Z_`*)~> +!BpJ^mHOWP!<3&>rr<&drr<&!rr<&(rr<&2rr<%lrr<%Ms+::Mm/bd$J,~> +!BU8[l083L!<3&>rr<&drr<&!rr<&(rr<&2rr<%lrr<%Ms+::MklK'jJ,~> +!B:&Xj6?RF!<3&>rr<&drr<&!rr<&(rr<&2rr<%lrr<%Ms+::MirR%VJ,~> +!BpJ^mHOWP!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&lrr<&ps8;rps7u`ns8;ourrDlp +rW)rtrW)osr;ccqrrE#trrDfnr;Zlu!;ulq!;QQo!;lfq!<3#t!<)rr!;6Bj!;c`o!!`H'!<<'! +!<)rt!;ulq!;lfm!;ulr!;ZZn!;uls!!*&t!;lfp!!3*"p](0lqu?Kmq>^Eorr;rtrVufrr;Z`r +!<<#uqu?Wqq>^Bnr;ZcsrVultr;Z]q!WN/ps7u`ps8E#ts8E#us8N'!s8;rps8;ros8;ourrDoq +rr@WM]Dqlt!S0Da~> +!BU8[l083L!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&lrr<&ps8;rps7u`ns8;ourrDlp +rW)rtrW)osr;ccqrrE#trrDfnr;Zlu!;ulq!;QQo!;lfq!<3#t!<)rr!;6Bj!;c`o!!`H'!<<'! +!<)rt!;ulq!;lfm!;ulr!;ZZn!;uls!!*&t!;lfp!!3*"p](0lqu?Kmq>^Eorr;rtrVufrr;Z`r +!<<#uqu?Wqq>^Bnr;ZcsrVultr;Z]q!WN/ps7u`ps8E#ts8E#us8N'!s8;rps8;ros8;ourrDoq +rr@WM]Dqlp!R<`V~> +!B:&Xj6?RF!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&lrr<&ps8;rps7u`ns8;ourrDlp +rW)rtrW)osr;ccqrrE#trrDfnr;Zlu!;ulq!;QQo!;lfq!<3#t!<)rr!;6Bj!;c`o!!`H'!<<'! +!<)rt!;ulq!;lfm!;ulr!;ZZn!;uls!!*&t!;lfp!!3*"p](0lqu?Kmq>^Eorr;rtrVufrr;Z`r +!<<#uqu?Wqq>^Bnr;ZcsrVultr;Z]q!WN/ps7u`ps8E#ts8E#us8N'!s8;rps8;ros8;ourrDoq +rr@WM]Dqlj!Q-jH~> +!BpJ^mHX]O!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!;?Em!;c]q!<)ot!;c]q +!;ZWp!<)rt!;QQo!;uis!<)ot!<)ot!;uis!;uis!;QQo!<)rt!<)ot!<)ot!;ZWp!;c]q!;uis +!<)ot!<)ot!;HKn!<)ot!;uis!<)rt!<)ot!;uis!<)ot!<)ot!;c]q!;?Em!;c]q!<)ot!;uls +!<)ot!<)ot!<)rt!;QQo!<)ot!;c]q!;-9k!;uis!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!<)ot +!;uis!;uis!<)ot!<)rt!;?Em!;ZWp!;uis!<)rt!<)ot!<)ot!<)ot!;uis!<)rt!;c`q!.k0^ +s8MBdeieN~> +!BU8[l0A9K!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!;?Em!;c]q!<)ot!;c]q +!;ZWp!<)rt!;QQo!;uis!<)ot!<)ot!;uis!;uis!;QQo!<)rt!<)ot!<)ot!;ZWp!;c]q!;uis +!<)ot!<)ot!;HKn!<)ot!;uis!<)rt!<)ot!;uis!<)ot!<)ot!;c]q!;?Em!;c]q!<)ot!;uls +!<)ot!<)ot!<)rt!;QQo!<)ot!;c]q!;-9k!;uis!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!<)ot +!;uis!;uis!<)ot!<)rt!;?Em!;ZWp!;uis!<)rt!<)ot!<)ot!<)ot!;uis!<)rt!;c`q!.k0^ +s8M6`c8pI~> +!B:&Xj6HXE!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!;?Em!;c]q!<)ot!;c]q +!;ZWp!<)rt!;QQo!;uis!<)ot!<)ot!;uis!;uis!;QQo!<)rt!<)ot!<)ot!;ZWp!;c]q!;uis +!<)ot!<)ot!;HKn!<)ot!;uis!<)rt!<)ot!;uis!<)ot!<)ot!;c]q!;?Em!;c]q!<)ot!;uls +!<)ot!<)ot!<)rt!;QQo!<)ot!;c]q!;-9k!;uis!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!<)ot +!;uis!;uis!<)ot!<)rt!;?Em!;ZWp!;uis!<)rt!<)ot!<)ot!<)ot!;uis!<)rt!;c`q!.k0^ +s8M$Z_`*)~> +!BpJ^mHX]O!<2uu!;lcu!<<'!q#:UEpr;Q`sq#:UEprr2ru +rVlitqu6Wrq>UEpqu6Wrrr2ruqu6WrrVlitr;Q`sq#:UEpqu6Wrqu6WroD\djrr2rup\t3nqu6Wrp&>!lqu6Wrqu6WrrVlitr;Q`srVlit +r;Q`spAY*mq>UEpr;Q`srVlitqu6`us8N)rrr<&trr<&srr<%Ms0D\(m/bd$J,~> +!BU8[l0A9K!<2uu!;lcu!<<'!q#:UEpr;Q`sq#:UEprr2ru +rVlitqu6Wrq>UEpqu6Wrrr2ruqu6WrrVlitr;Q`sq#:UEpqu6Wrqu6WroD\djrr2rup\t3nqu6Wrp&>!lqu6Wrqu6WrrVlitr;Q`srVlit +r;Q`spAY*mq>UEpr;Q`srVlitqu6`us8N)rrr<&trr<&srr<%Ms0D\(klK'jJ,~> +!B:&Xj6HXE!<2uu!;lcu!<<'!q#:UEpr;Q`sq#:UEprr2ru +rVlitqu6Wrq>UEpqu6Wrrr2ruqu6WrrVlitr;Q`sq#:UEpqu6Wrqu6WroD\djrr2rup\t3nqu6Wrp&>!lqu6Wrqu6WrrVlitr;Q`srVlit +r;Q`spAY*mq>UEpr;Q`srVlitqu6`us8N)rrr<&trr<&srr<%Ms0D\(irR%VJ,~> +!BpJ^mHacP!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;?Em!;lfl!;lcr!;QTn!;-9k +!<2uu!<)ot!;lcr!<)ot!;uis!;HNm!;lcr!;lcr!;c]q!;ZWp!<2uu!<)rn!;ZZj!<2uu!;lcr +!<)ot!;uis!<)rp!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;ulr!;?Em!;lcr!;lcr!;$3j!<2uu +!;ulo!;lcr!;6?l!;lcr!;lcr!<)ot!;uis!;ulr!;$3j!;QQo!<2uu!;uis!;lct!<<)p!;ulr +!.k0Rs8MBdeieN~> +!BU8[l0J?L!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;?Em!;lfl!;lcr!;QTn!;-9k +!<2uu!<)ot!;lcr!<)ot!;uis!;HNm!;lcr!;lcr!;c]q!;ZWp!<2uu!<)rn!;ZZj!<2uu!;lcr +!<)ot!;uis!<)rp!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;ulr!;?Em!;lcr!;lcr!;$3j!<2uu +!;ulo!;lcr!;6?l!;lcr!;lcr!<)ot!;uis!;ulr!;$3j!;QQo!<2uu!;uis!;lct!<<)p!;ulr +!.k0Rs8M6`c8pI~> +!B:&Xj6Q^F!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;?Em!;lfl!;lcr!;QTn!;-9k +!<2uu!<)ot!;lcr!<)ot!;uis!;HNm!;lcr!;lcr!;c]q!;ZWp!<2uu!<)rn!;ZZj!<2uu!;lcr +!<)ot!;uis!<)rp!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;ulr!;?Em!;lcr!;lcr!;$3j!<2uu +!;ulo!;lcr!;6?l!;lcr!;lcr!<)ot!;uis!;ulr!;$3j!;QQo!<2uu!;uis!;lct!<<)p!;ulr +!.k0Rs8M$Z_`*)~> +!BpJ^mHafK!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;?Em!;lcr!;-9k!;6Bl!;?Em!<2uu +!<)ot!;lcr!<)ot!;uis!;- +!BU8[l0JBG!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;?Em!;lcr!;-9k!;6Bl!;?Em!<2uu +!<)ot!;lcr!<)ot!;uis!;- +!B:&Xj6QaA!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;?Em!;lcr!;-9k!;6Bl!;?Em!<2uu +!<)ot!;lcr!<)ot!;uis!;- +!BpJ^mHjiQ!;c]q!<)p"!<<'!q#:UEp +r;Q`spAY0orrDus!!)or!!)ut!!)rs!!)fo!!)rs!!*#u!!)or!!)lq!!)fo!W`6#r;Q`so)A[i +p\t3nqu6WrrVlitr;Q`srr2rur;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`srVlitr;Q`sq>UEp +qu6Wrqu6Wro)AakrrDus!!)rs!!)or!!)]l!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!)`m!!)cn +!W`6#qu6Wrqu6`us8N)mrr<&srr<%Ms0D\(m/bd$J,~> +!BU8[l0SEM!;c]q!<)p"!<<'!q#:UEp +r;Q`spAY0orrDus!!)or!!)ut!!)rs!!)fo!!)rs!!*#u!!)or!!)lq!!)fo!W`6#r;Q`so)A[i +p\t3nqu6WrrVlitr;Q`srr2rur;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`srVlitr;Q`sq>UEp +qu6Wrqu6Wro)AakrrDus!!)rs!!)or!!)]l!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!)`m!!)cn +!W`6#qu6Wrqu6`us8N)mrr<&srr<%Ms0D\(klK'jJ,~> +!B:&Xj6ZdG!;c]q!<)p"!<<'!q#:UEp +r;Q`spAY0orrDus!!)or!!)ut!!)rs!!)fo!!)rs!!*#u!!)or!!)lq!!)fo!W`6#r;Q`so)A[i +p\t3nqu6WrrVlitr;Q`srr2rur;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`srVlitr;Q`sq>UEp +qu6Wrqu6Wro)AakrrDus!!)rs!!)or!!)]l!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!)`m!!)cn +!W`6#qu6Wrqu6`us8N)mrr<&srr<%Ms0D\(irR%VJ,~> +!BpJ^mHjiQ!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;?Em!;c]q!<)rt!;lcr +!<)ot!<3#u!<)ot!;?Eo!<3&rrr<&trr<&srr<&ts8N)os8N)trr<&trr<&trr<&prr<&nrr<&q +rr<&ts8N)orr<&ts8N)trr<&ts8N)trr<&ts8N)urr<&ts8N)qrr<&trr<&rrr<&qrr<&trr<&s +rr<&srr<&ts8N)trr<&orr<&trr<&qrr<&hrr<&rrr<&ts8N)rrr<&lrr<&qrr<&trr<&srr<&t +s8N)ts8N)trr<&mrr<&trr<&srrN3#!;lfr!<)ot!<)ot!<)rt!<)rt!<)ot!;c`q!.k0^s8MBd +eieN~> +!BU8[l0SEM!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;?Em!;c]q!<)rt!;lcr +!<)ot!<3#u!<)ot!;?Eo!<3&rrr<&trr<&srr<&ts8N)os8N)trr<&trr<&trr<&prr<&nrr<&q +rr<&ts8N)orr<&ts8N)trr<&ts8N)trr<&ts8N)urr<&ts8N)qrr<&trr<&rrr<&qrr<&trr<&s +rr<&srr<&ts8N)trr<&orr<&trr<&qrr<&hrr<&rrr<&ts8N)rrr<&lrr<&qrr<&trr<&srr<&t +s8N)ts8N)trr<&mrr<&trr<&srrN3#!;lfr!<)ot!<)ot!<)rt!<)rt!<)ot!;c`q!.k0^s8M6` +c8pI~> +!B:&Xj6ZdG!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;?Em!;c]q!<)rt!;lcr +!<)ot!<3#u!<)ot!;?Eo!<3&rrr<&trr<&srr<&ts8N)os8N)trr<&trr<&trr<&prr<&nrr<&q +rr<&ts8N)orr<&ts8N)trr<&ts8N)trr<&ts8N)urr<&ts8N)qrr<&trr<&rrr<&qrr<&trr<&s +rr<&srr<&ts8N)trr<&orr<&trr<&qrr<&hrr<&rrr<&ts8N)rrr<&lrr<&qrr<&trr<&srr<&t +s8N)ts8N)trr<&mrr<&trr<&srrN3#!;lfr!<)ot!<)ot!<)rt!<)rt!<)ot!;c`q!.k0^s8M$Z +_`*)~> +!BpJ^mHsrP!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!;c`l!;ulq!;QTm!<)ou!<;ut +o`"mkq>^BnqZ$Ko!ri6#q>UHqs8;rps8;rps7u`lrr<&ps8;rjs8;ros8;ourrDusr;Zp!!!*#u +r;ZitrW)iqr;cfrq>gHnr;ccqrW)rtrW)rt! +!BU8[l0\NL!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!;c`l!;ulq!;QTm!<)ou!<;ut +o`"mkq>^BnqZ$Ko!ri6#q>UHqs8;rps8;rps7u`lrr<&ps8;rjs8;ros8;ourrDusr;Zp!!!*#u +r;ZitrW)iqr;cfrq>gHnr;ccqrW)rtrW)rt! +!B:&Xj6cmF!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!;c`l!;ulq!;QTm!<)ou!<;ut +o`"mkq>^BnqZ$Ko!ri6#q>UHqs8;rps8;rps7u`lrr<&ps8;rjs8;ros8;ourrDusr;Zp!!!*#u +r;ZitrW)iqr;cfrq>gHnr;ccqrW)rtrW)rt! +!BpJ^m=G<7rr<%^rr<%Ms02M'!;c]q!.k09s8MBdeieN~> +!BU8[l%/m3rr<%^rr<%Ms02M'!;c]q!.k09s8M6`c8pI~> +!B:&Xj+77-rr<%^rr<%Ms02M'!;c]q!.k09s8M$Z_`*)~> +!BpJ^m=G<8rr<%]rr<%Ms0;S(!;ZWp!.k09s8MBdeieN~> +!BU8[l%/m4rr<%]rr<%Ms0;S(!;ZWp!.k09s8M6`c8pI~> +!B:&Xj+77.rr<%]rr<%Ms0;S(!;ZWp!.k09s8M$Z_`*)~> +!BpJ^m=G<8rr<%]rr<%Ms0;S(!;ZWp!.k09s8MBdeieN~> +!BU8[l%/m4rr<%]rr<%Ms0;S(!;ZWp!.k09s8M6`c8pI~> +!B:&Xj+77.rr<%]rr<%Ms0;S(!;ZWp!.k09s8M$Z_`*)~> +!BpJ^m=G<;s82k]s8;qKs0_n)!;lfp!.k0;s8MBdeieN~> +!BU8[l%/m7s82k]s8;qKs0_n)!;lfp!.k0;s8M6`c8pI~> +!B:&Xj+771s82k]s8;qKs0_n)!;lfp!.k0;s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mDf2(!:Tsf!;?Hm!7LoE!8.>O!6,!8!:9ac!1j/i!;?Hm!.k0$s3grHm/bd$J,~> +!BU8[l,Nc$!:Tsf!;?Hm!7LoE!8.>O!6,!8!:9ac!1j/i!;?Hm!.k0$s3grHklK'jJ,~> +!B:&Xj2V,s!:Tsf!;?Hm!7LoE!8.>O!6,!8!:9ac!1j/i!;?Hm!.k0$s3grHirR%VJ,~> +!BpJ^mFqU=!!<0#!;- +!BU8[l.Z19!!<0#!;- +!B:&Xj4aP3!!<0#!;- +!BpJ^mHsrH!;ull!:g*h!:Tsf!65'=!;6Be!9jI_!65'=!;?Hi!5SX/!8[\T!.k0$s2G$;m/bd$ +J,~> +!BU8[l0\ND!;ull!:g*h!:Tsf!65'=!;6Be!9jI_!65'=!;?Hi!5SX/!8[\T!.k0$s2G$;klK'j +J,~> +!B:&Xj6cm>!;ull!:g*h!:Tsf!65'=!;6Be!9jI_!65'=!;?Hi!5SX/!8[\T!.k0$s2G$;irR%V +J,~> +!BpJ^mHsrH!;uls!<)rs!<)rr!;ZZp!;ulr!<<)t!<<)p!<)rq!;ZZn!<)rs!!*&t!;?Hk!;ulm +!;ZZp!<)rs!!*&t!<<)t!<3#p!<<)p!;lfp!<3#t!!E6$!<<#urVu]op](0lr;ZQmq#C?oq>^?m +r;Z`r!<;utqu?Tpqu?Nnrr;oss8W&uq#C?orVultrr;os!<<#u!<<#us8W#trVu`prr;corVucq +q>^BnrVuis!<;utr;ZTnJcC<$pAb-Z!S0Da~> +!BU8[l0\ND!;uls!<)rs!<)rr!;ZZp!;ulr!<<)t!<<)p!<)rq!;ZZn!<)rs!!*&t!;?Hk!;ulm +!;ZZp!<)rs!!*&t!<<)t!<3#p!<<)p!;lfp!<3#t!!E6$!<<#urVu]op](0lr;ZQmq#C?oq>^?m +r;Z`r!<;utqu?Tpqu?Nnrr;oss8W&uq#C?orVultrr;os!<<#u!<<#us8W#trVu`prr;corVucq +q>^BnrVuis!<;utr;ZTnJcC<$pAb-V!R<`V~> +!B:&Xj6cm>!;uls!<)rs!<)rr!;ZZp!;ulr!<<)t!<<)p!<)rq!;ZZn!<)rs!!*&t!;?Hk!;ulm +!;ZZp!<)rs!!*&t!<<)t!<3#p!<<)p!;lfp!<3#t!!E6$!<<#urVu]op](0lr;ZQmq#C?oq>^?m +r;Z`r!<;utqu?Tpqu?Nnrr;oss8W&uq#C?orVultrr;os!<<#u!<<#us8W#trVu`prr;corVucq +q>^BnrVuis!<;utr;ZTnJcC<$pAb-P!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZls8N)ss8E#us8;rts7lZns82los7lZps7cTi +s7lZos7lZjs8N)ss8N'!s8;rts8;rts7lZps7lZns7lWps7QHms7lZjs7lZos7lZis8N)ps82lp +s7cTns7lZos7lZps7ZNhs8N*!rriE&!!*'!p]( +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZls8N)ss8E#us8;rts7lZns82los7lZps7cTi +s7lZos7lZjs8N)ss8N'!s8;rts8;rts7lZps7lZns7lWps7QHms7lZjs7lZos7lZis8N)ps82lp +s7cTns7lZos7lZps7ZNhs8N*!rriE&!!*'!p]( +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZls8N)ss8E#us8;rts7lZns82los7lZps7cTi +s7lZos7lZjs8N)ss8N'!s8;rts8;rts7lZps7lZns7lWps7QHms7lZjs7lZos7lZis8N)ps82lp +s7cTns7lZos7lZps7ZNhs8N*!rriE&!!*'!p]( +!BpJ^mHsrQ!!rT)rrE'!rr<&ss82lps8E#ss8E#rs8N)rs8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N)qs8E#ss8E#ss8N)ls82los8N)ts8N)us8N)ts8N)ts8N)qs8E#ss8Duus8Duus8E!& +rr<'!rr<&ts8N)qs8E#ss8E#ss8N)ks8N)ms8N)rs8E#ts8N*!s8E#ss8E#us8N)ts8N)ts8;rt +s8N)ps82lqs8E#ts8E#ts8N)ts8N)us8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)t +s8N(Ms+14Ds8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss82lps8E#ss8E#rs8N)rs8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N)qs8E#ss8E#ss8N)ls82los8N)ts8N)us8N)ts8N)ts8N)qs8E#ss8Duus8Duus8E!& +rr<'!rr<&ts8N)qs8E#ss8E#ss8N)ks8N)ms8N)rs8E#ts8N*!s8E#ss8E#us8N)ts8N)ts8;rt +s8N)ps82lqs8E#ts8E#ts8N)ts8N)us8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)t +s8N(Ms+14Ds8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss82lps8E#ss8E#rs8N)rs8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N)qs8E#ss8E#ss8N)ls82los8N)ts8N)us8N)ts8N)ts8N)qs8E#ss8Duus8Duus8E!& +rr<'!rr<&ts8N)qs8E#ss8E#ss8N)ks8N)ms8N)rs8E#ts8N*!s8E#ss8E#us8N)ts8N)ts8;rt +s8N)ps82lqs8E#ts8E#ts8N)ts8N)us8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)t +s8N(Ms+14Ds8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs7u`qs8N)rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ks7u`ps8N)ts8N)us8;rns8N)qs8N)rs8N'-rr<'!rr<'!rr<'! +s8;rks8N)rs8N)ts8N)ks8N)ms8N)rs8N)ts8N*!s8N)rs8N)ps8N)ts8E#js82lqs8N)ss8N)u +s8N)ts8N)os8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+14@s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs7u`qs8N)rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ks7u`ps8N)ts8N)us8;rns8N)qs8N)rs8N'-rr<'!rr<'!rr<'! +s8;rks8N)rs8N)ts8N)ks8N)ms8N)rs8N)ts8N*!s8N)rs8N)ps8N)ts8E#js82lqs8N)ss8N)u +s8N)ts8N)os8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+14@s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs7u`qs8N)rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ks7u`ps8N)ts8N)us8;rns8N)qs8N)rs8N'-rr<'!rr<'!rr<'! +s8;rks8N)rs8N)ts8N)ks8N)ms8N)rs8N)ts8N*!s8N)rs8N)ps8N)ts8E#js82lqs8N)ss8N)u +s8N)ts8N)os8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+14@s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&os82iurr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)hs82lrs8N*!s8N)ss8)fos8N)qs7ZL#rr<'!rr<'!rr<&us8)fl +s8N)rs8N)ts8N)ks8N)ts8N)ss8N)rs8N)ts8N*!s7ZNns7lZns8N)js8N*!rr<&ts8N)ss8N)u +s8N)ts8N)us7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)eIs+14Cs8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&os82iurr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)hs82lrs8N*!s8N)ss8)fos8N)qs7ZL#rr<'!rr<'!rr<&us8)fl +s8N)rs8N)ts8N)ks8N)ts8N)ss8N)rs8N)ts8N*!s7ZNns7lZns8N)js8N*!rr<&ts8N)ss8N)u +s8N)ts8N)us7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)eIs+14Cs8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&os82iurr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)hs82lrs8N*!s8N)ss8)fos8N)qs7ZL#rr<'!rr<'!rr<&us8)fl +s8N)rs8N)ts8N)ks8N)ts8N)ss8N)rs8N)ts8N*!s7ZNns7lZns8N)js8N*!rr<&ts8N)ss8N)u +s8N)ts8N)us7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)eIs+14Cs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)us8N'#rr<&ps82lqs8N)qs7ZL#rr<'!rr<'! +rr<&ss82lns8N)rs8N)ts8N)ks8N)ts8N)ss8N)rs8N)ts8N*!s7ZKns7cTms8N)js8N)ts8N'# +rr<&ss8N)us8N)ts8N*!s7cTms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+14Ds8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)us8N'#rr<&ps82lqs8N)qs7ZL#rr<'!rr<'! +rr<&ss82lns8N)rs8N)ts8N)ks8N)ts8N)ss8N)rs8N)ts8N*!s7ZKns7cTms8N)js8N)ts8N'# +rr<&ss8N)us8N)ts8N*!s7cTms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+14Ds8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)us8N'#rr<&ps82lqs8N)qs7ZL#rr<'!rr<'! +rr<&ss82lns8N)rs8N)ts8N)ks8N)ts8N)ss8N)rs8N)ts8N*!s7ZKns7cTms8N)js8N)ts8N'# +rr<&ss8N)us8N)ts8N*!s7cTms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+14Ds8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8;rss8N'!s8E#ss8E#rs8N)rs8N)us8E#ss8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)qs8E#ss8E#ss8N)ls8;rss8N)ts8;rqs8N)ts8N)ts8N)ts8N'!s8E#o +s8N*!s8N*!s8N*!s8N)ts8N)qs8E#ss8E#ss8N)ks8N)ts8N)ss8N)rs8N)ts8N*!s8E#os8N)s +s8N)ts8N)js8N)ts8N'!s8E#ts8E#ts8N)us8E#us8N)ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#u +s8N)ts8N)us8N)ts8N(Ms+14Ds8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8;rss8N'!s8E#ss8E#rs8N)rs8N)us8E#ss8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)qs8E#ss8E#ss8N)ls8;rss8N)ts8;rqs8N)ts8N)ts8N)ts8N'!s8E#o +s8N*!s8N*!s8N*!s8N)ts8N)qs8E#ss8E#ss8N)ks8N)ts8N)ss8N)rs8N)ts8N*!s8E#os8N)s +s8N)ts8N)js8N)ts8N'!s8E#ts8E#ts8N)us8E#us8N)ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#u +s8N)ts8N)us8N)ts8N(Ms+14Ds8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8;rss8N'!s8E#ss8E#rs8N)rs8N)us8E#ss8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)qs8E#ss8E#ss8N)ls8;rss8N)ts8;rqs8N)ts8N)ts8N)ts8N'!s8E#o +s8N*!s8N*!s8N*!s8N)ts8N)qs8E#ss8E#ss8N)ks8N)ts8N)ss8N)rs8N)ts8N*!s8E#os8N)s +s8N)ts8N)js8N)ts8N'!s8E#ts8E#ts8N)us8E#us8N)ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#u +s8N)ts8N)us8N)ts8N(Ms+14Ds8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTns7lZps7lZos7lZps8;rts8;ros7lZo +s7lZjs7lZms8E#qs7lZns7lZps7lWps8;ots8Duus8Duus7lZjs7lZos7lZks7ZNns7lZps8;rt +s8;rts7lZps7ZKns7lZjs7ZNns7lZos7cQos7ZNms7lZps7lZos7lZps8;rts8;rts7lYGs+14D +s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTns7lZps7lZos7lZps8;rts8;ros7lZo +s7lZjs7lZms8E#qs7lZns7lZps7lWps8;ots8Duus8Duus7lZjs7lZos7lZks7ZNns7lZps8;rt +s8;rts7lZps7ZKns7lZjs7ZNns7lZos7cQos7ZNms7lZps7lZos7lZps8;rts8;rts7lYGs+14D +s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTns7lZps7lZos7lZps8;rts8;ros7lZo +s7lZjs7lZms8E#qs7lZns7lZps7lWps8;ots8Duus8Duus7lZjs7lZos7lZks7ZNns7lZps8;rt +s8;rts7lZps7ZKns7lZjs7ZNns7lZos7cQos7ZNms7lZps7lZos7lZps8;rts8;rts7lYGs+14D +s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;rps8;rqs7lZns8;ots8E#ss82lqs7lZms8;rrs8;rt +s8;rms8;rqs7lZjs8N'!s8;rps8N)qs7u`ms82los8)crs8;ots8Duus8Duus7u`hs8;rqs7lZk +s7ZNns7lZps8;rts8;rrs8)fqs82iss8Duus7lZjs7ZNms8;p!rr<&ts8;ots8E#us82iss8E#s +s82lqs7lZms8;rrs8;rts8;rts7u_Hs+14Cs8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;rps8;rqs7lZns8;ots8E#ss82lqs7lZms8;rrs8;rt +s8;rms8;rqs7lZjs8N'!s8;rps8N)qs7u`ms82los8)crs8;ots8Duus8Duus7u`hs8;rqs7lZk +s7ZNns7lZps8;rts8;rrs8)fqs82iss8Duus7lZjs7ZNms8;p!rr<&ts8;ots8E#us82iss8E#s +s82lqs7lZms8;rrs8;rts8;rts7u_Hs+14Cs8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;rps8;rqs7lZns8;ots8E#ss82lqs7lZms8;rrs8;rt +s8;rms8;rqs7lZjs8N'!s8;rps8N)qs7u`ms82los8)crs8;ots8Duus8Duus7u`hs8;rqs7lZk +s7ZNns7lZps8;rts8;rrs8)fqs82iss8Duus7lZjs7ZNms8;p!rr<&ts8;ots8E#us82iss8E#s +s82lqs7lZms8;rrs8;rts8;rts7u_Hs+14Cs8M$Z_`*)~> +!BpJ^mHsrH!.k1Es8N(Ms3(HB!.k0$s/H%tm/bd$J,~> +!BU8[l0\ND!.k1Es8N(Ms3(HB!.k0$s/H%tklK'jJ,~> +!B:&Xj6cm>!.k1Es8N(Ms3(HB!.k0$s/H%tirR%VJ,~> +!BpJ^mHsrH!.k1Fs8N(Ms2tBA!.k0$s/H%tm/bd$J,~> +!BU8[l0\ND!.k1Fs8N(Ms2tBA!.k0$s/H%tklK'jJ,~> +!B:&Xj6cm>!.k1Fs8N(Ms2tBA!.k0$s/H%tirR%VJ,~> +!BpJ^m=G;ks8)eIs3CZB!.k0$s/Q+um/bd$J,~> +!BU8[l%/lgs8)eIs3CZB!.k0$s/Q+uklK'jJ,~> +!B:&Xj+76as8)eIs3CZB!.k0$s/Q+uirR%VJ,~> +!BpJ^m=G;ks8)eIs3CZB!.k0$s/Q+um/bd$J,~> +!BU8[l%/lgs8)eIs3CZB!.k0$s/Q+uklK'jJ,~> +!B:&Xj+76as8)eIs3CZB!.k0$s/Q+uirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mD],(!.k1Ls8;rns8;qKs+13$s-Wicm/bd$J,~> +!BU8[l,E]$!.k1Ls8;rns8;qKs+13$s-WicklK'jJ,~> +!B:&Xj2M&s!.k1Ls8;rns8;qKs+13$s-WicirR%VJ,~> +!BpJ^mFhO=!!3*"n,E@f]`.s3`W#o +!BU8[l.Q+9!!3*"n,E@f]`.s3`W#o +!B:&Xj4XJ3!!3*"n,E@f]`.s3`W#o +!BpJ^mFqR?!<3#u!:Tpf!5/=3!65$=!:g'h!;HKn!1Wug!;?Em!.k0$s-E]am/bd$J,~> +!BU8[l.Z.;!<3#u!:Tpf!5/=3!65$=!:g'h!;HKn!1Wug!;?Em!.k0$s-E]aklK'jJ,~> +!B:&Xj4aM5!<3#u!:Tpf!5/=3!65$=!:g'h!;HKn!1Wug!;?Em!.k0$s-E]airR%VJ,~> +!BpJ^mG%X@!;uis!:Tpf!5/=3!65$=!:g'h!0I3\!.k0$s,-jUm/bd$J,~> +!BU8[l.c4 +!B:&Xj4jS6!;uis!:Tpf!5/=3!65$=!:g'h!0I3\!.k0$s,-jUirR%VJ,~> +!BpJ^mG%X@!;?Hk!;QQo!;lfq!<3#t!<)rr!;6Bj!!3*"rr;rtrr;rtrVufr!WN/us7u`ns8;rr +s8N''rr<'!rr<&ss8;ourrDfnr;c`pq>g3g!!)iprW)iqrr<'!r;c`pr;c]or;ccqrVururW)Zl +r;c]or;['%!!*'!!!)utrrDusr;c`pq>gHnrW)cor;ccqrr<'!r;c`pr;Zlu!.k0$s1870m/bd$ +J,~> +!BU8[l.c4g3g!!)iprW)iqrr<'!r;c`pr;c]or;ccqrVururW)Zl +r;c]or;['%!!*'!!!)utrrDusr;c`pq>gHnrW)cor;ccqrr<'!r;c`pr;Zlu!.k0$s1870klK'j +J,~> +!B:&Xj4jS6!;?Hk!;QQo!;lfq!<3#t!<)rr!;6Bj!!3*"rr;rtrr;rtrVufr!WN/us7u`ns8;rr +s8N''rr<'!rr<&ss8;ourrDfnr;c`pq>g3g!!)iprW)iqrr<'!r;c`pr;c]or;ccqrVururW)Zl +r;c]or;['%!!*'!!!)utrrDusr;c`pq>gHnrW)cor;ccqrr<'!r;c`pr;Zlu!.k0$s1870irR%V +J,~> +!BpJ^mFqR?!;QQo!<)ot!;ZWp!;c]q!;uis!<)ot!<)ot!;HKn!<)rt!<)ot!;uis!<)ot!<)rt +!;lcr!;ZWp!<)ot!<)rt!<<*!!<<'!!<2uu!<)rt!;QQo!<)ot!;c]q!:g'h!;HKn!;c`q!<)ot +!<)ot!<)ot!;uis!<)ot!;lfr!<2uu!;QQo!<)ot!;uis!<)rt!<)ot!;uis!<)ot!<)ot!;c]q +!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!.k0$s1870m/bd$J,~> +!BU8[l.Z.;!;QQo!<)ot!;ZWp!;c]q!;uis!<)ot!<)ot!;HKn!<)rt!<)ot!;uis!<)ot!<)rt +!;lcr!;ZWp!<)ot!<)rt!<<*!!<<'!!<2uu!<)rt!;QQo!<)ot!;c]q!:g'h!;HKn!;c`q!<)ot +!<)ot!<)ot!;uis!<)ot!;lfr!<2uu!;QQo!<)ot!;uis!<)rt!<)ot!;uis!<)ot!<)ot!;c]q +!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!.k0$s1870klK'jJ,~> +!B:&Xj4aM5!;QQo!<)ot!;ZWp!;c]q!;uis!<)ot!<)ot!;HKn!<)rt!<)ot!;uis!<)ot!<)rt +!;lcr!;ZWp!<)ot!<)rt!<<*!!<<'!!<2uu!<)rt!;QQo!<)ot!;c]q!:g'h!;HKn!;c`q!<)ot +!<)ot!<)ot!;uis!<)ot!;lfr!<2uu!;QQo!<)ot!;uis!<)rt!<)ot!;uis!<)ot!<)ot!;c]q +!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!.k0$s1870irR%VJ,~> +!BpJ^mFhO +!BU8[l.Q+8!<)ot!;lcr!;c]q!;ZWp!<2uu!<)ot!;lcr!;QQo!;uis!<)ot!;uis!<)ot!;uis +!;lcr!;c]q!;lcr!<2uu!<2uu!<2uu!<2uu!;uis!;ZWp!;lcr!;lcr!:g'h!;HKn!;c]q!;uis +!<2uu!;lcr!;QQo!;lcr!;-9k!;lcr!<2uu!;lcr!<)ot!;uis!;QQo!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!<)ot!;uis!.k0$s1870klK'jJ,~> +!B:&Xj4XJ2!<)ot!;lcr!;c]q!;ZWp!<2uu!<)ot!;lcr!;QQo!;uis!<)ot!;uis!<)ot!;uis +!;lcr!;c]q!;lcr!<2uu!<2uu!<2uu!<2uu!;uis!;ZWp!;lcr!;lcr!:g'h!;HKn!;c]q!;uis +!<2uu!;lcr!;QQo!;lcr!;-9k!;lcr!<2uu!;lcr!<)ot!;uis!;QQo!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!<)ot!;uis!.k0$s1870irR%VJ,~> +!BpJ^mFD4:!<2uu!;lcr!;c]q!;ZWp!<2uu!<)rn!;HNm!;ZWp!<2uu!;lfq!;QQo!;c`k!<2uu +!<2uu!<2uu!<)rs!;?Em!;lcr!;lcr!:g'h!;HKn!;c]q!;uis!<3#o!<)rp!;lcr!;- +!BU8[l.,e6!<2uu!;lcr!;c]q!;ZWp!<2uu!<)rn!;HNm!;ZWp!<2uu!;lfq!;QQo!;c`k!<2uu +!<2uu!<2uu!<)rs!;?Em!;lcr!;lcr!:g'h!;HKn!;c]q!;uis!<3#o!<)rp!;lcr!;- +!B:&Xj44/0!<2uu!;lcr!;c]q!;ZWp!<2uu!<)rn!;HNm!;ZWp!<2uu!;lfq!;QQo!;c`k!<2uu +!<2uu!<2uu!<)rs!;?Em!;lcr!;lcr!:g'h!;HKn!;c]q!;uis!<3#o!<)rp!;lcr!;- +!BpJ^mF;. +!BU8[l.#_8!<<'!qu6WrqYpNqq#:BqrrDus!!)EdrrDrr!!*#u!!)forrDoq!!)lq!!)cn!!*#u +!!*#u!!)lqrrDio!!)or!!)or!!)Qh!!)cn!!)lq!!)rs!!*#u!!)cn!!)rs!!)or!!)Zk!!)cn +!!)or!!)ut!!)rs!!*#u!!)rs!!)lq!!)`m!!)or!!)or!!)ut!!)rs!!)iprr@WMJcE:\rojI/ +3e.~> +!B:&Xj4+)2!<<'!qu6WrqYpNqq#:BqrrDus!!)EdrrDrr!!*#u!!)forrDoq!!)lq!!)cn!!*#u +!!*#u!!)lqrrDio!!)or!!)or!!)Qh!!)cn!!)lq!!)rs!!*#u!!)cn!!)rs!!)or!!)Zk!!)cn +!!)or!!)ut!!)rs!!*#u!!)rs!!)lq!!)`m!!)or!!)or!!)ut!!)rs!!)iprr@WMJcE:\ro4$s +2h1~> +!BpJ^mG%X@!;lcu!<<'!qu6WrqYpNqq#:BqrrDus!!)Qh!!)rs!!)or!W`6#qu6Wrr;Q`squ6Wr +qYpNqp\t3nrr2rurr2rurr2rur;Q`sq>UEpqu6Wrqu6Wrnc&Rhp\t3nqYpNqr;Q`srr2rup\t3n +r;Q`squ6Wro`"mkp\t3nqu6WrrVlitr;Q`srr2rur;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`s +rVlitr;Q`sJcC<$])Vcs!S0Da~> +!BU8[l.c4UEpqu6Wrqu6Wrnc&Rhp\t3nqYpNqr;Q`srr2rup\t3n +r;Q`squ6Wro`"mkp\t3nqu6WrrVlitr;Q`srr2rur;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`s +rVlitr;Q`sJcC<$])Vco!R<`V~> +!B:&Xj4jS6!;lcu!<<'!qu6WrqYpNqq#:BqrrDus!!)Qh!!)rs!!)or!W`6#qu6Wrr;Q`squ6Wr +qYpNqp\t3nrr2rurr2rurr2rur;Q`sq>UEpqu6Wrqu6Wrnc&Rhp\t3nqYpNqr;Q`srr2rup\t3n +r;Q`squ6Wro`"mkp\t3nqu6WrrVlitr;Q`srr2rur;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`s +rVlitr;Q`sJcC<$])Vci!Q-jH~> +!BpJ^mG%[@!<)ot!<)ot!<)ot!;ZWp!;HKn!;c]q!<)rt!;QTo!<)ot!;lct!<3&rs8N)trr<&r +rr<&trr<&urr<&ts8N)urr<&urr<&urr<&us8N)trr<&orr<&trr<&qrr<&hrr<&nrr<&qrr<&s +rr<&trr<&ts8N)urr<&ts8N)rrr<&jrr<&ts8N)trr<&ts8N)trr<&ts8N)urr<&ts8N)qrr<&t +rr<&rrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&rs8N(Ms+13es8MBdeieN~> +!BU8[l.c7 +!B:&Xj4jV6!<)ot!<)ot!<)ot!;ZWp!;HKn!;c]q!<)rt!;QTo!<)ot!;lct!<3&rs8N)trr<&r +rr<&trr<&urr<&ts8N)urr<&urr<&urr<&us8N)trr<&orr<&trr<&qrr<&hrr<&nrr<&qrr<&s +rr<&trr<&ts8N)urr<&ts8N)rrr<&jrr<&ts8N)trr<&ts8N)trr<&ts8N)urr<&ts8N)qrr<&t +rr<&rrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&rs8N(Ms+13es8M$Z_`*)~> +!BpJ^mG%XA!<;utqu?Tpqu?KmqYpNqq>^BnpAY-ns8;rnrr<&qrrE-"r;cZnr;ccqr;cfrrW)uu +rrE*!rrE*!! +!BU8[l.c4=!<;utqu?Tpqu?KmqYpNqq>^BnpAY-ns8;rnrr<&qrrE-"r;cZnr;ccqr;cfrrW)uu +rrE*!rrE*!! +!B:&Xj4jS7!<;utqu?Tpqu?KmqYpNqq>^BnpAY-ns8;rnrr<&qrrE-"r;cZnr;ccqr;cfrrW)uu +rrE*!rrE*!! +!BpJ^m?.DK!.k0nrr<%Ms+13$s6]jcm/bd$J,~> +!BU8[l&kuG!.k0nrr<%Ms+13$s6]jcklK'jJ,~> +!B:&Xj,s?A!.k0nrr<%Ms+13$s6]jcirR%VJ,~> +!BpJ^m?7JL!.k0mrr<%Ms+13$s6]jcm/bd$J,~> +!BU8[l&u&H!.k0mrr<%Ms+13$s6]jcklK'jJ,~> +!B:&Xj-'EB!.k0mrr<%Ms+13$s6]jcirR%VJ,~> +!BpJ^m?7JL!.k0mrr<%Ms+13$s6]jcm/bd$J,~> +!BU8[l&u&H!.k0mrr<%Ms+13$s6]jcklK'jJ,~> +!B:&Xj-'EB!.k0mrr<%Ms+13$s6]jcirR%VJ,~> +!BpJ^m?R_L!.k0ps8;qKs+13$s6fpdm/bd$J,~> +!BU8[l';;H!.k0ps8;qKs+13$s6fpdklK'jJ,~> +!B:&Xj-BZB!.k0ps8;qKs+13$s6fpdirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mDf2(!:Tsf!;?Hm!7LoE!8RVS!9O7Y!7h,I!6kKC!:^$d!6P9@!;?Hm!.k0$s60L^m/bd$ +J,~> +!BU8[l,Nc$!:Tsf!;?Hm!7LoE!8RVS!9O7Y!7h,I!6kKC!:^$d!6P9@!;?Hm!.k0$s60L^klK'j +J,~> +!B:&Xj2V,s!:Tsf!;?Hm!7LoE!8RVS!9O7Y!7h,I!6kKC!:^$d!6P9@!;?Hm!.k0$s60L^irR%V +J,~> +!BpJ^mFqU=!!<0#!;- +!BU8[l.Z19!!<0#!;- +!B:&Xj4aP3!!<0#!;- +!BpJ^mHsrH!;ull!:g*h!:Tsf!65'=!9O7U!8IPR!:9a\!:^$g!4Mq-!;HNf!8[\T!.k0$s4dSQ +m/bd$J,~> +!BU8[l0\ND!;ull!:g*h!:Tsf!65'=!9O7U!8IPR!:9a\!:^$g!4Mq-!;HNf!8[\T!.k0$s4dSQ +klK'jJ,~> +!B:&Xj6cm>!;ull!:g*h!:Tsf!65'=!9O7U!8IPR!:9a\!:^$g!4Mq-!;HNf!8[\T!.k0$s4dSQ +irR%VJ,~> +!BpJ^mHsrH!;uls!<)rs!<)rr!;ZZp!;ulr!<<)t!<<)p!<)rq!;ZZn!<)rs!!*&t!;?Hk!;ulm +!;QTk!;QTo!<)rs!<<)s!;ulr!!*&t!;ulq!!*&u!;uls!;ZZn!;HNn!<)rs!<)rr!;ZZp!;ulq +!<<)t!!*&u!!*&t!;lfp!<3#t!!E6$!<<#urr;lrqZ$EmqZ$Qqp&G$lrVultrr;os!<<#u!<<#u +s8W#trVu`prr;corVucqq>^BnrVuis!<;utJcC<$!<<&c!S0Da~> +!BU8[l0\ND!;uls!<)rs!<)rr!;ZZp!;ulr!<<)t!<<)p!<)rq!;ZZn!<)rs!!*&t!;?Hk!;ulm +!;QTk!;QTo!<)rs!<<)s!;ulr!!*&t!;ulq!!*&u!;uls!;ZZn!;HNn!<)rs!<)rr!;ZZp!;ulq +!<<)t!!*&u!!*&t!;lfp!<3#t!!E6$!<<#urr;lrqZ$EmqZ$Qqp&G$lrVultrr;os!<<#u!<<#u +s8W#trVu`prr;corVucqq>^BnrVuis!<;utJcC<$!<<&_!R<`V~> +!B:&Xj6cm>!;uls!<)rs!<)rr!;ZZp!;ulr!<<)t!<<)p!<)rq!;ZZn!<)rs!!*&t!;?Hk!;ulm +!;QTk!;QTo!<)rs!<<)s!;ulr!!*&t!;ulq!!*&u!;uls!;ZZn!;HNn!<)rs!<)rr!;ZZp!;ulq +!<<)t!!*&u!!*&t!;lfp!<3#t!!E6$!<<#urr;lrqZ$EmqZ$Qqp&G$lrVultrr;os!<<#u!<<#u +s8W#trVu`prr;corVucqq>^BnrVuis!<;utJcC<$!<<&Y!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZls8N)ss8E#us8;rts7lZns82los7lZps7cTi +s7lZos7lZjs7lZjs8N)ss8N*!s82lps7cTns7cTls8N)rs7lZjs8N)ss8N*!s7lZls8N)ss8;rt +s8;ots7cTns7lWps7QHms82los7lZls8N)ls8N*!rriE&!!*'!p]( +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZls8N)ss8E#us8;rts7lZns82los7lZps7cTi +s7lZos7lZjs7lZjs8N)ss8N*!s82lps7cTns7cTls8N)rs7lZjs8N)ss8N*!s7lZls8N)ss8;rt +s8;ots7cTns7lWps7QHms82los7lZls8N)ls8N*!rriE&!!*'!p]( +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZls8N)ss8E#us8;rts7lZns82los7lZps7cTi +s7lZos7lZjs7lZjs8N)ss8N*!s82lps7cTns7cTls8N)rs7lZjs8N)ss8N*!s7lZls8N)ss8;rt +s8;ots7cTns7lWps7QHms82los7lZls8N)ls8N*!rriE&!!*'!p]( +!BpJ^mHsrQ!!rT)rrE'!rr<&ss82lps8E#ss8E#rs8N)rs8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N)qs8E#ss8E#ss8N)ls8N)ts8N)ps82lls8N)rs8E#ts8N*!s8E#ts8E#qs8N)ss8E#s +s8E#ps8N)ts8Duus8E#ss8E#rs8N)rs8N)ts8N)us8E#ts8N*!s8E#ss8Duus8Duus8E!"rr<&s +s8N)rs8N)ts8N)rs8N)ls82lqs8E#ts8E#ts8N)ts8N)us8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N(Ms+14Lm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss82lps8E#ss8E#rs8N)rs8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N)qs8E#ss8E#ss8N)ls8N)ts8N)ps82lls8N)rs8E#ts8N*!s8E#ts8E#qs8N)ss8E#s +s8E#ps8N)ts8Duus8E#ss8E#rs8N)rs8N)ts8N)us8E#ts8N*!s8E#ss8Duus8Duus8E!"rr<&s +s8N)rs8N)ts8N)rs8N)ls82lqs8E#ts8E#ts8N)ts8N)us8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N(Ms+14LklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss82lps8E#ss8E#rs8N)rs8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N)qs8E#ss8E#ss8N)ls8N)ts8N)ps82lls8N)rs8E#ts8N*!s8E#ts8E#qs8N)ss8E#s +s8E#ps8N)ts8Duus8E#ss8E#rs8N)rs8N)ts8N)us8E#ts8N*!s8E#ss8Duus8Duus8E!"rr<&s +s8N)rs8N)ts8N)rs8N)ls82lqs8E#ts8E#ts8N)ts8N)us8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N(Ms+14LirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs7u`qs8N)rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)fs8N)os7u`ms8N)rs8N)ts8N*!s8N)ss8N)rs8N)ss8N)rs8N)q +s7lZps8N)rs8N)ss8N)rs8N)ts8N)us8N)ts8N*!s8N)rs8N'+rr<'!rr<'!rr<&ss8N)ls8N)r +s8N)ls82lqs8N)ss8N)us8N)ts8N)os8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+14Lm/bd$ +J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs7u`qs8N)rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)fs8N)os7u`ms8N)rs8N)ts8N*!s8N)ss8N)rs8N)ss8N)rs8N)q +s7lZps8N)rs8N)ss8N)rs8N)ts8N)us8N)ts8N*!s8N)rs8N'+rr<'!rr<'!rr<&ss8N)ls8N)r +s8N)ls82lqs8N)ss8N)us8N)ts8N)os8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+14LklK'j +J,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs7u`qs8N)rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)fs8N)os7u`ms8N)rs8N)ts8N*!s8N)ss8N)rs8N)ss8N)rs8N)q +s7lZps8N)rs8N)ss8N)rs8N)ts8N)us8N)ts8N*!s8N)rs8N'+rr<'!rr<'!rr<&ss8N)ls8N)r +s8N)ls82lqs8N)ss8N)us8N)ts8N)os8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+14LirR%V +J,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&os82iurr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ls7lZfs82lps8N)rs8N)ts8N*!s8N)ss8N)rs8N)ss7ZNis7u`p +s8N)rs8N)ss8N)qs8N*!s8N)ts8N)ts8N*!s8N)rs8N'+rr<'!rr<'!rr<&ss8N)rs7lZls8N)l +s8N*!rr<&ts8N)ss8N)us8N)ts8N)us7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+14Lm/bd$ +J,~> +!BU8[l0\NM!!rT)rrE'!rr<&os82iurr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ls7lZfs82lps8N)rs8N)ts8N*!s8N)ss8N)rs8N)ss7ZNis7u`p +s8N)rs8N)ss8N)qs8N*!s8N)ts8N)ts8N*!s8N)rs8N'+rr<'!rr<'!rr<&ss8N)rs7lZls8N)l +s8N*!rr<&ts8N)ss8N)us8N)ts8N)us7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+14LklK'j +J,~> +!B:&Xj6cmG!!rT)rrE'!rr<&os82iurr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ls7lZfs82lps8N)rs8N)ts8N*!s8N)ss8N)rs8N)ss7ZNis7u`p +s8N)rs8N)ss8N)qs8N*!s8N)ts8N)ts8N*!s8N)rs8N'+rr<'!rr<'!rr<&ss8N)rs7lZls8N)l +s8N*!rr<&ts8N)ss8N)us8N)ts8N)us7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+14LirR%V +J,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)qs8N)rs8N)ts8N)ms7cTis8N)ss8N)ss8N)rs8N)ts8N*!s8N)ss8N)rs8N)s +s7ZNis8N)ps8N)rs8N)ss8N)qs8N'#rr<&ss8N)ts8N*!s8N)rs8N'+rr<'!rr<'!rr<&ss8N)s +s7cTks8N)ls8N)ts8N'#rr<&ss8N)us8N)ts8N*!s7cTms8N)ms8N)ss8N)rs8N*!s8N)ts8N(M +s+14Lm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)qs8N)rs8N)ts8N)ms7cTis8N)ss8N)ss8N)rs8N)ts8N*!s8N)ss8N)rs8N)s +s7ZNis8N)ps8N)rs8N)ss8N)qs8N'#rr<&ss8N)ts8N*!s8N)rs8N'+rr<'!rr<'!rr<&ss8N)s +s7cTks8N)ls8N)ts8N'#rr<&ss8N)us8N)ts8N*!s7cTms8N)ms8N)ss8N)rs8N*!s8N)ts8N(M +s+14LklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)qs8N)rs8N)ts8N)ms7cTis8N)ss8N)ss8N)rs8N)ts8N*!s8N)ss8N)rs8N)s +s7ZNis8N)ps8N)rs8N)ss8N)qs8N'#rr<&ss8N)ts8N*!s8N)rs8N'+rr<'!rr<'!rr<&ss8N)s +s7cTks8N)ls8N)ts8N'#rr<&ss8N)us8N)ts8N*!s7cTms8N)ms8N)ss8N)rs8N*!s8N)ts8N(M +s+14LirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8;rss8N'!s8E#ss8E#rs8N)rs8N)us8E#ss8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)qs8E#ss8E#ss8N)ms8N)ss8N)ps8;rss8N)ss8N)rs8N)ts8N*!s8E#t +s8E#qs8N)ss8E#is8N)ps8E#ss8E#rs8N)ps8;rqs8N)ts8N*!s8E#ss8E!*rr<'!rr<'!rr<&s +s8N)ss8N)ss8N)rs8N)ls8N)ts8N'!s8E#ts8E#ts8N)us8E#us8N)ss8N)ts8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N(Ms+14Lm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8;rss8N'!s8E#ss8E#rs8N)rs8N)us8E#ss8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)qs8E#ss8E#ss8N)ms8N)ss8N)ps8;rss8N)ss8N)rs8N)ts8N*!s8E#t +s8E#qs8N)ss8E#is8N)ps8E#ss8E#rs8N)ps8;rqs8N)ts8N*!s8E#ss8E!*rr<'!rr<'!rr<&s +s8N)ss8N)ss8N)rs8N)ls8N)ts8N'!s8E#ts8E#ts8N)us8E#us8N)ss8N)ts8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N(Ms+14LklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8;rss8N'!s8E#ss8E#rs8N)rs8N)us8E#ss8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)qs8E#ss8E#ss8N)ms8N)ss8N)ps8;rss8N)ss8N)rs8N)ts8N*!s8E#t +s8E#qs8N)ss8E#is8N)ps8E#ss8E#rs8N)ps8;rqs8N)ts8N*!s8E#ss8E!*rr<'!rr<'!rr<&s +s8N)ss8N)ss8N)rs8N)ls8N)ts8N'!s8E#ts8E#ts8N)us8E#us8N)ss8N)ts8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N(Ms+14LirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTns7lZps7lZos7lZps8;rts8;ros7lZo +s7lZks7ZNis7lZos7lZps8;rts8;rts7lZos7lZos7lZks8)fns7lZos7lZms8E#rs8;rts8;rt +s7lWps8;ots8Duus8Duus7lZps7ZNns7lZks7ZNns7lZos7cQos7ZNms7lZps7lZos7lZps8;rt +s8;qKs+::Mm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTns7lZps7lZos7lZps8;rts8;ros7lZo +s7lZks7ZNis7lZos7lZps8;rts8;rts7lZos7lZos7lZks8)fns7lZos7lZms8E#rs8;rts8;rt +s7lWps8;ots8Duus8Duus7lZps7ZNns7lZks7ZNns7lZos7cQos7ZNms7lZps7lZos7lZps8;rt +s8;qKs+::MklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTns7lZps7lZos7lZps8;rts8;ros7lZo +s7lZks7ZNis7lZos7lZps8;rts8;rts7lZos7lZos7lZks8)fns7lZos7lZms8E#rs8;rts8;rt +s7lWps8;ots8Duus8Duus7lZps7ZNns7lZks7ZNns7lZos7cQos7ZNms7lZps7lZos7lZps8;rt +s8;qKs+::MirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;rps8;rqs7lZns8;ots8E#ss82lqs7lZms8;rrs8;rt +s8;rms8;rqs7lZjs82iss8E#ps8N'!s8;rrs7lZps8;rts8;rss8;p!rr<&us7lZms8)fms8)fl +s8;rqs7lZms8N)rs8;rts8;rrs8;rss8;ots8Duus8Duus7lZos82iss8E#us7lZks7ZNms8;p! +rr<&ts8;ots8E#us82iss8E#ss82lqs7lZms8;rrs8;rts8;qKs+::Mm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;rps8;rqs7lZns8;ots8E#ss82lqs7lZms8;rrs8;rt +s8;rms8;rqs7lZjs82iss8E#ps8N'!s8;rrs7lZps8;rts8;rss8;p!rr<&us7lZms8)fms8)fl +s8;rqs7lZms8N)rs8;rts8;rrs8;rss8;ots8Duus8Duus7lZos82iss8E#us7lZks7ZNms8;p! +rr<&ts8;ots8E#us82iss8E#ss82lqs7lZms8;rrs8;rts8;qKs+::MklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;rps8;rqs7lZns8;ots8E#ss82lqs7lZms8;rrs8;rt +s8;rms8;rqs7lZjs82iss8E#ps8N'!s8;rrs7lZps8;rts8;rss8;p!rr<&us7lZms8)fms8)fl +s8;rqs7lZms8N)rs8;rts8;rrs8;rss8;ots8Duus8Duus7lZos82iss8E#us7lZks7ZNms8;p! +rr<&ts8;ots8E#us82iss8E#ss82lqs7lZms8;rrs8;rts8;qKs+::MirR%VJ,~> +!BpJ^mHsrH!.k0ps8N)7s8N(ns8N(Ms+13bs8MBdeieN~> +!BU8[l0\ND!.k0ps8N)7s8N(ns8N(Ms+13bs8M6`c8pI~> +!B:&Xj6cm>!.k0ps8N)7s8N(ns8N(Ms+13bs8M$Z_`*)~> +!BpJ^mHsrH!.k0qs8E#7s8N(ms8N(Ms+13bs8MBdeieN~> +!BU8[l0\ND!.k0qs8E#7s8N(ms8N(Ms+13bs8M6`c8pI~> +!B:&Xj6cm>!.k0qs8E#7s8N(ms8N(Ms+13bs8M$Z_`*)~> +!BpJ^m=G;Cs8)f5s8)ems82kJs+13cs8MBdeieN~> +!BU8[l%/l?s8)f5s8)ems82kJs+13cs8M6`c8pI~> +!B:&Xj+769s8)f5s8)ems82kJs+13cs8M$Z_`*)~> +!BpJ^m=G;Cs82l5s8)ems82kJs+13cs8MBdeieN~> +!BU8[l%/l?s82l5s8)ems82kJs+13cs8M6`c8pI~> +!B:&Xj+769s82l5s8)ems82kJs+13cs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mBuuo!3Q;"!9=+X!4`(-!.k0$s+14(s8MBdeieN~> +!BU8[l*^Qk!3Q;"!9=+X!4`(-!.k0$s+14(s8M6`c8pI~> +!B:&Xj0epe!3Q;"!9=+X!4`(-!.k0$s+14(s8M$Z_`*)~> +!BpJ^mG.a;!;c]q!9sL`!7h)L!8IMR!8RSS!6bBB!:9^c!.k0$s+14(s8MBdeieN~> +!BU8[l.l=7!;c]q!9sL`!7h)L!8IMR!8RSS!6bBB!:9^c!.k0$s+14(s8M6`c8pI~> +!B:&Xj4s\1!;c]q!9sL`!7h)L!8IMR!8RSS!6bBB!:9^c!.k0$s+14(s8M$Z_`*)~> +!BpJ^mG%X@!;uis!;c]q!9sL`!7h)L!8RSS!8IMR!6bBB!:9^c!.k0$s+14(s8MBdeieN~> +!BU8[l.c4 +!B:&Xj4jS6!;uis!;c]q!9sL`!7h)L!8RSS!8IMR!6bBB!:9^c!.k0$s+14(s8M$Z_`*)~> +!BpJ^mG%X@!;uis!9*qX!7h)L!8RSS!8IMR!4Dh,!.k0$s+14(s8MBdeieN~> +!BU8[l.c4 +!B:&Xj4jS6!;uis!9*qX!7h)L!8RSS!8IMR!4Dh,!.k0$s+14(s8M$Z_`*)~> +!BpJ^mG%X@!;uis!;ulr!;lfr!!*&t!;lfp!!3*"q>^Eo!<<#uqu?TpqZ$Koqu?Kmr;Z]q!WN/o +s8;rps7u`ks8N'!s8;rps8;rmrr<&rs8E#ts8E#us8N'!s8;rps8;rrs8N''rr<'!rr<&ss8E#o +s8;rmrr<&ps8;ourr@WMJcC<$kl:YL!S0Da~> +!BU8[l.c4^Eo!<<#uqu?TpqZ$Koqu?Kmr;Z]q!WN/o +s8;rps7u`ks8N'!s8;rps8;rmrr<&rs8E#ts8E#us8N'!s8;rps8;rrs8N''rr<'!rr<&ss8E#o +s8;rmrr<&ps8;ourr@WMJcC<$kl:YH!R<`V~> +!B:&Xj4jS6!;uis!;ulr!;lfr!!*&t!;lfp!!3*"q>^Eo!<<#uqu?TpqZ$Koqu?Kmr;Z]q!WN/o +s8;rps7u`ks8N'!s8;rps8;rmrr<&rs8E#ts8E#us8N'!s8;rps8;rrs8N''rr<'!rr<&ss8E#o +s8;rmrr<&ps8;ourr@WMJcC<$kl:YB!Q-jH~> +!BpJ^mG%XC!<<'!p\t3nqZ$QqrVlitrVlitrVultp](6nrr2rurVlitrVlitr;Q`srVlitqYpNq +q>UEprVultq#:UEpqYpNqr;Q`srVultrVlitrVlit +rVlitrVults8W*!s8N'!qu6WrqYpNqrVlitq>UEpqYpNqrVultJcC<$JcFs6rp9a;4b*~> +!BU8[l.c4?!<<'!p\t3nqZ$QqrVlitrVlitrVultp](6nrr2rurVlitrVlitr;Q`srVlitqYpNq +q>UEprVultq#:UEpqYpNqr;Q`srVultrVlitrVlit +rVlitrVults8W*!s8N'!qu6WrqYpNqrVlitq>UEpqYpNqrVultJcC<$JcFs6rojI/3e.~> +!B:&Xj4jS9!<<'!p\t3nqZ$QqrVlitrVlitrVultp](6nrr2rurVlitrVlitr;Q`srVlitqYpNq +q>UEprVultq#:UEpqYpNqr;Q`srVultrVlitrVlit +rVlitrVults8W*!s8N'!qu6WrqYpNqrVlitq>UEpqYpNqrVultJcC<$JcFs6ro4$s2h1~> +!BpJ^mG%[>!;HKn!;c]q!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<2uu!;lcr!;lcr!;ZWp!;uis +!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqqYpNqr;Q`srVlitr;Q`srr2ruqu6Wrrr2ru +rr2rurr2ruqu6Wrp&>!lq>UEpqYpNqr;Q`sJcC<$JcFs6rp9a;4b*~> +!BU8[l.c7:!;HKn!;c]q!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<2uu!;lcr!;lcr!;ZWp!;uis +!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqqYpNqr;Q`srVlitr;Q`srr2ruqu6Wrrr2ru +rr2rurr2ruqu6Wrp&>!lq>UEpqYpNqr;Q`sJcC<$JcFs6rojI/3e.~> +!B:&Xj4jV4!;HKn!;c]q!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<2uu!;lcr!;lcr!;ZWp!;uis +!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqqYpNqr;Q`srVlitr;Q`srr2ruqu6Wrrr2ru +rr2rurr2ruqu6Wrp&>!lq>UEpqYpNqr;Q`sJcC<$JcFs6ro4$s2h1~> +!BpJ^mG%XC!<<'!p\t3nqYpNqr;Q`srr2ruqu6Wrp\t3nq>UEpqu6Wrrr2ruqu6Wrqu6Wrq#C +!BU8[l.c4?!<<'!p\t3nqYpNqr;Q`srr2ruqu6Wrp\t3nq>UEpqu6Wrrr2ruqu6Wrqu6Wrq#C +!B:&Xj4jS9!<<'!p\t3nqYpNqr;Q`srr2ruqu6Wrp\t3nq>UEpqu6Wrrr2ruqu6Wrqu6Wrq#C +!BpJ^mG%X@!;-9k!;c]q!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<2uu!;lcr!;lcr!;6Bl!;QQo +!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqq>UEprr2rur;Q`sr;Q`srr2ruqu6Wrrr2rurr2ru +rr2ruqu6Wrqu6Wrr;Q`sq>UEppAb-mJcC<$JcFp5rp9a;4b*~> +!BU8[l.c4UEprr2rur;Q`sr;Q`srr2ruqu6Wrrr2rurr2ru +rr2ruqu6Wrqu6Wrr;Q`sq>UEppAb-mJcC<$JcFp5rojI/3e.~> +!B:&Xj4jS6!;-9k!;c]q!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<2uu!;lcr!;lcr!;6Bl!;QQo +!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqq>UEprr2rur;Q`sr;Q`srr2ruqu6Wrrr2rurr2ru +rr2ruqu6Wrqu6Wrr;Q`sq>UEppAb-mJcC<$JcFp5ro4$s2h1~> +!BpJ^mG%X@!;-9k!;c]q!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<2uu!;lcr!;lcr!;ZWp!;uis +!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqq#:BqrrDrr!!)rs!!*#u!!)or!!*#u!!*#u +!!*#u!!)or!!)or!!)rs!!)ip!!)lq!!)rs!!%TMJcC<$kl:YL!S0Da~> +!BU8[l.c4 +!B:&Xj4jS6!;-9k!;c]q!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<2uu!;lcr!;lcr!;ZWp!;uis +!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqq#:BqrrDrr!!)rs!!*#u!!)or!!*#u!!*#u +!!*#u!!)or!!)or!!)rs!!)ip!!)lq!!)rs!!%TMJcC<$kl:YB!Q-jH~> +!BpJ^mG%X@!;-9k!;c]q!;uis!<)ot!<)rt!;HKn!;QQo!<)ot!;uis!<)ot!;c]q!<)ot!<3#u +!<)ot!;QQo!<)ot!;c]q!;- +!BU8[l.c4 +!B:&Xj4jS6!;-9k!;c]q!;uis!<)ot!<)rt!;HKn!;QQo!<)ot!;uis!<)ot!;c]q!<)ot!<3#u +!<)ot!;QQo!<)ot!;c]q!;- +!BpJ^mG.a?!;ZZk!<3#t!<3#t!<)rr!!<0#!;c`l!;lfp!;c`o!;QTm!<)ou!<;utpAb'kqu?Km +q#:?ps8;rps8;rps7u`lrr<&rs8E#ts8E#ss8;rrs8E#us8N*!s8N*!s7u`os8;ots8E#ts7u`o +rrE-"r;c]orr@WMJcC<$nGiLT!S0Da~> +!BU8[l.l=;!;ZZk!<3#t!<3#t!<)rr!!<0#!;c`l!;lfp!;c`o!;QTm!<)ou!<;utpAb'kqu?Km +q#:?ps8;rps8;rps7u`lrr<&rs8E#ts8E#ss8;rrs8E#us8N*!s8N*!s7u`os8;ots8E#ts7u`o +rrE-"r;c]orr@WMJcC<$nGiLP!R<`V~> +!B:&Xj4s\5!;ZZk!<3#t!<3#t!<)rr!!<0#!;c`l!;lfp!;c`o!;QTm!<)ou!<;utpAb'kqu?Km +q#:?ps8;rps8;rps7u`lrr<&rs8E#ts8E#ss8;rrs8E#us8N*!s8N*!s7u`os8;ots8E#ts7u`o +rrE-"r;c]orr@WMJcC<$nGiLJ!Q-jH~> +!BpJ^m=G;drr<&Urr<%Ms+13$s-Wicm/bd$J,~> +!BU8[l%/l`rr<&Urr<%Ms+13$s-WicklK'jJ,~> +!B:&Xj+76Zrr<&Urr<%Ms+13$s-WicirR%VJ,~> +!BpJ^m=G;drr<&Vrr<%Ms+13$s-Ncbm/bd$J,~> +!BU8[l%/l`rr<&Vrr<%Ms+13$s-NcbklK'jJ,~> +!B:&Xj+76Zrr<&Vrr<%Ms+13$s-NcbirR%VJ,~> +!BpJ^m=G;drr<&Vrr<%Ms+13$s-Ncbm/bd$J,~> +!BU8[l%/l`rr<&Vrr<%Ms+13$s-NcbklK'jJ,~> +!B:&Xj+76Zrr<&Vrr<%Ms+13$s-NcbirR%VJ,~> +!BpJ^m=G;es8;rYs82kJs+13$s-Wicm/bd$J,~> +!BU8[l%/las8;rYs82kJs+13$s-WicklK'jJ,~> +!B:&Xj+76[s8;rYs82kJs+13$s-WicirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mDf2(!:Tsf!;?Hm!7LoE!8.>O!6,!8!9F1X!6kKC!:^$d!6P9@!;?Hm!.k0$s8N&tm/bd$ +J,~> +!BU8[l,Nc$!:Tsf!;?Hm!7LoE!8.>O!6,!8!9F1X!6kKC!:^$d!6P9@!;?Hm!.k0$s8N&tklK'j +J,~> +!B:&Xj2V,s!:Tsf!;?Hm!7LoE!8.>O!6,!8!9F1X!6kKC!:^$d!6P9@!;?Hm!.k0$s8N&tirR%V +J,~> +!BpJ^mFqU=!!<0#!;- +!BU8[l.Z19!!<0#!;- +!B:&Xj4aP3!!<0#!;- +!BpJ^mHsrH!;ull!:g*h!:Tsf!65'=!;6Be!9jI_!65'=!;?Hf!:^$g!4Mq-!;HNf!8[\T!.k0$ +s7--gm/bd$J,~> +!BU8[l0\ND!;ull!:g*h!:Tsf!65'=!;6Be!9jI_!65'=!;?Hf!:^$g!4Mq-!;HNf!8[\T!.k0$ +s7--gklK'jJ,~> +!B:&Xj6cm>!;ull!:g*h!:Tsf!65'=!;6Be!9jI_!65'=!;?Hf!:^$g!4Mq-!;HNf!8[\T!.k0$ +s7--girR%VJ,~> +!BpJ^mHsrH!;uls!<)rs!<)rr!;ZZp!;ulr!<<)t!<<)p!<)rq!;ZZn!<)rs!!*&t!;?Hk!;ulm +!;ZZp!<)rs!!*&t!<<)t!<3#p!<<)p!;lfp!<3#t!!E6$!<<#urVu]op](0lr;ZQmq>^HprVuis +rVufrq>^Hpr;Z]qs8W#t!<<#u!<;utqu?Tprr;rt"9/?$s8E#ts82lns8)fms8N)ls8N)ts8N)u +s8;ots8Duus8E#us8;rrs8)fqs7lZns82lms8;rrs8Duus8;rqs7u_Hs.]Pmm/bd$J,~> +!BU8[l0\ND!;uls!<)rs!<)rr!;ZZp!;ulr!<<)t!<<)p!<)rq!;ZZn!<)rs!!*&t!;?Hk!;ulm +!;ZZp!<)rs!!*&t!<<)t!<3#p!<<)p!;lfp!<3#t!!E6$!<<#urVu]op](0lr;ZQmq>^HprVuis +rVufrq>^Hpr;Z]qs8W#t!<<#u!<;utqu?Tprr;rt"9/?$s8E#ts82lns8)fms8N)ls8N)ts8N)u +s8;ots8Duus8E#us8;rrs8)fqs7lZns82lms8;rrs8Duus8;rqs7u_Hs.]PmklK'jJ,~> +!B:&Xj6cm>!;uls!<)rs!<)rr!;ZZp!;ulr!<<)t!<<)p!<)rq!;ZZn!<)rs!!*&t!;?Hk!;ulm +!;ZZp!<)rs!!*&t!<<)t!<3#p!<<)p!;lfp!<3#t!!E6$!<<#urVu]op](0lr;ZQmq>^HprVuis +rVufrq>^Hpr;Z]qs8W#t!<<#u!<;utqu?Tprr;rt"9/?$s8E#ts82lns8)fms8N)ls8N)ts8N)u +s8;ots8Duus8E#us8;rrs8)fqs7lZns82lms8;rrs8Duus8;rqs7u_Hs.]PmirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZls8N)ss8E#us8;rts7lZns82los7lZps7cTi +s7lZos7lZjs8N)ss8N'!s8;rts8;rts7lZps7lZns7lWps7QHms7lZjs7lZos7lZjs8N)ss8N*! +s7lZls8N)ss8;rts8;ots7cTns7lWps7QHms82los7lZls8N)ls8N*!rriE&!!*'!p]( +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZls8N)ss8E#us8;rts7lZns82los7lZps7cTi +s7lZos7lZjs8N)ss8N'!s8;rts8;rts7lZps7lZns7lWps7QHms7lZjs7lZos7lZjs8N)ss8N*! +s7lZls8N)ss8;rts8;ots7cTns7lWps7QHms82los7lZls8N)ls8N*!rriE&!!*'!p]( +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZls8N)ss8E#us8;rts7lZns82los7lZps7cTi +s7lZos7lZjs8N)ss8N'!s8;rts8;rts7lZps7lZns7lWps7QHms7lZjs7lZos7lZjs8N)ss8N*! +s7lZls8N)ss8;rts8;ots7cTns7lWps7QHms82los7lZls8N)ls8N*!rriE&!!*'!p]( +!BpJ^mHsrQ!!rT)rrE'!rr<&ss82lps8E#ss8E#rs8N)rs8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N)qs8E#ss8E#ss8N)ls82los8N)ts8N)us8N)ts8N)ts8N)qs8E#ss8Duus8Duus8E!& +rr<'!rr<&ts8N)qs8E#ss8E#ss8N)ls8N)ts8Duus8E#ss8E#rs8N)rs8N)ts8N)us8E#ts8N*! +s8E#ss8Duus8Duus8E!"rr<&ss8N)rs8N)ts8N)rs8N)ls82lqs8E#ts8E#ts8N)ts8N)us8N)t +s8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N(Ms.]Pmm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss82lps8E#ss8E#rs8N)rs8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N)qs8E#ss8E#ss8N)ls82los8N)ts8N)us8N)ts8N)ts8N)qs8E#ss8Duus8Duus8E!& +rr<'!rr<&ts8N)qs8E#ss8E#ss8N)ls8N)ts8Duus8E#ss8E#rs8N)rs8N)ts8N)us8E#ts8N*! +s8E#ss8Duus8Duus8E!"rr<&ss8N)rs8N)ts8N)rs8N)ls82lqs8E#ts8E#ts8N)ts8N)us8N)t +s8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N(Ms.]PmklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss82lps8E#ss8E#rs8N)rs8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N)qs8E#ss8E#ss8N)ls82los8N)ts8N)us8N)ts8N)ts8N)qs8E#ss8Duus8Duus8E!& +rr<'!rr<&ts8N)qs8E#ss8E#ss8N)ls8N)ts8Duus8E#ss8E#rs8N)rs8N)ts8N)us8E#ts8N*! +s8E#ss8Duus8Duus8E!"rr<&ss8N)rs8N)ts8N)rs8N)ls82lqs8E#ts8E#ts8N)ts8N)us8N)t +s8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N(Ms.]PmirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs7u`qs8N)rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ks7u`ps8N)ts8N)us8;rns8N)qs8N)rs8N'-rr<'!rr<'!rr<'! +s8;rks8N)rs8N)ts8N)ls7lZps8N)rs8N)ss8N)rs8N)ts8N)us8N)ts8N*!s8N)rs8N'+rr<'! +rr<'!rr<&ss8N)ls8N)rs8N)ls82lqs8N)ss8N)us8N)ts8N)os8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)us8;qKs.98im/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs7u`qs8N)rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ks7u`ps8N)ts8N)us8;rns8N)qs8N)rs8N'-rr<'!rr<'!rr<'! +s8;rks8N)rs8N)ts8N)ls7lZps8N)rs8N)ss8N)rs8N)ts8N)us8N)ts8N*!s8N)rs8N'+rr<'! +rr<'!rr<&ss8N)ls8N)rs8N)ls82lqs8N)ss8N)us8N)ts8N)os8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)us8;qKs.98iklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs7u`qs8N)rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ks7u`ps8N)ts8N)us8;rns8N)qs8N)rs8N'-rr<'!rr<'!rr<'! +s8;rks8N)rs8N)ts8N)ls7lZps8N)rs8N)ss8N)rs8N)ts8N)us8N)ts8N*!s8N)rs8N'+rr<'! +rr<'!rr<&ss8N)ls8N)rs8N)ls82lqs8N)ss8N)us8N)ts8N)os8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)us8;qKs.98iirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&os82iurr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)hs82lrs8N*!s8N)ss8)fos8N)qs7ZL#rr<'!rr<'!rr<&us8)fl +s8N)rs8N)ts8N)ls7u`ps8N)rs8N)ss8N)qs8N*!s8N)ts8N)ts8N*!s8N)rs8N'+rr<'!rr<'! +rr<&ss8N)rs7lZls8N)ls8N*!rr<&ts8N)ss8N)us8N)ts8N)us7lZns8N)ms8N)ss8N)rs8N*! +s8N)ts8N)ts8)eIs.TJlm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&os82iurr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)hs82lrs8N*!s8N)ss8)fos8N)qs7ZL#rr<'!rr<'!rr<&us8)fl +s8N)rs8N)ts8N)ls7u`ps8N)rs8N)ss8N)qs8N*!s8N)ts8N)ts8N*!s8N)rs8N'+rr<'!rr<'! +rr<&ss8N)rs7lZls8N)ls8N*!rr<&ts8N)ss8N)us8N)ts8N)us7lZns8N)ms8N)ss8N)rs8N*! +s8N)ts8N)ts8)eIs.TJlklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&os82iurr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)hs82lrs8N*!s8N)ss8)fos8N)qs7ZL#rr<'!rr<'!rr<&us8)fl +s8N)rs8N)ts8N)ls7u`ps8N)rs8N)ss8N)qs8N*!s8N)ts8N)ts8N*!s8N)rs8N'+rr<'!rr<'! +rr<&ss8N)rs7lZls8N)ls8N*!rr<&ts8N)ss8N)us8N)ts8N)us7lZns8N)ms8N)ss8N)rs8N*! +s8N)ts8N)ts8)eIs.TJlirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)us8N'#rr<&ps82lqs8N)qs7ZL#rr<'!rr<'! +rr<&ss82lns8N)rs8N)ts8N)ls8N)ps8N)rs8N)ss8N)qs8N'#rr<&ss8N)ts8N*!s8N)rs8N'+ +rr<'!rr<'!rr<&ss8N)ss7cTks8N)ls8N)ts8N'#rr<&ss8N)us8N)ts8N*!s7cTms8N)ms8N)s +s8N)rs8N*!s8N)ts8N)rs82kJs.]Pmm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)us8N'#rr<&ps82lqs8N)qs7ZL#rr<'!rr<'! +rr<&ss82lns8N)rs8N)ts8N)ls8N)ps8N)rs8N)ss8N)qs8N'#rr<&ss8N)ts8N*!s8N)rs8N'+ +rr<'!rr<'!rr<&ss8N)ss7cTks8N)ls8N)ts8N'#rr<&ss8N)us8N)ts8N*!s7cTms8N)ms8N)s +s8N)rs8N*!s8N)ts8N)rs82kJs.]PmklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)us8N'#rr<&ps82lqs8N)qs7ZL#rr<'!rr<'! +rr<&ss82lns8N)rs8N)ts8N)ls8N)ps8N)rs8N)ss8N)qs8N'#rr<&ss8N)ts8N*!s8N)rs8N'+ +rr<'!rr<'!rr<&ss8N)ss7cTks8N)ls8N)ts8N'#rr<&ss8N)us8N)ts8N*!s7cTms8N)ms8N)s +s8N)rs8N*!s8N)ts8N)rs82kJs.]PmirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8;rss8N'!s8E#ss8E#rs8N)rs8N)us8E#ss8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)qs8E#ss8E#ss8N)ls8;rss8N)ts8;rqs8N)ts8N)ts8N)ts8N'!s8E#o +s8N*!s8N*!s8N*!s8N)ts8N)qs8E#ss8E#ss8N)ls8N)ps8E#ss8E#rs8N)ps8;rqs8N)ts8N*! +s8E#ss8E!*rr<'!rr<'!rr<&ss8N)ss8N)ss8N)rs8N)ls8N)ts8N'!s8E#ts8E#ts8N)us8E#u +s8N)ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms.]Pmm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8;rss8N'!s8E#ss8E#rs8N)rs8N)us8E#ss8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)qs8E#ss8E#ss8N)ls8;rss8N)ts8;rqs8N)ts8N)ts8N)ts8N'!s8E#o +s8N*!s8N*!s8N*!s8N)ts8N)qs8E#ss8E#ss8N)ls8N)ps8E#ss8E#rs8N)ps8;rqs8N)ts8N*! +s8E#ss8E!*rr<'!rr<'!rr<&ss8N)ss8N)ss8N)rs8N)ls8N)ts8N'!s8E#ts8E#ts8N)us8E#u +s8N)ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms.]PmklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8;rss8N'!s8E#ss8E#rs8N)rs8N)us8E#ss8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)qs8E#ss8E#ss8N)ls8;rss8N)ts8;rqs8N)ts8N)ts8N)ts8N'!s8E#o +s8N*!s8N*!s8N*!s8N)ts8N)qs8E#ss8E#ss8N)ls8N)ps8E#ss8E#rs8N)ps8;rqs8N)ts8N*! +s8E#ss8E!*rr<'!rr<'!rr<&ss8N)ss8N)ss8N)rs8N)ls8N)ts8N'!s8E#ts8E#ts8N)us8E#u +s8N)ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms.]PmirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTns7lZps7lZos7lZps8;rts8;ros7lZo +s7lZjs7lZms8E#qs7lZns7lZps7lWps8;ots8Duus8Duus7lZjs7lZos7lZks8)fns7lZos7lZm +s8E#rs8;rts8;rts7lWps8;ots8Duus8Duus7lZps7ZNns7lZks7ZNns7lZos7cQos7ZNms7lZp +s7lZos7lZps8;rts8;rts7lYGs.]Pmm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTns7lZps7lZos7lZps8;rts8;ros7lZo +s7lZjs7lZms8E#qs7lZns7lZps7lWps8;ots8Duus8Duus7lZjs7lZos7lZks8)fns7lZos7lZm +s8E#rs8;rts8;rts7lWps8;ots8Duus8Duus7lZps7ZNns7lZks7ZNns7lZos7cQos7ZNms7lZp +s7lZos7lZps8;rts8;rts7lYGs.]PmklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTns7lZps7lZos7lZps8;rts8;ros7lZo +s7lZjs7lZms8E#qs7lZns7lZps7lWps8;ots8Duus8Duus7lZjs7lZos7lZks8)fns7lZos7lZm +s8E#rs8;rts8;rts7lWps8;ots8Duus8Duus7lZps7ZNns7lZks7ZNns7lZos7cQos7ZNms7lZp +s7lZos7lZps8;rts8;rts7lYGs.]PmirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;rps8;rqs7lZns8;ots8E#ss82lqs7lZms8;rrs8;rt +s8;rms8;rqs7lZjs8N'!s8;rps8N)qs7u`ms82los8)crs8;ots8Duus8Duus7u`hs8;rqs7lZk +s8)fls8;rqs7lZms8N)rs8;rts8;rrs8;rss8;ots8Duus8Duus7lZos82iss8E#us7lZks7ZNm +s8;p!rr<&ts8;ots8E#us82iss8E#ss82lqs7lZms8;rrs8;rts8;rts7u_Hs.TJlm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;rps8;rqs7lZns8;ots8E#ss82lqs7lZms8;rrs8;rt +s8;rms8;rqs7lZjs8N'!s8;rps8N)qs7u`ms82los8)crs8;ots8Duus8Duus7u`hs8;rqs7lZk +s8)fls8;rqs7lZms8N)rs8;rts8;rrs8;rss8;ots8Duus8Duus7lZos82iss8E#us7lZks7ZNm +s8;p!rr<&ts8;ots8E#us82iss8E#ss82lqs7lZms8;rrs8;rts8;rts7u_Hs.TJlklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;rps8;rqs7lZns8;ots8E#ss82lqs7lZms8;rrs8;rt +s8;rms8;rqs7lZjs8N'!s8;rps8N)qs7u`ms82los8)crs8;ots8Duus8Duus7u`hs8;rqs7lZk +s8)fls8;rqs7lZms8N)rs8;rts8;rrs8;rss8;ots8Duus8Duus7lZos82iss8E#us7lZks7ZNm +s8;p!rr<&ts8;ots8E#us82iss8E#ss82lqs7lZms8;rrs8;rts8;rts7u_Hs.TJlirR%VJ,~> +!BpJ^mHsrH!.k1Es8N(MrrW3#!2BMn!.k0$s4./Km/bd$J,~> +!BU8[l0\ND!.k1Es8N(MrrW3#!2BMn!.k0$s4./KklK'jJ,~> +!B:&Xj6cm>!.k1Es8N(MrrW3#!2BMn!.k0$s4./KirR%VJ,~> +!BpJ^mHsrH!.k1Fs8N(MrrW3#!29Gm!.k0$s4./Km/bd$J,~> +!BU8[l0\ND!.k1Fs8N(MrrW3#!29Gm!.k0$s4./KklK'jJ,~> +!B:&Xj6cm>!.k1Fs8N(MrrW3#!29Gm!.k0$s4./KirR%VJ,~> +!BpJ^m=G;ks8)eLs8)ems82kJs+14$s8MBdeieN~> +!BU8[l%/lgs8)eLs8)ems82kJs+14$s8M6`c8pI~> +!B:&Xj+76as8)eLs8)ems82kJs+14$s8M$Z_`*)~> +!BpJ^m=G;ks8)eLs8)ems82kJs+14$s8MBdeieN~> +!BU8[l%/lgs8)eLs8)ems82kJs+14$s8M6`c8pI~> +!B:&Xj+76as8)eLs8)ems82kJs+14$s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mD],(!.k1Ls8;rXs8;r-s8;qKs+13$s82iqm/bd$J,~> +!BU8[l,E]$!.k1Ls8;rXs8;r-s8;qKs+13$s82iqklK'jJ,~> +!B:&Xj2M&s!.k1Ls8;rXs8;r-s8;qKs+13$s82iqirR%VJ,~> +!BpJ^mFhO=!!3*"n,E@f]`.s3`W#opAY*mJcC<$_Z0W&!S0Da~> +!BU8[l.Q+9!!3*"n,E@f]`.s3`W#opAY*mJcC<$_Z0W"!R<`V~> +!B:&Xj4XJ3!!3*"n,E@f]`.s3`W#opAY*mJcC<$_Z0Vq!Q-jH~> +!BpJ^mFqR?!<3#u!:Tpf!5/=3!65$=!8IMR!6bBB!:9^c!6>*>!;?Em!.k0$s2+g8m/bd$J,~> +!BU8[l.Z.;!<3#u!:Tpf!5/=3!65$=!8IMR!6bBB!:9^c!6>*>!;?Em!.k0$s2+g8klK'jJ,~> +!B:&Xj4aM5!<3#u!:Tpf!5/=3!65$=!8IMR!6bBB!:9^c!6>*>!;?Em!.k0$s2+g8irR%VJ,~> +!BpJ^mG%X@!;uis!:Tpf!5/=3!65$=!8IMR!4Dh,!6>*>!.k0$s0ht,m/bd$J,~> +!BU8[l.c4*>!.k0$s0ht,klK'jJ,~> +!B:&Xj4jS6!;uis!:Tpf!5/=3!65$=!8IMR!4Dh,!6>*>!.k0$s0ht,irR%VJ,~> +!BpJ^mG%X@!;?Hk!;QQo!;lfq!<3#t!<)rr!;6Bj!!3*"rr;rtrr;rtrVufr!WN/us7u`ns8;rr +s8N''rr<'!rr<&ss8;ourrDfnr;c`pq>g?krr<'!r;c`pr;cWm!!)orrW)rtrW)uurr<'!r;c`p +r;cfrrr<9'!!*'!!!)rsrW)cor;cWm!!)Zkr;c]or;['%!!*'!!!)utrrDusr;c`pq>gHnrW)co +r;ccqrr<'!r;c`pr;Zlu!.k0$s5s@\m/bd$J,~> +!BU8[l.c4g?krr<'!r;c`pr;cWm!!)orrW)rtrW)uurr<'!r;c`p +r;cfrrr<9'!!*'!!!)rsrW)cor;cWm!!)Zkr;c]or;['%!!*'!!!)utrrDusr;c`pq>gHnrW)co +r;ccqrr<'!r;c`pr;Zlu!.k0$s5s@\klK'jJ,~> +!B:&Xj4jS6!;?Hk!;QQo!;lfq!<3#t!<)rr!;6Bj!!3*"rr;rtrr;rtrVufr!WN/us7u`ns8;rr +s8N''rr<'!rr<&ss8;ourrDfnr;c`pq>g?krr<'!r;c`pr;cWm!!)orrW)rtrW)uurr<'!r;c`p +r;cfrrr<9'!!*'!!!)rsrW)cor;cWm!!)Zkr;c]or;['%!!*'!!!)utrrDusr;c`pq>gHnrW)co +r;ccqrr<'!r;c`pr;Zlu!.k0$s5s@\irR%VJ,~> +!BpJ^mFqR?!;QQo!<)ot!;ZWp!;c]q!;uis!<)ot!<)ot!;HKn!<)rt!<)ot!;uis!<)ot!<)rt +!;lcr!;ZWp!<)ot!<)rt!<<*!!<<'!!<2uu!<)rt!;QQo!<)ot!;c]q!;- +!BU8[l.Z.;!;QQo!<)ot!;ZWp!;c]q!;uis!<)ot!<)ot!;HKn!<)rt!<)ot!;uis!<)ot!<)rt +!;lcr!;ZWp!<)ot!<)rt!<<*!!<<'!!<2uu!<)rt!;QQo!<)ot!;c]q!;- +!B:&Xj4aM5!;QQo!<)ot!;ZWp!;c]q!;uis!<)ot!<)ot!;HKn!<)rt!<)ot!;uis!<)ot!<)rt +!;lcr!;ZWp!<)ot!<)rt!<<*!!<<'!!<2uu!<)rt!;QQo!<)ot!;c]q!;- +!BpJ^mFhO!lq>UEppAY*mqu6Wr +rr2ruqu6WrrVlitr;Q`sq#: +!BU8[l.Q+8!<)ot!;lcr!;c]q!;ZWp!<2uu!<)ot!;lcr!;QQo!;uis!<)ot!;uis!<)ot!;uis +!;lcr!;c]q!;lcr!<2uu!<2uu!<2uu!<2uu!;uis!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6Wr +qYpNqqYpNqr;Q`srVlitr;Q`srr2ruqu6Wrrr2rurr2rurr2ruqu6Wrp&>!lq>UEppAY*mqu6Wr +rr2ruqu6WrrVlitr;Q`sq#: +!B:&Xj4XJ2!<)ot!;lcr!;c]q!;ZWp!<2uu!<)ot!;lcr!;QQo!;uis!<)ot!;uis!<)ot!;uis +!;lcr!;c]q!;lcr!<2uu!<2uu!<2uu!<2uu!;uis!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6Wr +qYpNqqYpNqr;Q`srVlitr;Q`srr2ruqu6Wrrr2rurr2rurr2ruqu6Wrp&>!lq>UEppAY*mqu6Wr +rr2ruqu6WrrVlitr;Q`sq#: +!BpJ^mFD4:!<2uu!;lcr!;c]q!;ZWp!<2uu!<)rn!;HNm!;ZWp!<2uu!;lfq!;QQo!;c`k!<2uu +!<2uu!<2uu!<)rs!;?Em!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqq>UEprr2rur;Q`sr;Q`s +rr2ruqu6Wrrr2rurr2rurr2ruqu6WrqZ$Emq>UEppAapgrr2ruqu6WrrVlitr;Q`srVu`pqYpNq +pAY*mqu6Wrqu6WrrVlitr;Q`sr;Z`rJcC<$j8],G!S0Da~> +!BU8[l.,e6!<2uu!;lcr!;c]q!;ZWp!<2uu!<)rn!;HNm!;ZWp!<2uu!;lfq!;QQo!;c`k!<2uu +!<2uu!<2uu!<)rs!;?Em!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqq>UEprr2rur;Q`sr;Q`s +rr2ruqu6Wrrr2rurr2rurr2ruqu6WrqZ$Emq>UEppAapgrr2ruqu6WrrVlitr;Q`srVu`pqYpNq +pAY*mqu6Wrqu6WrrVlitr;Q`sr;Z`rJcC<$j8],C!R<`V~> +!B:&Xj44/0!<2uu!;lcr!;c]q!;ZWp!<2uu!<)rn!;HNm!;ZWp!<2uu!;lfq!;QQo!;c`k!<2uu +!<2uu!<2uu!<)rs!;?Em!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqq>UEprr2rur;Q`sr;Q`s +rr2ruqu6Wrrr2rurr2rurr2ruqu6WrqZ$Emq>UEppAapgrr2ruqu6WrrVlitr;Q`srVu`pqYpNq +pAY*mqu6Wrqu6WrrVlitr;Q`sr;Z`rJcC<$j8],=!Q-jH~> +!BpJ^mF;. +!BU8[l.#_8!<<'!qu6WrqYpNqq#:BqrrDus!!)EdrrDrr!!*#u!!)forrDoq!!)lq!!)cn!!*#u +!!*#u!!)lqrrDio!!)or!!)or!!)Zk!!)or!s&B$!;lcr!;c]q!;ZWp!<2uu!;uis!;uis!<2uu +!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;uis!;ZWp!;?Em!;HKn!;lcr!<)ot!;uis!<2uu!;uis +!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;ZZp!.k0$s5j:[klK'jJ,~> +!B:&Xj4+)2!<<'!qu6WrqYpNqq#:BqrrDus!!)EdrrDrr!!*#u!!)forrDoq!!)lq!!)cn!!*#u +!!*#u!!)lqrrDio!!)or!!)or!!)Zk!!)or!s&B$!;lcr!;c]q!;ZWp!<2uu!;uis!;uis!<2uu +!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;uis!;ZWp!;?Em!;HKn!;lcr!<)ot!;uis!<2uu!;uis +!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;ZZp!.k0$s5j:[irR%VJ,~> +!BpJ^mG%X@!;lcu!<<'!qu6WrqYpNqq#:BqrrDus!!)Qh!!)rs!!)or!W`6#qu6Wrr;Q`squ6Wr +qYpNqp\t3nrr2rurr2rurr2rur;Q`sq>UEpqu6Wrqu6Wro`"mkqu6`us8N)rrr<&qrr<&orrN3# +!;lcr!;uis!<2uu!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;uis!;ZWp!;?Em!;HKn!;lcr!<)ot +!;uis!<2uu!;uis!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!.k0$s5s@\m/bd$J,~> +!BU8[l.c4UEpqu6Wrqu6Wro`"mkqu6`us8N)rrr<&qrr<&orrN3# +!;lcr!;uis!<2uu!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;uis!;ZWp!;?Em!;HKn!;lcr!<)ot +!;uis!<2uu!;uis!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!.k0$s5s@\klK'jJ,~> +!B:&Xj4jS6!;lcu!<<'!qu6WrqYpNqq#:BqrrDus!!)Qh!!)rs!!)or!W`6#qu6Wrr;Q`squ6Wr +qYpNqp\t3nrr2rurr2rurr2rur;Q`sq>UEpqu6Wrqu6Wro`"mkqu6`us8N)rrr<&qrr<&orrN3# +!;lcr!;uis!<2uu!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;uis!;ZWp!;?Em!;HKn!;lcr!<)ot +!;uis!<2uu!;uis!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!.k0$s5s@\irR%VJ,~> +!BpJ^mG%[@!<)ot!<)ot!<)ot!;ZWp!;HKn!;c]q!<)rt!;QTo!<)ot!;lct!<3&rs8N)trr<&r +rr<&trr<&urr<&ts8N)urr<&urr<&urr<&us8N)trr<&orr<&trr<&qrr<&ks8N)trr<&trr<&t +rr<&prr<&orrN3#!;lcr!;uis!<)ot!<)ot!<)ot!<2uu!<2uu!;lcr!;lcr!<)rt!;ZWp!;6?l +!<)rt!<)ot!<)rt!<)ot!<)rt!<2uu!<)rt!;c]q!<)ot!;lcr!;c]q!<)ot!;uis!;uis!<)rt +!<)ot!;lfr!.k0$s6fpdm/bd$J,~> +!BU8[l.c7 +!B:&Xj4jV6!<)ot!<)ot!<)ot!;ZWp!;HKn!;c]q!<)rt!;QTo!<)ot!;lct!<3&rs8N)trr<&r +rr<&trr<&urr<&ts8N)urr<&urr<&urr<&us8N)trr<&orr<&trr<&qrr<&ks8N)trr<&trr<&t +rr<&prr<&orrN3#!;lcr!;uis!<)ot!<)ot!<)ot!<2uu!<2uu!;lcr!;lcr!<)rt!;ZWp!;6?l +!<)rt!<)ot!<)rt!<)ot!<)rt!<2uu!<)rt!;c]q!<)ot!;lcr!;c]q!<)ot!;uis!;uis!<)rt +!<)ot!;lfr!.k0$s6fpdirR%VJ,~> +!BpJ^mG%XA!<;utqu?Tpqu?KmqYpNqq>^BnpAY-ns8;rnrr<&qrrE-"r;cZnr;ccqr;cfrrW)uu +rrE*!rrE*!! +!BU8[l.c4=!<;utqu?Tpqu?KmqYpNqq>^BnpAY-ns8;rnrr<&qrrE-"r;cZnr;ccqr;cfrrW)uu +rrE*!rrE*!! +!B:&Xj4jS7!<;utqu?Tpqu?KmqYpNqq>^BnpAY-ns8;rnrr<&qrrE-"r;cZnr;ccqr;cfrrW)uu +rrE*!rrE*!! +!BpJ^m?.DK!2KPo!8d_U!2BJn!.k0$s-`odm/bd$J,~> +!BU8[l&kuG!2KPo!8d_U!2BJn!.k0$s-`odklK'jJ,~> +!B:&Xj,s?A!2KPo!8d_U!2BJn!.k0$s-`odirR%VJ,~> +!BpJ^m?7JL!2BJn!8meV!29Dm!.k0$s-`odm/bd$J,~> +!BU8[l&u&H!2BJn!8meV!29Dm!.k0$s-`odklK'jJ,~> +!B:&Xj-'EB!2BJn!8meV!29Dm!.k0$s-`odirR%VJ,~> +!BpJ^m?7JL!2BJn!8meV!29Dm!.k0$s-`odm/bd$J,~> +!BU8[l&u&H!2BJn!8meV!29Dm!.k0$s-`odklK'jJ,~> +!B:&Xj-'EB!2BJn!8meV!29Dm!.k0$s-`odirR%VJ,~> +!BpJ^m?R_L!2TYn!9F1X!2TYn!.k0$s-iuem/bd$J,~> +!BU8[l';;H!2TYn!9F1X!2TYn!.k0$s-iueklK'jJ,~> +!B:&Xj-BZB!2TYn!9F1X!2TYn!.k0$s-iueirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mDf2(!:Tsf!;?Hm!7LoE!:9ac!;QTk!;ulo!7LoI!;?Hm!:^$d!6P9@!;?Hm!.k0$s/5nr +m/bd$J,~> +!BU8[l,Nc$!:Tsf!;?Hm!7LoE!:9ac!;QTk!;ulo!7LoI!;?Hm!:^$d!6P9@!;?Hm!.k0$s/5nr +klK'jJ,~> +!B:&Xj2V,s!:Tsf!;?Hm!7LoE!:9ac!;QTk!;ulo!7LoI!;?Hm!:^$d!6P9@!;?Hm!.k0$s/5nr +irR%VJ,~> +!BpJ^mFqU=!!<0#!;- +!BU8[l.Z19!!<0#!;- +!B:&Xj4aP3!!<0#!;- +!BpJ^mHsrH!;ull!:g*h!:Tsf!65'=!;?Hf!:g*h!;QTo!6tQD!9!nW!;HNf!8[\T!.k0$s-iue +m/bd$J,~> +!BU8[l0\ND!;ull!:g*h!:Tsf!65'=!;?Hf!:g*h!;QTo!6tQD!9!nW!;HNf!8[\T!.k0$s-iue +klK'jJ,~> +!B:&Xj6cm>!;ull!:g*h!:Tsf!65'=!;?Hf!:g*h!;QTo!6tQD!9!nW!;HNf!8[\T!.k0$s-iue +irR%VJ,~> +!BpJ^mHsrH!;uls!<)rs!<)rr!;ZZp!;ulr!<<)t!<<)p!<)rq!;ZZn!<)rs!!*&t!;?Hk!;ulm +!;ZZp!<)rt!<3#r!;lfl!<3#o!;ulq!<)rr!<<)u!;ulq!<)rs!!*&t!<3#o!<)rq!;c`m!;c`q +!;6Bl!<)rt!<3#s!!*&u!!*&u!<<)t!<)rp!<3#o!<)rq!;ZZn!<)rs!!*&t!;uln!.k0$s3(HA +m/bd$J,~> +!BU8[l0\ND!;uls!<)rs!<)rr!;ZZp!;ulr!<<)t!<<)p!<)rq!;ZZn!<)rs!!*&t!;?Hk!;ulm +!;ZZp!<)rt!<3#r!;lfl!<3#o!;ulq!<)rr!<<)u!;ulq!<)rs!!*&t!<3#o!<)rq!;c`m!;c`q +!;6Bl!<)rt!<3#s!!*&u!!*&u!<<)t!<)rp!<3#o!<)rq!;ZZn!<)rs!!*&t!;uln!.k0$s3(HA +klK'jJ,~> +!B:&Xj6cm>!;uls!<)rs!<)rr!;ZZp!;ulr!<<)t!<<)p!<)rq!;ZZn!<)rs!!*&t!;?Hk!;ulm +!;ZZp!<)rt!<3#r!;lfl!<3#o!;ulq!<)rr!<<)u!;ulq!<)rs!!*&t!<3#o!<)rq!;c`m!;c`q +!;6Bl!<)rt!<3#s!!*&u!!*&u!<<)t!<)rp!<3#o!<)rq!;ZZn!<)rs!!*&t!;uln!.k0$s3(HA +irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZls8N)ss8E#us8;rts7lZns82los7lZps7cTi +s7lZos7lZjs8N)ss8N*!s82los7lZos7lZos7lZps7ZNns7lZps7cTos7lZns82los7lZls8N)l +s8N*!rriE&!!*'!p]( +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZls8N)ss8E#us8;rts7lZns82los7lZps7cTi +s7lZos7lZjs8N)ss8N*!s82los7lZos7lZos7lZps7ZNns7lZps7cTos7lZns82los7lZls8N)l +s8N*!rriE&!!*'!p]( +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZls8N)ss8E#us8;rts7lZns82los7lZps7cTi +s7lZos7lZjs8N)ss8N*!s82los7lZos7lZos7lZps7ZNns7lZps7cTos7lZns82los7lZls8N)l +s8N*!rriE&!!*'!p]( +!BpJ^mHsrQ!!rT)rrE'!rr<&ss82lps8E#ss8E#rs8N)rs8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N)qs8E#ss8E#ss8N)ls8N)ss8N)ss8N)ps8N)os8N)rs8E#ss8E#ts8;rts8N'!s8E#s +s8E#us8E#ts8N)ts8N)ms8N)rs8N)ts8N)rs8N)ls82lqs8E#ts8E#ts8N)ts8N)us8N)ts8N)t +s8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N(Ms+13ns8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss82lps8E#ss8E#rs8N)rs8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N)qs8E#ss8E#ss8N)ls8N)ss8N)ss8N)ps8N)os8N)rs8E#ss8E#ts8;rts8N'!s8E#s +s8E#us8E#ts8N)ts8N)ms8N)rs8N)ts8N)rs8N)ls82lqs8E#ts8E#ts8N)ts8N)us8N)ts8N)t +s8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N(Ms+13ns8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss82lps8E#ss8E#rs8N)rs8N)ts8N)ts8N)ms8N)ss8E#ss8E#u +s8E#ts8N)qs8E#ss8E#ss8N)ls8N)ss8N)ss8N)ps8N)os8N)rs8E#ss8E#ts8;rts8N'!s8E#s +s8E#us8E#ts8N)ts8N)ms8N)rs8N)ts8N)rs8N)ls82lqs8E#ts8E#ts8N)ts8N)us8N)ts8N)t +s8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N(Ms+13ns8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs7u`qs8N)rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)ss8N)ps8N)os8N)rs8N)rs8N)us8E#qs8N)rs8N*! +s8N)ts8N)ts8N)ms8N)ls8N)rs8N)ls82lqs8N)ss8N)us8N)ts8N)os8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)us8;qKs+13js8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs7u`qs8N)rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)ss8N)ps8N)os8N)rs8N)rs8N)us8E#qs8N)rs8N*! +s8N)ts8N)ts8N)ms8N)ls8N)rs8N)ls82lqs8N)ss8N)us8N)ts8N)os8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)us8;qKs+13js8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs7u`qs8N)rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)ss8N)ps8N)os8N)rs8N)rs8N)us8E#qs8N)rs8N*! +s8N)ts8N)ts8N)ms8N)ls8N)rs8N)ls82lqs8N)ss8N)us8N)ts8N)os8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)us8;qKs+13js8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&os82iurr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)rs7lZls8N)ls8N*!rr<&ts8N)ss8N)us8N)ts8N)us7lZns8N)ms8N)ss8N)rs8N*! +s8N)ts8N)ts8)eIs+13ms8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&os82iurr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)rs7lZls8N)ls8N*!rr<&ts8N)ss8N)us8N)ts8N)us7lZns8N)ms8N)ss8N)rs8N*! +s8N)ts8N)ts8)eIs+13ms8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&os82iurr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)ts8N)t +s8N)ms8N)rs7lZls8N)ls8N*!rr<&ts8N)ss8N)us8N)ts8N)us7lZns8N)ms8N)ss8N)rs8N*! +s8N)ts8N)ts8)eIs+13ms8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)t +s8N)ts8N)ms8N)ss7cTks8N)ls8N)ts8N'#rr<&ss8N)us8N)ts8N*!s7cTms8N)ms8N)ss8N)r +s8N*!s8N)ts8N)rs82kJs+13ns8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)t +s8N)ts8N)ms8N)ss7cTks8N)ls8N)ts8N'#rr<&ss8N)us8N)ts8N*!s7cTms8N)ms8N)ss8N)r +s8N*!s8N)ts8N)rs82kJs+13ns8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'#rr<&rs8N)ss8N)rs8N)ts8N)ts8N)ms8N)ss8N)r +s8N*!s8N)ts8N)qs8N)rs8N)ts8N)ls8N)ss8N)ss8N)ps8N)os8N)rs7ZNms8N)qs7ZNns8N)t +s8N)ts8N)ms8N)ss7cTks8N)ls8N)ts8N'#rr<&ss8N)us8N)ts8N*!s7cTms8N)ms8N)ss8N)r +s8N*!s8N)ts8N)rs82kJs+13ns8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8;rss8N'!s8E#ss8E#rs8N)rs8N)us8E#ss8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)qs8E#ss8E#ss8N)ls8N)ts8N)rs8N)ps8N)os8N)rs8E#ms8N)qs8E#n +s8N)ts8N)ts8N)ts8N)ss8N)ss8N)ss8N)rs8N)ls8N)ts8N'!s8E#ts8E#ts8N)us8E#us8N)s +s8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13ns8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8;rss8N'!s8E#ss8E#rs8N)rs8N)us8E#ss8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)qs8E#ss8E#ss8N)ls8N)ts8N)rs8N)ps8N)os8N)rs8E#ms8N)qs8E#n +s8N)ts8N)ts8N)ts8N)ss8N)ss8N)ss8N)rs8N)ls8N)ts8N'!s8E#ts8E#ts8N)us8E#us8N)s +s8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13ns8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8;rss8N'!s8E#ss8E#rs8N)rs8N)us8E#ss8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)qs8E#ss8E#ss8N)ls8N)ts8N)rs8N)ps8N)os8N)rs8E#ms8N)qs8E#n +s8N)ts8N)ts8N)ts8N)ss8N)ss8N)ss8N)rs8N)ls8N)ts8N'!s8E#ts8E#ts8N)us8E#us8N)s +s8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13ns8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTns7lZps7lZos7lZps8;rts8;ros7lZo +s7lZks7cTns7lZos7lZos7lZos7lZps7lZns7lZps8;rts8;rss7lZps7lZps7ZNns7lZks7ZNn +s7lZos7cQos7ZNms7lZps7lZos7lZps8;rts8;rts7lYGs+13ns8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTns7lZps7lZos7lZps8;rts8;ros7lZo +s7lZks7cTns7lZos7lZos7lZos7lZps7lZns7lZps8;rts8;rss7lZps7lZps7ZNns7lZks7ZNn +s7lZos7cQos7ZNms7lZps7lZos7lZps8;rts8;rts7lYGs+13ns8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTns7lZps7lZos7lZps8;rts8;ros7lZo +s7lZks7cTns7lZos7lZos7lZos7lZps7lZns7lZps8;rts8;rss7lZps7lZps7ZNns7lZks7ZNn +s7lZos7cQos7ZNms7lZps7lZos7lZps8;rts8;rts7lYGs+13ns8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;rps8;rqs7lZns8;ots8E#ss82lqs7lZms8;rrs8;rt +s8;rms8;rqs7lZks7u`ns7lZos7lZos7lZms8)frs7lZls8)frs8;rts8;rrs82lqs7lZos82is +s8E#us7lZks7ZNms8;p!rr<&ts8;ots8E#us82iss8E#ss82lqs7lZms8;rrs8;rts8;rts7u_H +s+13ms8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;rps8;rqs7lZns8;ots8E#ss82lqs7lZms8;rrs8;rt +s8;rms8;rqs7lZks7u`ns7lZos7lZos7lZms8)frs7lZls8)frs8;rts8;rrs82lqs7lZos82is +s8E#us7lZks7ZNms8;p!rr<&ts8;ots8E#us82iss8E#ss82lqs7lZms8;rrs8;rts8;rts7u_H +s+13ms8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;rps8;rqs7lZns8;ots8E#ss82lqs7lZms8;rrs8;rt +s8;rms8;rqs7lZks7u`ns7lZos7lZos7lZms8)frs7lZls8)frs8;rts8;rrs82lqs7lZos82is +s8E#us7lZks7ZNms8;p!rr<&ts8;ots8E#us82iss8E#ss82lqs7lZms8;rrs8;rts8;rts7u_H +s+13ms8M$Z_`*)~> +!BpJ^mHsrH!.k0$s6BXa!.k0$s+14Ls8MBdeieN~> +!BU8[l0\ND!.k0$s6BXa!.k0$s+14Ls8M6`c8pI~> +!B:&Xj6cm>!.k0$s6BXa!.k0$s+14Ls8M$Z_`*)~> +!BpJ^mHsrH!.k0$s6BXa!.k0$s+14Ls8MBdeieN~> +!BU8[l0\ND!.k0$s6BXa!.k0$s+14Ls8M6`c8pI~> +!B:&Xj6cm>!.k0$s6BXa!.k0$s+14Ls8M$Z_`*)~> +!BpJ^m=G:gs31N@!.k0$s+14Ms8MBdeieN~> +!BU8[l%/kcs31N@!.k0$s+14Ms8M6`c8pI~> +!B:&Xj+75]s31N@!.k0$s+14Ms8M$Z_`*)~> +!BpJ^m=G:gs31N@!.k0$s+14Ms8MBdeieN~> +!BU8[l%/kcs31N@!.k0$s+14Ms8M6`c8pI~> +!B:&Xj+75]s31N@!.k0$s+14Ms8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mEkn3!7_&K!;- +!BU8[l-TJ/!7_&K!;- +!B:&Xj3[i)!7_&K!;- +!BpJ^mFhO!l\GlO/eGfLK`r?#=mJd.dpAY*m`r?#=n,E@fqYpNqp\t3n +p\t3nbl7YCpAY*mm/I%ca8Z,>pAY*mQiI'P!S0Da~> +!BU8[l.Q+8!!3*"qu6Wre,KCJp&>!l\GlO/eGfLK`r?#=mJd.dpAY*m`r?#=n,E@fqYpNqp\t3n +p\t3nbl7YCpAY*mm/I%ca8Z,>pAY*mQiI'L!R<`V~> +!B:&Xj4XJ2!!3*"qu6Wre,KCJp&>!l\GlO/eGfLK`r?#=mJd.dpAY*m`r?#=n,E@fqYpNqp\t3n +p\t3nbl7YCpAY*mm/I%ca8Z,>pAY*mQiI'F!Q-jH~> +!BpJ^mG%[@!<)rt!;lcr!7UrJ!;?Em!4Vt.!7_#K!65$=!:Bdd!;?Em!6>*>!:Kje!;c]q!;QQo +!;HKn!6bBB!;?Em!:9^c!6>*>!;?Em!13`bm/bd$J,~> +!BU8[l.c7*>!:Kje!;c]q!;QQo +!;HKn!6bBB!;?Em!:9^c!6>*>!;?Em!13`bklK'jJ,~> +!B:&Xj4jV6!<)rt!;lcr!7UrJ!;?Em!4Vt.!7_#K!65$=!:Bdd!;?Em!6>*>!:Kje!;c]q!;QQo +!;HKn!6bBB!;?Em!:9^c!6>*>!;?Em!13`birR%VJ,~> +!BpJ^mG%X@!;lcr!;lcr!7UrJ!;?Em!4Vt.!1*>!/pmVm/bd$J,~> +!BU8[l.c4*>!/pmVklK'jJ,~> +!B:&Xj4jS6!;lcr!;lcr!7UrJ!;?Em!4Vt.!1*>!/pmVirR%VJ,~> +!BpJ^mG.^A!;$3j!;ZZn!;c`o!!3*"r;Z]qqZ$Ko!WN/ps7u`ns8;rqs8Duus8E#ts8N''rr<'! +rr<&ns8;rqs8N'!s8;rps8;ourrDfnr;Zlu!;ulq!;ulr!!*&u!;lfq!;ZZn!;c`o!!3*"p](0l +!WN/ts8;rmrr<&rs8N)ts8N)ts7u`ns8E#os8;rqs8N'!s8;rps8;ourrDfnr;c`pq>g9ir;Zlu +!;ulr!;c`l!<)ro!;ulq!;ulr!!*&u!;lfp!;uls!!*&t!;uln!;ulr!;ZZn!;QQo!;- +!BU8[l.l:=!;$3j!;ZZn!;c`o!!3*"r;Z]qqZ$Ko!WN/ps7u`ns8;rqs8Duus8E#ts8N''rr<'! +rr<&ns8;rqs8N'!s8;rps8;ourrDfnr;Zlu!;ulq!;ulr!!*&u!;lfq!;ZZn!;c`o!!3*"p](0l +!WN/ts8;rmrr<&rs8N)ts8N)ts7u`ns8E#os8;rqs8N'!s8;rps8;ourrDfnr;c`pq>g9ir;Zlu +!;ulr!;c`l!<)ro!;ulq!;ulr!!*&u!;lfp!;uls!!*&t!;uln!;ulr!;ZZn!;QQo!;- +!B:&Xj4sY7!;$3j!;ZZn!;c`o!!3*"r;Z]qqZ$Ko!WN/ps7u`ns8;rqs8Duus8E#ts8N''rr<'! +rr<&ns8;rqs8N'!s8;rps8;ourrDfnr;Zlu!;ulq!;ulr!!*&u!;lfq!;ZZn!;c`o!!3*"p](0l +!WN/ts8;rmrr<&rs8N)ts8N)ts7u`ns8E#os8;rqs8N'!s8;rps8;ourrDfnr;c`pq>g9ir;Zlu +!;ulr!;c`l!<)ro!;ulq!;ulr!!*&u!;lfp!;uls!!*&t!;uln!;ulr!;ZZn!;QQo!;- +!BpJ^mG.^A!;$3j!;c]q!<)ot!;uis!<)rt!<)ot!<)ot!;uis!<)rt!;?Em!;ZWp!<)ot!;lfr +!<2uu!<3#u!<<*!!<<'!!;ZWp!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)rt!<)ot!<)ot!;lfr +!<2uu!;c]q!;c]q!<)ot!;uis!<)rt!;QQo!<)rt!<)ot!<)ot!;ZWp!;c]q!;uis!;lcr!;?Em +!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)ot!;c]q!;-9k!<)rt!;c]q!;QQo!;HKn!;ZWp +!<)ot!;lfr!<2uu!<)ot!<)ot!;uls!<)ot!;lcr!;?Em!;c]q!<)ot!;ZWp!;6?l!<)ot!;uis +!<)rt!<)ot!;uis!<)ot!<)ot!;c]q!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!5&:1m/bd$ +J,~> +!BU8[l.l:=!;$3j!;c]q!<)ot!;uis!<)rt!<)ot!<)ot!;uis!<)rt!;?Em!;ZWp!<)ot!;lfr +!<2uu!<3#u!<<*!!<<'!!;ZWp!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)rt!<)ot!<)ot!;lfr +!<2uu!;c]q!;c]q!<)ot!;uis!<)rt!;QQo!<)rt!<)ot!<)ot!;ZWp!;c]q!;uis!;lcr!;?Em +!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)ot!;c]q!;-9k!<)rt!;c]q!;QQo!;HKn!;ZWp +!<)ot!;lfr!<2uu!<)ot!<)ot!;uls!<)ot!;lcr!;?Em!;c]q!<)ot!;ZWp!;6?l!<)ot!;uis +!<)rt!<)ot!;uis!<)ot!<)ot!;c]q!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!5&:1klK'j +J,~> +!B:&Xj4sY7!;$3j!;c]q!<)ot!;uis!<)rt!<)ot!<)ot!;uis!<)rt!;?Em!;ZWp!<)ot!;lfr +!<2uu!<3#u!<<*!!<<'!!;ZWp!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)rt!<)ot!<)ot!;lfr +!<2uu!;c]q!;c]q!<)ot!;uis!<)rt!;QQo!<)rt!<)ot!<)ot!;ZWp!;c]q!;uis!;lcr!;?Em +!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)ot!;c]q!;-9k!<)rt!;c]q!;QQo!;HKn!;ZWp +!<)ot!;lfr!<2uu!<)ot!<)ot!;uls!<)ot!;lcr!;?Em!;c]q!<)ot!;ZWp!;6?l!<)ot!;uis +!<)rt!<)ot!;uis!<)ot!<)ot!;c]q!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!5&:1irR%V +J,~> +!BpJ^mG.^A!;$3j!;lcr!;lcr!<)ot!;uis!<2uu!;lcr!<2uu!;lcr!;?Em!;c]q!;lcr!;uis +!;ZWp!<2uu!<2uu!;-9k!;uis!;uis!<2uu!;lcr!;QQo!;uis!<2uu!;lcr!;uis!;6?l!;lcr +!;lcr!<)ot!;uis!;QQo!;uis!<2uu!;lcr!;c]q!;c]q!;uis!;lcr!;?Em!;lcr!;lcr!<)ot +!;uis!<)ot!;uis!;ZWp!;lcr!;lcr!;6?l!;lcr!;c]q!;QQo!;HKn!;c]q!;lcr!;uis!;ZWp +!;lcr!<)ot!;uis!;lcr!;?Em!;6?l!;ZWp!;?Em!;lcr!<2uu!;lcr!<)ot!;uis!;QQo!;c]q +!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!5&:1m/bd$J,~> +!BU8[l.l:=!;$3j!;lcr!;lcr!<)ot!;uis!<2uu!;lcr!<2uu!;lcr!;?Em!;c]q!;lcr!;uis +!;ZWp!<2uu!<2uu!;-9k!;uis!;uis!<2uu!;lcr!;QQo!;uis!<2uu!;lcr!;uis!;6?l!;lcr +!;lcr!<)ot!;uis!;QQo!;uis!<2uu!;lcr!;c]q!;c]q!;uis!;lcr!;?Em!;lcr!;lcr!<)ot +!;uis!<)ot!;uis!;ZWp!;lcr!;lcr!;6?l!;lcr!;c]q!;QQo!;HKn!;c]q!;lcr!;uis!;ZWp +!;lcr!<)ot!;uis!;lcr!;?Em!;6?l!;ZWp!;?Em!;lcr!<2uu!;lcr!<)ot!;uis!;QQo!;c]q +!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!5&:1klK'jJ,~> +!B:&Xj4sY7!;$3j!;lcr!;lcr!<)ot!;uis!<2uu!;lcr!<2uu!;lcr!;?Em!;c]q!;lcr!;uis +!;ZWp!<2uu!<2uu!;-9k!;uis!;uis!<2uu!;lcr!;QQo!;uis!<2uu!;lcr!;uis!;6?l!;lcr +!;lcr!<)ot!;uis!;QQo!;uis!<2uu!;lcr!;c]q!;c]q!;uis!;lcr!;?Em!;lcr!;lcr!<)ot +!;uis!<)ot!;uis!;ZWp!;lcr!;lcr!;6?l!;lcr!;c]q!;QQo!;HKn!;c]q!;lcr!;uis!;ZWp +!;lcr!<)ot!;uis!;lcr!;?Em!;6?l!;ZWp!;?Em!;lcr!<2uu!;lcr!<)ot!;uis!;QQo!;c]q +!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!5&:1irR%VJ,~> +!BpJ^mG.^A!;$3j!;lcr!;lcr!;ulr!;lfl!<2uu!;lcr!;?Em!;c]q!;lcr!;uis!;ZWp!<2uu +!<2uu!;ZZl!;uis!;uis!<2uu!;lcr!;HNm!;lfl!;uis!;6?l!;lfl!;ulr!;- +!BU8[l.l:=!;$3j!;lcr!;lcr!;ulr!;lfl!<2uu!;lcr!;?Em!;c]q!;lcr!;uis!;ZWp!<2uu +!<2uu!;ZZl!;uis!;uis!<2uu!;lcr!;HNm!;lfl!;uis!;6?l!;lfl!;ulr!;- +!B:&Xj4sY7!;$3j!;lcr!;lcr!;ulr!;lfl!<2uu!;lcr!;?Em!;c]q!;lcr!;uis!;ZWp!<2uu +!<2uu!;ZZl!;uis!;uis!<2uu!;lcr!;HNm!;lfl!;uis!;6?l!;lfl!;ulr!;- +!BpJ^mG.^A!;$3j!;lcr!;lcr!;ZZp!<)ot!;HKn!;lcr!;?Em!;c]q!;lcr!;uis!;ZWp!<2uu +!<2uu!;c]q!;uis!;uis!;uis!<2uu!;lcr!;- +!BU8[l.l:=!;$3j!;lcr!;lcr!;ZZp!<)ot!;HKn!;lcr!;?Em!;c]q!;lcr!;uis!;ZWp!<2uu +!<2uu!;c]q!;uis!;uis!;uis!<2uu!;lcr!;- +!B:&Xj4sY7!;$3j!;lcr!;lcr!;ZZp!<)ot!;HKn!;lcr!;?Em!;c]q!;lcr!;uis!;ZWp!<2uu +!<2uu!;c]q!;uis!;uis!;uis!<2uu!;lcr!;- +!BpJ^mG%X@!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!<2uu!;HKn!;lcr!;?Em!;c]q!;lcr!;uis +!;ZWp!<2uu!<2uu!;c]q!;uis!;uis!;uis!<2uu!;lcr!;QQo!;uis!<2uu!;6?l!;6?l!;lcr +!;?Em!;uis!;QQo!;uis!<2uu!;lcr!;c]q!;c]q!;uis!;lcr!;?Em!;lcr!;lcr!<)ot!;uis +!<)ot!;uis!;ZWp!;lcr!;lcr!;6?l!;lcr!;c]q!;QQo!;HKn!;c]q!;6?l!;ZWp!;?Em!;uis +!;lcr!;?Em!;lcr!;uis!;ZWp!;?Em!;HKn!;lcr!<)ot!;uis!<2uu!;uis!;c]q!;?Em!;lcr +!;lcr!<)ot!;uis!<)ot!;uis!5&:1m/bd$J,~> +!BU8[l.c4 +!B:&Xj4jS6!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!<2uu!;HKn!;lcr!;?Em!;c]q!;lcr!;uis +!;ZWp!<2uu!<2uu!;c]q!;uis!;uis!;uis!<2uu!;lcr!;QQo!;uis!<2uu!;6?l!;6?l!;lcr +!;?Em!;uis!;QQo!;uis!<2uu!;lcr!;c]q!;c]q!;uis!;lcr!;?Em!;lcr!;lcr!<)ot!;uis +!<)ot!;uis!;ZWp!;lcr!;lcr!;6?l!;lcr!;c]q!;QQo!;HKn!;c]q!;6?l!;ZWp!;?Em!;uis +!;lcr!;?Em!;lcr!;uis!;ZWp!;?Em!;HKn!;lcr!<)ot!;uis!<2uu!;uis!;c]q!;?Em!;lcr +!;lcr!<)ot!;uis!<)ot!;uis!5&:1irR%VJ,~> +!BpJ^mG%[@!<)ot!;c]q!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!<)ot!<)rt!;?Em!;ZWp!<)ot +!;lcr!;ZWp!<2uu!<2uu!;c]q!<)rt!;uis!;uis!<)ot!<)rt!;QTo!<)ot!<)ot!<)rt!;uis +!;6?l!;c]q!<)rt!<)rt!<)ot!;QTo!<)ot!<)ot!<)ot!;ZWp!;c]q!<)rt!;lcr!<)ot!;lcr +!;c]q!<)ot!;uis!;uis!<)rt!<)ot!;QQo!<)ot!;c]q!;-9k!<)rt!;c]q!;QQo!;HKn!;ZWp +!<)rt!;uis!;QQo!<)rt!<)ot!;uis!;lcr!<)ot!;lcr!;lcr!<)rt!;ZWp!;6?l!<)rt!<)ot +!<)rt!<)ot!<)rt!<2uu!<)rt!;c]q!<)ot!;lcr!;c]q!<)ot!;uis!;uis!<)rt!<)ot!;lfr +!5nj9m/bd$J,~> +!BU8[l.c7 +!B:&Xj4jV6!<)ot!;c]q!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!<)ot!<)rt!;?Em!;ZWp!<)ot +!;lcr!;ZWp!<2uu!<2uu!;c]q!<)rt!;uis!;uis!<)ot!<)rt!;QTo!<)ot!<)ot!<)rt!;uis +!;6?l!;c]q!<)rt!<)rt!<)ot!;QTo!<)ot!<)ot!<)ot!;ZWp!;c]q!<)rt!;lcr!<)ot!;lcr +!;c]q!<)ot!;uis!;uis!<)rt!<)ot!;QQo!<)ot!;c]q!;-9k!<)rt!;c]q!;QQo!;HKn!;ZWp +!<)rt!;uis!;QQo!<)rt!<)ot!;uis!;lcr!<)ot!;lcr!;lcr!<)rt!;ZWp!;6?l!<)rt!<)ot +!<)rt!<)ot!<)rt!<2uu!<)rt!;c]q!<)ot!;lcr!;c]q!<)ot!;uis!;uis!<)rt!<)ot!;lfr +!5nj9irR%VJ,~> +!BpJ^mFhO^9kr;Z]qr;ZTnrr;rts8W*!s8W*! +qZ$Ko!<<#us8W&urr;rtrVufr!ri6#q>UHqs8;rps8;rqs7u`ns7u`ns8;rprrE-"r;cTl! +!BU8[l.Q+8!;uln!;ulq!;lcs!<;utqu?TpqZ$Ko!ri6#q>^9kr;Z]qr;ZTnrr;rts8W*!s8W*! +qZ$Ko!<<#us8W&urr;rtrVufr!ri6#q>UHqs8;rps8;rqs7u`ns7u`ns8;rprrE-"r;cTl! +!B:&Xj4XJ2!;uln!;ulq!;lcs!<;utqu?TpqZ$Ko!ri6#q>^9kr;Z]qr;ZTnrr;rts8W*!s8W*! +qZ$Ko!<<#us8W&urr;rtrVufr!ri6#q>UHqs8;rps8;rqs7u`ns7u`ns8;rprrE-"r;cTl! +!BpJ^m=G:gs+13$s4RDP!.k1 +!BU8[l%/kcs+13$s4RDP!.k1 +!B:&Xj+75]s+13$s4RDP!.k1 +!BpJ^m=G:gs+13$s4RDP!.k1 +!BU8[l%/kcs+13$s4RDP!.k1 +!B:&Xj+75]s+13$s4RDP!.k1 +!BpJ^m=G:gs+13$s4RDP!.k1 +!BU8[l%/kcs+13$s4RDP!.k1 +!B:&Xj+75]s+13$s4RDP!.k1 +!BpJ^m=G:gs+13$s4dSP!.k1=s8MBdeieN~> +!BU8[l%/kcs+13$s4dSP!.k1=s8M6`c8pI~> +!B:&Xj+75]s+13$s4dSP!.k1=s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6eq)D'eq)D'f"T]84b*~> +!BU73c@O8lc@O8lcG%R(3e.~> +!B:%0_h#^V_h#^V_nO"g2h1~> +JN\QIJN\QIJN^V.J,~> +JNA?CJNA?CJNCD(J,~> +JN&-=JN&-=JN(2"J,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/books/ps/v71functionpage.eps b/books/ps/v71functionpage.eps new file mode 100644 index 0000000..b65e5f3 --- /dev/null +++ b/books/ps/v71functionpage.eps @@ -0,0 +1,3077 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner +%%Title: functionpage.eps +%%CreationDate: Sat Jun 21 10:52:27 2008 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 696 475 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 459.83362537429304 translate +681.59055118110246 -459.83362537429304 scale +% Image geometry +710 479 8 +% Transformation matrix +[ 710 0 0 479 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 710 string def +/gstr 710 string def +/bstr 710 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 173906 ASCII Bytes +colorimage +quD:2JN\QIJN\QI`BF,!J,~> +quD:/JNA?CJNA?C`B*nsJ,~> +quD:,JN&-=JN&-=`Ad\pJ,~> +rW)s]JcC<$JcC<$JcE^hs#p>]J,~> +rW)sZJcC<$JcC<$JcE^hs#U,ZJ,~> +rW)sWJcC<$JcC<$JcE^hs#9oWJ,~> +rr<*`rr.KIJc1/uJc1/u`Voi9!^-M`J,~> +rr<*]rr.KIJc1/uJc1/u`Voi9!]g;]J,~> +rr<*ZrV_ +!WYC^Jc()sJc()sNr84$rVYu>rVYu>rqliX4TL!~> +!WY:[Jbt#qJbt#qNr/.#rVPo=rVPo=rqccV3WO[~> +!WY1WJbjroJbjroNr&(!rVGi;rVGi;rqZ]T2ZS@~> +!WYC]JbjroJbjroO88m7bjGE6b_l8nMTkJf"jDl#qMNMars$])qYK/6!.Y~> +!WY:YJbalmJbalmO8/g6bjGE6b_l5lMTkJf"jDl"q23D`rs$])q>&u1!.Y~> +!WY1VJbXfkJbXfkO8&a4bjGE6b_c,iM9PAe"jDhupkd5^rs$](q"Wc+!.Y~> +!Bp>Xq#LHro)O@;JbalmJbc):!K-jCr!!%Vq>#pHmJI.dMY[(*rU'L`rJLUM!T?1l~> +!BU)TpAk6po)O@9JbO`iJbPr6!K$dBr!!%Up\0OCmJI.dM>-b$rU'L`rJCOJ!T,qg~> +!B9iPo`5$no)O@7Jb=TeJb>f2!JgX@qZZqRp%=+=mJ@(cL\:=qrU'I_rJ1CF!So\b~> +!Bp;WpB/E6`%CW^JbO`iJbO`iU\=eGr9a=ar/(1BM>Zc;"oO5OpPJh8q>pMNrq?HN4b*~> +!BU&So`N34`%CW^Jb=TeJb=TeU\+YCqsF1_qhOk;L\pK7"oF)JonWG3q#UAJrq- +!B9fOo)m!2`%CW^Jb+HaJb+HaU[nM@qsF.^qhF_6LAUB5"oF&Go7m/0p]:8Hrpp0F2h1~> +!Bp;Wp(.1.qQ+s_PA6:)B9P$56BcuoJbJL)!B;b3p&R-+j7WI4r\"=mJ$k^M"^OuqsF.ZqhY7F!T#ti~> +!BU#RoFLt,qQ+s_PA6:)B9P$56BcumJb8@%!B2Y1oDpm'j7E=1r[n7:En#[4Jb8!p!JgO=p'(;J +o^mq8mIg_[L\14oqX*tWqM5(B!Sf_d~> +!B9cNnIPY)qQ+s_PA6:)B9P$56BcujJar-t!AuJ.nGtL!j7*+,r[e18E6s1+Jaqdj!JU=9oEG#D +naV>.mIUSWL%4\eq!I\SpkA_;!SKD^~> +!Bp5UoFLu0rRn3jg"`aZgP!Sqn*,DqJb8@%!B;b3oDpp)j7ER90=\&s00%=0oRZYqoDsaDmIg_[ +L\14oqYU!^!;lHnqM4_8L\goArrE#krrDri!W%TNoE!`1J,~> +!BTuQndkc.rRn3jg"`aZgP!Sqn*,DoJb&4!!B)S0nc:X$j73F50"7in/iLt*nq$Amnc=L?mIUSW +L@Xniq"s^Z!;lBlpkJA1LA:Z +!B9]LmLT?*rRn3jg"`aZgP!Sqn*,DkJaVpn!AuJ.mK#0sj6d.0/[VEf/N(\%mXafemK&"8mI:AS +K^S8]p\XLV!;l9ipOqu&K_PB6rrE#frrDrd!V_9HmK(ouJ,~> +!Bp5Uo+1j^q.'!S]bf~> +!BTrPn.5O[q.'=Kq;_S5;$s8()tXJai=$!JU:8nHJZ@nF2/+qsjI^qsajaL%+Sc +p\XL[!<;Tg!;l9epP&V9!SBG`~> +!B9ZKljs+Wq.'rqsF1Zqs=RZK'_iU +o_\%T!<;Hc!;l-aoRd)/!S',Z~> +!Bp2TnIM9cSg;Z[PNqO4eC2_7]E!NQJar-t!B2\2Zlq:[naX"?D=QmSRIMpd@VIK2n_lPt_JM!T +nO,$*M"*DWrp^W@008X&035j%<%k2602J^[R+d,]JarC&!JU:8nHJZ@naV>-qsaXdqsaXdqsaja +L%4\ep\OFW!;c3dpP&V:!SKVd~> +!BToOmLPs`Sg;Z[PNqO4eC2_7]E!NNJaVpn!B)S0YotqVmd@D6D!pLMR-lR^@:q3,mbTul^hb[N +mQrO#L$giOrpCE:/ii?s/lfQr;_Fo./kr@SQe-fVJaW0u!JL.5mKN9:md>c$qsFFaqsFFaqsFX\ +K^S8]p%n+R!;c*aon<>4!S9A_~> +!B9TIl49O\Sg;Z[PNqO4eC2_7]E!NJJa2Xf!AuJ.Y9>YQlKYT*C?jkAPj0hT?Y1m&lJ" +!Bp/SnGWCrR)/p$U':T##6Y89!.jWjnEo]F2u>9.n/^gX1ukMmj7"]_l.n!Qn=VFeiMS?!n3\kb +nF/@irpUEO0/;rh0@'(VbqD^X0?o(;Jai0u!JU46mfiB +!BTlNm/?tnR)/p$U':T##6Y89!.jKfm-X->2Z#-,llG7O1Z+uchs;sUjk27Gm%,h\h4lTjlp<>Y +m-HV_rp1-G/hlW`0$qqs+4^qs+4^qs+FWK'_iUoD._N +!;Yp]o7Hu.!S'5]~> +!B9QHkPbGiR)/p$U':T##6Y89!.j]!*k8iSD1#&BYgZL.Ji7'>;kF4&Pfq9p_k/MH9X/]Qu:`%=MG/]<5'J`lOc!J'\,jot7)kN@BbqrRkYqrRkYqrS(OJEQ*GnG25F +!;YaXn::N$!RNcU~> +!BouNkl(Pb/K"OJ,l%Fkk^hsbkQ*UqroaAA0E1/FHnV'iHKaQG6g3Yc0B\/h0*?jj6SJH&!B2\2 +kRPH_7-HBZjlkph0/>78idp +!BTZHj8K#]/K"OJ,l%Fkj+67XirM%jro4#;0)jl@GV5F_GN7^960$oV0&hT_/d$[b5q`/s!B)S0 +isrdU6fTmRi8`kU/ho%4h1=U;j7)(0Ic0V;"lOjij*oq`bQ%Y?bQ%Y?bQZpRj5YUHq98d;q9/lt +IfA@.brU@~> +!B99@g\q0U/K"OJ,l%FkgO\,HgAs,_rn@H1/cOK7F=ibRF5,G$5MOjC/_YdR/H^CT5:ulh!AlD- +gCCYD6/+%Eg"Y96/MAb/eUcJ+g[NquH.hT#"ke1UgNhKL^]4B3^]4B3^]iD:gY7#,q7uq/q7m$a +H2cP!`]&D~> +!BouNkl1Vb#V@VJpAfd.J`uLb!B2\2kQ*Uqroap-01.D6kiaZekgqITkaX;Qr9+/K0E1/92_Y0o% +X9XRkXmMKkig#>91CSJJ`q[KnE9n'jmCP$jacRYJE?[X!!)oG!!)oG"m(9uk^_dkeGB7Be,eZ]r +oaC14b*~> +!BTZHj8T)]#V@VJpAfd)J`H.X!B)S0irM%jro4R#/jV,.j5VaXj3oVIj-_NFr8RfD0)jl32D5!h% +WsCLj%(f?j5[s.8OP2AJ`D=AnDaOui9e_li-s_HIc1+I!!)o?!!)o?"lOjij*oq_bkhD:bQ6XNr +o4%(3e.~> +!B99@g]%6U#V@VJpAfd!J_TSH!AlD-gAs,_rnA!j/O(i#gY4;EgWM06gQX:4r7_6:/cOK*1bJ^]% +WO(CgI +!BouNkl1Vc*9u5B"o&(Kk^hsbkQ*UqroaAA0E1/;k=714roanH4N;n)K]q/U1Q8W6XQW#)rob.W +0=Iir01=FUUb>]X\5P&VQ7kY"\":fpk^hsikQ-4qqpbEAqpYf2JEZ3IjnmO-!;k7G!;k7LjacRY +JE?[XrW)uJrW)iF!Tek2kQ0'oJ,~> +!BT]IjSo2_*9u5B"o&(KjFQCZj8h.kro=)<0)jo6j$kY,ro=VC4MlP"J`PEI0oE0+WoQGuro=kR +0!_?h/k"1LTIs0O[8JWMP:f4oZ^]'fjFQCaj8j_fqonj9qof6%IcTR=i;:^u!;jt?!;jtDi-sbJ +Ic1+IrW)uBrW)i>!T8G+j8mOeJ,~> +!B96a>O"EYbXd6hTgk"8Qg];`SqnW"-qnNBgHJI;%g&&Pb!;jP3!;jP8fm;H/ +HJ/22rW)u6rW)i2!SMeug]>DRJ,~> +!Bp#Ol2CYh`gQi;/L:B8*$kL`Ja%aMmHFX10E12:2_Y-o!fAY7rosD8%5r=fl06H-3\WspksI-' +kls("0/,eCf`(+EX&_&7=0(TLSPM$t9uV\JJa)gk!J0A0eG0+Ae-4rbl03c\qpbEAqpYf2Ja)EM +jnmR-!<(FI!;k7HjamEq!Ra,]~> +!BT]IjSf,c`gQi;/L:B8*$kL`J`MCCmGn:+0)jo42D4sh!f&D.roF&2%5i1^jQ+Eq3%mUgj?YEt +j9@Lp/h]V?e,JD;W)PQ0Ll9>Q2?J`QIa!Iiu(bkV89bQZpRjQ(dJqonj9qof6%IcTR= +i;:au!<(.A!;jt@i-t[d!R<`V~> +!B9 +!Bp#Ol2CYh`gZq,[EWpW`6nPaJa%aMiopM`7Ha[7!A?fkl%/*AklH@smF2=$Ja)EMjmCP$jal[\ +J`Z:K!Ten3klK3qJ,~> +!BT]Ijo,5d`gZq,[EWpW`6nPaJ`VIEioL5[7-":.!A6ZhjalO9jT0khmE>alJ*#dAi9e_li.'kM +J)K_ +!B9?Bh>RB\`gZq,[EWpW`6nPaJ_bn5inXZO6ehUr!A-Neh1=D)h#ViUmD/t[HJRD'g?l][g3VT2 +HJ7c&!SVl!h#YPTJ,~> +!Bp#OlM^bi`gQl,3g9Tn"BYR&Ja.gOj6?]S09uM$!A?fkl@J6Cl2cIumF;C&Ja2NOk3^\&k(2g_ +J`c@M!Tnt4l2f?sJ,~> +!BT]Ijo,5d`gQl,3g9Tn"BYR&J`VIEj5g?J/s6+o!A6ZhjalO9jT0kimEGgnJ*#dAiU+kniIBtN +J)Te>!TAP-jT3[gJ,~> +!B9?BhYmK]`gQl,3g9Tn"BYR&J_kt7j5'j>/WK_c!A-QfhLXP+h>quWmD/t[Hf!V+g?l][g3_]5 +HeRl'!SVo"h>t\VJ,~> +!Bp#OlMghk&_t2%fn@#Go66o-!.jEdlJq.2Sqc&!l2dfcJa.gOb3B"Yk3^\&k(2g_J`c@M"m1C$ +l@J*beH+f`rosO54b*~> +!BT`Jk5PDg&_t2%fn@#Go66o-!.j9`k2YS*S:oSojoM9YJ`_OGb2r_SiU+kniIC"PJ)Te>"lXsn +k'u@WblQdQroO7-3e.~> +!B9?BhZ!Q_&_t2%fn@#Go66o-!.j!XhW*GoQ@RB]h>s4EJ_kt7b2*/Gg?l][g3_]5HeRl'"kn=[ +hL!uD_#`8:rn[[s2h1~> +!Bp#OlMghk'5_SV(2[7W6#A@U!.jEdl@J5OlD*VFJ[k+0"h9-Kl@HJ4jor8GlKWr1mH+GZJc=p8 +dli3~> +!BT`Jk5PDg'5_SV(2[7W6#A@U!.j9`k(2ZGk+h&>J$eV%"gidAk'sc*i +!B9BChu +!Bp&PlgXt+l[eAQl[eArlg&`mlg&`mlg&`mlN,KuJ,~> +!BTcKkOAP'kCMfIkCMfjkNd-dkNd-dkNd-dk5ipjJ,~> +!B9BCi:-eui.9g;i.9g\i9P1Wi9P1Wi9P1WhuUtZJ,~> +!Bp%*l[eAQl[eAQlbD`de3/<~> +!BTb%kCMfIkCMfIkJ-0\coQ[~> +!B9@ri.9g;i.9g;i4n1Nau=h~> +!Boe#i.9g;i.9g;i4e+L4b*~> +!BTIrg4@t/g4@t/g:l8@3e.~> +!B9%id"0Ppd"0Ppd([j,2h1~> +!'PmaJUrB'JUrB']n$/HJ,~> +!'5[SJTcTfJTcTf]ljB:J,~> +!&oIAJS0OHJS0OH]k7=(J,~> +!BpJ^m5t=JrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&c!S0Da~> +!BU8[kr\nFrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&_!R<`V~> +!B:&Xj#d8@rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&Y!Q-jH~> +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rp9a;4b*~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rojI/3e.~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!ro4$s2h1~> +!BpJ^mDo8,!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)um/bd$J,~> +!BU8[l,Wi(!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uklK'jJ,~> +!B:&Xj2_3"!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uirR%VJ,~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls+13$s0r"3 +!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u +1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8MBd +eieN~> +!BU8[kl:__rrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls+13$s0r"3 +!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u +1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M6` +c8pI~> +!B:&XirB)YrrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls+13$s0r"3 +!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u +1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z +_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcGQG +q#K.K!!)`m!!(FH!!) +!B:&Xis,M`rrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcGQG +q#K.K!!)`m!!(FH!!) +!BpJ^m/R.crrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1E +rr<&srr<&Qrr<&mrr<&Hrr<&^rr<&crr<%Ms5*bZ!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1E +rr<&srr<&Qrr<&mrr<&Hrr<&^rr<&crr<%Ms5*bZ!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1E +rr<&srr<&Qrr<&mrr<&Hrr<&^rr<&crr<%Ms5*bZ!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0_<2 +!<3'!!<3'!!<3'!!<3'!!<3'!!<<#urp9a;4b*~> +!BU8[km%.frrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcGNF!!)rs!!(aQ!!')"!W`6#JcEmm!!*#u!s&?$s8E!"rrE)u!%.^GrrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8E#srtth:!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!q>_<2 +!<3'!!<3'!!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcGNF!!)rs!!(aQ!!')"!W`6#JcEmm!!*#u!s&?$s8E!"rrE)u!%.^GrrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8E#srtth:!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!q>_<2 +!<3'!!<3'!!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1E +rr<&srr<&us8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccqrr<'!r;c`pr;Zlu!;HNm +!;lfr!!*&t!;6?n!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<%Ms7cNs!<3'!!<;rs!<;rs +-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u'`e76rrE'!rrE'! +rrE'!rrE'!rrE)o!#5G5rrE'!rrE'!rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__rrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1E +rr<&srr<&us8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccqrr<'!r;c`pr;Zlu!;HNm +!;lfr!!*&t!;6?n!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<%Ms7cNs!<3'!!<;rs!<;rs +-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u'`e76rrE'!rrE'! +rrE'!rrE'!rrE)o!#5G5rrE'!rrE'!rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)YrrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1E +rr<&srr<&us8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccqrr<'!r;c`pr;Zlu!;HNm +!;lfr!!*&t!;6?n!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<%Ms7cNs!<3'!!<;rs!<;rs +-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u'`e76rrE'!rrE'! +rrE'!rrE'!rrE)o!#5G5rrE'!rrE'!rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcGNF!s&B$!;c]q!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot +!<)ot!<)rt!;6?l!;c`q!<)ot!;HKn!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'! +!.k1Grr<&urrW9$!<<#u!ri9#rW";F!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u!<23`c8pI~> +!B:&Xis,M`rrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcGNF!s&B$!;c]q!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot +!<)ot!<)rt!;6?l!;c`q!<)ot!;HKn!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'! +!.k1Grr<&urrW9$!<<#u!ri9#rW";F!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u!<2!Z_`*)~> +!BpJ^m/R.crrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls7cQl!;c]q!;uis!<)ot!;uis +!<2uu!;lcr!;lcr!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!;6?l!;c]q!;uis!;HKn!<2uu +!;lcu!<<'!q#: +!BU8[kl:__rrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls7cQl!;c]q!;uis!<)ot!;uis +!<2uu!;lcr!;lcr!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!;6?l!;c]q!;uis!;HKn!<2uu +!;lcu!<<'!q#: +!B:&XirB)YrrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls7cQl!;c]q!;uis!<)ot!;uis +!<2uu!;lcr!;lcr!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!;6?l!;c]q!;uis!;HKn!<2uu +!;lcu!<<'!q#: +!BpJ^m0 +!BU8[km%.frrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcGNF!s&B$!;c]q!;uis!<)ot!;uis!<2uu +!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;ulr!:p-i!;c]q!;uis!;QQo!;uis!;lfr!;HKn!;lcr +!;lcr!<2uu!<2uu!<2uu!.k1Grr<&urrW9$!<;fo!ri9#p]( +!B:&Xis,M`rrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcGNF!s&B$!;c]q!;uis!<)ot!;uis!<2uu +!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;ulr!:p-i!;c]q!;uis!;QQo!;uis!;lfr!;HKn!;lcr +!;lcr!<2uu!<2uu!<2uu!.k1Grr<&urrW9$!<;fo!ri9#p]( +!BpJ^m/R.crrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!BU8[kl:__rrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!B:&XirB)YrrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!BpJ^m0!lqYpNq +r;Q`sq>UEpqYpNqrVls"s8N)orr<&rrr<&rrr<&urr<&urr<&urr<%Ms7uZp!<3!#!<3'!rW!$" +!<<#u!<;rs!ri9#rVurun,NOi!<<#u!ri9#rW)os'`e76rrE'!rrE'!rrE'!rrE'!rrE)i!##;3 +rrE'!rrE'!rrE'!rrE'!s8E#tm/bd$J,~> +!BU8[km%.frrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLq#:!lqYpNq +r;Q`sq>UEpqYpNqrVls"s8N)orr<&rrr<&rrr<&urr<&urr<&urr<%Ms7uZp!<3!#!<3'!rW!$" +!<<#u!<;rs!ri9#rVurun,NOi!<<#u!ri9#rW)os'`e76rrE'!rrE'!rrE'!rrE'!rrE)i!##;3 +rrE'!rrE'!rrE'!rrE'!s8E#tklK'jJ,~> +!B:&Xis,M`rrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLq#:!lqYpNq +r;Q`sq>UEpqYpNqrVls"s8N)orr<&rrr<&rrr<&urr<&urr<&urr<%Ms7uZp!<3!#!<3'!rW!$" +!<<#u!<;rs!ri9#rVurun,NOi!<<#u!ri9#rW)os'`e76rrE'!rrE'!rrE'!rrE'!rrE)i!##;3 +rrE'!rrE'!rrE'!rrE'!s8E#tirR%VJ,~> +!BpJ^m/R.crrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0^Bnq#C9m +"TJH%s8W&urr;rtrVufrq#C9mrVu]or;Z]qr;Z`rrr;rtrr3!!s8;rls7u`ps8E#ts8E#qs8;rs +s8;ots8E#us8E#ss7u`ns8;rrs8E#us8N*!s8N(Ms8)`q!<3!#!<3'!rW!$"!<<#u!<;rs!ri9# +rVurul2Unc!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u +!<2?deieN~> +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLq>^Bnq#C9m +"TJH%s8W&urr;rtrVufrq#C9mrVu]or;Z]qr;Z`rrr;rtrr3!!s8;rls7u`ps8E#ts8E#qs8;rs +s8;ots8E#us8E#ss7u`ns8;rrs8E#us8N*!s8N(Ms8)`q!<3!#!<3'!rW!$"!<<#u!<;rs!ri9# +rVurul2Unc!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u +!<23`c8pI~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLq>^Bnq#C9m +"TJH%s8W&urr;rtrVufrq#C9mrVu]or;Z]qr;Z`rrr;rtrr3!!s8;rls7u`ps8E#ts8E#qs8;rs +s8;ots8E#us8E#ss7u`ns8;rrs8E#us8N*!s8N(Ms8)`q!<3!#!<3'!rW!$"!<<#u!<;rs!ri9# +rVurul2Unc!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u +!<2!Z_`*)~> +!BpJ^m/R.crrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLJcC<$ +\c2X0rr3'#rrE)u!!<0#s8Duus82iurrE)u!!*&g!!rT)rrE'!rrE)u!<)p4!<3'!!<3'!!<3'! +!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLJcC<$ +\c2X0rr3'#rrE)u!!<0#s8Duus82iurrE)u!!*&g!!rT)rrE'!rrE)u!<)p4!<3'!!<3'!!<3'! +!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLJcC<$\c2X0rr3'#rrE)u!!<0# +s8E!"rrE)o!!*&k!!*&o!!<0#s8E#ss#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLJcC<$\c2X0rr3'#rrE)u!!<0# +s8E!"rrE)o!!*&k!!*&o!!<0#s8E#ss#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BU8[kl:__rrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!B:&XirB)YrrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/[4ea8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8MBdeieN~> +!BU8[klCeaa8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M6`c8pI~> +!B:&XirK/[a8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M$Z_`*)~> +!BpJ^m/[1+!<<) +!BU8[klCb'!<<) +!B:&XirK,!!<<) +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8MBdeieN~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M6`c8pI~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G<1s8;qKs+13$s1n[7!;HNl!2feqm/bd$J,~> +!BU8[l%/m-s8;qKs+13$s1n[7!;HNl!2feqklK'jJ,~> +!B:&Xj+77's8;qKs+13$s1n[7!;HNl!2feqirR%VJ,~> +!BpJ^mHafK!:Bgb!:9^c!5\[8!8%5N!;?Em!8RSS!.k1Mrr<&Srr<%Ms4%&K!:Tpf!;-9k!2feq +m/bd$J,~> +!BU8[l0JBG!:Bgb!:9^c!5\[8!8%5N!;?Em!8RSS!.k1Mrr<&Srr<%Ms4%&K!:Tpf!;-9k!2feq +klK'jJ,~> +!B:&Xj6QaA!:Bgb!:9^c!5\[8!8%5N!;?Em!8RSS!.k1Mrr<&Srr<%Ms4%&K!:Tpf!;-9k!2feq +irR%VJ,~> +!BpJ^mHFQM!9a@^!:9^c!5ea9!7q/M!;?Em!8RSS!.k1Mrr<&Srr<%Ms4%&K!:Tpf!;-9k!2feq +m/bd$J,~> +!BU8[l0/-I!9a@^!:9^c!5ea9!7q/M!;?Em!8RSS!.k1Mrr<&Srr<%Ms4%&K!:Tpf!;-9k!2feq +klK'jJ,~> +!B:&Xj66LC!9a@^!:9^c!5ea9!7q/M!;?Em!8RSS!.k1Mrr<&Srr<%Ms4%&K!:Tpf!;-9k!2feq +irR%VJ,~> +!BpJ^mHFQM!9jFa!<3&$rr<&Mrr<%Ms+13$s5s=]!;-9k!2feqm/bd$J,~> +!BU8[l0/-I!9jFa!<3&$rr<&Mrr<%Ms+13$s5s=]!;-9k!2feqklK'jJ,~> +!B:&Xj66LC!9jFa!<3&$rr<&Mrr<%Ms+13$s5s=]!;-9k!2feqirR%VJ,~> +!BpJ^mHFQM!;lfr!!*&t!;6?n!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&cs8;rks7u`p +s8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccqrr<'!r;cQkrW)cor;Zlu!;HNl!;uls +!!*&t!;?Hk!;ulr!<<)u!<3#u!!*&t!<)rs!!*&u!;lfp!;c`o!!3*"r;Z]q!WN/ts8E#os8;rq +s8N'!s8;rks8E#qs8N'!s8;rks8;rqs8N'!s8;rps8;rjs8;rqs8Duus8E#os8N''rr<'!rr<&s +s8;rqs8Duus8E#qs8;rls8E#ts8E#ss8;rqs8Duus8E#qs8E#os8;rprrE-"r;cZn!!)ipr;c]o +r;Zlu!5JR5m/bd$J,~> +!BU8[l0/-I!;lfr!!*&t!;6?n!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&cs8;rks7u`p +s8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccqrr<'!r;cQkrW)cor;Zlu!;HNl!;uls +!!*&t!;?Hk!;ulr!<<)u!<3#u!!*&t!<)rs!!*&u!;lfp!;c`o!!3*"r;Z]q!WN/ts8E#os8;rq +s8N'!s8;rks8E#qs8N'!s8;rks8;rqs8N'!s8;rps8;rjs8;rqs8Duus8E#os8N''rr<'!rr<&s +s8;rqs8Duus8E#qs8;rls8E#ts8E#ss8;rqs8Duus8E#qs8E#os8;rprrE-"r;cZn!!)ipr;c]o +r;Zlu!5JR5klK'jJ,~> +!B:&Xj66LC!;lfr!!*&t!;6?n!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&cs8;rks7u`p +s8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccqrr<'!r;cQkrW)cor;Zlu!;HNl!;uls +!!*&t!;?Hk!;ulr!<<)u!<3#u!!*&t!<)rs!!*&u!;lfp!;c`o!!3*"r;Z]q!WN/ts8E#os8;rq +s8N'!s8;rks8E#qs8N'!s8;rks8;rqs8N'!s8;rps8;rjs8;rqs8Duus8E#os8N''rr<'!rr<&s +s8;rqs8Duus8E#qs8;rls8E#ts8E#ss8;rqs8Duus8E#qs8E#os8;rprrE-"r;cZn!!)ipr;c]o +r;Zlu!5JR5irR%VJ,~> +!BpJ^mHFQM!;c`q!<)ot!;HKn!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!:Kje +!<)ot!;6?l!;ZWp!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot!;6?l +!;c]q!<)rt!;QQo!<)ot!;uls!<)ot!;QQo!<)ot!;uis!<)ot!;uls!<)ot!;uls!<2uu!<)ot +!<)ot!;uis!<)rt!<)ot!<)rt!;c]q!;c]q!<)ot!;uls!<)ot!;6?l!;c`q!<)ot!;QQo!<)ot +!;uls!<)ot!<)ot!<)ot!;HKn!<)ot!;lfr!<2uu!;ZZp!<<*!!<<'!!<2uu!<)ot!;lfr!<2uu +!<)ot!<)ot!;HKn!;uis!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!<)ot!;uls!<)ot!;c]q!;c]q +!<)ot!;uis!<)rt!5JR5m/bd$J,~> +!BU8[l0/-I!;c`q!<)ot!;HKn!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!:Kje +!<)ot!;6?l!;ZWp!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot!;6?l +!;c]q!<)rt!;QQo!<)ot!;uls!<)ot!;QQo!<)ot!;uis!<)ot!;uls!<)ot!;uls!<2uu!<)ot +!<)ot!;uis!<)rt!<)ot!<)rt!;c]q!;c]q!<)ot!;uls!<)ot!;6?l!;c`q!<)ot!;QQo!<)ot +!;uls!<)ot!<)ot!<)ot!;HKn!<)ot!;lfr!<2uu!;ZZp!<<*!!<<'!!<2uu!<)ot!;lfr!<2uu +!<)ot!<)ot!;HKn!;uis!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!<)ot!;uls!<)ot!;c]q!;c]q +!<)ot!;uis!<)rt!5JR5klK'jJ,~> +!B:&Xj66LC!;c`q!<)ot!;HKn!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!:Kje +!<)ot!;6?l!;ZWp!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot!;6?l +!;c]q!<)rt!;QQo!<)ot!;uls!<)ot!;QQo!<)ot!;uis!<)ot!;uls!<)ot!;uls!<2uu!<)ot +!<)ot!;uis!<)rt!<)ot!<)rt!;c]q!;c]q!<)ot!;uls!<)ot!;6?l!;c`q!<)ot!;QQo!<)ot +!;uls!<)ot!<)ot!<)ot!;HKn!<)ot!;lfr!<2uu!;ZZp!<<*!!<<'!!<2uu!<)ot!;lfr!<2uu +!<)ot!<)ot!;HKn!;uis!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!<)ot!;uls!<)ot!;c]q!;c]q +!<)ot!;uis!<)rt!5JR5irR%VJ,~> +!BpJ^mHFQM!;c]q!;uis!;HKn!<2uu!;lcu!<<'!q#:!lq>UEpr;Q`srVlitr;Q`srr2ruqu6Wrqu6WrpAY*mqu6Wrqu6WrrVlitr;Q`sp&>!lqYpNq +r;Q`soD\djr;Q`sr;Q`sq>UEpqu6Wrr;Qj!s8N)rrr<&rrr<&trr<&prr<&rrr<&trr<&srr<&t +rr<&srr<&qrr<&rrr<&rrr<&trr<&srr<&lrr<&qrr<&srr<&prr<&rrr<&trr<&srr<&urr<&r +rr<&prr<&rrr<&srr<&krr<&urr<&urrW9$rrDrr!!)rs!!)ip!!)or!!)cn!!*#u!!)cn!!)or +!!)]l!!)]l!!)rs!!)or!!)or!!)or!!)or!!)ut!!)rs!!'e6rp9a;4b*~> +!BU8[l0/-I!;c]q!;uis!;HKn!<2uu!;lcu!<<'!q#:!lq>UEpr;Q`srVlitr;Q`srr2ruqu6Wrqu6WrpAY*mqu6Wrqu6WrrVlitr;Q`sp&>!lqYpNq +r;Q`soD\djr;Q`sr;Q`sq>UEpqu6Wrr;Qj!s8N)rrr<&rrr<&trr<&prr<&rrr<&trr<&srr<&t +rr<&srr<&qrr<&rrr<&rrr<&trr<&srr<&lrr<&qrr<&srr<&prr<&rrr<&trr<&srr<&urr<&r +rr<&prr<&rrr<&srr<&krr<&urr<&urrW9$rrDrr!!)rs!!)ip!!)or!!)cn!!*#u!!)cn!!)or +!!)]l!!)]l!!)rs!!)or!!)or!!)or!!)or!!)ut!!)rs!!'e6rojI/3e.~> +!B:&Xj66LC!;c]q!;uis!;HKn!<2uu!;lcu!<<'!q#:!lq>UEpr;Q`srVlitr;Q`srr2ruqu6Wrqu6WrpAY*mqu6Wrqu6WrrVlitr;Q`sp&>!lqYpNq +r;Q`soD\djr;Q`sr;Q`sq>UEpqu6Wrr;Qj!s8N)rrr<&rrr<&trr<&prr<&rrr<&trr<&srr<&t +rr<&srr<&qrr<&rrr<&rrr<&trr<&srr<&lrr<&qrr<&srr<&prr<&rrr<&trr<&srr<&urr<&r +rr<&prr<&rrr<&srr<&krr<&urr<&urrW9$rrDrr!!)rs!!)ip!!)or!!)cn!!*#u!!)cn!!)or +!!)]l!!)]l!!)rs!!)or!!)or!!)or!!)or!!)ut!!)rs!!'e6ro4$s2h1~> +!BpJ^mHFQM!;c]q!;uis!;QQo!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!:Kma!;6?l +!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;6?l!;ZZo!;6Bh!;uis +!;uis!;ZZj!;lfr!;c]q!;lcr!<)ot!;ZZj!;ulr!;ZZo!;HKn!;lcr!;lcr!<)ot!;uis!;6?l +!;c]q!;uis!;ZWp!;lcr!<)ot!;uis!<3#o!;ZWp!;lcr!;uis!;-9k!<2uu!<3!#!<<'!qu6Wr +r;Q`sq>^6jp\t3nrr2rur;ZWoqu6Wrp&>!lqZ$Emr;Q`squ6Wrqu6Wrqu?Hlr;Z`r]`7uu!S0Da~> +!BU8[l0/-I!;c]q!;uis!;QQo!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!:Kma!;6?l +!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;6?l!;ZZo!;6Bh!;uis +!;uis!;ZZj!;lfr!;c]q!;lcr!<)ot!;ZZj!;ulr!;ZZo!;HKn!;lcr!;lcr!<)ot!;uis!;6?l +!;c]q!;uis!;ZWp!;lcr!<)ot!;uis!<3#o!;ZWp!;lcr!;uis!;-9k!<2uu!<3!#!<<'!qu6Wr +r;Q`sq>^6jp\t3nrr2rur;ZWoqu6Wrp&>!lqZ$Emr;Q`squ6Wrqu6Wrqu?Hlr;Z`r]`7uq!R<`V~> +!B:&Xj66LC!;c]q!;uis!;QQo!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!:Kma!;6?l +!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;6?l!;ZZo!;6Bh!;uis +!;uis!;ZZj!;lfr!;c]q!;lcr!<)ot!;ZZj!;ulr!;ZZo!;HKn!;lcr!;lcr!<)ot!;uis!;6?l +!;c]q!;uis!;ZWp!;lcr!<)ot!;uis!<3#o!;ZWp!;lcr!;uis!;-9k!<2uu!<3!#!<<'!qu6Wr +r;Q`sq>^6jp\t3nrr2rur;ZWoqu6Wrp&>!lqZ$Emr;Q`squ6Wrqu6Wrqu?Hlr;Z`r]`7uk!Q-jH~> +!BpJ^mHFQM!;c]q!;uis!;QTj!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!:Tpf!;uis!;6?l +!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;6?l!;?Hm!;QQo!;uis +!;uis!;uis!;ZWp!;-UEpn,EFhrrDus!!)rs!!)or!!)]l!!)or!!)rs!!)rs!!)or!!)or!!)or!!)Ti +rrBe5rp9a;4b*~> +!BU8[l0/-I!;c]q!;uis!;QTj!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!:Tpf!;uis!;6?l +!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;6?l!;?Hm!;QQo!;uis +!;uis!;uis!;ZWp!;-UEpn,EFhrrDus!!)rs!!)or!!)]l!!)or!!)rs!!)rs!!)or!!)or!!)or!!)Ti +rrBe5rojI/3e.~> +!B:&Xj66LC!;c]q!;uis!;QTj!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!:Tpf!;uis!;6?l +!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;6?l!;?Hm!;QQo!;uis +!;uis!;uis!;ZWp!;-UEpn,EFhrrDus!!)rs!!)or!!)]l!!)or!!)rs!!)rs!!)or!!)or!!)or!!)Ti +rrBe5ro4$s2h1~> +!BpJ^mHFQM!;c]q!;uis!;ZWp!;c]q!<)p"!<<'!q#:!lq>UEpr;Q`srVlitr;Q`srr2ruo`"mkpAY*mqu6Wrqu6WrrVlitr;Q`sp&>!lqYpNq +r;Q`sq>UEpr;Q`sr;Q`sr;Q`sq>UEpp&>*os8N)rrr<&rrr<&trr<&prr<&mrr<&srr<&trr<&s +rr<&qrr<&rrr<&rrr<&trr<&srr<&lrr<&qrr<&srr<&prr<&rrr<&trr<&srr<&urr<&irr<&r +rr<&srr<&krr<&urr<&urrW9$rrDrr!!)rs!!)ip!!)Kf!W`6#r;Q`sr;Q`squ6Wrp&>!lqu6Wr +r;Q`sr;Q`squ6Wrqu6Wrqu6WrpAY*mr;Q`s^]4<#!S0Da~> +!BU8[l0/-I!;c]q!;uis!;ZWp!;c]q!<)p"!<<'!q#:!lq>UEpr;Q`srVlitr;Q`srr2ruo`"mkpAY*mqu6Wrqu6WrrVlitr;Q`sp&>!lqYpNq +r;Q`sq>UEpr;Q`sr;Q`sr;Q`sq>UEpp&>*os8N)rrr<&rrr<&trr<&prr<&mrr<&srr<&trr<&s +rr<&qrr<&rrr<&rrr<&trr<&srr<&lrr<&qrr<&srr<&prr<&rrr<&trr<&srr<&urr<&irr<&r +rr<&srr<&krr<&urr<&urrW9$rrDrr!!)rs!!)ip!!)Kf!W`6#r;Q`sr;Q`squ6Wrp&>!lqu6Wr +r;Q`sr;Q`squ6Wrqu6Wrqu6WrpAY*mr;Q`s^]4;t!R<`V~> +!B:&Xj66LC!;c]q!;uis!;ZWp!;c]q!<)p"!<<'!q#:!lq>UEpr;Q`srVlitr;Q`srr2ruo`"mkpAY*mqu6Wrqu6WrrVlitr;Q`sp&>!lqYpNq +r;Q`sq>UEpr;Q`sr;Q`sr;Q`sq>UEpp&>*os8N)rrr<&rrr<&trr<&prr<&mrr<&srr<&trr<&s +rr<&qrr<&rrr<&rrr<&trr<&srr<&lrr<&qrr<&srr<&prr<&rrr<&trr<&srr<&urr<&irr<&r +rr<&srr<&krr<&urr<&urrW9$rrDrr!!)rs!!)ip!!)Kf!W`6#r;Q`sr;Q`squ6Wrp&>!lqu6Wr +r;Q`sr;Q`squ6Wrqu6Wrqu6WrpAY*mr;Q`s^]4;n!Q-jH~> +!BpJ^mHFQM!;c]q!;uis!;ZWp!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;lfr +!;HKn!<)rt!;6?l!;ZWp!<)rt!<)ot!;uis!<)ot!<)rt!;lcr!<)ot!;lcr!;c]q!<)ot!;uis +!;uis!;6?l!;c`q!<)ot!;ZWp!<)rt!;uis!;uis!;QQo!<)rt!<)ot!<)ot!;uls!<)ot!;uis +!;QQo!<)rt!<)rt!<)ot!<)rt!<)ot!;c]q!;c]q!<)ot!;uis!;uis!;6?l!;c]q!;uis!;QQo +!<)ot!;uis!;uis!<)ot!<)rt!;QQo!<)ot!;lcr!;-9k!<2uu!<2uu!<2uu!<)ot!;lcr!;QQo +!<)rt!;6?l!;lcr!<)rt!;lcr!;6?l!;lcr!<)rt!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot +!;lfr!6>-=m/bd$J,~> +!BU8[l0/-I!;c]q!;uis!;ZWp!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;lfr +!;HKn!<)rt!;6?l!;ZWp!<)rt!<)ot!;uis!<)ot!<)rt!;lcr!<)ot!;lcr!;c]q!<)ot!;uis +!;uis!;6?l!;c`q!<)ot!;ZWp!<)rt!;uis!;uis!;QQo!<)rt!<)ot!<)ot!;uls!<)ot!;uis +!;QQo!<)rt!<)rt!<)ot!<)rt!<)ot!;c]q!;c]q!<)ot!;uis!;uis!;6?l!;c]q!;uis!;QQo +!<)ot!;uis!;uis!<)ot!<)rt!;QQo!<)ot!;lcr!;-9k!<2uu!<2uu!<2uu!<)ot!;lcr!;QQo +!<)rt!;6?l!;lcr!<)rt!;lcr!;6?l!;lcr!<)rt!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot +!;lfr!6>-=klK'jJ,~> +!B:&Xj66LC!;c]q!;uis!;ZWp!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;lfr +!;HKn!<)rt!;6?l!;ZWp!<)rt!<)ot!;uis!<)ot!<)rt!;lcr!<)ot!;lcr!;c]q!<)ot!;uis +!;uis!;6?l!;c`q!<)ot!;ZWp!<)rt!;uis!;uis!;QQo!<)rt!<)ot!<)ot!;uls!<)ot!;uis +!;QQo!<)rt!<)rt!<)ot!<)rt!<)ot!;c]q!;c]q!<)ot!;uis!;uis!;6?l!;c]q!;uis!;QQo +!<)ot!;uis!;uis!<)ot!<)rt!;QQo!<)ot!;lcr!;-9k!<2uu!<2uu!<2uu!<)ot!;lcr!;QQo +!<)rt!;6?l!;lcr!<)rt!;lcr!;6?l!;lcr!<)rt!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot +!;lfr!6>-=irR%VJ,~> +!BpJ^mHafK!<3#t!<3#t!;lfp!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!;uls!;?Hk +!!*&u!;ZZk!;ulq!!N<%!<<)u!<3#t!<)rr!;QTm!<)ro!;ulq!;ulr!<3#t!;ZZk!<)ou!<;ut +p](0l!<<#us8W&urr;rtq#C9mr;Z`rs8W&urVllus8;rrs7u`ms8;rprrE-"r;ccq! +!BU8[l0JBG!<3#t!<3#t!;lfp!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!;uls!;?Hk +!!*&u!;ZZk!;ulq!!N<%!<<)u!<3#t!<)rr!;QTm!<)ro!;ulq!;ulr!<3#t!;ZZk!<)ou!<;ut +p](0l!<<#us8W&urr;rtq#C9mr;Z`rs8W&urVllus8;rrs7u`ms8;rprrE-"r;ccq! +!B:&Xj6QaA!<3#t!<3#t!;lfp!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!;uls!;?Hk +!!*&u!;ZZk!;ulq!!N<%!<<)u!<3#t!<)rr!;QTm!<)ro!;ulq!;ulr!<3#t!;ZZk!<)ou!<;ut +p](0l!<<#us8W&urr;rtq#C9mr;Z`rs8W&urVllus8;rrs7u`ms8;rprrE-"r;ccq! +!BpJ^m?dkQ!.k0_rr<%Ms+13$s7cQmm/bd$J,~> +!BU8[l'MGM!.k0_rr<%Ms+13$s7cQmklK'jJ,~> +!B:&Xj-TfG!.k0_rr<%Ms+13$s7cQmirR%VJ,~> +!BpJ^m?dkQ!.k0_rr<%Ms+13$s7cQmm/bd$J,~> +!BU8[l'MGM!.k0_rr<%Ms+13$s7cQmklK'jJ,~> +!B:&Xj-TfG!.k0_rr<%Ms+13$s7cQmirR%VJ,~> +!BpJ^m?mqR!.k0^rr<%Ms+13$s7cQmm/bd$J,~> +!BU8[l'VMN!.k0^rr<%Ms+13$s7cQmklK'jJ,~> +!B:&Xj-]lH!.k0^rr<%Ms+13$s7cQmirR%VJ,~> +!BpJ^m=G:gs3^lF!.k0$s+14Gs8MBdeieN~> +!BU8[l%/kcs3^lF!.k0$s+14Gs8M6`c8pI~> +!B:&Xj+75]s3^lF!.k0$s+14Gs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mH4EK!:p0i!94%Y!9=+X!3cG$!1j/g!:Tsf!1X#g!;HNl!9=(Z!0$sV!1!T`m/bd$J,~> +!BU8[l/r!G!:p0i!94%Y!9=+X!3cG$!1j/g!:Tsf!1X#g!;HNl!9=(Z!0$sV!1!T`klK'jJ,~> +!B:&Xj6$@A!:p0i!94%Y!9=+X!3cG$!1j/g!:Tsf!1X#g!;HNl!9=(Z!0$sV!1!T`irR%VJ,~> +!BpJ^mH=KL!;ull!<2uu!;-9k!:Tpf!9F.[!:p-i!;QQo!65$=!8%5N!;?Em!7CfH!;$3j!;ZWp +!3Q8$!:Tpf!;-9k!94"Y!9O7[!<3#t!3cD&!1!T`m/bd$J,~> +!BU8[l0&'H!;ull!<2uu!;-9k!:Tpf!9F.[!:p-i!;QQo!65$=!8%5N!;?Em!7CfH!;$3j!;ZWp +!3Q8$!:Tpf!;-9k!94"Y!9O7[!<3#t!3cD&!1!T`klK'jJ,~> +!B:&Xj6-FB!;ull!<2uu!;-9k!:Tpf!9F.[!:p-i!;QQo!65$=!8%5N!;?Em!7CfH!;$3j!;ZWp +!3Q8$!:Tpf!;-9k!94"Y!9O7[!<3#t!3cD&!1!T`irR%VJ,~> +!BpJ^mH=KL!;uis!<2uu!<2uu!<2uu!;-9k!:Tpf!9O4\!:g'h!;QQo!6>*>!7q/M!;?Em!7LlI +!:p-i!;ZWp!3Q8$!:Tpf!;-9k!94"Y!9F.[!;uis!3Z>%!1!T`m/bd$J,~> +!BU8[l0&'H!;uis!<2uu!<2uu!<2uu!;-9k!:Tpf!9O4\!:g'h!;QQo!6>*>!7q/M!;?Em!7LlI +!:p-i!;ZWp!3Q8$!:Tpf!;-9k!94"Y!9F.[!;uis!3Z>%!1!T`klK'jJ,~> +!B:&Xj6-FB!;uis!<2uu!<2uu!<2uu!;-9k!:Tpf!9O4\!:g'h!;QQo!6>*>!7q/M!;?Em!7LlI +!:p-i!;ZWp!3Q8$!:Tpf!;-9k!94"Y!9F.[!;uis!3Z>%!1!T`irR%VJ,~> +!BpJ^mHFQM!;lcr!<2uu!<2uu!<2uu!9*qX!9O4\!9a@^!6>*>!7q/M!65$=!:p-i!;ZWp!1Nof +!;-9k!9*qX!9F.[!<2uu!3Q8$!1!T`m/bd$J,~> +!BU8[l0/-I!;lcr!<2uu!<2uu!<2uu!9*qX!9O4\!9a@^!6>*>!7q/M!65$=!:p-i!;ZWp!1Nof +!;-9k!9*qX!9F.[!<2uu!3Q8$!1!T`klK'jJ,~> +!B:&Xj66LC!;lcr!<2uu!<2uu!<2uu!9*qX!9O4\!9a@^!6>*>!7q/M!65$=!:p-i!;ZWp!1Nof +!;-9k!9*qX!9F.[!<2uu!3Q8$!1!T`irR%VJ,~> +!BpJ^mHFQM!;lcr!<2uu!<2uu!<3!!!<;utqu?Wqqu?Zr!<;utr;Qfus8W#tp](0lqu?Kmp](3m +qZ$Blp](0lqZ$Ko!WN/os8;rks7u`ps8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccq +rr<'!r;cQkr;c`pq>ggKo!^Bnqu6Zss8;rnrr<&ps8;ros8;ourrDoq!!)*[!!*#u!!)orr;ccqrrE#trrDfnr;Zlu +!;ulq!;uls!!*&t!;?Hk!;QQo!;ZZn!!3*"r;Z]qXT/:e!S0Da~> +!BU8[l0/-I!;lcr!<2uu!<2uu!<3!!!<;utqu?Wqqu?Zr!<;utr;Qfus8W#tp](0lqu?Kmp](3m +qZ$Blp](0lqZ$Ko!WN/os8;rks7u`ps8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccq +rr<'!r;cQkr;c`pq>ggKo!^Bnqu6Zss8;rnrr<&ps8;ros8;ourrDoq!!)*[!!*#u!!)orr;ccqrrE#trrDfnr;Zlu +!;ulq!;uls!!*&t!;?Hk!;QQo!;ZZn!!3*"r;Z]qXT/:a!R<`V~> +!B:&Xj66LC!;lcr!<2uu!<2uu!<3!!!<;utqu?Wqqu?Zr!<;utr;Qfus8W#tp](0lqu?Kmp](3m +qZ$Blp](0lqZ$Ko!WN/os8;rks7u`ps8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccq +rr<'!r;cQkr;c`pq>ggKo!^Bnqu6Zss8;rnrr<&ps8;ros8;ourrDoq!!)*[!!*#u!!)orr;ccqrrE#trrDfnr;Zlu +!;ulq!;uls!!*&t!;?Hk!;QQo!;ZZn!!3*"r;Z]qXT/:[!Q-jH~> +!BpJ^mHFQM!;HKn!;c`q!<)ot!;c]q!;c`q!<)ot!<)ot!<2uu!;?Em!<)ot!;c]q!:g'h!;QQo +!;-9k!<)ot!;uis!<)rt!;QQo!<)ot!;6?l!;ZWp!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em +!;c]q!<)ot!;uls!<)ot!;QQo!<)ot!;c]q!:p-i!;ZZp!<)ot!<)ot!<)ot!;uis!<)rt!<)ot +!<)ot!;HKn!;uis!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)ot +!;uis!<)rt!;c]q!9=(\!<3&rrr<&trr<&srr<&srr<&orr<&ts8N)trr<&trr<&ss8N)trr<&o +rr<&trr<&prr<&qrr<&ts8N)trr<&trr<&$s8MBdeieN~> +!BU8[l0/-I!;HKn!;c`q!<)ot!;c]q!;c`q!<)ot!<)ot!<2uu!;?Em!<)ot!;c]q!:g'h!;QQo +!;-9k!<)ot!;uis!<)rt!;QQo!<)ot!;6?l!;ZWp!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em +!;c]q!<)ot!;uls!<)ot!;QQo!<)ot!;c]q!:p-i!;ZZp!<)ot!<)ot!<)ot!;uis!<)rt!<)ot +!<)ot!;HKn!;uis!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)ot +!;uis!<)rt!;c]q!9=(\!<3&rrr<&trr<&srr<&srr<&orr<&ts8N)trr<&trr<&ss8N)trr<&o +rr<&trr<&prr<&qrr<&ts8N)trr<&trr<&$s8M6`c8pI~> +!B:&Xj66LC!;HKn!;c`q!<)ot!;c]q!;c`q!<)ot!<)ot!<2uu!;?Em!<)ot!;c]q!:g'h!;QQo +!;-9k!<)ot!;uis!<)rt!;QQo!<)ot!;6?l!;ZWp!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em +!;c]q!<)ot!;uls!<)ot!;QQo!<)ot!;c]q!:p-i!;ZZp!<)ot!<)ot!<)ot!;uis!<)rt!<)ot +!<)ot!;HKn!;uis!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)ot +!;uis!<)rt!;c]q!9=(\!<3&rrr<&trr<&srr<&srr<&orr<&ts8N)trr<&trr<&ss8N)trr<&o +rr<&trr<&prr<&qrr<&ts8N)trr<&trr<&$s8M$Z_`*)~> +!BpJ^mHFQM!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)p"!<<'!pAY*mqu6Wrqu6Wrnc&Rhq#:!lq>UEpr;Q`srVlitr;Q`srr2ruqu6Wrqu6WrpAY*mqu6Wrqu6Wr +rVlitr;Q`sq>UEpqu6Wrqu6Wro)A[iq>UEpr;Q`srr2ruqu6WrrVlitr;Q`srr2ruqu6Wrp\t3n +rr2rup\t3nqu6Wrp&>!lp&>!lr;Q`squ6Wrqu6Wrqu6Wrqu6WrrVlitr;Q`sqYpNqj8T/\rrDus +!!)or!!)ut!!)rs!!)ip!!)or!!)fo!!)rs!!)rs!!)Wj!!)ip!!)lq!!)rs!!*#u!!)or!!'2% +rp9a;4b*~> +!BU8[l0/-I!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)p"!<<'!pAY*mqu6Wrqu6Wrnc&Rhq#:!lq>UEpr;Q`srVlitr;Q`srr2ruqu6Wrqu6WrpAY*mqu6Wrqu6Wr +rVlitr;Q`sq>UEpqu6Wrqu6Wro)A[iq>UEpr;Q`srr2ruqu6WrrVlitr;Q`srr2ruqu6Wrp\t3n +rr2rup\t3nqu6Wrp&>!lp&>!lr;Q`squ6Wrqu6Wrqu6Wrqu6WrrVlitr;Q`sqYpNqj8T/\rrDus +!!)or!!)ut!!)rs!!)ip!!)or!!)fo!!)rs!!)rs!!)Wj!!)ip!!)lq!!)rs!!*#u!!)or!!'2% +rojI/3e.~> +!B:&Xj66LC!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)p"!<<'!pAY*mqu6Wrqu6Wrnc&Rhq#:!lq>UEpr;Q`srVlitr;Q`srr2ruqu6Wrqu6WrpAY*mqu6Wrqu6Wr +rVlitr;Q`sq>UEpqu6Wrqu6Wro)A[iq>UEpr;Q`srr2ruqu6WrrVlitr;Q`srr2ruqu6Wrp\t3n +rr2rup\t3nqu6Wrp&>!lp&>!lr;Q`squ6Wrqu6Wrqu6Wrqu6WrrVlitr;Q`sqYpNqj8T/\rrDus +!!)or!!)ut!!)rs!!)ip!!)or!!)fo!!)rs!!)rs!!)Wj!!)ip!!)lq!!)rs!!*#u!!)or!!'2% +ro4$s2h1~> +!BpJ^mHFQM!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)rs!;6?l!;lcr!;lcr!:g'h!;QQo!;- +!BU8[l0/-I!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)rs!;6?l!;lcr!;lcr!:g'h!;QQo!;- +!B:&Xj66LC!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)rs!;6?l!;lcr!;lcr!:g'h!;QQo!;- +!BpJ^mHFQM!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)p"!<<'!pAY*mqu6Wrqu6Wrnc&Rhq#:!lr;Q`sq#C?oq#:!lq>UEpr;Q`srVlitr;Q`srr2ruo`"mkpAY*mqu6Wrqu6Wr +rVlitr;Q`sq>UEpqu6Wrqu6Wro)A[iq>UEpr;Q`srr2ruqu6Wrq>^HprVlitn,EFhrrDus!!)rs +!!)or!!)]l!!)or!!)rs!!)rs!!)or!!)or!!)or!!)TirrDlp!!)$Y!!)or!!)or!!)ut!!)rs +!!)ip!!)cn!!)rs!!)rs!!)rs!!)ip!!)rs!!)ip!!)`mrrE#t!!)or!!'2%rp9a;4b*~> +!BU8[l0/-I!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)p"!<<'!pAY*mqu6Wrqu6Wrnc&Rhq#:!lr;Q`sq#C?oq#:!lq>UEpr;Q`srVlitr;Q`srr2ruo`"mkpAY*mqu6Wrqu6Wr +rVlitr;Q`sq>UEpqu6Wrqu6Wro)A[iq>UEpr;Q`srr2ruqu6Wrq>^HprVlitn,EFhrrDus!!)rs +!!)or!!)]l!!)or!!)rs!!)rs!!)or!!)or!!)or!!)TirrDlp!!)$Y!!)or!!)or!!)ut!!)rs +!!)ip!!)cn!!)rs!!)rs!!)rs!!)ip!!)rs!!)ip!!)`mrrE#t!!)or!!'2%rojI/3e.~> +!B:&Xj66LC!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)p"!<<'!pAY*mqu6Wrqu6Wrnc&Rhq#:!lr;Q`sq#C?oq#:!lq>UEpr;Q`srVlitr;Q`srr2ruo`"mkpAY*mqu6Wrqu6Wr +rVlitr;Q`sq>UEpqu6Wrqu6Wro)A[iq>UEpr;Q`srr2ruqu6Wrq>^HprVlitn,EFhrrDus!!)rs +!!)or!!)]l!!)or!!)rs!!)rs!!)or!!)or!!)or!!)TirrDlp!!)$Y!!)or!!)or!!)ut!!)rs +!!)ip!!)cn!!)rs!!)rs!!)rs!!)ip!!)rs!!)ip!!)`mrrE#t!!)or!!'2%ro4$s2h1~> +!BpJ^mHFQM!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)ot!<2uu!;HKn!;lcr!;lcr!:g'h!;QQo +!;6?l!;uis!;uis!;uis!;ZWp!;uis!;6?l!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr +!;lcr!<)ot!;uis!;ZWp!;lcr!;lcr!:p-i!;ZWp!;uis!<2uu!;lcr!<)ot!;uis!<2uu!:Tph +!<3&srr<&srr<&rrr<&lrr<&rrr<&srr<&srr<&rrr<&rrr<&rrr<&mrr<&srr<&qrr<&Yrr<&r +rr<&rrr<&trr<&srr<&prr<&nrr<&srr<&srr<&srr<&prr<&srr<&prr<&qrr<&srr<&urr<&r +rr<&%s8MBdeieN~> +!BU8[l0/-I!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)ot!<2uu!;HKn!;lcr!;lcr!:g'h!;QQo +!;6?l!;uis!;uis!;uis!;ZWp!;uis!;6?l!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr +!;lcr!<)ot!;uis!;ZWp!;lcr!;lcr!:p-i!;ZWp!;uis!<2uu!;lcr!<)ot!;uis!<2uu!:Tph +!<3&srr<&srr<&rrr<&lrr<&rrr<&srr<&srr<&rrr<&rrr<&rrr<&mrr<&srr<&qrr<&Yrr<&r +rr<&rrr<&trr<&srr<&prr<&nrr<&srr<&srr<&srr<&prr<&srr<&prr<&qrr<&srr<&urr<&r +rr<&%s8M6`c8pI~> +!B:&Xj66LC!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)ot!<2uu!;HKn!;lcr!;lcr!:g'h!;QQo +!;6?l!;uis!;uis!;uis!;ZWp!;uis!;6?l!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr +!;lcr!<)ot!;uis!;ZWp!;lcr!;lcr!:p-i!;ZWp!;uis!<2uu!;lcr!<)ot!;uis!<2uu!:Tph +!<3&srr<&srr<&rrr<&lrr<&rrr<&srr<&srr<&rrr<&rrr<&rrr<&mrr<&srr<&qrr<&Yrr<&r +rr<&rrr<&trr<&srr<&prr<&nrr<&srr<&srr<&srr<&prr<&srr<&prr<&qrr<&srr<&urr<&r +rr<&%s8M$Z_`*)~> +!BpJ^mHFQM!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)ot!<)ot!;HKn!<)ot!;c]q!:g'h!;QQo +!<)ot!;c]q!<)rt!;uls!<)ot!;ZWp!<)rt!;6?l!;ZWp!<)rt!<)ot!;uis!<)ot!<)rt!;lcr +!<)ot!;lcr!;c]q!<)ot!;uis!;uis!;QQo!<)ot!;c]q!:p-i!<)ot!<2uu!;uis!<)ot!<)ot +!;uls!<)ot!<)ot!<)rt!;6?l!;lcr!<)rt!;lcr!;6?l!;lcr!<)rt!;uls!<)ot!;c]q!;c]q +!<)rt!<)rt!<)ot!;c]q!;QTo!:Bdd!;c]q!<)ot!;uis!<)rt!;QQo!<)rt!<2uu!<)rt!;uis +!;uis!;ZWp!<)rt!;ZWp!;c`q!<)ot!<)ot!<)ot!3Q;#m/bd$J,~> +!BU8[l0/-I!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)ot!<)ot!;HKn!<)ot!;c]q!:g'h!;QQo +!<)ot!;c]q!<)rt!;uls!<)ot!;ZWp!<)rt!;6?l!;ZWp!<)rt!<)ot!;uis!<)ot!<)rt!;lcr +!<)ot!;lcr!;c]q!<)ot!;uis!;uis!;QQo!<)ot!;c]q!:p-i!<)ot!<2uu!;uis!<)ot!<)ot +!;uls!<)ot!<)ot!<)rt!;6?l!;lcr!<)rt!;lcr!;6?l!;lcr!<)rt!;uls!<)ot!;c]q!;c]q +!<)rt!<)rt!<)ot!;c]q!;QTo!:Bdd!;c]q!<)ot!;uis!<)rt!;QQo!<)rt!<2uu!<)rt!;uis +!;uis!;ZWp!<)rt!;ZWp!;c`q!<)ot!<)ot!<)ot!3Q;#klK'jJ,~> +!B:&Xj66LC!;HKn!;c]q!;uis!;c]q!;c]q!;uis!<)ot!<)ot!;HKn!<)ot!;c]q!:g'h!;QQo +!<)ot!;c]q!<)rt!;uls!<)ot!;ZWp!<)rt!;6?l!;ZWp!<)rt!<)ot!;uis!<)ot!<)rt!;lcr +!<)ot!;lcr!;c]q!<)ot!;uis!;uis!;QQo!<)ot!;c]q!:p-i!<)ot!<2uu!;uis!<)ot!<)ot +!;uls!<)ot!<)ot!<)rt!;6?l!;lcr!<)rt!;lcr!;6?l!;lcr!<)rt!;uls!<)ot!;c]q!;c]q +!<)rt!<)rt!<)ot!;c]q!;QTo!:Bdd!;c]q!<)ot!;uis!<)rt!;QQo!<)rt!<2uu!<)rt!;uis +!;uis!;ZWp!<)rt!;ZWp!;c`q!<)ot!<)ot!<)ot!3Q;#irR%VJ,~> +!BpJ^mH=KL!;c`n!<)rs!<3#t!<3#p!<3#t!<3#t!<<*!!<3#s!;QTm!;lfm!;QTj!;c`o!;QTm +!!*&u!<3!!!<;utp](0l!<<#uq>^9kr;Z]q"TJH%s8W&urr;rtrVufrq#C9mrVu]or;Z]qr;Z`r +rr;rtq#C9mqu?Kmp&Fsjrr;rtrr;rtrVufrqu6Zss8;rps8;rhrr<&qs8;ots8E#us7u`ns7u`o +s8;ots8E#us8N'!s8;rqs7u`ns8;rprrE-"r;c]o!!)cnrrDNfquHWor;c]or;Zp!!!)for;c`p +r;ZitrW)uurW)rtrW)cor;ZitrW)rtq>gKo! +!BU8[l0&'H!;c`n!<)rs!<3#t!<3#p!<3#t!<3#t!<<*!!<3#s!;QTm!;lfm!;QTj!;c`o!;QTm +!!*&u!<3!!!<;utp](0l!<<#uq>^9kr;Z]q"TJH%s8W&urr;rtrVufrq#C9mrVu]or;Z]qr;Z`r +rr;rtq#C9mqu?Kmp&Fsjrr;rtrr;rtrVufrqu6Zss8;rps8;rhrr<&qs8;ots8E#us7u`ns7u`o +s8;ots8E#us8N'!s8;rqs7u`ns8;rprrE-"r;c]o!!)cnrrDNfquHWor;c]or;Zp!!!)for;c`p +r;ZitrW)uurW)rtrW)cor;ZitrW)rtq>gKo! +!B:&Xj6-FB!;c`n!<)rs!<3#t!<3#p!<3#t!<3#t!<<*!!<3#s!;QTm!;lfm!;QTj!;c`o!;QTm +!!*&u!<3!!!<;utp](0l!<<#uq>^9kr;Z]q"TJH%s8W&urr;rtrVufrq#C9mrVu]or;Z]qr;Z`r +rr;rtq#C9mqu?Kmp&Fsjrr;rtrr;rtrVufrqu6Zss8;rps8;rhrr<&qs8;ots8E#us7u`ns7u`o +s8;ots8E#us8N'!s8;rqs7u`ns8;rprrE-"r;c]o!!)cnrrDNfquHWor;c]or;Zp!!!)for;c`p +r;ZitrW)uurW)rtrW)cor;ZitrW)rtq>gKo! +!BpJ^mH=KL!.k0$s+13hrr<%Ms.02hm/bd$J,~> +!BU8[l0&'H!.k0$s+13hrr<%Ms.02hklK'jJ,~> +!B:&Xj6-FB!.k0$s+13hrr<%Ms.02hirR%VJ,~> +!BpJ^mH4EK!.k0$s+13jrr<%Ms.',gm/bd$J,~> +!BU8[l/r!G!.k0$s+13jrr<%Ms.',gklK'jJ,~> +!B:&Xj6$@A!.k0$s+13jrr<%Ms.',girR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mH4HK!:Kmc!6"p9!3Q;$!7CiF!0@0[!9*tV!6,!:!.k1>s8;r&s8MBdeieN~> +!BU8[l/r$G!:Kmc!6"p9!3Q;$!7CiF!0@0[!9*tV!6,!:!.k1>s8;r&s8M6`c8pI~> +!B:&Xj6$CA!:Kmc!6"p9!3Q;$!7CiF!0@0[!9*tV!6,!:!.k1>s8;r&s8M$Z_`*)~> +!BpJ^mH+?J!:Tpf!;HKn!6kHC!8%5N!;?Em!8meV!7(TE!07'Z!9sL`!;HKn!;QQo!:0Xb!9a@^ +!8%5N!;?Em!8mhT!:9^c!8RSS!:Bdd!65' +!BU8[l/hpF!:Tpf!;HKn!6kHC!8%5N!;?Em!8meV!7(TE!07'Z!9sL`!;HKn!;QQo!:0Xb!9a@^ +!8%5N!;?Em!8mhT!:9^c!8RSS!:Bdd!65' +!B:&Xj5p:@!:Tpf!;HKn!6kHC!8%5N!;?Em!8meV!7(TE!07'Z!9sL`!;HKn!;QQo!:0Xb!9a@^ +!8%5N!;?Em!8mhT!:9^c!8RSS!:Bdd!65' +!BpJ^mH+?J!:^!g!;?Em!6tND!7q/M!;?Em!8meV!7(TE!07'Z!9sL`!;HKn!;QQo!:0Xb!9jF_ +!7q/M!;?Em!8RSS!:9^c!8RSS!:Bdd!65' +!BU8[l/hpF!:^!g!;?Em!6tND!7q/M!;?Em!8meV!7(TE!07'Z!9sL`!;HKn!;QQo!:0Xb!9jF_ +!7q/M!;?Em!8RSS!:9^c!8RSS!:Bdd!65' +!B:&Xj5p:@!:^!g!;?Em!6tND!7q/M!;?Em!8meV!7(TE!07'Z!9sL`!;HKn!;QQo!:0Xb!9jF_ +!7q/M!;?Em!8RSS!:9^c!8RSS!:Bdd!65' +!BpJ^mH+?J!:^!g!5\[8!7q/M!7UrJ!7(TE!07'Z!8d_U!;QQo!7CfH!7q/M!7CfJ!<3&>rr<&d +rr<&=s8MBdeieN~> +!BU8[l/hpF!:^!g!5\[8!7q/M!7UrJ!7(TE!07'Z!8d_U!;QQo!7CfH!7q/M!7CfJ!<3&>rr<&d +rr<&=s8M6`c8pI~> +!B:&Xj5p:@!:^!g!5\[8!7q/M!7UrJ!7(TE!07'Z!8d_U!;QQo!7CfH!7q/M!7CfJ!<3&>rr<&d +rr<&=s8M$Z_`*)~> +!BpJ^mHX`M!!3*"r;Z]qqu?Kmr;Z`rqu?Zr!<;utqu?Tpp&FsjpAashrr;uurVultrr;uu!<;ut +qu?Tp!WN/us7u`ns8E#os8;rqs8N'!s8;rlrrE-"r;cfrrW)rtrW)fprVururW)osrrE#trrDoq +!!)ipr;c]or;Zlu!;HNl!;ulr!!*&u!;QTo!<)rt!;ulq!!3*"r;Z]qp&FsjpAY-ns8;rrs8N)t +s8N)ss8E#mrr<&qs7u`cs8E#qs8N'!s8;rls7u`ps8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHn +rW)cor;ccqrr<'!r;cNj!W`6#r;Z`rs8W&ur;Z`rq>^BnrVult#6+Z's8N'!p&>!lq>^Bnqu?Km +r;Z]q!WN/Ms8MBdeieN~> +!BU8[l0AgHn +rW)cor;ccqrr<'!r;cNj!W`6#r;Z`rs8W&ur;Z`rq>^BnrVult#6+Z's8N'!p&>!lq>^Bnqu?Km +r;Z]q!WN/Ms8M6`c8pI~> +!B:&Xj6H[C!!3*"r;Z]qqu?Kmr;Z`rqu?Zr!<;utqu?Tpp&FsjpAashrr;uurVultrr;uu!<;ut +qu?Tp!WN/us7u`ns8E#os8;rqs8N'!s8;rlrrE-"r;cfrrW)rtrW)fprVururW)osrrE#trrDoq +!!)ipr;c]or;Zlu!;HNl!;ulr!!*&u!;QTo!<)rt!;ulq!!3*"r;Z]qp&FsjpAY-ns8;rrs8N)t +s8N)ss8E#mrr<&qs7u`cs8E#qs8N'!s8;rls7u`ps8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHn +rW)cor;ccqrr<'!r;cNj!W`6#r;Z`rs8W&ur;Z`rq>^BnrVult#6+Z's8N'!p&>!lq>^Bnqu?Km +r;Z]q!WN/Ms8M$Z_`*)~> +!BpJ^mHacP!<)rt!<)ot!<)ot!;c]q!;?Em!;c`q!<)ot!<)ot!<)ot!;HKn!<)ot!;6?l!;ZWp +!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot!;QTo!<)ot!<)ot!;uis +!;HNn!<2uu!<)ot!;uis!;c]q!;c]q!<)ot!;uis!<)rt!;QQo!<)ot!;lfr!<2uu!;QQo!;uis +!<)ot!<)rt!<)ot!<)ot!;HKn!<)ot!;HNn!<)ot!<)ot!;uis!;c]q!;HKn!;QQo!:0Xb!;c`q +!<)ot!;?Em!;ZWp!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot!;HKn +!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!;?Em!;c]q!<)ot!;c]q!;ZWp!<)rt +!7h,Km/bd$J,~> +!BU8[l0J?L!<)rt!<)ot!<)ot!;c]q!;?Em!;c`q!<)ot!<)ot!<)ot!;HKn!<)ot!;6?l!;ZWp +!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot!;QTo!<)ot!<)ot!;uis +!;HNn!<2uu!<)ot!;uis!;c]q!;c]q!<)ot!;uis!<)rt!;QQo!<)ot!;lfr!<2uu!;QQo!;uis +!<)ot!<)rt!<)ot!<)ot!;HKn!<)ot!;HNn!<)ot!<)ot!;uis!;c]q!;HKn!;QQo!:0Xb!;c`q +!<)ot!;?Em!;ZWp!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot!;HKn +!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!;?Em!;c]q!<)ot!;c]q!;ZWp!<)rt +!7h,KklK'jJ,~> +!B:&Xj6Q^F!<)rt!<)ot!<)ot!;c]q!;?Em!;c`q!<)ot!<)ot!<)ot!;HKn!<)ot!;6?l!;ZWp +!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot!;QTo!<)ot!<)ot!;uis +!;HNn!<2uu!<)ot!;uis!;c]q!;c]q!<)ot!;uis!<)rt!;QQo!<)ot!;lfr!<2uu!;QQo!;uis +!<)ot!<)rt!<)ot!<)ot!;HKn!<)ot!;HNn!<)ot!<)ot!;uis!;c]q!;HKn!;QQo!:0Xb!;c`q +!<)ot!;?Em!;ZWp!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot!;HKn +!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!;?Em!;c]q!<)ot!;c]q!;ZWp!<)rt +!7h,KirR%VJ,~> +!BpJ^mHjiQ!;lcr!<2uu!;lcr!;lcr!;?Em!;c]q!;uis!<2uu!;lcr!;$3j!;6?l!;ZWp!;uis +!<)ot!;uis!<2uu!;lcr!;lcr!;?Em!;lcr!;lcr!<)ot!;uis!;QQo!;lcr!<2uu!;uis!;HKn +!;QQo!;uis!;c]q!;lcr!;lcr!<)ot!;uis!;ZWp!;lcr!;uis!;$3j!;uis!<)ot!;uis!<2uu +!;lcr!;$3j!;HKn!;lcr!<2uu!;uis!;c]q!;HKn!;QQo!;c`k!;c]q!;c]q!;uis!;?Em!;ZWp +!;uis!<)ot!;uis!<2uu!;lcr!;lcr!;?Em!;lcr!;lcr!<)ot!;uis!;HKn!<2uu!;lcu!<<'! +q#:UEpr;Q`sec5X9!S0Da~> +!BU8[l0SEM!;lcr!<2uu!;lcr!;lcr!;?Em!;c]q!;uis!<2uu!;lcr!;$3j!;6?l!;ZWp!;uis +!<)ot!;uis!<2uu!;lcr!;lcr!;?Em!;lcr!;lcr!<)ot!;uis!;QQo!;lcr!<2uu!;uis!;HKn +!;QQo!;uis!;c]q!;lcr!;lcr!<)ot!;uis!;ZWp!;lcr!;uis!;$3j!;uis!<)ot!;uis!<2uu +!;lcr!;$3j!;HKn!;lcr!<2uu!;uis!;c]q!;HKn!;QQo!;c`k!;c]q!;c]q!;uis!;?Em!;ZWp +!;uis!<)ot!;uis!<2uu!;lcr!;lcr!;?Em!;lcr!;lcr!<)ot!;uis!;HKn!<2uu!;lcu!<<'! +q#:UEpr;Q`sec5X5!R<`V~> +!B:&Xj6ZdG!;lcr!<2uu!;lcr!;lcr!;?Em!;c]q!;uis!<2uu!;lcr!;$3j!;6?l!;ZWp!;uis +!<)ot!;uis!<2uu!;lcr!;lcr!;?Em!;lcr!;lcr!<)ot!;uis!;QQo!;lcr!<2uu!;uis!;HKn +!;QQo!;uis!;c]q!;lcr!;lcr!<)ot!;uis!;ZWp!;lcr!;uis!;$3j!;uis!<)ot!;uis!<2uu +!;lcr!;$3j!;HKn!;lcr!<2uu!;uis!;c]q!;HKn!;QQo!;c`k!;c]q!;c]q!;uis!;?Em!;ZWp +!;uis!<)ot!;uis!<2uu!;lcr!;lcr!;?Em!;lcr!;lcr!<)ot!;uis!;HKn!<2uu!;lcu!<<'! +q#:UEpr;Q`sec5X/!Q-jH~> +!BpJ^mHjiQ!;lcr!<3#o!;lcr!;?Em!;c]q!;uis!<3#o!;QTk!;6?l!;ZWp!;uis!<)ot!;uis +!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;QQo!;lcr!<)ot!<2uu!;?Em!;QQo!;uis!;c]q +!;lfl!;ulr!;?Em!;lcr!;uis!;$3j!;uis!;ulr!;lfl!;QTk!;HKn!;lcr!<2uu!;uis!;c]q +!;HKn!;QQo!:0Xb!;c]q!;uis!;?Em!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr!;lcr +!<)ot!;uis!;QQo!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;?Em!;lfl!;lcr!;QTn +!7LoHm/bd$J,~> +!BU8[l0SEM!;lcr!<3#o!;lcr!;?Em!;c]q!;uis!<3#o!;QTk!;6?l!;ZWp!;uis!<)ot!;uis +!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;QQo!;lcr!<)ot!<2uu!;?Em!;QQo!;uis!;c]q +!;lfl!;ulr!;?Em!;lcr!;uis!;$3j!;uis!;ulr!;lfl!;QTk!;HKn!;lcr!<2uu!;uis!;c]q +!;HKn!;QQo!:0Xb!;c]q!;uis!;?Em!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr!;lcr +!<)ot!;uis!;QQo!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;?Em!;lfl!;lcr!;QTn +!7LoHklK'jJ,~> +!B:&Xj6ZdG!;lcr!<3#o!;lcr!;?Em!;c]q!;uis!<3#o!;QTk!;6?l!;ZWp!;uis!<)ot!;uis +!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;QQo!;lcr!<)ot!<2uu!;?Em!;QQo!;uis!;c]q +!;lfl!;ulr!;?Em!;lcr!;uis!;$3j!;uis!;ulr!;lfl!;QTk!;HKn!;lcr!<2uu!;uis!;c]q +!;HKn!;QQo!:0Xb!;c]q!;uis!;?Em!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr!;lcr +!<)ot!;uis!;QQo!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;?Em!;lfl!;lcr!;QTn +!7LoHirR%VJ,~> +!BpJ^mHjiQ!;lcr!<2uu!;-9k!;?Em!;c]q!;uis!<2uu!:p-i!;uis!;6?l!;ZWp!;uis!<)ot +!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;QQo!;lcr!<)ot!<2uu!;?Em!;QQo!;uis +!;c]q!;lcr!:p0i!;QQo!;lcr!;uis!;$3j!;uis!;ZZp!<)ot!:p-i!;uis!;HKn!;lcr!<2uu +!;uis!;c]q!;HKn!;QQo!:0Xb!;c]q!;uis!;?Em!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em +!;lcr!;lcr!<)ot!;uis!;QTj!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;?Em!;lcr!;-9k +!;6Bl!7_&Jm/bd$J,~> +!BU8[l0SEM!;lcr!<2uu!;-9k!;?Em!;c]q!;uis!<2uu!:p-i!;uis!;6?l!;ZWp!;uis!<)ot +!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;QQo!;lcr!<)ot!<2uu!;?Em!;QQo!;uis +!;c]q!;lcr!:p0i!;QQo!;lcr!;uis!;$3j!;uis!;ZZp!<)ot!:p-i!;uis!;HKn!;lcr!<2uu +!;uis!;c]q!;HKn!;QQo!:0Xb!;c]q!;uis!;?Em!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em +!;lcr!;lcr!<)ot!;uis!;QTj!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;?Em!;lcr!;-9k +!;6Bl!7_&JklK'jJ,~> +!B:&Xj6ZdG!;lcr!<2uu!;-9k!;?Em!;c]q!;uis!<2uu!:p-i!;uis!;6?l!;ZWp!;uis!<)ot +!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;QQo!;lcr!<)ot!<2uu!;?Em!;QQo!;uis +!;c]q!;lcr!:p0i!;QQo!;lcr!;uis!;$3j!;uis!;ZZp!<)ot!:p-i!;uis!;HKn!;lcr!<2uu +!;uis!;c]q!;HKn!;QQo!:0Xb!;c]q!;uis!;?Em!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em +!;lcr!;lcr!<)ot!;uis!;QTj!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;?Em!;lcr!;-9k +!;6Bl!7_&JirR%VJ,~> +!BpJ^mHjiQ!;lcr!<2uu!;-9k!;?Em!;c]q!;uis!<2uu!:p-i!;uis!;6?l!;ZWp!;uis!<)ot +!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;QQo!;lcr!;uiu!<3&lrr<&orr<&srr<&q +rr<&rrr<&mrr<&srr<&prr<&rrr<&srr<&jrr<&srr<&trr<&srr<&urr<&irr<&srr<&nrr<&r +rr<&urr<&srr<&qrr<&nrr<&orr<&brr<&qrr<&srr<&mrr<&prr<&srr<&trr<&srr<&urr<&k +rr<&mrr<&rrr<&rrr<&trr<&srr<&prr<&qrr<&trrW9$rrDio!!)or!!)or!!*#u!!*#u!!*#u +!!)`m!!)or!!)Zk!!)ip!!)rs!!(RLrp9a;4b*~> +!BU8[l0SEM!;lcr!<2uu!;-9k!;?Em!;c]q!;uis!<2uu!:p-i!;uis!;6?l!;ZWp!;uis!<)ot +!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;QQo!;lcr!;uiu!<3&lrr<&orr<&srr<&q +rr<&rrr<&mrr<&srr<&prr<&rrr<&srr<&jrr<&srr<&trr<&srr<&urr<&irr<&srr<&nrr<&r +rr<&urr<&srr<&qrr<&nrr<&orr<&brr<&qrr<&srr<&mrr<&prr<&srr<&trr<&srr<&urr<&k +rr<&mrr<&rrr<&rrr<&trr<&srr<&prr<&qrr<&trrW9$rrDio!!)or!!)or!!*#u!!*#u!!*#u +!!)`m!!)or!!)Zk!!)ip!!)rs!!(RLrojI/3e.~> +!B:&Xj6ZdG!;lcr!<2uu!;-9k!;?Em!;c]q!;uis!<2uu!:p-i!;uis!;6?l!;ZWp!;uis!<)ot +!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;QQo!;lcr!;uiu!<3&lrr<&orr<&srr<&q +rr<&rrr<&mrr<&srr<&prr<&rrr<&srr<&jrr<&srr<&trr<&srr<&urr<&irr<&srr<&nrr<&r +rr<&urr<&srr<&qrr<&nrr<&orr<&brr<&qrr<&srr<&mrr<&prr<&srr<&trr<&srr<&urr<&k +rr<&mrr<&rrr<&rrr<&trr<&srr<&prr<&qrr<&trrW9$rrDio!!)or!!)or!!*#u!!*#u!!*#u +!!)`m!!)or!!)Zk!!)ip!!)rs!!(RLro4$s2h1~> +!BpJ^mHacP!<)rt!<)ot!<)rt!;lcr!;?Em!;c]q!;uis!<)ot!<)rt!;ZWp!<)rt!;6?l!;ZWp +!<)rt!<)ot!;uis!<)ot!<)rt!;lcr!<)ot!;lcr!;c]q!<)ot!;uis!;uis!;QTo!<)ot!;lct +!<3&lrr<&orr<&ts8N)qrr<&qrr<&ts8N)ts8N)trr<&orr<&trr<&rrr<&jrr<&ts8N)ts8N)t +rr<&trr<&ts8N)prr<&ts8N)ns8N)trr<&trr<&ts8N)qrr<&nrr<&orr<&trr<&grr<&qrr<&s +rr<&mrr<&prr<&ts8N)trr<&srr<&trr<&ts8N)rrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&p +rr<&qrr<&urr<&trr<&prr<&qrr<&trr<&trr<&urr<&urr<&mrr<&qrr<&ts8N)rrr<&trr<&u +s8N)trr<&Ls8MBdeieN~> +!BU8[l0J?L!<)rt!<)ot!<)rt!;lcr!;?Em!;c]q!;uis!<)ot!<)rt!;ZWp!<)rt!;6?l!;ZWp +!<)rt!<)ot!;uis!<)ot!<)rt!;lcr!<)ot!;lcr!;c]q!<)ot!;uis!;uis!;QTo!<)ot!;lct +!<3&lrr<&orr<&ts8N)qrr<&qrr<&ts8N)ts8N)trr<&orr<&trr<&rrr<&jrr<&ts8N)ts8N)t +rr<&trr<&ts8N)prr<&ts8N)ns8N)trr<&trr<&ts8N)qrr<&nrr<&orr<&trr<&grr<&qrr<&s +rr<&mrr<&prr<&ts8N)trr<&srr<&trr<&ts8N)rrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&p +rr<&qrr<&urr<&trr<&prr<&qrr<&trr<&trr<&urr<&urr<&mrr<&qrr<&ts8N)rrr<&trr<&u +s8N)trr<&Ls8M6`c8pI~> +!B:&Xj6Q^F!<)rt!<)ot!<)rt!;lcr!;?Em!;c]q!;uis!<)ot!<)rt!;ZWp!<)rt!;6?l!;ZWp +!<)rt!<)ot!;uis!<)ot!<)rt!;lcr!<)ot!;lcr!;c]q!<)ot!;uis!;uis!;QTo!<)ot!;lct +!<3&lrr<&orr<&ts8N)qrr<&qrr<&ts8N)ts8N)trr<&orr<&trr<&rrr<&jrr<&ts8N)ts8N)t +rr<&trr<&ts8N)prr<&ts8N)ns8N)trr<&trr<&ts8N)qrr<&nrr<&orr<&trr<&grr<&qrr<&s +rr<&mrr<&prr<&ts8N)trr<&srr<&trr<&ts8N)rrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&p +rr<&qrr<&urr<&trr<&prr<&qrr<&trr<&trr<&urr<&urr<&mrr<&qrr<&ts8N)rrr<&trr<&u +s8N)trr<&Ls8M$Z_`*)~> +!BpJ^mHX`M!!<0#!<)rr!;lfm!<)ro!<3#t!<3#t!<)rr!;?Hk!!*&u!;ZZk!;ulq!!N<%!<<)u +!<3#t!<)rr!;QTm!<)ro!;ulq!;ulr!<3#t!;c`q!!*&t!;ZWp!;?Hh!;lfp!!<0#!<3#p!;ulq +!;lcs!<;utpAb'kr;ZTnpAb'k!ri6#rr3!!s8;rps8;rks8;ots8E#ps8N'!s8;rps8;p!rr<&u +s7u`os7u`ls8;rgs7u`ps8E#ts8E#os7u`ns8;p#rr<'!s8E#ts8E#ss8;rms8;rrs7u`ns8;rq +s8E#ts8E#qs8;rss8;ots8E#us8E#ss7u`ns8;rrs8E#us8N*!s8N)qs7u`ns8;rms8;rrrrE-" +r;b@Irp9a;4b*~> +!BU8[l0A +!B:&Xj6H[C!!<0#!<)rr!;lfm!<)ro!<3#t!<3#t!<)rr!;?Hk!!*&u!;ZZk!;ulq!!N<%!<<)u +!<3#t!<)rr!;QTm!<)ro!;ulq!;ulr!<3#t!;c`q!!*&t!;ZWp!;?Hh!;lfp!!<0#!<3#p!;ulq +!;lcs!<;utpAb'kr;ZTnpAb'k!ri6#rr3!!s8;rps8;rks8;ots8E#ps8N'!s8;rps8;p!rr<&u +s7u`os7u`ls8;rgs7u`ps8E#ts8E#os7u`ns8;p#rr<'!s8E#ts8E#ss8;rms8;rrs7u`ns8;rq +s8E#ts8E#qs8;rss8;ots8E#us8E#ss7u`ns8;rrs8E#us8N*!s8N)qs7u`ns8;rms8;rrrrE-" +r;b@Iro4$s2h1~> +!BpJ^m=G;:rr<%Ms+13$s.98im/bd$J,~> +!BU8[l%/l6rr<%Ms+13$s.98iklK'jJ,~> +!B:&Xj+760rr<%Ms+13$s.98iirR%VJ,~> +!BpJ^m=G;;rr<%Ms+13$s.02hm/bd$J,~> +!BU8[l%/l7rr<%Ms+13$s.02hklK'jJ,~> +!B:&Xj+761rr<%Ms+13$s.02hirR%VJ,~> +!BpJ^m=G;;rr<%Ms+13$s.02hm/bd$J,~> +!BU8[l%/l7rr<%Ms+13$s.02hklK'jJ,~> +!B:&Xj+761rr<%Ms+13$s.02hirR%VJ,~> +!BpJ^m=G;>s82kJs+13$s.98im/bd$J,~> +!BU8[l%/l:s82kJs+13$s.98iklK'jJ,~> +!B:&Xj+764s82kJs+13$s.98iirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs.fVm!:'Ua!;- +!BU8[l%/kcs.fVm!:'Ua!;- +!B:&Xj+75]s.fVm!:'Ua!;- +!BpJ^m=G9;!2TVp!7LlI!4r11!;HKn!9sL`!;6?l!8%5N!;?Em!.k0's8MBdeieN~> +!BU8[l%/j7!2TVp!7LlI!4r11!;HKn!9sL`!;6?l!8%5N!;?Em!.k0's8M6`c8pI~> +!B:&Xj+741!2TVp!7LlI!4r11!;HKn!9sL`!;6?l!8%5N!;?Em!.k0's8M$Z_`*)~> +!BpJ^m=G9;!2TVp!7LlI!4r11!;HKn!9sL`!;?Em!7q/M!;?Em!.k0's8MBdeieN~> +!BU8[l%/j7!2TVp!7LlI!4r11!;HKn!9sL`!;?Em!7q/M!;?Em!.k0's8M6`c8pI~> +!B:&Xj+741!2TVp!7LlI!4r11!;HKn!9sL`!;?Em!7q/M!;?Em!.k0's8M$Z_`*)~> +!BpJ^m=G9;!.k1Brr<&&rr<&`rr<&mrr<&Mrr<%Ms+14Fs8MBdeieN~> +!BU8[l%/j7!.k1Brr<&&rr<&`rr<&mrr<&Mrr<%Ms+14Fs8M6`c8pI~> +!B:&Xj+741!.k1Brr<&&rr<&`rr<&mrr<&Mrr<%Ms+14Fs8M$Z_`*)~> +!BpJ^mHjlP!<3#t!<)rr!;uls!<)rt!;HNl!!3*"r;Z]qr;Zcs!<;utrVuisrr;rtrVufrr;Z`r +!<<#ur;ZTnp](0lr;Z`rs8W&urr;uu!<;utrVuis!<<#uqu?TpqZ$Ko!WN/ts8;ourrDusrW)co +r;ccqrr<'!r;c`pr;Zlu!;QTj!;ulq!;6Bj!!3*"r;Z]qrVult#6+Z's8N'!rr;uu!<;utqu?Wq +p\t3nq>^BnqZ$Ko!WN/ps7u`ps8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccqrr<'! +r;c`pr;Zlu!.k0Ks8MBdeieN~> +!BU8[l0SHL!<3#t!<)rr!;uls!<)rt!;HNl!!3*"r;Z]qr;Zcs!<;utrVuisrr;rtrVufrr;Z`r +!<<#ur;ZTnp](0lr;Z`rs8W&urr;uu!<;utrVuis!<<#uqu?TpqZ$Ko!WN/ts8;ourrDusrW)co +r;ccqrr<'!r;c`pr;Zlu!;QTj!;ulq!;6Bj!!3*"r;Z]qrVult#6+Z's8N'!rr;uu!<;utqu?Wq +p\t3nq>^BnqZ$Ko!WN/ps7u`ps8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccqrr<'! +r;c`pr;Zlu!.k0Ks8M6`c8pI~> +!B:&Xj6ZgF!<3#t!<)rr!;uls!<)rt!;HNl!!3*"r;Z]qr;Zcs!<;utrVuisrr;rtrVufrr;Z`r +!<<#ur;ZTnp](0lr;Z`rs8W&urr;uu!<;utrVuis!<<#uqu?TpqZ$Ko!WN/ts8;ourrDusrW)co +r;ccqrr<'!r;c`pr;Zlu!;QTj!;ulq!;6Bj!!3*"r;Z]qrVult#6+Z's8N'!rr;uu!<;utqu?Wq +p\t3nq>^BnqZ$Ko!WN/ps7u`ps8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccqrr<'! +r;c`pr;Zlu!.k0Ks8M$Z_`*)~> +!BpJ^mHacP!;uis!<)ot!<)ot!;uis!;uis!;QQo!<)rt!<)ot!<)ot!;uls!<)ot!<)ot!;uis +!<)ot!<)ot!;lfr!<2uu!;lcr!;-9k!<)ot!;uis!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot +!;uis!<)rt!<)ot!<)rt!;c]q!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!;?Em!;ZWp!<)ot!;HKn +!<)rt!<)ot!<)ot!<)rt!<<*!!<<'!!<3#u!<)ot!;c]q!;HKn!;c]q!<)ot!;uis!<)rt!;?Em +!;ZWp!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!.k0K +s8MBdeieN~> +!BU8[l0J?L!;uis!<)ot!<)ot!;uis!;uis!;QQo!<)rt!<)ot!<)ot!;uls!<)ot!<)ot!;uis +!<)ot!<)ot!;lfr!<2uu!;lcr!;-9k!<)ot!;uis!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot +!;uis!<)rt!<)ot!<)rt!;c]q!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!;?Em!;ZWp!<)ot!;HKn +!<)rt!<)ot!<)ot!<)rt!<<*!!<<'!!<3#u!<)ot!;c]q!;HKn!;c]q!<)ot!;uis!<)rt!;?Em +!;ZWp!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!.k0K +s8M6`c8pI~> +!B:&Xj6Q^F!;uis!<)ot!<)ot!;uis!;uis!;QQo!<)rt!<)ot!<)ot!;uls!<)ot!<)ot!;uis +!<)ot!<)ot!;lfr!<2uu!;lcr!;-9k!<)ot!;uis!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot +!;uis!<)rt!<)ot!<)rt!;c]q!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!;?Em!;ZWp!<)ot!;HKn +!<)rt!<)ot!<)ot!<)rt!<<*!!<<'!!<3#u!<)ot!;c]q!;HKn!;c]q!<)ot!;uis!<)rt!;?Em +!;ZWp!;uis!<)rt!<)ot!<)ot!<)rt!;lcr!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!.k0K +s8M$Z_`*)~> +!BpJ^mHacP!;uis!<2uu!;lcr!<)ot!;uis!;ZWp!;lcr!<2uu!;lcr!<)ot!;uis!;uis!<2uu +!<)ot!;lcr!;uis!;?Em!;6?l!;lcr!;uj!!<<'!qu6Wrqu6WrrVlitq>UEpqu6WrrVlitr;Q`s +rVlitr;Q`sqYpNqqu6Wrqu6WrrVlitr;Q`srVlitr;Q`spAY*mqYpNqqu6Wrq>UEpqu6Wrrr2ru +qu6Wrrr2rurr2rurr2rurr2ruqu6Wrqu6Wrp\t3nqu6Wrqu6Wrrr2ruqu6WrpAY*mq>UEpr;Q`s +rVlitr;Q`srr2ruqu6Wrqu6WrpAY*mqu6Wrqu6WrrVlitr;Q`srVlitr;Q`sJcD\Krp9a;4b*~> +!BU8[l0J?L!;uis!<2uu!;lcr!<)ot!;uis!;ZWp!;lcr!<2uu!;lcr!<)ot!;uis!;uis!<2uu +!<)ot!;lcr!;uis!;?Em!;6?l!;lcr!;uj!!<<'!qu6Wrqu6WrrVlitq>UEpqu6WrrVlitr;Q`s +rVlitr;Q`sqYpNqqu6Wrqu6WrrVlitr;Q`srVlitr;Q`spAY*mqYpNqqu6Wrq>UEpqu6Wrrr2ru +qu6Wrrr2rurr2rurr2rurr2ruqu6Wrqu6Wrp\t3nqu6Wrqu6Wrrr2ruqu6WrpAY*mq>UEpr;Q`s +rVlitr;Q`srr2ruqu6Wrqu6WrpAY*mqu6Wrqu6WrrVlitr;Q`srVlitr;Q`sJcD\KrojI/3e.~> +!B:&Xj6Q^F!;uis!<2uu!;lcr!<)ot!;uis!;ZWp!;lcr!<2uu!;lcr!<)ot!;uis!;uis!<2uu +!<)ot!;lcr!;uis!;?Em!;6?l!;lcr!;uj!!<<'!qu6Wrqu6WrrVlitq>UEpqu6WrrVlitr;Q`s +rVlitr;Q`sqYpNqqu6Wrqu6WrrVlitr;Q`srVlitr;Q`spAY*mqYpNqqu6Wrq>UEpqu6Wrrr2ru +qu6Wrrr2rurr2rurr2rurr2ruqu6Wrqu6Wrp\t3nqu6Wrqu6Wrrr2ruqu6WrpAY*mq>UEpr;Q`s +rVlitr;Q`srr2ruqu6Wrqu6WrpAY*mqu6Wrqu6WrrVlitr;Q`srVlitr;Q`sJcD\Kro4$s2h1~> +!BpJ^mHX]O!<2uu!<)ot!;lcr!<)ot!;uis!;ZWp!;HKn!;lcr!<)ot!;uis!;uis!<2uu!<)rn +!;uis!;?Em!;6Bf!;lfr!;c]q!;lcr!<)ot!;ZZj!;ulr!;ZZo!;HKn!;lcr!;lcr!<)ot!;uis +!;ulr!;$3j!;c]q!;lcr!;ZWp!;HKn!;lcr!<2uu!<2uu!<2uu!<2uu!;lcr!;lcr!;HKn!;lfl +!<2uu!;lcr!;?Em!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;ulr +!.k0Hs8MBdeieN~> +!BU8[l0A9K!<2uu!<)ot!;lcr!<)ot!;uis!;ZWp!;HKn!;lcr!<)ot!;uis!;uis!<2uu!<)rn +!;uis!;?Em!;6Bf!;lfr!;c]q!;lcr!<)ot!;ZZj!;ulr!;ZZo!;HKn!;lcr!;lcr!<)ot!;uis +!;ulr!;$3j!;c]q!;lcr!;ZWp!;HKn!;lcr!<2uu!<2uu!<2uu!<2uu!;lcr!;lcr!;HKn!;lfl +!<2uu!;lcr!;?Em!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;ulr +!.k0Hs8M6`c8pI~> +!B:&Xj6HXE!<2uu!<)ot!;lcr!<)ot!;uis!;ZWp!;HKn!;lcr!<)ot!;uis!;uis!<2uu!<)rn +!;uis!;?Em!;6Bf!;lfr!;c]q!;lcr!<)ot!;ZZj!;ulr!;ZZo!;HKn!;lcr!;lcr!<)ot!;uis +!;ulr!;$3j!;c]q!;lcr!;ZWp!;HKn!;lcr!<2uu!<2uu!<2uu!<2uu!;lcr!;lcr!;HKn!;lfl +!<2uu!;lcr!;?Em!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr!;lcr!<)ot!;uis!;ulr +!.k0Hs8M$Z_`*)~> +!BpJ^mHX]O!<2uu!<)ot!;lcr!<)ot!;uis!;ZWp!;HKn!;lcr!<)ot!;uis!;lct!<3&srr<&l +rr<&mrr<&lrr<&ks8N)qrr<&rrr<&trr<&prr<&is8N)os8N)prr<&rrr<&rrr<&trr<&srr<&p +s8N)lrr<&qrr<&rrr<&prr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&nrr<&rrr<&n +rr<&rrr<&mrr<&prr<&srr<&trr<&srr<&urr<&krr<&mrr<&rrr<&rrr<&trr<&srr<&ps8N(M +s/5nrm/bd$J,~> +!BU8[l0A9K!<2uu!<)ot!;lcr!<)ot!;uis!;ZWp!;HKn!;lcr!<)ot!;uis!;lct!<3&srr<&l +rr<&mrr<&lrr<&ks8N)qrr<&rrr<&trr<&prr<&is8N)os8N)prr<&rrr<&rrr<&trr<&srr<&p +s8N)lrr<&qrr<&rrr<&prr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&nrr<&rrr<&n +rr<&rrr<&mrr<&prr<&srr<&trr<&srr<&urr<&krr<&mrr<&rrr<&rrr<&trr<&srr<&ps8N(M +s/5nrklK'jJ,~> +!B:&Xj6HXE!<2uu!<)ot!;lcr!<)ot!;uis!;ZWp!;HKn!;lcr!<)ot!;uis!;lct!<3&srr<&l +rr<&mrr<&lrr<&ks8N)qrr<&rrr<&trr<&prr<&is8N)os8N)prr<&rrr<&rrr<&trr<&srr<&p +s8N)lrr<&qrr<&rrr<&prr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&nrr<&rrr<&n +rr<&rrr<&mrr<&prr<&srr<&trr<&srr<&urr<&krr<&mrr<&rrr<&rrr<&trr<&srr<&ps8N(M +s/5nrirR%VJ,~> +!BpJ^mHOWP!<3&srr<&rrr<&trr<&srr<&prr<&nrr<&rrr<&trr<&srr<&rrrN3#!;uis!;6?l +!;?Em!;6?l!;6?o!<<'!qu6Wrqu6WrrVlitq>UEppAY*mr;Q`srVlitr;Q`sqYpNqqu6Wrqu6Wr +rVlitr;Q`srVlitr;Q`spAY*mqYpNqqu6Wrq>UEpp\t3nqu6Wrrr2rurr2rurr2rurr2ruqu6Wr +qu6Wrp\t3nqu6Wrp\t3nqu6WrpAY*mq>UEpr;Q`srVlitr;Q`srr2ruo`"mkpAY*mqu6Wrqu6Wr +rVlitr;Q`srVlitr;Q`sJcD\Krp9a;4b*~> +!BU8[l083L!<3&srr<&rrr<&trr<&srr<&prr<&nrr<&rrr<&trr<&srr<&rrrN3#!;uis!;6?l +!;?Em!;6?l!;6?o!<<'!qu6Wrqu6WrrVlitq>UEppAY*mr;Q`srVlitr;Q`sqYpNqqu6Wrqu6Wr +rVlitr;Q`srVlitr;Q`spAY*mqYpNqqu6Wrq>UEpp\t3nqu6Wrrr2rurr2rurr2rurr2ruqu6Wr +qu6Wrp\t3nqu6Wrp\t3nqu6WrpAY*mq>UEpr;Q`srVlitr;Q`srr2ruo`"mkpAY*mqu6Wrqu6Wr +rVlitr;Q`srVlitr;Q`sJcD\KrojI/3e.~> +!B:&Xj6?RF!<3&srr<&rrr<&trr<&srr<&prr<&nrr<&rrr<&trr<&srr<&rrrN3#!;uis!;6?l +!;?Em!;6?l!;6?o!<<'!qu6Wrqu6WrrVlitq>UEppAY*mr;Q`srVlitr;Q`sqYpNqqu6Wrqu6Wr +rVlitr;Q`srVlitr;Q`spAY*mqYpNqqu6Wrq>UEpp\t3nqu6Wrrr2rurr2rurr2rurr2ruqu6Wr +qu6Wrp\t3nqu6Wrp\t3nqu6WrpAY*mq>UEpr;Q`srVlitr;Q`srr2ruo`"mkpAY*mqu6Wrqu6Wr +rVlitr;Q`srVlitr;Q`sJcD\Kro4$s2h1~> +!BpJ^mHOWP!<3&rrr<&trr<&srr<&ts8N)orr<&ts8N)trr<&trr<&srr<&srr<&qrr<&qrr<&t +s8N)srr<&mrr<&trr<&prr<&ts8N)trr<&trr<&ss8N)trr<&srr<&orr<&ts8N)ts8N)trr<&t +s8N)trr<&qrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&mrr<&trr<&urr<&trr<&nrr<&ts8N)t +rr<&trr<&trr<&urr<&urr<&us8N)trr<&qrr<&nrr<&qrr<&ts8N)trr<&ts8N)mrr<&prr<&t +s8N)trr<&srr<&trr<&ts8N)rrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&rs8N(M +s02P&m/bd$J,~> +!BU8[l083L!<3&rrr<&trr<&srr<&ts8N)orr<&ts8N)trr<&trr<&srr<&srr<&qrr<&qrr<&t +s8N)srr<&mrr<&trr<&prr<&ts8N)trr<&trr<&ss8N)trr<&srr<&orr<&ts8N)ts8N)trr<&t +s8N)trr<&qrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&mrr<&trr<&urr<&trr<&nrr<&ts8N)t +rr<&trr<&trr<&urr<&urr<&us8N)trr<&qrr<&nrr<&qrr<&ts8N)trr<&ts8N)mrr<&prr<&t +s8N)trr<&srr<&trr<&ts8N)rrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&rs8N(M +s02P&klK'jJ,~> +!B:&Xj6?RF!<3&rrr<&trr<&srr<&ts8N)orr<&ts8N)trr<&trr<&srr<&srr<&qrr<&qrr<&t +s8N)srr<&mrr<&trr<&prr<&ts8N)trr<&trr<&ss8N)trr<&srr<&orr<&ts8N)ts8N)trr<&t +s8N)trr<&qrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&mrr<&trr<&urr<&trr<&nrr<&ts8N)t +rr<&trr<&trr<&urr<&urr<&us8N)trr<&qrr<&nrr<&qrr<&ts8N)trr<&ts8N)mrr<&prr<&t +s8N)trr<&srr<&trr<&ts8N)rrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&rs8N(M +s02P&irR%VJ,~> +!BpJ^mHFQM!;ZZn!;c`o!!<0#!;QTm!;c`o!;ulr!<3#t!;lcr!;ZZn!;uln!;ZZn!;HNl!;ulr +!<<)u!<)ou!<;utrVu]oqu?Tpqu6Zss8;rqrrE-"r;ccqq>gHnr;ccqrW)rtrW)rt!^9kr;Z]q +"TJH%s8W&urr;rtrVufrq#C9mrVu]or;Z]qr;Z`rrr;rtrr3!!s8;ros8N(Ms02P&m/bd$J,~> +!BU8[l0/-I!;ZZn!;c`o!!<0#!;QTm!;c`o!;ulr!<3#t!;lcr!;ZZn!;uln!;ZZn!;HNl!;ulr +!<<)u!<)ou!<;utrVu]oqu?Tpqu6Zss8;rqrrE-"r;ccqq>gHnr;ccqrW)rtrW)rt!^9kr;Z]q +"TJH%s8W&urr;rtrVufrq#C9mrVu]or;Z]qr;Z`rrr;rtrr3!!s8;ros8N(Ms02P&klK'jJ,~> +!B:&Xj66LC!;ZZn!;c`o!!<0#!;QTm!;c`o!;ulr!<3#t!;lcr!;ZZn!;uln!;ZZn!;HNl!;ulr +!<<)u!<)ou!<;utrVu]oqu?Tpqu6Zss8;rqrrE-"r;ccqq>gHnr;ccqrW)rtrW)rt!^9kr;Z]q +"TJH%s8W&urr;rtrVufrq#C9mrVu]or;Z]qr;Z`rrr;rtrr3!!s8;ros8N(Ms02P&irR%VJ,~> +!BpJ^mHFQM!.k1Err<%Ms5*bU!.k0$s,R-Ym/bd$J,~> +!BU8[l0/-I!.k1Err<%Ms5*bU!.k0$s,R-YklK'jJ,~> +!B:&Xj66LC!.k1Err<%Ms5*bU!.k0$s,R-YirR%VJ,~> +!BpJ^mHOWN!.k1Drr<%Ms5*bU!.k0$s,R-Ym/bd$J,~> +!BU8[l083J!.k1Drr<%Ms5*bU!.k0$s,R-YklK'jJ,~> +!B:&Xj6?RD!.k1Drr<%Ms5*bU!.k0$s,R-YirR%VJ,~> +!BpJ^mHOWN!.k1Drr<%Ms5*bU!.k0$s,R-Ym/bd$J,~> +!BU8[l083J!.k1Drr<%Ms5*bU!.k0$s,R-YklK'jJ,~> +!B:&Xj6?RD!.k1Drr<%Ms5*bU!.k0$s,R-YirR%VJ,~> +!BpJ^mHjlN!.k1Fs8;qKs5F"V!.k0$s,d9[m/bd$J,~> +!BU8[l0SHJ!.k1Fs8;qKs5F"V!.k0$s,d9[klK'jJ,~> +!B:&Xj6ZgD!.k1Fs8;qKs5F"V!.k0$s,d9[irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mD],*!;?Hm!8@JN!6P9@!;?Hm!.k0Ss8;rXs8;r-s8;qKs2Y0=m/bd$J,~> +!BU8[l,E]&!;?Hm!8@JN!6P9@!;?Hm!.k0Ss8;rXs8;r-s8;qKs2Y0=klK'jJ,~> +!B:&Xj2M&u!;?Hm!8@JN!6P9@!;?Hm!.k0Ss8;rXs8;r-s8;qKs2Y0=irR%VJ,~> +!BpJ^mG7g +!BU8[l.uC8!:g*h!;?Hm!8@JN!;HNf!8[\T!;?Hm!2]_p!9=(Z!;?Em!94"Y!8IMR!8RSS!6bBB +!:9^c!.k0js8M6`c8pI~> +!B:&Xj5'b2!:g*h!;?Hm!8@JN!;HNf!8[\T!;?Hm!2]_p!9=(Z!;?Em!94"Y!8IMR!8RSS!6bBB +!:9^c!.k0js8M$Z_`*)~> +!BpJ^mHsrH!<)rm!:p0i!6Y?A!;HNf!8[\T!1Nrf!<3#u!9O4\!;?Em!94"Y!8RSS!8IMR!6bBB +!:9^c!.k0js8MBdeieN~> +!BU8[l0\ND!<)rm!:p0i!6Y?A!;HNf!8[\T!1Nrf!<3#u!9O4\!;?Em!94"Y!8RSS!8IMR!6bBB +!:9^c!.k0js8M6`c8pI~> +!B:&Xj6cm>!<)rm!:p0i!6Y?A!;HNf!8[\T!1Nrf!<3#u!9O4\!;?Em!94"Y!8RSS!8IMR!6bBB +!:9^c!.k0js8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rs!<3#q!<3#o!<)rq!;ZZn!<)rs!!*&t!;ulo!;c`q!;6Bl!<)rt!!*&u +!<<)t!<<)u!!*&t!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!6bBB!;uis!9O4\!7q/M +!8RSS!8IMR!4Dh,!.k0js8MBdeieN~> +!BU8[l0\ND!;uls!<)rs!<3#q!<3#o!<)rq!;ZZn!<)rs!!*&t!;ulo!;c`q!;6Bl!<)rt!!*&u +!<<)t!<<)u!!*&t!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!6bBB!;uis!9O4\!7q/M +!8RSS!8IMR!4Dh,!.k0js8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rs!<3#q!<3#o!<)rq!;ZZn!<)rs!!*&t!;ulo!;c`q!;6Bl!<)rt!!*&u +!<<)t!<<)u!!*&t!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!6bBB!;uis!9O4\!7q/M +!8RSS!8IMR!4Dh,!.k0js8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7lZns82los7lZps7cTns7lZls8N)ls8N*! +rr`?%!!*&u!<<)t!<<)o!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!6kHC!;c]u!<<'!!<)rt!;ulq +!;lfm!;ulr!;ZZn!;uls!!*&t!;uln!;ulq!!3*"p](0lqu?Kmq>^Hp!<;utqu?Tpq#:^Bnq#:^Bn!WN.Ns4./Km/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7lZns82los7lZps7cTns7lZls8N)ls8N*! +rr`?%!!*&u!<<)t!<<)o!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!6kHC!;c]u!<<'!!<)rt!;ulq +!;lfm!;ulr!;ZZn!;uls!!*&t!;uln!;ulq!!3*"p](0lqu?Kmq>^Hp!<;utqu?Tpq#:^Bnq#:^Bn!WN.Ns4./KklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7lZns82los7lZps7cTns7lZls8N)ls8N*! +rr`?%!!*&u!<<)t!<<)o!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!6kHC!;c]u!<<'!!<)rt!;ulq +!;lfm!;ulr!;ZZn!;uls!!*&t!;uln!;ulq!!3*"p](0lqu?Kmq>^Hp!<;utqu?Tpq#:^Bnq#:^Bn!WN.Ns4./KirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8E#us8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)u +s8N)ts8N)rs8N)ls82lps8N)ts8N)us8E#ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#ss8E#us8E#t +s8N)us8N)ts8N)Crr<&qrr<&urr<&srr<&trr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<&r +rr<&prr<&ts8N)orr<&trr<&qrr<&ks8N)trr<&trr<&trr<&prr<&qrr<&srr<&ts8N)trr<&t +rr<&trr<&ts8N*!s8N*!rr<&rrr<&qrr<&trr<&prr<&qrr<&ts8N(Ms4./Km/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8E#us8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)u +s8N)ts8N)rs8N)ls82lps8N)ts8N)us8E#ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#ss8E#us8E#t +s8N)us8N)ts8N)Crr<&qrr<&urr<&srr<&trr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<&r +rr<&prr<&ts8N)orr<&trr<&qrr<&ks8N)trr<&trr<&trr<&prr<&qrr<&srr<&ts8N)trr<&t +rr<&trr<&ts8N*!s8N*!rr<&rrr<&qrr<&trr<&prr<&qrr<&ts8N(Ms4./KklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8E#us8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)u +s8N)ts8N)rs8N)ls82lps8N)ts8N)us8E#ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#ss8E#us8E#t +s8N)us8N)ts8N)Crr<&qrr<&urr<&srr<&trr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<&r +rr<&prr<&ts8N)orr<&trr<&qrr<&ks8N)trr<&trr<&trr<&prr<&qrr<&srr<&ts8N)trr<&t +rr<&trr<&ts8N*!s8N*!rr<&rrr<&qrr<&trr<&prr<&qrr<&ts8N(Ms4./KirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZis8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)os8N)rs8N)l +s82lps8N)ts8N)us8N)ts8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;r=rr<&q +rr<&urr<&srr<&urr<&rrr<&rrr<&mrr<&rrr<&rrr<&trr<&srr<&rrr<&prr<&srr<&prr<&r +rr<&rrr<&krr<&rrrW9$rrDrr!!)lq!!)lq!!)rs!!)ut!!)rs!!*#u!!)or!!*#u!!*#u!!*#u +!!)or!!)]l!!)ip!!)lq!!)rs!!%TMec5X9!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZis8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)os8N)rs8N)l +s82lps8N)ts8N)us8N)ts8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;r=rr<&q +rr<&urr<&srr<&urr<&rrr<&rrr<&mrr<&rrr<&rrr<&trr<&srr<&rrr<&prr<&srr<&prr<&r +rr<&rrr<&krr<&rrrW9$rrDrr!!)lq!!)lq!!)rs!!)ut!!)rs!!*#u!!)or!!*#u!!*#u!!*#u +!!)or!!)]l!!)ip!!)lq!!)rs!!%TMec5X5!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZis8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)os8N)rs8N)l +s82lps8N)ts8N)us8N)ts8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;r=rr<&q +rr<&urr<&srr<&urr<&rrr<&rrr<&mrr<&rrr<&rrr<&trr<&srr<&rrr<&prr<&srr<&prr<&r +rr<&rrr<&krr<&rrrW9$rrDrr!!)lq!!)lq!!)rs!!)ut!!)rs!!*#u!!)or!!*#u!!*#u!!*#u +!!)or!!)]l!!)ip!!)lq!!)rs!!%TMec5X/!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7u`os7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N)us7lZls8N)l +s8N*!rr<&ss8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)f>rr<&q +rr<&urr<&srr<&urr<&rrr<&rrr<&mrr<&rs7lZnrr<&srr<&rrr<&os8E#lrr<&rrr<&rrr<&k +rr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)lq +qZ-Hl!!)iprW%NLdf9=6!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ss7u`os7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N)us7lZls8N)l +s8N*!rr<&ss8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)f>rr<&q +rr<&urr<&srr<&urr<&rrr<&rrr<&mrr<&rs7lZnrr<&srr<&rrr<&os8E#lrr<&rrr<&rrr<&k +rr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)lq +qZ-Hl!!)iprW%NLdf9=2!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss7u`os7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N)us7lZls8N)l +s8N*!rr<&ss8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)f>rr<&q +rr<&urr<&srr<&urr<&rrr<&rrr<&mrr<&rs7lZnrr<&srr<&rrr<&os8E#lrr<&rrr<&rrr<&k +rr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)lq +qZ-Hl!!)iprW%NLdf9=,!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)us8E#us7cTms8N)ms8N)ss8N)rs8N*!s8N)ts8N*!s7cTk +s8N)ls8N)ps8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82l@rr<&q +rr<&urr<&srr<&urr<&rrr<&rrr<&mrr<&rrr<&mrr<&srr<&rrr<&ls8N)orr<&rrr<&rrr<&k +rr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)or +!!)rs!!)ip!!)`mrr@WMeGoO8!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)us8E#us7cTms8N)ms8N)ss8N)rs8N*!s8N)ts8N*!s7cTk +s8N)ls8N)ps8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82l@rr<&q +rr<&urr<&srr<&urr<&rrr<&rrr<&mrr<&rrr<&mrr<&srr<&rrr<&ls8N)orr<&rrr<&rrr<&k +rr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)or +!!)rs!!)ip!!)`mrr@WMeGoO4!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)us8E#us7cTms8N)ms8N)ss8N)rs8N*!s8N)ts8N*!s7cTk +s8N)ls8N)ps8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82l@rr<&q +rr<&urr<&srr<&urr<&rrr<&rrr<&mrr<&rrr<&mrr<&srr<&rrr<&ls8N)orr<&rrr<&rrr<&k +rr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)or +!!)rs!!)ip!!)`mrr@WMeGoO.!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8E!"rr<&ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)t +s8N*!s8N)ss8N)rs8N)ls8N)ps8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#s +s8E#us8N)ts8N)us8N)ts8N)Brr<&srr<&trr<&srr<&urr<&rrr<&rrr<&mrr<&rrr<&mrr<&s +rr<&rrr<&prr<&srr<&prr<&rrr<&rrr<&krr<&rrrW9$rrDrr!!)lq!!)fo!W`6#qu6Wrr;Q`s +rr2ruqu6Wrrr2rurr2rurr2ruqu6Wrqu6Wrr;Q`sq>UEpqYpNqr;Q`sJcF:#rp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8E!"rr<&ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)t +s8N*!s8N)ss8N)rs8N)ls8N)ps8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#s +s8E#us8N)ts8N)us8N)ts8N)Brr<&srr<&trr<&srr<&urr<&rrr<&rrr<&mrr<&rrr<&mrr<&s +rr<&rrr<&prr<&srr<&prr<&rrr<&rrr<&krr<&rrrW9$rrDrr!!)lq!!)fo!W`6#qu6Wrr;Q`s +rr2ruqu6Wrrr2rurr2rurr2ruqu6Wrqu6Wrr;Q`sq>UEpqYpNqr;Q`sJcF:#rojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8E!"rr<&ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)t +s8N*!s8N)ss8N)rs8N)ls8N)ps8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#s +s8E#us8N)ts8N)us8N)ts8N)Brr<&srr<&trr<&srr<&urr<&rrr<&rrr<&mrr<&rrr<&mrr<&s +rr<&rrr<&prr<&srr<&prr<&rrr<&rrr<&krr<&rrrW9$rrDrr!!)lq!!)fo!W`6#qu6Wrr;Q`s +rr2ruqu6Wrrr2rurr2rurr2ruqu6Wrqu6Wrr;Q`sq>UEpqYpNqr;Q`sJcF:#ro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8)frs7? +!BU8[l0\NN!!`H'rrE'!s8E#ss8)frs7? +!B:&Xj6cmH!!`H'rrE'!s8E#ss8)frs7? +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8)frs8Duus82iss8E#ss82lqs7lZms8;rrs8;rts8;rts82is +s8E#us7lZks7u`ms8;ots8Duus8;rts8;rss8)fns82lqs7lZms8;rrs8;rts8;rts7u`:s8E#p +s8;p!rr<&ts8;rms8;rrs7u`ns8;rqs8E#ts8E#qs8;rrrrE-"r;cQkr;c`pq>g +!BU8[l0\NM!!rT)rrE'!rr<&ts8)frs8Duus82iss8E#ss82lqs7lZms8;rrs8;rts8;rts82is +s8E#us7lZks7u`ms8;ots8Duus8;rts8;rss8)fns82lqs7lZms8;rrs8;rts8;rts7u`:s8E#p +s8;p!rr<&ts8;rms8;rrs7u`ns8;rqs8E#ts8E#qs8;rrrrE-"r;cQkr;c`pq>g +!B:&Xj6cmG!!rT)rrE'!rr<&ts8)frs8Duus82iss8E#ss82lqs7lZms8;rrs8;rts8;rts82is +s8E#us7lZks7u`ms8;ots8Duus8;rts8;rss8)fns82lqs7lZms8;rrs8;rts8;rts7u`:s8E#p +s8;p!rr<&ts8;rms8;rrs7u`ns8;rqs8E#ts8E#qs8;rrrrE-"r;cQkr;c`pq>g +!BpJ^mHsrH!.k0+s8E#trr<%Rrr<&Urr<%Ms+ULPm/bd$J,~> +!BU8[l0\ND!.k0+s8E#trr<%Rrr<&Urr<%Ms+ULPklK'jJ,~> +!B:&Xj6cm>!.k0+s8E#trr<%Rrr<&Urr<%Ms+ULPirR%VJ,~> +!BpJ^mHsrH!.k0,rr<&us8E"Prr<&Vrr<%Ms+LFOm/bd$J,~> +!BU8[l0\ND!.k0,rr<&us8E"Prr<&Vrr<%Ms+LFOklK'jJ,~> +!B:&Xj6cm>!.k0,rr<&us8E"Prr<&Vrr<%Ms+LFOirR%VJ,~> +!BpJ^m=G:gs+144rr<&Vrr<%Ms+LFOm/bd$J,~> +!BU8[l%/kcs+144rr<&Vrr<%Ms+LFOklK'jJ,~> +!B:&Xj+75]s+144rr<&Vrr<%Ms+LFOirR%VJ,~> +!BpJ^m=G:gs+145s8;rYs82kJs+ULPm/bd$J,~> +!BU8[l%/kcs+145s8;rYs82kJs+ULPklK'jJ,~> +!B:&Xj+75]s+145s8;rYs82kJs+ULPirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mEtt3!9X=\!8mhV!5AL5!;?Hm!3#qt!6kKC!:Kmc!8.>O!;ZZp!7CiF!4`(-!.k1;s8MBd +eieN~> +!BU8[l-]P/!9X=\!8mhV!5AL5!;?Hm!3#qt!6kKC!:Kmc!8.>O!;ZZp!7CiF!4`(-!.k1;s8M6` +c8pI~> +!B:&Xj3do)!9X=\!8mhV!5AL5!;?Hm!3#qt!6kKC!:Kmc!8.>O!;ZZp!7CiF!4`(-!.k1;s8M$Z +_`*)~> +!BpJ^mG.a>!;lfo!9X=\!8mhV!:9a[!8[\T!;?Hm!42_#!<2uu!6bBB!:Tpf!;HKn!8d_U!;QQo +!7(TE!6bBB!:9^c!.k1;s8MBdeieN~> +!BU8[l.l=:!;lfo!9X=\!8mhV!:9a[!8[\T!;?Hm!42_#!<2uu!6bBB!:Tpf!;HKn!8d_U!;QQo +!7(TE!6bBB!:9^c!.k1;s8M6`c8pI~> +!B:&Xj4s\4!;lfo!9X=\!8mhV!:9a[!8[\T!;?Hm!42_#!<2uu!6bBB!:Tpf!;HKn!8d_U!;QQo +!7(TE!6bBB!:9^c!.k1;s8M$Z_`*)~> +!BpJ^mHsrH!;ulo!;ZZp!9O7\!6G37!8[\T!2fbr!<2uu!<2uu!<2uu!6bBB!:^!g!;?Em!8d_U +!;QQo!7(TE!6bBB!:9^c!.k1;s8MBdeieN~> +!BU8[l0\ND!;ulo!;ZZp!9O7\!6G37!8[\T!2fbr!<2uu!<2uu!<2uu!6bBB!:^!g!;?Em!8d_U +!;QQo!7(TE!6bBB!:9^c!.k1;s8M6`c8pI~> +!B:&Xj6cm>!;ulo!;ZZp!9O7\!6G37!8[\T!2fbr!<2uu!<2uu!<2uu!6bBB!:^!g!;?Em!8d_U +!;QQo!7(TE!6bBB!:9^c!.k1;s8M$Z_`*)~> +!BpJ^mHsrH!;c`o!;ZZp!;c`o!!*&u!<)rr!;uls!!*&t!<3#s!<<)u!<)rp!<)rq!;c`o!!<0# +!;QTo!<)rt!!*&u!<<)t!<<)u!!*&t!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!8%5N +!<2uu!<2uu!<2uu!6bBB!:^!g!7LlI!;QQo!7(TE!4Dh,!.k1;s8MBdeieN~> +!BU8[l0\ND!;c`o!;ZZp!;c`o!!*&u!<)rr!;uls!!*&t!<3#s!<<)u!<)rp!<)rq!;c`o!!<0# +!;QTo!<)rt!!*&u!<<)t!<<)u!!*&t!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!8%5N +!<2uu!<2uu!<2uu!6bBB!:^!g!7LlI!;QQo!7(TE!4Dh,!.k1;s8M6`c8pI~> +!B:&Xj6cm>!;c`o!;ZZp!;c`o!!*&u!<)rr!;uls!!*&t!<3#s!<<)u!<)rp!<)rq!;c`o!!<0# +!;QTo!<)rt!!*&u!<<)t!<<)u!!*&t!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!8%5N +!<2uu!<2uu!<2uu!6bBB!:^!g!7LlI!;QQo!7(TE!4Dh,!.k1;s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ps8;rns8N)rs7cTos7lZos7lZps7ZNns7lZos82los7lZis8N*! +rr`?%!!*&u!<<)t!<<)o!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!8%5N!<2uu!<2uu!<3!!!<;ut +qu?TpqZ$Ko!WN/ts8;rjs8;ourrDusr;c`pq>gHnrW)iqrr<'!r;c`pr;c]or;Zlu!;QQp!<;ut +rVuisrr;rtqZ$Qq!<;utqu?Tpq#:^Bnq#: +!BU8[l0\NN!!`H'rrE'!s8E#ps8;rns8N)rs7cTos7lZos7lZps7ZNns7lZos82los7lZis8N*! +rr`?%!!*&u!<<)t!<<)o!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!8%5N!<2uu!<2uu!<3!!!<;ut +qu?TpqZ$Ko!WN/ts8;rjs8;ourrDusr;c`pq>gHnrW)iqrr<'!r;c`pr;c]or;Zlu!;QQp!<;ut +rVuisrr;rtqZ$Qq!<;utqu?Tpq#:^Bnq#: +!B:&Xj6cmH!!`H'rrE'!s8E#ps8;rns8N)rs7cTos7lZos7lZps7ZNns7lZos82los7lZis8N*! +rr`?%!!*&u!<<)t!<<)o!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!8%5N!<2uu!<2uu!<3!!!<;ut +qu?TpqZ$Ko!WN/ts8;rjs8;ourrDusr;c`pq>gHnrW)iqrr<'!r;c`pr;c]or;Zlu!;QQp!<;ut +rVuisrr;rtqZ$Qq!<;utqu?Tpq#:^Bnq#: +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N*!s8N)qs8N)ss8E#ts8E#us8E#ss8E#us8E#ts8E#ts8;rt +s8N*!s8N)ts8N)rs8N)ss8E#ts8E#ns82lps8N)ts8N)us8E#ts8N*!s8E#ts8E#ss8N)ms8N)s +s8E#ss8E#us8E#ts8N)us8N)ts8N)Jrr<&qs8N)trr<&trr<&trr<&srr<&ts8N)trr<&trr<&n +rr<&ts8N)trr<&trr<&qrr<&mrr<&qs8N)trr<&trr<&trr<&srr<&ts8N)os8N)trr<&trr<&s +rr<&os8N)trr<&trr<&trr<&prr<&qrr<&srr<&ts8N)trr<&trr<&trr<&ts8N*!s8N*!rr<&r +rr<&qrr<&trr<&prr<%Ms6]jcm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N*!s8N)qs8N)ss8E#ts8E#us8E#ss8E#us8E#ts8E#ts8;rt +s8N*!s8N)ts8N)rs8N)ss8E#ts8E#ns82lps8N)ts8N)us8E#ts8N*!s8E#ts8E#ss8N)ms8N)s +s8E#ss8E#us8E#ts8N)us8N)ts8N)Jrr<&qs8N)trr<&trr<&trr<&srr<&ts8N)trr<&trr<&n +rr<&ts8N)trr<&trr<&qrr<&mrr<&qs8N)trr<&trr<&trr<&srr<&ts8N)os8N)trr<&trr<&s +rr<&os8N)trr<&trr<&trr<&prr<&qrr<&srr<&ts8N)trr<&trr<&trr<&ts8N*!s8N*!rr<&r +rr<&qrr<&trr<&prr<%Ms6]jcklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N*!s8N)qs8N)ss8E#ts8E#us8E#ss8E#us8E#ts8E#ts8;rt +s8N*!s8N)ts8N)rs8N)ss8E#ts8E#ns82lps8N)ts8N)us8E#ts8N*!s8E#ts8E#ss8N)ms8N)s +s8E#ss8E#us8E#ts8N)us8N)ts8N)Jrr<&qs8N)trr<&trr<&trr<&srr<&ts8N)trr<&trr<&n +rr<&ts8N)trr<&trr<&qrr<&mrr<&qs8N)trr<&trr<&trr<&srr<&ts8N)os8N)trr<&trr<&s +rr<&os8N)trr<&trr<&trr<&prr<&qrr<&srr<&ts8N)trr<&trr<&trr<&ts8N*!s8N*!rr<&r +rr<&qrr<&trr<&prr<%Ms6]jcirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N*!s8N)qs8N)ss8N)ss8N*!s8N)rs8N*!s8N)ss8N)us8E#j +s8N)rs8N)ss8N)ss8N)os82lps8N)ts8N)us8N)ts8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)us8;rDrr<&qrr<&srr<&urr<&rrr<&trr<&srr<&urr<&rrr<&prr<&rrr<&urr<&r +rr<&rrr<&mrr<&qrr<&srr<&urr<&rrr<&urr<&rrr<&orr<&rrr<&urr<&srr<&orr<&rrrW9$ +rrDrr!!)lq!!)lq!!)rs!!)ut!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)]l!!)ip!!%TM +mJm1Q!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N*!s8N)qs8N)ss8N)ss8N*!s8N)rs8N*!s8N)ss8N)us8E#j +s8N)rs8N)ss8N)ss8N)os82lps8N)ts8N)us8N)ts8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)us8;rDrr<&qrr<&srr<&urr<&rrr<&trr<&srr<&urr<&rrr<&prr<&rrr<&urr<&r +rr<&rrr<&mrr<&qrr<&srr<&urr<&rrr<&urr<&rrr<&orr<&rrr<&urr<&srr<&orr<&rrrW9$ +rrDrr!!)lq!!)lq!!)rs!!)ut!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)]l!!)ip!!%TM +mJm1M!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N*!s8N)qs8N)ss8N)ss8N*!s8N)rs8N*!s8N)ss8N)us8E#j +s8N)rs8N)ss8N)ss8N)os82lps8N)ts8N)us8N)ts8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*! +s8N)ts8N)us8;rDrr<&qrr<&srr<&urr<&rrr<&trr<&srr<&urr<&rrr<&prr<&rrr<&urr<&r +rr<&rrr<&mrr<&qrr<&srr<&urr<&rrr<&urr<&rrr<&orr<&rrr<&urr<&srr<&orr<&rrrW9$ +rrDrr!!)lq!!)lq!!)rs!!)ut!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)]l!!)ip!!%TM +mJm1G!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7lZls8N)ss8N)ss8N*!s7ZNns8N)ss8N)us8N)ps7lZls8N)s +s8N)hs8N*!rr<&ss8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)fE +rr<&qrr<&srr<&urr<&rrr<&ss8E#qs7lZjrr<&rrr<&us7lZlrr<&mrr<&qrr<&srr<&us7lZo +rr<&rrr<&orr<&rrr<&trr<&urr<&nrr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u +!!)or!!*#u!!*#u!!*#u!!)or!!)lqqZ-Hl!!%TMmJm1Q!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ss7lZls8N)ss8N)ss8N*!s7ZNns8N)ss8N)us8N)ps7lZls8N)s +s8N)hs8N*!rr<&ss8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)fE +rr<&qrr<&srr<&urr<&rrr<&ss8E#qs7lZjrr<&rrr<&us7lZlrr<&mrr<&qrr<&srr<&us7lZo +rr<&rrr<&orr<&rrr<&trr<&urr<&nrr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u +!!)or!!*#u!!*#u!!*#u!!)or!!)lqqZ-Hl!!%TMmJm1M!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss7lZls8N)ss8N)ss8N*!s7ZNns8N)ss8N)us8N)ps7lZls8N)s +s8N)hs8N*!rr<&ss8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)fE +rr<&qrr<&srr<&urr<&rrr<&ss8E#qs7lZjrr<&rrr<&us7lZlrr<&mrr<&qrr<&srr<&us7lZo +rr<&rrr<&orr<&rrr<&trr<&urr<&nrr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u +!!)or!!*#u!!*#u!!*#u!!)or!!)lqqZ-Hl!!%TMmJm1G!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZls8N)ss8N)ss8N*!s7ZNns8N)ss8N)us8N)qs7cTks8N)s +s8N)hs8N)ps8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82lGrr<&q +rr<&srr<&urr<&rrr<&ps8N)trr<&irr<&rrr<&urr<&krr<&mrr<&qrr<&srr<&urr<&nrr<&r +rr<&orr<&rrr<&trr<&urr<&nrr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u!!)or +!!*#u!!*#u!!*#u!!)or!!)or!!)rs!!)ip!!%TMmJm1Q!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZls8N)ss8N)ss8N*!s7ZNns8N)ss8N)us8N)qs7cTks8N)s +s8N)hs8N)ps8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82lGrr<&q +rr<&srr<&urr<&rrr<&ps8N)trr<&irr<&rrr<&urr<&krr<&mrr<&qrr<&srr<&urr<&nrr<&r +rr<&orr<&rrr<&trr<&urr<&nrr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u!!)or +!!*#u!!*#u!!*#u!!)or!!)or!!)rs!!)ip!!%TMmJm1M!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZls8N)ss8N)ss8N*!s7ZNns8N)ss8N)us8N)qs7cTks8N)s +s8N)hs8N)ps8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82lGrr<&q +rr<&srr<&urr<&rrr<&ps8N)trr<&irr<&rrr<&urr<&krr<&mrr<&qrr<&srr<&urr<&nrr<&r +rr<&orr<&rrr<&trr<&urr<&nrr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u!!)or +!!*#u!!*#u!!*#u!!)or!!)or!!)rs!!)ip!!%TMmJm1G!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8N)rs8N)ss8E#ts8E#us8E#ns8E#ts8E#ts8N)qs8N)s +s8N)rs8N)ss8E#ss8E#os8N)ps8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#s +s8E#us8N)ts8N)us8N)ts8N)Jrr<&qrr<&srr<&urr<&rrr<&trr<&srr<&urr<&irr<&rrr<&u +rr<&krr<&mrr<&qrr<&srr<&urr<&nrr<&rrr<&orr<&rrr<&srrN3#!;?Em!;lcu!<<'!qu6Wr +qYpNqq#:BqrrDrr!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)or!!)rs!!)ip!!%TMmJm1Q +!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8N)rs8N)ss8E#ts8E#us8E#ns8E#ts8E#ts8N)qs8N)s +s8N)rs8N)ss8E#ss8E#os8N)ps8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#s +s8E#us8N)ts8N)us8N)ts8N)Jrr<&qrr<&srr<&urr<&rrr<&trr<&srr<&urr<&irr<&rrr<&u +rr<&krr<&mrr<&qrr<&srr<&urr<&nrr<&rrr<&orr<&rrr<&srrN3#!;?Em!;lcu!<<'!qu6Wr +qYpNqq#:BqrrDrr!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)or!!)rs!!)ip!!%TMmJm1M +!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8N)rs8N)ss8E#ts8E#us8E#ns8E#ts8E#ts8N)qs8N)s +s8N)rs8N)ss8E#ss8E#os8N)ps8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#s +s8E#us8N)ts8N)us8N)ts8N)Jrr<&qrr<&srr<&urr<&rrr<&trr<&srr<&urr<&irr<&rrr<&u +rr<&krr<&mrr<&qrr<&srr<&urr<&nrr<&rrr<&orr<&rrr<&srrN3#!;?Em!;lcu!<<'!qu6Wr +qYpNqq#:BqrrDrr!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)or!!)rs!!)ip!!%TMmJm1G +!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#ts82lss82iss7lZos7lZos7lZps7cTos7lZos7ZNns7lZos7cTk +s7u`ns7cQos8;rts8;rts7cTns7lZps7lZos7lZps8;rts8;rts7lZDrr<&qrr<&srr<&trr<&t +rr<&ss8N)trr<&trr<&ts8N)orr<&ts8N)trr<&ts8N)rrr<&mrr<&qrr<&srr<&trr<&ts8N)t +rr<&ts8N)os8N)trr<&rrrN3#!;?Hm!<)ot!<)ot!<)ot!;ZWp!;QQq!<3&rrr<&srr<&trr<&t +rr<&trr<&urr<&urr<&rrr<&rrr<&ts8N)prr<%Ms6]jcm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ts82lss82iss7lZos7lZos7lZps7cTos7lZos7ZNns7lZos7cTk +s7u`ns7cQos8;rts8;rts7cTns7lZps7lZos7lZps8;rts8;rts7lZDrr<&qrr<&srr<&trr<&t +rr<&ss8N)trr<&trr<&ts8N)orr<&ts8N)trr<&ts8N)rrr<&mrr<&qrr<&srr<&trr<&ts8N)t +rr<&ts8N)os8N)trr<&rrrN3#!;?Hm!<)ot!<)ot!<)ot!;ZWp!;QQq!<3&rrr<&srr<&trr<&t +rr<&trr<&urr<&urr<&rrr<&rrr<&ts8N)prr<%Ms6]jcklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ts82lss82iss7lZos7lZos7lZps7cTos7lZos7ZNns7lZos7cTk +s7u`ns7cQos8;rts8;rts7cTns7lZps7lZos7lZps8;rts8;rts7lZDrr<&qrr<&srr<&trr<&t +rr<&ss8N)trr<&trr<&ts8N)orr<&ts8N)trr<&ts8N)rrr<&mrr<&qrr<&srr<&trr<&ts8N)t +rr<&ts8N)os8N)trr<&rrrN3#!;?Hm!<)ot!<)ot!<)ot!;ZWp!;QQq!<3&rrr<&srr<&trr<&t +rr<&trr<&urr<&urr<&rrr<&rrr<&ts8N)prr<%Ms6]jcirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&us82lss82iss7lZns8;p!rr<&ss8)frs8Duus8;rss7lZns82is +s8E#us7lZns8)fls7u`ms8;ots8Duus8;rts8;rss8)fns82lqs7lZms8;rrs8;rts8;rts7u`F +s82lqs8E#ts8E#ss8;rprrE-"r;c`pr;cNjr;Zp!!!)utr;c`pq>gKoq>gNprW)rtrW)osr;c]o +r;Zp!!!)lqrr<'!r;cZn!!)]l!s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&us82lss82iss7lZns8;p!rr<&ss8)frs8Duus8;rss7lZns82is +s8E#us7lZns8)fls7u`ms8;ots8Duus8;rts8;rss8)fns82lqs7lZms8;rrs8;rts8;rts7u`F +s82lqs8E#ts8E#ss8;rprrE-"r;c`pr;cNjr;Zp!!!)utr;c`pq>gKoq>gNprW)rtrW)osr;c]o +r;Zp!!!)lqrr<'!r;cZn!!)]l!s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&us82lss82iss7lZns8;p!rr<&ss8)frs8Duus8;rss7lZns82is +s8E#us7lZns8)fls7u`ms8;ots8Duus8;rts8;rss8)fns82lqs7lZms8;rrs8;rts8;rts7u`F +s82lqs8E#ts8E#ss8;rprrE-"r;c`pr;cNjr;Zp!!!)utr;c`pq>gKoq>gNprW)rtrW)osr;c]o +r;Zp!!!)lqrr<'!r;cZn!!)]l!s8M$Z_`*)~> +!BpJ^mHsrH!9!nW!.k0$s,d6\!;6?l!8d_U!.k0Ns8MBdeieN~> +!BU8[l0\ND!9!nW!.k0$s,d6\!;6?l!8d_U!.k0Ns8M6`c8pI~> +!B:&Xj6cm>!9!nW!.k0$s,d6\!;6?l!8d_U!.k0Ns8M$Z_`*)~> +!BpJ^mHsrH!9*tW!.k0$s,m<]!;-9k!8meV!.k0Ms8MBdeieN~> +!BU8[l0\ND!9*tW!.k0$s,m<]!;-9k!8meV!.k0Ms8M6`c8pI~> +!B:&Xj6cm>!9*tW!.k0$s,m<]!;-9k!8meV!.k0Ms8M$Z_`*)~> +!BpJ^mD],&!.k0$s,d6\!;-9k!8meV!.k0Ms8MBdeieN~> +!BU8[l,E]"!.k0$s,d6\!;-9k!8meV!.k0Ms8M6`c8pI~> +!B:&Xj2M&q!.k0$s,d6\!;-9k!8meV!.k0Ms8M$Z_`*)~> +!BpJ^mD],'!.k0$s-!E[!;?Hk!9F1X!.k0Ns8MBdeieN~> +!BU8[l,E]#!.k0$s-!E[!;?Hk!9F1X!.k0Ns8M6`c8pI~> +!B:&Xj2M&r!.k0$s-!E[!;?Hk!9F1X!.k0Ns8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mB-Bg!;?Em!.k0$s+13$s/,hqm/bd$J,~> +!BU8[l)jsc!;?Em!.k0$s+13$s/,hqklK'jJ,~> +!B:&Xj/r=]!;?Em!.k0$s+13$s/,hqirR%VJ,~> +!BpJ^mB-Bg!;?Em!.k0$s+13$s/,hqm/bd$J,~> +!BU8[l)jsc!;?Em!.k0$s+13$s/,hqklK'jJ,~> +!B:&Xj/r=]!;?Em!.k0$s+13$s/,hqirR%VJ,~> +!BpJ^mB-Bg!.k0$s+13$s-iuem/bd$J,~> +!BU8[l)jsc!.k0$s+13$s-iueklK'jJ,~> +!B:&Xj/r=]!.k0$s+13$s-iueirR%VJ,~> +!BpJ^mFqU=!;c`o!!`H'!<<'!!<)rt!;ulq!;lfm!;ulr!;ZZn!;uls!!*&t!;lfp!!3*"JcC<$ +JcC<$b5_J.!S0Da~> +!BU8[l.Z19!;c`o!!`H'!<<'!!<)rt!;ulq!;lfm!;ulr!;ZZn!;uls!!*&t!;lfp!!3*"JcC<$ +JcC<$b5_J*!R<`V~> +!B:&Xj4aP3!;c`o!!`H'!<<'!!<)rt!;ulq!;lfm!;ulr!;ZZn!;uls!!*&t!;lfp!!3*"JcC<$ +JcC<$b5_J$!Q-jH~> +!BpJ^mG%X@!<)ot!;uis!<)rt!<)ot!;uis!<)ot!<)ot!;c]q!;?Em!;c]q!<)ot!;uls!<)ot +!<)ot!<)rt!.k0$s+13$s2tB@m/bd$J,~> +!BU8[l.c4 +!B:&Xj4jS6!<)ot!;uis!<)rt!<)ot!;uis!<)ot!<)ot!;c]q!;?Em!;c]q!<)ot!;uls!<)ot +!<)ot!<)rt!.k0$s+13$s2tB@irR%VJ,~> +!BpJ^mG.^A!;lcr!<2uu!;lcr!<)ot!;uis!;QQo!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!<)ot +!;uis!.k0$s+13$s2tB@m/bd$J,~> +!BU8[l.l:=!;lcr!<2uu!;lcr!<)ot!;uis!;QQo!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!<)ot +!;uis!.k0$s+13$s2tB@klK'jJ,~> +!B:&Xj4sY7!;lcr!<2uu!;lcr!<)ot!;uis!;QQo!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!<)ot +!;uis!.k0$s+13$s2tB@irR%VJ,~> +!BpJ^mG.a;!<2uu!;lcr!<)ot!;uis!<)rp!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;ulr!.k0$ +s+13$s2Y0=m/bd$J,~> +!BU8[l.l=7!<2uu!;lcr!<)ot!;uis!<)rp!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;ulr!.k0$ +s+13$s2Y0=klK'jJ,~> +!B:&Xj4s\1!<2uu!;lcr!<)ot!;uis!<)rp!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;ulr!.k0$ +s+13$s2Y0=irR%VJ,~> +!BpJ^mG.^A!;HKn!;lcr!<)ot!;uis!<2uu!;uis!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;ZZp +!.k0$s+13$s2k +!BU8[l.l:=!;HKn!;lcr!<)ot!;uis!<2uu!;uis!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;ZZp +!.k0$s+13$s2k +!B:&Xj4sY7!;HKn!;lcr!<)ot!;uis!<2uu!;uis!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!;ZZp +!.k0$s+13$s2k +!BpJ^mG.^A!;HKn!;lcr!<)ot!;uis!<2uu!;uis!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!<)ot +!;uis!.k0$s+13$s2tB@m/bd$J,~> +!BU8[l.l:=!;HKn!;lcr!<)ot!;uis!<2uu!;uis!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!<)ot +!;uis!.k0$s+13$s2tB@klK'jJ,~> +!B:&Xj4sY7!;HKn!;lcr!<)ot!;uis!<2uu!;uis!;c]q!;?Em!;lcr!;lcr!<)ot!;uis!<)ot +!;uis!.k0$s+13$s2tB@irR%VJ,~> +!BpJ^mG%X@!<)rt!<)ot!<)rt!<)ot!<)rt!<2uu!<)rt!;c]q!<)ot!;lcr!;c]q!<)ot!;uis +!;uis!<)rt!<)ot!;lfr!.k0$s+13$s3grHm/bd$J,~> +!BU8[l.c4 +!B:&Xj4jS6!<)rt!<)ot!<)rt!<)ot!<)rt!<2uu!<)rt!;c]q!<)ot!;lcr!;c]q!<)ot!;uis +!;uis!<)rt!<)ot!;lfr!.k0$s+13$s3grHirR%VJ,~> +!BpJ^mFqU=!;c`o!!3*"r;Z]q!ri6#rr;os!<<#uqu?TprVu]or;Z]qr;Z`rrr;rtrr3!!s8;ro +s8N(Ms+13$s+13us8MBdeieN~> +!BU8[l.Z19!;c`o!!3*"r;Z]q!ri6#rr;os!<<#uqu?TprVu]or;Z]qr;Z`rrr;rtrr3!!s8;ro +s8N(Ms+13$s+13us8M6`c8pI~> +!B:&Xj4aP3!;c`o!!3*"r;Z]q!ri6#rr;os!<<#uqu?TprVu]or;Z]qr;Z`rrr;rtrr3!!s8;ro +s8N(Ms+13$s+13us8M$Z_`*)~> +!BpJ^mE5G/!.k0$s+13$s+14Ks8MBdeieN~> +!BU8[l,s#+!.k0$s+13$s+14Ks8M6`c8pI~> +!B:&Xj3%B%!.k0$s+13$s+14Ks8M$Z_`*)~> +!BpJ^mE5G/!.k0$s+13$s+14Ks8MBdeieN~> +!BU8[l,s#+!.k0$s+13$s+14Ks8M6`c8pI~> +!B:&Xj3%B%!.k0$s+13$s+14Ks8M$Z_`*)~> +!BpJ^mE5G/!.k0$s+13$s+14Ks8MBdeieN~> +!BU8[l,s#+!.k0$s+13$s+14Ks8M6`c8pI~> +!B:&Xj3%B%!.k0$s+13$s+14Ks8M$Z_`*)~> +!BpJ^mEGV/!.k0$s+13$s+14Ls8MBdeieN~> +!BU8[l-02+!.k0$s+13$s+14Ls8M6`c8pI~> +!B:&Xj37Q%!.k0$s+13$s+14Ls8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mEtt3!7(WE!2fer!;?Hm!42_*!8RVQ!1Elc!0[B\!9=+X!9F1Y!4;e*m/bd$J,~> +!BU8[l-]P/!7(WE!2fer!;?Hm!42_*!8RVQ!1Elc!0[B\!9=+X!9F1Y!4;e*klK'jJ,~> +!B:&Xj3do)!7(WE!2fer!;?Hm!42_*!8RVQ!1Elc!0[B\!9=+X!9F1Y!4;e*irR%VJ,~> +!BpJ^mG7g:!<<)s!7(WE!7_&C!8[\T!;?Hm!5AL.!<2uu!87AP!6kHC!7:`G!8%5N!;?Em!65$= +!8RSS!9*qX!4;e*m/bd$J,~> +!BU8[l.uC6!<<)s!7(WE!7_&C!8[\T!;?Hm!5AL.!<2uu!87AP!6kHC!7:`G!8%5N!;?Em!65$= +!8RSS!9*qX!4;e*klK'jJ,~> +!B:&Xj5'b0!<<)s!7(WE!7_&C!8[\T!;?Hm!5AL.!<2uu!87AP!6kHC!7:`G!8%5N!;?Em!65$= +!8RSS!9*qX!4;e*irR%VJ,~> +!BpJ^mHsrH!<)rl!;uls!7(WE!7_&C!8[\T!3uP(!<2uu!<2uu!<2uu!87AP!6kHC!7CfH!7q/M +!;?Em!6>*>!8IMR!9*qX!4;e*m/bd$J,~> +!BU8[l0\ND!<)rl!;uls!7(WE!7_&C!8[\T!3uP(!<2uu!<2uu!<2uu!87AP!6kHC!7CfH!7q/M +!;?Em!6>*>!8IMR!9*qX!4;e*klK'jJ,~> +!B:&Xj6cm>!<)rl!;uls!7(WE!7_&C!8[\T!3uP(!<2uu!<2uu!<2uu!87AP!6kHC!7CfH!7q/M +!;?Em!6>*>!8IMR!9*qX!4;e*irR%VJ,~> +!BpJ^mHsrH!;lfr!<)rt!;uls!;ZZn!<3#t!!E6$!<<#ur;Z]qrVuis!<;utrr;cor;ZWorr;os +s8W&us8W#ts8W#tq>^HprVult!<<#us8W#ts8W&u!<;utr;Z]q"TJH%s8VlprVucqq>^BnrVuis +!<;utr;ZTnir8uYrr2rurr2rurr2rug&D$Pbl7YCdJj1Hf)G^M]Dhj2g]%6RiVrlX[/^-m!S0Da~> +!BU8[l0\ND!;lfr!<)rt!;uls!;ZZn!<3#t!!E6$!<<#ur;Z]qrVuis!<;utrr;cor;ZWorr;os +s8W&us8W#ts8W#tq>^HprVult!<<#us8W#ts8W&u!<;utr;Z]q"TJH%s8VlprVucqq>^BnrVuis +!<;utr;ZTnir8uYrr2rurr2rurr2rug&D$Pbl7YCdJj1Hf)G^M]Dhj2g]%6RiVrlX[/^-i!R<`V~> +!B:&Xj6cm>!;lfr!<)rt!;uls!;ZZn!<3#t!!E6$!<<#ur;Z]qrVuis!<;utrr;cor;ZWorr;os +s8W&us8W#ts8W#tq>^HprVult!<<#us8W#ts8W&u!<;utr;Z]q"TJH%s8VlprVucqq>^BnrVuis +!<;utr;ZTnir8uYrr2rurr2rurr2rug&D$Pbl7YCdJj1Hf)G^M]Dhj2g]%6RiVrlX[/^-c!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N*!rrW9$!!)rsrrDrrq#CEpp&P-mq#LHpp]1?oq#LBnq#LHp +pAb3nr;cltr;cZnrrE*!"9AH%!<<#us8W#ts8Viorr;cos8VlprVucqqu?Hls8Viorr;coir8uY +rr2rurr2rurr3!!s8;rps8;rjs8;rmrr<&ps8;rrs8N''rr<'!rr<&ss8;rqs8N'!s8;rqs7u`n +s8;rqs8Duus8E#ss8E#ts8E#os7u`ps8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccq +rr<'!r;c`pr;Zlu!;HNl!;lfm!;HNl!!3*"r;Z]qq#:^Bn!WN0!s8N)ts8N)qrr<&rs8N)t +s8N)ss8;ourrC=Drp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N*!rrW9$!!)rsrrDrrq#CEpp&P-mq#LHpp]1?oq#LBnq#LHp +pAb3nr;cltr;cZnrrE*!"9AH%!<<#us8W#ts8Viorr;cos8VlprVucqqu?Hls8Viorr;coir8uY +rr2rurr2rurr3!!s8;rps8;rjs8;rmrr<&ps8;rrs8N''rr<'!rr<&ss8;rqs8N'!s8;rqs7u`n +s8;rqs8Duus8E#ss8E#ts8E#os7u`ps8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccq +rr<'!r;c`pr;Zlu!;HNl!;lfm!;HNl!!3*"r;Z]qq#:^Bn!WN0!s8N)ts8N)qrr<&rs8N)t +s8N)ss8;ourrC=DrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N*!rrW9$!!)rsrrDrrq#CEpp&P-mq#LHpp]1?oq#LBnq#LHp +pAb3nr;cltr;cZnrrE*!"9AH%!<<#us8W#ts8Viorr;cos8VlprVucqqu?Hls8Viorr;coir8uY +rr2rurr2rurr3!!s8;rps8;rjs8;rmrr<&ps8;rrs8N''rr<'!rr<&ss8;rqs8N'!s8;rqs7u`n +s8;rqs8Duus8E#ss8E#ts8E#os7u`ps8N)ts8N)us8N'!s8;rps8;ourrE#tq>gHnrW)cor;ccq +rr<'!r;c`pr;Zlu!;HNl!;lfm!;HNl!!3*"r;Z]qq#:^Bn!WN0!s8N)ts8N)qrr<&rs8N)t +s8N)ss8;ourrC=Dro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs82lms8N)ss8E#ss8Duus8Duus8E!#rr<'!rW)osrW)uurW)rt +rrE#trrDlprrE#trrE#tr;cltrrE*!rrE#trrDioquHZprrE#trrE&urW)rtrrE*!rW)rtrW)os +rrDcmrrDusrW)osrW)uurW)rtrrE&urrE#trrCpU!!)lqrrE#t!!)ut!!)ut!!)cn!!)ut!!)ip +!!)lq!!)ut!!)utrrE*!rrE*!!!*#u!!)ut!!)rsrrE#t!!)or!!)ip!!)ut!!)orrrE&u!!)ut +!!)rs!!)`m!!)ip!!)rs!!)utrrE#t!!)ut!!)utrrDrr!!)`m!!)lq!!)ut!!)rsrrE#t!!)ut +!!)utrrDio!!)ut!!)lq!!)Zk!!)utrrE#t!!)ut!!)ip!!)lq!!)utrrE#t!!)rs!!)lq!!)lq +!!)rs!!)ut!!)utrrC=Drp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&rs82lms8N)ss8E#ss8Duus8Duus8E!#rr<'!rW)osrW)uurW)rt +rrE#trrDlprrE#trrE#tr;cltrrE*!rrE#trrDioquHZprrE#trrE&urW)rtrrE*!rW)rtrW)os +rrDcmrrDusrW)osrW)uurW)rtrrE&urrE#trrCpU!!)lqrrE#t!!)ut!!)ut!!)cn!!)ut!!)ip +!!)lq!!)ut!!)utrrE*!rrE*!!!*#u!!)ut!!)rsrrE#t!!)or!!)ip!!)ut!!)orrrE&u!!)ut +!!)rs!!)`m!!)ip!!)rs!!)utrrE#t!!)ut!!)utrrDrr!!)`m!!)lq!!)ut!!)rsrrE#t!!)ut +!!)utrrDio!!)ut!!)lq!!)Zk!!)utrrE#t!!)ut!!)ip!!)lq!!)utrrE#t!!)rs!!)lq!!)lq +!!)rs!!)ut!!)utrrC=DrojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs82lms8N)ss8E#ss8Duus8Duus8E!#rr<'!rW)osrW)uurW)rt +rrE#trrDlprrE#trrE#tr;cltrrE*!rrE#trrDioquHZprrE#trrE&urW)rtrrE*!rW)rtrW)os +rrDcmrrDusrW)osrW)uurW)rtrrE&urrE#trrCpU!!)lqrrE#t!!)ut!!)ut!!)cn!!)ut!!)ip +!!)lq!!)ut!!)utrrE*!rrE*!!!*#u!!)ut!!)rsrrE#t!!)or!!)ip!!)ut!!)orrrE&u!!)ut +!!)rs!!)`m!!)ip!!)rs!!)utrrE#t!!)ut!!)utrrDrr!!)`m!!)lq!!)ut!!)rsrrE#t!!)ut +!!)utrrDio!!)ut!!)lq!!)Zk!!)utrrE#t!!)ut!!)ip!!)lq!!)utrrE#t!!)rs!!)lq!!)lq +!!)rs!!)ut!!)utrrC=Dro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs82lms8N)ss8N)rs8N'.rr<'!rr<'!rr<'!!!)orrrE*!rrE#t +rrE#trrDZjrrE#trW)fprrE#trrDioquHZprrE#trrE&urrE#trrE*!rrDusrrE#trrDcmrrDus +rrDrrrrE*!rrE#trrE&ur;bRO!!)lq!!)rs!!*#u!!)or!!)ip!!)or!!)lq!!)or!!)or!!*#u +!!*#u!!*#u!s&B$!;lcr!<)ot!;uis!;lcr!;-9k!;lcr!;QQo!;uis!;?Em!;ZWp!;uis!<)ot +!;uis!<2uu!;lcr!;lcr!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!;ZWp!;lcr!;lcr!;6?l +!;lcr!;QQo!;ZWp!;lcr!;lcr!<)ot!;uis!;c]q!;c]q!;uis!<)ot!;uis!6tQCm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs82lms8N)ss8N)rs8N'.rr<'!rr<'!rr<'!!!)orrrE*!rrE#t +rrE#trrDZjrrE#trW)fprrE#trrDioquHZprrE#trrE&urrE#trrE*!rrDusrrE#trrDcmrrDus +rrDrrrrE*!rrE#trrE&ur;bRO!!)lq!!)rs!!*#u!!)or!!)ip!!)or!!)lq!!)or!!)or!!*#u +!!*#u!!*#u!s&B$!;lcr!<)ot!;uis!;lcr!;-9k!;lcr!;QQo!;uis!;?Em!;ZWp!;uis!<)ot +!;uis!<2uu!;lcr!;lcr!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!;ZWp!;lcr!;lcr!;6?l +!;lcr!;QQo!;ZWp!;lcr!;lcr!<)ot!;uis!;c]q!;c]q!;uis!<)ot!;uis!6tQCklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs82lms8N)ss8N)rs8N'.rr<'!rr<'!rr<'!!!)orrrE*!rrE#t +rrE#trrDZjrrE#trW)fprrE#trrDioquHZprrE#trrE&urrE#trrE*!rrDusrrE#trrDcmrrDus +rrDrrrrE*!rrE#trrE&ur;bRO!!)lq!!)rs!!*#u!!)or!!)ip!!)or!!)lq!!)or!!)or!!*#u +!!*#u!!*#u!s&B$!;lcr!<)ot!;uis!;lcr!;-9k!;lcr!;QQo!;uis!;?Em!;ZWp!;uis!<)ot +!;uis!<2uu!;lcr!;lcr!;?Em!;lcr!;lcr!<)ot!;uis!<)ot!;uis!;ZWp!;lcr!;lcr!;6?l +!;lcr!;QQo!;ZWp!;lcr!;lcr!<)ot!;uis!;c]q!;c]q!;uis!<)ot!;uis!6tQCirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N*!rr<&ps8N)ss7ZL$rr<'!rr<'!rr<'!pAk6nrrE#trrE#t +rrDlpq#LBnrrDiorrE*!rrDfnrrE*!!!)rsrrE#trrE&urrE#trrE*!rrDcmrrDcmrrDusrrDrr +rrE*!rrE#trrE#tqZ,IP!!)lq!!)rs!!*#uq#L6jq#L9k!!)orq#LEo!!*#u!!*#u!W`9#q#LBn +!!)rs!!)or!!)ipqZ-Nn!!)cn!!*#u!!)]l!!)ip!!)rs!!)ut!!)rs!!*#u!!)Zk!!)`m!!)or +!!)or!!)ut!!)rs!!)rsrW)Zl!!)or!!)or!!)]l!!)`mqZ-Hl!!)or!!)`m!!)rs!!)lq!!)lq +!!)rs!!)rsrW(+@rp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N*!rr<&ps8N)ss7ZL$rr<'!rr<'!rr<'!pAk6nrrE#trrE#t +rrDlpq#LBnrrDiorrE*!rrDfnrrE*!!!)rsrrE#trrE&urrE#trrE*!rrDcmrrDcmrrDusrrDrr +rrE*!rrE#trrE#tqZ,IP!!)lq!!)rs!!*#uq#L6jq#L9k!!)orq#LEo!!*#u!!*#u!W`9#q#LBn +!!)rs!!)or!!)ipqZ-Nn!!)cn!!*#u!!)]l!!)ip!!)rs!!)ut!!)rs!!*#u!!)Zk!!)`m!!)or +!!)or!!)ut!!)rs!!)rsrW)Zl!!)or!!)or!!)]l!!)`mqZ-Hl!!)or!!)`m!!)rs!!)lq!!)lq +!!)rs!!)rsrW(+@rojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N*!rr<&ps8N)ss7ZL$rr<'!rr<'!rr<'!pAk6nrrE#trrE#t +rrDlpq#LBnrrDiorrE*!rrDfnrrE*!!!)rsrrE#trrE&urrE#trrE*!rrDcmrrDcmrrDusrrDrr +rrE*!rrE#trrE#tqZ,IP!!)lq!!)rs!!*#uq#L6jq#L9k!!)orq#LEo!!*#u!!*#u!W`9#q#LBn +!!)rs!!)or!!)ipqZ-Nn!!)cn!!*#u!!)]l!!)ip!!)rs!!)ut!!)rs!!*#u!!)Zk!!)`m!!)or +!!)or!!)ut!!)rs!!)rsrW)Zl!!)or!!)or!!)]l!!)`mqZ-Hl!!)or!!)`m!!)rs!!)lq!!)lq +!!)rs!!)rsrW(+@ro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N)ss8N)ss7ZL$rr<'!rr<'!rr<'!pAk6nrrE#trrE#t +rrDoqp]19mrrDiorr<-#!!)`mrrDlprrE#trrE&urrE#trrE*!rrDcmrrDcmrrDusrrDrrrrE*! +rrE#trrDrrquGUR!!)lq!!)rs!!*#u!!)Ti!!)Wj!!)or!!)cn!!*#u!!*#u!s&B$!;?Em!;uis +!;lcr!;c]q!;uis!;lcr!;HKn!<2uu!;6?l!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr +!;lcr!<)ot!;uis!;ZZp!;QQo!;lcr!;lcr!;6?l!;HKn!;uis!;ZWp!;lcr!;?Em!;uis!;c]q +!;c]q!;uis!;ZZp!6kKBm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N)ss8N)ss7ZL$rr<'!rr<'!rr<'!pAk6nrrE#trrE#t +rrDoqp]19mrrDiorr<-#!!)`mrrDlprrE#trrE&urrE#trrE*!rrDcmrrDcmrrDusrrDrrrrE*! +rrE#trrDrrquGUR!!)lq!!)rs!!*#u!!)Ti!!)Wj!!)or!!)cn!!*#u!!*#u!s&B$!;?Em!;uis +!;lcr!;c]q!;uis!;lcr!;HKn!<2uu!;6?l!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr +!;lcr!<)ot!;uis!;ZZp!;QQo!;lcr!;lcr!;6?l!;HKn!;uis!;ZWp!;lcr!;?Em!;uis!;c]q +!;c]q!;uis!;ZZp!6kKBklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N)ss8N)ss7ZL$rr<'!rr<'!rr<'!pAk6nrrE#trrE#t +rrDoqp]19mrrDiorr<-#!!)`mrrDlprrE#trrE&urrE#trrE*!rrDcmrrDcmrrDusrrDrrrrE*! +rrE#trrDrrquGUR!!)lq!!)rs!!*#u!!)Ti!!)Wj!!)or!!)cn!!*#u!!*#u!s&B$!;?Em!;uis +!;lcr!;c]q!;uis!;lcr!;HKn!<2uu!;6?l!;ZWp!;uis!<)ot!;uis!<2uu!;-9k!;?Em!;lcr +!;lcr!<)ot!;uis!;ZZp!;QQo!;lcr!;lcr!;6?l!;HKn!;uis!;ZWp!;lcr!;?Em!;uis!;c]q +!;c]q!;uis!;ZZp!6kKBirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8E#os8N*!s8N*!s8N'!s8E#ns8N)ts8N)t +s8N)ts8N'#rr<&ss8N)ts8N)ns8;rks8N)ps8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)s +s8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)Urr<&qrr<&srr<&urr<&irr<&jrr<&rrr<&nrr<&u +rr<&urrW9$rrDcm!!)rs!!)or!!)lq!!)rs!!)or!!)`m!W`6#o`"mkq>UEpr;Q`srVlitr;Q`s +rr2ruo`"mkpAY*mqu6Wrqu6WrrVlitr;Q`srVlitr;Q`sq>UEpqu6Wrqu6Wrp&>!lp\t3nr;Q`s +q>UEpqu6WrpAY*mr;Q`sqYpNqqYpNqr;Q`srVlitr;Q`sc2[e1!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8E#os8N*!s8N*!s8N'!s8E#ns8N)ts8N)t +s8N)ts8N'#rr<&ss8N)ts8N)ns8;rks8N)ps8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)s +s8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)Urr<&qrr<&srr<&urr<&irr<&jrr<&rrr<&nrr<&u +rr<&urrW9$rrDcm!!)rs!!)or!!)lq!!)rs!!)or!!)`m!W`6#o`"mkq>UEpr;Q`srVlitr;Q`s +rr2ruo`"mkpAY*mqu6Wrqu6WrrVlitr;Q`srVlitr;Q`sq>UEpqu6Wrqu6Wrp&>!lp\t3nr;Q`s +q>UEpqu6WrpAY*mr;Q`sqYpNqqYpNqr;Q`srVlitr;Q`sc2[e-!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8E#os8N*!s8N*!s8N'!s8E#ns8N)ts8N)t +s8N)ts8N'#rr<&ss8N)ts8N)ns8;rks8N)ps8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)s +s8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)Urr<&qrr<&srr<&urr<&irr<&jrr<&rrr<&nrr<&u +rr<&urrW9$rrDcm!!)rs!!)or!!)lq!!)rs!!)or!!)`m!W`6#o`"mkq>UEpr;Q`srVlitr;Q`s +rr2ruo`"mkpAY*mqu6Wrqu6WrrVlitr;Q`srVlitr;Q`sq>UEpqu6Wrqu6Wrp&>!lp\t3nr;Q`s +q>UEpqu6WrpAY*mr;Q`sqYpNqqYpNqr;Q`srVlitr;Q`sc2[e'!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7ZNns7lZos7lWps8;ots8Duus8Duus7lZps8;rts8;rss7lWp +s7ZKns7lZls8E#ms7u`ns7cQos8;rts8;rts7cTns7lZps7lZos7lZps8;rts8;rts7lZOrr<&q +rr<&srr<&trr<&ts8N)orr<&ts8N)qrr<&qrr<&ts8N)urr<&urr<&urr<&urr<&ts8N)trr<&s +rr<&rrr<&trrW9$rrE#trrDrr!!)`m!W`6#o`"mkq>UEprVultrVlitr;Q`srVlitrVultqu6Wr +rVlitqu6WrqYpNqrVlitr;Q`sr;Q`srVultrVlitq#:UEpqYpNqrVultrVlitrVultqYpNqqYpNqrVultrVultrVlitqu?Zrec5X9!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7ZNns7lZos7lWps8;ots8Duus8Duus7lZps8;rts8;rss7lWp +s7ZKns7lZls8E#ms7u`ns7cQos8;rts8;rts7cTns7lZps7lZos7lZps8;rts8;rts7lZOrr<&q +rr<&srr<&trr<&ts8N)orr<&ts8N)qrr<&qrr<&ts8N)urr<&urr<&urr<&urr<&ts8N)trr<&s +rr<&rrr<&trrW9$rrE#trrDrr!!)`m!W`6#o`"mkq>UEprVultrVlitr;Q`srVlitrVultqu6Wr +rVlitqu6WrqYpNqrVlitr;Q`sr;Q`srVultrVlitq#:UEpqYpNqrVultrVlitrVultqYpNqqYpNqrVultrVultrVlitqu?Zrec5X5!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7ZNns7lZos7lWps8;ots8Duus8Duus7lZps8;rts8;rss7lWp +s7ZKns7lZls8E#ms7u`ns7cQos8;rts8;rts7cTns7lZps7lZos7lZps8;rts8;rts7lZOrr<&q +rr<&srr<&trr<&ts8N)orr<&ts8N)qrr<&qrr<&ts8N)urr<&urr<&urr<&urr<&ts8N)trr<&s +rr<&rrr<&trrW9$rrE#trrDrr!!)`m!W`6#o`"mkq>UEprVultrVlitr;Q`srVlitrVultqu6Wr +rVlitqu6WrqYpNqrVlitr;Q`sr;Q`srVultrVlitq#:UEpqYpNqrVultrVlitrVultqYpNqqYpNqrVultrVultrVlitqu?Zrec5X/!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7ZNns7lZms8)crs8;ots8Duus8E#ts8)frs8;rts8;rrs82lq +s82iss8Duus7lZls8N)ms7u`ms8;ots8Duus8;rts8;rss8)fns82lqs7lZms8;rrs8;rts8;rt +s7u`Qs82lqs8E#ts8E#ss8;rjs8;rps7u`ns8;rrs8E#us8N*!s8N)us8;rqs8E#ts8E#qs8;rr +s8;ots8E#us7u`krr<&ls7u`ns8;p#rr<'!s8E#ts8E#ss8;rms8;rrs7u`ns8;rqs8E#ts8E#t +rrE-"r;cQkr;c`pq>g9ir;c`pr;ZitrW)rtq>gHnr;c]or;Zp!!!*#uq>gHnr;Zp!!!*#u! +!BU8[l0\NM!!rT)rrE'!rr<&ts7ZNns7lZms8)crs8;ots8Duus8E#ts8)frs8;rts8;rrs82lq +s82iss8Duus7lZls8N)ms7u`ms8;ots8Duus8;rts8;rss8)fns82lqs7lZms8;rrs8;rts8;rt +s7u`Qs82lqs8E#ts8E#ss8;rjs8;rps7u`ns8;rrs8E#us8N*!s8N)us8;rqs8E#ts8E#qs8;rr +s8;ots8E#us7u`krr<&ls7u`ns8;p#rr<'!s8E#ts8E#ss8;rms8;rrs7u`ns8;rqs8E#ts8E#t +rrE-"r;cQkr;c`pq>g9ir;c`pr;ZitrW)rtq>gHnr;c]or;Zp!!!*#uq>gHnr;Zp!!!*#u! +!B:&Xj6cmG!!rT)rrE'!rr<&ts7ZNns7lZms8)crs8;ots8Duus8E#ts8)frs8;rts8;rrs82lq +s82iss8Duus7lZls8N)ms7u`ms8;ots8Duus8;rts8;rss8)fns82lqs7lZms8;rrs8;rts8;rt +s7u`Qs82lqs8E#ts8E#ss8;rjs8;rps7u`ns8;rrs8E#us8N*!s8N)us8;rqs8E#ts8E#qs8;rr +s8;ots8E#us7u`krr<&ls7u`ns8;p#rr<'!s8E#ts8E#ss8;rms8;rrs7u`ns8;rqs8E#ts8E#t +rrE-"r;cQkr;c`pq>g9ir;c`pr;ZitrW)rtq>gHnr;c]or;Zp!!!*#uq>gHnr;Zp!!!*#u! +!BpJ^mHsrH!13`c!.k0$s69O`!.k0$s6BX`m/bd$J,~> +!BU8[l0\ND!13`c!.k0$s69O`!.k0$s6BX`klK'jJ,~> +!B:&Xj6cm>!13`c!.k0$s69O`!.k0$s6BX`irR%VJ,~> +!BpJ^mHsrH!1 +!BU8[l0\ND!1 +!B:&Xj6cm>!1 +!BpJ^m=G<6s8)eIs+149rr<%Ms+147s8MBdeieN~> +!BU8[l%/m2s8)eIs+149rr<%Ms+147s8M6`c8pI~> +!B:&Xj+77,s8)eIs+149rr<%Ms+147s8M$Z_`*)~> +!BpJ^m=G<6s8)eIs+14 +!BU8[l%/m2s8)eIs+14 +!B:&Xj+77,s8)eIs+14 +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mEYb3!9O7Y!;QTo!;QTk!;uls!9F1[!;?Hm!.k0Bs8;r`s8;qKs+146s8MBdeieN~> +!BU8[l-B>/!9O7Y!;QTo!;QTk!;uls!9F1[!;?Hm!.k0Bs8;r`s8;qKs+146s8M6`c8pI~> +!B:&Xj3I])!9O7Y!;QTo!;QTk!;uls!9F1[!;?Hm!.k0Bs8;r`s8;qKs+146s8M$Z_`*)~> +!BpJ^mFqU=!!<0#!;uls!9O7Y!;QTo!;ZZk!;uls!9F1[!;?Hm!0.$X!<3#t!9*qX!8IMR!9*qX +!;HKn!;HKn!1Nof!.k0os8MBdeieN~> +!BU8[l.Z19!!<0#!;uls!9O7Y!;QTo!;ZZk!;uls!9F1[!;?Hm!0.$X!<3#t!9*qX!8IMR!9*qX +!;HKn!;HKn!1Nof!.k0os8M6`c8pI~> +!B:&Xj4aP3!!<0#!;uls!9O7Y!;QTo!;ZZk!;uls!9F1[!;?Hm!0.$X!<3#t!9*qX!8IMR!9*qX +!;HKn!;HKn!1Nof!.k0os8M$Z_`*)~> +!BpJ^mHsrH!;ull!8IPR!:Kme!8.>O!.k1Mrr<&srr<&Wrr<&Rrr<&Xrr<&nrr<&orr<%err<%M +s31NBm/bd$J,~> +!BU8[l0\ND!;ull!8IPR!:Kme!8.>O!.k1Mrr<&srr<&Wrr<&Rrr<&Xrr<&nrr<&orr<%err<%M +s31NBklK'jJ,~> +!B:&Xj6cm>!;ull!8IPR!:Kme!8.>O!.k1Mrr<&srr<&Wrr<&Rrr<&Xrr<&nrr<&orr<%err<%M +s31NBirR%VJ,~> +!BpJ^mHsrH!;uls!<)rs!<<)s!<)rs!!E6$!<<#us8W&u!<;utqZ$Qqqu?Qoqu?Hlrr;lrqZ$Ko +!ri6#rVu`prr;corVucqq>^BnrVuis!<;utV#LDpr;Q`si;WcW])Ma1mJd.dJcC<$j8],G!S0Da~> +!BU8[l0\ND!;uls!<)rs!<<)s!<)rs!!E6$!<<#us8W&u!<;utqZ$Qqqu?Qoqu?Hlrr;lrqZ$Ko +!ri6#rVu`prr;corVucqq>^BnrVuis!<;utV#LDpr;Q`si;WcW])Ma1mJd.dJcC<$j8],C!R<`V~> +!B:&Xj6cm>!;uls!<)rs!<<)s!<)rs!!E6$!<<#us8W&u!<;utqZ$Qqqu?Qoqu?Hlrr;lrqZ$Ko +!ri6#rVu`prr;corVucqq>^BnrVuis!<;utV#LDpr;Q`si;WcW])Ma1mJd.dJcC<$j8],=!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s82lqs7QEms7cTks8N)rs82los7lZos82los7lZo +s7lZps7lZns82los7lZps7cSjrr<&srr<&ss8;rqs8E#ts8E#os7u`ns8;rjs8;ourrDusrW)lr +rr<9'!!*'!!!*#urr<'!r;cZn!!)iprW)fpq>gNprW)rtrW)`nr;ccqrW)uurW)rtrr<'!r;cfr +rVururW)iqr;c]or;Zlu!;ulq!!3*"r;Z`rq>^Bnr;Zcs!<;utqu?Tp!WN.Ns7$'fm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s82lqs7QEms7cTks8N)rs82los7lZos82los7lZo +s7lZps7lZns82los7lZps7cSjrr<&srr<&ss8;rqs8E#ts8E#os7u`ns8;rjs8;ourrDusrW)lr +rr<9'!!*'!!!*#urr<'!r;cZn!!)iprW)fpq>gNprW)rtrW)`nr;ccqrW)uurW)rtrr<'!r;cfr +rVururW)iqr;c]or;Zlu!;ulq!!3*"r;Z`rq>^Bnr;Zcs!<;utqu?Tp!WN.Ns7$'fklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s82lqs7QEms7cTks8N)rs82los7lZos82los7lZo +s7lZps7lZns82los7lZps7cSjrr<&srr<&ss8;rqs8E#ts8E#os7u`ns8;rjs8;ourrDusrW)lr +rr<9'!!*'!!!*#urr<'!r;cZn!!)iprW)fpq>gNprW)rtrW)`nr;ccqrW)uurW)rtrr<'!r;cfr +rVururW)iqr;c]or;Zlu!;ulq!!3*"r;Z`rq>^Bnr;Zcs!<;utqu?Tp!WN.Ns7$'firR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss82lls8N)ss8Duus8E!$rr<'!s8E#ts8E#rs8N)os8N)ps8N)n +s8N)ss8E#ts8E#ts8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N(qrr<&srr<&trr<&trr<&s +rr<&srr<&mrr<&prr<&trr<&nrr<&ts8N)qrr<&rs8N*!s8N*!rr<&us8N)trr<&qrr<&nrr<&o +rr<&prr<&srr<&orr<&trr<&srr<&trr<&ss8N)trr<&ss8N)urr<&trr<&trr<&srr<&ts8N)t +rr<&ts8N)qrr<&qrr<&trr<&ss8N)trr<&trr<&ts8N(Ms7$'fm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss82lls8N)ss8Duus8E!$rr<'!s8E#ts8E#rs8N)os8N)ps8N)n +s8N)ss8E#ts8E#ts8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N(qrr<&srr<&trr<&trr<&s +rr<&srr<&mrr<&prr<&trr<&nrr<&ts8N)qrr<&rs8N*!s8N*!rr<&us8N)trr<&qrr<&nrr<&o +rr<&prr<&srr<&orr<&trr<&srr<&trr<&ss8N)trr<&ss8N)urr<&trr<&trr<&srr<&ts8N)t +rr<&ts8N)qrr<&qrr<&trr<&ss8N)trr<&trr<&ts8N(Ms7$'fklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss82lls8N)ss8Duus8E!$rr<'!s8E#ts8E#rs8N)os8N)ps8N)n +s8N)ss8E#ts8E#ts8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N(qrr<&srr<&trr<&trr<&s +rr<&srr<&mrr<&prr<&trr<&nrr<&ts8N)qrr<&rs8N*!s8N*!rr<&us8N)trr<&qrr<&nrr<&o +rr<&prr<&srr<&orr<&trr<&srr<&trr<&ss8N)trr<&ss8N)urr<&trr<&trr<&srr<&ts8N)t +rr<&ts8N)qrr<&qrr<&trr<&ss8N)trr<&trr<&ts8N(Ms7$'firR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs7u`ms8N)ss8N*!s8N*!s8N*!s8N)ss8N)ss8N)os8N)ps8N)n +s8N)ss8N)ss8N)os8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N(qs7u`prr<&rrr<&trrrK'rrE*! +!;?Em!;c]q!;lcr!;QQo!;uis!;c]q!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;HKn!;QQo!;ZWp +!;uis!;ZWp!;lcr!;uj!!<<'!qu6Wrqu6WrrVlitq>UEpqu6WrrVlitr;Q`srVlitr;Q`sqYpNq +qu6Wrqu6WrrVlitr;Q`srVlitr;Q`sJcG6>rp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#qs7u`ms8N)ss8N*!s8N*!s8N*!s8N)ss8N)ss8N)os8N)ps8N)n +s8N)ss8N)ss8N)os8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N(qs7u`prr<&rrr<&trrrK'rrE*! +!;?Em!;c]q!;lcr!;QQo!;uis!;c]q!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;HKn!;QQo!;ZWp +!;uis!;ZWp!;lcr!;uj!!<<'!qu6Wrqu6WrrVlitq>UEpqu6WrrVlitr;Q`srVlitr;Q`sqYpNq +qu6Wrqu6WrrVlitr;Q`srVlitr;Q`sJcG6>rojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs7u`ms8N)ss8N*!s8N*!s8N*!s8N)ss8N)ss8N)os8N)ps8N)n +s8N)ss8N)ss8N)os8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N(qs7u`prr<&rrr<&trrrK'rrE*! +!;?Em!;c]q!;lcr!;QQo!;uis!;c]q!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;HKn!;QQo!;ZWp +!;uis!;ZWp!;lcr!;uj!!<<'!qu6Wrqu6WrrVlitq>UEpqu6WrrVlitr;Q`srVlitr;Q`sqYpNq +qu6Wrqu6WrrVlitr;Q`srVlitr;Q`sJcG6>ro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&os82lps8N)ss8N*!s8N*!s8N*!s8N)ss8N)ss8N)os8N)ps8N)n +s8N)ss8N)ns7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N(qrr<&srr<&urr<&rrr<&trrrK'rrE*! +!;?Em!;c]q!;lcr!;HNm!;HKn!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;HKn!;QQo!;QQo!<2uu +!;QTi!;lfr!;c]q!;lcr!<)ot!;ZZj!;ulr!;ZZo!;HKn!;lcr!;lcr!<)ot!;uis!;ulr!.k1; +s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&os82lps8N)ss8N*!s8N*!s8N*!s8N)ss8N)ss8N)os8N)ps8N)n +s8N)ss8N)ns7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N(qrr<&srr<&urr<&rrr<&trrrK'rrE*! +!;?Em!;c]q!;lcr!;HNm!;HKn!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;HKn!;QQo!;QQo!<2uu +!;QTi!;lfr!;c]q!;lcr!<)ot!;ZZj!;ulr!;ZZo!;HKn!;lcr!;lcr!<)ot!;uis!;ulr!.k1; +s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&os82lps8N)ss8N*!s8N*!s8N*!s8N)ss8N)ss8N)os8N)ps8N)n +s8N)ss8N)ns7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N(qrr<&srr<&urr<&rrr<&trrrK'rrE*! +!;?Em!;c]q!;lcr!;HNm!;HKn!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;HKn!;QQo!;QQo!<2uu +!;QTi!;lfr!;c]q!;lcr!<)ot!;ZZj!;ulr!;ZZo!;HKn!;lcr!;lcr!<)ot!;uis!;ulr!.k1; +s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ss8N*!s8N*!s8N*!s8N)ss8N)ss8N)os8N)p +s8N)ns8N)ss8N)os7cTms8N)ms8N)ss8N)rs8N*!s8N)ts8N(qrr<&srr<&urr<&rrr<&trrrK' +!<3'!!;?Em!;c]q!;lcr!;- +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ss8N*!s8N*!s8N*!s8N)ss8N)ss8N)os8N)p +s8N)ns8N)ss8N)os7cTms8N)ms8N)ss8N)rs8N*!s8N)ts8N(qrr<&srr<&urr<&rrr<&trrrK' +!<3'!!;?Em!;c]q!;lcr!;- +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N)ss8N)ss8N*!s8N*!s8N*!s8N)ss8N)ss8N)os8N)p +s8N)ns8N)ss8N)os7cTms8N)ms8N)ss8N)rs8N*!s8N)ts8N(qrr<&srr<&urr<&rrr<&trrrK' +!<3'!!;?Em!;c]q!;lcr!;- +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8;rss8N)ss8N)ss8N*!s8N*!s8N*!s8E#ts8E#rs8N)os8N)p +s8N)ns8N)ss8E#ss8E!"rr<&ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N(qrr<&srr<&u +rr<&rrr<&trrrK'!<3'!!;?Em!;c]q!;lcr!;QQo!;uis!;c]q!;lcr!<2uu!<2uu!<2uu!;lcr +!;lcr!;HKn!;QQo!;HKp!<3&nrr<&lrrW9$rrDrr!!)or!!)ut!!)ip!!)`m!!)rs!!)ut!!)rs +!!)lq!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!%TMnGiLT!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8;rss8N)ss8N)ss8N*!s8N*!s8N*!s8E#ts8E#rs8N)os8N)p +s8N)ns8N)ss8E#ss8E!"rr<&ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N(qrr<&srr<&u +rr<&rrr<&trrrK'!<3'!!;?Em!;c]q!;lcr!;QQo!;uis!;c]q!;lcr!<2uu!<2uu!<2uu!;lcr +!;lcr!;HKn!;QQo!;HKp!<3&nrr<&lrrW9$rrDrr!!)or!!)ut!!)ip!!)`m!!)rs!!)ut!!)rs +!!)lq!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!%TMnGiLP!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8;rss8N)ss8N)ss8N*!s8N*!s8N*!s8E#ts8E#rs8N)os8N)p +s8N)ns8N)ss8E#ss8E!"rr<&ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N(qrr<&srr<&u +rr<&rrr<&trrrK'!<3'!!;?Em!;c]q!;lcr!;QQo!;uis!;c]q!;lcr!<2uu!<2uu!<2uu!;lcr +!;lcr!;HKn!;QQo!;HKp!<3&nrr<&lrrW9$rrDrr!!)or!!)ut!!)ip!!)`m!!)rs!!)ut!!)rs +!!)lq!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!%TMnGiLJ!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7lWps8;ots8Duus8Duus7lZos7lZos7lZos7lZos7lZo +s7cQos7ZNms7lZps7lZos7lZps8;rts8;qprr<&srr<&trr<&trr<&rrr<&urr<&lrr<&trr<&u +rr<&trr<&ns8N)trr<&qrr<&rrr<&urr<&urr<&us8N)trr<&qrr<&nrr<&orr<&nrrN3#!;?Em +!<)rt!<)ot!<)ot!;uls!<)ot!;uis!;QQo!<)rt!<)rt!<)ot!<)rt!<)ot!;c]q!;c]q!<)ot +!;uis!;uis!<)rt!<)ot!;lfr!.k1Fs8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7lWps8;ots8Duus8Duus7lZos7lZos7lZos7lZos7lZo +s7cQos7ZNms7lZps7lZos7lZps8;rts8;qprr<&srr<&trr<&trr<&rrr<&urr<&lrr<&trr<&u +rr<&trr<&ns8N)trr<&qrr<&rrr<&urr<&urr<&us8N)trr<&qrr<&nrr<&orr<&nrrN3#!;?Em +!<)rt!<)ot!<)ot!;uls!<)ot!;uis!;QQo!<)rt!<)rt!<)ot!<)rt!<)ot!;c]q!;c]q!<)ot +!;uis!;uis!<)rt!<)ot!;lfr!.k1Fs8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7lWps8;ots8Duus8Duus7lZos7lZos7lZos7lZos7lZo +s7cQos7ZNms7lZps7lZos7lZps8;rts8;qprr<&srr<&trr<&trr<&rrr<&urr<&lrr<&trr<&u +rr<&trr<&ns8N)trr<&qrr<&rrr<&urr<&urr<&us8N)trr<&qrr<&nrr<&orr<&nrrN3#!;?Em +!<)rt!<)ot!<)ot!;uls!<)ot!;uis!;QQo!<)rt!<)rt!<)ot!<)rt!<)ot!;c]q!;c]q!<)ot +!;uis!;uis!<)rt!<)ot!;lfr!.k1Fs8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;rrs7lWps8;ots8Duus8E!#rr<'!r;cfrq#LEoq#LEo +q#LEoq#LBnqZ-Tpqu?`srW)osquH]qq#L?mr;cfrr;cltr;`bqrW)rtrW)osr;c]o!!*#u!!)Zk +r;ccqr;cQk! +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;rrs7lWps8;ots8Duus8E!#rr<'!r;cfrq#LEoq#LEo +q#LEoq#LBnqZ-Tpqu?`srW)osquH]qq#L?mr;cfrr;cltr;`bqrW)rtrW)osr;c]o!!*#u!!)Zk +r;ccqr;cQk! +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;rrs7lWps8;ots8Duus8E!#rr<'!r;cfrq#LEoq#LEo +q#LEoq#LBnqZ-Tpqu?`srW)osquH]qq#L?mr;cfrr;cltr;`bqrW)rtrW)osr;c]o!!*#u!!)Zk +r;ccqr;cQk! +!BpJ^mHsrH!8IPR!.k0$s3L]F!7UrJ!8meV!.k05s8MBdeieN~> +!BU8[l0\ND!8IPR!.k0$s3L]F!7UrJ!8meV!.k05s8M6`c8pI~> +!B:&Xj6cm>!8IPR!.k0$s3L]F!7UrJ!8meV!.k05s8M$Z_`*)~> +!BpJ^mHsrH!8IPR!.k0$s3L]F!7_#K!8d_U!.k05s8MBdeieN~> +!BU8[l0\ND!8IPR!.k0$s3L]F!7_#K!8d_U!.k05s8M6`c8pI~> +!B:&Xj6cm>!8IPR!.k0$s3L]F!7_#K!8d_U!.k05s8M$Z_`*)~> +!BpJ^mC`Js!.k0$s3^iH!7_#K!8d_U!.k05s8MBdeieN~> +!BU8[l+I&o!.k0$s3^iH!7_#K!8d_U!.k05s8M6`c8pI~> +!B:&Xj1PEi!.k0$s3^iH!7_#K!8d_U!.k05s8M$Z_`*)~> +!BpJ^mC`Js!.k0$s3grG!87DM!9!nU!.k07s8MBdeieN~> +!BU8[l+I&o!.k0$s3grG!87DM!9!nU!.k07s8M6`c8pI~> +!B:&Xj1PEi!.k0$s3grG!87DM!9!nU!.k07s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mD],*!;QTo!5/@3!:Tse!;6Bl!.k0Ns8N(Ms6BXa!.k17s8MBdeieN~> +!BU8[l,E]&!;QTo!5/@3!:Tse!;6Bl!.k0Ns8N(Ms6BXa!.k17s8M6`c8pI~> +!B:&Xj2M&u!;QTo!5/@3!:Tse!;6Bl!.k0Ns8N(Ms6BXa!.k17s8M$Z_`*)~> +!BpJ^mG7g +!BU8[l.uC8!:g*h!;QTo!7_&J!;ulr!;- +!B:&Xj5'b2!:g*h!;QTo!7_&J!;ulr!;- +!BpJ^mHsrH!<)rm!:p0i!;QTo!7_&J!;ulr!;- +!BU8[l0\ND!<)rm!:p0i!;QTo!7_&J!;ulr!;- +!B:&Xj6cm>!<)rm!:p0i!;QTo!7_&J!;ulr!;- +!BpJ^mHsrH!;uls!<)rs!<3#q!<3#o!<3#o!;lfp!<)rr!<<)u!<<)u!!*&t!;QTn!<3#t!<3#q +!<3#o!;ulq!!<0#!<3#u!!*&t!<)rq!;ulr!!*&t!;ulq!!*&u!4Mn-!;uis!9!kW!5\[8!;ZWp +!71ZF!;HKn!5&72!:Kje!.k17s8MBdeieN~> +!BU8[l0\ND!;uls!<)rs!<3#q!<3#o!<3#o!;lfp!<)rr!<<)u!<<)u!!*&t!;QTn!<3#t!<3#q +!<3#o!;ulq!!<0#!<3#u!!*&t!<)rq!;ulr!!*&t!;ulq!!*&u!4Mn-!;uis!9!kW!5\[8!;ZWp +!71ZF!;HKn!5&72!:Kje!.k17s8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rs!<3#q!<3#o!<3#o!;lfp!<)rr!<<)u!<<)u!!*&t!;QTn!<3#t!<3#q +!<3#o!;ulq!!<0#!<3#u!!*&t!<)rq!;ulr!!*&t!;ulq!!*&u!4Mn-!;uis!9!kW!5\[8!;ZWp +!71ZF!;HKn!5&72!:Kje!.k17s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7lZos7lZns7lZps7ZKns7cTis8E#ts8E#u +s7lZps7lZns7lZos7lZos82lps7cTns7cT&rr<&srr<&ss8;rqs8E#ts8E#os7u`ns8;rls8N)t +s8N)ss8;ourrDusr;cQkq>gKo! +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7lZos7lZns7lZps7ZKns7cTis8E#ts8E#u +s7lZps7lZns7lZos7lZos82lps7cTns7cT&rr<&srr<&ss8;rqs8E#ts8E#os7u`ns8;rls8N)t +s8N)ss8;ourrDusr;cQkq>gKo! +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7lZos7lZns7lZps7ZKns7cTis8E#ts8E#u +s7lZps7lZns7lZos7lZos82lps7cTns7cT&rr<&srr<&ss8;rqs8E#ts8E#os7u`ns8;rls8N)t +s8N)ss8;ourrDusr;cQkq>gKo! +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8E#us8N)ts8N)ts8N)os8N)qs8E#ss8E#ts8;rts8N*! +s8E#ts8N)ps8;ots8;rts8N)ts8N)ts8N)qs8E#ts8E#ts8E#ts8N)rs8N)rs8E#ts8N*!s8E#t +s8E#+rr<&srr<&trr<&trr<&srr<&srr<&mrr<&prr<&trr<&nrr<&srr<&trr<&ts8N)trr<&t +rr<&lrr<&ps8N)trr<&trr<&trr<&ns8N)trr<&trr<&trr<&qrr<&nrr<&prr<&trr<&rs8N)u +rr<&ts8N)trr<&ps8N*!s8N*!rr<&urr<&trr<&qrr<&prr<&ts8N)ts8N)trr<&trr<&trr<&r +s8N)urr<%Qs8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8E#us8N)ts8N)ts8N)os8N)qs8E#ss8E#ts8;rts8N*! +s8E#ts8N)ps8;ots8;rts8N)ts8N)ts8N)qs8E#ts8E#ts8E#ts8N)rs8N)rs8E#ts8N*!s8E#t +s8E#+rr<&srr<&trr<&trr<&srr<&srr<&mrr<&prr<&trr<&nrr<&srr<&trr<&ts8N)trr<&t +rr<&lrr<&ps8N)trr<&trr<&trr<&ns8N)trr<&trr<&trr<&qrr<&nrr<&prr<&trr<&rs8N)u +rr<&ts8N)trr<&ps8N*!s8N*!rr<&urr<&trr<&qrr<&prr<&ts8N)ts8N)trr<&trr<&trr<&r +s8N)urr<%Qs8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8E#us8N)ts8N)ts8N)os8N)qs8E#ss8E#ts8;rts8N*! +s8E#ts8N)ps8;ots8;rts8N)ts8N)ts8N)qs8E#ts8E#ts8E#ts8N)rs8N)rs8E#ts8N*!s8E#t +s8E#+rr<&srr<&trr<&trr<&srr<&srr<&mrr<&prr<&trr<&nrr<&srr<&trr<&ts8N)trr<&t +rr<&lrr<&ps8N)trr<&trr<&trr<&ns8N)trr<&trr<&trr<&qrr<&nrr<&prr<&trr<&rs8N)u +rr<&ts8N)trr<&ps8N*!s8N*!rr<&urr<&trr<&qrr<&prr<&ts8N)ts8N)trr<&trr<&trr<&r +s8N)urr<%Qs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZis8N)ts8N)os8N)qs8N)rs8N)us8E#ps8N)ts8N)ps7cTi +s8N)ts8N)qs8N)ss8N)us8N)ts8N)rs8N)rs8N)ts8N*!s8N)ss8N),s7u`prr<&rrr<&trrrK' +rrE*!!;?Em!;c]q!;lcr!;QQo!;uis!<)ot!;uis!<2uu!;lcr!;?Em!;ZWp!;uis!<2uu!;lcr +!;QQo!;lcr!;ZWp!;c]q!;HKn!;c]q!;lcr!;uis!;QQo!;uis!;ZWp!<2uu!<2uu!;ZWp!;c]q +!;c]q!;lcr!<)ot!;uis!<2uu!;lcr!;uis!.k.Ms8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZis8N)ts8N)os8N)qs8N)rs8N)us8E#ps8N)ts8N)ps7cTi +s8N)ts8N)qs8N)ss8N)us8N)ts8N)rs8N)rs8N)ts8N*!s8N)ss8N),s7u`prr<&rrr<&trrrK' +rrE*!!;?Em!;c]q!;lcr!;QQo!;uis!<)ot!;uis!<2uu!;lcr!;?Em!;ZWp!;uis!<2uu!;lcr +!;QQo!;lcr!;ZWp!;c]q!;HKn!;c]q!;lcr!;uis!;QQo!;uis!;ZWp!<2uu!<2uu!;ZWp!;c]q +!;c]q!;lcr!<)ot!;uis!<2uu!;lcr!;uis!.k.Ms8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZis8N)ts8N)os8N)qs8N)rs8N)us8E#ps8N)ts8N)ps7cTi +s8N)ts8N)qs8N)ss8N)us8N)ts8N)rs8N)rs8N)ts8N*!s8N)ss8N),s7u`prr<&rrr<&trrrK' +rrE*!!;?Em!;c]q!;lcr!;QQo!;uis!<)ot!;uis!<2uu!;lcr!;?Em!;ZWp!;uis!<2uu!;lcr +!;QQo!;lcr!;ZWp!;c]q!;HKn!;c]q!;lcr!;uis!;QQo!;uis!;ZWp!<2uu!<2uu!;ZWp!;c]q +!;c]q!;lcr!<)ot!;uis!<2uu!;lcr!;uis!.k.Ms8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7u`os7lZns8N)os8N)qs7ZNms8N)ps8N)ts8N)ps8N'!s8E!$ +rr<'!s7lZns8N)qs8N)ns8N)ts8N)rs8N)rs8N)ts8N*!s8N)ss8N),rr<&srr<&urr<&rrr<&t +rrrK'rrE*!!;?Em!;c]q!;lcr!;QQo!;uis!;ulr!;lfl!;?Em!;ZWp!;uis!<3#o!;QQo!;lcr +!<3#q!;c]q!;HKn!;c`k!;uis!;QQo!;uis!;ZWp!<2uu!<2uu!<3#q!;c]q!;c]q!;?Em!;uis +!<3#o!;uis!.k.Ms8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss7u`os7lZns8N)os8N)qs7ZNms8N)ps8N)ts8N)ps8N'!s8E!$ +rr<'!s7lZns8N)qs8N)ns8N)ts8N)rs8N)rs8N)ts8N*!s8N)ss8N),rr<&srr<&urr<&rrr<&t +rrrK'rrE*!!;?Em!;c]q!;lcr!;QQo!;uis!;ulr!;lfl!;?Em!;ZWp!;uis!<3#o!;QQo!;lcr +!<3#q!;c]q!;HKn!;c`k!;uis!;QQo!;uis!;ZWp!<2uu!<2uu!<3#q!;c]q!;c]q!;?Em!;uis +!<3#o!;uis!.k.Ms8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss7u`os7lZns8N)os8N)qs7ZNms8N)ps8N)ts8N)ps8N'!s8E!$ +rr<'!s7lZns8N)qs8N)ns8N)ts8N)rs8N)rs8N)ts8N*!s8N)ss8N),rr<&srr<&urr<&rrr<&t +rrrK'rrE*!!;?Em!;c]q!;lcr!;QQo!;uis!;ulr!;lfl!;?Em!;ZWp!;uis!<3#o!;QQo!;lcr +!<3#q!;c]q!;HKn!;c`k!;uis!;QQo!;uis!;ZWp!<2uu!<2uu!<3#q!;c]q!;c]q!;?Em!;uis +!<3#o!;uis!.k.Ms8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ps7cTms8N)os8N)qs7ZNms8N)ps8N)ts8N)ps8N*!rriE& +rr<'!p]19mrrDoqrrDfnrrE#trrDrrrrDrrrrE#trrE*!rrDusrrBJ,!!)rs!!*#u!!)or!!)ut +"p"Z'rrE'!pAY*mqYpNqqu6Wrq#:^HprVlitn,E@fq>UEpr;Q`srr2runc&Rhqu6`u +s8N)srr<&qrr<&nrr<&qrr<&lrr<&orr<&srr<&prr<&urr<&urrW9$rrDus!!)lq!!)lq!!)`m +!!)rs!!*#u!!)]l!!%TM!<<&c!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ps7cTms8N)os8N)qs7ZNms8N)ps8N)ts8N)ps8N*!rriE& +rr<'!p]19mrrDoqrrDfnrrE#trrDrrrrDrrrrE#trrE*!rrDusrrBJ,!!)rs!!*#u!!)or!!)ut +"p"Z'rrE'!pAY*mqYpNqqu6Wrq#:^HprVlitn,E@fq>UEpr;Q`srr2runc&Rhqu6`u +s8N)srr<&qrr<&nrr<&qrr<&lrr<&orr<&srr<&prr<&urr<&urrW9$rrDus!!)lq!!)lq!!)`m +!!)rs!!*#u!!)]l!!%TM!<<&_!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ps7cTms8N)os8N)qs7ZNms8N)ps8N)ts8N)ps8N*!rriE& +rr<'!p]19mrrDoqrrDfnrrE#trrDrrrrDrrrrE#trrE*!rrDusrrBJ,!!)rs!!*#u!!)or!!)ut +"p"Z'rrE'!pAY*mqYpNqqu6Wrq#:^HprVlitn,E@fq>UEpr;Q`srr2runc&Rhqu6`u +s8N)srr<&qrr<&nrr<&qrr<&lrr<&orr<&srr<&prr<&urr<&urrW9$rrDus!!)lq!!)lq!!)`m +!!)rs!!*#u!!)]l!!%TM!<<&Y!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ps8N)ss8N)ts8N)ts8N)us8N)ts8N'!s8E#ms8N)ps8N)t +s8N)ps8N)ss8N'#rr<&ss8N)ts8N)ts8N'!s8E#ss8E#us8N)ts8N)rs8N)rs8N)ts8N*!s8E#t +s8E#+rr<&srr<&urr<&rrr<&trrrK'!<3'!!;?Em!;c]q!;lcr!;QQo!;uis!<)ot!;uis!<2uu +!:Tpf!;ZWp!;uis!<2uu!:g'h!;lcu!<<'!r;Q`sqYpNqp\t3nqYpNqp&>!lq#:UEp +rr2rurr3'#s8N)srr<&qrr<&qrr<&mrr<&srr<&urr<&lrr<%MrrE)um/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ps8N)ss8N)ts8N)ts8N)us8N)ts8N'!s8E#ms8N)ps8N)t +s8N)ps8N)ss8N'#rr<&ss8N)ts8N)ts8N'!s8E#ss8E#us8N)ts8N)rs8N)rs8N)ts8N*!s8E#t +s8E#+rr<&srr<&urr<&rrr<&trrrK'!<3'!!;?Em!;c]q!;lcr!;QQo!;uis!<)ot!;uis!<2uu +!:Tpf!;ZWp!;uis!<2uu!:g'h!;lcu!<<'!r;Q`sqYpNqp\t3nqYpNqp&>!lq#:UEp +rr2rurr3'#s8N)srr<&qrr<&qrr<&mrr<&srr<&urr<&lrr<%MrrE)uklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ps8N)ss8N)ts8N)ts8N)us8N)ts8N'!s8E#ms8N)ps8N)t +s8N)ps8N)ss8N'#rr<&ss8N)ts8N)ts8N'!s8E#ss8E#us8N)ts8N)rs8N)rs8N)ts8N*!s8E#t +s8E#+rr<&srr<&urr<&rrr<&trrrK'!<3'!!;?Em!;c]q!;lcr!;QQo!;uis!<)ot!;uis!<2uu +!:Tpf!;ZWp!;uis!<2uu!:g'h!;lcu!<<'!r;Q`sqYpNqp\t3nqYpNqp&>!lq#:UEp +rr2rurr3'#s8N)srr<&qrr<&qrr<&mrr<&srr<&urr<&lrr<%MrrE)uirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8)fos7ZNms7lZos7lZps7lZps7lZos8;rts8;rps82iss7-0h +s7lZps7cQos8;rts8;rts7lZps8;rts8;rts7lZ&rr<&srr<&trr<&trr<&rrr<&urr<&lrr<&t +rr<&urr<&trr<&nrr<&ts8N)ts8N)trr<&trr<&ts8N)mrr<&trr<&urr<&srr<&trr<&ts8N)o +s8N)trr<&urr<&ts8N)qrr<&trr<&srr<&trr<&urr<&ts8N)srr<&orr<&srr<&prr<&urr<&u +rrW9$rrE#trrDoq!!)ut!!*#u!!)utrrE#t!!)rs!!)ut!!)utrrDus!!)`mrrA&Yrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8)fos7ZNms7lZos7lZps7lZps7lZos8;rts8;rps82iss7-0h +s7lZps7cQos8;rts8;rts7lZps8;rts8;rts7lZ&rr<&srr<&trr<&trr<&rrr<&urr<&lrr<&t +rr<&urr<&trr<&nrr<&ts8N)ts8N)trr<&trr<&ts8N)mrr<&trr<&urr<&srr<&trr<&ts8N)o +s8N)trr<&urr<&ts8N)qrr<&trr<&srr<&trr<&urr<&ts8N)srr<&orr<&srr<&prr<&urr<&u +rrW9$rrE#trrDoq!!)ut!!*#u!!)utrrE#t!!)rs!!)ut!!)utrrDus!!)`mrrA&YrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8)fos7ZNms7lZos7lZps7lZps7lZos8;rts8;rps82iss7-0h +s7lZps7cQos8;rts8;rts7lZps8;rts8;rts7lZ&rr<&srr<&trr<&trr<&rrr<&urr<&lrr<&t +rr<&urr<&trr<&nrr<&ts8N)ts8N)trr<&trr<&ts8N)mrr<&trr<&urr<&srr<&trr<&ts8N)o +s8N)trr<&urr<&ts8N)qrr<&trr<&srr<&trr<&urr<&ts8N)srr<&orr<&srr<&prr<&urr<&u +rrW9$rrE#trrDoq!!)ut!!*#u!!)utrrE#t!!)rs!!)ut!!)utrrDus!!)`mrrA&Yro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8)fns82iss8E#ss82los82los8)frs7lZos8;rts8;rps82is +s82iss82iss8E#ss82lps8)fqs8;rts8;rts7lZps8;rts8;rss8;p!rr<&-s8E#ts8E#ss8;ro +rr<&urr<&ks8;rqs8;rjs8;p!rr<&urrE-"r;c`pr;cHhr;cisrW)rtrW)osr;cQk! +!BU8[l0\NM!!rT)rrE'!rr<&ts8)fns82iss8E#ss82los82los8)frs7lZos8;rts8;rps82is +s82iss82iss8E#ss82lps8)fqs8;rts8;rts7lZps8;rts8;rss8;p!rr<&-s8E#ts8E#ss8;ro +rr<&urr<&ks8;rqs8;rjs8;p!rr<&urrE-"r;c`pr;cHhr;cisrW)rtrW)osr;cQk! +!B:&Xj6cmG!!rT)rrE'!rr<&ts8)fns82iss8E#ss82los82los8)frs7lZos8;rts8;rps82is +s82iss82iss8E#ss82lps8)fqs8;rts8;rts7lZps8;rts8;rss8;p!rr<&-s8E#ts8E#ss8;ro +rr<&urr<&ks8;rqs8;rjs8;p!rr<&urrE-"r;c`pr;cHhr;cisrW)rtrW)osr;cQk! +!BpJ^mHsrH!.k1%s8N(Ms/>qt!.k0$s6K^am/bd$J,~> +!BU8[l0\ND!.k1%s8N(Ms/>qt!.k0$s6K^aklK'jJ,~> +!B:&Xj6cm>!.k1%s8N(Ms/>qt!.k0$s6K^airR%VJ,~> +!BpJ^mHsrH!.k1&s8E"Ls/>qt!.k0$s6K^am/bd$J,~> +!BU8[l0\ND!.k1&s8E"Ls/>qt!.k0$s6K^aklK'jJ,~> +!B:&Xj6cm>!.k1&s8E"Ls/>qt!.k0$s6K^airR%VJ,~> +!BpJ^m=G;Ms8)eIs/5ks!.k0$s6K^am/bd$J,~> +!BU8[l%/lIs8)eIs/5ks!.k0$s6K^aklK'jJ,~> +!B:&Xj+76Cs8)eIs/5ks!.k0$s6K^airR%VJ,~> +!BpJ^m=G;Ms82kJs/5nq!.k0$s6]jcm/bd$J,~> +!BU8[l%/lIs82kJs/5nq!.k0$s6]jcklK'jJ,~> +!B:&Xj+76Cs82kJs/5nq!.k0$s6]jcirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mG%[@!;QTo!5&:0!.k0$s+13$s2+g8m/bd$J,~> +!BU8[l.c7 +!B:&Xj4jV6!;QTo!5&:0!.k0$s+13$s2+g8irR%VJ,~> +!BpJ^mHafN!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Hf!9O4\!.k0$s+13$s7?9im/bd$J,~> +!BU8[l0JBJ!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Hf!9O4\!.k0$s+13$s7?9iklK'jJ,~> +!B:&Xj6QaD!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Hf!9O4\!.k0$s+13$s7?9iirR%VJ,~> +!BpJ^mHFQM!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Em!<2uu!<2uu!9O4\!.k0$s+13$s7?9i +m/bd$J,~> +!BU8[l0/-I!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Em!<2uu!<2uu!9O4\!.k0$s+13$s7?9i +klK'jJ,~> +!B:&Xj66LC!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Em!<2uu!<2uu!9O4\!.k0$s+13$s7?9i +irR%VJ,~> +!BpJ^mHOWP!<3&lrr<&nrr<&grr<&Arr<&mrr<&urr<&urr<%Ms+13$s+14$s8MBdeieN~> +!BU8[l083L!<3&lrr<&nrr<&grr<&Arr<&mrr<&urr<&urr<%Ms+13$s+14$s8M6`c8pI~> +!B:&Xj6?RF!<3&lrr<&nrr<&grr<&Arr<&mrr<&urr<&urr<%Ms+13$s+14$s8M$Z_`*)~> +!BpJ^mHOWP!<3&qs8;ourrDusr;Zlu!;ulr!;c`l!;ulr!;ZZn!;uls!!*&t!;lfp!;QQo!;?Em +!<2uu!<2uu!<)rr!;uls!!*&t!;lfq!;ZZn!!3*"r;Z]q!WN/rs8N(Ms+13$s- +!BU8[l083L!<3&qs8;ourrDusr;Zlu!;ulr!;c`l!;ulr!;ZZn!;uls!!*&t!;lfp!;QQo!;?Em +!<2uu!<2uu!<)rr!;uls!!*&t!;lfq!;ZZn!!3*"r;Z]q!WN/rs8N(Ms+13$s- +!B:&Xj6?RF!<3&qs8;ourrDusr;Zlu!;ulr!;c`l!;ulr!;ZZn!;uls!!*&t!;lfp!;QQo!;?Em +!<2uu!<2uu!<)rr!;uls!!*&t!;lfq!;ZZn!!3*"r;Z]q!WN/rs8N(Ms+13$s- +!BpJ^mHX]O!<2uu!;uis!<)rt!<)ot!<)rt!;c]q!;QQo!;?Em!;c]q!<)ot!;uls!<)ot!<)ot +!<)ot!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!;c`q!.k0$s+138 +s8MBdeieN~> +!BU8[l0A9K!<2uu!;uis!<)rt!<)ot!<)rt!;c]q!;QQo!;?Em!;c]q!<)ot!;uls!<)ot!<)ot +!<)ot!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!;c`q!.k0$s+138 +s8M6`c8pI~> +!B:&Xj6HXE!<2uu!;uis!<)rt!<)ot!<)rt!;c]q!;QQo!;?Em!;c]q!<)ot!;uls!<)ot!<)ot +!<)ot!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!;c`q!.k0$s+138 +s8M$Z_`*)~> +!BpJ^mHX]O!<2uu!<)ot!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!;QQo +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!.k0$s+13/s8MBdeieN~> +!BU8[l0A9K!<2uu!<)ot!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!;QQo +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!.k0$s+13/s8M6`c8pI~> +!B:&Xj6HXE!<2uu!<)ot!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!;QQo +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!.k0$s+13/s8M$Z_`*)~> +!BpJ^mHacP!;uis!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<)rp +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;6Bk!.k0$s+13,s8MBdeieN~> +!BU8[l0J?L!;uis!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<)rp +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;6Bk!.k0$s+13,s8M6`c8pI~> +!B:&Xj6Q^F!;uis!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<)rp +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;6Bk!.k0$s+13,s8M$Z_`*)~> +!BpJ^mHafK!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<2uu!;uis +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!:p0i!.k0$s+13.s8MBdeieN~> +!BU8[l0JBG!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<2uu!;uis +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!:p0i!.k0$s+13.s8M6`c8pI~> +!B:&Xj6QaA!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<2uu!;uis +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!:p0i!.k0$s+13.s8M$Z_`*)~> +!BpJ^mHjiQ!;c]t!<<'!qu6Wrrr2ruqu6WrqYpNqq#:UEpo)A[iqu6Wrqu6WrrVlitqu6Wrqu6Wrqu6WrpAY*mr;Q`sJcC<$JcC]/rp9a;4b*~> +!BU8[l0SEM!;c]t!<<'!qu6Wrrr2ruqu6WrqYpNqq#:UEpo)A[iqu6Wrqu6WrrVlitqu6Wrqu6Wrqu6WrpAY*mr;Q`sJcC<$JcC]/rojI/3e.~> +!B:&Xj6ZdG!;c]t!<<'!qu6Wrrr2ruqu6WrqYpNqq#:UEpo)A[iqu6Wrqu6WrrVlitqu6Wrqu6Wrqu6WrpAY*mr;Q`sJcC<$JcC]/ro4$s2h1~> +!BpJ^mHjiQ!;c]q!<2uu!<)rt!<)ot!<)rt!;c]q!;QQo!<)ot!;lcr!;c]q!<)ot!;uis!;uis +!<2uu!<)rt!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot!;c`q!.k0$ +s+138s8MBdeieN~> +!BU8[l0SEM!;c]q!<2uu!<)rt!<)ot!<)rt!;c]q!;QQo!<)ot!;lcr!;c]q!<)ot!;uis!;uis +!<2uu!<)rt!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot!;c`q!.k0$ +s+138s8M6`c8pI~> +!B:&Xj6ZdG!;c]q!<2uu!<)rt!<)ot!<)rt!;c]q!;QQo!<)ot!;lcr!;c]q!<)ot!;uis!;uis +!<2uu!<)rt!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot!;c`q!.k0$ +s+138s8M$Z_`*)~> +!BpJ^mHsrP!<3#s!<3#s!!<0#!<)rr!!<0#!<3#p!;c`o!<)ro!;ulq!;ulr!<3#t!<3#s!!*&u +!<3#p!;HNk!;lfp!;lcs!<;utr;ZTnr;Z]qqu6Zss8;rns8N(Ms+13$s- +!BU8[l0\NL!<3#s!<3#s!!<0#!<)rr!!<0#!<3#p!;c`o!<)ro!;ulq!;ulr!<3#t!<3#s!!*&u +!<3#p!;HNk!;lfp!;lcs!<;utr;ZTnr;Z]qqu6Zss8;rns8N(Ms+13$s- +!B:&Xj6cmF!<3#s!<3#s!!<0#!<)rr!!<0#!<3#p!;c`o!<)ro!;ulq!;ulr!<3#t!<3#s!!*&u +!<3#p!;HNk!;lfp!;lcs!<;utr;ZTnr;Z]qqu6Zss8;rns8N(Ms+13$s- +!BpJ^m=G;srr<%Ms+13$s+143s8MBdeieN~> +!BU8[l%/lorr<%Ms+13$s+143s8M6`c8pI~> +!B:&Xj+76irr<%Ms+13$s+143s8M$Z_`*)~> +!BpJ^m=G;srr<%Ms+13$s+143s8MBdeieN~> +!BU8[l%/lorr<%Ms+13$s+143s8M6`c8pI~> +!B:&Xj+76irr<%Ms+13$s+143s8M$Z_`*)~> +!BpJ^m=G;srr<%Ms+13$s+143s8MBdeieN~> +!BU8[l%/lorr<%Ms+13$s+143s8M6`c8pI~> +!B:&Xj+76irr<%Ms+13$s+143s8M$Z_`*)~> +!BpJ^m=G;ts8;qKs+13$s+145s8MBdeieN~> +!BU8[l%/lps8;qKs+13$s+145s8M6`c8pI~> +!B:&Xj+76js8;qKs+13$s+145s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mA0d^!7UuG!9X=\!0@0[!.k1Ms8;rZs8N)Os8;rRs8;qKs5O(Xm/bd$J,~> +!BU8[l(n@Z!7UuG!9X=\!0@0[!.k1Ms8;rZs8N)Os8;rRs8;qKs5O(XklK'jJ,~> +!B:&Xj.u_T!7UuG!9X=\!0@0[!.k1Ms8;rZs8N)Os8;rRs8;qKs5O(XirR%VJ,~> +!BpJ^mFqU=!71]F!8dbR!;lfo!9X=\!1Nr_!<2uu!3Z>%!7:`G!9F.[!87AP!9*qX!;HKn!;HKn +!;QQo!.k1Es8MBdeieN~> +!BU8[l.Z19!71]F!8dbR!;lfo!9X=\!1Nr_!<2uu!3Z>%!7:`G!9F.[!87AP!9*qX!;HKn!;HKn +!;QQo!.k1Es8M6`c8pI~> +!B:&Xj4aP3!71]F!8dbR!;lfo!9X=\!1Nr_!<2uu!3Z>%!7:`G!9F.[!87AP!9*qX!;HKn!;HKn +!;QQo!.k1Es8M$Z_`*)~> +!BpJ^mHsrH!;ulm!7CiH!8dbQ!;ZZp!9O7\!1Nof!<2uu!<2uu!<2uu!3Z>%!7:`G!9F.[!8@GQ +!9!kW!;HKn!;HKn!;QQo!.k1Es8MBdeieN~> +!BU8[l0\ND!;ulm!7CiH!8dbQ!;ZZp!9O7\!1Nof!<2uu!<2uu!<2uu!3Z>%!7:`G!9F.[!8@GQ +!9!kW!;HKn!;HKn!;QQo!.k1Es8M6`c8pI~> +!B:&Xj6cm>!;ulm!7CiH!8dbQ!;ZZp!9O7\!1Nof!<2uu!<2uu!<2uu!3Z>%!7:`G!9F.[!8@GQ +!9!kW!;HKn!;HKn!;QQo!.k1Es8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rt!<<)u!!*&t!;lfp!<)rr!<<)u!<)rp!<3#o!;lfp!<)rr!<<)u!;HNl +!;ZZp!;c`o!!*&u!<)rr!;uls!!*&t!<3#s!<<)u!<)rp!4Dh,!<2uu!<2uu!<2uu!3Z>%!7:`G +!9F.[!8@GQ!7h)L!:Bdd!.k1Es8MBdeieN~> +!BU8[l0\ND!;uls!<)rt!<<)u!!*&t!;lfp!<)rr!<<)u!<)rp!<3#o!;lfp!<)rr!<<)u!;HNl +!;ZZp!;c`o!!*&u!<)rr!;uls!!*&t!<3#s!<<)u!<)rp!4Dh,!<2uu!<2uu!<2uu!3Z>%!7:`G +!9F.[!8@GQ!7h)L!:Bdd!.k1Es8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rt!<<)u!!*&t!;lfp!<)rr!<<)u!<)rp!<3#o!;lfp!<)rr!<<)u!;HNl +!;ZZp!;c`o!!*&u!<)rr!;uls!!*&t!<3#s!<<)u!<)rp!4Dh,!<2uu!<2uu!<2uu!3Z>%!7:`G +!9F.[!8@GQ!7h)L!:Bdd!.k1Es8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N'!s7cTns7lZps7ZNns7lZps7lZns7lZps7ZNgs8;rn +s8N)rs7cTos7lZos7lZps7ZNns7lZ'rr<&urr<&urr<&urrE-"r;c`pr;cNjr;ccqrr<'!r;c`p +r;ccqrVururW)iqr;c`pq>gHnr;ccqrVururW)Zlr;cWm!!)ipr;Zp!!!)utr;c`p!^EoqZ$Blrr;rtrr;rtL]@A@!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N'!s7cTns7lZps7ZNns7lZps7lZns7lZps7ZNgs8;rn +s8N)rs7cTos7lZos7lZps7ZNns7lZ'rr<&urr<&urr<&urrE-"r;c`pr;cNjr;ccqrr<'!r;c`p +r;ccqrVururW)iqr;c`pq>gHnr;ccqrVururW)Zlr;cWm!!)ipr;Zp!!!)utr;c`p!^EoqZ$Blrr;rtrr;rtL]@A +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N'!s7cTns7lZps7ZNns7lZps7lZns7lZps7ZNgs8;rn +s8N)rs7cTos7lZos7lZps7ZNns7lZ'rr<&urr<&urr<&urrE-"r;c`pr;cNjr;ccqrr<'!r;c`p +r;ccqrVururW)iqr;c`pq>gHnr;ccqrVururW)Zlr;cWm!!)ipr;Zp!!!)utr;c`p!^EoqZ$Blrr;rtrr;rtL]@A6!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)rs8N*!s8E#ts8Duus8E#ss8E#ts8;rts8N*!s8N)ts8N)t +s8N)qs8E#ss8E#ts8;rts8N)ps8N*!s8N)qs8N)ss8E#ts8E#us8E#ss8E#us8E#ts8E#ts8;rt +s8N*!s8N)ts8N))rr<&qs8N)trr<&trr<&trr<&nrr<&trr<&ss8N)trr<&trr<&trr<&rs8N)u +rr<&trr<&trr<&qrr<&prr<&trr<&rs8N)urr<&orr<&trr<&prr<&qrr<&ts8N)trr<&trr<&s +s8N)trr<&ss8N)urr<&trr<&trr<&lrr<&prr<&trr<&srr<&ts8N)qrr<&nrr<&nrr<&orr<&p +rr<&srr<%Rs8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)rs8N*!s8E#ts8Duus8E#ss8E#ts8;rts8N*!s8N)ts8N)t +s8N)qs8E#ss8E#ts8;rts8N)ps8N*!s8N)qs8N)ss8E#ts8E#us8E#ss8E#us8E#ts8E#ts8;rt +s8N*!s8N)ts8N))rr<&qs8N)trr<&trr<&trr<&nrr<&trr<&ss8N)trr<&trr<&trr<&rs8N)u +rr<&trr<&trr<&qrr<&prr<&trr<&rs8N)urr<&orr<&trr<&prr<&qrr<&ts8N)trr<&trr<&s +s8N)trr<&ss8N)urr<&trr<&trr<&lrr<&prr<&trr<&srr<&ts8N)qrr<&nrr<&nrr<&orr<&p +rr<&srr<%Rs8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)rs8N*!s8E#ts8Duus8E#ss8E#ts8;rts8N*!s8N)ts8N)t +s8N)qs8E#ss8E#ts8;rts8N)ps8N*!s8N)qs8N)ss8E#ts8E#us8E#ss8E#us8E#ts8E#ts8;rt +s8N*!s8N)ts8N))rr<&qs8N)trr<&trr<&trr<&nrr<&trr<&ss8N)trr<&trr<&trr<&rs8N)u +rr<&trr<&trr<&qrr<&prr<&trr<&rs8N)urr<&orr<&trr<&prr<&qrr<&ts8N)trr<&trr<&s +s8N)trr<&ss8N)urr<&trr<&trr<&lrr<&prr<&trr<&srr<&ts8N)qrr<&nrr<&nrr<&orr<&p +rr<&srr<%Rs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ss8N'#rr<&rs8N)us8E#js8N)ts8N)qs8N)r +s8N)us8E#js8N*!s8N)qs8N)ss8N)ss8N*!s8N)rs8N*!s8N)ss8N)us8E#js8N))rr<&qrr<&s +rr<&urr<&rrr<&prr<&rrr<&trr<&rrrW9$rrDrr!!)rs!!)Wj!!)lq!!)lq!!)or!!)rs!!)He +!!)ip!!)or!!)or!!*#u!!)or!!)ut!!)or!!)ut!!)Wj!!)]l!!)Zk!!)ut!!)or!!)lq!!)cn +!!)cn!!)fo!!)ip!!)rs!!%cRrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ss8N'#rr<&rs8N)us8E#js8N)ts8N)qs8N)r +s8N)us8E#js8N*!s8N)qs8N)ss8N)ss8N*!s8N)rs8N*!s8N)ss8N)us8E#js8N))rr<&qrr<&s +rr<&urr<&rrr<&prr<&rrr<&trr<&rrrW9$rrDrr!!)rs!!)Wj!!)lq!!)lq!!)or!!)rs!!)He +!!)ip!!)or!!)or!!*#u!!)or!!)ut!!)or!!)ut!!)Wj!!)]l!!)Zk!!)ut!!)or!!)lq!!)cn +!!)cn!!)fo!!)ip!!)rs!!%cRrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ss8N'#rr<&rs8N)us8E#js8N)ts8N)qs8N)r +s8N)us8E#js8N*!s8N)qs8N)ss8N)ss8N*!s8N)rs8N*!s8N)ss8N)us8E#js8N))rr<&qrr<&s +rr<&urr<&rrr<&prr<&rrr<&trr<&rrrW9$rrDrr!!)rs!!)Wj!!)lq!!)lq!!)or!!)rs!!)He +!!)ip!!)or!!)or!!*#u!!)or!!)ut!!)or!!)ut!!)Wj!!)]l!!)Zk!!)ut!!)or!!)lq!!)cn +!!)cn!!)fo!!)ip!!)rs!!%cRro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)rs8N*!s8N)ss8N'!s7ZNms8N)ps7lZns8N)qs8N)rs8N)u +s8N)ks7lZls8N)ss8N)ss8N*!s7ZNns8N)ss8N)us8N)ps7lZ#rr<&qrr<&srr<&us7lZjrr<&r +rr<&trr<&rrrN3#s7lZmrr<&os8)fmrr<&qrr<&rrr<&srr<&js8)flrr<&rrr<&rrr<&us7lZn +rr<&rrr<&trr<&os8)fhrr<&ps8)fprr<&jrr<&nrr<&nrr<&orr<&orr<&urr<%Qs8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)rs8N*!s8N)ss8N'!s7ZNms8N)ps7lZns8N)qs8N)rs8N)u +s8N)ks7lZls8N)ss8N)ss8N*!s7ZNns8N)ss8N)us8N)ps7lZ#rr<&qrr<&srr<&us7lZjrr<&r +rr<&trr<&rrrN3#s7lZmrr<&os8)fmrr<&qrr<&rrr<&srr<&js8)flrr<&rrr<&rrr<&us7lZn +rr<&rrr<&trr<&os8)fhrr<&ps8)fprr<&jrr<&nrr<&nrr<&orr<&orr<&urr<%Qs8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)rs8N*!s8N)ss8N'!s7ZNms8N)ps7lZns8N)qs8N)rs8N)u +s8N)ks7lZls8N)ss8N)ss8N*!s7ZNns8N)ss8N)us8N)ps7lZ#rr<&qrr<&srr<&us7lZjrr<&r +rr<&trr<&rrrN3#s7lZmrr<&os8)fmrr<&qrr<&rrr<&srr<&js8)flrr<&rrr<&rrr<&us7lZn +rr<&rrr<&trr<&os8)fhrr<&ps8)fprr<&jrr<&nrr<&nrr<&orr<&orr<&urr<%Qs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ss8N'!s7ZNms8N)qs7cTms8N)qs8N)rs8N)u +s8N)ks7lZls8N)ss8N)ss8N*!s7ZNns8N)ss8N)us8N)qs7cT"rr<&qrr<&srr<&urr<&irr<&r +rr<&trr<&rrrW9$rrD`l!!)ip!!)rs!!)lq!!)lq!!)or!!)rs!!)Zk!!)rs!!)ip!!)or!!)or +!!*#u!!)`m!!)or!!)ut!!)ip!!)rs!!)]l!!)lq!!)rs!!)ut!!)Wj!!)cn!!)cn!!)fo!!)fo +!!*#u!!%`Qrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ss8N'!s7ZNms8N)qs7cTms8N)qs8N)rs8N)u +s8N)ks7lZls8N)ss8N)ss8N*!s7ZNns8N)ss8N)us8N)qs7cT"rr<&qrr<&srr<&urr<&irr<&r +rr<&trr<&rrrW9$rrD`l!!)ip!!)rs!!)lq!!)lq!!)or!!)rs!!)Zk!!)rs!!)ip!!)or!!)or +!!*#u!!)`m!!)or!!)ut!!)ip!!)rs!!)]l!!)lq!!)rs!!)ut!!)Wj!!)cn!!)cn!!)fo!!)fo +!!*#u!!%`QrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ss8N'!s7ZNms8N)qs7cTms8N)qs8N)rs8N)u +s8N)ks7lZls8N)ss8N)ss8N*!s7ZNns8N)ss8N)us8N)qs7cT"rr<&qrr<&srr<&urr<&irr<&r +rr<&trr<&rrrW9$rrD`l!!)ip!!)rs!!)lq!!)lq!!)or!!)rs!!)Zk!!)rs!!)ip!!)or!!)or +!!*#u!!)`m!!)or!!)ut!!)ip!!)rs!!)]l!!)lq!!)rs!!)ut!!)Wj!!)cn!!)cn!!)fo!!)fo +!!*#u!!%`Qro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8N)us8E#ts8Duus8E#ms8N)qs8N)ss8N)ts8N)ts8N'! +s8E#ss8E#ts8N)ks8N)ts8N)rs8N)ss8E#ts8E#us8E#ns8E#ts8E#ts8N)qs8N)ss8N))rr<&q +rr<&srr<&urr<&irr<&rrr<&trr<&rrrW9$rrD`l!!)ip!!)rs!!)lq!!)lq!!)or!!)rs!!)Zk +!!)rs!!)ip!!)or!!)or!!*#u!!)`m!!)or!!)ut!!)ip!!)rs!!)]l!!)lq!!)rs!!)ut!!)Wj +!!)cn!!)cn!!)fo!!)cn!W`6#K`D&=!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8N)us8E#ts8Duus8E#ms8N)qs8N)ss8N)ts8N)ts8N'! +s8E#ss8E#ts8N)ks8N)ts8N)rs8N)ss8E#ts8E#us8E#ns8E#ts8E#ts8N)qs8N)ss8N))rr<&q +rr<&srr<&urr<&irr<&rrr<&trr<&rrrW9$rrD`l!!)ip!!)rs!!)lq!!)lq!!)or!!)rs!!)Zk +!!)rs!!)ip!!)or!!)or!!*#u!!)`m!!)or!!)ut!!)ip!!)rs!!)]l!!)lq!!)rs!!)ut!!)Wj +!!)cn!!)cn!!)fo!!)cn!W`6#K`D&9!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8N)us8E#ts8Duus8E#ms8N)qs8N)ss8N)ts8N)ts8N'! +s8E#ss8E#ts8N)ks8N)ts8N)rs8N)ss8E#ts8E#us8E#ns8E#ts8E#ts8N)qs8N)ss8N))rr<&q +rr<&srr<&urr<&irr<&rrr<&trr<&rrrW9$rrD`l!!)ip!!)rs!!)lq!!)lq!!)or!!)rs!!)Zk +!!)rs!!)ip!!)or!!)or!!*#u!!)`m!!)or!!)ut!!)ip!!)rs!!)]l!!)lq!!)rs!!)ut!!)Wj +!!)cn!!)cn!!)fo!!)cn!W`6#K`D&3!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7lZos7lZps7lZos7ZNms7lZps7lZps7lZks82lss82is +s7lZos7lZos7lZps7cTos7lZos7ZN"rr<&qrr<&srr<&trr<&ts8N)orr<&trr<&ss8N)trr<&t +rr<&ts8N)srr<&prr<&ts8N)qrr<&trr<&urr<&trr<&rrr<&krr<&ts8N)prr<&qrr<&ts8N)t +rr<&ts8N)ts8N)trr<&srr<&prr<&ts8N)lrr<&qrr<&ts8N)srr<&ts8N)qrr<&nrr<&nrr<&o +rr<&trr<&srrN3#!;ZZp!07*Ym/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7lZos7lZps7lZos7ZNms7lZps7lZps7lZks82lss82is +s7lZos7lZos7lZps7cTos7lZos7ZN"rr<&qrr<&srr<&trr<&ts8N)orr<&trr<&ss8N)trr<&t +rr<&ts8N)srr<&prr<&ts8N)qrr<&trr<&urr<&trr<&rrr<&krr<&ts8N)prr<&qrr<&ts8N)t +rr<&ts8N)ts8N)trr<&srr<&prr<&ts8N)lrr<&qrr<&ts8N)srr<&ts8N)qrr<&nrr<&nrr<&o +rr<&trr<&srrN3#!;ZZp!07*YklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7lZos7lZps7lZos7ZNms7lZps7lZps7lZks82lss82is +s7lZos7lZos7lZps7cTos7lZos7ZN"rr<&qrr<&srr<&trr<&ts8N)orr<&trr<&ss8N)trr<&t +rr<&ts8N)srr<&prr<&ts8N)qrr<&trr<&urr<&trr<&rrr<&krr<&ts8N)prr<&qrr<&ts8N)t +rr<&ts8N)ts8N)trr<&srr<&prr<&ts8N)lrr<&qrr<&ts8N)srr<&ts8N)qrr<&nrr<&nrr<&o +rr<&trr<&srrN3#!;ZZp!07*YirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&qs8;rqs8N'!s8;rps8)frs7lZns82iss8E#ss82los8;rrs7lZk +s82lss82iss7lZns8;p!rr<&ss8)frs8Duus8;rss7lZns82iss8E#+s82lqs8E#ts8E#ss8;rj +s8;rprrE-"r;c`pr;ccqq>gHnr;ZitrW)iqr;ccqr;ccqq>g9ir;ZitrW)rtq>gHnr;Zlu!;ulq +!;uls!!*&t!<)ro!;ulq!!*&u!;ZZk!<)rr!!*&u!<)rr!;lfm!<)ro!<)ro!;c`o!;c]q!;QTo +!07*Ym/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&qs8;rqs8N'!s8;rps8)frs7lZns82iss8E#ss82los8;rrs7lZk +s82lss82iss7lZns8;p!rr<&ss8)frs8Duus8;rss7lZns82iss8E#+s82lqs8E#ts8E#ss8;rj +s8;rprrE-"r;c`pr;ccqq>gHnr;ZitrW)iqr;ccqr;ccqq>g9ir;ZitrW)rtq>gHnr;Zlu!;ulq +!;uls!!*&t!<)ro!;ulq!!*&u!;ZZk!<)rr!!*&u!<)rr!;lfm!<)ro!<)ro!;c`o!;c]q!;QTo +!07*YklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&qs8;rqs8N'!s8;rps8)frs7lZns82iss8E#ss82los8;rrs7lZk +s82lss82iss7lZns8;p!rr<&ss8)frs8Duus8;rss7lZns82iss8E#+s82lqs8E#ts8E#ss8;rj +s8;rprrE-"r;c`pr;ccqq>gHnr;ZitrW)iqr;ccqr;ccqq>g9ir;ZitrW)rtq>gHnr;Zlu!;ulq +!;uls!!*&t!<)ro!;ulq!!*&u!;ZZk!<)rr!!*&u!<)rr!;lfm!<)ro!<)ro!;c`o!;c]q!;QTo +!07*YirR%VJ,~> +!BpJ^mHsrH!:g*h!1!Ta!.k1&rr<%`rr<%Ms8;ls!/(=Nm/bd$J,~> +!BU8[l0\ND!:g*h!1!Ta!.k1&rr<%`rr<%Ms8;ls!/(=NklK'jJ,~> +!B:&Xj6cm>!:g*h!1!Ta!.k1&rr<%`rr<%Ms8;ls!/(=NirR%VJ,~> +!BpJ^mHsrH!:g*h!1*Za!.k1&rr<%`rr<%Ms8Drt!.t7Mm/bd$J,~> +!BU8[l0\ND!:g*h!1*Za!.k1&rr<%`rr<%Ms8Drt!.t7MklK'jJ,~> +!B:&Xj6cm>!:g*h!1*Za!.k1&rr<%`rr<%Ms8Drt!.t7MirR%VJ,~> +!BpJ^mF)%4!1a)d!.k1%rr<%arr<%Ms8;ls!.t7Mm/bd$J,~> +!BU8[l-fV0!1a)d!.k1%rr<%arr<%Ms8;ls!.t7MklK'jJ,~> +!B:&Xj3mu*!1a)d!.k1%rr<%arr<%Ms8;ls!.t7MirR%VJ,~> +!BpJ^mF)%4!1a)e!.k1%s8;qfs82kJs8N&r!/(=Nm/bd$J,~> +!BU8[l-fV0!1a)e!.k1%s8;qfs82kJs8N&r!/(=NklK'jJ,~> +!B:&Xj3mu*!1a)e!.k1%s8;qfs82kJs8N&r!/(=NirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6eq)D'eq)D'f"T]84b*~> +!BU73c@O8lc@O8lcG%R(3e.~> +!B:%0_h#^V_h#^V_nO"g2h1~> +JN\QIJN\QIJN^V.J,~> +JNA?CJNA?CJNCD(J,~> +JN&-=JN&-=JN(2"J,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/books/ps/v71graphicspage.eps b/books/ps/v71graphicspage.eps new file mode 100644 index 0000000..17a8b59 --- /dev/null +++ b/books/ps/v71graphicspage.eps @@ -0,0 +1,2450 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner +%%Title: graphicspage.eps +%%CreationDate: Sat Jun 21 10:58:36 2008 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 696 475 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 459.83362537429304 translate +681.59055118110246 -459.83362537429304 scale +% Image geometry +710 479 8 +% Transformation matrix +[ 710 0 0 479 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 710 string def +/gstr 710 string def +/bstr 710 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 124691 ASCII Bytes +colorimage +quD:2JN\QIJN\QI`BF,!J,~> +quD:/JNA?CJNA?C`B*nsJ,~> +quD:,JN&-=JN&-=`Ad\pJ,~> +rW)s]JcC<$JcC<$JcE^hs#p>]J,~> +rW)sZJcC<$JcC<$JcE^hs#U,ZJ,~> +rW)sWJcC<$JcC<$JcE^hs#9oWJ,~> +rr<*`rr.KIJc1/uJc1/u`Voi9!^-M`J,~> +rr<*]rr.KIJc1/uJc1/u`Voi9!]g;]J,~> +rr<*ZrV_ +!WYC^Jc()sJc()sNr84$rVYu>rVYu>rqliX4TL!~> +!WY:[Jbt#qJbt#qNr/.#rVPo=rVPo=rqccV3WO[~> +!WY1WJbjroJbjroNr&(!rVGi;rVGi;rqZ]T2ZS@~> +!WYC]JbjroJbjroO88m7bjGE6b_l8nMTkJf"jDl#qMNMars$])qYK/6!.Y~> +!WY:YJbalmJbalmO8/g6bjGE6b_l5lMTkJf"jDl"q23D`rs$])q>&u1!.Y~> +!WY1VJbXfkJbXfkO8&a4bjGE6b_c,iM9PAe"jDhupkd5^rs$](q"Wc+!.Y~> +!Bp>Xq#LHro)O@;JbalmJbc):!K-jCr!!%Vq>#pHmJI.dMY[(*rU'L`rJLUM!T?1l~> +!BU)TpAk6po)O@9JbO`iJbPr6!K$dBr!!%Up\0OCmJI.dM>-b$rU'L`rJCOJ!T,qg~> +!B9iPo`5$no)O@7Jb=TeJb>f2!JgX@qZZqRp%=+=mJ@(cL\:=qrU'I_rJ1CF!So\b~> +!Bp;WpB/E6`%CW^JbO`iJbO`iU\=eGr9a=ar/(1BM>Zc;"oO5OpPJh8q>pMNrq?HN4b*~> +!BU&So`N34`%CW^Jb=TeJb=TeU\+YCqsF1_qhOk;L\pK7"oF)JonWG3q#UAJrq- +!B9fOo)m!2`%CW^Jb+HaJb+HaU[nM@qsF.^qhF_6LAUB5"oF&Go7m/0p]:8Hrpp0F2h1~> +!Bp;Wp(.1.qQ+s_PA6:)B9P$56BcuoJbJL)!B;b3p&R-+j7WI4r\"=mJ$k^M"^OuqsF.ZqhY7F!T#ti~> +!BU#RoFLt,qQ+s_PA6:)B9P$56BcumJb8@%!B2Y1oDpm'j7E=1r[n7:En#[4Jb8!p!JgO=p'(;J +o^mq8mIg_[L\14oqX*tWqM5(B!Sf_d~> +!B9cNnIPY)qQ+s_PA6:)B9P$56BcujJar-t!AuJ.nGtL!j7*+,r[e18E6s1+Jaqdj!JU=9oEG#D +naV>.mIUSWL%4\eq!I\SpkA_;!SKD^~> +!Bp5UoFLu0rRn3jg"`aZgP!Sqn*,DqJb8@%!B;b3oDpp)j7ER90=\&s00%=0oRZYqoDsaDmIg_[ +L\14oqYU!^!;lHnqM4_8L\goArrE#krrDri!W%TNoE!`1J,~> +!BTuQndkc.rRn3jg"`aZgP!Sqn*,DoJb&4!!B)S0nc:X$j73F50"7in/iLt*nq$Amnc=L?mIUSW +L@Xniq"s^Z!;lBlpkJA1LA:Z +!B9]LmLT?*rRn3jg"`aZgP!Sqn*,DkJaVpn!AuJ.mK#0sj6d.0/[VEf/N(\%mXafemK&"8mI:AS +K^S8]p\XLV!;l9ipOqu&K_PB6rrE#frrDrd!V_9HmK(ouJ,~> +!Bp5Uo+1j^q.'!S]bf~> +!BTrPn.5O[q.'=Kq;_S5;$s8()tXJai=$!JU:8nHJZ@nF2/+qsjI^qsajaL%+Sc +p\XL[!<;Tg!;l9epP&V9!SBG`~> +!B9ZKljs+Wq.'rqsF1Zqs=RZK'_iU +o_\%T!<;Hc!;l-aoRd)/!S',Z~> +!Bp2TnIM9cSg;Z[PNqO4eC2_7]E!NQJar-t!B2\2Zlq:[naX"?D=QmSRIMpd@VIK2n_lPt_JM!T +nO,$*M"*DWrp^W@008X&035j%<%k2602J^[R+d,]JarC&!JU:8nHJZ@naV>-qsaXdqsaXdqsaja +L%4\ep\OFW!;c3dpP&V:!SKVd~> +!BToOmLPs`Sg;Z[PNqO4eC2_7]E!NNJaVpn!B)S0YotqVmd@D6D!pLMR-lR^@:q3,mbTul^hb[N +mQrO#L$giOrpCE:/ii?s/lfQr;_Fo./kr@SQe-fVJaW0u!JL.5mKN9:md>c$qsFFaqsFFaqsFX\ +K^S8]p%n+R!;c*aon<>4!S9A_~> +!B9TIl49O\Sg;Z[PNqO4eC2_7]E!NJJa2Xf!AuJ.Y9>YQlKYT*C?jkAPj0hT?Y1m&lJ" +!Bp/SnGWCrR)/p$U':T##6Y89!.jWjnEo]F2u>9.n/^gX1ukMmj7"]_l.n!Qn=VFeiMS?!n3\kb +nF/@irpUEO0/;rh0@'(VbqD^X0?o(;Jai0u!JU46mfiB +!BTlNm/?tnR)/p$U':T##6Y89!.jKfm-X->2Z#-,llG7O1Z+uchs;sUjk27Gm%,h\h4lTjlp<>Y +m-HV_rp1-G/hlW`0$qqs+4^qs+4^qs+FWK'_iUoD._N +!;Yp]o7Hu.!S'5]~> +!B9QHkPbGiR)/p$U':T##6Y89!.j]!*k8iSD1#&BYgZL.Ji7'>;kF4&Pfq9p_k/MH9X/]Qu:`%=MG/]<5'J`lOc!J'\,jot7)kN@BbqrRkYqrRkYqrS(OJEQ*GnG25F +!;YaXn::N$!RNcU~> +!BouNkl(Pb/K"OJ,l%Fkk^hsbkQ*UqroaAA0E1/FHnV'iHKaQG6g3Yc0B\/h0*?jj6SJH&!B2\2 +kRPH_7-HBZjlkph0/>78idp +!BTZHj8K#]/K"OJ,l%Fkj+67XirM%jro4#;0)jl@GV5F_GN7^960$oV0&hT_/d$[b5q`/s!B)S0 +isrdU6fTmRi8`kU/ho%4h1=U;j7)(0Ic0V;"lOjij*oq`bQ%Y?bQ%Y?bQZpRj5YUHq98d;q9/lt +IfA@.brU@~> +!B99@g\q0U/K"OJ,l%FkgO\,HgAs,_rn@H1/cOK7F=ibRF5,G$5MOjC/_YdR/H^CT5:ulh!AlD- +gCCYD6/+%Eg"Y96/MAb/eUcJ+g[NquH.hT#"ke1UgNhKL^]4B3^]4B3^]iD:gY7#,q7uq/q7m$a +H2cP!`]&D~> +!BouNkl1Vb#V@VJpAfd.J`uLb!B2\2kQ*Uqroap-01.D6kiaZekgqITkaX;Qr9+/K0E1/92_Y0o% +X9XRkXmMKkig#>91CSJJ`q[KnE9n'jmCP$jacRYJE?[X!!)oG!!)oG"m(9uk^_dkeGB7Be,eZ]r +oaC14b*~> +!BTZHj8T)]#V@VJpAfd)J`H.X!B)S0irM%jro4R#/jV,.j5VaXj3oVIj-_NFr8RfD0)jl32D5!h% +WsCLj%(f?j5[s.8OP2AJ`D=AnDaOui9e_li-s_HIc1+I!!)o?!!)o?"lOjij*oq_bkhD:bQ6XNr +o4%(3e.~> +!B99@g]%6U#V@VJpAfd!J_TSH!AlD-gAs,_rnA!j/O(i#gY4;EgWM06gQX:4r7_6:/cOK*1bJ^]% +WO(CgI +!BouNkl1Vc*9u5B"o&(Kk^hsbkQ*UqroaAA0E1/;k=714roanH4N;n)K]q/U1Q8W6XQW#)rob.W +0=Iir01=FUUb>]X\5P&VQ7kY"\":fpk^hsikQ-4qqpbEAqpYf2JEZ3IjnmO-!;k7G!;k7LjacRY +JE?[XrW)uJrW)iF!Tek2kQ0'oJ,~> +!BT]IjSo2_*9u5B"o&(KjFQCZj8h.kro=)<0)jo6j$kY,ro=VC4MlP"J`PEI0oE0+WoQGuro=kR +0!_?h/k"1LTIs0O[8JWMP:f4oZ^]'fjFQCaj8j_fqonj9qof6%IcTR=i;:^u!;jt?!;jtDi-sbJ +Ic1+IrW)uBrW)i>!T8G+j8mOeJ,~> +!B96a>O"EYbXd6hTgk"8Qg];`SqnW"-qnNBgHJI;%g&&Pb!;jP3!;jP8fm;H/ +HJ/22rW)u6rW)i2!SMeug]>DRJ,~> +!Bp#Ol2CYh`gQi;/L:B8*$kL`Ja%aMmHFX10E12:2_Y-o!fAY7rosD8%5r=fl06H-3\WspksI-' +kls("0/,eCf`(+EX&_&7=0(TLSPM$t9uV\JJa)gk!J0A0eG0+Ae-4rbl03c\qpbEAqpYf2Ja)EM +jnmR-!<(FI!;k7HjamEq!Ra,]~> +!BT]IjSf,c`gQi;/L:B8*$kL`J`MCCmGn:+0)jo42D4sh!f&D.roF&2%5i1^jQ+Eq3%mUgj?YEt +j9@Lp/h]V?e,JD;W)PQ0Ll9>Q2?J`QIa!Iiu(bkV89bQZpRjQ(dJqonj9qof6%IcTR= +i;:au!<(.A!;jt@i-t[d!R<`V~> +!B9 +!Bp#Ol2CYh`gZq,[EWpW`6nPaJa%aMiopM`7Ha[7!A?fkl%/*AklH@smF2=$Ja)EMjmCP$jal[\ +J`Z:K!Ten3klK3qJ,~> +!BT]Ijo,5d`gZq,[EWpW`6nPaJ`VIEioL5[7-":.!A6ZhjalO9jT0khmE>alJ*#dAi9e_li.'kM +J)K_ +!B9?Bh>RB\`gZq,[EWpW`6nPaJ_bn5inXZO6ehUr!A-Neh1=D)h#ViUmD/t[HJRD'g?l][g3VT2 +HJ7c&!SVl!h#YPTJ,~> +!Bp#OlM^bi`gQl,3g9Tn"BYR&Ja.gOj6?]S09uM$!A?fkl@J6Cl2cIumF;C&Ja2NOk3^\&k(2g_ +J`c@M!Tnt4l2f?sJ,~> +!BT]Ijo,5d`gQl,3g9Tn"BYR&J`VIEj5g?J/s6+o!A6ZhjalO9jT0kimEGgnJ*#dAiU+kniIBtN +J)Te>!TAP-jT3[gJ,~> +!B9?BhYmK]`gQl,3g9Tn"BYR&J_kt7j5'j>/WK_c!A-QfhLXP+h>quWmD/t[Hf!V+g?l][g3_]5 +HeRl'!SVo"h>t\VJ,~> +!Bp#OlMghk&_t2%fn@#Go66o-!.jEdlJq.2Sqc&!l2dfcJa.gOb3B"Yk3^\&k(2g_J`c@M"m1C$ +l@J*beH+f`rosO54b*~> +!BT`Jk5PDg&_t2%fn@#Go66o-!.j9`k2YS*S:oSojoM9YJ`_OGb2r_SiU+kniIC"PJ)Te>"lXsn +k'u@WblQdQroO7-3e.~> +!B9?BhZ!Q_&_t2%fn@#Go66o-!.j!XhW*GoQ@RB]h>s4EJ_kt7b2*/Gg?l][g3_]5HeRl'"kn=[ +hL!uD_#`8:rn[[s2h1~> +!Bp#OlMghk'5_SV(2[7W6#A@U!.jEdl@J5OlD*VFJ[k+0"h9-Kl@HJ4jor8GlKWr1mH+GZJc=p8 +dli3~> +!BT`Jk5PDg'5_SV(2[7W6#A@U!.j9`k(2ZGk+h&>J$eV%"gidAk'sc*i +!B9BChu +!Bp&PlgXt+l[eAQl[eArlg&`mlg&`mlg&`mlN,KuJ,~> +!BTcKkOAP'kCMfIkCMfjkNd-dkNd-dkNd-dk5ipjJ,~> +!B9BCi:-eui.9g;i.9g\i9P1Wi9P1Wi9P1WhuUtZJ,~> +!Bp%*l[eAQl[eAQlbD`de3/<~> +!BTb%kCMfIkCMfIkJ-0\coQ[~> +!B9@ri.9g;i.9g;i4n1Nau=h~> +!Boe#i.9g;i.9g;i4e+L4b*~> +!BTIrg4@t/g4@t/g:l8@3e.~> +!B9%id"0Ppd"0Ppd([j,2h1~> +!'PmaJUrB'JUrB']n$/HJ,~> +!'5[SJTcTfJTcTf]ljB:J,~> +!&oIAJS0OHJS0OH]k7=(J,~> +!BpJ^m5t=JrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&c!S0Da~> +!BU8[kr\nFrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&_!R<`V~> +!B:&Xj#d8@rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&Y!Q-jH~> +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rp9a;4b*~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rojI/3e.~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!ro4$s2h1~> +!BpJ^mDo8,!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)um/bd$J,~> +!BU8[l,Wi(!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uklK'jJ,~> +!B:&Xj2_3"!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uirR%VJ,~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls-s&g!.k0B +rriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#us8N'! +rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!*&u +m/bd$J,~> +!BU8[kl:__rrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls-s&g!.k0B +rriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#us8N'! +rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!*&u +klK'jJ,~> +!B:&XirB)YrrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls-s&g!.k0B +rriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#us8N'! +rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!*&u +irR%VJ,~> +!BpJ^m0 +!BU8[km%.frrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcE^h +r;Zlu!8[YT!;-9k!.k0Qrr<&urrW9$!<<#u!ri9#rW";F!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<<#urVneVrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE)u!<23`c8pI~> +!B:&Xis,M`rrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcE^h +r;Zlu!8[YT!;-9k!.k0Qrr<&urrW9$!<<#u!ri9#rW";F!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<<#urVneVrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE)u!<2!Z_`*)~> +!BpJ^m/R.crrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0i +s8N)ts8N)Trr<&krr<%Ms/l;)!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0i +s8N)ts8N)Trr<&krr<%Ms/l;)!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0i +s8N)ts8N)Trr<&krr<%Ms/l;)!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcEdj!!)or!!(jT!!%TMT`4ulrr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE)u!<)p8!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<;lq(B4C7!<3'! +!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcEdj!!)or!!(jT!!%TMT`4ulrr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE)u!<)p8!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<;lq(B4C7!<3'! +!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0j +rr<&ns8Duus8E#qs8;rqs8N'!s8;rqrrE-"r;c`prW)cor;Zlu!;ulq!!3*"JcEai"T\Q&rrE)s +!!*&s!%.^GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8E#urr<&urtPP6!<3'! +!<3'!!<3'!!<3'!!<3'!p])$.!<3'!!<3'!!<3'!!<3'!!<3'!rVururp9a;4b*~> +!BU8[kl:__rrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0j +rr<&ns8Duus8E#qs8;rqs8N'!s8;rqrrE-"r;c`prW)cor;Zlu!;ulq!!3*"JcEai"T\Q&rrE)s +!!*&s!%.^GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8E#urr<&urtPP6!<3'! +!<3'!!<3'!!<3'!!<3'!p])$.!<3'!!<3'!!<3'!!<3'!!<3'!rVururojI/3e.~> +!B:&XirB)YrrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k0j +rr<&ns8Duus8E#qs8;rqs8N'!s8;rqrrE-"r;c`prW)cor;Zlu!;ulq!!3*"JcEai"T\Q&rrE)s +!!*&s!%.^GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8E#urr<&urtPP6!<3'! +!<3'!!<3'!!<3'!!<3'!p])$.!<3'!!<3'!!<3'!!<3'!!<3'!rVururo4$s2h1~> +!BpJ^m0rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[km%.frrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcEgk!!)]lrrE&u!!)ut!!)ut!!)rsrrE#t!!)utrrE#t!!)lq!!)lq!!)utrrE#t!!)ut +rr@WMa8Z,>rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcEgk!!)]lrrE&u!!)ut!!)ut!!)rsrrE#t!!)utrrE#t!!)lq!!)lq!!)utrrE#t!!)ut +rr@WMa8Z,>rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls2Y->!;6?l!;$3j!;uis!;lcr +!<2uu!;uis!;c]q!;lcr!;lcr!<)ot!;uis!.k0irriE&!<3'!qu?`squ?fu!<;lq!ri9#rVuru +rVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'! +rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls2Y->!;6?l!;$3j!;uis!;lcr +!<2uu!;uis!;c]q!;lcr!;lcr!<)ot!;uis!.k0irriE&!<3'!qu?`squ?fu!<;lq!ri9#rVuru +rVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'! +rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls2Y->!;6?l!;$3j!;uis!;lcr +!<2uu!;uis!;c]q!;lcr!;lcr!<)ot!;uis!.k0irriE&!<3'!qu?`squ?fu!<;lq!ri9#rVuru +rVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'!rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'! +rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcEgk!!)rsr;cis!!)foqZ-Qo!!)or!!*#u +!!)rs!!)lq!!)or!!)]lrW%NL`;]f;rr3'#rrE)o!!<0#s7cQos7?9ks7cQqrrE)u!<)p0!<3'! +!<3'!!<3'!!<3'!!<; +!B:&Xis,M`rrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcEgk!!)rsr;cis!!)foqZ-Qo!!)or!!*#u +!!)rs!!)lq!!)or!!)]lrW%NL`;]f;rr3'#rrE)o!!<0#s7cQos7?9ks7cQqrrE)u!<)p0!<3'! +!<3'!!<3'!!<3'!!<; +!BpJ^m/R.crrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +!!;c]q!<)ot!;ZWp!;uis +!;uis!;lcr!<2uu!;uis!;c]q!;lcr!:p0i!.k0hrriE&!<3'!p&G*mqu?`srW!$"!<<#u!<<#u +!<<#u!<;rs!<;rs!ri9#rW)uu!!*#u%06D.rrE'!rrE'!rrE)_!"Al-rrE'!rrE'!rrE)u!!*&u +m/bd$J,~> +!BU8[kl:__rrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +!!;c]q!<)ot!;ZWp!;uis +!;uis!;lcr!<2uu!;uis!;c]q!;lcr!:p0i!.k0hrriE&!<3'!p&G*mqu?`srW!$"!<<#u!<<#u +!<<#u!<;rs!<;rs!ri9#rW)uu!!*#u%06D.rrE'!rrE'!rrE)_!"Al-rrE'!rrE'!rrE)u!!*&u +klK'jJ,~> +!B:&XirB)YrrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +!!;c]q!<)ot!;ZWp!;uis +!;uis!;lcr!<2uu!;uis!;c]q!;lcr!:p0i!.k0hrriE&!<3'!p&G*mqu?`srW!$"!<<#u!<<#u +!<<#u!<;rs!<;rs!ri9#rW)uu!!*#u%06D.rrE'!rrE'!rrE)_!"Al-rrE'!rrE'!rrE)u!!*&u +irR%VJ,~> +!BpJ^m0 +qu6WrrVlitq>UEpr;Q`sr;Q`squ6Wrrr2rur;Q`sqYpNqqu6WrpAY*mr;Q`sJcEdj!!*#u!s&?$ +s8E!"rrE)u!!*&s!!<0#s8Duus6p!irrE)u!!<0#s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'! +nc0=&!<3'!!<3'!!<3'!!<3'!!<<#urp9a;4b*~> +!BU8[km%.frrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLa8Z,> +qu6WrrVlitq>UEpr;Q`sr;Q`squ6Wrrr2rur;Q`sqYpNqqu6WrpAY*mr;Q`sJcEdj!!*#u!s&?$ +s8E!"rrE)u!!*&s!!<0#s8Duus6p!irrE)u!!<0#s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'! +nc0=&!<3'!!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLa8Z,> +qu6WrrVlitq>UEpr;Q`sr;Q`squ6Wrrr2rur;Q`sqYpNqqu6WrpAY*mr;Q`sJcEdj!!*#u!s&?$ +s8E!"rrE)u!!*&s!!<0#s8Duus6p!irrE)u!!<0#s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'! +nc0=&!<3'!!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NL`W,l:rVu]o +r;Z]q!<<#urr3!!s8;rrs8E#ts8E#ts7u`ns8;rprrE-"r;_EK`r?#=rr3'#rrE)u!!<0#s8Duu +s82iurrE)u!!*&a!!<0#s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'! +!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NL`W,l:rVu]o +r;Z]q!<<#urr3!!s8;rrs8E#ts8E#ts7u`ns8;rprrE-"r;_EK`r?#=rr3'#rrE)u!!<0#s8Duu +s82iurrE)u!!*&a!!<0#s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'! +!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLVZ-Vr +JcD#8!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus6p!orrE'!rrE'!s8E#srtPP6!<3'!!<3'! +!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLVZ-Vr +JcD#8!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus6p!orrE'!rrE'!s8E#srtPP6!<3'!!<3'! +!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLVuQ\qJcD):!!*#u!s&?$s8E!" +rrE)u!!<0#s7cQos7?9ks7cQqrrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLVuQ\qJcD):!!*#u!s&?$s8E!" +rrE)u!!<0#s7cQos7?9ks7cQqrrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BU8[kl:__rrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!B:&XirB)YrrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/[4ea8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8MBdeieN~> +!BU8[klCeaa8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M6`c8pI~> +!B:&XirK/[a8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M$Z_`*)~> +!BpJ^m/[1+!<<) +!BU8[klCb'!<<) +!B:&XirK,!!<<) +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8MBdeieN~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M6`c8pI~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G<:s8;qKs8Dut!7UuH!5AL3!.k0Rs8;ros8;r!s8MBdeieN~> +!BU8[l%/m6s8;qKs8Dut!7UuH!5AL3!.k0Rs8;ros8;r!s8M6`c8pI~> +!B:&Xj+770s8;qKs8Dut!7UuH!5AL3!.k0Rs8;ros8;r!s8M$Z_`*)~> +!BpJ^mHafN!:9^c!3?,"!:Bdd!0R9]!7_#K!5&72!7CfH!7LlI!/^^U!;HKn!3H5"m/bd$J,~> +!BU8[l0JBJ!:9^c!3?,"!:Bdd!0R9]!7_#K!5&72!7CfH!7LlI!/^^U!;HKn!3H5"klK'jJ,~> +!B:&Xj6QaD!:9^c!3?,"!:Bdd!0R9]!7_#K!5&72!7CfH!7LlI!/^^U!;HKn!3H5"irR%VJ,~> +!BpJ^mHFQM!:9^c!3?,"!:Bdd!0R9]!7h)L!5&72!7:`G!7LlI!/^^U!;HKn!3H5"m/bd$J,~> +!BU8[l0/-I!:9^c!3?,"!:Bdd!0R9]!7h)L!5&72!7:`G!7LlI!/^^U!;HKn!3H5"klK'jJ,~> +!B:&Xj66LC!:9^c!3?,"!:Bdd!0R9]!7h)L!5&72!7:`G!7LlI!/^^U!;HKn!3H5"irR%VJ,~> +!BpJ^mHOWP!<3%brr<&drr<%]rr<&Lrr<&2rr<%lrr<%Urr<&nrr<&#s8MBdeieN~> +!BU8[l083L!<3%brr<&drr<%]rr<&Lrr<&2rr<%lrr<%Urr<&nrr<&#s8M6`c8pI~> +!B:&Xj6?RF!<3%brr<&drr<%]rr<&Lrr<&2rr<%lrr<%Urr<&nrr<&#s8M$Z_`*)~> +!BpJ^mHOWP!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&ns8;ourrDusr;ccqrr<'!r;cWm +rr<'!r;cZn!!)ipr;c`pq>g9ir;Zlu!<3#u!<)rt!<3#t!!*&u!<)rs!<3#t!<)rr!;c`o!!3*" +p](0lr;Zcs!<;utqu?Tp!WN/os8;ourrE&urrE#trrE&urVururW)lrq>gHnr;c]or;Zlu!;ulq +!;c`o!!3*"p](0lqu?Kmq>^Eorr;rtrVufrr;Z`r!<<#uqu?Wqq>^Bnr;ZcsrVultr;Z]q!WN/p +s7u`ps8E#ts8E#us8N'!s8;rps8;ros8;ourrDEcr;c]or;Zlu!;ZZo!<3#t!<)rr!;QQo!;HKn +!;- +!BU8[l083L!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&ns8;ourrDusr;ccqrr<'!r;cWm +rr<'!r;cZn!!)ipr;c`pq>g9ir;Zlu!<3#u!<)rt!<3#t!!*&u!<)rs!<3#t!<)rr!;c`o!!3*" +p](0lr;Zcs!<;utqu?Tp!WN/os8;ourrE&urrE#trrE&urVururW)lrq>gHnr;c]or;Zlu!;ulq +!;c`o!!3*"p](0lqu?Kmq>^Eorr;rtrVufrr;Z`r!<<#uqu?Wqq>^Bnr;ZcsrVultr;Z]q!WN/p +s7u`ps8E#ts8E#us8N'!s8;rps8;ros8;ourrDEcr;c]or;Zlu!;ZZo!<3#t!<)rr!;QQo!;HKn +!;- +!B:&Xj6?RF!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<&ns8;ourrDusr;ccqrr<'!r;cWm +rr<'!r;cZn!!)ipr;c`pq>g9ir;Zlu!<3#u!<)rt!<3#t!!*&u!<)rs!<3#t!<)rr!;c`o!!3*" +p](0lr;Zcs!<;utqu?Tp!WN/os8;ourrE&urrE#trrE&urVururW)lrq>gHnr;c]or;Zlu!;ulq +!;c`o!!3*"p](0lqu?Kmq>^Eorr;rtrVufrr;Z`r!<<#uqu?Wqq>^Bnr;ZcsrVultr;Z]q!WN/p +s7u`ps8E#ts8E#us8N'!s8;rps8;ros8;ourrDEcr;c]or;Zlu!;ZZo!<3#t!<)rr!;QQo!;HKn +!;- +!BpJ^mHX]O!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!;ZWp!<)rt!<)ot!<)ot +!;uls!<)ot!;QTo!<)ot!;c]q!;c]q!<)ot!;c]q!;-9k!<)rt!<)ot!;uis!;uls!<2uu!<)ot +!;uis!<)ot!<)ot!;uis!<)rt!;QQo!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)rt!<)ot!;uis +!;uls!<2uu!;lcr!;ZWp!<)ot!;uis!<)rt!<)ot!<)ot!;uis!<)rt!;QQo!<)ot!;c]q!;-9k +!;uis!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!<)ot!;uis!;uis!<)ot!<)rt!;?Em!;ZWp!;uis +!<)rt!<)ot!<)ot!<)ot!;uis!<)rt!:Bdd!<)ot!;uis!<)rt!;QQo!;uis!<)ot!<)ot!;ZWp +!;HKn!;6?l!<)ot!;uis!<)rt!6Y?@m/bd$J,~> +!BU8[l0A9K!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!;ZWp!<)rt!<)ot!<)ot +!;uls!<)ot!;QTo!<)ot!;c]q!;c]q!<)ot!;c]q!;-9k!<)rt!<)ot!;uis!;uls!<2uu!<)ot +!;uis!<)ot!<)ot!;uis!<)rt!;QQo!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)rt!<)ot!;uis +!;uls!<2uu!;lcr!;ZWp!<)ot!;uis!<)rt!<)ot!<)ot!;uis!<)rt!;QQo!<)ot!;c]q!;-9k +!;uis!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!<)ot!;uis!;uis!<)ot!<)rt!;?Em!;ZWp!;uis +!<)rt!<)ot!<)ot!<)ot!;uis!<)rt!:Bdd!<)ot!;uis!<)rt!;QQo!;uis!<)ot!<)ot!;ZWp +!;HKn!;6?l!<)ot!;uis!<)rt!6Y?@klK'jJ,~> +!B:&Xj6HXE!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!;ZWp!<)rt!<)ot!<)ot +!;uls!<)ot!;QTo!<)ot!;c]q!;c]q!<)ot!;c]q!;-9k!<)rt!<)ot!;uis!;uls!<2uu!<)ot +!;uis!<)ot!<)ot!;uis!<)rt!;QQo!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)rt!<)ot!;uis +!;uls!<2uu!;lcr!;ZWp!<)ot!;uis!<)rt!<)ot!<)ot!;uis!<)rt!;QQo!<)ot!;c]q!;-9k +!;uis!<)ot!<)ot!;lfr!<2uu!;c]q!;c]q!<)ot!;uis!;uis!<)ot!<)rt!;?Em!;ZWp!;uis +!<)rt!<)ot!<)ot!<)ot!;uis!<)rt!:Bdd!<)ot!;uis!<)rt!;QQo!;uis!<)ot!<)ot!;ZWp +!;HKn!;6?l!<)ot!;uis!<)rt!6Y?@irR%VJ,~> +!BpJ^mHX]O!<2uu!;lcu!<<'!q#:!lqu6WrrVlitr;Q`sr;Q`sp\t3nrr2rurVlit +qu6WrrVlitr;Q`soD\djr;Q`sr;Q`srr2ruqu6Wrq#:UEpqu6Wrqu6WroD\djrr2rup\t3nqu6Wrp&>!lqu6Wr +qu6WrrVlitr;Q`srVlitr;Q`spAY*mq>UEpr;Q`srVlitqu6`us8N)rrr<&trr<&srr<&_rr<&s +rr<&srr<&orrrK'rrE*!!<2uu!;lcr!;c]q!;HKn!:^!g!;uis!;uis!6Y?@m/bd$J,~> +!BU8[l0A9K!<2uu!;lcu!<<'!q#:!lqu6WrrVlitr;Q`sr;Q`sp\t3nrr2rurVlit +qu6WrrVlitr;Q`soD\djr;Q`sr;Q`srr2ruqu6Wrq#:UEpqu6Wrqu6WroD\djrr2rup\t3nqu6Wrp&>!lqu6Wr +qu6WrrVlitr;Q`srVlitr;Q`spAY*mq>UEpr;Q`srVlitqu6`us8N)rrr<&trr<&srr<&_rr<&s +rr<&srr<&orrrK'rrE*!!<2uu!;lcr!;c]q!;HKn!:^!g!;uis!;uis!6Y?@klK'jJ,~> +!B:&Xj6HXE!<2uu!;lcu!<<'!q#:!lqu6WrrVlitr;Q`sr;Q`sp\t3nrr2rurVlit +qu6WrrVlitr;Q`soD\djr;Q`sr;Q`srr2ruqu6Wrq#:UEpqu6Wrqu6WroD\djrr2rup\t3nqu6Wrp&>!lqu6Wr +qu6WrrVlitr;Q`srVlitr;Q`spAY*mq>UEpr;Q`srVlitqu6`us8N)rrr<&trr<&srr<&_rr<&s +rr<&srr<&orrrK'rrE*!!<2uu!;lcr!;c]q!;HKn!:^!g!;uis!;uis!6Y?@irR%VJ,~> +!BpJ^mHacP!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;c]q!;?Hi!;uis!;uis!;QQo +!;lcr!;lcr!;lcr!;lcr!;lcr!;6?l!;?Em!;uis!;uis!;HKn!<2uu!<)rn!;ulr!;6Bh!;uis +!;uis!<2uu!;lcr!;HNm!;c]q!;uis!;uis!;?Em!;ZZl!<)ot!;HNh!;ulr!;?Em!;lcr!;lcr +!;$3j!<2uu!;ulo!;lcr!;6?l!;lcr!;lcr!<)ot!;uis!;ulr!;$3j!;QQo!<2uu!;uis!;lct +!<<)p!;ulr!:'U]!;lfq!;6?r!<<'!s8N)us7lZkrr<&nrr<&ls8)fns8E#=s8MBdeieN~> +!BU8[l0J?L!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;c]q!;?Hi!;uis!;uis!;QQo +!;lcr!;lcr!;lcr!;lcr!;lcr!;6?l!;?Em!;uis!;uis!;HKn!<2uu!<)rn!;ulr!;6Bh!;uis +!;uis!<2uu!;lcr!;HNm!;c]q!;uis!;uis!;?Em!;ZZl!<)ot!;HNh!;ulr!;?Em!;lcr!;lcr +!;$3j!<2uu!;ulo!;lcr!;6?l!;lcr!;lcr!<)ot!;uis!;ulr!;$3j!;QQo!<2uu!;uis!;lct +!<<)p!;ulr!:'U]!;lfq!;6?r!<<'!s8N)us7lZkrr<&nrr<&ls8)fns8E#=s8M6`c8pI~> +!B:&Xj6Q^F!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;c]q!;?Hi!;uis!;uis!;QQo +!;lcr!;lcr!;lcr!;lcr!;lcr!;6?l!;?Em!;uis!;uis!;HKn!<2uu!<)rn!;ulr!;6Bh!;uis +!;uis!<2uu!;lcr!;HNm!;c]q!;uis!;uis!;?Em!;ZZl!<)ot!;HNh!;ulr!;?Em!;lcr!;lcr +!;$3j!<2uu!;ulo!;lcr!;6?l!;lcr!;lcr!<)ot!;uis!;ulr!;$3j!;QQo!<2uu!;uis!;lct +!<<)p!;ulr!:'U]!;lfq!;6?r!<<'!s8N)us7lZkrr<&nrr<&ls8)fns8E#=s8M$Z_`*)~> +!BpJ^mHafK!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;c]q!;HKn!;uis!;uis!;uis!;QQo +!;lcr!;lcr!;lcr!;lcr!;lcr!;6?l!;?Em!;uis!;uis!;?Eo!<3&srr<&is8N)orr<&srr<&s +rr<&srr<&urr<&rrr<&ks8N)srr<&srr<&srr<&mrr<&qrr<&srr<&trr<&nrr<&is8N)orr<&r +rr<&rrr<&irrN3#!;uis!;uis!;lcr!;6?l!;lcr!;lcr!<)ot!;uis!;ZZp!;6?l!;QQo!<2uu +!;uis!;lcu!<<'!o)J^imJd.dr;Q`sq#C?op\tEtrrE'!rrE&u!!)Wj!!)cn!!)`m!!)rs!!)fo +rrC1@rp9a;4b*~> +!BU8[l0JBG!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;c]q!;HKn!;uis!;uis!;uis!;QQo +!;lcr!;lcr!;lcr!;lcr!;lcr!;6?l!;?Em!;uis!;uis!;?Eo!<3&srr<&is8N)orr<&srr<&s +rr<&srr<&urr<&rrr<&ks8N)srr<&srr<&srr<&mrr<&qrr<&srr<&trr<&nrr<&is8N)orr<&r +rr<&rrr<&irrN3#!;uis!;uis!;lcr!;6?l!;lcr!;lcr!<)ot!;uis!;ZZp!;6?l!;QQo!<2uu +!;uis!;lcu!<<'!o)J^imJd.dr;Q`sq#C?op\tEtrrE'!rrE&u!!)Wj!!)cn!!)`m!!)rs!!)fo +rrC1@rojI/3e.~> +!B:&Xj6QaA!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!;c]q!;HKn!;uis!;uis!;uis!;QQo +!;lcr!;lcr!;lcr!;lcr!;lcr!;6?l!;?Em!;uis!;uis!;?Eo!<3&srr<&is8N)orr<&srr<&s +rr<&srr<&urr<&rrr<&ks8N)srr<&srr<&srr<&mrr<&qrr<&srr<&trr<&nrr<&is8N)orr<&r +rr<&rrr<&irrN3#!;uis!;uis!;lcr!;6?l!;lcr!;lcr!<)ot!;uis!;ZZp!;6?l!;QQo!<2uu +!;uis!;lcu!<<'!o)J^imJd.dr;Q`sq#C?op\tEtrrE'!rrE&u!!)Wj!!)cn!!)`m!!)rs!!)fo +rrC1@ro4$s2h1~> +!BpJ^mHjiQ!;c]q!<)p"!<<'!q#:!lpAY*mr;Q`sr;Q`spAY0orrDus!!)`m!!)rs +!!)ip!!)rs!!)rs!!)rs!!*#u!!)or!!)fo!!)rs!!)ut!!)rs!!)rs!!)`m!!)lq!!)rs!!)ut +!!)cn!!)`m!!)rs!!)ip!!)or!!)or!!)Ti!W`6#r;Q`sr;Q`squ6Wrp&>!lqu6Wrqu6WrrVlit +r;Q`srVlitr;Q`spAY*mp\t9prrDrr!!)or!s&B$!;?Em!;uis!:Kje!;uis!;uis!;uis!;QQu +!<3'!!<3&urr<&jrr<&nrr<&mrr<&srr<&srr<&srr<&As8MBdeieN~> +!BU8[l0SEM!;c]q!<)p"!<<'!q#:!lpAY*mr;Q`sr;Q`spAY0orrDus!!)`m!!)rs +!!)ip!!)rs!!)rs!!)rs!!*#u!!)or!!)fo!!)rs!!)ut!!)rs!!)rs!!)`m!!)lq!!)rs!!)ut +!!)cn!!)`m!!)rs!!)ip!!)or!!)or!!)Ti!W`6#r;Q`sr;Q`squ6Wrp&>!lqu6Wrqu6WrrVlit +r;Q`srVlitr;Q`spAY*mp\t9prrDrr!!)or!s&B$!;?Em!;uis!:Kje!;uis!;uis!;uis!;QQu +!<3'!!<3&urr<&jrr<&nrr<&mrr<&srr<&srr<&srr<&As8M6`c8pI~> +!B:&Xj6ZdG!;c]q!<)p"!<<'!q#:!lpAY*mr;Q`sr;Q`spAY0orrDus!!)`m!!)rs +!!)ip!!)rs!!)rs!!)rs!!*#u!!)or!!)fo!!)rs!!)ut!!)rs!!)rs!!)`m!!)lq!!)rs!!)ut +!!)cn!!)`m!!)rs!!)ip!!)or!!)or!!)Ti!W`6#r;Q`sr;Q`squ6Wrp&>!lqu6Wrqu6WrrVlit +r;Q`srVlitr;Q`spAY*mp\t9prrDrr!!)or!s&B$!;?Em!;uis!:Kje!;uis!;uis!;uis!;QQu +!<3'!!<3&urr<&jrr<&nrr<&mrr<&srr<&srr<&srr<&As8M$Z_`*)~> +!BpJ^mHjiQ!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;ZWp!<)rt!<2uu!<)rt +!;uis!;uis!;QTo!<)ot!;c]q!;c]q!<)ot!;c]q!<)ot!;ZWp!<)rt!<)ot!<)rt!;uis!;6?l +!;c]q!<)rt!<)rt!<)ot!;ZWp!<)rt!;uis!;uis!<)ot!<)rt!;QTo!<)ot!<)ot!<)rt!;uis +!;?Em!;c]q!<)rt!;uis!<)rt!<)ot!<)rt!<)rt!<)ot!;QQo!<)ot!;c]q!:g'h!;lcr!<)rt +!;lcr!;6?l!;c]q!<)ot!;uis!<)rt!<)rt!<)ot!;?Em!<)ot!;uiu!<3&rs8N)trr<&trr<&t +s8N)ts8N)trr<&qs8N)nrr<&ts8N)ss8N)trr<&nrr<&urr<&srr<&ts8N)qrr<&nrr<&mrr<&t +s8N)ss8N)trr<&As8MBdeieN~> +!BU8[l0SEM!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;ZWp!<)rt!<2uu!<)rt +!;uis!;uis!;QTo!<)ot!;c]q!;c]q!<)ot!;c]q!<)ot!;ZWp!<)rt!<)ot!<)rt!;uis!;6?l +!;c]q!<)rt!<)rt!<)ot!;ZWp!<)rt!;uis!;uis!<)ot!<)rt!;QTo!<)ot!<)ot!<)rt!;uis +!;?Em!;c]q!<)rt!;uis!<)rt!<)ot!<)rt!<)rt!<)ot!;QQo!<)ot!;c]q!:g'h!;lcr!<)rt +!;lcr!;6?l!;c]q!<)ot!;uis!<)rt!<)rt!<)ot!;?Em!<)ot!;uiu!<3&rs8N)trr<&trr<&t +s8N)ts8N)trr<&qs8N)nrr<&ts8N)ss8N)trr<&nrr<&urr<&srr<&ts8N)qrr<&nrr<&mrr<&t +s8N)ss8N)trr<&As8M6`c8pI~> +!B:&Xj6ZdG!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;ZWp!<)rt!<2uu!<)rt +!;uis!;uis!;QTo!<)ot!;c]q!;c]q!<)ot!;c]q!<)ot!;ZWp!<)rt!<)ot!<)rt!;uis!;6?l +!;c]q!<)rt!<)rt!<)ot!;ZWp!<)rt!;uis!;uis!<)ot!<)rt!;QTo!<)ot!<)ot!<)rt!;uis +!;?Em!;c]q!<)rt!;uis!<)rt!<)ot!<)rt!<)rt!<)ot!;QQo!<)ot!;c]q!:g'h!;lcr!<)rt +!;lcr!;6?l!;c]q!<)ot!;uis!<)rt!<)rt!<)ot!;?Em!<)ot!;uiu!<3&rs8N)trr<&trr<&t +s8N)ts8N)trr<&qs8N)nrr<&ts8N)ss8N)trr<&nrr<&urr<&srr<&ts8N)qrr<&nrr<&mrr<&t +s8N)ss8N)trr<&As8M$Z_`*)~> +!BpJ^mHsrP!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!;ZZn!;lfp!!*&u!<<)u!<3#t +!;ZWq!<;utr;ZTnr;Z]qq#C9mp](0lqZ$Ko"TJH%s8Voqq>UEpq>^Bnqu6Zss8;rls8;ots8E#u +s8E#ts8E#ss8;p!rr<&prrE-"r;c`pr;[!#!!*'!q>gHnq>gKor;ZitrW)osr;c]or;c`p! +!BU8[l0\NL!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!;ZZn!;lfp!!*&u!<<)u!<3#t +!;ZWq!<;utr;ZTnr;Z]qq#C9mp](0lqZ$Ko"TJH%s8Voqq>UEpq>^Bnqu6Zss8;rls8;ots8E#u +s8E#ts8E#ss8;p!rr<&prrE-"r;c`pr;[!#!!*'!q>gHnq>gKor;ZitrW)osr;c]or;c`p! +!B:&Xj6cmF!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!;ZZn!;lfp!!*&u!<<)u!<3#t +!;ZWq!<;utr;ZTnr;Z]qq#C9mp](0lqZ$Ko"TJH%s8Voqq>UEpq>^Bnqu6Zss8;rls8;ots8E#u +s8E#ts8E#ss8;p!rr<&prrE-"r;c`pr;[!#!!*'!q>gHnq>gKor;ZitrW)osr;c]or;c`p! +!BpJ^m>:iC!.k0$s,?sX!;c]q!8mhV!.k1.s8MBdeieN~> +!BU8[l&#E?!.k0$s,?sX!;c]q!8mhV!.k1.s8M6`c8pI~> +!B:&Xj,*d9!.k0$s,?sX!;c]q!8mhV!.k1.s8M$Z_`*)~> +!BpJ^m>:iC!.k0$s,I$Y!;ZWp!8mhV!.k1.s8MBdeieN~> +!BU8[l&#E?!.k0$s,I$Y!;ZWp!8mhV!.k1.s8M6`c8pI~> +!B:&Xj,*d9!.k0$s,I$Y!;ZWp!8mhV!.k1.s8M$Z_`*)~> +!BpJ^m>:iC!.k0$s,I$Y!;ZWp!9!nW!.k1-s8MBdeieN~> +!BU8[l&#E?!.k0$s,I$Y!;ZWp!9!nW!.k1-s8M6`c8pI~> +!B:&Xj,*d9!.k0$s,I$Y!;ZWp!9!nW!.k1-s8M$Z_`*)~> +!BpJ^m>CrB!.k0$s-!E[!;lfp!.k0as8MBdeieN~> +!BU8[l&,N>!.k0$s-!E[!;lfp!.k0as8M6`c8pI~> +!B:&Xj,3m8!.k0$s-!E[!;lfp!.k0as8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mHafN!4r4/!0.$Y!8RVQ!.k0$s+13ls8MBdeieN~> +!BU8[l0JBJ!4r4/!0.$Y!8RVQ!.k0$s+13ls8M6`c8pI~> +!B:&Xj6QaD!4r4/!0.$Y!8RVQ!.k0$s+13ls8M$Z_`*)~> +!BpJ^mHFQM!;HKn!:Bdd!8IMR!8RSS!:Bdd!9X:]!9jF_!;ZWp!87AP!.k0$s+13ls8MBdeieN~> +!BU8[l0/-I!;HKn!:Bdd!8IMR!8RSS!:Bdd!9X:]!9jF_!;ZWp!87AP!.k0$s+13ls8M6`c8pI~> +!B:&Xj66LC!;HKn!:Bdd!8IMR!8RSS!:Bdd!9X:]!9jF_!;ZWp!87AP!.k0$s+13ls8M$Z_`*)~> +!BpJ^mHFQM!;HKn!:Bdd!8RSS!8IMR!:Bdd!9X:]!9jF_!;ZWp!87AP!.k0$s+13ls8MBdeieN~> +!BU8[l0/-I!;HKn!:Bdd!8RSS!8IMR!:Bdd!9X:]!9jF_!;ZWp!87AP!.k0$s+13ls8M6`c8pI~> +!B:&Xj66LC!;HKn!:Bdd!8RSS!8IMR!:Bdd!9X:]!9jF_!;ZWp!87AP!.k0$s+13ls8M$Z_`*)~> +!BpJ^mHFQM!94"Y!8RSS!65$=!6kHC!;ZWp!87AP!.k0$s+13ls8MBdeieN~> +!BU8[l0/-I!94"Y!8RSS!65$=!6kHC!;ZWp!87AP!.k0$s+13ls8M6`c8pI~> +!B:&Xj66LC!94"Y!8RSS!65$=!6kHC!;ZWp!87AP!.k0$s+13ls8M$Z_`*)~> +!BpJ^mHFQM!;ZZo!;ZZn!!3*"rVu]or;Z]q!WN/os8;rps7u`ks8N'!s8;rps8;ros8E#qs8N'! +s8;rqs7u`ns8;ourrDfnrW)iqrr<'!r;cTlq>gKo! +!BU8[l0/-I!;ZZo!;ZZn!!3*"rVu]or;Z]q!WN/os8;rps7u`ks8N'!s8;rps8;ros8E#qs8N'! +s8;rqs7u`ns8;ourrDfnrW)iqrr<'!r;cTlq>gKo! +!B:&Xj66LC!;ZZo!;ZZn!!3*"rVu]or;Z]q!WN/os8;rps7u`ks8N'!s8;rps8;ros8E#qs8N'! +s8;rqs7u`ns8;ourrDfnrW)iqrr<'!r;cTlq>gKo! +!BpJ^mHFQM!;HKn!;c]q!<)rt!;lcr!;ZWp!<)rt!;QQo!<)ot!;c]q!;- +!BU8[l0/-I!;HKn!;c]q!<)rt!;lcr!;ZWp!<)rt!;QQo!<)ot!;c]q!;- +!B:&Xj66LC!;HKn!;c]q!<)rt!;lcr!;ZWp!<)rt!;QQo!<)ot!;c]q!;- +!BpJ^mHFQM!;HKn!;c]q!;uis!;lcr!;ZWp!;uis!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6Wr +qYpNqqYpNqr;Q`squ6Wrq>UEpr;Q`sp&>!lqYpNqr;Q`spAY*mq>UEpr;Q`srr2ruqu6Wrq#:!lr;Q`sr;Q`srr2ruqu6WrJcC<$JcG-;rp9a;4b*~> +!BU8[l0/-I!;HKn!;c]q!;uis!;lcr!;ZWp!;uis!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6Wr +qYpNqqYpNqr;Q`squ6Wrq>UEpr;Q`sp&>!lqYpNqr;Q`spAY*mq>UEpr;Q`srr2ruqu6Wrq#:!lr;Q`sr;Q`srr2ruqu6WrJcC<$JcG-;rojI/3e.~> +!B:&Xj66LC!;HKn!;c]q!;uis!;lcr!;ZWp!;uis!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6Wr +qYpNqqYpNqr;Q`squ6Wrq>UEpr;Q`sp&>!lqYpNqr;Q`spAY*mq>UEpr;Q`srr2ruqu6Wrq#:!lr;Q`sr;Q`srr2ruqu6WrJcC<$JcG-;ro4$s2h1~> +!BpJ^mHFQM!;HKn!;ZZo!;QQo!;QTn!;?Em!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqqYpNq +r;Q`squ6Wrq#CUEpr;Q`srr;coq#: +!BU8[l0/-I!;HKn!;ZZo!;QQo!;QTn!;?Em!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqqYpNq +r;Q`squ6Wrq#CUEpr;Q`srr;coq#: +!B:&Xj66LC!;HKn!;ZZo!;QQo!;QTn!;?Em!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqqYpNq +r;Q`squ6Wrq#CUEpr;Q`srr;coq#: +!BpJ^mHFQM!;HKn!;?Hm!;c]q!;6Bl!;QQo!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqqYpNq +r;Q`squ6Wrp&G$lo`"mkqYpNqr;Q`spAY*mq>UEpr;Q`srr2runc&Rhqu6Wrqu6Wrqu6Wrr;Q`s +r;Q`sr;Q`srr2ruJcC<$JcFm4rp9a;4b*~> +!BU8[l0/-I!;HKn!;?Hm!;c]q!;6Bl!;QQo!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqqYpNq +r;Q`squ6Wrp&G$lo`"mkqYpNqr;Q`spAY*mq>UEpr;Q`srr2runc&Rhqu6Wrqu6Wrqu6Wrr;Q`s +r;Q`sr;Q`srr2ruJcC<$JcFm4rojI/3e.~> +!B:&Xj66LC!;HKn!;?Hm!;c]q!;6Bl!;QQo!;lcr!;lcr!;-9k!;lcu!<<'!qu6WrqYpNqqYpNq +r;Q`squ6Wrp&G$lo`"mkqYpNqr;Q`spAY*mq>UEpr;Q`srr2runc&Rhqu6Wrqu6Wrqu6Wrr;Q`s +r;Q`sr;Q`srr2ruJcC<$JcFm4ro4$s2h1~> +!BpJ^mHFQM!;HKn!;c]q!;uis!;lcr!;ZWp!;uis!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6Wr +qYpNqqYpNqr;Q`squ6Wrq>UEpr;Q`sp&>!lqYpNqr;Q`spAY*mq>UEpr;Q`srr2runc&Rhqu6Wr +qu6Wrqu6Wrr;Q`sr;Q`sr;Q`srr2ruJcC<$JcFm4rp9a;4b*~> +!BU8[l0/-I!;HKn!;c]q!;uis!;lcr!;ZWp!;uis!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6Wr +qYpNqqYpNqr;Q`squ6Wrq>UEpr;Q`sp&>!lqYpNqr;Q`spAY*mq>UEpr;Q`srr2runc&Rhqu6Wr +qu6Wrqu6Wrr;Q`sr;Q`sr;Q`srr2ruJcC<$JcFm4rojI/3e.~> +!B:&Xj66LC!;HKn!;c]q!;uis!;lcr!;ZWp!;uis!;ZWp!;lcr!;lcr!;-9k!;lcu!<<'!qu6Wr +qYpNqqYpNqr;Q`squ6Wrq>UEpr;Q`sp&>!lqYpNqr;Q`spAY*mq>UEpr;Q`srr2runc&Rhqu6Wr +qu6Wrqu6Wrr;Q`sr;Q`sr;Q`srr2ruJcC<$JcFm4ro4$s2h1~> +!BpJ^mHFQM!;HKn!;c`q!<)ot!;lcr!<)ot!<3#u!<)ot!;QQo!<)ot!;c]q!;- +!BU8[l0/-I!;HKn!;c`q!<)ot!;lcr!<)ot!<3#u!<)ot!;QQo!<)ot!;c]q!;- +!B:&Xj66LC!;HKn!;c`q!<)ot!;lcr!<)ot!<3#u!<)ot!;QQo!<)ot!;c]q!;- +!BpJ^mHafK!<)ro!<)ou!<;utq>^BnrVllus8;rks8;rps7u`jrrE-"r;c`pr;c`pq>gNprW)rt +rW)iqr;cfr!^HpJcC<$JcGECrp9a;4b*~> +!BU8[l0JBG!<)ro!<)ou!<;utq>^BnrVllus8;rks8;rps7u`jrrE-"r;c`pr;c`pq>gNprW)rt +rW)iqr;cfr!^HpJcC<$JcGECrojI/3e.~> +!B:&Xj6QaA!<)ro!<)ou!<;utq>^BnrVllus8;rks8;rps7u`jrrE-"r;c`pr;c`pq>gNprW)rt +rW)iqr;cfr!^HpJcC<$JcGECro4$s2h1~> +!BpJ^m?IVN!.k1Hrr<%Ms+13$s1A=1m/bd$J,~> +!BU8[l'22J!.k1Hrr<%Ms+13$s1A=1klK'jJ,~> +!B:&Xj-9QD!.k1Hrr<%Ms+13$s1A=1irR%VJ,~> +!BpJ^m?IVN!.k1Hrr<%Ms+13$s1A=1m/bd$J,~> +!BU8[l'22J!.k1Hrr<%Ms+13$s1A=1klK'jJ,~> +!B:&Xj-9QD!.k1Hrr<%Ms+13$s1A=1irR%VJ,~> +!BpJ^m?IVN!.k1Hrr<%Ms+13$s1A=1m/bd$J,~> +!BU8[l'22J!.k1Hrr<%Ms+13$s1A=1klK'jJ,~> +!B:&Xj-9QD!.k1Hrr<%Ms+13$s1A=1irR%VJ,~> +!BpJ^m?R_M!.k1Ks8;qKs+13$s1SI3m/bd$J,~> +!BU8[l';;I!.k1Ks8;qKs+13$s1SI3klK'jJ,~> +!B:&Xj-BZC!.k1Ks8;qKs+13$s1SI3irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mA9j\!.k0ss8;rEs8;q\s8N(Ms+14Lm/bd$J,~> +!BU8[l)"FX!.k0ss8;rEs8;q\s8N(Ms+14LklK'jJ,~> +!B:&Xj/)eR!.k0ss8;rEs8;q\s8N(Ms+14LirR%VJ,~> +!BpJ^mG7g:!7UuG!3?/!!!3*"W;chtdJj1Hp&Fsjm/I%cZi:"*o`"mkJcCf2rp9a;4b*~> +!BU8[l.uC6!7UuG!3?/!!!3*"W;chtdJj1Hp&Fsjm/I%cZi:"*o`"mkJcCf2rojI/3e.~> +!B:&Xj5'b0!7UuG!3?/!!!3*"W;chtdJj1Hp&Fsjm/I%cZi:"*o`"mkJcCf2ro4$s2h1~> +!BpJ^mHsrH!<)rl!7:cG!3H2#!<3#u!3#nt!7LlI!:g'h!:9^c!42\*!;-9k!.k02s8MBdeieN~> +!BU8[l0\ND!<)rl!7:cG!3H2#!<3#u!3#nt!7LlI!:g'h!:9^c!42\*!;-9k!.k02s8M6`c8pI~> +!B:&Xj6cm>!<)rl!7:cG!3H2#!<3#u!3#nt!7LlI!:g'h!:9^c!42\*!;-9k!.k02s8M$Z_`*)~> +!BpJ^mHsrH!;lfr!<)rt!!*&s!!*&s!<<)r!<<)u!!E6$!<<#us8W&u!<;utqZ$Qqq>^Bnqu?Km +`r?#=r;Q`sW;chtdf0:Io)AakrrAYj!!%TMJcG`:!S0Da~> +!BU8[l0\ND!;lfr!<)rt!!*&s!!*&s!<<)r!<<)u!!E6$!<<#us8W&u!<;utqZ$Qqq>^Bnqu?Km +`r?#=r;Q`sW;chtdf0:Io)AakrrAYj!!%TMJcG`6!R<`V~> +!B:&Xj6cm>!;lfr!<)rt!!*&s!!*&s!<<)r!<<)u!!E6$!<<#us8W&u!<;utqZ$Qqq>^Bnqu?Km +`r?#=r;Q`sW;chtdf0:Io)AakrrAYj!!%TMJcG`0!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N*!rr`?%!!*&s!!*&s!!*&p!!*&m!!*&o!;lfr!;lfl!<3#o +!65$=!;?Hk!;c`o!;6Bj!;ulr!<<)u!;ulq!<)rt!!`H'!<<'!!<3#u!!*&t!;ZWp!;ZZn!;c`o +!!3*"p](0lqu?KmpAY0orrDusrW)uurW)lrrW)cor;cfrrr<9'!!*'!!!)cnr;[!#!!*'!rVuru +rW)iqr;ccqrr<'!r;ccq!tsm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N*!rr`?%!!*&s!!*&s!!*&p!!*&m!!*&o!;lfr!;lfl!<3#o +!65$=!;?Hk!;c`o!;6Bj!;ulr!<<)u!;ulq!<)rt!!`H'!<<'!!<3#u!!*&t!;ZWp!;ZZn!;c`o +!!3*"p](0lqu?KmpAY0orrDusrW)uurW)lrrW)cor;cfrrr<9'!!*'!!!)cnr;[!#!!*'!rVuru +rW)iqr;ccqrr<'!r;ccq!tsklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N*!rr`?%!!*&s!!*&s!!*&p!!*&m!!*&o!;lfr!;lfl!<3#o +!65$=!;?Hk!;c`o!;6Bj!;ulr!<<)u!;ulq!<)rt!!`H'!<<'!!<3#u!!*&t!;ZWp!;ZZn!;c`o +!!3*"p](0lqu?KmpAY0orrDusrW)uurW)lrrW)cor;cfrrr<9'!!*'!!!)cnr;[!#!!*'!rVuru +rW)iqr;ccqrr<'!r;ccq!tsirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs82los8N)us8N)us8N)ts8N*!s8Duus8E!$rr<'!s8E#ts8E#r +s8N)ss8E#ss8E#us8N)ts8N)tsm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs82los8N)us8N)us8N)ts8N*!s8Duus8E!$rr<'!s8E#ts8E#r +s8N)ss8E#ss8E#us8N)ts8N)tsklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs82los8N)us8N)us8N)ts8N*!s8Duus8E!$rr<'!s8E#ts8E#r +s8N)ss8E#ss8E#us8N)ts8N)tsirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs82lns8N'#rr<&ns8N*!s8N*!s8N*!s8N*!s8N)ss8N)ss8N)s +s8N)rs8N*!s8;r5s8;rrrr<&rrr<&urr<&rrr<&prr<&rrr<&srrW9$rrDcm!!)ut!!*#u!!*#u +!!*#u!!)or!!)or!!)or!!)or!!)ut!!)rs!!)ip!!)or!!)or!!)Wj!!*#u!!)or!s&B$!;QQo +!;lcr!;lcr!<2uu!<2uu!<2uu!;c]q!;lcr!;uis!;$3j!;uis!;lcr!<2uu!;uis!;c]q!;lcr +!;lcr!<)ot!;uis!.k0Ks8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs82lns8N'#rr<&ns8N*!s8N*!s8N*!s8N*!s8N)ss8N)ss8N)s +s8N)rs8N*!s8;r5s8;rrrr<&rrr<&urr<&rrr<&prr<&rrr<&srrW9$rrDcm!!)ut!!*#u!!*#u +!!*#u!!)or!!)or!!)or!!)or!!)ut!!)rs!!)ip!!)or!!)or!!)Wj!!*#u!!)or!s&B$!;QQo +!;lcr!;lcr!<2uu!<2uu!<2uu!;c]q!;lcr!;uis!;$3j!;uis!;lcr!<2uu!;uis!;c]q!;lcr +!;lcr!<)ot!;uis!.k0Ks8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs82lns8N'#rr<&ns8N*!s8N*!s8N*!s8N*!s8N)ss8N)ss8N)s +s8N)rs8N*!s8;r5s8;rrrr<&rrr<&urr<&rrr<&prr<&rrr<&srrW9$rrDcm!!)ut!!*#u!!*#u +!!*#u!!)or!!)or!!)or!!)or!!)ut!!)rs!!)ip!!)or!!)or!!)Wj!!*#u!!)or!s&B$!;QQo +!;lcr!;lcr!<2uu!<2uu!<2uu!;c]q!;lcr!;uis!;$3j!;uis!;lcr!<2uu!;uis!;c]q!;lcr +!;lcr!<)ot!;uis!.k0Ks8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N*!rr<&ps8E#rs7lZps8N*!s8N*!s8N*!s8N)ss8N)ss8N)s +s7ZNms8)f2rr<&us7lZos7lZjs7lZls8N)qs8)fprr<&urr<&urr<&urr<&rrr<&rrr<&rs7lZm +s8E#lrr<&rrr<&rrr<&krr<&srr<&rs8N)nrr<&rrr<&rrr<&urr<&urr<&urr<&qrr<&rrr<&s +rr<&os8)forr<&rrr<&urr<&srr<&qrr<&rrr<&ls8E"Ls/#bpm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N*!rr<&ps8E#rs7lZps8N*!s8N*!s8N*!s8N)ss8N)ss8N)s +s7ZNms8)f2rr<&us7lZos7lZjs7lZls8N)qs8)fprr<&urr<&urr<&urr<&rrr<&rrr<&rs7lZm +s8E#lrr<&rrr<&rrr<&krr<&srr<&rs8N)nrr<&rrr<&rrr<&urr<&urr<&urr<&qrr<&rrr<&s +rr<&os8)forr<&rrr<&urr<&srr<&qrr<&rrr<&ls8E"Ls/#bpklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N*!rr<&ps8E#rs7lZps8N*!s8N*!s8N*!s8N)ss8N)ss8N)s +s7ZNms8)f2rr<&us7lZos7lZjs7lZls8N)qs8)fprr<&urr<&urr<&urr<&rrr<&rrr<&rs7lZm +s8E#lrr<&rrr<&rrr<&krr<&srr<&rs8N)nrr<&rrr<&rrr<&urr<&urr<&urr<&qrr<&rrr<&s +rr<&os8)forr<&rrr<&urr<&srr<&qrr<&rrr<&ls8E"Ls/#bpirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N)ts8N'#rr<&us7cTos8N*!s8N*!s8N*!s8N)ss8N)s +s8N)ss7ZNks82l3rrW9$rrDfn!!)Ti!!)ZkrrDrr!!)rs!!)ut!!*#u!!*#u!!*#u!!)or!!)or +!!)or!!)TirrDio!!)or!!)or!!)Zkq>gEmrrDfn!!)or!!)or!!*#u!!*#u!!*#u!!)lq!!)or +!!)rs!!)ip!!)rs!!)rs!!)or!!*#u!!)rs!!)lq!!)or!!)Tirr@WMVuQb`!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N)ts8N'#rr<&us7cTos8N*!s8N*!s8N*!s8N)ss8N)s +s8N)ss7ZNks82l3rrW9$rrDfn!!)Ti!!)ZkrrDrr!!)rs!!)ut!!*#u!!*#u!!*#u!!)or!!)or +!!)or!!)TirrDio!!)or!!)or!!)Zkq>gEmrrDfn!!)or!!)or!!*#u!!*#u!!*#u!!)lq!!)or +!!)rs!!)ip!!)rs!!)rs!!)or!!*#u!!)rs!!)lq!!)or!!)Tirr@WMVuQb\!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N)ts8N'#rr<&us7cTos8N*!s8N*!s8N*!s8N)ss8N)s +s8N)ss7ZNks82l3rrW9$rrDfn!!)Ti!!)ZkrrDrr!!)rs!!)ut!!*#u!!*#u!!*#u!!)or!!)or +!!)or!!)TirrDio!!)or!!)or!!)Zkq>gEmrrDfn!!)or!!)or!!*#u!!*#u!!*#u!!)lq!!)or +!!)rs!!)ip!!)rs!!)rs!!)or!!*#u!!)rs!!)lq!!)or!!)Tirr@WMVuQbV!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N)us8N)us8N*!s8N)ss8N*!s8N*!s8N*!s8N*!s8E#t +s8E#rs8N)ss8E#ns8N)ts8N)=rr<&rrrW9$rrDfn!!)Ti!!)]l!s&B$!;uis!;uis!<)ot!<2uu +!<2uu!<2uu!;lcr!;lcr!;lcr!;?Em!;uis!;ZWp!;lcr!;lcr!;6?l!;c]q!<)p"!<<'!q#:UEpr;Q`sr;Q`squ6Wrrr2rur;Q`sqYpNq +qu6WrpAY*mr;Q`sJcD\Krp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N)us8N)us8N*!s8N)ss8N*!s8N*!s8N*!s8N*!s8E#t +s8E#rs8N)ss8E#ns8N)ts8N)=rr<&rrrW9$rrDfn!!)Ti!!)]l!s&B$!;uis!;uis!<)ot!<2uu +!<2uu!<2uu!;lcr!;lcr!;lcr!;?Em!;uis!;ZWp!;lcr!;lcr!;6?l!;c]q!<)p"!<<'!q#:UEpr;Q`sr;Q`squ6Wrrr2rur;Q`sqYpNq +qu6WrpAY*mr;Q`sJcD\KrojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N)us8N)us8N*!s8N)ss8N*!s8N*!s8N*!s8N*!s8E#t +s8E#rs8N)ss8E#ns8N)ts8N)=rr<&rrrW9$rrDfn!!)Ti!!)]l!s&B$!;uis!;uis!<)ot!<2uu +!<2uu!<2uu!;lcr!;lcr!;lcr!;?Em!;uis!;ZWp!;lcr!;lcr!;6?l!;c]q!<)p"!<<'!q#:UEpr;Q`sr;Q`squ6Wrrr2rur;Q`sqYpNq +qu6WrpAY*mr;Q`sJcD\Kro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7ZKns82iss6]jes8Duus8Duus7lZos7lZos7lZos7lZ7s8N)t +rr<&trr<&ts8N)trr<&ts8N)orr<&ts8N)trr<&trr<&trr<&ts8N)trr<&urr<&urr<&us8N)t +rr<&qrr<&qrr<&ts8N)ts8N)trr<&orr<&trr<&qrr<&lrr<&qrr<&urr<&trr<&prr<&qrr<&t +rr<&trr<&urr<&urr<&prr<&ts8N)srr<&prr<&ts8N)ss8N)trr<&trr<&srr<&qrr<&qrr<&t +s8N)ts8N)trr<%Ms/>tsm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7ZKns82iss6]jes8Duus8Duus7lZos7lZos7lZos7lZ7s8N)t +rr<&trr<&ts8N)trr<&ts8N)orr<&ts8N)trr<&trr<&trr<&ts8N)trr<&urr<&urr<&us8N)t +rr<&qrr<&qrr<&ts8N)ts8N)trr<&orr<&trr<&qrr<&lrr<&qrr<&urr<&trr<&prr<&qrr<&t +rr<&trr<&urr<&urr<&prr<&ts8N)srr<&prr<&ts8N)ss8N)trr<&trr<&srr<&qrr<&qrr<&t +s8N)ts8N)trr<%Ms/>tsklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7ZKns82iss6]jes8Duus8Duus7lZos7lZos7lZos7lZ7s8N)t +rr<&trr<&ts8N)trr<&ts8N)orr<&ts8N)trr<&trr<&trr<&ts8N)trr<&urr<&urr<&us8N)t +rr<&qrr<&qrr<&ts8N)ts8N)trr<&orr<&trr<&qrr<&lrr<&qrr<&urr<&trr<&prr<&qrr<&t +rr<&trr<&urr<&urr<&prr<&ts8N)srr<&prr<&ts8N)ss8N)trr<&trr<&srr<&qrr<&qrr<&t +s8N)ts8N)trr<%Ms/>tsirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7ZKns82iss82iss82iss7u]qs8Duus8E!#rr<'!r;cfrq#L?m +qZ-Wqq>eM7!gHnr;ZitrW)rt! +!BU8[l0\NM!!rT)rrE'!rr<&ts7ZKns82iss82iss82iss7u]qs8Duus8E!#rr<'!r;cfrq#L?m +qZ-Wqq>eM7!gHnr;ZitrW)rt! +!B:&Xj6cmG!!rT)rrE'!rr<&ts7ZKns82iss82iss82iss7u]qs8Duus8E!#rr<'!r;cfrq#L?m +qZ-Wqq>eM7!gHnr;ZitrW)rt! +!BpJ^mHsrH!7:cG!.k0prr<%Ms7H +!BU8[l0\ND!7:cG!.k0prr<%Ms7H +!B:&Xj6cm>!7:cG!.k0prr<%Ms7H +!BpJ^mHsrH!7:cG!.k0prr<%Ms7H +!BU8[l0\ND!7:cG!.k0prr<%Ms7H +!B:&Xj6cm>!7:cG!.k0prr<%Ms7H +!BpJ^mBQ]h!.k0rrr<%Ms7QBl!9X:]!.k0$s7ZKlm/bd$J,~> +!BU8[l*:9d!.k0rrr<%Ms7QBl!9X:]!.k0$s7ZKlklK'jJ,~> +!B:&Xj0AX^!.k0rrr<%Ms7QBl!9X:]!.k0$s7ZKlirR%VJ,~> +!BpJ^mBQ]h!.k0ss8;qKs8;op!9X=[!.k0$s7lWnm/bd$J,~> +!BU8[l*:9d!.k0ss8;qKs8;op!9X=[!.k0$s7lWnklK'jJ,~> +!B:&Xj0AX^!.k0ss8;qKs8;op!9X=[!.k0$s7lWnirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mFqU=!5\^7!;6Bl!1j/i!3H5#!65';!8@JQ!6kKA!7_&I!.k0ss8MBdeieN~> +!BU8[l.Z19!5\^7!;6Bl!1j/i!3H5#!65';!8@JQ!6kKA!7_&I!.k0ss8M6`c8pI~> +!B:&Xj4aP3!5\^7!;6Bl!1j/i!3H5#!65';!8@JQ!6kKA!7_&I!.k0ss8M$Z_`*)~> +!BpJ^mG%[[HTo`"mkh#@?Skl1V_q>UEp_uB]: +g&D$Pao;>@dJj1HJcF*srp9a;4b*~> +!BU8[l.c78!<3#p!;6Bj!!<0#!8mhU!;6Bl!65';!!3*"h>[HTo`"mkh#@?Skl1V_q>UEp_uB]: +g&D$Pao;>@dJj1HJcF*srojI/3e.~> +!B:&Xj4jV2!<3#p!;6Bj!!<0#!8mhU!;6Bl!65';!!3*"h>[HTo`"mkh#@?Skl1V_q>UEp_uB]: +g&D$Pao;>@dJj1HJcF*sro4$s2h1~> +!BpJ^mHsrH!;uls!<3#t!<<)o!;ZZi!8dbU!4r41!<)rt!8[YT!;-9k!8RSS!9jF_!;ZWp!5ng: +!87AP!6P6@!7CfH!.k0ss8MBdeieN~> +!BU8[l0\ND!;uls!<3#t!<<)o!;ZZi!8dbU!4r41!<)rt!8[YT!;-9k!8RSS!9jF_!;ZWp!5ng: +!87AP!6P6@!7CfH!.k0ss8M6`c8pI~> +!B:&Xj6cm>!;uls!<3#t!<<)o!;ZZi!8dbU!4r41!<)rt!8[YT!;-9k!8RSS!9jF_!;ZWp!5ng: +!87AP!6P6@!7CfH!.k0ss8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rt!<3#u!<)rt!;ZZp!<)rs!!*&t!<<)u!<)rp!<3#t!!*&t!<)rt!!*&t +!<)rq!;c`o!!<0#!<)ro!9*qX!;lcr!8[YT!4;b+!;ZWp!5ng:!87AP!6P6@!7CfH!.k0ss8MBd +eieN~> +!BU8[l0\ND!;uls!<)rt!<3#u!<)rt!;ZZp!<)rs!!*&t!<<)u!<)rp!<3#t!!*&t!<)rt!!*&t +!<)rq!;c`o!!<0#!<)ro!9*qX!;lcr!8[YT!4;b+!;ZWp!5ng:!87AP!6P6@!7CfH!.k0ss8M6` +c8pI~> +!B:&Xj6cm>!;uls!<)rt!<3#u!<)rt!;ZZp!<)rs!!*&t!<<)u!<)rp!<3#t!!*&t!<)rt!!*&t +!<)rq!;c`o!!<0#!<)ro!9*qX!;lcr!8[YT!4;b+!;ZWp!5ng:!87AP!6P6@!7CfH!.k0ss8M$Z +_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ls8N)us8N)ss8N)rs8N)rs8N'!s7ZNns7lZps7cTns7lZos82lo +s7lZos7lZSrr<&ns8Duus8E#qs8;rqs8N'!s8;rqrrE-"r;c`prW)cor;Zlu!;ulq!!3*"p](3m +qu?Zr!<;utp]('irVllus8;rps8;rls8Duus8E#qs8;ros8;rmrr<&ks8;rqs8N'!s8;rps8;ou +rrDfnr;Zlu!;ulq!<)rt!!`H'!<<'!!<3#u!!*&t!;ZWp!;ZZn!;ulr!<<)u!;ZZp!!*&t!;ZWp +!;ZZn!;uls!!*&t!;lfp!.k1@s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ls8N)us8N)ss8N)rs8N)rs8N'!s7ZNns7lZps7cTns7lZos82lo +s7lZos7lZSrr<&ns8Duus8E#qs8;rqs8N'!s8;rqrrE-"r;c`prW)cor;Zlu!;ulq!!3*"p](3m +qu?Zr!<;utp]('irVllus8;rps8;rls8Duus8E#qs8;ros8;rmrr<&ks8;rqs8N'!s8;rps8;ou +rrDfnr;Zlu!;ulq!<)rt!!`H'!<<'!!<3#u!!*&t!;ZWp!;ZZn!;ulr!<<)u!;ZZp!!*&t!;ZWp +!;ZZn!;uls!!*&t!;lfp!.k1@s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ls8N)us8N)ss8N)rs8N)rs8N'!s7ZNns7lZps7cTns7lZos82lo +s7lZos7lZSrr<&ns8Duus8E#qs8;rqs8N'!s8;rqrrE-"r;c`prW)cor;Zlu!;ulq!!3*"p](3m +qu?Zr!<;utp]('irVllus8;rps8;rls8Duus8E#qs8;ros8;rmrr<&ks8;rqs8N'!s8;rps8;ou +rrDfnr;Zlu!;ulq!<)rt!!`H'!<<'!!<3#u!!*&t!;ZWp!;ZZn!;ulr!<<)u!;ZZp!!*&t!;ZWp +!;ZZn!;uls!!*&t!;lfp!.k1@s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ns8E#ts8N)ss8N)rs8N)ms8;rts8N*!s8N)ts8N)us8E#ts8E#u +s8E#ts8N)rs8N)ss8E#ts8E#ts8N)ts8N)Yrr<&ls8N)urr<&trr<&trr<&ss8N)trr<&ts8N)t +rr<&qrr<&qrr<&ts8N)trr<&ts8N)lrr<&qs8N)trr<&mrr<&ps8N)trr<&trr<&trr<&ms8N)u +rr<&trr<&trr<&srr<&trr<&prr<&lrr<&trr<&ss8N)trr<&trr<&ts8N)orr<&ts8N)trr<&t +rr<&ts8N*!s8N*!rr<&us8N)trr<&qrr<&qrr<&trr<&srr<&trr<&ns8N)trr<&qrr<&qrr<&t +rr<&ss8N)trr<&trr<&trr<%Ms7?9im/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ns8E#ts8N)ss8N)rs8N)ms8;rts8N*!s8N)ts8N)us8E#ts8E#u +s8E#ts8N)rs8N)ss8E#ts8E#ts8N)ts8N)Yrr<&ls8N)urr<&trr<&trr<&ss8N)trr<&ts8N)t +rr<&qrr<&qrr<&ts8N)trr<&ts8N)lrr<&qs8N)trr<&mrr<&ps8N)trr<&trr<&trr<&ms8N)u +rr<&trr<&trr<&srr<&trr<&prr<&lrr<&trr<&ss8N)trr<&trr<&ts8N)orr<&ts8N)trr<&t +rr<&ts8N*!s8N*!rr<&us8N)trr<&qrr<&qrr<&trr<&srr<&trr<&ns8N)trr<&qrr<&qrr<&t +rr<&ss8N)trr<&trr<&trr<%Ms7?9iklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ns8E#ts8N)ss8N)rs8N)ms8;rts8N*!s8N)ts8N)us8E#ts8E#u +s8E#ts8N)rs8N)ss8E#ts8E#ts8N)ts8N)Yrr<&ls8N)urr<&trr<&trr<&ss8N)trr<&ts8N)t +rr<&qrr<&qrr<&ts8N)trr<&ts8N)lrr<&qs8N)trr<&mrr<&ps8N)trr<&trr<&trr<&ms8N)u +rr<&trr<&trr<&srr<&trr<&prr<&lrr<&trr<&ss8N)trr<&trr<&ts8N)orr<&ts8N)trr<&t +rr<&ts8N*!s8N*!rr<&us8N)trr<&qrr<&qrr<&trr<&srr<&trr<&ns8N)trr<&qrr<&qrr<&t +rr<&ss8N)trr<&trr<&trr<%Ms7?9iirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ns8E#ss8N)ss8N)rs8N)ms8E#js8N)us8N)ss8N*!s8N)ts8N)r +s8N)ss8N)ss8N)us8;rSrr<&lrr<&jrr<&srr<&rrr<&urr<&srr<&qrr<&rrr<&rrr<&trr<&s +rr<&lrr<&qrr<&srr<&mrr<&prr<&srr<&urr<&rrr<&nrr<&prr<&rrr<&orr<&prr<&grr<&s +rr<&srr<&urr<&rrr<&prr<&rrr<&urr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&rrr<&r +rr<&srrW9$rrDcm!!)or!!)or!!)]l!!)rs!!)rs!!*#u!!)or!!%TMo`+pX!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#ns8E#ss8N)ss8N)rs8N)ms8E#js8N)us8N)ss8N*!s8N)ts8N)r +s8N)ss8N)ss8N)us8;rSrr<&lrr<&jrr<&srr<&rrr<&urr<&srr<&qrr<&rrr<&rrr<&trr<&s +rr<&lrr<&qrr<&srr<&mrr<&prr<&srr<&urr<&rrr<&nrr<&prr<&rrr<&orr<&prr<&grr<&s +rr<&srr<&urr<&rrr<&prr<&rrr<&urr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&rrr<&r +rr<&srrW9$rrDcm!!)or!!)or!!)]l!!)rs!!)rs!!*#u!!)or!!%TMo`+pT!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#ns8E#ss8N)ss8N)rs8N)ms8E#js8N)us8N)ss8N*!s8N)ts8N)r +s8N)ss8N)ss8N)us8;rSrr<&lrr<&jrr<&srr<&rrr<&urr<&srr<&qrr<&rrr<&rrr<&trr<&s +rr<&lrr<&qrr<&srr<&mrr<&prr<&srr<&urr<&rrr<&nrr<&prr<&rrr<&orr<&prr<&grr<&s +rr<&srr<&urr<&rrr<&prr<&rrr<&urr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&rrr<&r +rr<&srrW9$rrDcm!!)or!!)or!!)]l!!)rs!!)rs!!*#u!!)or!!%TMo`+pN!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ps8E#rs8N)ss8N)rs8N)us8)frs8N)ps7lZos8N)ss8N*!s8N)t +s8N)rs8N)ss8N)ms8)fTrr<&ss8;rsrr<&os8)forr<&rrr<&urr<&srr<&qrr<&rrr<&ls8E#h +rr<&qrr<&srr<&mrr<&prr<&srr<&us7lZhrr<&ps7lZns8)flrr<&ls8)forr<&srr<&urr<&r +rr<&prr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&rs7lZls8N)lrr<&rrr<&rrr<&q +s8)forr<&srr<&us7lYGs7H?jm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ps8E#rs8N)ss8N)rs8N)us8)frs8N)ps7lZos8N)ss8N*!s8N)t +s8N)rs8N)ss8N)ms8)fTrr<&ss8;rsrr<&os8)forr<&rrr<&urr<&srr<&qrr<&rrr<&ls8E#h +rr<&qrr<&srr<&mrr<&prr<&srr<&us7lZhrr<&ps7lZns8)flrr<&ls8)forr<&srr<&urr<&r +rr<&prr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&rs7lZls8N)lrr<&rrr<&rrr<&q +s8)forr<&srr<&us7lYGs7H?jklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ps8E#rs8N)ss8N)rs8N)us8)frs8N)ps7lZos8N)ss8N*!s8N)t +s8N)rs8N)ss8N)ms8)fTrr<&ss8;rsrr<&os8)forr<&rrr<&urr<&srr<&qrr<&rrr<&ls8E#h +rr<&qrr<&srr<&mrr<&prr<&srr<&us7lZhrr<&ps7lZns8)flrr<&ls8)forr<&srr<&urr<&r +rr<&prr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&rs7lZls8N)lrr<&rrr<&rrr<&q +s8)forr<&srr<&us7lYGs7H?jirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ps8E#qs8N)ss8N)rs8N)us8)frs8N)qs7cTns8N)ss8N*!s8N)t +s8N)rs8N)ss8N)ks82lVrr<&qrr<&trr<&prr<&srr<&srr<&rrr<&urr<&srr<&qrr<&rrr<&i +s8N)krr<&qrr<&srr<&mrr<&prr<&srr<&urr<&grr<&prr<&nrr<&srr<&prr<&mrr<&srr<&s +rr<&srr<&urr<&rrr<&prr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&rrr<&ks8N)l +rr<&rrr<&rrr<&rrr<&srr<&srr<&srr<&urr<%Ms6]jcm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ps8E#qs8N)ss8N)rs8N)us8)frs8N)qs7cTns8N)ss8N*!s8N)t +s8N)rs8N)ss8N)ks82lVrr<&qrr<&trr<&prr<&srr<&srr<&rrr<&urr<&srr<&qrr<&rrr<&i +s8N)krr<&qrr<&srr<&mrr<&prr<&srr<&urr<&grr<&prr<&nrr<&srr<&prr<&mrr<&srr<&s +rr<&srr<&urr<&rrr<&prr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&rrr<&ks8N)l +rr<&rrr<&rrr<&rrr<&srr<&srr<&srr<&urr<%Ms6]jcklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ps8E#qs8N)ss8N)rs8N)us8)frs8N)qs7cTns8N)ss8N*!s8N)t +s8N)rs8N)ss8N)ks82lVrr<&qrr<&trr<&prr<&srr<&srr<&rrr<&urr<&srr<&qrr<&rrr<&i +s8N)krr<&qrr<&srr<&mrr<&prr<&srr<&urr<&grr<&prr<&nrr<&srr<&prr<&mrr<&srr<&s +rr<&srr<&urr<&rrr<&prr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&rrr<&ks8N)l +rr<&rrr<&rrr<&rrr<&srr<&srr<&srr<&urr<%Ms6]jcirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8E#ps8N)ts8N)ps8N)ss8N)us8N)qs8N)ss8N)us8E#ts8E#u +s8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)Xrr<&rrr<&trr<&prr<&srr<&srr<&rrr<&urr<&s +rr<&qrr<&rrr<&mrr<&srr<&lrr<&qrr<&srr<&mrr<&prr<&srr<&urr<&grr<&prr<&nrr<&s +rr<&prr<&mrr<&srr<&srr<&srr<&urr<&rrr<&prr<&nrr<&rrr<&urr<&urr<&urr<&urr<&r +rr<&rrr<&rrr<&lrrW9$rrDcm!!)or!!)or!!)or!!)rs!!)rs!!)rs!!*#u!!%TMmJm1Q!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8E#ps8N)ts8N)ps8N)ss8N)us8N)qs8N)ss8N)us8E#ts8E#u +s8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)Xrr<&rrr<&trr<&prr<&srr<&srr<&rrr<&urr<&s +rr<&qrr<&rrr<&mrr<&srr<&lrr<&qrr<&srr<&mrr<&prr<&srr<&urr<&grr<&prr<&nrr<&s +rr<&prr<&mrr<&srr<&srr<&srr<&urr<&rrr<&prr<&nrr<&rrr<&urr<&urr<&urr<&urr<&r +rr<&rrr<&rrr<&lrrW9$rrDcm!!)or!!)or!!)or!!)rs!!)rs!!)rs!!*#u!!%TMmJm1M!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8E#ps8N)ts8N)ps8N)ss8N)us8N)qs8N)ss8N)us8E#ts8E#u +s8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)Xrr<&rrr<&trr<&prr<&srr<&srr<&rrr<&urr<&s +rr<&qrr<&rrr<&mrr<&srr<&lrr<&qrr<&srr<&mrr<&prr<&srr<&urr<&grr<&prr<&nrr<&s +rr<&prr<&mrr<&srr<&srr<&srr<&urr<&rrr<&prr<&nrr<&rrr<&urr<&urr<&urr<&urr<&r +rr<&rrr<&rrr<&lrrW9$rrDcm!!)or!!)or!!)or!!)rs!!)rs!!)rs!!*#u!!%TMmJm1G!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZps7cTis7cQos7lZos7ZNns7lZps8;rts8;rts7lZos7cTo +s7lZRs8N)trr<&srr<&prr<&ts8N)ss8N)trr<&trr<&srr<&qrr<&qrr<&ts8N)ts8N)trr<&l +rr<&qrr<&srr<&mrr<&trr<&urr<&srr<&trr<&ts8N)nrr<&orr<&ts8N)urr<&ts8N)prr<&m +rr<&ts8N)srr<&srr<&trr<&ts8N)orr<&ts8N)trr<&trr<&trr<&urr<&urr<&us8N)trr<&q +rr<&qrr<&ts8N)trr<&trr<&ns8N)trr<&qrr<&rrr<&ts8N)srr<&srr<&trr<&ts8N(Ms7H?j +m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZps7cTis7cQos7lZos7ZNns7lZps8;rts8;rts7lZos7cTo +s7lZRs8N)trr<&srr<&prr<&ts8N)ss8N)trr<&trr<&srr<&qrr<&qrr<&ts8N)ts8N)trr<&l +rr<&qrr<&srr<&mrr<&trr<&urr<&srr<&trr<&ts8N)nrr<&orr<&ts8N)urr<&ts8N)prr<&m +rr<&ts8N)srr<&srr<&trr<&ts8N)orr<&ts8N)trr<&trr<&trr<&urr<&urr<&us8N)trr<&q +rr<&qrr<&ts8N)trr<&trr<&ns8N)trr<&qrr<&rrr<&ts8N)srr<&srr<&trr<&ts8N(Ms7H?j +klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZps7cTis7cQos7lZos7ZNns7lZps8;rts8;rts7lZos7cTo +s7lZRs8N)trr<&srr<&prr<&ts8N)ss8N)trr<&trr<&srr<&qrr<&qrr<&ts8N)ts8N)trr<&l +rr<&qrr<&srr<&mrr<&trr<&urr<&srr<&trr<&ts8N)nrr<&orr<&ts8N)urr<&ts8N)prr<&m +rr<&ts8N)srr<&srr<&trr<&ts8N)orr<&ts8N)trr<&trr<&trr<&urr<&urr<&us8N)trr<&q +rr<&qrr<&ts8N)trr<&trr<&ns8N)trr<&qrr<&rrr<&ts8N)srr<&srr<&trr<&ts8N(Ms7H?j +irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7lZps7u`gs8)frs7lZns82iss8E#us8N'!s8;rss8;rts8;rt +s7lZns8)fps7u`Ps8;rrs7u`ns8;ots8E#trrE-"r;cfrrW)rtrW)rtq>gHnr;c`p! +!BU8[l0\NM!!rT)rrE'!rr<&ss7lZps7u`gs8)frs7lZns82iss8E#us8N'!s8;rss8;rts8;rt +s7lZns8)fps7u`Ps8;rrs7u`ns8;ots8E#trrE-"r;cfrrW)rtrW)rtq>gHnr;c`p! +!B:&Xj6cmG!!rT)rrE'!rr<&ss7lZps7u`gs8)frs7lZns82iss8E#us8N'!s8;rss8;rts8;rt +s7lZns8)fps7u`Ps8;rrs7u`ns8;ots8E#trrE-"r;cfrrW)rtrW)rtq>gHnr;c`p! +!BpJ^mHsrH!5SX7!07'Z!.k00rr<&Hrr<%Ms2+g8m/bd$J,~> +!BU8[l0\ND!5SX7!07'Z!.k00rr<&Hrr<%Ms2+g8klK'jJ,~> +!B:&Xj6cm>!5SX7!07'Z!.k00rr<&Hrr<%Ms2+g8irR%VJ,~> +!BpJ^mHsrH!5SX7!07'Z!.k00rr<&Hrr<%Ms2+g8m/bd$J,~> +!BU8[l0\ND!5SX7!07'Z!.k00rr<&Hrr<%Ms2+g8klK'jJ,~> +!B:&Xj6cm>!5SX7!07'Z!.k00rr<&Hrr<%Ms2+g8irR%VJ,~> +!BpJ^m@jRX!0I3\!.k00rr<&Hrr<%Ms2+g8m/bd$J,~> +!BU8[l(S.T!0I3\!.k00rr<&Hrr<%Ms2+g8klK'jJ,~> +!B:&Xj.ZMN!0I3\!.k00rr<&Hrr<%Ms2+g8irR%VJ,~> +!BpJ^m@jRX!0R<[!.k03s8;rIs8;qKs2=s:m/bd$J,~> +!BU8[l(S.T!0R<[!.k03s8;rIs8;qKs2=s:klK'jJ,~> +!B:&Xj.ZMN!0R<[!.k03s8;rIs8;qKs2=s:irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mFqU +!BU8[l.Z18!5ed8!;6Bl!58F2!4r4/!.k0cs8N(ls8N(Ms8)cpklK'jJ,~> +!B:&Xj4aP2!5ed8!;6Bl!58F2!4r4/!.k0cs8N(ls8N(Ms8)cpirR%VJ,~> +!BpJ^mG%[;!<<)q!;6Bj!!<0#!8mhU!;6Bl!6P9;!;ZWp!:Bdd!7:`G!.k0rrr<&err<%krr<%M +s8)cpm/bd$J,~> +!BU8[l.c77!<<)q!;6Bj!!<0#!8mhU!;6Bl!6P9;!;ZWp!:Bdd!7:`G!.k0rrr<&err<%krr<%M +s8)cpklK'jJ,~> +!B:&Xj4jV1!<<)q!;6Bj!!<0#!8mhU!;6Bl!6P9;!;ZWp!:Bdd!7:`G!.k0rrr<&err<%krr<%M +s8)cpirR%VJ,~> +!BpJ^mHsrH!;lfr!<3#u!<<)o!;ZZi!8dbU!4r11!;uis!;c]q!:Bdd!7CfH!.k0qrr<&err<%k +rr<%Ms8)cpm/bd$J,~> +!BU8[l0\ND!;lfr!<3#u!<<)o!;ZZi!8dbU!4r11!;uis!;c]q!:Bdd!7CfH!.k0qrr<&err<%k +rr<%Ms8)cpklK'jJ,~> +!B:&Xj6cm>!;lfr!<3#u!<<)o!;ZZi!8dbU!4r11!;uis!;c]q!:Bdd!7CfH!.k0qrr<&err<%k +rr<%Ms8)cpirR%VJ,~> +!BpJ^mHsrH!;?Hm!<3#u!<)rt!;ZZp!<)rs!!*&t!<<)u!<)rp!<3#t!!*&t!<)rt!!*&t!<)rq +!;c`o!!<0#!<)ro!9*qX!;lcr!;lcr!:Bdd!7CfH!.k0qrr<&err<%krr<%Ms8)cpm/bd$J,~> +!BU8[l0\ND!;?Hm!<3#u!<)rt!;ZZp!<)rs!!*&t!<<)u!<)rp!<3#t!!*&t!<)rt!!*&t!<)rq +!;c`o!!<0#!<)ro!9*qX!;lcr!;lcr!:Bdd!7CfH!.k0qrr<&err<%krr<%Ms8)cpklK'jJ,~> +!B:&Xj6cm>!;?Hm!<3#u!<)rt!;ZZp!<)rs!!*&t!<<)u!<)rp!<3#t!!*&t!<)rt!!*&t!<)rq +!;c`o!!<0#!<)ro!9*qX!;lcr!;lcr!:Bdd!7CfH!.k0qrr<&err<%krr<%Ms8)cpirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ms8N)ts8N)ss8N)rs8N)rs8N'!s7ZNns7lZps7cTns7lZos82lo +s7lZos7lZRrr<&rrr<&rrr<&ps8;rps7u`is8;ourrE&urrE#trrE&urVururW)lrq>gHnr;c]o +r;Zlu!;ulq!;c`o!!3*"m/R"a!WN0!s8N)ts8N)us8Duus8E#ss8E#ts8E#ss8;ros8;ourrDEc +r;ccqrVururW)]mq>gNprrE#trrE#t! +!BU8[l0\NN!!`H'rrE'!s8E#ms8N)ts8N)ss8N)rs8N)rs8N'!s7ZNns7lZps7cTns7lZos82lo +s7lZos7lZRrr<&rrr<&rrr<&ps8;rps7u`is8;ourrE&urrE#trrE&urVururW)lrq>gHnr;c]o +r;Zlu!;ulq!;c`o!!3*"m/R"a!WN0!s8N)ts8N)us8Duus8E#ss8E#ts8E#ss8;ros8;ourrDEc +r;ccqrVururW)]mq>gNprrE#trrE#t! +!B:&Xj6cmH!!`H'rrE'!s8E#ms8N)ts8N)ss8N)rs8N)rs8N'!s7ZNns7lZps7cTns7lZos82lo +s7lZos7lZRrr<&rrr<&rrr<&ps8;rps7u`is8;ourrE&urrE#trrE&urVururW)lrq>gHnr;c]o +r;Zlu!;ulq!;c`o!!3*"m/R"a!WN0!s8N)ts8N)us8Duus8E#ss8E#ts8E#ss8;ros8;ourrDEc +r;ccqrVururW)]mq>gNprrE#trrE#t! +!BpJ^mHsrQ!!rT)rrE'!rr<&qs8;rqs8N)ss8N)rs8N)ms8;rts8N*!s8N)ts8N)us8E#ts8E#u +s8E#ts8N)rs8N)ss8E#ts8E#ts8N)ts8N)Xrr<&rrr<&rrr<&qrr<&trr<&qrr<&krr<&ts8N)t +rr<&srr<&ss8N)urr<&rrr<&prr<&trr<&srr<&ts8N)trr<&trr<&srr<&ts8N)drr<&ts8N)t +rr<&srr<&ss8N)urr<&trr<&srr<&trr<&trr<&srr<&ts8N)drr<&trr<&rs8N)urr<&mrr<&p +rr<&srr<&ts8N)trr<&trr<&trr<&srr<&ts8N)orr<&trr<&rs8N)urr<&trr<&trr<&srr<&s +rr<&ts8N)trr<&trr<&ts8N)orr<&ts8N)trr<&srr<&ss8N)urr<&trr<&srr<&trr<&trr<&s +rr<&ts8N)8s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&qs8;rqs8N)ss8N)rs8N)ms8;rts8N*!s8N)ts8N)us8E#ts8E#u +s8E#ts8N)rs8N)ss8E#ts8E#ts8N)ts8N)Xrr<&rrr<&rrr<&qrr<&trr<&qrr<&krr<&ts8N)t +rr<&srr<&ss8N)urr<&rrr<&prr<&trr<&srr<&ts8N)trr<&trr<&srr<&ts8N)drr<&ts8N)t +rr<&srr<&ss8N)urr<&trr<&srr<&trr<&trr<&srr<&ts8N)drr<&trr<&rs8N)urr<&mrr<&p +rr<&srr<&ts8N)trr<&trr<&trr<&srr<&ts8N)orr<&trr<&rs8N)urr<&trr<&trr<&srr<&s +rr<&ts8N)trr<&trr<&ts8N)orr<&ts8N)trr<&srr<&ss8N)urr<&trr<&srr<&trr<&trr<&s +rr<&ts8N)8s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&qs8;rqs8N)ss8N)rs8N)ms8;rts8N*!s8N)ts8N)us8E#ts8E#u +s8E#ts8N)rs8N)ss8E#ts8E#ts8N)ts8N)Xrr<&rrr<&rrr<&qrr<&trr<&qrr<&krr<&ts8N)t +rr<&srr<&ss8N)urr<&rrr<&prr<&trr<&srr<&ts8N)trr<&trr<&srr<&ts8N)drr<&ts8N)t +rr<&srr<&ss8N)urr<&trr<&srr<&trr<&trr<&srr<&ts8N)drr<&trr<&rs8N)urr<&mrr<&p +rr<&srr<&ts8N)trr<&trr<&trr<&srr<&ts8N)orr<&trr<&rs8N)urr<&trr<&trr<&srr<&s +rr<&ts8N)trr<&trr<&ts8N)orr<&ts8N)trr<&srr<&ss8N)urr<&trr<&srr<&trr<&trr<&s +rr<&ts8N)8s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ps82lqs8N)ss8N)rs8N)ms8E#js8N)us8N)ss8N*!s8N)ts8N)r +s8N)ss8N)ss8N)us8;rRrr<&srr<&qrr<&rrr<&rrr<&rrr<&krr<&srr<&trr<&srr<&srr<&m +rr<&krr<&trr<&rrr<&urr<&rrr<&trr<&srr<&err<&rrr<&trr<&srr<&srr<&nrr<&urr<&t +rr<&rrr<&trr<&srr<&err<&rrr<&srr<&hrr<&prr<&srr<&trr<&rrrW9$rrDrr!!)ut!!)rs +!!)Wj!!)or!!)ip!!)or!!)ut!!)rs!!)ut!!)rs!!*#u!!)or!!)ip!!)or!!)ut!!)rs!!)rs +!!)cn!!*#u!!)ut!!)or!!)ut!!)rs!!'k8rp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#ps82lqs8N)ss8N)rs8N)ms8E#js8N)us8N)ss8N*!s8N)ts8N)r +s8N)ss8N)ss8N)us8;rRrr<&srr<&qrr<&rrr<&rrr<&rrr<&krr<&srr<&trr<&srr<&srr<&m +rr<&krr<&trr<&rrr<&urr<&rrr<&trr<&srr<&err<&rrr<&trr<&srr<&srr<&nrr<&urr<&t +rr<&rrr<&trr<&srr<&err<&rrr<&srr<&hrr<&prr<&srr<&trr<&rrrW9$rrDrr!!)ut!!)rs +!!)Wj!!)or!!)ip!!)or!!)ut!!)rs!!)ut!!)rs!!*#u!!)or!!)ip!!)or!!)ut!!)rs!!)rs +!!)cn!!*#u!!)ut!!)or!!)ut!!)rs!!'k8rojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#ps82lqs8N)ss8N)rs8N)ms8E#js8N)us8N)ss8N*!s8N)ts8N)r +s8N)ss8N)ss8N)us8;rRrr<&srr<&qrr<&rrr<&rrr<&rrr<&krr<&srr<&trr<&srr<&srr<&m +rr<&krr<&trr<&rrr<&urr<&rrr<&trr<&srr<&err<&rrr<&trr<&srr<&srr<&nrr<&urr<&t +rr<&rrr<&trr<&srr<&err<&rrr<&srr<&hrr<&prr<&srr<&trr<&rrrW9$rrDrr!!)ut!!)rs +!!)Wj!!)or!!)ip!!)or!!)ut!!)rs!!)ut!!)rs!!*#u!!)or!!)ip!!)or!!)ut!!)rs!!)rs +!!)cn!!*#u!!)ut!!)or!!)ut!!)rs!!'k8ro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ns8E#ts8N)ss8N)rs8N)us8)frs8N)ps7lZos8N)ss8N*!s8N)t +s8N)rs8N)ss8N)ms8)fSs8)flrr<&rrr<&rrr<&rrr<&js8E#prr<&srr<&srr<&mrr<&ps8)fp +rr<&ns7lZms8E#arr<&mrr<&srr<&srr<&nrr<&urr<&ts7lZms8E#arr<&rrr<&srr<&hrr<&p +rr<&srr<&trr<&rrrN3#s7lZms8E#ks8)fnrr<&prr<&rrr<&trr<&srr<&trr<&srr<&urr<&r +rr<&prr<&mrr<&srr<&srr<&nrr<&urr<&ts7lZms8E#4s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ns8E#ts8N)ss8N)rs8N)us8)frs8N)ps7lZos8N)ss8N*!s8N)t +s8N)rs8N)ss8N)ms8)fSs8)flrr<&rrr<&rrr<&rrr<&js8E#prr<&srr<&srr<&mrr<&ps8)fp +rr<&ns7lZms8E#arr<&mrr<&srr<&srr<&nrr<&urr<&ts7lZms8E#arr<&rrr<&srr<&hrr<&p +rr<&srr<&trr<&rrrN3#s7lZms8E#ks8)fnrr<&prr<&rrr<&trr<&srr<&trr<&srr<&urr<&r +rr<&prr<&mrr<&srr<&srr<&nrr<&urr<&ts7lZms8E#4s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ns8E#ts8N)ss8N)rs8N)us8)frs8N)ps7lZos8N)ss8N*!s8N)t +s8N)rs8N)ss8N)ms8)fSs8)flrr<&rrr<&rrr<&rrr<&js8E#prr<&srr<&srr<&mrr<&ps8)fp +rr<&ns7lZms8E#arr<&mrr<&srr<&srr<&nrr<&urr<&ts7lZms8E#arr<&rrr<&srr<&hrr<&p +rr<&srr<&trr<&rrrN3#s7lZms8E#ks8)fnrr<&prr<&rrr<&trr<&srr<&trr<&srr<&urr<&r +rr<&prr<&mrr<&srr<&srr<&nrr<&urr<&ts7lZms8E#4s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ls8N)us8N)ss8N)rs8N)us8)frs8N)qs7cTns8N)ss8N*!s8N)t +s8N)rs8N)ss8N)ks82lUrr<&krr<&rrr<&rrr<&rrr<&gs8N)srr<&srr<&srr<&mrr<&qrr<&s +rr<&trr<&nrr<&is8N)drr<&mrr<&srr<&srr<&mrrN3#!;uis!:p0i!:Bdd!;lcr!;uis!:g'h +!;ZWp!;uis!<)ot!;lcu!<<'!o)J^iq#:UEpqu6WrrVlitr;Q`srVlitr;Q`s +rr2ruqu6Wrq>UEppAY*mr;Q`sr;Q`spAY0orrDus!!)TirrBk7rp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#ls8N)us8N)ss8N)rs8N)us8)frs8N)qs7cTns8N)ss8N*!s8N)t +s8N)rs8N)ss8N)ks82lUrr<&krr<&rrr<&rrr<&rrr<&gs8N)srr<&srr<&srr<&mrr<&qrr<&s +rr<&trr<&nrr<&is8N)drr<&mrr<&srr<&srr<&mrrN3#!;uis!:p0i!:Bdd!;lcr!;uis!:g'h +!;ZWp!;uis!<)ot!;lcu!<<'!o)J^iq#:UEpqu6WrrVlitr;Q`srVlitr;Q`s +rr2ruqu6Wrq>UEppAY*mr;Q`sr;Q`spAY0orrDus!!)TirrBk7rojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#ls8N)us8N)ss8N)rs8N)us8)frs8N)qs7cTns8N)ss8N*!s8N)t +s8N)rs8N)ss8N)ks82lUrr<&krr<&rrr<&rrr<&rrr<&gs8N)srr<&srr<&srr<&mrr<&qrr<&s +rr<&trr<&nrr<&is8N)drr<&mrr<&srr<&srr<&mrrN3#!;uis!:p0i!:Bdd!;lcr!;uis!:g'h +!;ZWp!;uis!<)ot!;lcu!<<'!o)J^iq#:UEpqu6WrrVlitr;Q`srVlitr;Q`s +rr2ruqu6Wrq>UEppAY*mr;Q`sr;Q`spAY0orrDus!!)TirrBk7ro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8N)us8N)ts8N)ps8N)ss8N)us8N)qs8N)ss8N)us8E#t +s8E#us8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)Xrr<&krr<&rrr<&rrr<&rrr<&krr<&srr<&t +rr<&srr<&srr<&mrr<&qrr<&srr<&trr<&nrr<&mrr<&srr<&err<&mrr<&srr<&srr<&mrrN3# +!;uis!;?Em!;uis!:Kje!;lcr!;uis!:g'h!;ZWp!;uis!<)ot!;lcu!<<'!pAY*mr;Q`sq>UEp +r;Q`squ6Wrq>UEpqu6WrrVlitr;Q`srVlitr;Q`srr2ruqu6Wrq>UEppAY*mr;Q`sr;Q`spAY0o +rrDus!!)`m!!)rs!!'k8rp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8N)us8N)ts8N)ps8N)ss8N)us8N)qs8N)ss8N)us8E#t +s8E#us8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)Xrr<&krr<&rrr<&rrr<&rrr<&krr<&srr<&t +rr<&srr<&srr<&mrr<&qrr<&srr<&trr<&nrr<&mrr<&srr<&err<&mrr<&srr<&srr<&mrrN3# +!;uis!;?Em!;uis!:Kje!;lcr!;uis!:g'h!;ZWp!;uis!<)ot!;lcu!<<'!pAY*mr;Q`sq>UEp +r;Q`squ6Wrq>UEpqu6WrrVlitr;Q`srVlitr;Q`srr2ruqu6Wrq>UEppAY*mr;Q`sr;Q`spAY0o +rrDus!!)`m!!)rs!!'k8rojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8N)us8N)ts8N)ps8N)ss8N)us8N)qs8N)ss8N)us8E#t +s8E#us8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)Xrr<&krr<&rrr<&rrr<&rrr<&krr<&srr<&t +rr<&srr<&srr<&mrr<&qrr<&srr<&trr<&nrr<&mrr<&srr<&err<&mrr<&srr<&srr<&mrrN3# +!;uis!;?Em!;uis!:Kje!;lcr!;uis!:g'h!;ZWp!;uis!<)ot!;lcu!<<'!pAY*mr;Q`sq>UEp +r;Q`squ6Wrq>UEpqu6WrrVlitr;Q`srVlitr;Q`srr2ruqu6Wrq>UEppAY*mr;Q`sr;Q`spAY0o +rrDus!!)`m!!)rs!!'k8ro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7u`ps7cTis7cQos7lZos7ZNns7lZps8;rts8;rts7lZos7cTo +s7lZRrr<&krr<&qrr<&trr<&qrr<&trr<&ps8N)trr<&trr<&ts8N)srr<&mrr<&qrr<&ts8N)s +rr<&ts8N)trr<&ts8N)ts8N)trr<&qs8N)mrr<&ts8N)trr<&ts8N)srr<&lrr<&qrr<&ts8N)t +s8N)trr<&qs8N)mrr<&trr<&rrr<&hrr<&trr<&urr<&ts8N)ts8N)trr<&trr<&ts8N)ts8N)t +rr<&prr<&ts8N)rrr<&orr<&trr<&srr<&ts8N)trr<&srr<&trr<&ts8N)orr<&ts8N)trr<&t +s8N)srr<&lrr<&qrr<&ts8N)ts8N)trr<&8s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7u`ps7cTis7cQos7lZos7ZNns7lZps8;rts8;rts7lZos7cTo +s7lZRrr<&krr<&qrr<&trr<&qrr<&trr<&ps8N)trr<&trr<&ts8N)srr<&mrr<&qrr<&ts8N)s +rr<&ts8N)trr<&ts8N)ts8N)trr<&qs8N)mrr<&ts8N)trr<&ts8N)srr<&lrr<&qrr<&ts8N)t +s8N)trr<&qs8N)mrr<&trr<&rrr<&hrr<&trr<&urr<&ts8N)ts8N)trr<&trr<&ts8N)ts8N)t +rr<&prr<&ts8N)rrr<&orr<&trr<&srr<&ts8N)trr<&srr<&trr<&ts8N)orr<&ts8N)trr<&t +s8N)srr<&lrr<&qrr<&ts8N)ts8N)trr<&8s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7u`ps7cTis7cQos7lZos7ZNns7lZps8;rts8;rts7lZos7cTo +s7lZRrr<&krr<&qrr<&trr<&qrr<&trr<&ps8N)trr<&trr<&ts8N)srr<&mrr<&qrr<&ts8N)s +rr<&ts8N)trr<&ts8N)ts8N)trr<&qs8N)mrr<&ts8N)trr<&ts8N)srr<&lrr<&qrr<&ts8N)t +s8N)trr<&qs8N)mrr<&trr<&rrr<&hrr<&trr<&urr<&ts8N)ts8N)trr<&trr<&ts8N)ts8N)t +rr<&prr<&ts8N)rrr<&orr<&trr<&srr<&ts8N)trr<&srr<&trr<&ts8N)orr<&ts8N)trr<&t +s8N)srr<&lrr<&qrr<&ts8N)ts8N)trr<&8s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs82lqs7u`gs8)frs7lZns82iss8E#us8N'!s8;rss8;rts8;rt +s7lZns8)fps7u`Ss82lns7u`ns8;rms8;rmrrE-"r;c`pr;[!#!!*'!q>gHnq>gKor;ZitrW)os +r;c]or;c`p!^Hpp&Fsjr;ZTn +o`+jir;Z]q#QFc(s8N'!s8;rps8;rprrE-"r;cTlr;ZitrW)uuq>gEmr;c]or;[!#!!*'!rW)rt +rW)osr;Zp!!!)for;c]or;[!#!!*'!q>g?k!!)ipr;c`p! +!BU8[l0\NM!!rT)rrE'!rr<&rs82lqs7u`gs8)frs7lZns82iss8E#us8N'!s8;rss8;rts8;rt +s7lZns8)fps7u`Ss82lns7u`ns8;rms8;rmrrE-"r;c`pr;[!#!!*'!q>gHnq>gKor;ZitrW)os +r;c]or;c`p!^Hpp&Fsjr;ZTn +o`+jir;Z]q#QFc(s8N'!s8;rps8;rprrE-"r;cTlr;ZitrW)uuq>gEmr;c]or;[!#!!*'!rW)rt +rW)osr;Zp!!!)for;c]or;[!#!!*'!q>g?k!!)ipr;c`p! +!B:&Xj6cmG!!rT)rrE'!rr<&rs82lqs7u`gs8)frs7lZns82iss8E#us8N'!s8;rss8;rts8;rt +s7lZns8)fps7u`Ss82lns7u`ns8;rms8;rmrrE-"r;c`pr;[!#!!*'!q>gHnq>gKor;ZitrW)os +r;c]or;c`p!^Hpp&Fsjr;ZTn +o`+jir;Z]q#QFc(s8N'!s8;rps8;rprrE-"r;cTlr;ZitrW)uuq>gEmr;c]or;[!#!!*'!rW)rt +rW)osr;Zp!!!)for;c]or;[!#!!*'!q>g?k!!)ipr;c`p! +!BpJ^mHsrH!5SX7!.k0Gs8N)(s8N(Ms+14's8MBdeieN~> +!BU8[l0\ND!5SX7!.k0Gs8N)(s8N(Ms+14's8M6`c8pI~> +!B:&Xj6cm>!5SX7!.k0Gs8N)(s8N(Ms+14's8M$Z_`*)~> +!BpJ^mHsrH!5SX7!.k0Gs8N)(s8N(Ms+14's8MBdeieN~> +!BU8[l0\ND!5SX7!.k0Gs8N)(s8N(Ms+14's8M6`c8pI~> +!B:&Xj6cm>!5SX7!.k0Gs8N)(s8N(Ms+14's8M$Z_`*)~> +!BpJ^m@jRX!.k0Js8N)(s8N(Ms+14&s8MBdeieN~> +!BU8[l(S.T!.k0Js8N)(s8N(Ms+14&s8M6`c8pI~> +!B:&Xj.ZMN!.k0Js8N)(s8N(Ms+14&s8M$Z_`*)~> +!BpJ^m@jRX!.k0$s+13$s/Q+um/bd$J,~> +!BU8[l(S.T!.k0$s+13$s/Q+uklK'jJ,~> +!B:&Xj.ZMN!.k0$s+13$s/Q+uirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mEYb3!5nj:!.k0Qs8N(Ms+132s8MBdeieN~> +!BU8[l-B>/!5nj:!.k0Qs8N(Ms+132s8M6`c8pI~> +!B:&Xj3I])!5nj:!.k0Qs8N(Ms+132s8M$Z_`*)~> +!BpJ^mG7g?!<<)s!<3#u!5nj:!5JR4!!3*"k5PD]i;WcWZi:"*o`"mk`r?#=iW&iVrr;osr;Q`s +_>aK8JcEpnrp9a;4b*~> +!BU8[l.uC;!<<)s!<3#u!5nj:!5JR4!!3*"k5PD]i;WcWZi:"*o`"mk`r?#=iW&iVrr;osr;Q`s +_>aK8JcEpnrojI/3e.~> +!B:&Xj5'b5!<<)s!<3#u!5nj:!5JR4!!3*"k5PD]i;WcWZi:"*o`"mk`r?#=iW&iVrr;osr;Q`s +_>aK8JcEpnro4$s2h1~> +!BpJ^mHsrH!<)rq!<<)s!5AL5!5\^8!<)rt!9X:]!9!kW!42\*!;-9k!65$=!9!kW!;c]q!;lcr +!5\[8!.k0ns8MBdeieN~> +!BU8[l0\ND!<)rq!<<)s!5AL5!5\^8!<)rt!9X:]!9!kW!42\*!;-9k!65$=!9!kW!;c]q!;lcr +!5\[8!.k0ns8M6`c8pI~> +!B:&Xj6cm>!<)rq!<<)s!5AL5!5\^8!<)rt!9X:]!9!kW!42\*!;-9k!65$=!9!kW!;c]q!;lcr +!5\[8!.k0ns8M$Z_`*)~> +!BpJ^mHsrH!;uls!;lfr!!*&s!;ZZn!<)rr!<3#p!!*&t!;lfp!<)rr!<<)u!<<)p!;uln!7CfH +!;lcr!9X:]!0R9]!1*Wb!;c]q!4r11!.k0ns8MBdeieN~> +!BU8[l0\ND!;uls!;lfr!!*&s!;ZZn!<)rr!<3#p!!*&t!;lfp!<)rr!<<)u!<<)p!;uln!7CfH +!;lcr!9X:]!0R9]!1*Wb!;c]q!4r11!.k0ns8M6`c8pI~> +!B:&Xj6cm>!;uls!;lfr!!*&s!;ZZn!<)rr!<3#p!!*&t!;lfp!<)rr!<<)u!<<)p!;uln!7CfH +!;lcr!9X:]!0R9]!1*Wb!;c]q!4r11!.k0ns8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)rs8N'!s82los7lZps8;rss7?gHnr;cfrrr<9'!!*'!!!)rsrW)fpq>gHnr;cNjr;[!#!!*'! +rVururW)iqr;ccqrr<'!r;ccq!gHnr;Zlu!.k1(s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)rs8N'!s82los7lZps8;rss7?gHnr;cfrrr<9'!!*'!!!)rsrW)fpq>gHnr;cNjr;[!#!!*'! +rVururW)iqr;ccqrr<'!r;ccq!gHnr;Zlu!.k1(s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)rs8N'!s82los7lZps8;rss7?gHnr;cfrrr<9'!!*'!!!)rsrW)fpq>gHnr;cNjr;[!#!!*'! +rVururW)iqr;ccqrr<'!r;ccq!gHnr;Zlu!.k1(s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8E#ss8E#us8N*!rrrK'rr<'!s8E#ts8Duu +s8E#ss8E#ts8;rts8N)us8N)ps8N)ts8N)Irr<&mrr<&srr<&trr<&ts8N)rrr<&prr<&trr<&t +s8N*!s8N*!rr<&rrr<&qrr<&srr<&trr<&trr<&nrr<&ts8N)ss8N)urr<&trr<&trr<&ss8N)t +rr<&ts8N)trr<&qrr<&qrr<&ts8N)trr<&ts8N)orr<&srr<&trr<&ts8N)qrr<&qs8N)trr<&t +rr<&ts8N)orr<&srr<&qrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&trr<&trr<&rs8N)urr<&r +rr<&prr<&ts8N(Ms4[MPm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8E#ss8E#us8N*!rrrK'rr<'!s8E#ts8Duu +s8E#ss8E#ts8;rts8N)us8N)ps8N)ts8N)Irr<&mrr<&srr<&trr<&ts8N)rrr<&prr<&trr<&t +s8N*!s8N*!rr<&rrr<&qrr<&srr<&trr<&trr<&nrr<&ts8N)ss8N)urr<&trr<&trr<&ss8N)t +rr<&ts8N)trr<&qrr<&qrr<&ts8N)trr<&ts8N)orr<&srr<&trr<&ts8N)qrr<&qs8N)trr<&t +rr<&ts8N)orr<&srr<&qrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&trr<&trr<&rs8N)urr<&r +rr<&prr<&ts8N(Ms4[MPklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8E#ss8E#us8N*!rrrK'rr<'!s8E#ts8Duu +s8E#ss8E#ts8;rts8N)us8N)ps8N)ts8N)Irr<&mrr<&srr<&trr<&ts8N)rrr<&prr<&trr<&t +s8N*!s8N*!rr<&rrr<&qrr<&srr<&trr<&trr<&nrr<&ts8N)ss8N)urr<&trr<&trr<&ss8N)t +rr<&ts8N)trr<&qrr<&qrr<&ts8N)trr<&ts8N)orr<&srr<&trr<&ts8N)qrr<&qs8N)trr<&t +rr<&ts8N)orr<&srr<&qrr<&qrr<&trr<&srr<&srr<&ts8N)trr<&trr<&trr<&rs8N)urr<&r +rr<&prr<&ts8N(Ms4[MPirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N)ss8N)ss8N)rs8N*!s8N'!s8E!&rr<'!rr<&ss8N'# +rr<&rs8N)us8E#os8N)ps8;rCrr<&mrr<&srr<&trr<&srr<&rrr<&qrr<&rrr<&urr<&urr<&u +rr<&rrr<&qrr<&trr<&trr<&rrr<&prr<&rrr<&srr<&jrr<&srr<&rrr<&urr<&srr<&qrr<&r +rr<&rrr<&trr<&srr<&orr<&srr<&trr<&srr<&qrr<&qrr<&srr<&urr<&rrr<&nrr<&urr<&p +rr<&rrr<&rrr<&trrrK'rrE*!!<)ot!;lcu!<<'!qu6Wrr;Q`spAY*mq>UEpr;Q`sJcFI(rp9a; +4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N)ss8N)ss8N)rs8N*!s8N'!s8E!&rr<'!rr<&ss8N'# +rr<&rs8N)us8E#os8N)ps8;rCrr<&mrr<&srr<&trr<&srr<&rrr<&qrr<&rrr<&urr<&urr<&u +rr<&rrr<&qrr<&trr<&trr<&rrr<&prr<&rrr<&srr<&jrr<&srr<&rrr<&urr<&srr<&qrr<&r +rr<&rrr<&trr<&srr<&orr<&srr<&trr<&srr<&qrr<&qrr<&srr<&urr<&rrr<&nrr<&urr<&p +rr<&rrr<&rrr<&trrrK'rrE*!!<)ot!;lcu!<<'!qu6Wrr;Q`spAY*mq>UEpr;Q`sJcFI(rojI/ +3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N)ss8N)ss8N)rs8N*!s8N'!s8E!&rr<'!rr<&ss8N'# +rr<&rs8N)us8E#os8N)ps8;rCrr<&mrr<&srr<&trr<&srr<&rrr<&qrr<&rrr<&urr<&urr<&u +rr<&rrr<&qrr<&trr<&trr<&rrr<&prr<&rrr<&srr<&jrr<&srr<&rrr<&urr<&srr<&qrr<&r +rr<&rrr<&trr<&srr<&orr<&srr<&trr<&srr<&qrr<&qrr<&srr<&urr<&rrr<&nrr<&urr<&p +rr<&rrr<&rrr<&trrrK'rrE*!!<)ot!;lcu!<<'!qu6Wrr;Q`spAY*mq>UEpr;Q`sJcFI(ro4$s +2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&qs8N*!s8N)rs8N)ss7ZNns8N'!s8E!&rr<'!rr<&ss8N'#rr<&r +s8N)us8N)os8N)os8)fDrr<&mrr<&srr<&ss8E#nrr<&qrr<&rrr<&urr<&urr<&urr<&rrr<&m +rr<&ss7lZjrr<&rrr<&srr<&os8)forr<&rrr<&urr<&srr<&qrr<&rrr<&ls8E#krr<&srr<&s +s8E#mrr<&qrr<&srr<&urr<&rrr<&nrr<&urr<&prr<&rs7lZnrrrK'rrE*!!<)ot!;lcu!<<'! +qu6Wrr;Q`spAY*mq#C +!BU8[l0\NM!!rT)rrE'!rr<&qs8N*!s8N)rs8N)ss7ZNns8N'!s8E!&rr<'!rr<&ss8N'#rr<&r +s8N)us8N)os8N)os8)fDrr<&mrr<&srr<&ss8E#nrr<&qrr<&rrr<&urr<&urr<&urr<&rrr<&m +rr<&ss7lZjrr<&rrr<&srr<&os8)forr<&rrr<&urr<&srr<&qrr<&rrr<&ls8E#krr<&srr<&s +s8E#mrr<&qrr<&srr<&urr<&rrr<&nrr<&urr<&prr<&rs7lZnrrrK'rrE*!!<)ot!;lcu!<<'! +qu6Wrr;Q`spAY*mq#C +!B:&Xj6cmG!!rT)rrE'!rr<&qs8N*!s8N)rs8N)ss7ZNns8N'!s8E!&rr<'!rr<&ss8N'#rr<&r +s8N)us8N)os8N)os8)fDrr<&mrr<&srr<&ss8E#nrr<&qrr<&rrr<&urr<&urr<&urr<&rrr<&m +rr<&ss7lZjrr<&rrr<&srr<&os8)forr<&rrr<&urr<&srr<&qrr<&rrr<&ls8E#krr<&srr<&s +s8E#mrr<&qrr<&srr<&urr<&rrr<&nrr<&urr<&prr<&rs7lZnrrrK'rrE*!!<)ot!;lcu!<<'! +qu6Wrr;Q`spAY*mq#C +!BpJ^mHsrR!!`H'rrE'!s8E#ps8N*!s8N)rs8N)ss7ZNms8Duus8E#ts8N)ss8N'#rr<&rs8N)u +s8N)os8N)ms82lFrr<&mrr<&srr<&ps8N)qrr<&qrr<&rrr<&urr<&urr<&urr<&rrr<&nrr<&r +rr<&irr<&rrr<&srr<&prr<&srr<&srr<&rrr<&urr<&srr<&qrr<&rrr<&is8N)nrr<&srr<&p +s8N)prr<&qrr<&srr<&urr<&rrr<&mrrN3#!;QQo!;lcr!;?Es!<3'!!<3&trr<&rrrW9$rrDrr +!!)rs!!)`m!!)]lrr@WMg&M'=!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#ps8N*!s8N)rs8N)ss7ZNms8Duus8E#ts8N)ss8N'#rr<&rs8N)u +s8N)os8N)ms82lFrr<&mrr<&srr<&ps8N)qrr<&qrr<&rrr<&urr<&urr<&urr<&rrr<&nrr<&r +rr<&irr<&rrr<&srr<&prr<&srr<&srr<&rrr<&urr<&srr<&qrr<&rrr<&is8N)nrr<&srr<&p +s8N)prr<&qrr<&srr<&urr<&rrr<&mrrN3#!;QQo!;lcr!;?Es!<3'!!<3&trr<&rrrW9$rrDrr +!!)rs!!)`m!!)]lrr@WMg&M'9!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#ps8N*!s8N)rs8N)ss7ZNms8Duus8E#ts8N)ss8N'#rr<&rs8N)u +s8N)os8N)ms82lFrr<&mrr<&srr<&ps8N)qrr<&qrr<&rrr<&urr<&urr<&urr<&rrr<&nrr<&r +rr<&irr<&rrr<&srr<&prr<&srr<&srr<&rrr<&urr<&srr<&qrr<&rrr<&is8N)nrr<&srr<&p +s8N)prr<&qrr<&srr<&urr<&rrr<&mrrN3#!;QQo!;lcr!;?Es!<3'!!<3&trr<&rrrW9$rrDrr +!!)rs!!)`m!!)]lrr@WMg&M'3!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ps8;ros8N)ss8E#ms8Duus8E#ts8E#ts8Duus8E#ss8E#ts8N)o +s8N)ts8N*!s8N)ts8N)Hrr<&rrr<&urr<&srr<&trr<&srr<&rrr<&qrr<&rrr<&urr<&urr<&u +rr<&rrr<&orr<&urr<&urr<&irr<&rrr<&srr<&prr<&srr<&srr<&rrr<&urr<&srr<&qrr<&r +rr<&mrr<&srr<&orr<&srr<&trr<&srr<&qrr<&qrr<&srr<&urr<&rrr<&mrrN3#!;QQo!;lcr +!;?Es!<3'!!<3&trr<&rrrW9$rrDrr!!)rs!!)`m!!)ip!!)rs!!%TMgAh0>!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ps8;ros8N)ss8E#ms8Duus8E#ts8E#ts8Duus8E#ss8E#ts8N)o +s8N)ts8N*!s8N)ts8N)Hrr<&rrr<&urr<&srr<&trr<&srr<&rrr<&qrr<&rrr<&urr<&urr<&u +rr<&rrr<&orr<&urr<&urr<&irr<&rrr<&srr<&prr<&srr<&srr<&rrr<&urr<&srr<&qrr<&r +rr<&mrr<&srr<&orr<&srr<&trr<&srr<&qrr<&qrr<&srr<&urr<&rrr<&mrrN3#!;QQo!;lcr +!;?Es!<3'!!<3&trr<&rrrW9$rrDrr!!)rs!!)`m!!)ip!!)rs!!%TMgAh0:!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ps8;ros8N)ss8E#ms8Duus8E#ts8E#ts8Duus8E#ss8E#ts8N)o +s8N)ts8N*!s8N)ts8N)Hrr<&rrr<&urr<&srr<&trr<&srr<&rrr<&qrr<&rrr<&urr<&urr<&u +rr<&rrr<&orr<&urr<&urr<&irr<&rrr<&srr<&prr<&srr<&srr<&rrr<&urr<&srr<&qrr<&r +rr<&mrr<&srr<&orr<&srr<&trr<&srr<&qrr<&qrr<&srr<&urr<&rrr<&mrrN3#!;QQo!;lcr +!;?Es!<3'!!<3&trr<&rrrW9$rrDrr!!)rs!!)`m!!)ip!!)rs!!%TMgAh04!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#os8;rrs7lZos7lZns8N)us8N)us7lZos7lZps7lZms7lZps7lZB +s8N)trr<&trr<&ts8N)ts8N)trr<&rrr<&trr<&urr<&trr<&trr<&urr<&urr<&rrr<&prr<&t +rr<&trr<&ts8N)orr<&ts8N)srr<&prr<&ts8N)ss8N)trr<&trr<&srr<&qrr<&qrr<&ts8N)t +s8N)trr<&orr<&ts8N)ts8N)trr<&qrr<&qrr<&srr<&trr<&ts8N)lrr<&nrr<&qrr<&ts8N)s +rr<&urr<&ss8N)trr<&trr<&trr<&rrr<&mrr<&trr<&us8N)trr<%Ms4[MPm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#os8;rrs7lZos7lZns8N)us8N)us7lZos7lZps7lZms7lZps7lZB +s8N)trr<&trr<&ts8N)ts8N)trr<&rrr<&trr<&urr<&trr<&trr<&urr<&urr<&rrr<&prr<&t +rr<&trr<&ts8N)orr<&ts8N)srr<&prr<&ts8N)ss8N)trr<&trr<&srr<&qrr<&qrr<&ts8N)t +s8N)trr<&orr<&ts8N)ts8N)trr<&qrr<&qrr<&srr<&trr<&ts8N)lrr<&nrr<&qrr<&ts8N)s +rr<&urr<&ss8N)trr<&trr<&trr<&rrr<&mrr<&trr<&us8N)trr<%Ms4[MPklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#os8;rrs7lZos7lZns8N)us8N)us7lZos7lZps7lZms7lZps7lZB +s8N)trr<&trr<&ts8N)ts8N)trr<&rrr<&trr<&urr<&trr<&trr<&urr<&urr<&rrr<&prr<&t +rr<&trr<&ts8N)orr<&ts8N)srr<&prr<&ts8N)ss8N)trr<&trr<&srr<&qrr<&qrr<&ts8N)t +s8N)trr<&orr<&ts8N)ts8N)trr<&qrr<&qrr<&srr<&trr<&ts8N)lrr<&nrr<&qrr<&ts8N)s +rr<&urr<&ss8N)trr<&trr<&trr<&rrr<&mrr<&trr<&us8N)trr<%Ms4[MPirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&os8N)ss7lZms8)fps8N)us8N)us8N'!s8;rps8;rrs7lZls82lq +s7u`@s8;rps8;p!rr<&urrE-"r;cZnr;ccqr;cfrrW)uurrE*!rrE*!q>gKoq>gHnr;cNjr;Zlu +!<3#p!;ulq!!*&u!<3!!!<;utrVuisrr;rtrr;fpr;Z]qqu6Zss8;rks8;p!rr<&urrE-"r;ccq +q>gNprW)rtrW)osr;Zlu!;6?l!;c`l!;ulq!;c]q!<2uu!;uit!<;utqu?Tpr;ZTnq>^BnrVllu +s8;qKs4RGOm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&os8N)ss7lZms8)fps8N)us8N)us8N'!s8;rps8;rrs7lZls82lq +s7u`@s8;rps8;p!rr<&urrE-"r;cZnr;ccqr;cfrrW)uurrE*!rrE*!q>gKoq>gHnr;cNjr;Zlu +!<3#p!;ulq!!*&u!<3!!!<;utrVuisrr;rtrr;fpr;Z]qqu6Zss8;rks8;p!rr<&urrE-"r;ccq +q>gNprW)rtrW)osr;Zlu!;6?l!;c`l!;ulq!;c]q!<2uu!;uit!<;utqu?Tpr;ZTnq>^BnrVllu +s8;qKs4RGOklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&os8N)ss7lZms8)fps8N)us8N)us8N'!s8;rps8;rrs7lZls82lq +s7u`@s8;rps8;p!rr<&urrE-"r;cZnr;ccqr;cfrrW)uurrE*!rrE*!q>gKoq>gHnr;cNjr;Zlu +!<3#p!;ulq!!*&u!<3!!!<;utrVuisrr;rtrr;fpr;Z]qqu6Zss8;rks8;p!rr<&urrE-"r;ccq +q>gNprW)rtrW)osr;Zlu!;6?l!;c`l!;ulq!;c]q!<2uu!;uit!<;utqu?Tpr;ZTnq>^BnrVllu +s8;qKs4RGOirR%VJ,~> +!BpJ^mHsrH!7:cG!.k0Trr<&^rr<%`rr<&Crr<%Ms/>tsm/bd$J,~> +!BU8[l0\ND!7:cG!.k0Trr<&^rr<%`rr<&Crr<%Ms/>tsklK'jJ,~> +!B:&Xj6cm>!7:cG!.k0Trr<&^rr<%`rr<&Crr<%Ms/>tsirR%VJ,~> +!BpJ^mHsrH!7:cG!.k0Trr<&^rr<%`rr<&Crr<%Ms/>tsm/bd$J,~> +!BU8[l0\ND!7:cG!.k0Trr<&^rr<%`rr<&Crr<%Ms/>tsklK'jJ,~> +!B:&Xj6cm>!7:cG!.k0Trr<&^rr<%`rr<&Crr<%Ms/>tsirR%VJ,~> +!BpJ^mBQ]h!.k0Wrr<&]rr<%arr<&Brr<%Ms/>tsm/bd$J,~> +!BU8[l*:9d!.k0Wrr<&]rr<%arr<&Brr<%Ms/>tsklK'jJ,~> +!B:&Xj0AX^!.k0Wrr<&]rr<%arr<&Brr<%Ms/>tsirR%VJ,~> +!BpJ^mBQ]h!.k0\s82lZs8;qfs82l?s8;qKs/Q+um/bd$J,~> +!BU8[l*:9d!.k0\s82lZs8;qfs82l?s8;qKs/Q+uklK'jJ,~> +!B:&Xj0AX^!.k0\s82lZs8;qfs82l?s8;qKs/Q+uirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6eq)D'eq)D'f"T]84b*~> +!BU73c@O8lc@O8lcG%R(3e.~> +!B:%0_h#^V_h#^V_nO"g2h1~> +JN\QIJN\QIJN^V.J,~> +JNA?CJNA?CJNCD(J,~> +JN&-=JN&-=JN(2"J,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/books/ps/v71linalgpage.eps b/books/ps/v71linalgpage.eps new file mode 100644 index 0000000..9988a29 --- /dev/null +++ b/books/ps/v71linalgpage.eps @@ -0,0 +1,3608 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner +%%Title: linalgpage.eps +%%CreationDate: Sat Jun 21 10:56:46 2008 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 696 562 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 547.19241432849071 translate +681.59055118110246 -547.19241432849071 scale +% Image geometry +710 570 8 +% Transformation matrix +[ 710 0 0 570 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 710 string def +/gstr 710 string def +/bstr 710 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 206888 ASCII Bytes +colorimage +quD:2JN\QIJN\QI`BF,!J,~> +quD:/JNA?CJNA?C`B*nsJ,~> +quD:,JN&-=JN&-=`Ad\pJ,~> +rW)s]JcC<$JcC<$JcE^hs#p>]J,~> +rW)sZJcC<$JcC<$JcE^hs#U,ZJ,~> +rW)sWJcC<$JcC<$JcE^hs#9oWJ,~> +rr<*`rr.KIJc1/uJc1/u`Voi9!^-M`J,~> +rr<*]rr.KIJc1/uJc1/u`Voi9!]g;]J,~> +rr<*ZrV_ +!WYC^Jc()sJc()sNr84$rVYu>rVYu>rqliX4TL!~> +!WY:[Jbt#qJbt#qNr/.#rVPo=rVPo=rqccV3WO[~> +!WY1WJbjroJbjroNr&(!rVGi;rVGi;rqZ]T2ZS@~> +!WYC]JbjroJbjroO88m7bjGE6b_l8nMTkJf"jDl#qMNMars$])qYK/6!.Y~> +!WY:YJbalmJbalmO8/g6bjGE6b_l5lMTkJf"jDl"q23D`rs$])q>&u1!.Y~> +!WY1VJbXfkJbXfkO8&a4bjGE6b_c,iM9PAe"jDhupkd5^rs$](q"Wc+!.Y~> +!Bp>Xq#LHro)O@;JbalmJbc):!K-jCr!!%Vq>#pHmJI.dMY[(*rU'L`rJLUM!T?1l~> +!BU)TpAk6po)O@9JbO`iJbPr6!K$dBr!!%Up\0OCmJI.dM>-b$rU'L`rJCOJ!T,qg~> +!B9iPo`5$no)O@7Jb=TeJb>f2!JgX@qZZqRp%=+=mJ@(cL\:=qrU'I_rJ1CF!So\b~> +!Bp;WpB/E6`%CW^JbO`iJbO`iU\=eGr9a=ar/(1BM>Zc;"oO5OpPJh8q>pMNrq?HN4b*~> +!BU&So`N34`%CW^Jb=TeJb=TeU\+YCqsF1_qhOk;L\pK7"oF)JonWG3q#UAJrq- +!B9fOo)m!2`%CW^Jb+HaJb+HaU[nM@qsF.^qhF_6LAUB5"oF&Go7m/0p]:8Hrpp0F2h1~> +!Bp;Wp(.1.qQ+s_PA6:)B9P$56BcuoJbJL)!B;b3p&R-+j7WI4r\"=mJ$k^M"^OuqsF.ZqhY7F!T#ti~> +!BU#RoFLt,qQ+s_PA6:)B9P$56BcumJb8@%!B2Y1oDpm'j7E=1r[n7:En#[4Jb8!p!JgO=p'(;J +o^mq8mIg_[L\14oqX*tWqM5(B!Sf_d~> +!B9cNnIPY)qQ+s_PA6:)B9P$56BcujJar-t!AuJ.nGtL!j7*+,r[e18E6s1+Jaqdj!JU=9oEG#D +naV>.mIUSWL%4\eq!I\SpkA_;!SKD^~> +!Bp5UoFLu0rRn3jg"`aZgP!Sqn*,DqJb8@%!B;b3oDpp)j7ER90=\&s00%=0oRZYqoDsaDmIg_[ +L\14oqYU!^!;lHnqM4_8L\goArrE#krrDri!W%TNoE!`1J,~> +!BTuQndkc.rRn3jg"`aZgP!Sqn*,DoJb&4!!B)S0nc:X$j73F50"7in/iLt*nq$Amnc=L?mIUSW +L@Xniq"s^Z!;lBlpkJA1LA:Z +!B9]LmLT?*rRn3jg"`aZgP!Sqn*,DkJaVpn!AuJ.mK#0sj6d.0/[VEf/N(\%mXafemK&"8mI:AS +K^S8]p\XLV!;l9ipOqu&K_PB6rrE#frrDrd!V_9HmK(ouJ,~> +!Bp5Uo+1j^q.'!S]bf~> +!BTrPn.5O[q.'=Kq;_S5;$s8()tXJai=$!JU:8nHJZ@nF2/+qsjI^qsajaL%+Sc +p\XL[!<;Tg!;l9epP&V9!SBG`~> +!B9ZKljs+Wq.'rqsF1Zqs=RZK'_iU +o_\%T!<;Hc!;l-aoRd)/!S',Z~> +!Bp2TnIM9cSg;Z[PNqO4eC2_7]E!NQJar-t!B2\2Zlq:[naX"?D=QmSRIMpd@VIK2n_lPt_JM!T +nO,$*M"*DWrp^W@008X&035j%<%k2602J^[R+d,]JarC&!JU:8nHJZ@naV>-qsaXdqsaXdqsaja +L%4\ep\OFW!;c3dpP&V:!SKVd~> +!BToOmLPs`Sg;Z[PNqO4eC2_7]E!NNJaVpn!B)S0YotqVmd@D6D!pLMR-lR^@:q3,mbTul^hb[N +mQrO#L$giOrpCE:/ii?s/lfQr;_Fo./kr@SQe-fVJaW0u!JL.5mKN9:md>c$qsFFaqsFFaqsFX\ +K^S8]p%n+R!;c*aon<>4!S9A_~> +!B9TIl49O\Sg;Z[PNqO4eC2_7]E!NJJa2Xf!AuJ.Y9>YQlKYT*C?jkAPj0hT?Y1m&lJ" +!Bp/SnGWCrR)/p$U':T##6Y89!.jWjnEo]F2u>9.n/^gX1ukMmj7"]_l.n!Qn=VFeiMS?!n3\kb +nF/@irpUEO0/;rh0@'(VbqD^X0?o(;Jai0u!JU46mfiB +!BTlNm/?tnR)/p$U':T##6Y89!.jKfm-X->2Z#-,llG7O1Z+uchs;sUjk27Gm%,h\h4lTjlp<>Y +m-HV_rp1-G/hlW`0$qqs+4^qs+4^qs+FWK'_iUoD._N +!;Yp]o7Hu.!S'5]~> +!B9QHkPbGiR)/p$U':T##6Y89!.j]!*k8iSD1#&BYgZL.Ji7'>;kF4&Pfq9p_k/MH9X/]Qu:`%=MG/]<5'J`lOc!J'\,jot7)kN@BbqrRkYqrRkYqrS(OJEQ*GnG25F +!;YaXn::N$!RNcU~> +!BouNkl(Pb/K"OJ,l%Fkk^hsbkQ*UqroaAA0E1/FHnV'iHKaQG6g3Yc0B\/h0*?jj6SJH&!B2\2 +kRPH_7-HBZjlkph0/>78idp +!BTZHj8K#]/K"OJ,l%Fkj+67XirM%jro4#;0)jl@GV5F_GN7^960$oV0&hT_/d$[b5q`/s!B)S0 +isrdU6fTmRi8`kU/ho%4h1=U;j7)(0Ic0V;"lOjij*oq`bQ%Y?bQ%Y?bQZpRj5YUHq98d;q9/lt +IfA@.brU@~> +!B99@g\q0U/K"OJ,l%FkgO\,HgAs,_rn@H1/cOK7F=ibRF5,G$5MOjC/_YdR/H^CT5:ulh!AlD- +gCCYD6/+%Eg"Y96/MAb/eUcJ+g[NquH.hT#"ke1UgNhKL^]4B3^]4B3^]iD:gY7#,q7uq/q7m$a +H2cP!`]&D~> +!BouNkl1Vb#V@VJpAfd.J`uLb!B2\2kQ*Uqroap-01.D6kiaZekgqITkaX;Qr9+/K0E1/92_Y0o% +X9XRkXmMKkig#>91CSJJ`q[KnE9n'jmCP$jacRYJE?[X!!)oG!!)oG"m(9uk^_dkeGB7Be,eZ]r +oaC14b*~> +!BTZHj8T)]#V@VJpAfd)J`H.X!B)S0irM%jro4R#/jV,.j5VaXj3oVIj-_NFr8RfD0)jl32D5!h% +WsCLj%(f?j5[s.8OP2AJ`D=AnDaOui9e_li-s_HIc1+I!!)o?!!)o?"lOjij*oq_bkhD:bQ6XNr +o4%(3e.~> +!B99@g]%6U#V@VJpAfd!J_TSH!AlD-gAs,_rnA!j/O(i#gY4;EgWM06gQX:4r7_6:/cOK*1bJ^]% +WO(CgI +!BouNkl1Vc*9u5B"o&(Kk^hsbkQ*UqroaAA0E1/;k=714roanH4N;n)K]q/U1Q8W6XQW#)rob.W +0=Iir01=FUUb>]X\5P&VQ7kY"\":fpk^hsikQ-4qqpbEAqpYf2JEZ3IjnmO-!;k7G!;k7LjacRY +JE?[XrW)uJrW)iF!Tek2kQ0'oJ,~> +!BT]IjSo2_*9u5B"o&(KjFQCZj8h.kro=)<0)jo6j$kY,ro=VC4MlP"J`PEI0oE0+WoQGuro=kR +0!_?h/k"1LTIs0O[8JWMP:f4oZ^]'fjFQCaj8j_fqonj9qof6%IcTR=i;:^u!;jt?!;jtDi-sbJ +Ic1+IrW)uBrW)i>!T8G+j8mOeJ,~> +!B96a>O"EYbXd6hTgk"8Qg];`SqnW"-qnNBgHJI;%g&&Pb!;jP3!;jP8fm;H/ +HJ/22rW)u6rW)i2!SMeug]>DRJ,~> +!Bp#Ol2CYh`gQi;/L:B8*$kL`Ja%aMmHFX10E12:2_Y-o!fAY7rosD8%5r=fl06H-3\WspksI-' +kls("0/,eCf`(+EX&_&7=0(TLSPM$t9uV\JJa)gk!J0A0eG0+Ae-4rbl03c\qpbEAqpYf2Ja)EM +jnmR-!<(FI!;k7HjamEq!Ra,]~> +!BT]IjSf,c`gQi;/L:B8*$kL`J`MCCmGn:+0)jo42D4sh!f&D.roF&2%5i1^jQ+Eq3%mUgj?YEt +j9@Lp/h]V?e,JD;W)PQ0Ll9>Q2?J`QIa!Iiu(bkV89bQZpRjQ(dJqonj9qof6%IcTR= +i;:au!<(.A!;jt@i-t[d!R<`V~> +!B9 +!Bp#Ol2CYh`gZq,[EWpW`6nPaJa%aMiopM`7Ha[7!A?fkl%/*AklH@smF2=$Ja)EMjmCP$jal[\ +J`Z:K!Ten3klK3qJ,~> +!BT]Ijo,5d`gZq,[EWpW`6nPaJ`VIEioL5[7-":.!A6ZhjalO9jT0khmE>alJ*#dAi9e_li.'kM +J)K_ +!B9?Bh>RB\`gZq,[EWpW`6nPaJ_bn5inXZO6ehUr!A-Neh1=D)h#ViUmD/t[HJRD'g?l][g3VT2 +HJ7c&!SVl!h#YPTJ,~> +!Bp#OlM^bi`gQl,3g9Tn"BYR&Ja.gOj6?]S09uM$!A?fkl@J6Cl2cIumF;C&Ja2NOk3^\&k(2g_ +J`c@M!Tnt4l2f?sJ,~> +!BT]Ijo,5d`gQl,3g9Tn"BYR&J`VIEj5g?J/s6+o!A6ZhjalO9jT0kimEGgnJ*#dAiU+kniIBtN +J)Te>!TAP-jT3[gJ,~> +!B9?BhYmK]`gQl,3g9Tn"BYR&J_kt7j5'j>/WK_c!A-QfhLXP+h>quWmD/t[Hf!V+g?l][g3_]5 +HeRl'!SVo"h>t\VJ,~> +!Bp#OlMghk&_t2%fn@#Go66o-!.jEdlJq.2Sqc&!l2dfcJa.gOb3B"Yk3^\&k(2g_J`c@M"m1C$ +l@J*beH+f`rosO54b*~> +!BT`Jk5PDg&_t2%fn@#Go66o-!.j9`k2YS*S:oSojoM9YJ`_OGb2r_SiU+kniIC"PJ)Te>"lXsn +k'u@WblQdQroO7-3e.~> +!B9?BhZ!Q_&_t2%fn@#Go66o-!.j!XhW*GoQ@RB]h>s4EJ_kt7b2*/Gg?l][g3_]5HeRl'"kn=[ +hL!uD_#`8:rn[[s2h1~> +!Bp#OlMghk'5_SV(2[7W6#A@U!.jEdl@J5OlD*VFJ[k+0"h9-Kl@HJ4jor8GlKWr1mH+GZJc=p8 +dli3~> +!BT`Jk5PDg'5_SV(2[7W6#A@U!.j9`k(2ZGk+h&>J$eV%"gidAk'sc*i +!B9BChu +!Bp&PlgXt+l[eAQl[eArlg&`mlg&`mlg&`mlN,KuJ,~> +!BTcKkOAP'kCMfIkCMfjkNd-dkNd-dkNd-dk5ipjJ,~> +!B9BCi:-eui.9g;i.9g\i9P1Wi9P1Wi9P1WhuUtZJ,~> +!Bp%*l[eAQl[eAQlbD`de3/<~> +!BTb%kCMfIkCMfIkJ-0\coQ[~> +!B9@ri.9g;i.9g;i4n1Nau=h~> +!Boe#i.9g;i.9g;i4e+L4b*~> +!BTIrg4@t/g4@t/g:l8@3e.~> +!B9%id"0Ppd"0Ppd([j,2h1~> +!'PmaJUrB'JUrB']n$/HJ,~> +!'5[SJTcTfJTcTf]ljB:J,~> +!&oIAJS0OHJS0OH]k7=(J,~> +!BpJ^m5t=JrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&c!S0Da~> +!BU8[kr\nFrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&_!R<`V~> +!B:&Xj#d8@rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&Y!Q-jH~> +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rp9a;4b*~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rojI/3e.~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!ro4$s2h1~> +!BpJ^mDo8,!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)um/bd$J,~> +!BU8[l,Wi(!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uklK'jJ,~> +!B:&Xj2_3"!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uirR%VJ,~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls-!E\!9O7\ +!.k0krriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!!*&um/bd$J,~> +!BU8[kl:__rrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls-!E\!9O7\ +!.k0krriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!!*&uklK'jJ,~> +!B:&XirB)YrrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls-!E\!9O7\ +!.k0krriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!!*&uirR%VJ,~> +!BpJ^m0@rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[km%.frrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcFm4 +quHKk!!(.@r;cTl!!)*[!!%TMao;>@rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcFm4 +quHKk!!(.@r;cTl!!)*[!!%TMao;>@rr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k11 +rr<&lrr<&=rr<&nrr<&[rr<%Ms2b3D!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k11 +rr<&lrr<&=rr<&nrr<&[rr<%Ms2b3D!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k11 +rr<&lrr<&=rr<&nrr<&[rr<%Ms2b3D!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0_<2 +!<3'!!<3'!!<3'!!<3'!!<3'!!<<#urp9a;4b*~> +!BU8[km%.frrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcFg2!!'V1!W`6#q#:_<2 +!<3'!!<3'!!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcFg2!!'V1!W`6#q#:_<2 +!<3'!!<3'!!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k11 +rr<&ns8E#qs8N'!s8;rps8;ros8;rqs8Duus8E#krrN3#!;QQo!;ZZn!!<0#!<)rr!;lcs!<;ut +rVuis!<<#uqu?TpJcFa0"T\Q&rrE)s!!*&s!%.^GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8E#urr<&urtPP6!<3'!!<3'!!<3'!!<3'!!<3'!p])$.!<3'!!<3'!!<3'!!<3'! +!<3'!rVururp9a;4b*~> +!BU8[kl:__rrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k11 +rr<&ns8E#qs8N'!s8;rps8;ros8;rqs8Duus8E#krrN3#!;QQo!;ZZn!!<0#!<)rr!;lcs!<;ut +rVuis!<<#uqu?TpJcFa0"T\Q&rrE)s!!*&s!%.^GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8E#urr<&urtPP6!<3'!!<3'!!<3'!!<3'!!<3'!p])$.!<3'!!<3'!!<3'!!<3'! +!<3'!rVururojI/3e.~> +!B:&XirB)YrrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k11 +rr<&ns8E#qs8N'!s8;rps8;ros8;rqs8Duus8E#krrN3#!;QQo!;ZZn!!<0#!<)rr!;lcs!<;ut +rVuis!<<#uqu?TpJcFa0"T\Q&rrE)s!!*&s!%.^GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8E#urr<&urtPP6!<3'!!<3'!!<3'!!<3'!!<3'!p])$.!<3'!!<3'!!<3'!!<3'! +!<3'!rVururo4$s2h1~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcFg2!!)]l!!)lqrrE#t!!)ut!!)ut!!)rs!!)ut!!)orrrE&u!!)cn!!*#u!!)ip!!)lq +!!)utrrE#t!!)ut!!)rsrrE#t!!)rsrrE&u!!)ut!!)ut!!%TMjSo2[rr3'#rrE)u!!<0#s8E!F +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p4!<3'!!<3'!!<3'!!<3'! +!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcFg2!!)]l!!)lqrrE#t!!)ut!!)ut!!)rs!!)ut!!)orrrE&u!!)cn!!*#u!!)ip!!)lq +!!)utrrE#t!!)ut!!)rsrrE#t!!)rsrrE&u!!)ut!!)ut!!%TMjSo2[rr3'#rrE)u!!<0#s8E!F +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p4!<3'!!<3'!!<3'!!<3'! +!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls5X+Z!;6?l!;c]q!;uis!<2uu +!;lcr!;QQo!;lcr!:p-i!<2uu!;ZWp!;lcr!;lcr!<2uu!;lcr!<)ot!;lcr!<)ot!;$3j!.k11 +rriE&!<3'!qu?`squ?fu!<;lq!ri9#rVururVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'! +rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls5X+Z!;6?l!;c]q!;uis!<2uu +!;lcr!;QQo!;lcr!:p-i!<2uu!;ZWp!;lcr!;lcr!<2uu!;lcr!<)ot!;lcr!<)ot!;$3j!.k11 +rriE&!<3'!qu?`squ?fu!<;lq!ri9#rVururVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'! +rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls5X+Z!;6?l!;c]q!;uis!<2uu +!;lcr!;QQo!;lcr!:p-i!<2uu!;ZWp!;lcr!;lcr!<2uu!;lcr!<)ot!;lcr!<)ot!;$3j!.k11 +rriE&!<3'!qu?`squ?fu!<;lq!ri9#rVururVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'! +rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcFg2!!)]l!!)lq!!)rs!!*#uq#LBnqZ-Nn +!!)Wj!!)rs!!)lq!!)or!!)or!!*#uq#LBn!!)or!!)ut!!)foqZ)3IjSo2[rr3'#rrE)o!!<0# +s7cQos7?9ks7cQqrrE)u!<)p0!<3'!!<3'!!<3'!!<3'!!<; +!B:&Xis,M`rrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcFg2!!)]l!!)lq!!)rs!!*#uq#LBnqZ-Nn +!!)Wj!!)rs!!)lq!!)or!!)or!!*#uq#LBn!!)or!!)ut!!)foqZ)3IjSo2[rr3'#rrE)o!!<0# +s7cQos7?9ks7cQqrrE)u!<)p0!<3'!!<3'!!<3'!!<3'!!<; +!BpJ^m/R.crrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!BU8[kl:__rrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!B:&XirB)YrrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!BpJ^m0UEpr;Q`sJcFg2!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus6p!irrE)u!!<0# +s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'!!<<#urp9a;4b*~> +!BU8[km%.frrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLjSo2[ +r;Q`squ6WrqYpNqr;Q`srr2rup\t3nr;Q`squ6Wro`"mkqYpNqqu6Wrqu6Wrqu6Wrrr2rupAY*m +qu6WrrVlitq>UEpr;Q`sJcFg2!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus6p!irrE)u!!<0# +s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLjSo2[ +r;Q`squ6WrqYpNqr;Q`srr2rup\t3nr;Q`squ6Wro`"mkqYpNqqu6Wrqu6Wrqu6Wrrr2rupAY*m +qu6WrrVlitq>UEpr;Q`sJcFg2!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus6p!irrE)u!!<0# +s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0^Bnrr;oss8Voqr;Z]q!WN/ts8;rqs8N'!s8;rrs7u`n +s8;ots8E"Ls5s=]!<3!#!<3'!rW!$"!<<#u!<;rs!ri9#rVurul2Unc!<<#urVmT4rrE'!rrE'! +rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u!<2?deieN~> +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLk5Y2Vrr;fp +rr;rtrr;rtrVufrqu?Tp!<<#us8Voqq>^Bnrr;oss8Voqr;Z]q!WN/ts8;rqs8N'!s8;rrs7u`n +s8;ots8E"Ls5s=]!<3!#!<3'!rW!$"!<<#u!<;rs!ri9#rVurul2Unc!<<#urVmT4rrE'!rrE'! +rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u!<23`c8pI~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLk5Y2Vrr;fp +rr;rtrr;rtrVufrqu?Tp!<<#us8Voqq>^Bnrr;oss8Voqr;Z]q!WN/ts8;rqs8N'!s8;rrs7u`n +s8;ots8E"Ls5s=]!<3!#!<3'!rW!$"!<<#u!<;rs!ri9#rVurul2Unc!<<#urVmT4rrE'!rrE'! +rrE'!rrE'!rrE'!s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u!<2!Z_`*)~> +!BpJ^m/R.crrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLK)YfN +JcE:\!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus6p!orrE'!rrE'!s8E#srtPP6!<3'!!<3'! +!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLK)YfN +JcE:\!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus6p!orrE'!rrE'!s8E#srtPP6!<3'!!<3'! +!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLM#[AQJcE4Z!!*#u!s&?$s8E!" +rrE)u!!<0#s7cQos7?9ks7cQqrrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLM#[AQJcE4Z!!*#u!s&?$s8E!" +rrE)u!!<0#s7cQos7?9ks7cQqrrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BU8[kl:__rrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!B:&XirB)YrrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/[4ea8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8MBdeieN~> +!BU8[klCeaa8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M6`c8pI~> +!B:&XirK/[a8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M$Z_`*)~> +!BpJ^m/[1+!<<) +!BU8[klCb'!<<) +!B:&XirK,!!<<) +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8MBdeieN~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M6`c8pI~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mD],*!8dbT!9aC^!;?Hm!.k0$s+13$s3grHm/bd$J,~> +!BU8[l,E]&!8dbT!9aC^!;?Hm!.k0$s+13$s3grHklK'jJ,~> +!B:&Xj2M&u!8dbT!9aC^!;?Hm!.k0$s+13$s3grHirR%VJ,~> +!BpJ^mG.a;!:p0i!8dbT!9aC^!;?Hm!.k0$s+13$s3grHm/bd$J,~> +!BU8[l.l=7!:p0i!8dbT!9aC^!;?Hm!.k0$s+13$s3grHklK'jJ,~> +!B:&Xj4s\1!:p0i!8dbT!9aC^!;?Hm!.k0$s+13$s3grHirR%VJ,~> +!BpJ^mHsrH!;ulm!:p0i!8[\T!9aC^!.k0$s+13$s2G$;m/bd$J,~> +!BU8[l0\ND!;ulm!:p0i!8[\T!9aC^!.k0$s+13$s2G$;klK'jJ,~> +!B:&Xj6cm>!;ulm!:p0i!8[\T!9aC^!.k0$s+13$s2G$;irR%VJ,~> +!BpJ^mHsrH!;ZZp!;ulr!!*&t!<3#o!<3#s!<<)u!;ulq!;lfp!!N<%!<<)u!<<)t!<)rr!!N<% +!<<)p!<)rq!;ZZn!<)rs!!*&t!.k0$s+13$s6BX`m/bd$J,~> +!BU8[l0\ND!;ZZp!;ulr!!*&t!<3#o!<3#s!<<)u!;ulq!;lfp!!N<%!<<)u!<<)t!<)rr!!N<% +!<<)p!<)rq!;ZZn!<)rs!!*&t!.k0$s+13$s6BX`klK'jJ,~> +!B:&Xj6cm>!;ZZp!;ulr!!*&t!<3#o!<3#s!<<)u!;ulq!;lfp!!N<%!<<)u!<<)t!<)rr!!N<% +!<<)p!<)rq!;ZZn!<)rs!!*&t!.k0$s+13$s6BX`irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#os8N)ss7cTos7lZos7ZNns7lZos7lZps8E#us8;rss7lZps7lZn +s82los7lZps7cSFs+13$s+149s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#os8N)ss7cTos7lZos7ZNns7lZos7lZps8E#us8;rss7lZps7lZn +s82los7lZps7cSFs+13$s+149s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#os8N)ss7cTos7lZos7ZNns7lZos7lZps8E#us8;rss7lZps7lZn +s82los7lZps7cSFs+13$s+149s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ps8N)rs8E#ts8N)ts8N)os8;rts8N'!s8E#ss8Duus8E#ts8E#t +s8N)ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#ss8E#us8E#ts8N(Ms+13$s+149s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ps8N)rs8E#ts8N)ts8N)os8;rts8N'!s8E#ss8Duus8E#ts8E#t +s8N)ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#ss8E#us8E#ts8N(Ms+13$s+149s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ps8N)rs8E#ts8N)ts8N)os8;rts8N'!s8E#ss8Duus8E#ts8E#t +s8N)ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#ss8E#us8E#ts8N(Ms+13$s+149s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)os8E#qs8N)rs8N'#rr<&ss8N)us8N)t +s8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+149s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)os8E#qs8N)rs8N'#rr<&ss8N)us8N)t +s8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+149s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)os8E#qs8N)rs8N'#rr<&ss8N)us8N)t +s8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+149s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)os8N)qs8N)rs8N'#rr<&ss8N)us8N)t +s8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+149s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)os8N)qs8N)rs8N'#rr<&ss8N)us8N)t +s8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+149s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)os8N)qs8N)rs8N'#rr<&ss8N)us8N)t +s8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+149s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)os8N)qs8N)rs8N'#rr<&ss8N)us8N)t +s8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+149s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)os8N)qs8N)rs8N'#rr<&ss8N)us8N)t +s8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+149s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)os8N)qs8N)rs8N'#rr<&ss8N)us8N)t +s8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N(Ms+13$s+149s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)ts8N)us8N)qs8E#ss8Duus8E#ts8E#t +s8N)us8E#us8E#ss8E#ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N(Ms+13$s+149s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)ts8N)us8N)qs8E#ss8Duus8E#ts8E#t +s8N)us8E#us8E#ss8E#ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N(Ms+13$s+149s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)ts8N)us8N)qs8E#ss8Duus8E#ts8E#t +s8N)us8E#us8E#ss8E#ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N(Ms+13$s+149s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZps8;rts8;rss7lWps7lZns7lZos7cTos7cTos7cTns7lZp +s7lZos7lZps8;rts8;qKs+13$s+14:s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZps8;rts8;rss7lWps7lZns7lZos7cTos7cTos7cTns7lZp +s7lZos7lZps8;rts8;qKs+13$s+14:s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZps8;rts8;rss7lWps7lZns7lZos7cTos7cTos7cTns7lZp +s7lZos7lZps8;rts8;qKs+13$s+14:s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7lZps8;rts8;rrs82lrs7lZls8;rps8;ots8E#ts8;ots8E#t +s8)fns82lqs7lZms8;rrs8;rts8;qKs+13$s+14:s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss7lZps8;rts8;rrs82lrs7lZls8;rps8;ots8E#ts8;ots8E#t +s8)fns82lqs7lZms8;rrs8;rts8;qKs+13$s+14:s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss7lZps8;rts8;rrs82lrs7lZls8;rps8;ots8E#ts8;ots8E#t +s8)fns82lqs7lZms8;rrs8;rts8;qKs+13$s+14:s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G<5s8N)-s8;qKs2Y0>!7LoI!9jI_!/COP!2]_pm/bd$J,~> +!BU8[l%/m1s8N)-s8;qKs2Y0>!7LoI!9jI_!/COP!2]_pklK'jJ,~> +!B:&Xj+77+s8N)-s8;qKs2Y0>!7LoI!9jI_!/COP!2]_pirR%VJ,~> +!BpJ^mFhOUEpnG`Igq>UEpci3tFli-qbdJj1HU&Y,Z!S0Da~> +!BU8[l.Q+8!!3*"g]%6Rc2RbDeGfLKiVrlXmJd.ddJj1Hli-qb`rGu;rr;osl2L_`jSo2[q#:UEpnG`Igq>UEpci3tFli-qbdJj1HU&Y,V!R<`V~> +!B:&Xj4XJ2!!3*"g]%6Rc2RbDeGfLKiVrlXmJd.ddJj1Hli-qb`rGu;rr;osl2L_`jSo2[q#:UEpnG`Igq>UEpci3tFli-qbdJj1HU&Y,P!Q-jH~> +!BpJ^mG%[@!<)rt!8IMR!6tND!7_#K!9*qX!:Bdd!7CfH!:0Xb!6+s +!BU8[l.c7 +!B:&Xj4jV6!<)rt!8IMR!6tND!7_#K!9*qX!:Bdd!7CfH!:0Xb!6+s +!BpJ^mG%X@!;lcr!8IMR!6tND!42\*!:Bdd!7CfH!3Z>%!<2uu!<2uu!9jF_!8@GQ!;ZWp!:^!g +!;ZWp!71ZF!5&72!20Akm/bd$J,~> +!BU8[l.c4%!<2uu!<2uu!9jF_!8@GQ!;ZWp!:^!g +!;ZWp!71ZF!5&72!20AkklK'jJ,~> +!B:&Xj4jS6!;lcr!8IMR!6tND!42\*!:Bdd!7CfH!3Z>%!<2uu!<2uu!9jF_!8@GQ!;ZWp!:^!g +!;ZWp!71ZF!5&72!20AkirR%VJ,~> +!BpJ^mG.^A!;HNm!!*&u!;lfp!;c`o!;lfm!;ulq!;6Bj!;uls!!*&t!;lfp!!3*"qZ$Qq#6+Z' +s8N'!r;Z]qr;Zcs!<;utqu?Wqqu?Zr!<;utrVultrVultqYpNqq>^Bnqu?Kmr;Z]qq#C?o#6+Z' +s8N'!r;Z]qqu?Kmrr;rt!<<#uqu?Wqq>^Bn!WN/ts8;ros8;ourrD<`!!*#u!!*#u!!)utr;ccq +rVururW)lr!W`9#r;cZnrW)rtrW)osrW)fpq>gKo!^BnqZ$Ko!WN/os8;rps7u`is8;r's8MBdeieN~> +!BU8[l.l:=!;HNm!!*&u!;lfp!;c`o!;lfm!;ulq!;6Bj!;uls!!*&t!;lfp!!3*"qZ$Qq#6+Z' +s8N'!r;Z]qr;Zcs!<;utqu?Wqqu?Zr!<;utrVultrVultqYpNqq>^Bnqu?Kmr;Z]qq#C?o#6+Z' +s8N'!r;Z]qqu?Kmrr;rt!<<#uqu?Wqq>^Bn!WN/ts8;ros8;ourrD<`!!*#u!!*#u!!)utr;ccq +rVururW)lr!W`9#r;cZnrW)rtrW)osrW)fpq>gKo!^BnqZ$Ko!WN/os8;rps7u`is8;r's8M6`c8pI~> +!B:&Xj4sY7!;HNm!!*&u!;lfp!;c`o!;lfm!;ulq!;6Bj!;uls!!*&t!;lfp!!3*"qZ$Qq#6+Z' +s8N'!r;Z]qr;Zcs!<;utqu?Wqqu?Zr!<;utrVultrVultqYpNqq>^Bnqu?Kmr;Z]qq#C?o#6+Z' +s8N'!r;Z]qqu?Kmrr;rt!<<#uqu?Wqq>^Bn!WN/ts8;ros8;ourrD<`!!*#u!!*#u!!)utr;ccq +rVururW)lr!W`9#r;cZnrW)rtrW)osrW)fpq>gKo!^BnqZ$Ko!WN/os8;rps7u`is8;r's8M$Z_`*)~> +!BpJ^mG.^A!;6Bl!<2uu!<)ot!<)ot!;uis!<)ot!;c]q!;ZWp!<)ot!;HKn!<)ot!;uls!<)ot +!<)ot!<)rt!;ZZp!<<*!!<<'!!<2uu!<)ot!;uls!<)ot!;c]q!;c`q!<)ot!<)ot!;uis!;c]q +!;c]q!<)ot!;c]q!;ZWp!<)ot!;QTo!<<*!!<<'!!<2uu!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q +!<)rt!<)ot!<)ot!;uis!<)rt!9sL`!<2uu!<2uu!<2uu!<)ot!;lfr!<2uu!<)ot!<2uu!;?Em +!;uis!;c]q!;QQo!;ZZp!<)ot!;?Em!;ZZp!<)ot!<)ot!<)ot!;HKn!<)ot!;uls!<)ot!;lcr +!;QTo!<2uu!;c]q!;c]q!<)ot!;uis!<)rt!;QQo!<)ot!;c]q!;-9k!<)ot!42_)m/bd$J,~> +!BU8[l.l:=!;6Bl!<2uu!<)ot!<)ot!;uis!<)ot!;c]q!;ZWp!<)ot!;HKn!<)ot!;uls!<)ot +!<)ot!<)rt!;ZZp!<<*!!<<'!!<2uu!<)ot!;uls!<)ot!;c]q!;c`q!<)ot!<)ot!;uis!;c]q +!;c]q!<)ot!;c]q!;ZWp!<)ot!;QTo!<<*!!<<'!!<2uu!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q +!<)rt!<)ot!<)ot!;uis!<)rt!9sL`!<2uu!<2uu!<2uu!<)ot!;lfr!<2uu!<)ot!<2uu!;?Em +!;uis!;c]q!;QQo!;ZZp!<)ot!;?Em!;ZZp!<)ot!<)ot!<)ot!;HKn!<)ot!;uls!<)ot!;lcr +!;QTo!<2uu!;c]q!;c]q!<)ot!;uis!<)rt!;QQo!<)ot!;c]q!;-9k!<)ot!42_)klK'jJ,~> +!B:&Xj4sY7!;6Bl!<2uu!<)ot!<)ot!;uis!<)ot!;c]q!;ZWp!<)ot!;HKn!<)ot!;uls!<)ot +!<)ot!<)rt!;ZZp!<<*!!<<'!!<2uu!<)ot!;uls!<)ot!;c]q!;c`q!<)ot!<)ot!;uis!;c]q +!;c]q!<)ot!;c]q!;ZWp!<)ot!;QTo!<<*!!<<'!!<2uu!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q +!<)rt!<)ot!<)ot!;uis!<)rt!9sL`!<2uu!<2uu!<2uu!<)ot!;lfr!<2uu!<)ot!<2uu!;?Em +!;uis!;c]q!;QQo!;ZZp!<)ot!;?Em!;ZZp!<)ot!<)ot!<)ot!;HKn!<)ot!;uls!<)ot!;lcr +!;QTo!<2uu!;c]q!;c]q!<)ot!;uis!<)rt!;QQo!<)ot!;c]q!;-9k!<)ot!42_)irR%VJ,~> +!BpJ^mG.^A!;6?l!;ZWp!;lcr!;QQo!;c]q!;c]q!;lcr!;$3j!;uis!;uis!<2uu!;lcr!;ZWp +!<2uu!<2uu!;ZWp!;uis!;uis!;c]q!;c]q!;lcr!<2uu!;uis!;c]q!;6?l!;c]q!;c]q!;lcr +!;ZWp!<2uu!<2uu!;ZWp!;c]q!;QQo!;6?l!;lcr!;lcr!<2uu!;lcr!<)ot!;uis!9jFe!<3'! +!<3&urr<&rrr<&srr<&orrW9$rrD`l"p"]'!<<'!qYpNqq#:UEpr;Q`spAY*mq>UEpr;Q`s +rr2ruqu6Wrq>UEpqu6WrrVlitr;Q`squ6Wrq#:!lqu6Wrqu6WrrVlitr;Q`sq>UEpqu6Wr +qu6Wrn,E@fZiC$l!S0Da~> +!BU8[l.l:=!;6?l!;ZWp!;lcr!;QQo!;c]q!;c]q!;lcr!;$3j!;uis!;uis!<2uu!;lcr!;ZWp +!<2uu!<2uu!;ZWp!;uis!;uis!;c]q!;c]q!;lcr!<2uu!;uis!;c]q!;6?l!;c]q!;c]q!;lcr +!;ZWp!<2uu!<2uu!;ZWp!;c]q!;QQo!;6?l!;lcr!;lcr!<2uu!;lcr!<)ot!;uis!9jFe!<3'! +!<3&urr<&rrr<&srr<&orrW9$rrD`l"p"]'!<<'!qYpNqq#:UEpr;Q`spAY*mq>UEpr;Q`s +rr2ruqu6Wrq>UEpqu6WrrVlitr;Q`squ6Wrq#:!lqu6Wrqu6WrrVlitr;Q`sq>UEpqu6Wr +qu6Wrn,E@fZiC$h!R<`V~> +!B:&Xj4sY7!;6?l!;ZWp!;lcr!;QQo!;c]q!;c]q!;lcr!;$3j!;uis!;uis!<2uu!;lcr!;ZWp +!<2uu!<2uu!;ZWp!;uis!;uis!;c]q!;c]q!;lcr!<2uu!;uis!;c]q!;6?l!;c]q!;c]q!;lcr +!;ZWp!<2uu!<2uu!;ZWp!;c]q!;QQo!;6?l!;lcr!;lcr!<2uu!;lcr!<)ot!;uis!9jFe!<3'! +!<3&urr<&rrr<&srr<&orrW9$rrD`l"p"]'!<<'!qYpNqq#:UEpr;Q`spAY*mq>UEpr;Q`s +rr2ruqu6Wrq>UEpqu6WrrVlitr;Q`squ6Wrq#:!lqu6Wrqu6WrrVlitr;Q`sq>UEpqu6Wr +qu6Wrn,E@fZiC$b!Q-jH~> +!BpJ^mG.^A!;6?l!;ZZj!<)rp!;c]q!;c`k!;QTk!;uis!;uis!<2uu!;lcr!;ZWp!<2uu!<2uu +!<3#q!;uis!;uis!;c]q!;c]q!;lcr!<2uu!;uis!;c]q!;c`m!;c]q!;c`k!;ZWp!<2uu!<2uu +!<3#q!;c]q!;QQo!;6?l!;lcr!;HNh!;ulr!9O4b!<3'!!<3&urr<&rrr<&srr<&os8E#jrrrK' +rrE*!!;c]q!;QQo!;ZWp!;uis!;?Em!;ZWp!;uis!<3#o!;ZZj!<)ot!;uis!;lcr!;QQo!;6?l +!;lfl!;ulr!;?Em!;lcr!;lcr!;- +!BU8[l.l:=!;6?l!;ZZj!<)rp!;c]q!;c`k!;QTk!;uis!;uis!<2uu!;lcr!;ZWp!<2uu!<2uu +!<3#q!;uis!;uis!;c]q!;c]q!;lcr!<2uu!;uis!;c]q!;c`m!;c]q!;c`k!;ZWp!<2uu!<2uu +!<3#q!;c]q!;QQo!;6?l!;lcr!;HNh!;ulr!9O4b!<3'!!<3&urr<&rrr<&srr<&os8E#jrrrK' +rrE*!!;c]q!;QQo!;ZWp!;uis!;?Em!;ZWp!;uis!<3#o!;ZZj!<)ot!;uis!;lcr!;QQo!;6?l +!;lfl!;ulr!;?Em!;lcr!;lcr!;- +!B:&Xj4sY7!;6?l!;ZZj!<)rp!;c]q!;c`k!;QTk!;uis!;uis!<2uu!;lcr!;ZWp!<2uu!<2uu +!<3#q!;uis!;uis!;c]q!;c]q!;lcr!<2uu!;uis!;c]q!;c`m!;c]q!;c`k!;ZWp!<2uu!<2uu +!<3#q!;c]q!;QQo!;6?l!;lcr!;HNh!;ulr!9O4b!<3'!!<3&urr<&rrr<&srr<&os8E#jrrrK' +rrE*!!;c]q!;QQo!;ZWp!;uis!;?Em!;ZWp!;uis!<3#o!;ZZj!<)ot!;uis!;lcr!;QQo!;6?l +!;lfl!;ulr!;?Em!;lcr!;lcr!;- +!BpJ^mG.^A!;6?l!;ZWp!;HKn!;uis!;c]q!;c]q!:p-i!;uis!;uis!;uis!<2uu!;lcr!;ZWp +!<2uu!<3!#!<<'!r;Q`sr;Q`sr;Q`sqYpNqqYpNqqu6Wrrr2rur;Q`sqYpNqqu6Wrr;Q`sqYpNq +qYpNqo)A[irr2rurr3'#s8N)srr<&qrr<&orr<&lrr<&rrr<&nrr<&is8N)^rrrK'!<3'!!<2uu +!;lcr!;uis!;QQr!<<'!p&>3rrrE'!rrDoq!!)fo!!)ip!!)rs!!)`m!!)ip!!)rs!!*#u!!)Ti +!!)`m!!)rs!!)or!!)fo!!)]l!!)or!!)TirrDio!!)or!!)or!!)]l!!)rs!!'A*rp9a;4b*~> +!BU8[l.l:=!;6?l!;ZWp!;HKn!;uis!;c]q!;c]q!:p-i!;uis!;uis!;uis!<2uu!;lcr!;ZWp +!<2uu!<3!#!<<'!r;Q`sr;Q`sr;Q`sqYpNqqYpNqqu6Wrrr2rur;Q`sqYpNqqu6Wrr;Q`sqYpNq +qYpNqo)A[irr2rurr3'#s8N)srr<&qrr<&orr<&lrr<&rrr<&nrr<&is8N)^rrrK'!<3'!!<2uu +!;lcr!;uis!;QQr!<<'!p&>3rrrE'!rrDoq!!)fo!!)ip!!)rs!!)`m!!)ip!!)rs!!*#u!!)Ti +!!)`m!!)rs!!)or!!)fo!!)]l!!)or!!)TirrDio!!)or!!)or!!)]l!!)rs!!'A*rojI/3e.~> +!B:&Xj4sY7!;6?l!;ZWp!;HKn!;uis!;c]q!;c]q!:p-i!;uis!;uis!;uis!<2uu!;lcr!;ZWp +!<2uu!<3!#!<<'!r;Q`sr;Q`sr;Q`sqYpNqqYpNqqu6Wrrr2rur;Q`sqYpNqqu6Wrr;Q`sqYpNq +qYpNqo)A[irr2rurr3'#s8N)srr<&qrr<&orr<&lrr<&rrr<&nrr<&is8N)^rrrK'!<3'!!<2uu +!;lcr!;uis!;QQr!<<'!p&>3rrrE'!rrDoq!!)fo!!)ip!!)rs!!)`m!!)ip!!)rs!!*#u!!)Ti +!!)`m!!)rs!!)or!!)fo!!)]l!!)or!!)TirrDio!!)or!!)or!!)]l!!)rs!!'A*ro4$s2h1~> +!BpJ^mG%X@!;lcr!<)ot!;ZWp!;HKn!;uis!;c]q!;c]q!:p-i!;uis!;uis!;uis!<2uu!;lcr +!;ZWp!<2uu!<3!#!<<'!r;Q`sr;Q`sr;Q`sqYpNqqYpNqqu6Wrrr2rur;Q`sqYpNqqu6Wrr;Q`s +qYpNqqYpNqo)A[irr2rurr3'#s8N)srr<&qrr<&orr<&lrr<&rrr<&nrr<&mrr<&srr<&_rrrK' +!<3'!!<2uu!;lcr!;uis!;QQo!<2uu!;?Es!<3'!!<3&qrr<&orr<&prr<&srr<&mrr<&prr<&s +rr<&urr<&irr<&mrr<&srr<&rrr<&orr<&lrr<&rrr<&mrr<&srr<&prr<&rrr<&rrr<&lrr<&s +rr<&*s8MBdeieN~> +!BU8[l.c4 +!B:&Xj4jS6!;lcr!<)ot!;ZWp!;HKn!;uis!;c]q!;c]q!:p-i!;uis!;uis!;uis!<2uu!;lcr +!;ZWp!<2uu!<3!#!<<'!r;Q`sr;Q`sr;Q`sqYpNqqYpNqqu6Wrrr2rur;Q`sqYpNqqu6Wrr;Q`s +qYpNqqYpNqo)A[irr2rurr3'#s8N)srr<&qrr<&orr<&lrr<&rrr<&nrr<&mrr<&srr<&_rrrK' +!<3'!!<2uu!;lcr!;uis!;QQo!<2uu!;?Es!<3'!!<3&qrr<&orr<&prr<&srr<&mrr<&prr<&s +rr<&urr<&irr<&mrr<&srr<&rrr<&orr<&lrr<&rrr<&mrr<&srr<&prr<&rrr<&rrr<&lrr<&s +rr<&*s8M$Z_`*)~> +!BpJ^mG%[@!<)ot!;uis!;QQo!<)rt!<2uu!<)rt!;c]q!<)ot!<2uu!<)rt!;ZWp!<)rt!;uis +!;uis!<)ot!<)rt!;ZWp!<2uu!<3!#!<<'!rVultr;Q`sr;Q`sqYpNqqZ$QqrVlitrVlitrVult +qYpNqqu6WrrVultqYpNqrVlitrr2rurVultq>UEprr2rurr3'#s8N)ts8N)qrr<&trr<&trr<&l +rr<&qrr<&ts8N)trr<&ts8N)ts8N)trr<&rs8N)frr<&urr<&srr<&trr<&rrr<&orr<&trr<&m +rr<&urr<&prr<&orr<&trr<&urr<&srr<&mrr<&trr<&urr<&srr<&trr<&ts8N)orr<&ts8N)t +rr<&srr<&rrr<&trr<&trr<&lrr<&qrr<&ts8N)ts8N)trr<&orr<&trr<&qrr<&lrr<&ts8N)* +s8MBdeieN~> +!BU8[l.c7UEprr2rurr3'#s8N)ts8N)qrr<&trr<&trr<&l +rr<&qrr<&ts8N)trr<&ts8N)ts8N)trr<&rs8N)frr<&urr<&srr<&trr<&rrr<&orr<&trr<&m +rr<&urr<&prr<&orr<&trr<&urr<&srr<&mrr<&trr<&urr<&srr<&trr<&ts8N)orr<&ts8N)t +rr<&srr<&rrr<&trr<&trr<&lrr<&qrr<&ts8N)ts8N)trr<&orr<&trr<&qrr<&lrr<&ts8N)* +s8M6`c8pI~> +!B:&Xj4jV6!<)ot!;uis!;QQo!<)rt!<2uu!<)rt!;c]q!<)ot!<2uu!<)rt!;ZWp!<)rt!;uis +!;uis!<)ot!<)rt!;ZWp!<2uu!<3!#!<<'!rVultr;Q`sr;Q`sqYpNqqZ$QqrVlitrVlitrVult +qYpNqqu6WrrVultqYpNqrVlitrr2rurVultq>UEprr2rurr3'#s8N)ts8N)qrr<&trr<&trr<&l +rr<&qrr<&ts8N)trr<&ts8N)ts8N)trr<&rs8N)frr<&urr<&srr<&trr<&rrr<&orr<&trr<&m +rr<&urr<&prr<&orr<&trr<&urr<&srr<&mrr<&trr<&urr<&srr<&trr<&ts8N)orr<&ts8N)t +rr<&srr<&rrr<&trr<&trr<&lrr<&qrr<&ts8N)ts8N)trr<&orr<&trr<&qrr<&lrr<&ts8N)* +s8M$Z_`*)~> +!BpJ^mFhOg +!BU8[l.Q+8!<)ro!;lfp!;lfp!!*&u!;lfp!;ulq!;?Hk!!*&u!<<)u!<3#t!<)rr!!<0#!;lfq +!<<*!!<<*!!<<)t!!*&u!<<)u!<3#t!<3#p!<)ou!<;utqu?Tp!ri6#rr;fprVufr!<<#uqu?Tp +r;Z]qq#Cg +!B:&Xj4XJ2!<)ro!;lfp!;lfp!!*&u!;lfp!;ulq!;?Hk!!*&u!<<)u!<3#t!<)rr!!<0#!;lfq +!<<*!!<<*!!<<)t!!*&u!<<)u!<3#t!<3#p!<)ou!<;utqu?Tp!ri6#rr;fprVufr!<<#uqu?Tp +r;Z]qq#Cg +!BpJ^m=G;Srr<%Ms+13$s+ULPm/bd$J,~> +!BU8[l%/lOrr<%Ms+13$s+ULPklK'jJ,~> +!B:&Xj+76Irr<%Ms+13$s+ULPirR%VJ,~> +!BpJ^m=G;Srr<%Ms+13$s+ULPm/bd$J,~> +!BU8[l%/lOrr<%Ms+13$s+ULPklK'jJ,~> +!B:&Xj+76Irr<%Ms+13$s+ULPirR%VJ,~> +!BpJ^m=G;Srr<%Ms+13$s+ULPm/bd$J,~> +!BU8[l%/lOrr<%Ms+13$s+ULPklK'jJ,~> +!B:&Xj+76Irr<%Ms+13$s+ULPirR%VJ,~> +!BpJ^m=G;Ts8;qKs+13$s+gXRm/bd$J,~> +!BU8[l%/lPs8;qKs+13$s+gXRklK'jJ,~> +!B:&Xj+76Js8;qKs+13$s+gXRirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G;ps8;qKs5s@]!.k0$s+p^Sm/bd$J,~> +!BU8[l%/lls8;qKs5s@]!.k0$s+p^SklK'jJ,~> +!B:&Xj+76fs8;qKs5s@]!.k0$s+p^SirR%VJ,~> +!BpJ^mDJr(!:0Xb!8IPM!9=(Z!5/=3!:0Xb!7CfH!;QQo!;ZWp!8meV!;?Em!.k0$s0r%-m/bd$ +J,~> +!BU8[l,3N$!:0Xb!8IPM!9=(Z!5/=3!:0Xb!7CfH!;QQo!;ZWp!8meV!;?Em!.k0$s0r%-klK'j +J,~> +!B:&Xj2:ls!:0Xb!8IPM!9=(Z!5/=3!:0Xb!7CfH!;QQo!;ZWp!8meV!;?Em!.k0$s0r%-irR%V +J,~> +!BpJ^mDJr(!:0Xb!8@GQ!;uis!9O4\!5&72!:0Xb!7CfH!;QQo!;ZWp!8meV!;?Em!.k0$s0r%- +m/bd$J,~> +!BU8[l,3N$!:0Xb!8@GQ!;uis!9O4\!5&72!:0Xb!7CfH!;QQo!;ZWp!8meV!;?Em!.k0$s0r%- +klK'jJ,~> +!B:&Xj2:ls!:0Xb!8@GQ!;uis!9O4\!5&72!:0Xb!7CfH!;QQo!;ZWp!8meV!;?Em!.k0$s0r%- +irR%VJ,~> +!BpJ^mDJr(!5ng:!;lcr!9X:]!5&72!3lJ'!;ZWp!8meV!.k0$s/Z2!m/bd$J,~> +!BU8[l,3N$!5ng:!;lcr!9X:]!5&72!3lJ'!;ZWp!8meV!.k0$s/Z2!klK'jJ,~> +!B:&Xj2:ls!5ng:!;lcr!9X:]!5&72!3lJ'!;ZWp!8meV!.k0$s/Z2!irR%VJ,~> +!BpJ^mG7gB!!`H'!<<'!!;ulq!;lfm!<3#t!!*&u!;lfq!;lfq!<<)u!9jF_!;lcr!<)rr!;ulr +!!*&u!;uln!;ulq!;ulr!!*&u!<3#u!!`H'!<<'!!;c`q!!`H'!<<'!!;ulq!;lfm!<3#t!!*&u +!;lfq!;lfq!<<)u!;HNl!;ulr!!*&u!;lfq!;c`l!<)ou!<;utrr;uu#6+Z's8N'!r;Z]qqu?Km +r;Z`rq>^Bn!WN.Ns+13hs8MBdeieN~> +!BU8[l.uC>!!`H'!<<'!!;ulq!;lfm!<3#t!!*&u!;lfq!;lfq!<<)u!9jF_!;lcr!<)rr!;ulr +!!*&u!;uln!;ulq!;ulr!!*&u!<3#u!!`H'!<<'!!;c`q!!`H'!<<'!!;ulq!;lfm!<3#t!!*&u +!;lfq!;lfq!<<)u!;HNl!;ulr!!*&u!;lfq!;c`l!<)ou!<;utrr;uu#6+Z's8N'!r;Z]qqu?Km +r;Z`rq>^Bn!WN.Ns+13hs8M6`c8pI~> +!B:&Xj5'b8!!`H'!<<'!!;ulq!;lfm!<3#t!!*&u!;lfq!;lfq!<<)u!9jF_!;lcr!<)rr!;ulr +!!*&u!;uln!;ulq!;ulr!!*&u!<3#u!!`H'!<<'!!;c`q!!`H'!<<'!!;ulq!;lfm!<3#t!!*&u +!;lfq!;lfq!<<)u!;HNl!;ulr!!*&u!;lfq!;c`l!<)ou!<;utrr;uu#6+Z's8N'!r;Z]qqu?Km +r;Z`rq>^Bn!WN.Ns+13hs8M$Z_`*)~> +!BpJ^mG.aA!<<*!!<<'!!<2uu!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)ot!9a@^!;lcr!<2uu +!<)ot!;lfr!<2uu!;lcr!;ZWp!<)ot!;lfr!<2uu!<3#u!<<*!!<<'!!;c`q!<<*!!<<'!!<2uu +!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)ot!;HKn!<)ot!;lfr!<2uu!;c]q!;QQo!;ZZp!<)ot +!<3#u!<<*!!<<'!!<2uu!<)ot!;c]q!;?Em!;c]q!<)rt!.k0$s2G$;m/bd$J,~> +!BU8[l.l==!<<*!!<<'!!<2uu!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)ot!9a@^!;lcr!<2uu +!<)ot!;lfr!<2uu!;lcr!;ZWp!<)ot!;lfr!<2uu!<3#u!<<*!!<<'!!;c`q!<<*!!<<'!!<2uu +!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)ot!;HKn!<)ot!;lfr!<2uu!;c]q!;QQo!;ZZp!<)ot +!<3#u!<<*!!<<'!!<2uu!<)ot!;c]q!;?Em!;c]q!<)rt!.k0$s2G$;klK'jJ,~> +!B:&Xj4s\7!<<*!!<<'!!<2uu!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)ot!9a@^!;lcr!<2uu +!<)ot!;lfr!<2uu!;lcr!;ZWp!<)ot!;lfr!<2uu!<3#u!<<*!!<<'!!;c`q!<<*!!<<'!!<2uu +!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)ot!;HKn!<)ot!;lfr!<2uu!;c]q!;QQo!;ZZp!<)ot +!<3#u!<<*!!<<'!!<2uu!<)ot!;c]q!;?Em!;c]q!<)rt!.k0$s2G$;irR%VJ,~> +!BpJ^mG.^A!<2uu!<2uu!;ZWp!;c]q!;QQo!;6?l!;ZWs!<<'!k5PD]r;Q`srr2ruqu6Wrr;Q`s +pAY*mqYpNqqu6Wrr;Q`sq>UEprr2rurr2ruqYpNqrr2rurr2ruq>UEpqYpNqq#:!lq>UNs +s8N)hrr<&rrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrDrr!!)or!!)`m!!)or!!)or +!!%TMJcE^hrp9a;4b*~> +!BU8[l.l:=!<2uu!<2uu!;ZWp!;c]q!;QQo!;6?l!;ZWs!<<'!k5PD]r;Q`srr2ruqu6Wrr;Q`s +pAY*mqYpNqqu6Wrr;Q`sq>UEprr2rurr2ruqYpNqrr2rurr2ruq>UEpqYpNqq#:!lq>UNs +s8N)hrr<&rrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrDrr!!)or!!)`m!!)or!!)or +!!%TMJcE^hrojI/3e.~> +!B:&Xj4sY7!<2uu!<2uu!;ZWp!;c]q!;QQo!;6?l!;ZWs!<<'!k5PD]r;Q`srr2ruqu6Wrr;Q`s +pAY*mqYpNqqu6Wrr;Q`sq>UEprr2rurr2ruqYpNqrr2rurr2ruq>UEpqYpNqq#:!lq>UNs +s8N)hrr<&rrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrDrr!!)or!!)`m!!)or!!)or +!!%TMJcE^hro4$s2h1~> +!BpJ^mG.^A!<2uu!<2uu!<3#q!;c]q!;QQo!;6?l!;QTo!9O7X!<)rn!;uis!;?Em!;c]q!;lcr +!;uis!;ZWp!<2uu!<2uu!;c]q!<2uu!<2uu!<3#q!;c]q!;QQo!;6?l!;QTo!;6Bh!;lcr!;6?l +!;QQo!;ZWp!;uis!<2uu!<2uu!<3!"!<<)p!;lcr!;?Em!;lcr!.k0$s1\O4m/bd$J,~> +!BU8[l.l:=!<2uu!<2uu!<3#q!;c]q!;QQo!;6?l!;QTo!9O7X!<)rn!;uis!;?Em!;c]q!;lcr +!;uis!;ZWp!<2uu!<2uu!;c]q!<2uu!<2uu!<3#q!;c]q!;QQo!;6?l!;QTo!;6Bh!;lcr!;6?l +!;QQo!;ZWp!;uis!<2uu!<2uu!<3!"!<<)p!;lcr!;?Em!;lcr!.k0$s1\O4klK'jJ,~> +!B:&Xj4sY7!<2uu!<2uu!<3#q!;c]q!;QQo!;6?l!;QTo!9O7X!<)rn!;uis!;?Em!;c]q!;lcr +!;uis!;ZWp!<2uu!<2uu!;c]q!<2uu!<2uu!<3#q!;c]q!;QQo!;6?l!;QTo!;6Bh!;lcr!;6?l +!;QQo!;ZWp!;uis!<2uu!<2uu!<3!"!<<)p!;lcr!;?Em!;lcr!.k0$s1\O4irR%VJ,~> +!BpJ^mG.^A!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lq#C?ojo5;\q#:!lpAY*mqYpNq +qu6Wrr;Q`sq>UEprr2rurr2ruqYpNqrr2rurr3'#s8N)srr<&qrr<&orr<&lrr<&os8N)mrr<&s +rr<&rrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrD]k!!)`m!!)or!!%TMJcEIarp9a; +4b*~> +!BU8[l.l:=!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lq#C?ojo5;\q#:!lpAY*mqYpNq +qu6Wrr;Q`sq>UEprr2rurr2ruqYpNqrr2rurr3'#s8N)srr<&qrr<&orr<&lrr<&os8N)mrr<&s +rr<&rrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrD]k!!)`m!!)or!!%TMJcEIarojI/ +3e.~> +!B:&Xj4sY7!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lq#C?ojo5;\q#:!lpAY*mqYpNq +qu6Wrr;Q`sq>UEprr2rurr2ruqYpNqrr2rurr3'#s8N)srr<&qrr<&orr<&lrr<&os8N)mrr<&s +rr<&rrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrD]k!!)`m!!)or!!%TMJcEIaro4$s +2h1~> +!BpJ^mG.^A!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lq>UNss8N)]rr<&orr<&lrr<&mrr<&q +rr<&rrr<&srr<&prr<&urr<&urr<&qrr<&urr<&urrW9$rrDus!!)lq!!)fo!!)]l!!)ip!s&B$ +!;HKn!;uis!;lcr!;6?l!;QQo!;ZWp!;uis!<2uu!<2uu!<3!#!<<'!o`"mkpAY*mqu6WrJcC<$ +^An3"!S0Da~> +!BU8[l.l:=!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lq>UNss8N)]rr<&orr<&lrr<&mrr<&q +rr<&rrr<&srr<&prr<&urr<&urr<&qrr<&urr<&urrW9$rrDus!!)lq!!)fo!!)]l!!)ip!s&B$ +!;HKn!;uis!;lcr!;6?l!;QQo!;ZWp!;uis!<2uu!<2uu!<3!#!<<'!o`"mkpAY*mqu6WrJcC<$ +^An2s!R<`V~> +!B:&Xj4sY7!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lq>UNss8N)]rr<&orr<&lrr<&mrr<&q +rr<&rrr<&srr<&prr<&urr<&urr<&qrr<&urr<&urrW9$rrDus!!)lq!!)fo!!)]l!!)ip!s&B$ +!;HKn!;uis!;lcr!;6?l!;QQo!;ZWp!;uis!<2uu!<2uu!<3!#!<<'!o`"mkpAY*mqu6WrJcC<$ +^An2m!Q-jH~> +!BpJ^mG.^A!<2uu!<3!#!<<'!rVultqYpNqrVlitrVlitp&>!lqYpNqrVlitqZ$QqnG`Igp\t3n +rVultr;Q`spAY*mq>UEprVlitqu6Wrq>UEprr2rurr2ruqYpNqrr2rurr3'#s8N)ts8N)qrr<&t +rr<&trr<&lrr<&qrr<&trr<&orr<&ts8N)rrr<&lrr<&orr<&trr<&urr<&srr<&urr<&urr<&u +rr<&urr<&ts8N)rrr<&trr<&rrr<&qrr<&ts8N)rs8N(Ms+13ps8MBdeieN~> +!BU8[l.l:=!<2uu!<3!#!<<'!rVultqYpNqrVlitrVlitp&>!lqYpNqrVlitqZ$QqnG`Igp\t3n +rVultr;Q`spAY*mq>UEprVlitqu6Wrq>UEprr2rurr2ruqYpNqrr2rurr3'#s8N)ts8N)qrr<&t +rr<&trr<&lrr<&qrr<&trr<&orr<&ts8N)rrr<&lrr<&orr<&trr<&urr<&srr<&urr<&urr<&u +rr<&urr<&ts8N)rrr<&trr<&rrr<&qrr<&ts8N)rs8N(Ms+13ps8M6`c8pI~> +!B:&Xj4sY7!<2uu!<3!#!<<'!rVultqYpNqrVlitrVlitp&>!lqYpNqrVlitqZ$QqnG`Igp\t3n +rVultr;Q`spAY*mq>UEprVlitqu6Wrq>UEprr2rurr2ruqYpNqrr2rurr3'#s8N)ts8N)qrr<&t +rr<&trr<&lrr<&qrr<&trr<&orr<&ts8N)rrr<&lrr<&orr<&trr<&urr<&srr<&urr<&urr<&u +rr<&urr<&ts8N)rrr<&trr<&rrr<&qrr<&ts8N)rs8N(Ms+13ps8M$Z_`*)~> +!BpJ^mG7gA!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p!;uln!<3#t!<<)u!;lfr!:g*e!;ZZn!;uln +!;uln!;ulq!;uln!<3#t!<<*!!<<*!!;ulr!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p!;uln!<3#t +!<<)u!;QTm!!*&u!<<)q!;uln!;c`o!<3#t!<3#t!!*&u!<<*!!<<*!!<3#s!;QTm!<)ro!;ulq +!;ZZp!.k0$s3:TCm/bd$J,~> +!BU8[l.uC=!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p!;uln!<3#t!<<)u!;lfr!:g*e!;ZZn!;uln +!;uln!;ulq!;uln!<3#t!<<*!!<<*!!;ulr!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p!;uln!<3#t +!<<)u!;QTm!!*&u!<<)q!;uln!;c`o!<3#t!<3#t!!*&u!<<*!!<<*!!<3#s!;QTm!<)ro!;ulq +!;ZZp!.k0$s3:TCklK'jJ,~> +!B:&Xj5'b7!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p!;uln!<3#t!<<)u!;lfr!:g*e!;ZZn!;uln +!;uln!;ulq!;uln!<3#t!<<*!!<<*!!;ulr!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p!;uln!<3#t +!<<)u!;QTm!!*&u!<<)q!;uln!;c`o!<3#t!<3#t!!*&u!<<*!!<<*!!<3#s!;QTm!<)ro!;ulq +!;ZZp!.k0$s3:TCirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mB?Qi!;?Hm!6P9@!:0[b!.k0$s+13$s7lWnm/bd$J,~> +!BU8[l*(-e!;?Hm!6P9@!:0[b!.k0$s+13$s7lWnklK'jJ,~> +!B:&Xj0/L_!;?Hm!6P9@!:0[b!.k0$s+13$s7lWnirR%VJ,~> +!BpJ^mFqU=!!<0#!8[\T!;?Hm!9*tW!;ulr!;- +!BU8[l.Z19!!<0#!8[\T!;?Hm!9*tW!;ulr!;- +!B:&Xj4aP3!!<0#!8[\T!;?Hm!9*tW!;ulr!;- +!BpJ^mHsrH!;ull!8[\T!7_&J!;ulr!;- +!BU8[l0\ND!;ull!8[\T!7_&J!;ulr!;- +!B:&Xj6cm>!;ull!8[\T!7_&J!;ulr!;- +!BpJ^mHsrH!;uls!<)rs!!*&t!<<)u!;ulq!;lfn!<3#o!<)rq!;ulr!!*&t!;ulq!!*&u!;c`p +!<3#t!<3#q!<3#o!<3#s!<<)u!<3#r!;c`o!!<0#!;ulq!;lfm!.k0$s+13?s8MBdeieN~> +!BU8[l0\ND!;uls!<)rs!!*&t!<<)u!;ulq!;lfn!<3#o!<)rq!;ulr!!*&t!;ulq!!*&u!;c`p +!<3#t!<3#q!<3#o!<3#s!<<)u!<3#r!;c`o!!<0#!;ulq!;lfm!.k0$s+13?s8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rs!!*&t!<<)u!;ulq!;lfn!<3#o!<)rq!;ulr!!*&t!;ulq!!*&u!;c`p +!<3#t!<3#q!<3#o!<3#s!<<)u!<3#r!;c`o!!<0#!;ulq!;lfm!.k0$s+13?s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N'!s7ZNns7lZos7lZps7lZns82lps7cTns7cTjs8E#t +s8E#us7lZps7lZos7ZNns82los7lZos7lZos7lYGs+13$s.',gm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N'!s7ZNns7lZos7lZps7lZns82lps7cTns7cTjs8E#t +s8E#us7lZps7lZos7ZNns82los7lZos7lZos7lYGs+13$s.',gklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N'!s7ZNns7lZos7lZps7lZns82lps7cTns7cTjs8E#t +s8E#us7lZps7lZos7ZNns82los7lZos7lZos7lYGs+13$s.',girR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)ms8;rts8N'!s8E#ss8E#us8N)ts8N)ts8N)ms8N)rs8E#t +s8N*!s8E#ts8E#os8;ots8;rts8N)ts8N)ts8N)os8;rts8N)ss8N)ss8E#ts8E#us8E#ss8E#u +s8N)ts8N(Ms+13$s.',gm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)ms8;rts8N'!s8E#ss8E#us8N)ts8N)ts8N)ms8N)rs8E#t +s8N*!s8E#ts8E#os8;ots8;rts8N)ts8N)ts8N)os8;rts8N)ss8N)ss8E#ts8E#us8E#ss8E#u +s8N)ts8N(Ms+13$s.',gklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)ms8;rts8N'!s8E#ss8E#us8N)ts8N)ts8N)ms8N)rs8E#t +s8N*!s8E#ts8E#os8;ots8;rts8N)ts8N)ts8N)os8;rts8N)ss8N)ss8E#ts8E#us8E#ss8E#u +s8N)ts8N(Ms+13$s.',girR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)ms8E#qs8N)rs8N)ps8N)ts8N)ms8N)rs8N)ts8N*!s8N)s +s8N)ps7cTis8N)ts8N)os8E#ms8N)ss8N)ss8N*!s8N)rs8N*!s8;qKs+13$s-Wicm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)ms8E#qs8N)rs8N)ps8N)ts8N)ms8N)rs8N)ts8N*!s8N)s +s8N)ps7cTis8N)ts8N)os8E#ms8N)ss8N)ss8N*!s8N)rs8N*!s8;qKs+13$s-WicklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)ms8E#qs8N)rs8N)ps8N)ts8N)ms8N)rs8N)ts8N*!s8N)s +s8N)ps7cTis8N)ts8N)os8E#ms8N)ss8N)ss8N*!s8N)rs8N*!s8;qKs+13$s-WicirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)ms8N)qs7ZNns7lZns8N)ms8N)rs8N)ts8N*!s8N)ss8N)p +s8N'!s8E!$rr<'!s7lZns8N)os8N)ms8N)ss8N)os7ZNms8)eIs+13$s-s&fm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)ms8N)qs7ZNns7lZns8N)ms8N)rs8N)ts8N*!s8N)ss8N)p +s8N'!s8E!$rr<'!s7lZns8N)os8N)ms8N)ss8N)os7ZNms8)eIs+13$s-s&fklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)ms8N)qs7ZNns7lZns8N)ms8N)rs8N)ts8N*!s8N)ss8N)p +s8N'!s8E!$rr<'!s7lZns8N)os8N)ms8N)ss8N)os7ZNms8)eIs+13$s-s&firR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)ms8N)qs7ZKns7cTms8N)ms8N)rs8N)ts8N*!s8N)ss8N)p +s8N*!rriE&rr<'!p]19mrrDiorrDcmrrDusrrDiopAk-kquD +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)ms8N)qs7ZKns7cTms8N)ms8N)rs8N)ts8N*!s8N)ss8N)p +s8N*!rriE&rr<'!p]19mrrDiorrDcmrrDusrrDiopAk-kquD +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)ms8N)qs7ZKns7cTms8N)ms8N)rs8N)ts8N*!s8N)ss8N)p +s8N*!rriE&rr<'!p]19mrrDiorrDcmrrDusrrDiopAk-kquD +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N)us8N)qs8E#os8N)ss8N)ts8N)ts8N)ss8N)rs8N)t +s8N*!s8E#ts8E#os8N)ss8N'#rr<&ss8N)ts8N)ts8N)us8N)ms8N)ss8E#ss8Duus8E#ns8N)t +s8N(Ms+13$s.',gm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N)us8N)qs8E#os8N)ss8N)ts8N)ts8N)ss8N)rs8N)t +s8N*!s8E#ts8E#os8N)ss8N'#rr<&ss8N)ts8N)ts8N)us8N)ms8N)ss8E#ss8Duus8E#ns8N)t +s8N(Ms+13$s.',gklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N)us8N)qs8E#os8N)ss8N)ts8N)ts8N)ss8N)rs8N)t +s8N*!s8E#ts8E#os8N)ss8N'#rr<&ss8N)ts8N)ts8N)us8N)ms8N)ss8E#ss8Duus8E#ns8N)t +s8N(Ms+13$s.',girR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7cQos7lZns7lZps7ZNms7lZps7lZps8;rts8;rts7lZks82is +s7-0hs7lWps7lZns7lZos7cTos7lZos7lYGs+13$s.',gm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7cQos7lZns7lZps7ZNms7lZps7lZps8;rts8;rts7lZks82is +s7-0hs7lWps7lZns7lZos7cTos7lZos7lYGs+13$s.',gklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7cQos7lZns7lZps7ZNms7lZps7lZps8;rts8;rts7lZks82is +s7-0hs7lWps7lZns7lZos7cTos7lZos7lYGs+13$s.',girR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&qs82lrs7lZls8)fqs82iss8E#ss82lqs7lZps8;rts8;rss8;p! +rr<&qs82iss82iss82iss8E#ss82lrs7lZns7lZns8)fns8)fqs7u_Hs+13$s-s&fm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&qs82lrs7lZls8)fqs82iss8E#ss82lqs7lZps8;rts8;rss8;p! +rr<&qs82iss82iss82iss8E#ss82lrs7lZns7lZns8)fns8)fqs7u_Hs+13$s-s&fklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&qs82lrs7lZls8)fqs82iss8E#ss82lqs7lZps8;rts8;rss8;p! +rr<&qs82iss82iss82iss8E#ss82lrs7lZns7lZns8)fns8)fqs7u_Hs+13$s-s&firR%VJ,~> +!BpJ^mHsrH!3-"u!.k0$s+13$s1eU5m/bd$J,~> +!BU8[l0\ND!3-"u!.k0$s+13$s1eU5klK'jJ,~> +!B:&Xj6cm>!3-"u!.k0$s+13$s1eU5irR%VJ,~> +!BpJ^mHsrH!36(u!.k0$s+13$s1eU5m/bd$J,~> +!BU8[l0\ND!36(u!.k0$s+13$s1eU5klK'jJ,~> +!B:&Xj6cm>!36(u!.k0$s+13$s1eU5irR%VJ,~> +!BpJ^m>h5D!.k0$s+13$s1\O4m/bd$J,~> +!BU8[l&Pf@!.k0$s+13$s1\O4klK'jJ,~> +!B:&Xj,X0:!.k0$s+13$s1\O4irR%VJ,~> +!BpJ^m>h5E!.k0$s+13$s1SI3m/bd$J,~> +!BU8[l&PfA!.k0$s+13$s1SI3klK'jJ,~> +!B:&Xj,X0;!.k0$s+13$s1SI3irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G;Ds8;qas8N)Ns8N)ks8;r8s8N(Ms+11Ms8MBdeieN~> +!BU8[l%/l@s8;qas8N)Ns8N)ks8;r8s8N(Ms+11Ms8M6`c8pI~> +!B:&Xj+76:s8;qas8N)Ns8N)ks8;r8s8N(Ms+11Ms8M$Z_`*)~> +!BpJ^mFhO!la8Z,>q>UEp`;]f;li-qb +JcF:#rp9a;4b*~> +!BU8[l.Q+8!!3*"g]%6RdJj1Hli-qbdJj1HVZ-Vrmf*7ef)G^Mp&>!la8Z,>q>UEp`;]f;li-qb +JcF:#rojI/3e.~> +!B:&Xj4XJ2!!3*"g]%6RdJj1Hli-qbdJj1HVZ-Vrmf*7ef)G^Mp&>!la8Z,>q>UEp`;]f;li-qb +JcF:#ro4$s2h1~> +!BpJ^mG%[@!<)rt!8IMR!7CfH!:0Xb!7LlI!2]\q!:Kje!7q/M!;?Em!65$=!;ZWp!6"m;!:0Xb +!.k1#s8MBdeieN~> +!BU8[l.c7 +!B:&Xj4jV6!<)rt!8IMR!7CfH!:0Xb!7LlI!2]\q!:Kje!7q/M!;?Em!65$=!;ZWp!6"m;!:0Xb +!.k1#s8M$Z_`*)~> +!BpJ^mG%X@!;lcr!8IMR!7CfH!5&72!2]\q!:Kje!7q/M!;?Em!65$=!;ZWp!6"m;!.k0as8MBd +eieN~> +!BU8[l.c4 +!B:&Xj4jS6!;lcr!8IMR!7CfH!5&72!2]\q!:Kje!7q/M!;?Em!65$=!;ZWp!6"m;!.k0as8M$Z +_`*)~> +!BpJ^mG.^A!;HNm!!*&u!;lfp!;c`o!;lfm!;ulq!;QTo!!`H'!<<'!!;ulq!;lfm!<3#t!!*&u +!;lfq!;ZZn!!3*"r;Z]qqZ$Ko!WN/ps7u`ps8Duus8E#qs8;rrs8N''rr<'!rr<&ns8;ourrDus +r;Zlu!<3#t!!*&u!;lfp!;lfm!;ulq!!3*"rVllus8;rks8;rqs8N'!s8;rps8;ourrDioq>gNp +rVururW)iqr;cfrrr<9'!!*'!!!)cnr;c`pq>gKo! +!BU8[l.l:=!;HNm!!*&u!;lfp!;c`o!;lfm!;ulq!;QTo!!`H'!<<'!!;ulq!;lfm!<3#t!!*&u +!;lfq!;ZZn!!3*"r;Z]qqZ$Ko!WN/ps7u`ps8Duus8E#qs8;rrs8N''rr<'!rr<&ns8;ourrDus +r;Zlu!<3#t!!*&u!;lfp!;lfm!;ulq!!3*"rVllus8;rks8;rqs8N'!s8;rps8;ourrDioq>gNp +rVururW)iqr;cfrrr<9'!!*'!!!)cnr;c`pq>gKo! +!B:&Xj4sY7!;HNm!!*&u!;lfp!;c`o!;lfm!;ulq!;QTo!!`H'!<<'!!;ulq!;lfm!<3#t!!*&u +!;lfq!;ZZn!!3*"r;Z]qqZ$Ko!WN/ps7u`ps8Duus8E#qs8;rrs8N''rr<'!rr<&ns8;ourrDus +r;Zlu!<3#t!!*&u!;lfp!;lfm!;ulq!!3*"rVllus8;rks8;rqs8N'!s8;rps8;ourrDioq>gNp +rVururW)iqr;cfrrr<9'!!*'!!!)cnr;c`pq>gKo! +!BpJ^mG.^A!;6Bl!<2uu!<)ot!<)ot!;uis!<)ot!;c]q!;ZWp!<)ot!;QTo!<<*!!<<'!!<2uu +!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)rt!<)ot!<)ot!;uis!<)rt!;?Em!;QTo!<2uu!<)ot +!<)ot!<)rt!<<*!!<<'!!;ZWp!<)rt!<)ot!<)rt!;uls!<2uu!<)ot!<)ot!;c]q!;ZWp!<)rt +!<)rt!<)ot!;QQo!<)ot!;uls!<)ot!<)ot!<)rt!;?Em!;QTo!<2uu!<)ot!<)ot!<)rt!<<*! +!<<'!!;ZWp!<)ot!;c]q!;ZZp!<)ot!<)ot!<)ot!;lfr!<2uu!;ZZp!<<*!!<<'!!<2uu!<)ot +!;c]q!;QTo!<2uu!;c]q!;c]q!<)rt!<)ot!<)ot!;uis!<)rt!.k1Gs8MBdeieN~> +!BU8[l.l:=!;6Bl!<2uu!<)ot!<)ot!;uis!<)ot!;c]q!;ZWp!<)ot!;QTo!<<*!!<<'!!<2uu +!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)rt!<)ot!<)ot!;uis!<)rt!;?Em!;QTo!<2uu!<)ot +!<)ot!<)rt!<<*!!<<'!!;ZWp!<)rt!<)ot!<)rt!;uls!<2uu!<)ot!<)ot!;c]q!;ZWp!<)rt +!<)rt!<)ot!;QQo!<)ot!;uls!<)ot!<)ot!<)rt!;?Em!;QTo!<2uu!<)ot!<)ot!<)rt!<<*! +!<<'!!;ZWp!<)ot!;c]q!;ZZp!<)ot!<)ot!<)ot!;lfr!<2uu!;ZZp!<<*!!<<'!!<2uu!<)ot +!;c]q!;QTo!<2uu!;c]q!;c]q!<)rt!<)ot!<)ot!;uis!<)rt!.k1Gs8M6`c8pI~> +!B:&Xj4sY7!;6Bl!<2uu!<)ot!<)ot!;uis!<)ot!;c]q!;ZWp!<)ot!;QTo!<<*!!<<'!!<2uu +!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)rt!<)ot!<)ot!;uis!<)rt!;?Em!;QTo!<2uu!<)ot +!<)ot!<)rt!<<*!!<<'!!;ZWp!<)rt!<)ot!<)rt!;uls!<2uu!<)ot!<)ot!;c]q!;ZWp!<)rt +!<)rt!<)ot!;QQo!<)ot!;uls!<)ot!<)ot!<)rt!;?Em!;QTo!<2uu!<)ot!<)ot!<)rt!<<*! +!<<'!!;ZWp!<)ot!;c]q!;ZZp!<)ot!<)ot!<)ot!;lfr!<2uu!;ZZp!<<*!!<<'!!<2uu!<)ot +!;c]q!;QTo!<2uu!;c]q!;c]q!<)rt!<)ot!<)ot!;uis!<)rt!.k1Gs8M$Z_`*)~> +!BpJ^mG.^A!;6?l!;ZWp!;lcr!;QQo!;c]q!;c]q!;lcr!;ZWp!<2uu!<2uu!;ZWp!;c]q!;QQo +!;6?l!;lcr!;lcr!<2uu!;lcr!<)ot!;uis!;?Em!;QQo!;ZWp!;lcr!<2uu!<2uu!<2uu!;ZWp +!;uis!<2uu!;lcr!;uis!;$3j!;c]q!;c]q!;lcr!<)ot!;uis!;$3j!;uis!;uis!<2uu!;lcr +!;?Em!;QQo!;ZWp!;lcr!<2uu!<2uu!<2uu!;c]q!;lcr!;lcr!;ZWp!;uis!<2uu!;lcr!;uis +!;-9k!<2uu!<2uu!;ZWp!;c]q!;QQo!;6?l!;lcr!;lcr!<2uu!;lcr!<)ot!;uis!.k1Gs8MBd +eieN~> +!BU8[l.l:=!;6?l!;ZWp!;lcr!;QQo!;c]q!;c]q!;lcr!;ZWp!<2uu!<2uu!;ZWp!;c]q!;QQo +!;6?l!;lcr!;lcr!<2uu!;lcr!<)ot!;uis!;?Em!;QQo!;ZWp!;lcr!<2uu!<2uu!<2uu!;ZWp +!;uis!<2uu!;lcr!;uis!;$3j!;c]q!;c]q!;lcr!<)ot!;uis!;$3j!;uis!;uis!<2uu!;lcr +!;?Em!;QQo!;ZWp!;lcr!<2uu!<2uu!<2uu!;c]q!;lcr!;lcr!;ZWp!;uis!<2uu!;lcr!;uis +!;-9k!<2uu!<2uu!;ZWp!;c]q!;QQo!;6?l!;lcr!;lcr!<2uu!;lcr!<)ot!;uis!.k1Gs8M6` +c8pI~> +!B:&Xj4sY7!;6?l!;ZWp!;lcr!;QQo!;c]q!;c]q!;lcr!;ZWp!<2uu!<2uu!;ZWp!;c]q!;QQo +!;6?l!;lcr!;lcr!<2uu!;lcr!<)ot!;uis!;?Em!;QQo!;ZWp!;lcr!<2uu!<2uu!<2uu!;ZWp +!;uis!<2uu!;lcr!;uis!;$3j!;c]q!;c]q!;lcr!<)ot!;uis!;$3j!;uis!;uis!<2uu!;lcr +!;?Em!;QQo!;ZWp!;lcr!<2uu!<2uu!<2uu!;c]q!;lcr!;lcr!;ZWp!;uis!<2uu!;lcr!;uis +!;-9k!<2uu!<2uu!;ZWp!;c]q!;QQo!;6?l!;lcr!;lcr!<2uu!;lcr!<)ot!;uis!.k1Gs8M$Z +_`*)~> +!BpJ^mG.^A!;6?l!;ZZj!<)rp!;c]q!;c`k!;ZWp!<2uu!<2uu!<3#q!;c]q!;QQo!;6?l!;lcr +!;HNh!;ulr!;$3j!;QQo!;ZWp!;lcr!<2uu!<2uu!<2uu!;QTn!;lcr!;6?l!;QTk!;c]q!;c]q +!;?Em!;uis!;QTk!;uis!;uis!<2uu!;lcr!;?Em!;QQo!;ZWp!;lcr!<2uu!<2uu!<2uu!;c]q +!;lcr!;lcr!;ZWp!;uis!<3#o!;uis!;-9k!<2uu!<2uu!<3#q!;c]q!;QQo!;6?l!;lcr!;HNh +!;ulr!.k1Ds8MBdeieN~> +!BU8[l.l:=!;6?l!;ZZj!<)rp!;c]q!;c`k!;ZWp!<2uu!<2uu!<3#q!;c]q!;QQo!;6?l!;lcr +!;HNh!;ulr!;$3j!;QQo!;ZWp!;lcr!<2uu!<2uu!<2uu!;QTn!;lcr!;6?l!;QTk!;c]q!;c]q +!;?Em!;uis!;QTk!;uis!;uis!<2uu!;lcr!;?Em!;QQo!;ZWp!;lcr!<2uu!<2uu!<2uu!;c]q +!;lcr!;lcr!;ZWp!;uis!<3#o!;uis!;-9k!<2uu!<2uu!<3#q!;c]q!;QQo!;6?l!;lcr!;HNh +!;ulr!.k1Ds8M6`c8pI~> +!B:&Xj4sY7!;6?l!;ZZj!<)rp!;c]q!;c`k!;ZWp!<2uu!<2uu!<3#q!;c]q!;QQo!;6?l!;lcr +!;HNh!;ulr!;$3j!;QQo!;ZWp!;lcr!<2uu!<2uu!<2uu!;QTn!;lcr!;6?l!;QTk!;c]q!;c]q +!;?Em!;uis!;QTk!;uis!;uis!<2uu!;lcr!;?Em!;QQo!;ZWp!;lcr!<2uu!<2uu!<2uu!;c]q +!;lcr!;lcr!;ZWp!;uis!<3#o!;uis!;-9k!<2uu!<2uu!<3#q!;c]q!;QQo!;6?l!;lcr!;HNh +!;ulr!.k1Ds8M$Z_`*)~> +!BpJ^mG.^A!;6?l!;ZWp!;HKn!;uis!;c]q!;c]q!:p-i!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lqu6Wrp\t3no)J^ip&>!lq#:UEpqu6Wrrr2rurr2rurr2rup&G$lrVlitp&>!lq>UEp +r;Q`sqYpNqqYpNqpAY*mr;Q`sq>UEpr;Q`sr;Q`sr;Q`srr2ruqu6WrpAY*mq#:UEpqu6Wr +rr2rurr2rurr2ruqYpNqqu6Wrqu6Wrq>UEpr;Q`srr2rup&>!lo`"mkrr2rurr3'#s8N)srr<&q +rr<&orr<&lrr<&rrr<&nrr<&is8N(Ms7lWnm/bd$J,~> +!BU8[l.l:=!;6?l!;ZWp!;HKn!;uis!;c]q!;c]q!:p-i!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lqu6Wrp\t3no)J^ip&>!lq#:UEpqu6Wrrr2rurr2rurr2rup&G$lrVlitp&>!lq>UEp +r;Q`sqYpNqqYpNqpAY*mr;Q`sq>UEpr;Q`sr;Q`sr;Q`srr2ruqu6WrpAY*mq#:UEpqu6Wr +rr2rurr2rurr2ruqYpNqqu6Wrqu6Wrq>UEpr;Q`srr2rup&>!lo`"mkrr2rurr3'#s8N)srr<&q +rr<&orr<&lrr<&rrr<&nrr<&is8N(Ms7lWnklK'jJ,~> +!B:&Xj4sY7!;6?l!;ZWp!;HKn!;uis!;c]q!;c]q!:p-i!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lqu6Wrp\t3no)J^ip&>!lq#:UEpqu6Wrrr2rurr2rurr2rup&G$lrVlitp&>!lq>UEp +r;Q`sqYpNqqYpNqpAY*mr;Q`sq>UEpr;Q`sr;Q`sr;Q`srr2ruqu6WrpAY*mq#:UEpqu6Wr +rr2rurr2rurr2ruqYpNqqu6Wrqu6Wrq>UEpr;Q`srr2rup&>!lo`"mkrr2rurr3'#s8N)srr<&q +rr<&orr<&lrr<&rrr<&nrr<&is8N(Ms7lWnirR%VJ,~> +!BpJ^mG%X@!;lcr!<)ot!;ZWp!;HKn!;uis!;c]q!;c]q!:p-i!<2uu!<3!#!<<'!r;Q`sqYpNq +q#:!lqu6Wrp\t3npAY*mr;Q`spAY*mq#:UEpqu6Wrrr2rurr2rurr2ruq>UEpr;Q`s +rr2rup&>!lq>UEpr;Q`sqYpNqqYpNqpAY*mr;Q`sq>UEpr;Q`sr;Q`sr;Q`srr2ruqu6WrpAY*m +q#:UEpqu6Wrrr2rurr2rurr2ruqYpNqqu6Wrqu6Wrq>UEpr;Q`srr2rup&>!lo`"mkrr2ru +rr3'#s8N)srr<&qrr<&orr<&lrr<&rrr<&nrr<&mrr<&srr<%Ms7u]om/bd$J,~> +!BU8[l.c4!lqu6Wrp\t3npAY*mr;Q`spAY*mq#:UEpqu6Wrrr2rurr2rurr2ruq>UEpr;Q`s +rr2rup&>!lq>UEpr;Q`sqYpNqqYpNqpAY*mr;Q`sq>UEpr;Q`sr;Q`sr;Q`srr2ruqu6WrpAY*m +q#:UEpqu6Wrrr2rurr2rurr2ruqYpNqqu6Wrqu6Wrq>UEpr;Q`srr2rup&>!lo`"mkrr2ru +rr3'#s8N)srr<&qrr<&orr<&lrr<&rrr<&nrr<&mrr<&srr<%Ms7u]oklK'jJ,~> +!B:&Xj4jS6!;lcr!<)ot!;ZWp!;HKn!;uis!;c]q!;c]q!:p-i!<2uu!<3!#!<<'!r;Q`sqYpNq +q#:!lqu6Wrp\t3npAY*mr;Q`spAY*mq#:UEpqu6Wrrr2rurr2rurr2ruq>UEpr;Q`s +rr2rup&>!lq>UEpr;Q`sqYpNqqYpNqpAY*mr;Q`sq>UEpr;Q`sr;Q`sr;Q`srr2ruqu6WrpAY*m +q#:UEpqu6Wrrr2rurr2rurr2ruqYpNqqu6Wrqu6Wrq>UEpr;Q`srr2rup&>!lo`"mkrr2ru +rr3'#s8N)srr<&qrr<&orr<&lrr<&rrr<&nrr<&mrr<&srr<%Ms7u]oirR%VJ,~> +!BpJ^mG%[@!<)ot!;uis!;QQo!<)rt!<2uu!<)rt!;c]q!<)ot!<2uu!<)rt!;ZWp!<2uu!<3!# +!<<'!rVultqYpNqrVlitrVlitp&>!lqYpNqrVultrVlitrVultrVultrVlitpAY*mq#:^HprVlitrVlitrVultr;Q`sq>UEprVultqYpNqrVlitrr2rurVult +rVlitr;Q`sq>UEprVultr;Q`sr;Q`srVlitrVultpAY*mq#:UEprVlitqYpNqrVlitrr2rur;Q`srVlitrVultr;Q`so`"mkrr2rurr3'#s8N)ts8N)qrr<&t +rr<&trr<&lrr<&qrr<&ts8N)trr<&ts8N)ts8N)trr<&rs8N(Ms8MBdeieN~> +!BU8[l.c7!lqYpNqrVultrVlitrVultrVultrVlitpAY*mq#:^HprVlitrVlitrVultr;Q`sq>UEprVultqYpNqrVlitrr2rurVult +rVlitr;Q`sq>UEprVultr;Q`sr;Q`srVlitrVultpAY*mq#:UEprVlitqYpNqrVlitrr2rur;Q`srVlitrVultr;Q`so`"mkrr2rurr3'#s8N)ts8N)qrr<&t +rr<&trr<&lrr<&qrr<&ts8N)trr<&ts8N)ts8N)trr<&rs8N(Ms8M6`c8pI~> +!B:&Xj4jV6!<)ot!;uis!;QQo!<)rt!<2uu!<)rt!;c]q!<)ot!<2uu!<)rt!;ZWp!<2uu!<3!# +!<<'!rVultqYpNqrVlitrVlitp&>!lqYpNqrVultrVlitrVultrVultrVlitpAY*mq#:^HprVlitrVlitrVultr;Q`sq>UEprVultqYpNqrVlitrr2rurVult +rVlitr;Q`sq>UEprVultr;Q`sr;Q`srVlitrVultpAY*mq#:UEprVlitqYpNqrVlitrr2rur;Q`srVlitrVultr;Q`so`"mkrr2rurr3'#s8N)ts8N)qrr<&t +rr<&trr<&lrr<&qrr<&ts8N)trr<&ts8N)ts8N)trr<&rs8N(Ms8M$Z_`*)~> +!BpJ^mFhO +!BU8[l.Q+8!<)ro!;lfp!;lfp!!*&u!;lfp!;ulq!;QTn!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p +!;uln!;ulq!;c`o!;lcs!<;utp]('irr;fpqu?TprVuiss8W*!s8W*!qYpQrs8;rps8;rqs7u`n +s8;ots8E#qs8;rqs8;rqs8E#ts8E#os8;ots8E#us8E#ts8E#ss8;p!rr<&ps7u`ps7u`ms8;rr +s8E#us8N*!s8N)ps8;rms8;rss8E#ts8E#ss8;rqs7u`ks8E#us8N*!s8N*!s8;ots8E#qs8;rs +s7u`ns7u`ns8;ros8;rprrE-"r;c]orr@WMrojI/3e.~> +!B:&Xj4XJ2!<)ro!;lfp!;lfp!!*&u!;lfp!;ulq!;QTn!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p +!;uln!;ulq!;c`o!;lcs!<;utp]('irr;fpqu?TprVuiss8W*!s8W*!qYpQrs8;rps8;rqs7u`n +s8;ots8E#qs8;rqs8;rqs8E#ts8E#os8;ots8E#us8E#ts8E#ss8;p!rr<&ps7u`ps7u`ms8;rr +s8E#us8N*!s8N)ps8;rms8;rss8E#ts8E#ss8;rqs7u`ks8E#us8N*!s8N*!s8;ots8E#qs8;rs +s7u`ns7u`ns8;ros8;rprrE-"r;c]orr@WMro4$s2h1~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mA0d^!;?Hm!2KSo!:0[b!.k0$s+13Ls8MBdeieN~> +!BU8[l(n@Z!;?Hm!2KSo!:0[b!.k0$s+13Ls8M6`c8pI~> +!B:&Xj.u_T!;?Hm!2KSo!:0[b!.k0$s+13Ls8M$Z_`*)~> +!BpJ^mFqU=!71]F!;?Hm!5&:1!;ulr!;- +!BU8[l.Z19!71]F!;?Hm!5&:1!;ulr!;- +!B:&Xj4aP3!71]F!;?Hm!5&:1!;ulr!;- +!BpJ^mHsrH!;ulm!7CiH!3ZA$!;ulr!;- +!BU8[l0\ND!;ulm!7CiH!3ZA$!;ulr!;- +!B:&Xj6cm>!;ulm!7CiH!3ZA$!;ulr!;- +!BpJ^mHsrH!;uls!<)rt!<<)u!!*&t!;lfp!<)rr!<<)u!<)rp!<3#o!<)rq!;ZZn!<)rs!!*&t +!;uln!;HNl!<)rs!!*&t!;QTn!<3#t!<3#q!<3#o!<3#s!<<)u!<3#r!;c`o!!<0#!;ulq!;lfm +!.k0$s+13ps8MBdeieN~> +!BU8[l0\ND!;uls!<)rt!<<)u!!*&t!;lfp!<)rr!<<)u!<)rp!<3#o!<)rq!;ZZn!<)rs!!*&t +!;uln!;HNl!<)rs!!*&t!;QTn!<3#t!<3#q!<3#o!<3#s!<<)u!<3#r!;c`o!!<0#!;ulq!;lfm +!.k0$s+13ps8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rt!<<)u!!*&t!;lfp!<)rr!<<)u!<)rp!<3#o!<)rq!;ZZn!<)rs!!*&t +!;uln!;HNl!<)rs!!*&t!;QTn!<3#t!<3#q!<3#o!<3#s!<<)u!<3#r!;c`o!!<0#!;ulq!;lfm +!.k0$s+13ps8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N'!s7cTns7lZps7ZNns7lZps7lZns82los7lZps7cTn +s7lZjs7lZps7cTis8E#ts8E#us7lZps7lZos7ZNns82los7lZos7lZos7lYGs+13$s3:TCm/bd$ +J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N'!s7cTns7lZps7ZNns7lZps7lZns82los7lZps7cTn +s7lZjs7lZps7cTis8E#ts8E#us7lZps7lZos7ZNns82los7lZos7lZos7lYGs+13$s3:TCklK'j +J,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N'!s7cTns7lZps7ZNns7lZps7lZns82los7lZps7cTn +s7lZjs7lZps7cTis8E#ts8E#us7lZps7lZos7ZNns82los7lZos7lZos7lYGs+13$s3:TCirR%V +J,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)rs8N*!s8E#ts8Duus8E#ss8E#ts8;rts8N*!s8N)ts8N)t +s8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N)qs8E#ss8E#us8E#ts8N)ps8;ots8;rts8N)t +s8N)ts8N)os8;rts8N)ss8N)ss8E#ts8E#us8E#ss8E#us8N)ts8N(Ms+13$s3:TCm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)rs8N*!s8E#ts8Duus8E#ss8E#ts8;rts8N*!s8N)ts8N)t +s8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N)qs8E#ss8E#us8E#ts8N)ps8;ots8;rts8N)t +s8N)ts8N)os8;rts8N)ss8N)ss8E#ts8E#us8E#ss8E#us8N)ts8N(Ms+13$s3:TCklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)rs8N*!s8E#ts8Duus8E#ss8E#ts8;rts8N*!s8N)ts8N)t +s8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N)qs8E#ss8E#us8E#ts8N)ps8;ots8;rts8N)t +s8N)ts8N)os8;rts8N)ss8N)ss8E#ts8E#us8E#ss8E#us8N)ts8N(Ms+13$s3:TCirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ss8N'#rr<&rs8N)us8E#js8N)ts8N)ms8N)s +s8N)rs8N*!s8N)ts8N)us8;rks8N)rs8N*!s8N)ts8N)ps7cTis8N)ts8N)os8E#ms8N)ss8N)s +s8N*!s8N)rs8N*!s8;qKs+13$s2k +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ss8N'#rr<&rs8N)us8E#js8N)ts8N)ms8N)s +s8N)rs8N*!s8N)ts8N)us8;rks8N)rs8N*!s8N)ts8N)ps7cTis8N)ts8N)os8E#ms8N)ss8N)s +s8N*!s8N)rs8N*!s8;qKs+13$s2k +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ss8N'#rr<&rs8N)us8E#js8N)ts8N)ms8N)s +s8N)rs8N*!s8N)ts8N)us8;rks8N)rs8N*!s8N)ts8N)ps7cTis8N)ts8N)os8E#ms8N)ss8N)s +s8N*!s8N)rs8N*!s8;qKs+13$s2k +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)rs8N*!s8N)ss8N'!s7ZNms8N)ps7lZns8N)ms8N)ss8N)r +s8N*!s8N)ts8N)ts8)fls8N)rs8N*!s8N)ts8N)ps8N'!s8E!$rr<'!s7lZns8N)os8N)ms8N)s +s8N)os7ZNms8)eIs+13$s31NBm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)rs8N*!s8N)ss8N'!s7ZNms8N)ps7lZns8N)ms8N)ss8N)r +s8N*!s8N)ts8N)ts8)fls8N)rs8N*!s8N)ts8N)ps8N'!s8E!$rr<'!s7lZns8N)os8N)ms8N)s +s8N)os7ZNms8)eIs+13$s31NBklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)rs8N*!s8N)ss8N'!s7ZNms8N)ps7lZns8N)ms8N)ss8N)r +s8N*!s8N)ts8N)ts8)fls8N)rs8N*!s8N)ts8N)ps8N'!s8E!$rr<'!s7lZns8N)os8N)ms8N)s +s8N)os7ZNms8)eIs+13$s31NBirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ss8N'!s7ZNms8N)qs7cTms8N)ms8N)ss8N)r +s8N*!s8N)ts8N)rs82lns8N)rs8N*!s8N)ts8N)ps8N*!rriE&rr<'!p]19mrrDiorrDcmrrDus +rrDiopAk-kquD +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ss8N'!s7ZNms8N)qs7cTms8N)ms8N)ss8N)r +s8N*!s8N)ts8N)rs82lns8N)rs8N*!s8N)ts8N)ps8N*!rriE&rr<'!p]19mrrDiorrDcmrrDus +rrDiopAk-kquD +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ss8N'!s7ZNms8N)qs7cTms8N)ms8N)ss8N)r +s8N*!s8N)ts8N)rs82lns8N)rs8N*!s8N)ts8N)ps8N*!rriE&rr<'!p]19mrrDiorrDcmrrDus +rrDiopAk-kquD +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8N)us8E#ts8Duus8E#ms8N)qs8N)ss8N)ts8N)ts8N)s +s8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)qs8E#ss8E#us8N)ts8N)ps8N)ss8N'#rr<&ss8N)t +s8N)ts8N)us8N)ms8N)ss8E#ss8Duus8E#ns8N)ts8N(Ms+13$s3:TCm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8N)us8E#ts8Duus8E#ms8N)qs8N)ss8N)ts8N)ts8N)s +s8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)qs8E#ss8E#us8N)ts8N)ps8N)ss8N'#rr<&ss8N)t +s8N)ts8N)us8N)ms8N)ss8E#ss8Duus8E#ns8N)ts8N(Ms+13$s3:TCklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8N)us8E#ts8Duus8E#ms8N)qs8N)ss8N)ts8N)ts8N)s +s8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)qs8E#ss8E#us8N)ts8N)ps8N)ss8N'#rr<&ss8N)t +s8N)ts8N)us8N)ms8N)ss8E#ss8Duus8E#ns8N)ts8N(Ms+13$s3:TCirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7lZos7lZps7lZos7ZNms7lZps7lZos7lZps8;rts8;rt +s7lZjs7lZps8;rts8;rps82iss7-0hs7lWps7lZns7lZos7cTos7lZos7lYGs+13$s3:TCm/bd$ +J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7lZos7lZps7lZos7ZNms7lZps7lZos7lZps8;rts8;rt +s7lZjs7lZps8;rts8;rps82iss7-0hs7lWps7lZns7lZos7cTos7lZos7lYGs+13$s3:TCklK'j +J,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7lZos7lZps7lZos7ZNms7lZps7lZos7lZps8;rts8;rt +s7lZjs7lZps8;rts8;rps82iss7-0hs7lWps7lZns7lZos7cTos7lZos7lYGs+13$s3:TCirR%V +J,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&qs8;rqs8N'!s8;rps8)frs7lZns82iss8E#ss82lqs7lZms8;rr +s8;rts8;rts7u`hs8;rrs8;rts8;rps82iss82iss82iss8E#ss82lrs7lZns7lZns8)fns8)fq +s7u_Hs+13$s31NBm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&qs8;rqs8N'!s8;rps8)frs7lZns82iss8E#ss82lqs7lZms8;rr +s8;rts8;rts7u`hs8;rrs8;rts8;rps82iss82iss82iss8E#ss82lrs7lZns7lZns8)fns8)fq +s7u_Hs+13$s31NBklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&qs8;rqs8N'!s8;rps8)frs7lZns82iss8E#ss82lqs7lZms8;rr +s8;rts8;rts7u`hs8;rrs8;rts8;rps82iss82iss82iss8E#ss82lrs7lZns7lZns8)fns8)fq +s7u_Hs+13$s31NBirR%VJ,~> +!BpJ^mHsrH!:g*h!.k0$s+13$s+14Es8MBdeieN~> +!BU8[l0\ND!:g*h!.k0$s+13$s+14Es8M6`c8pI~> +!B:&Xj6cm>!:g*h!.k0$s+13$s+14Es8M$Z_`*)~> +!BpJ^mHsrH!:g*h!.k0$s+13$s+14Es8MBdeieN~> +!BU8[l0\ND!:g*h!.k0$s+13$s+14Es8M6`c8pI~> +!B:&Xj6cm>!:g*h!.k0$s+13$s+14Es8M$Z_`*)~> +!BpJ^mF)%4!.k0$s+13$s+14Gs8MBdeieN~> +!BU8[l-fV0!.k0$s+13$s+14Gs8M6`c8pI~> +!B:&Xj3mu*!.k0$s+13$s+14Gs8M$Z_`*)~> +!BpJ^mF)%4!.k0$s+13$s+14Gs8MBdeieN~> +!BU8[l-fV0!.k0$s+13$s+14Gs8M6`c8pI~> +!B:&Xj3mu*!.k0$s+13$s+14Gs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mEkn3!9O7\!/1CN!0dH_!.k0Ls8N(Ms5X.Ym/bd$J,~> +!BU8[l-TJ/!9O7\!/1CN!0dH_!.k0Ls8N(Ms5X.YklK'jJ,~> +!B:&Xj3[i)!9O7\!/1CN!0dH_!.k0Ls8N(Ms5X.YirR%VJ,~> +!BpJ^mG%[>!;HKn!9F.[!8d_U!65$=!9*qX!:Bdd!;?Em!65$=!;QQo!;ZWp!8@GQ!:0Xb!5ed7 +!!3*"d/O(GkPkM^q>UEpjSo2[JcG`:!S0Da~> +!BU8[l.c7:!;HKn!9F.[!8d_U!65$=!9*qX!:Bdd!;?Em!65$=!;QQo!;ZWp!8@GQ!:0Xb!5ed7 +!!3*"d/O(GkPkM^q>UEpjSo2[JcG`6!R<`V~> +!B:&Xj4jV4!;HKn!9F.[!8d_U!65$=!9*qX!:Bdd!;?Em!65$=!;QQo!;ZWp!8@GQ!:0Xb!5ed7 +!!3*"d/O(GkPkM^q>UEpjSo2[JcG`0!Q-jH~> +!BpJ^mF_F=!;HKn!9F.[!8d_U!65$=!9*qX!:Bdd!;?Em!65$=!;QQo!;ZWp!8@GQ!:0Xb!6"p; +!<)rt!7:`G!9a@^!;ZWp!9F.[!.k1Lm/bd$J,~> +!BU8[l.H"9!;HKn!9F.[!8d_U!65$=!9*qX!:Bdd!;?Em!65$=!;QQo!;ZWp!8@GQ!:0Xb!6"p; +!<)rt!7:`G!9a@^!;ZWp!9F.[!.k1LklK'jJ,~> +!B:&Xj4OA3!;HKn!9F.[!8d_U!65$=!9*qX!:Bdd!;?Em!65$=!;QQo!;ZWp!8@GQ!:0Xb!6"p; +!<)rt!7:`G!9a@^!;ZWp!9F.[!.k1LirR%VJ,~> +!BpJ^mFhL@!<3&orr<&[rr<%Mrr<&drr<&'rr<&prr<&Qrr<&$rr<&rrr<&Grr<&^rr<&prr<%M +s5X.Ym/bd$J,~> +!BU8[l.Q( +!B:&Xj4XG6!<3&orr<&[rr<%Mrr<&drr<&'rr<&prr<&Qrr<&$rr<&rrr<&Grr<&^rr<&prr<%M +s5X.YirR%VJ,~> +!BpJ^mFhL@!<3&orr<&ps8;p!rr<&ts8;rprrE-"r;cfrrVururW)iqr;c]orW)cor;Zlu!;c`q +!!`H'!<<'!!;ulq!;uls!!*&t!;lfq!;lfr!!*&t!<)rt!<)rt!;c]q!;ZZn!;lfm!;ulr!;ZZn +!;uls!!*&t!;lfp!!3*"q>^Eorr;rtrVuisqZ$BlrVllus8;rns8N''rr<'!rr<&ss8;rps7u`p +s8Duus8E#qs8E#os8;ourrDusr;c]or;Zlu!9sL`!;6Bj!<)rt!!`H'!<<'!!<3#u!!*&t!<)rt +!<)rt!<)ro!;ulq!;?Hh!<)ou!<;utqu?Tpp&G!kqu?Zr!<;utrVuisrr;rtrVufrr;Z`r!<<#u +qu?Tp!WN/ts8;r9s8MBdeieN~> +!BU8[l.Q(^Eorr;rtrVuisqZ$BlrVllus8;rns8N''rr<'!rr<&ss8;rps7u`p +s8Duus8E#qs8E#os8;ourrDusr;c]or;Zlu!9sL`!;6Bj!<)rt!!`H'!<<'!!<3#u!!*&t!<)rt +!<)rt!<)ro!;ulq!;?Hh!<)ou!<;utqu?Tpp&G!kqu?Zr!<;utrVuisrr;rtrVufrr;Z`r!<<#u +qu?Tp!WN/ts8;r9s8M6`c8pI~> +!B:&Xj4XG6!<3&orr<&ps8;p!rr<&ts8;rprrE-"r;cfrrVururW)iqr;c]orW)cor;Zlu!;c`q +!!`H'!<<'!!;ulq!;uls!!*&t!;lfq!;lfr!!*&t!<)rt!<)rt!;c]q!;ZZn!;lfm!;ulr!;ZZn +!;uls!!*&t!;lfp!!3*"q>^Eorr;rtrVuisqZ$BlrVllus8;rns8N''rr<'!rr<&ss8;rps7u`p +s8Duus8E#qs8E#os8;ourrDusr;c]or;Zlu!9sL`!;6Bj!<)rt!!`H'!<<'!!<3#u!!*&t!<)rt +!<)rt!<)ro!;ulq!;?Hh!<)ou!<;utqu?Tpp&G!kqu?Zr!<;utrVuisrr;rtrVufrr;Z`r!<<#u +qu?Tp!WN/ts8;r9s8M$Z_`*)~> +!BpJ^mFqR?!<2uu!;ZWp!;c]q!<)rt!<)ot!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot!;ZWp +!;c]q!<)rt!;ZZp!<<*!!<<'!!<2uu!<)ot!;uls!<)ot!;c]q!;c`q!<)ot!<)ot!;uis!;c]q +!;c]q!<)ot!;c]q!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!;uis!;c]q!;QQo!;ZZp +!<)ot!;ZZp!<<*!!<<'!!<2uu!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)rt!<)ot!<)ot!;uis +!<)rt!9sL`!;?Em!<)ot!<)rt!<<*!!<<'!!<3#u!<)ot!<)ot!;uis!;lcr!;ZWp!<)ot!;6?l +!;ZZp!<)ot!<)ot!<)ot!;-9k!;c`q!<)ot!<)ot!;uis!<)ot!<)ot!;lfr!<2uu!<)ot!<)rt +!<)ot!<)ot!6,!;m/bd$J,~> +!BU8[l.Z.;!<2uu!;ZWp!;c]q!<)rt!<)ot!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot!;ZWp +!;c]q!<)rt!;ZZp!<<*!!<<'!!<2uu!<)ot!;uls!<)ot!;c]q!;c`q!<)ot!<)ot!;uis!;c]q +!;c]q!<)ot!;c]q!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!;uis!;c]q!;QQo!;ZZp +!<)ot!;ZZp!<<*!!<<'!!<2uu!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)rt!<)ot!<)ot!;uis +!<)rt!9sL`!;?Em!<)ot!<)rt!<<*!!<<'!!<3#u!<)ot!<)ot!;uis!;lcr!;ZWp!<)ot!;6?l +!;ZZp!<)ot!<)ot!<)ot!;-9k!;c`q!<)ot!<)ot!;uis!<)ot!<)ot!;lfr!<2uu!<)ot!<)rt +!<)ot!<)ot!6,!;klK'jJ,~> +!B:&Xj4aM5!<2uu!;ZWp!;c]q!<)rt!<)ot!<)ot!;uls!<)ot!;uls!<2uu!<)ot!<)ot!;ZWp +!;c]q!<)rt!;ZZp!<<*!!<<'!!<2uu!<)ot!;uls!<)ot!;c]q!;c`q!<)ot!<)ot!;uis!;c]q +!;c]q!<)ot!;c]q!;?Em!;c]q!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!;uis!;c]q!;QQo!;ZZp +!<)ot!;ZZp!<<*!!<<'!!<2uu!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)rt!<)ot!<)ot!;uis +!<)rt!9sL`!;?Em!<)ot!<)rt!<<*!!<<'!!<3#u!<)ot!<)ot!;uis!;lcr!;ZWp!<)ot!;6?l +!;ZZp!<)ot!<)ot!<)ot!;-9k!;c`q!<)ot!<)ot!;uis!<)ot!<)ot!;lfr!<2uu!<)ot!<)rt +!<)ot!<)ot!6,!;irR%VJ,~> +!BpJ^mFqR?!<2uu!;ZWp!;lcr!;lcr!<2uu!;lcr!<)ot!;lcr!<)ot!;$3j!;ZWp!;lcr!;lcr +!;ZWp!<2uu!<2uu!;ZWp!;uis!;uis!;c]q!;c]q!;lcr!<2uu!;uis!;c]q!;6?l!;c]q!;?Em +!;lcr!;lcr!<)ot!;uis!<)ot!;uis!;QQu!<<'!s8N)qrr<&orr<&prr<&srr<&prr<&urr<&u +rr<&prr<&qrr<&orr<&lrr<&rrr<&rrr<&urr<&rrr<&trr<&srr<&`rr<&nrr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&rrr<&mrr<&prr<&srr<&urr<&rrr<&lrr<&q +rr<&srr<&srr<&urr<&trr<&rrr<&srr<&orr<&srr<&urr<&rrr<&=s8MBdeieN~> +!BU8[l.Z.;!<2uu!;ZWp!;lcr!;lcr!<2uu!;lcr!<)ot!;lcr!<)ot!;$3j!;ZWp!;lcr!;lcr +!;ZWp!<2uu!<2uu!;ZWp!;uis!;uis!;c]q!;c]q!;lcr!<2uu!;uis!;c]q!;6?l!;c]q!;?Em +!;lcr!;lcr!<)ot!;uis!<)ot!;uis!;QQu!<<'!s8N)qrr<&orr<&prr<&srr<&prr<&urr<&u +rr<&prr<&qrr<&orr<&lrr<&rrr<&rrr<&urr<&rrr<&trr<&srr<&`rr<&nrr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&rrr<&mrr<&prr<&srr<&urr<&rrr<&lrr<&q +rr<&srr<&srr<&urr<&trr<&rrr<&srr<&orr<&srr<&urr<&rrr<&=s8M6`c8pI~> +!B:&Xj4aM5!<2uu!;ZWp!;lcr!;lcr!<2uu!;lcr!<)ot!;lcr!<)ot!;$3j!;ZWp!;lcr!;lcr +!;ZWp!<2uu!<2uu!;ZWp!;uis!;uis!;c]q!;c]q!;lcr!<2uu!;uis!;c]q!;6?l!;c]q!;?Em +!;lcr!;lcr!<)ot!;uis!<)ot!;uis!;QQu!<<'!s8N)qrr<&orr<&prr<&srr<&prr<&urr<&u +rr<&prr<&qrr<&orr<&lrr<&rrr<&rrr<&urr<&rrr<&trr<&srr<&`rr<&nrr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&rrr<&mrr<&prr<&srr<&urr<&rrr<&lrr<&q +rr<&srr<&srr<&urr<&trr<&rrr<&srr<&orr<&srr<&urr<&rrr<&=s8M$Z_`*)~> +!BpJ^mG%X@!;uis!;c]q!;lcr!;lcr!<3#o!<)ot!;lcr!<)ot!;QTk!;ZWp!;lcr!:p-i!<2uu +!<2uu!<3#q!;uis!;uis!;c]q!;c]q!;lcr!<2uu!;uis!;c]q!;c`m!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!;ulr!;6?r!<<'!s8N)qrr<&orr<&prr<&srr<&prr<&urr<&urr<&us8)fmrr<&o +rr<&lrr<&rrr<&ns7lZms8E#\rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&r +rr<&qs7lZgrr<&prr<&srr<&us7lZfrr<&qrr<&srr<&srr<&urr<&ts7lZmrr<&ns8E#qs7lZ7 +s8MBdeieN~> +!BU8[l.c4 +!B:&Xj4jS6!;uis!;c]q!;lcr!;lcr!<3#o!<)ot!;lcr!<)ot!;QTk!;ZWp!;lcr!:p-i!<2uu +!<2uu!<3#q!;uis!;uis!;c]q!;c]q!;lcr!<2uu!;uis!;c]q!;c`m!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!;ulr!;6?r!<<'!s8N)qrr<&orr<&prr<&srr<&prr<&urr<&urr<&us8)fmrr<&o +rr<&lrr<&rrr<&ns7lZms8E#\rr<&nrr<&rrr<&urr<&urr<&urr<&urr<&rrr<&urr<&srr<&r +rr<&qs7lZgrr<&prr<&srr<&us7lZfrr<&qrr<&srr<&srr<&urr<&ts7lZmrr<&ns8E#qs7lZ7 +s8M$Z_`*)~> +!BpJ^mG%[;!;c]q!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!;ZWp!;lcr!:p-i!<2uu +!<3!#!<<'!r;Q`sr;Q`sr;Q`sqYpNqqYpNqqu6Wrrr2rur;Q`sqYpNqqu6Wrr;Q`sqYpNqpAY*m +qu6Wrqu6WrrVlitr;Q`sq>^Hpp\tEtrrE'!rrDoq!!)fo!!)ip!!)rs!!)ip!!*#u!!*#u!s&B$ +!;uis!;c]q!;QQo!;6?l!;lcr!;HKn!:p0i!9jF_!;HKn!;lcr!<2uu!<2uu!<2uu!<2uu!;lcr +!<2uu!;uis!;lcr!;c]q!:Tpf!;ZWp!;uis!<2uu!:Kje!;c]q!;uis!;lct!<3&srr<&lrr<&k +s8N)trr<&6s8MBdeieN~> +!BU8[l.c77!;c]q!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!;ZWp!;lcr!:p-i!<2uu +!<3!#!<<'!r;Q`sr;Q`sr;Q`sqYpNqqYpNqqu6Wrrr2rur;Q`sqYpNqqu6Wrr;Q`sqYpNqpAY*m +qu6Wrqu6WrrVlitr;Q`sq>^Hpp\tEtrrE'!rrDoq!!)fo!!)ip!!)rs!!)ip!!*#u!!*#u!s&B$ +!;uis!;c]q!;QQo!;6?l!;lcr!;HKn!:p0i!9jF_!;HKn!;lcr!<2uu!<2uu!<2uu!<2uu!;lcr +!<2uu!;uis!;lcr!;c]q!:Tpf!;ZWp!;uis!<2uu!:Kje!;c]q!;uis!;lct!<3&srr<&lrr<&k +s8N)trr<&6s8M6`c8pI~> +!B:&Xj4jV1!;c]q!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!;ZWp!;lcr!:p-i!<2uu +!<3!#!<<'!r;Q`sr;Q`sr;Q`sqYpNqqYpNqqu6Wrrr2rur;Q`sqYpNqqu6Wrr;Q`sqYpNqpAY*m +qu6Wrqu6WrrVlitr;Q`sq>^Hpp\tEtrrE'!rrDoq!!)fo!!)ip!!)rs!!)ip!!*#u!!*#u!s&B$ +!;uis!;c]q!;QQo!;6?l!;lcr!;HKn!:p0i!9jF_!;HKn!;lcr!<2uu!<2uu!<2uu!<2uu!;lcr +!<2uu!;uis!;lcr!;c]q!:Tpf!;ZWp!;uis!<2uu!:Kje!;c]q!;uis!;lct!<3&srr<&lrr<&k +s8N)trr<&6s8M$Z_`*)~> +!BpJ^mG.^A!;c]q!;lcr!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!;ZWp!;lcr!:p-i +!<2uu!<3!#!<<'!r;Q`sr;Q`sr;Q`sqYpNqqYpNqqu6Wrrr2rur;Q`sqYpNqqu6Wrr;Q`sqYpNq +pAY*mqu6Wrqu6WrrVlitr;Q`srVlitr;Q`sq#:NurrE'!rrDoq!!)fo!!)ip!!)rs!!)ip!!*#u +!!*#u!s&B$!;uis!;c]q!;QQo!;6?l!;lcr!;HKn!;?Em!;uis!9jF_!;lcu!<<'!qu6Wrrr2ru +rr2rurr2rurr2ruqu6Wrrr2rur;Q`squ6WrqYpNqn,E@fq>UEpr;Q`srr2rumf*7eqYpNqr;Q`s +qu6]trrDus!!)]l!!)fo!!)rs!!*#u!!'e6rp9a;4b*~> +!BU8[l.l:=!;c]q!;lcr!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!;ZWp!;lcr!:p-i +!<2uu!<3!#!<<'!r;Q`sr;Q`sr;Q`sqYpNqqYpNqqu6Wrrr2rur;Q`sqYpNqqu6Wrr;Q`sqYpNq +pAY*mqu6Wrqu6WrrVlitr;Q`srVlitr;Q`sq#:NurrE'!rrDoq!!)fo!!)ip!!)rs!!)ip!!*#u +!!*#u!s&B$!;uis!;c]q!;QQo!;6?l!;lcr!;HKn!;?Em!;uis!9jF_!;lcu!<<'!qu6Wrrr2ru +rr2rurr2rurr2ruqu6Wrrr2rur;Q`squ6WrqYpNqn,E@fq>UEpr;Q`srr2rumf*7eqYpNqr;Q`s +qu6]trrDus!!)]l!!)fo!!)rs!!*#u!!'e6rojI/3e.~> +!B:&Xj4sY7!;c]q!;lcr!;lcr!;lcr!<2uu!;?Em!;lcr!<)ot!;ZWp!;uis!;ZWp!;lcr!:p-i +!<2uu!<3!#!<<'!r;Q`sr;Q`sr;Q`sqYpNqqYpNqqu6Wrrr2rur;Q`sqYpNqqu6Wrr;Q`sqYpNq +pAY*mqu6Wrqu6WrrVlitr;Q`srVlitr;Q`sq#:NurrE'!rrDoq!!)fo!!)ip!!)rs!!)ip!!*#u +!!*#u!s&B$!;uis!;c]q!;QQo!;6?l!;lcr!;HKn!;?Em!;uis!9jF_!;lcu!<<'!qu6Wrrr2ru +rr2rurr2rurr2ruqu6Wrrr2rur;Q`squ6WrqYpNqn,E@fq>UEpr;Q`srr2rumf*7eqYpNqr;Q`s +qu6]trrDus!!)]l!!)fo!!)rs!!*#u!!'e6ro4$s2h1~> +!BpJ^mG.^A!;c]q!;lcr!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot!;uis!;ZWp!<)rt!;ZWp!;c]q +!<)rt!;ZWp!<2uu!<3!#!<<'!rVultr;Q`sr;Q`sqYpNqqZ$QqrVlitrVlitrVultqYpNqqu6Wr +rVultqYpNqrVlitqu6WrqYpNqrVlitr;Q`sr;Q`srVultrVlitp\t3nrr2ruq>UEpq#:UEprr2rurr3'#s8N)ts8N)qrr<&trr<&trr<&lrr<&qrr<&ts8N)trr<&ts8N)t +s8N)trr<&rs8N)gs8N)trr<&trr<&trr<&trr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&t +rr<&urr<&ts8N)mrr<&trr<&urr<&srr<&trr<&ts8N)lrr<&qrr<&srr<&qrr<&qrr<&ts8N)s +rr<&os8N)trr<&trr<&ts8N)qs8N)Fs8MBdeieN~> +!BU8[l.l:=!;c]q!;lcr!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot!;uis!;ZWp!<)rt!;ZWp!;c]q +!<)rt!;ZWp!<2uu!<3!#!<<'!rVultr;Q`sr;Q`sqYpNqqZ$QqrVlitrVlitrVultqYpNqqu6Wr +rVultqYpNqrVlitqu6WrqYpNqrVlitr;Q`sr;Q`srVultrVlitp\t3nrr2ruq>UEpq#:UEprr2rurr3'#s8N)ts8N)qrr<&trr<&trr<&lrr<&qrr<&ts8N)trr<&ts8N)t +s8N)trr<&rs8N)gs8N)trr<&trr<&trr<&trr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&t +rr<&urr<&ts8N)mrr<&trr<&urr<&srr<&trr<&ts8N)lrr<&qrr<&srr<&qrr<&qrr<&ts8N)s +rr<&os8N)trr<&trr<&ts8N)qs8N)Fs8M6`c8pI~> +!B:&Xj4sY7!;c]q!;lcr!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot!;uis!;ZWp!<)rt!;ZWp!;c]q +!<)rt!;ZWp!<2uu!<3!#!<<'!rVultr;Q`sr;Q`sqYpNqqZ$QqrVlitrVlitrVultqYpNqqu6Wr +rVultqYpNqrVlitqu6WrqYpNqrVlitr;Q`sr;Q`srVultrVlitp\t3nrr2ruq>UEpq#:UEprr2rurr3'#s8N)ts8N)qrr<&trr<&trr<&lrr<&qrr<&ts8N)trr<&ts8N)t +s8N)trr<&rs8N)gs8N)trr<&trr<&trr<&trr<&urr<&urr<&us8N)trr<&trr<&ts8N)rrr<&t +rr<&urr<&ts8N)mrr<&trr<&urr<&srr<&trr<&ts8N)lrr<&qrr<&srr<&qrr<&qrr<&ts8N)s +rr<&os8N)trr<&trr<&ts8N)qs8N)Fs8M$Z_`*)~> +!BpJ^mG7g@!<3#s!<<)q!;ulq!!3*"r;Z]qr;Zcs!<;utrVu]or;Z]q!<<#urr;fpr;Z]qq#CgBlr;cisrW)rtrW)iqrW)uurrE*!rrE*! +r;ZitrW)iqr;cisq>gHnq>gHnr;c]or;c`p!^Bnr;ZTn +r;Qcts8;rps8;rms8N)Fs8MBdeieN~> +!BU8[l.uCgBlr;cisrW)rtrW)iqrW)uurrE*!rrE*! +r;ZitrW)iqr;cisq>gHnq>gHnr;c]or;c`p!^Bnr;ZTn +r;Qcts8;rps8;rms8N)Fs8M6`c8pI~> +!B:&Xj5'b6!<3#s!<<)q!;ulq!!3*"r;Z]qr;Zcs!<;utrVu]or;Z]q!<<#urr;fpr;Z]qq#CgBlr;cisrW)rtrW)iqrW)uurrE*!rrE*! +r;ZitrW)iqr;cisq>gHnq>gHnr;c]or;c`p!^Bnr;ZTn +r;Qcts8;rps8;rms8N)Fs8M$Z_`*)~> +!BpJ^mD&Z$!/gdV!.k0$s4dPR!.k1*s8N)Es8MBdeieN~> +!BU8[l+d5u!/gdV!.k0$s4dPR!.k1*s8N)Es8M6`c8pI~> +!B:&Xj1kTo!/gdV!.k0$s4dPR!.k1*s8N)Es8M$Z_`*)~> +!BpJ^mD&Z$!/gdV!.k0$s4dPR!.k1*s8N)Es8MBdeieN~> +!BU8[l+d5u!/gdV!.k0$s4dPR!.k1*s8N)Es8M6`c8pI~> +!B:&Xj1kTo!/gdV!.k0$s4dPR!.k1*s8N)Es8M$Z_`*)~> +!BpJ^mD/`%!/^^U!.k0$s4dPR!.k1+s8N)Ds8MBdeieN~> +!BU8[l+m +!B:&Xj1tZp!/^^U!.k0$s4dPR!.k1+s8N)Ds8M$Z_`*)~> +!BpJ^mD],'!/^aS!.k0$s5*eS!.k0Ls8MBdeieN~> +!BU8[l,E]#!/^aS!.k0$s5*eS!.k0Ls8M6`c8pI~> +!B:&Xj2M&r!/^aS!.k0$s5*eS!.k0Ls8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mFM=;!.k1=s8N)$s8;qKs6Tdc!:Kme!6>->!7CiF!;c`o!/:IPm/bd$J,~> +!BU8[l.5n7!.k1=s8N)$s8;qKs6Tdc!:Kme!6>->!7CiF!;c`o!/:IPklK'jJ,~> +!B:&Xj4=81!.k1=s8N)$s8;qKs6Tdc!:Kme!6>->!7CiF!;c`o!/:IPirR%VJ,~> +!BpJ^mFD4:!:^!g!7h)L!8%5N!8.;O!;?Em!4r11!6tND!:0Xb!8IPL!;c]q!9sL`!;?Em!;ZWp +!65$=!7(TE!;HKn!/:IPm/bd$J,~> +!BU8[l.,e6!:^!g!7h)L!8%5N!8.;O!;?Em!4r11!6tND!:0Xb!8IPL!;c]q!9sL`!;?Em!;ZWp +!65$=!7(TE!;HKn!/:IPklK'jJ,~> +!B:&Xj44/0!:^!g!7h)L!8%5N!8.;O!;?Em!4r11!6tND!:0Xb!8IPL!;c]q!9sL`!;?Em!;ZWp +!65$=!7(TE!;HKn!/:IPirR%VJ,~> +!BpJ^mFD4:!:^!g!7h)L!8%5N!8.;O!;?Em!5&72!6kHC!:0Xb!8@GQ!;uis!;c]q!9sL`!;?Em +!;ZWp!65$=!7(TE!;HKn!/:IPm/bd$J,~> +!BU8[l.,e6!:^!g!7h)L!8%5N!8.;O!;?Em!5&72!6kHC!:0Xb!8@GQ!;uis!;c]q!9sL`!;?Em +!;ZWp!65$=!7(TE!;HKn!/:IPklK'jJ,~> +!B:&Xj44/0!:^!g!7h)L!8%5N!8.;O!;?Em!5&72!6kHC!:0Xb!8@GQ!;uis!;c]q!9sL`!;?Em +!;ZWp!65$=!7(TE!;HKn!/:IPirR%VJ,~> +!BpJ^mFD4:!:^!g!36&!!8.;O!;?Em!5&72!6kHC!5ng:!;uis!9*qX!;?Em!;ZWp!65$=!7(TE +!;HKn!/:IPm/bd$J,~> +!BU8[l.,e6!:^!g!36&!!8.;O!;?Em!5&72!6kHC!5ng:!;uis!9*qX!;?Em!;ZWp!65$=!7(TE +!;HKn!/:IPklK'jJ,~> +!B:&Xj44/0!:^!g!36&!!8.;O!;?Em!5&72!6kHC!5ng:!;uis!9*qX!;?Em!;ZWp!65$=!7(TE +!;HKn!/:IPirR%VJ,~> +!BpJ^mFqU=!!3*"r;Z]qqu?Kmr;Z]qr;Z`r!<<#urr;uu#6+Z's8N'!r;Z`rqu?Zr!<;utqu?Tp +r;Zcs!<;utr;ZTnp](0lr;Zcs!<;utqu?Tp!WN/ps7u`ps8Duus8E#qs8;ros8;ourrDusr;cNj +r;c`pq>g9ir;cWmrr<9'!!*'!!!)rsr;c`pq>gNprVururW)iqrW)iqrW)uurW)0^!!)rs!!)rs +rW)iqrr<'!r;c`pr;Zlu!;QTj!<)ou!<;utqu?Tpp](3m!<<#uqu?Tpr;Zcs!<;utr;Qfus8W#t +mf3:e!<;utrVultrVultqYpNqp\t3nq>^Bn!WN0!s8N'!s8;rps8;ros8;ourrDusr;aP2rp9a; +4b*~> +!BU8[l.Z19!!3*"r;Z]qqu?Kmr;Z]qr;Z`r!<<#urr;uu#6+Z's8N'!r;Z`rqu?Zr!<;utqu?Tp +r;Zcs!<;utr;ZTnp](0lr;Zcs!<;utqu?Tp!WN/ps7u`ps8Duus8E#qs8;ros8;ourrDusr;cNj +r;c`pq>g9ir;cWmrr<9'!!*'!!!)rsr;c`pq>gNprVururW)iqrW)iqrW)uurW)0^!!)rs!!)rs +rW)iqrr<'!r;c`pr;Zlu!;QTj!<)ou!<;utqu?Tpp](3m!<<#uqu?Tpr;Zcs!<;utr;Qfus8W#t +mf3:e!<;utrVultrVultqYpNqp\t3nq>^Bn!WN0!s8N'!s8;rps8;ros8;ourrDusr;aP2rojI/ +3e.~> +!B:&Xj4aP3!!3*"r;Z]qqu?Kmr;Z]qr;Z`r!<<#urr;uu#6+Z's8N'!r;Z`rqu?Zr!<;utqu?Tp +r;Zcs!<;utr;ZTnp](0lr;Zcs!<;utqu?Tp!WN/ps7u`ps8Duus8E#qs8;ros8;ourrDusr;cNj +r;c`pq>g9ir;cWmrr<9'!!*'!!!)rsr;c`pq>gNprVururW)iqrW)iqrW)uurW)0^!!)rs!!)rs +rW)iqrr<'!r;c`pr;Zlu!;QTj!<)ou!<;utqu?Tpp](3m!<<#uqu?Tpr;Zcs!<;utr;Qfus8W#t +mf3:e!<;utrVultrVultqYpNqp\t3nq>^Bn!WN0!s8N'!s8;rps8;ros8;ourrDusr;aP2ro4$s +2h1~> +!BpJ^mG%X@!<)rt!<)ot!<)ot!;c]q!;ZWp!<)ot!;lfr!<2uu!<3#u!<<*!!<<'!!;lcr!;c`q +!<)ot!<)ot!<)ot!;uls!<)ot!;lcr!;-9k!<)ot!;uls!<)ot!<)ot!<)rt!;?Em!;QTo!<2uu +!<)ot!<)ot!;uis!<)rt!<)ot!<)ot!;HKn!<)ot!;c]q!;-9k!<)ot!;QTo!<<*!!<<'!!<2uu +!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)ot!9a@a!<<'!p\t3nqZ$QqrVlitrVlitrVultpAY*m +q>^HprVlitrVlitrVlitpAb-mrr2rurVlitrVlitr;ZcsrVlitrVlitrr2ruli6tbrVlitrVlit +r;Q`sqYpNqp\t3nqYpNqrVultrVultrVlitrVlitrVlitr;Q`srVultrVlitrVlit^An3"!S0Da~> +!BU8[l.c4^HprVlitrVlitrVlitpAb-mrr2rurVlitrVlitr;ZcsrVlitrVlitrr2ruli6tbrVlitrVlit +r;Q`sqYpNqp\t3nqYpNqrVultrVultrVlitrVlitrVlitr;Q`srVultrVlitrVlit^An2s!R<`V~> +!B:&Xj4jS6!<)rt!<)ot!<)ot!;c]q!;ZWp!<)ot!;lfr!<2uu!<3#u!<<*!!<<'!!;lcr!;c`q +!<)ot!<)ot!<)ot!;uls!<)ot!;lcr!;-9k!<)ot!;uls!<)ot!<)ot!<)rt!;?Em!;QTo!<2uu +!<)ot!<)ot!;uis!<)rt!<)ot!<)ot!;HKn!<)ot!;c]q!;-9k!<)ot!;QTo!<<*!!<<'!!<2uu +!<)ot!;c]q!;QTo!<2uu!;c]q!;c]q!<)ot!9a@a!<<'!p\t3nqZ$QqrVlitrVlitrVultpAY*m +q>^HprVlitrVlitrVlitpAb-mrr2rurVlitrVlitr;ZcsrVlitrVlitrr2ruli6tbrVlitrVlit +r;Q`sqYpNqp\t3nqYpNqrVultrVultrVlitrVlitrVlitr;Q`srVultrVlitrVlit^An2m!Q-jH~> +!BpJ^mG.^A!;lcr!<2uu!;lcr!;lcr!;c]q!;lcr!;uis!;ZWp!<2uu!<2uu!;lcr!;c]q!;uis +!;QQo!;uis!;uis!;lcr!:Tpf!;uis!;uis!<2uu!;lcr!;?Em!;QQo!;$3j!<)ot!;lcr!<2uu +!;lcr!;ZWp!;lcr!;lcr!:Tpf!;QQo!<2uu!<2uu!;ZWp!;c]q!;QQo!;6?l!;ZWs!<<'!k5YA[ +p\t3nqYpNqr;Q`srr2ruqu6WrpAY*mq>UEpr;Q`srr2ruqu6Wrp\t3noD\djr;Q`sr;Q`srVls" +s8N)arr<&srr<&trr<&srr<&qrr<&nrr<&qrr<&srr<&trr<&rrr<&prr<&trr<&rrr<&urr<&r +rr<&6s8MBdeieN~> +!BU8[l.l:=!;lcr!<2uu!;lcr!;lcr!;c]q!;lcr!;uis!;ZWp!<2uu!<2uu!;lcr!;c]q!;uis +!;QQo!;uis!;uis!;lcr!:Tpf!;uis!;uis!<2uu!;lcr!;?Em!;QQo!;$3j!<)ot!;lcr!<2uu +!;lcr!;ZWp!;lcr!;lcr!:Tpf!;QQo!<2uu!<2uu!;ZWp!;c]q!;QQo!;6?l!;ZWs!<<'!k5YA[ +p\t3nqYpNqr;Q`srr2ruqu6WrpAY*mq>UEpr;Q`srr2ruqu6Wrp\t3noD\djr;Q`sr;Q`srVls" +s8N)arr<&srr<&trr<&srr<&qrr<&nrr<&qrr<&srr<&trr<&rrr<&prr<&trr<&rrr<&urr<&r +rr<&6s8M6`c8pI~> +!B:&Xj4sY7!;lcr!<2uu!;lcr!;lcr!;c]q!;lcr!;uis!;ZWp!<2uu!<2uu!;lcr!;c]q!;uis +!;QQo!;uis!;uis!;lcr!:Tpf!;uis!;uis!<2uu!;lcr!;?Em!;QQo!;$3j!<)ot!;lcr!<2uu +!;lcr!;ZWp!;lcr!;lcr!:Tpf!;QQo!<2uu!<2uu!;ZWp!;c]q!;QQo!;6?l!;ZWs!<<'!k5YA[ +p\t3nqYpNqr;Q`srr2ruqu6WrpAY*mq>UEpr;Q`srr2ruqu6Wrp\t3noD\djr;Q`sr;Q`srVls" +s8N)arr<&srr<&trr<&srr<&qrr<&nrr<&qrr<&srr<&trr<&rrr<&prr<&trr<&rrr<&urr<&r +rr<&6s8M$Z_`*)~> +!BpJ^mG.^A!;lcr!<3#o!;lcr!;c`k!;uis!;ZWp!<2uu!<2uu!;lcr!;c]q!;uis!<)rp!;uis +!;uis!;lcr!;-UEpr;Q`srr;cop\t3nq#C3kr;Q`sr;Q`srVuisl2L_`r;Q`srVlitr;Q`sqYpNq +p\t3nq>^EoqYpNqqu6Wrrr;iqrVlitp]($h^]4<#!S0Da~> +!BU8[l.l:=!;lcr!<3#o!;lcr!;c`k!;uis!;ZWp!<2uu!<2uu!;lcr!;c]q!;uis!<)rp!;uis +!;uis!;lcr!;-UEpr;Q`srr;cop\t3nq#C3kr;Q`sr;Q`srVuisl2L_`r;Q`srVlitr;Q`sqYpNq +p\t3nq>^EoqYpNqqu6Wrrr;iqrVlitp]($h^]4;t!R<`V~> +!B:&Xj4sY7!;lcr!<3#o!;lcr!;c`k!;uis!;ZWp!<2uu!<2uu!;lcr!;c]q!;uis!<)rp!;uis +!;uis!;lcr!;-UEpr;Q`srr;cop\t3nq#C3kr;Q`sr;Q`srVuisl2L_`r;Q`srVlitr;Q`sqYpNq +p\t3nq>^EoqYpNqqu6Wrrr;iqrVlitp]($h^]4;n!Q-jH~> +!BpJ^mG.^A!;lcr!<2uu!;-9k!;c]q!;6?l!;ZWp!<2uu!<2uu!;lcr!;c]q!;uis!<2uu!;uis +!;uis!;uis!;lcr!;6?l!;uis!;uis!;uis!<2uu!;lcr!;?Em!;QQo!;ZWp!;uis!<)ot!;HKn +!:p-i!;lcr!;lcr!;6?l!;uis!;QQo!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lq#C?ojo5;\ +o`"mkqYpNqr;Q`srr2ruqu6WrpAY*mq>UEpr;Q`srr2runG`Igq>UEpr;Q`sr;Q`sr;Q`srVls" +s8N)arr<&srr<&trr<&srr<&qrr<&nrr<&ms8N)srr<&rrrW9$rrDus!!)ut!!)cn!!'P/rp9a; +4b*~> +!BU8[l.l:=!;lcr!<2uu!;-9k!;c]q!;6?l!;ZWp!<2uu!<2uu!;lcr!;c]q!;uis!<2uu!;uis +!;uis!;uis!;lcr!;6?l!;uis!;uis!;uis!<2uu!;lcr!;?Em!;QQo!;ZWp!;uis!<)ot!;HKn +!:p-i!;lcr!;lcr!;6?l!;uis!;QQo!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lq#C?ojo5;\ +o`"mkqYpNqr;Q`srr2ruqu6WrpAY*mq>UEpr;Q`srr2runG`Igq>UEpr;Q`sr;Q`sr;Q`srVls" +s8N)arr<&srr<&trr<&srr<&qrr<&nrr<&ms8N)srr<&rrrW9$rrDus!!)ut!!)cn!!'P/rojI/ +3e.~> +!B:&Xj4sY7!;lcr!<2uu!;-9k!;c]q!;6?l!;ZWp!<2uu!<2uu!;lcr!;c]q!;uis!<2uu!;uis +!;uis!;uis!;lcr!;6?l!;uis!;uis!;uis!<2uu!;lcr!;?Em!;QQo!;ZWp!;uis!<)ot!;HKn +!:p-i!;lcr!;lcr!;6?l!;uis!;QQo!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lq#C?ojo5;\ +o`"mkqYpNqr;Q`srr2ruqu6WrpAY*mq>UEpr;Q`srr2runG`Igq>UEpr;Q`sr;Q`sr;Q`srVls" +s8N)arr<&srr<&trr<&srr<&qrr<&nrr<&ms8N)srr<&rrrW9$rrDus!!)ut!!)cn!!'P/ro4$s +2h1~> +!BpJ^mG.^A!;lcr!<2uu!;-9k!;c]q!;6?l!;ZWp!<2uu!<2uu!;lcr!;c]q!;uis!<2uu!;uis +!;uis!;uis!;lcr!;6?l!;uis!;uis!;uis!<2uu!;lcr!;?Em!;QQo!;ZWp!;uis!<)ot!;HKn +!:p-i!;lcr!;lcr!;6?l!;uis!;QQo!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lq>UNss8N)] +rr<&krr<&qrr<&srr<&urr<&rrr<&mrr<&prr<&srr<&urr<&grr<&prr<&srr<&srr<&srr<&t +rr<&urr<&brr<&srr<&trr<&srr<&qrr<&nrr<&qrr<&srr<&trr<&rrrW9$rrDus!!)ut!!)cn +!!'P/rp9a;4b*~> +!BU8[l.l:=!;lcr!<2uu!;-9k!;c]q!;6?l!;ZWp!<2uu!<2uu!;lcr!;c]q!;uis!<2uu!;uis +!;uis!;uis!;lcr!;6?l!;uis!;uis!;uis!<2uu!;lcr!;?Em!;QQo!;ZWp!;uis!<)ot!;HKn +!:p-i!;lcr!;lcr!;6?l!;uis!;QQo!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lq>UNss8N)] +rr<&krr<&qrr<&srr<&urr<&rrr<&mrr<&prr<&srr<&urr<&grr<&prr<&srr<&srr<&srr<&t +rr<&urr<&brr<&srr<&trr<&srr<&qrr<&nrr<&qrr<&srr<&trr<&rrrW9$rrDus!!)ut!!)cn +!!'P/rojI/3e.~> +!B:&Xj4sY7!;lcr!<2uu!;-9k!;c]q!;6?l!;ZWp!<2uu!<2uu!;lcr!;c]q!;uis!<2uu!;uis +!;uis!;uis!;lcr!;6?l!;uis!;uis!;uis!<2uu!;lcr!;?Em!;QQo!;ZWp!;uis!<)ot!;HKn +!:p-i!;lcr!;lcr!;6?l!;uis!;QQo!<2uu!<3!#!<<'!r;Q`sqYpNqq#:!lq>UNss8N)] +rr<&krr<&qrr<&srr<&urr<&rrr<&mrr<&prr<&srr<&urr<&grr<&prr<&srr<&srr<&srr<&t +rr<&urr<&brr<&srr<&trr<&srr<&qrr<&nrr<&qrr<&srr<&trr<&rrrW9$rrDus!!)ut!!)cn +!!'P/ro4$s2h1~> +!BpJ^mG%X@!<)rt!<)ot!<)rt!;lcr!<)ot!<2uu!<)rt!;uis!;ZWp!<2uu!<2uu!;lcr!;c]q +!;uis!<2uu!<)rt!;uis!;uis!;lcr!<)ot!;c]q!<)rt!;uis!;uis!<)ot!<)rt!;?Em!<)ot +!<)ot!;ZWp!<)rt!;uis!<)rt!<)ot!<)rt!;QQo!<)ot!;c]q!;6?l!<)rt!;QQo!<2uu!<3!# +!<<'!rVultqYpNqrVlitrVlitp&>!lqYpNqrVlitqZ$QqnG`Igo`"mkqYpNqr;Q`srVlitrVult +pAY*mrVlitrr2rur;Q`srVlitrVultp\t3nq>UEprVultr;Q`sr;Q`srVlitrVlitq>^HppAY*m +r;Q`srVlitrVultqYpNqp\t3nqZ$QqrVlitrVultrVlitrr2rurVultr;Q`srVultrVlitrVult +^]4<#!S0Da~> +!BU8[l.c4!lqYpNqrVlitqZ$QqnG`Igo`"mkqYpNqr;Q`srVlitrVult +pAY*mrVlitrr2rur;Q`srVlitrVultp\t3nq>UEprVultr;Q`sr;Q`srVlitrVlitq>^HppAY*m +r;Q`srVlitrVultqYpNqp\t3nqZ$QqrVlitrVultrVlitrr2rurVultr;Q`srVultrVlitrVult +^]4;t!R<`V~> +!B:&Xj4jS6!<)rt!<)ot!<)rt!;lcr!<)ot!<2uu!<)rt!;uis!;ZWp!<2uu!<2uu!;lcr!;c]q +!;uis!<2uu!<)rt!;uis!;uis!;lcr!<)ot!;c]q!<)rt!;uis!;uis!<)ot!<)rt!;?Em!<)ot +!<)ot!;ZWp!<)rt!;uis!<)rt!<)ot!<)rt!;QQo!<)ot!;c]q!;6?l!<)rt!;QQo!<2uu!<3!# +!<<'!rVultqYpNqrVlitrVlitp&>!lqYpNqrVlitqZ$QqnG`Igo`"mkqYpNqr;Q`srVlitrVult +pAY*mrVlitrr2rur;Q`srVlitrVultp\t3nq>UEprVultr;Q`sr;Q`srVlitrVlitq>^HppAY*m +r;Q`srVlitrVultqYpNqp\t3nqZ$QqrVlitrVultrVlitrr2rurVultr;Q`srVultrVlitrVult +^]4;n!Q-jH~> +!BpJ^mFqU=!!<0#!<)rr!;QTm!;ulq!;uln!<3#t!<<*!!<<*!!<<)q!<3#t!<3#t!<3#s!!*&u +!<<)u!<3#t!;lfp!;QTm!!*&u!<<)u!<3#t!<)rr!!<0#!;?Hk!<3#p!;ulq!!*&u!<)rr!;c`o +!;6Bj!;lfm!;QTm!!*&u!;lfq!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p!;uln!<3#t!<<)u!;lfr +!:g*f!;ZZk!<3#t!<3#t!<)rr!!<0#!;?Hk!<3#t!<3#t!<)rr!;HNi!;ulq!!*&u!<<)u!<3#t +!<<*!!<3#s!;lfr!;HNm!<3#t!<)rr!!<0#!<3#p!<)ro!<)ou!<;utr;Qcts8;rqs8;ots8E#s +s8;ros8;r2s8MBdeieN~> +!BU8[l.Z19!!<0#!<)rr!;QTm!;ulq!;uln!<3#t!<<*!!<<*!!<<)q!<3#t!<3#t!<3#s!!*&u +!<<)u!<3#t!;lfp!;QTm!!*&u!<<)u!<3#t!<)rr!!<0#!;?Hk!<3#p!;ulq!!*&u!<)rr!;c`o +!;6Bj!;lfm!;QTm!!*&u!;lfq!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p!;uln!<3#t!<<)u!;lfr +!:g*f!;ZZk!<3#t!<3#t!<)rr!!<0#!;?Hk!<3#t!<3#t!<)rr!;HNi!;ulq!!*&u!<<)u!<3#t +!<<*!!<3#s!;lfr!;HNm!<3#t!<)rr!!<0#!<3#p!<)ro!<)ou!<;utr;Qcts8;rqs8;ots8E#s +s8;ros8;r2s8M6`c8pI~> +!B:&Xj4aP3!!<0#!<)rr!;QTm!;ulq!;uln!<3#t!<<*!!<<*!!<<)q!<3#t!<3#t!<3#s!!*&u +!<<)u!<3#t!;lfp!;QTm!!*&u!<<)u!<3#t!<)rr!!<0#!;?Hk!<3#p!;ulq!!*&u!<)rr!;c`o +!;6Bj!;lfm!;QTm!!*&u!;lfq!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p!;uln!<3#t!<<)u!;lfr +!:g*f!;ZZk!<3#t!<3#t!<)rr!!<0#!;?Hk!<3#t!<3#t!<)rr!;HNi!;ulq!!*&u!<<)u!<3#t +!<<*!!<3#s!;lfr!;HNm!<3#t!<)rr!!<0#!<3#p!<)ro!<)ou!<;utr;Qcts8;rqs8;ots8E#s +s8;ros8;r2s8M$Z_`*)~> +!BpJ^m=G:gs+13$s7H?k!5AI5!1 +!BU8[l%/kcs+13$s7H?k!5AI5!1 +!B:&Xj+75]s+13$s7H?k!5AI5!1 +!BpJ^m=G:gs+13$s7H?k!5AI5!1 +!BU8[l%/kcs+13$s7H?k!5AI5!1 +!B:&Xj+75]s+13$s7H?k!5AI5!1 +!BpJ^m=G:gs+13$s7QEl!58C4!1 +!BU8[l%/kcs+13$s7QEl!58C4!1 +!B:&Xj+75]s+13$s7QEl!58C4!1 +!BpJ^m=G:gs+13$s02P%!1Nrem/bd$J,~> +!BU8[l%/kcs+13$s02P%!1NreklK'jJ,~> +!B:&Xj+75]s+13$s02P%!1NreirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mD/c%!58F4!:9aa!8IPP!6P9>!.k0$s+13ps8MBdeieN~> +!BU8[l+m?!!58F4!:9aa!8IPP!6P9>!.k0$s+13ps8M6`c8pI~> +!B:&Xj1t]p!58F4!:9aa!8IPP!6P9>!.k0$s+13ps8M$Z_`*)~> +!BpJ^mD&Z$!5/=3!9sL`!8RSS!65$=!6tND!:0Xb!.k0$s- +!BU8[l+d5u!5/=3!9sL`!8RSS!65$=!6tND!:0Xb!.k0$s- +!B:&Xj1kTo!5/=3!9sL`!8RSS!65$=!6tND!:0Xb!.k0$s- +!BpJ^mD&Z$!5/=3!9sL`!8[YT!65$=!6kHC!:0Xb!.k0$s- +!BU8[l+d5u!5/=3!9sL`!8[YT!65$=!6kHC!:0Xb!.k0$s- +!B:&Xj1kTo!5/=3!9sL`!8[YT!65$=!6kHC!:0Xb!.k0$s- +!BpJ^mD&Z$!5/=3!9sL`!8[YT!65$=!6kHC!.k0$s+14Ls8MBdeieN~> +!BU8[l+d5u!5/=3!9sL`!8[YT!65$=!6kHC!.k0$s+14Ls8M6`c8pI~> +!B:&Xj1kTo!5/=3!9sL`!8[YT!65$=!6kHC!.k0$s+14Ls8M$Z_`*)~> +!BpJ^mFqU=!;uls!!*&t!;lfp!!3*"q>^Eo!<<#uqu?Tpr;Z`rrr;rtq#C9mqZ$Ko!WN/urrE-" +r;c`pr;cWm!!)ipr;ccqrr<'!r;cTlq>gHnr;ccqrVururW)rtrr<9'!!*'!!!)cnr;c`pq>g9i +r;cWmrr<9'!!*'!!!)rsr;c`pq>gNprVururW)iqrW)iqrW)uurW%NLJcDMFrp9a;4b*~> +!BU8[l.Z19!;uls!!*&t!;lfp!!3*"q>^Eo!<<#uqu?Tpr;Z`rrr;rtq#C9mqZ$Ko!WN/urrE-" +r;c`pr;cWm!!)ipr;ccqrr<'!r;cTlq>gHnr;ccqrVururW)rtrr<9'!!*'!!!)cnr;c`pq>g9i +r;cWmrr<9'!!*'!!!)rsr;c`pq>gNprVururW)iqrW)iqrW)uurW%NLJcDMFrojI/3e.~> +!B:&Xj4aP3!;uls!!*&t!;lfp!!3*"q>^Eo!<<#uqu?Tpr;Z`rrr;rtq#C9mqZ$Ko!WN/urrE-" +r;c`pr;cWm!!)ipr;ccqrr<'!r;cTlq>gHnr;ccqrVururW)rtrr<9'!!*'!!!)cnr;c`pq>g9i +r;cWmrr<9'!!*'!!!)rsr;c`pq>gNprVururW)iqrW)iqrW)uurW%NLJcDMFro4$s2h1~> +!BpJ^mG%X@!<)ot!;uls!<)ot!<)ot!<)rt!;HNn!<2uu!<)ot!<)ot!;uis!;uis!;QQo!<)ot +!;uis!<)rt!<)rt!<)ot!<)ot!<)ot!;ZWp!;c]q!<)ot!;uls!<)ot!;?Em!;ZWp!<)ot!;lfr +!<2uu!<3#u!<<*!!<<'!!;ZWp!<)ot!;c]q!;-9k!<)ot!;QTo!<<*!!<<'!!<2uu!<)ot!;c]q +!;QTo!<2uu!;c]q!;c]q!<)ot!.k0$s.]Pmm/bd$J,~> +!BU8[l.c4 +!B:&Xj4jS6!<)ot!;uls!<)ot!<)ot!<)rt!;HNn!<2uu!<)ot!<)ot!;uis!;uis!;QQo!<)ot +!;uis!<)rt!<)rt!<)ot!<)ot!<)ot!;ZWp!;c]q!<)ot!;uls!<)ot!;?Em!;ZWp!<)ot!;lfr +!<2uu!<3#u!<<*!!<<'!!;ZWp!<)ot!;c]q!;-9k!<)ot!;QTo!<<*!!<<'!!<2uu!<)ot!;c]q +!;QTo!<2uu!;c]q!;c]q!<)ot!.k0$s.]PmirR%VJ,~> +!BpJ^mFM:;!;uis!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<)p%!<<'!s8N)prr<&rrr<&urr<&r +rr<&trr<&srr<&urr<&rrr<&qrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&srr<&prr<&u +rr<&urr<&qrr<&rrr<&rrr<&frr<&orr<&urr<&urr<&prr<&qrr<&orr<&lrr<&prrW9$rr@WM +JcDGDrp9a;4b*~> +!BU8[l.5k7!;uis!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<)p%!<<'!s8N)prr<&rrr<&urr<&r +rr<&trr<&srr<&urr<&rrr<&qrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&srr<&prr<&u +rr<&urr<&qrr<&rrr<&rrr<&frr<&orr<&urr<&urr<&prr<&qrr<&orr<&lrr<&prrW9$rr@WM +JcDGDrojI/3e.~> +!B:&Xj4=51!;uis!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<)p%!<<'!s8N)prr<&rrr<&urr<&r +rr<&trr<&srr<&urr<&rrr<&qrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&srr<&prr<&u +rr<&urr<&qrr<&rrr<&rrr<&frr<&orr<&urr<&urr<&prr<&qrr<&orr<&lrr<&prrW9$rr@WM +JcDGDro4$s2h1~> +!BpJ^mG%[ +!BU8[l.c78!;uis!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<)p%!<<'!s8N)ps7lZorr<&mrr<&s +rr<&us7lZkrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&srr<&prr<&urr<&urr<&qrr<&r +rr<&rrr<&ks8)fkrr<&urr<&urr<&us8)fmrr<&orr<&lrr<&os8N(Ms+13Cs8M6`c8pI~> +!B:&Xj4jV2!;uis!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<)p%!<<'!s8N)ps7lZorr<&mrr<&s +rr<&us7lZkrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&srr<&prr<&urr<&urr<&qrr<&r +rr<&rrr<&ks8)fkrr<&urr<&urr<&us8)fmrr<&orr<&lrr<&os8N(Ms+13Cs8M$Z_`*)~> +!BpJ^mG.^A!;uis!;uis!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<)p%!<3'!!<3&prr<&nrr<&m +rr<&srr<&urr<&jrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&srr<&prr<&urr<&urr<&q +rr<&rrr<&rrr<&lrr<&srr<&orr<&urr<&urrW9$rrDus!!)lq!!)fo!!)]l!!)forr@WMJcDDC +rp9a;4b*~> +!BU8[l.l:=!;uis!;uis!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<)p%!<3'!!<3&prr<&nrr<&m +rr<&srr<&urr<&jrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&srr<&prr<&urr<&urr<&q +rr<&rrr<&rrr<&lrr<&srr<&orr<&urr<&urrW9$rrDus!!)lq!!)fo!!)]l!!)forr@WMJcDDC +rojI/3e.~> +!B:&Xj4sY7!;uis!;uis!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<)p%!<3'!!<3&prr<&nrr<&m +rr<&srr<&urr<&jrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&srr<&prr<&urr<&urr<&q +rr<&rrr<&rrr<&lrr<&srr<&orr<&urr<&urrW9$rrDus!!)lq!!)fo!!)]l!!)forr@WMJcDDC +ro4$s2h1~> +!BpJ^mG.^A!;uis!;uis!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<)p%!<3'!!<3&prr<&nrr<&m +rr<&srr<&urr<&jrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&srr<&prr<&urr<&urr<&q +rr<&rrr<&rrr<&lrr<&srr<&orr<&urr<&urrW9$rrDus!!)lq!!)fo!!)]l!!)ip!s&B$!.k0$ +s.TJlm/bd$J,~> +!BU8[l.l:=!;uis!;uis!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<)p%!<3'!!<3&prr<&nrr<&m +rr<&srr<&urr<&jrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&srr<&prr<&urr<&urr<&q +rr<&rrr<&rrr<&lrr<&srr<&orr<&urr<&urrW9$rrDus!!)lq!!)fo!!)]l!!)ip!s&B$!.k0$ +s.TJlklK'jJ,~> +!B:&Xj4sY7!;uis!;uis!;uis!<2uu!;lcr!;HKn!;ZWp!;lcr!<)p%!<3'!!<3&prr<&nrr<&m +rr<&srr<&urr<&jrr<&rrr<&rrr<&trr<&srr<&mrr<&qrr<&rrr<&srr<&prr<&urr<&urr<&q +rr<&rrr<&rrr<&lrr<&srr<&orr<&urr<&urrW9$rrDus!!)lq!!)fo!!)]l!!)ip!s&B$!.k0$ +s.TJlirR%VJ,~> +!BpJ^mG.^A!<)rt!;uis!;uis!<)ot!<)rt!;HKn!;QQo!<)ot!;lcr!<2uu!;HKn!<)rt!<)ot +!<)rt!<)ot!;uis!<)ot!<)rt!;c]q!;c]q!<)ot!;uis!;uis!;?Em!;ZWp!<)ot!;lcr!;ZWp +!<2uu!<2uu!;ZWp!<)ot!;c]q!;6?l!<)rt!;QQo!<2uu!<3!#!<<'!rVultqYpNqrVlitrVlit +p&>!lqYpNqrVlitqZ$QqJcC<$X8i1d!S0Da~> +!BU8[l.l:=!<)rt!;uis!;uis!<)ot!<)rt!;HKn!;QQo!<)ot!;lcr!<2uu!;HKn!<)rt!<)ot +!<)rt!<)ot!;uis!<)ot!<)rt!;c]q!;c]q!<)ot!;uis!;uis!;?Em!;ZWp!<)ot!;lcr!;ZWp +!<2uu!<2uu!;ZWp!<)ot!;c]q!;6?l!<)rt!;QQo!<2uu!<3!#!<<'!rVultqYpNqrVlitrVlit +p&>!lqYpNqrVlitqZ$QqJcC<$X8i1`!R<`V~> +!B:&Xj4sY7!<)rt!;uis!;uis!<)ot!<)rt!;HKn!;QQo!<)ot!;lcr!<2uu!;HKn!<)rt!<)ot +!<)rt!<)ot!;uis!<)ot!<)rt!;c]q!;c]q!<)ot!;uis!;uis!;?Em!;ZWp!<)ot!;lcr!;ZWp +!<2uu!<2uu!;ZWp!<)ot!;c]q!;6?l!<)rt!;QQo!<2uu!<3!#!<<'!rVultqYpNqrVlitrVlit +p&>!lqYpNqrVlitqZ$QqJcC<$X8i1Z!Q-jH~> +!BpJ^mG%[>!!*&u!<<)u!<3#t!<)rr!!<0#!;c`l!;lfp!;c]q!<2uu!;?Hk!;c`o!;ulr!<3#t +!<)rr!;lfm!;ulq!;ulr!<3#t!;ZZk!;ulq!;uln!<3#t!<<*!!<<*!!;ZZn!;lfm!;QTm!!*&u +!;lfq!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p!;uln!<3#t!<<)u!;lfr!.k0$s/Z2!m/bd$J,~> +!BU8[l.c7:!!*&u!<<)u!<3#t!<)rr!!<0#!;c`l!;lfp!;c]q!<2uu!;?Hk!;c`o!;ulr!<3#t +!<)rr!;lfm!;ulq!;ulr!<3#t!;ZZk!;ulq!;uln!<3#t!<<*!!<<*!!;ZZn!;lfm!;QTm!!*&u +!;lfq!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p!;uln!<3#t!<<)u!;lfr!.k0$s/Z2!klK'jJ,~> +!B:&Xj4jV4!!*&u!<<)u!<3#t!<)rr!!<0#!;c`l!;lfp!;c]q!<2uu!;?Hk!;c`o!;ulr!<3#t +!<)rr!;lfm!;ulq!;ulr!<3#t!;ZZk!;ulq!;uln!<3#t!<<*!!<<*!!;ZZn!;lfm!;QTm!!*&u +!;lfq!<<*!!<<*!!<<)t!!*&u!;lfp!<3#p!;uln!<3#t!<<)u!;lfr!.k0$s/Z2!irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mEYb3!6"p8!4r40!:0[b!4`(/!.k0$s+147s8MBdeieN~> +!BU8[l-B>/!6"p8!4r40!:0[b!4`(/!.k0$s+147s8M6`c8pI~> +!B:&Xj3I])!6"p8!4r40!:0[b!4`(/!.k0$s+147s8M$Z_`*)~> +!BpJ^mG7g:!;uls!6"p8!4r40!;c`i!;uls!4`(/!.k0$s+147s8MBdeieN~> +!BU8[l.uC6!;uls!6"p8!4r40!;c`i!;uls!4`(/!.k0$s+147s8M6`c8pI~> +!B:&Xj5'b0!;uls!6"p8!4r40!;c`i!;uls!4`(/!.k0$s+147s8M$Z_`*)~> +!BpJ^mHsrH!<)rl!4r41!4i.0!;c`i!3uS(!.k0$s+147s8MBdeieN~> +!BU8[l0\ND!<)rl!4r41!4i.0!;c`i!3uS(!.k0$s+147s8M6`c8pI~> +!B:&Xj6cm>!<)rl!4r41!4i.0!;c`i!3uS(!.k0$s+147s8M$Z_`*)~> +!BpJ^mHsrH!;lfr!<)rt!<<)s!;c`o!!*&u!<)rr!<)rs!!*&t!<3#s!<<)t!<3#q!;c`q!;ulr +!<<)t!;ulq!;lfm!;QTk!<3#t!!*&t!;ulq!!<0#!;QTo!<)rt!<<)s!;c`o!!*&u!<)rr!<)rs +!!*&t!<3#s!<<)t!<)rr!;lfp!!N<%!<<)p!;lfp!<)rr!<<)u!<)ro!.k0$s,[3Zm/bd$J,~> +!BU8[l0\ND!;lfr!<)rt!<<)s!;c`o!!*&u!<)rr!<)rs!!*&t!<3#s!<<)t!<3#q!;c`q!;ulr +!<<)t!;ulq!;lfm!;QTk!<3#t!!*&t!;ulq!!<0#!;QTo!<)rt!<<)s!;c`o!!*&u!<)rr!<)rs +!!*&t!<3#s!<<)t!<)rr!;lfp!!N<%!<<)p!;lfp!<)rr!<<)u!<)ro!.k0$s,[3ZklK'jJ,~> +!B:&Xj6cm>!;lfr!<)rt!<<)s!;c`o!!*&u!<)rr!<)rs!!*&t!<3#s!<<)t!<3#q!;c`q!;ulr +!<<)t!;ulq!;lfm!;QTk!<3#t!!*&t!;ulq!!<0#!;QTo!<)rt!<<)s!;c`o!!*&u!<)rr!<)rs +!!*&t!<3#s!<<)t!<)rr!;lfp!!N<%!<<)p!;lfp!<)rr!<<)u!<)ro!.k0$s,[3ZirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N*!rriE&!!*'!quHWop]1?oq#LHpp]1?or;cltr;cltq#L +!BU8[l0\NN!!`H'rrE'!s8E#qs8N*!rriE&!!*'!quHWop]1?oq#LHpp]1?or;cltr;cltq#L +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N*!rriE&!!*'!quHWop]1?oq#LHpp]1?or;cltr;cltq#L +!BpJ^mHsrQ!!rT)rrE'!rr<&rs82lms8N)ss8E#ts8E#us8E#ss8E#us8E#ts8N)us8N)ts8N)u +s8N)ts8N)rs8N)rs8N)ts8N*!s8E#ss8E#us8N)ts8N)ps8N)ts8N)us8E#ts8N*!s8E#ts8E#n +s82lms8N)ss8E#ts8E#us8E#ss8E#us8E#ts8N)us8N)ts8N*!s8E#ss8Duus8E#ts8E#ss8N)q +s8E#ss8E#ts8;rts8N*!s8N)ts8N(Ms+132s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs82lms8N)ss8E#ts8E#us8E#ss8E#us8E#ts8N)us8N)ts8N)u +s8N)ts8N)rs8N)rs8N)ts8N*!s8E#ss8E#us8N)ts8N)ps8N)ts8N)us8E#ts8N*!s8E#ts8E#n +s82lms8N)ss8E#ts8E#us8E#ss8E#us8E#ts8N)us8N)ts8N*!s8E#ss8Duus8E#ts8E#ss8N)q +s8E#ss8E#ts8;rts8N*!s8N)ts8N(Ms+132s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs82lms8N)ss8E#ts8E#us8E#ss8E#us8E#ts8N)us8N)ts8N)u +s8N)ts8N)rs8N)rs8N)ts8N*!s8E#ss8E#us8N)ts8N)ps8N)ts8N)us8E#ts8N*!s8E#ts8E#n +s82lms8N)ss8E#ts8E#us8E#ss8E#us8E#ts8N)us8N)ts8N*!s8E#ss8Duus8E#ts8E#ss8N)q +s8E#ss8E#ts8;rts8N*!s8N)ts8N(Ms+132s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs82lms8N)ss8N)ss8N*!s8N)rs8N*!s8N)ts8N)us8N)ts8N)o +s8N)rs8N)rs8N)ts8N*!s8N)rs8N*!s8;rds8N)us8N)ts8N*!s8N)ss8N)os82lms8N)ss8N)s +s8N*!s8N)rs8N*!s8N)ts8N)us8N)ts8N*!s8N)rs8N'#rr<&ss8N)ts8N)qs8N)rs8N)us8E#p +s8;qKs+13.s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs82lms8N)ss8N)ss8N*!s8N)rs8N*!s8N)ts8N)us8N)ts8N)o +s8N)rs8N)rs8N)ts8N*!s8N)rs8N*!s8;rds8N)us8N)ts8N*!s8N)ss8N)os82lms8N)ss8N)s +s8N*!s8N)rs8N*!s8N)ts8N)us8N)ts8N*!s8N)rs8N'#rr<&ss8N)ts8N)qs8N)rs8N)us8E#p +s8;qKs+13.s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs82lms8N)ss8N)ss8N*!s8N)rs8N*!s8N)ts8N)us8N)ts8N)o +s8N)rs8N)rs8N)ts8N*!s8N)rs8N*!s8;rds8N)us8N)ts8N*!s8N)ss8N)os82lms8N)ss8N)s +s8N*!s8N)rs8N*!s8N)ts8N)us8N)ts8N*!s8N)rs8N'#rr<&ss8N)ts8N)qs8N)rs8N)us8E#p +s8;qKs+13.s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N*!rr<&ps8N)ss8N)ss8N*!s7ZNns8N)ts8N)ts8N*!s8N)t +s7lZls8N)rs8N)ts8N*!s7ZNms8)fks7lZos8N)ts8N*!s8N)ss8N)os8N*!rr<&ps8N)ss8N)s +s8N*!s7ZNns8N)ts8N)ts8N*!s8N)us7ZKprr<&ms8N)qs8N)rs8N)us8N)os8)eIs+131s8MBd +eieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N*!rr<&ps8N)ss8N)ss8N*!s7ZNns8N)ts8N)ts8N*!s8N)t +s7lZls8N)rs8N)ts8N*!s7ZNms8)fks7lZos8N)ts8N*!s8N)ss8N)os8N*!rr<&ps8N)ss8N)s +s8N*!s7ZNns8N)ts8N)ts8N*!s8N)us7ZKprr<&ms8N)qs8N)rs8N)us8N)os8)eIs+131s8M6` +c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N*!rr<&ps8N)ss8N)ss8N*!s7ZNns8N)ts8N)ts8N*!s8N)t +s7lZls8N)rs8N)ts8N*!s7ZNms8)fks7lZos8N)ts8N*!s8N)ss8N)os8N*!rr<&ps8N)ss8N)s +s8N*!s7ZNns8N)ts8N)ts8N*!s8N)us7ZKprr<&ms8N)qs8N)rs8N)us8N)os8)eIs+131s8M$Z +_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N)ss8N)ss8N)ss8N*!s7ZNns8N)ts8N)ts8N*!s8N)u +s7cTks8N)rs8N)ts8N*!s7ZNks82lns7cTns8N)ts8N*!s8N)ss8N)os8N)ts8N)ss8N)ss8N)s +s8N*!s7ZNns8N)ts8N)ts8N*!s8N)us7ZKprr<&ms8N)qs8N)rs8N)us8N)ms82kJs+132s8MBd +eieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N)ss8N)ss8N)ss8N*!s7ZNns8N)ts8N)ts8N*!s8N)u +s7cTks8N)rs8N)ts8N*!s7ZNks82lns7cTns8N)ts8N*!s8N)ss8N)os8N)ts8N)ss8N)ss8N)s +s8N*!s7ZNns8N)ts8N)ts8N*!s8N)us7ZKprr<&ms8N)qs8N)rs8N)us8N)ms82kJs+132s8M6` +c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N)ss8N)ss8N)ss8N*!s7ZNns8N)ts8N)ts8N*!s8N)u +s7cTks8N)rs8N)ts8N*!s7ZNks82lns7cTns8N)ts8N*!s8N)ss8N)os8N)ts8N)ss8N)ss8N)s +s8N*!s7ZNns8N)ts8N)ts8N*!s8N)us7ZKprr<&ms8N)qs8N)rs8N)us8N)ms82kJs+132s8M$Z +_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8E#ts8E#us8E#ns8N)ts8N)ss8;rrs8N)s +s8N)rs8N)rs8N)us8E#us8E#ns8N)ts8N)qs8N)ss8N)us8N)ts8N*!s8E#ts8E#ns8N)ts8N)s +s8N)ss8E#ts8E#us8E#ns8N)ts8N)ss8;rrs8E#os8E#ss8E#ts8N)ts8N'!s8E#ss8E#ts8N)p +s8N)ts8N(Ms+132s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8E#ts8E#us8E#ns8N)ts8N)ss8;rrs8N)s +s8N)rs8N)rs8N)us8E#us8E#ns8N)ts8N)qs8N)ss8N)us8N)ts8N*!s8E#ts8E#ns8N)ts8N)s +s8N)ss8E#ts8E#us8E#ns8N)ts8N)ss8;rrs8E#os8E#ss8E#ts8N)ts8N'!s8E#ss8E#ts8N)p +s8N)ts8N(Ms+132s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N)ss8N)ss8E#ts8E#us8E#ns8N)ts8N)ss8;rrs8N)s +s8N)rs8N)rs8N)us8E#us8E#ns8N)ts8N)qs8N)ss8N)us8N)ts8N*!s8E#ts8E#ns8N)ts8N)s +s8N)ss8E#ts8E#us8E#ns8N)ts8N)ss8;rrs8E#os8E#ss8E#ts8N)ts8N'!s8E#ss8E#ts8N)p +s8N)ts8N(Ms+132s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7ZNns7lZos7lZos7lZps8;rts8;rrs8;rrs7ZNns7lZos7cTo +s7lZos7lZks7ZKns8;rts8;rts7cTks7ZNns7lZos7lZos7lZps8;rts8;rrs8;rqs7lZos7cTn +s7lZps7lZps7lZns7lYGs+132s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7ZNns7lZos7lZos7lZps8;rts8;rrs8;rrs7ZNns7lZos7cTo +s7lZos7lZks7ZKns8;rts8;rts7cTks7ZNns7lZos7lZos7lZps8;rts8;rrs8;rqs7lZos7cTn +s7lZps7lZps7lZns7lYGs+132s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7ZNns7lZos7lZos7lZps8;rts8;rrs8;rrs7ZNns7lZos7cTo +s7lZos7lZks7ZKns8;rts8;rts7cTks7ZNns7lZos7lZos7lZps8;rts8;rrs8;rqs7lZos7cTn +s7lZps7lZps7lZns7lYGs+132s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7ZNns7lZns8;p!rr<&ss8)frs8;rts8;rqs8N)rs82iss8E#u +s7lZns8;ots8E#ss8)fqs7u`js82iss8Duus8;rts8;rss8;ots8E#qs7ZNns7lZns8;p!rr<&s +s8)frs8;rts8;rqs8N)ps8)fps8)fns82los8;rrs7lZns7u_Hs+131s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts7ZNns7lZns8;p!rr<&ss8)frs8;rts8;rqs8N)rs82iss8E#u +s7lZns8;ots8E#ss8)fqs7u`js82iss8Duus8;rts8;rss8;ots8E#qs7ZNns7lZns8;p!rr<&s +s8)frs8;rts8;rqs8N)ps8)fps8)fns82los8;rrs7lZns7u_Hs+131s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts7ZNns7lZns8;p!rr<&ss8)frs8;rts8;rqs8N)rs82iss8E#u +s7lZns8;ots8E#ss8)fqs7u`js82iss8Duus8;rts8;rss8;ots8E#qs7ZNns7lZns8;p!rr<&s +s8)frs8;rts8;rqs8N)ps8)fps8)fns82los8;rrs7lZns7u_Hs+131s8M$Z_`*)~> +!BpJ^mHsrH!9!nW!.k1-s8N(Ms+13$s/c8"m/bd$J,~> +!BU8[l0\ND!9!nW!.k1-s8N(Ms+13$s/c8"klK'jJ,~> +!B:&Xj6cm>!9!nW!.k1-s8N(Ms+13$s/c8"irR%VJ,~> +!BpJ^mHsrH!9*tW!.k1.s8E"Ls+13$s/c8"m/bd$J,~> +!BU8[l0\ND!9*tW!.k1.s8E"Ls+13$s/c8"klK'jJ,~> +!B:&Xj6cm>!9*tW!.k1.s8E"Ls+13$s/c8"irR%VJ,~> +!BpJ^mD],&!.k11s8)eIs+13$s/Z2!m/bd$J,~> +!BU8[l,E]"!.k11s8)eIs+13$s/Z2!klK'jJ,~> +!B:&Xj2M&q!.k11s8)eIs+13$s/Z2!irR%VJ,~> +!BpJ^mD],'!.k10s82kJs+13$s/Q+um/bd$J,~> +!BU8[l,E]#!.k10s82kJs+13$s/Q+uklK'jJ,~> +!B:&Xj2M&r!.k10s82kJs+13$s/Q+uirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs82ip!4i.0!.k0$s-`odm/bd$J,~> +!BU8[l%/kcs82ip!4i.0!.k0$s-`odklK'jJ,~> +!B:&Xj+75]s82ip!4i.0!.k0$s-`odirR%VJ,~> +!BpJ^mG.a@!<3#t!9*qX!3lJ'!8IMR!5SU7!4`%/!:'Ra!4Mn-!.k0$s8Dusm/bd$J,~> +!BU8[l.l= +!B:&Xj4s\6!<3#t!9*qX!3lJ'!8IMR!5SU7!4`%/!:'Ra!4Mn-!.k0$s8DusirR%VJ,~> +!BpJ^mG%X@!;uis!9!kW!3lJ'!8IMR!5SU7!4`%/!:'Ra!4Mn-!.k0$s8Dusm/bd$J,~> +!BU8[l.c4 +!B:&Xj4jS6!;uis!9!kW!3lJ'!8IMR!5SU7!4`%/!:'Ra!4Mn-!.k0$s8DusirR%VJ,~> +!BpJ^mG%X@!;uis!9!kW!3lJ'!1Eie!4`%/!1s2j!.k0$s8Dusm/bd$J,~> +!BU8[l.c4 +!B:&Xj4jS6!;uis!9!kW!3lJ'!1Eie!4`%/!1s2j!.k0$s8DusirR%VJ,~> +!BpJ^mG%X@!;uis!;ulq!;ulr!<3#t!;ZZk!;ulq!;6Bj!!3*"r;Z]qrVult#6+Z's8N'!rr;uu +!<;utrVultrVultrVu]or;Z]qp&FsjqZ$Npq>^Bn!ri6#rVufrr;Zcs!<;utrVuisrr;rtrVufr +q#: +!BU8[l.c4^Bn!ri6#rVufrr;Zcs!<;utrVuisrr;rtrVufr +q#: +!B:&Xj4jS6!;uis!;ulq!;ulr!<3#t!;ZZk!;ulq!;6Bj!!3*"r;Z]qrVult#6+Z's8N'!rr;uu +!<;utrVultrVultrVu]or;Z]qp&FsjqZ$Npq>^Bn!ri6#rVufrr;Zcs!<;utrVuisrr;rtrVufr +q#: +!BpJ^mG%X@!;uis!<)ot!<)ot!;uis!;uis!;?Em!;ZWp!<)ot!;HKn!<)rt!<)ot!<)ot!<)rt +!<<*!!<<'!!<3#u!<)ot!<)ot!;uis!;lcr!;ZWp!<)ot!;HKn!<)ot!;ZWp!;c]q!<)rt!<)ot +!<)ot!;uls!<)ot!<)ot!;uis!<)ot!<)ot!;ZWp!;c]q!;uis!<)ot!<)ot!;uis!<)rt!;QQo +!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)ot!;ZWp!;c]q!<)rt!<)ot!<)ot!;uls!<)ot!<)ot +!;uis!<)ot!<)ot!;uis!<)rt!;lcr!;ZWp!<)ot!;lfr!<2uu!<)ot!<)rt!.k0Es8MBdeieN~> +!BU8[l.c4 +!B:&Xj4jS6!;uis!<)ot!<)ot!;uis!;uis!;?Em!;ZWp!<)ot!;HKn!<)rt!<)ot!<)ot!<)rt +!<<*!!<<'!!<3#u!<)ot!<)ot!;uis!;lcr!;ZWp!<)ot!;HKn!<)ot!;ZWp!;c]q!<)rt!<)ot +!<)ot!;uls!<)ot!<)ot!;uis!<)ot!<)ot!;ZWp!;c]q!;uis!<)ot!<)ot!;uis!<)rt!;QQo +!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)ot!;ZWp!;c]q!<)rt!<)ot!<)ot!;uls!<)ot!<)ot +!;uis!<)ot!<)ot!;uis!<)rt!;lcr!;ZWp!<)ot!;lfr!<2uu!<)ot!<)rt!.k0Es8M$Z_`*)~> +!BpJ^mG%[;!<2uu!;lcr!<)p%!<<'!s8N)mrr<&qrr<&rrr<&prr<&rrr<&urr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&rrr<&prr<&rrr<&qrr<&rrr<&rrr<&urr<&r +rr<&trr<&srr<&srr<&urr<&nrr<&prr<&qrr<&srr<&urr<&rrr<&trr<&srr<&jrr<&srr<&s +rr<&urr<&rrr<&prr<&rrr<&qrr<&rrr<&rrr<&urr<&rrr<&trr<&srr<&srr<&urr<&trr<&r +rr<&urr<&rrr<&rrr<&qrr<&rrr<&srr<&orr<&srr<%Ms.]Pmm/bd$J,~> +!BU8[l.c77!<2uu!;lcr!<)p%!<<'!s8N)mrr<&qrr<&rrr<&prr<&rrr<&urr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&rrr<&prr<&rrr<&qrr<&rrr<&rrr<&urr<&r +rr<&trr<&srr<&srr<&urr<&nrr<&prr<&qrr<&srr<&urr<&rrr<&trr<&srr<&jrr<&srr<&s +rr<&urr<&rrr<&prr<&rrr<&qrr<&rrr<&rrr<&urr<&rrr<&trr<&srr<&srr<&urr<&trr<&r +rr<&urr<&rrr<&rrr<&qrr<&rrr<&srr<&orr<&srr<%Ms.]PmklK'jJ,~> +!B:&Xj4jV1!<2uu!;lcr!<)p%!<<'!s8N)mrr<&qrr<&rrr<&prr<&rrr<&urr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&rrr<&prr<&rrr<&qrr<&rrr<&rrr<&urr<&r +rr<&trr<&srr<&srr<&urr<&nrr<&prr<&qrr<&srr<&urr<&rrr<&trr<&srr<&jrr<&srr<&s +rr<&urr<&rrr<&prr<&rrr<&qrr<&rrr<&rrr<&urr<&rrr<&trr<&srr<&srr<&urr<&trr<&r +rr<&urr<&rrr<&rrr<&qrr<&rrr<&srr<&orr<&srr<%Ms.]PmirR%VJ,~> +!BpJ^mG%X@!;uis!<2uu!;lcr!<)p%!<<'!s8N)mrr<&qrr<&rrr<&prr<&nrr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qs7lZjs7lZkrr<&rrr<&rrr<&us7lZnrr<&srr<&s +rr<&urr<&ss8)flrr<&qrr<&srr<&us7lZms8E#ks8)forr<&srr<&urr<&rrr<&ps7lZkrr<&r +rr<&rrr<&us7lZnrr<&srr<&srr<&urr<&ts7lZorr<&krr<&qrr<&rrr<&srr<&ns8E"Ls.B>j +m/bd$J,~> +!BU8[l.c4j +klK'jJ,~> +!B:&Xj4jS6!;uis!<2uu!;lcr!<)p%!<<'!s8N)mrr<&qrr<&rrr<&prr<&nrr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qs7lZjs7lZkrr<&rrr<&rrr<&us7lZnrr<&srr<&s +rr<&urr<&ss8)flrr<&qrr<&srr<&us7lZms8E#ks8)forr<&srr<&urr<&rrr<&ps7lZkrr<&r +rr<&rrr<&us7lZnrr<&srr<&srr<&urr<&ts7lZorr<&krr<&qrr<&rrr<&srr<&ns8E"Ls.B>j +irR%VJ,~> +!BpJ^mG%X@!;uis!<2uu!;lcr!<)p%!<3'!!<3&mrr<&qrr<&rrr<&prr<&nrr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&irr<&jrr<&rrr<&rrr<&urr<&mrr<&srr<&r +rrN3#!;uis!;uis!;ZWp!;c]q!;uis!<2uu!:p0i!;QQo!;uis!;uis!;uis!<2uu!;lcr!;ZWp +!;$3j!;lcr!;lcr!<2uu!;?Em!;uis!;lct!<3&srr<&nrr<&krr<&qrr<&rrr<&srr<&ks8N(M +s.TJlm/bd$J,~> +!BU8[l.c4 +!B:&Xj4jS6!;uis!<2uu!;lcr!<)p%!<3'!!<3&mrr<&qrr<&rrr<&prr<&nrr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&irr<&jrr<&rrr<&rrr<&urr<&mrr<&srr<&r +rrN3#!;uis!;uis!;ZWp!;c]q!;uis!<2uu!:p0i!;QQo!;uis!;uis!;uis!<2uu!;lcr!;ZWp +!;$3j!;lcr!;lcr!<2uu!;?Em!;uis!;lct!<3&srr<&nrr<&krr<&qrr<&rrr<&srr<&ks8N(M +s.TJlirR%VJ,~> +!BpJ^mG%X@!;uis!<2uu!;lcr!<)p%!<3'!!<3&mrr<&qrr<&rrr<&prr<&nrr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&irr<&jrr<&rrr<&rrr<&urr<&mrr<&srr<&r +rrN3#!;uis!;uis!;ZWp!;c]q!;uis!<2uu!;?Em!;uis!;ZWp!;uis!;uis!;uis!<2uu!;lcr +!;ZWp!;$3j!;lcr!;lcr!<2uu!;?Em!;uis!;lct!<3&srr<&nrr<&krr<&qrr<&rrr<&srr<&o +rr<&srr<%Ms.]Pmm/bd$J,~> +!BU8[l.c4 +!B:&Xj4jS6!;uis!<2uu!;lcr!<)p%!<3'!!<3&mrr<&qrr<&rrr<&prr<&nrr<&rrr<&urr<&u +rr<&urr<&urr<&rrr<&urr<&srr<&rrr<&qrr<&irr<&jrr<&rrr<&rrr<&urr<&mrr<&srr<&r +rrN3#!;uis!;uis!;ZWp!;c]q!;uis!<2uu!;?Em!;uis!;ZWp!;uis!;uis!;uis!<2uu!;lcr +!;ZWp!;$3j!;lcr!;lcr!<2uu!;?Em!;uis!;lct!<3&srr<&nrr<&krr<&qrr<&rrr<&srr<&o +rr<&srr<%Ms.]PmirR%VJ,~> +!BpJ^mG%X@!;uis!<)ot!<)ot!;lcr!<2uu!;6?l!<)ot!<2uu!<)ot!;HKn!<)rt!<)ot!<)ot +!<)ot!<2uu!<2uu!<3#u!<)ot!<)ot!<)rt!;lcr!<)ot!<2uu!<)rt!;QQo!<)rt!;c]q!;c]q +!<)rt!<)ot!<)rt!<)ot!;uis!;c]q!;lcr!<)rt!;ZWp!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot +!;ZWp!<)rt!;uis!;uis!<)ot!<)rt!;QQo!<)rt!;c]q!;c]q!<)rt!<)ot!<)rt!<)ot!;uis +!;c]q!;c]q!<)rt!<)ot!<)rt!;lcr!<)ot!<2uu!<)ot!;lcr!;QTo!<)ot!;lfr!.k0Ms8MBd +eieN~> +!BU8[l.c4 +!B:&Xj4jS6!;uis!<)ot!<)ot!;lcr!<2uu!;6?l!<)ot!<2uu!<)ot!;HKn!<)rt!<)ot!<)ot +!<)ot!<2uu!<2uu!<3#u!<)ot!<)ot!<)rt!;lcr!<)ot!<2uu!<)rt!;QQo!<)rt!;c]q!;c]q +!<)rt!<)ot!<)rt!<)ot!;uis!;c]q!;lcr!<)rt!;ZWp!;c]q!<)rt!<)ot!<)rt!<)rt!<)ot +!;ZWp!<)rt!;uis!;uis!<)ot!<)rt!;QQo!<)rt!;c]q!;c]q!<)rt!<)ot!<)rt!<)ot!;uis +!;c]q!;c]q!<)rt!<)ot!<)rt!;lcr!<)ot!<2uu!<)ot!;lcr!;QTo!<)ot!;lfr!.k0Ms8M$Z +_`*)~> +!BpJ^mG.a@!<3#t!<)rr!;c]q!<2uu!;-gHnr;Zlu!;ulq +!;ulr!<3#t!;lcr!;ZZn!;c`o!;QTm!;ulq!;uln!;uit!<;utqZ$QqJcDbMrp9a;4b*~> +!BU8[l.l=gHnr;Zlu!;ulq +!;ulr!<3#t!;lcr!;ZZn!;c`o!;QTm!;ulq!;uln!;uit!<;utqZ$QqJcDbMrojI/3e.~> +!B:&Xj4s\6!<3#t!<)rr!;c]q!<2uu!;-gHnr;Zlu!;ulq +!;ulr!<3#t!;lcr!;ZZn!;c`o!;QTm!;ulq!;uln!;uit!<;utqZ$QqJcDbMro4$s2h1~> +!BpJ^m=G<5rr<&,rr<%Ms5*bU!.k0$s1eU5m/bd$J,~> +!BU8[l%/m1rr<&,rr<%Ms5*bU!.k0$s1eU5klK'jJ,~> +!B:&Xj+77+rr<&,rr<%Ms5*bU!.k0$s1eU5irR%VJ,~> +!BpJ^m=G<5rr<&,rr<%Ms5*bU!.k0$s1eU5m/bd$J,~> +!BU8[l%/m1rr<&,rr<%Ms5*bU!.k0$s1eU5klK'jJ,~> +!B:&Xj+77+rr<&,rr<%Ms5*bU!.k0$s1eU5irR%VJ,~> +!BpJ^m=G<5rr<&-rr<%Ms5*bU!.k0$s1\O4m/bd$J,~> +!BU8[l%/m1rr<&-rr<%Ms5*bU!.k0$s1\O4klK'jJ,~> +!B:&Xj+77+rr<&-rr<%Ms5*bU!.k0$s1\O4irR%VJ,~> +!BpJ^m=G<6s8;r2s82kJs5O(V!.k0$s1SI3m/bd$J,~> +!BU8[l%/m2s8;r2s82kJs5O(V!.k0$s1SI3klK'jJ,~> +!B:&Xj+77,s8;r2s82kJs5O(V!.k0$s1SI3irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mG%[@!;QTo!5&:0!.k0$s+13$s2+g8m/bd$J,~> +!BU8[l.c7 +!B:&Xj4jV6!;QTo!5&:0!.k0$s+13$s2+g8irR%VJ,~> +!BpJ^mHafN!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Hf!9O4\!.k0$s+13$s7?9im/bd$J,~> +!BU8[l0JBJ!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Hf!9O4\!.k0$s+13$s7?9iklK'jJ,~> +!B:&Xj6QaD!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Hf!9O4\!.k0$s+13$s7?9iirR%VJ,~> +!BpJ^mHFQM!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Em!<2uu!<2uu!9O4\!.k0$s+13$s7?9i +m/bd$J,~> +!BU8[l0/-I!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Em!<2uu!<2uu!9O4\!.k0$s+13$s7?9i +klK'jJ,~> +!B:&Xj66LC!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Em!<2uu!<2uu!9O4\!.k0$s+13$s7?9i +irR%VJ,~> +!BpJ^mHOWP!<3&lrr<&nrr<&grr<&Arr<&mrr<&urr<&urr<%Ms+13$s+14$s8MBdeieN~> +!BU8[l083L!<3&lrr<&nrr<&grr<&Arr<&mrr<&urr<&urr<%Ms+13$s+14$s8M6`c8pI~> +!B:&Xj6?RF!<3&lrr<&nrr<&grr<&Arr<&mrr<&urr<&urr<%Ms+13$s+14$s8M$Z_`*)~> +!BpJ^mHOWP!<3&qs8;ourrDusr;Zlu!;ulr!;c`l!;ulr!;ZZn!;uls!!*&t!;lfp!;QQo!;?Em +!<2uu!<2uu!<)rr!;uls!!*&t!;lfq!;ZZn!!3*"r;Z]q!WN/rs8N(Ms+13$s- +!BU8[l083L!<3&qs8;ourrDusr;Zlu!;ulr!;c`l!;ulr!;ZZn!;uls!!*&t!;lfp!;QQo!;?Em +!<2uu!<2uu!<)rr!;uls!!*&t!;lfq!;ZZn!!3*"r;Z]q!WN/rs8N(Ms+13$s- +!B:&Xj6?RF!<3&qs8;ourrDusr;Zlu!;ulr!;c`l!;ulr!;ZZn!;uls!!*&t!;lfp!;QQo!;?Em +!<2uu!<2uu!<)rr!;uls!!*&t!;lfq!;ZZn!!3*"r;Z]q!WN/rs8N(Ms+13$s- +!BpJ^mHX]O!<2uu!;uis!<)rt!<)ot!<)rt!;c]q!;QQo!;?Em!;c]q!<)ot!;uls!<)ot!<)ot +!<)ot!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!;c`q!.k0$s+138 +s8MBdeieN~> +!BU8[l0A9K!<2uu!;uis!<)rt!<)ot!<)rt!;c]q!;QQo!;?Em!;c]q!<)ot!;uls!<)ot!<)ot +!<)ot!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!;c`q!.k0$s+138 +s8M6`c8pI~> +!B:&Xj6HXE!<2uu!;uis!<)rt!<)ot!<)rt!;c]q!;QQo!;?Em!;c]q!<)ot!;uls!<)ot!<)ot +!<)ot!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!;c`q!.k0$s+138 +s8M$Z_`*)~> +!BpJ^mHX]O!<2uu!<)ot!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!;QQo +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!.k0$s+13/s8MBdeieN~> +!BU8[l0A9K!<2uu!<)ot!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!;QQo +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!.k0$s+13/s8M6`c8pI~> +!B:&Xj6HXE!<2uu!<)ot!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!;QQo +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!.k0$s+13/s8M$Z_`*)~> +!BpJ^mHacP!;uis!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<)rp +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;6Bk!.k0$s+13,s8MBdeieN~> +!BU8[l0J?L!;uis!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<)rp +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;6Bk!.k0$s+13,s8M6`c8pI~> +!B:&Xj6Q^F!;uis!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<)rp +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;6Bk!.k0$s+13,s8M$Z_`*)~> +!BpJ^mHafK!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<2uu!;uis +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!:p0i!.k0$s+13.s8MBdeieN~> +!BU8[l0JBG!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<2uu!;uis +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!:p0i!.k0$s+13.s8M6`c8pI~> +!B:&Xj6QaA!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<2uu!;uis +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!:p0i!.k0$s+13.s8M$Z_`*)~> +!BpJ^mHjiQ!;c]t!<<'!qu6Wrrr2ruqu6WrqYpNqq#:UEpo)A[iqu6Wrqu6WrrVlitqu6Wrqu6Wrqu6WrpAY*mr;Q`sJcC<$JcC]/rp9a;4b*~> +!BU8[l0SEM!;c]t!<<'!qu6Wrrr2ruqu6WrqYpNqq#:UEpo)A[iqu6Wrqu6WrrVlitqu6Wrqu6Wrqu6WrpAY*mr;Q`sJcC<$JcC]/rojI/3e.~> +!B:&Xj6ZdG!;c]t!<<'!qu6Wrrr2ruqu6WrqYpNqq#:UEpo)A[iqu6Wrqu6WrrVlitqu6Wrqu6Wrqu6WrpAY*mr;Q`sJcC<$JcC]/ro4$s2h1~> +!BpJ^mHjiQ!;c]q!<2uu!<)rt!<)ot!<)rt!;c]q!;QQo!<)ot!;lcr!;c]q!<)ot!;uis!;uis +!<2uu!<)rt!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot!;c`q!.k0$ +s+138s8MBdeieN~> +!BU8[l0SEM!;c]q!<2uu!<)rt!<)ot!<)rt!;c]q!;QQo!<)ot!;lcr!;c]q!<)ot!;uis!;uis +!<2uu!<)rt!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot!;c`q!.k0$ +s+138s8M6`c8pI~> +!B:&Xj6ZdG!;c]q!<2uu!<)rt!<)ot!<)rt!;c]q!;QQo!<)ot!;lcr!;c]q!<)ot!;uis!;uis +!<2uu!<)rt!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot!;c`q!.k0$ +s+138s8M$Z_`*)~> +!BpJ^mHsrP!<3#s!<3#s!!<0#!<)rr!!<0#!<3#p!;c`o!<)ro!;ulq!;ulr!<3#t!<3#s!!*&u +!<3#p!;HNk!;lfp!;lcs!<;utr;ZTnr;Z]qqu6Zss8;rns8N(Ms+13$s- +!BU8[l0\NL!<3#s!<3#s!!<0#!<)rr!!<0#!<3#p!;c`o!<)ro!;ulq!;ulr!<3#t!<3#s!!*&u +!<3#p!;HNk!;lfp!;lcs!<;utr;ZTnr;Z]qqu6Zss8;rns8N(Ms+13$s- +!B:&Xj6cmF!<3#s!<3#s!!<0#!<)rr!!<0#!<3#p!;c`o!<)ro!;ulq!;ulr!<3#t!<3#s!!*&u +!<3#p!;HNk!;lfp!;lcs!<;utr;ZTnr;Z]qqu6Zss8;rns8N(Ms+13$s- +!BpJ^m=G;srr<%Ms+13$s+143s8MBdeieN~> +!BU8[l%/lorr<%Ms+13$s+143s8M6`c8pI~> +!B:&Xj+76irr<%Ms+13$s+143s8M$Z_`*)~> +!BpJ^m=G;srr<%Ms+13$s+143s8MBdeieN~> +!BU8[l%/lorr<%Ms+13$s+143s8M6`c8pI~> +!B:&Xj+76irr<%Ms+13$s+143s8M$Z_`*)~> +!BpJ^m=G;srr<%Ms+13$s+143s8MBdeieN~> +!BU8[l%/lorr<%Ms+13$s+143s8M6`c8pI~> +!B:&Xj+76irr<%Ms+13$s+143s8M$Z_`*)~> +!BpJ^m=G;ts8;qKs+13$s+145s8MBdeieN~> +!BU8[l%/lps8;qKs+13$s+145s8M6`c8pI~> +!B:&Xj+76js8;qKs+13$s+145s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mA9j\!6P9@!7h,L!87DP!9X=Y!8RVS!;lfo!;ulr!9*tX!8[\T!:0[b!.k0$s7?9im/bd$ +J,~> +!BU8[l)"FX!6P9@!7h,L!87DP!9X=Y!8RVS!;lfo!;ulr!9*tX!8[\T!:0[b!.k0$s7?9iklK'j +J,~> +!B:&Xj/)eR!6P9@!7h,L!87DP!9X=Y!8RVS!;lfo!;ulr!9*tX!8[\T!:0[b!.k0$s7?9iirR%V +J,~> +!BpJ^mG7g:!7UuG!9*tS!:^$g!7h,L!87DP!9aCY!:0[`!<<)t!;uls!;lfo!;ulr!9*tX!;6Bk +!;ulr!;- +!BU8[l.uC6!7UuG!9*tS!:^$g!7h,L!87DP!9aCY!:0[`!<<)t!;uls!;lfo!;ulr!9*tX!;6Bk +!;ulr!;- +!B:&Xj5'b0!7UuG!9*tS!:^$g!7h,L!87DP!9aCY!:0[`!<<)t!;uls!;lfo!;ulr!9*tX!;6Bk +!;ulr!;- +!BpJ^mHsrH!<)rl!7:cG!9*tQ!:p0i!3?/"!9aC^!9X=[!<<)t!:g*h!;lfr!9*tX!;6Bk!;ulr +!;- +!BU8[l0\ND!<)rl!7:cG!9*tQ!:p0i!3?/"!9aC^!9X=[!<<)t!:g*h!;lfr!9*tX!;6Bk!;ulr +!;- +!B:&Xj6cm>!<)rl!7:cG!9*tQ!:p0i!3?/"!9aC^!9X=[!<<)t!:g*h!;lfr!9*tX!;6Bk!;ulr +!;- +!BpJ^mHsrH!;lfr!<)rt!!*&s!!*&s!<<)r!<<)u!!E6$!<<#us8W&u!<;utqZ$Qqq>^Bnm/R(c +rVultr;Z]qrVuZnqu?TprVufrs8W&u!<<#u"9/?$s8E#ts82lps8Duus8;rqs8)fqs8Duus8;rs +s7lZgs8;rqs7lZis8)fks8N)ts8N)us82lls8N)rs8N'!s8;rps8;rrs8;rts8E#us7lZis8E#t +s8E#ts8)fqs7lZos8;rts8E#ts82lps82iss82kJs+C@Nm/bd$J,~> +!BU8[l0\ND!;lfr!<)rt!!*&s!!*&s!<<)r!<<)u!!E6$!<<#us8W&u!<;utqZ$Qqq>^Bnm/R(c +rVultr;Z]qrVuZnqu?TprVufrs8W&u!<<#u"9/?$s8E#ts82lps8Duus8;rqs8)fqs8Duus8;rs +s7lZgs8;rqs7lZis8)fks8N)ts8N)us82lls8N)rs8N'!s8;rps8;rrs8;rts8E#us7lZis8E#t +s8E#ts8)fqs7lZos8;rts8E#ts82lps82iss82kJs+C@NklK'jJ,~> +!B:&Xj6cm>!;lfr!<)rt!!*&s!!*&s!<<)r!<<)u!!E6$!<<#us8W&u!<;utqZ$Qqq>^Bnm/R(c +rVultr;Z]qrVuZnqu?TprVufrs8W&u!<<#u"9/?$s8E#ts82lps8Duus8;rqs8)fqs8Duus8;rs +s7lZgs8;rqs7lZis8)fks8N)ts8N)us82lls8N)rs8N'!s8;rps8;rrs8;rts8E#us7lZis8E#t +s8E#ts8)fqs7lZos8;rts8E#ts82lps82iss82kJs+C@NirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N*!rr`?%!!*&s!!*&s!!*&p!!*&m!!*&o!;lfr!;lfl!;lfr +!;?Hm!;uls!<<)p!<<)p!<)rn!<<)c!<<)s!;ull!<3#o!<<)o!<<)p!;QTi!<3#o!;ZZj!;ZZp +!<)rt!<3#r!;QTo!;lfl!<3#o!<<)n!!*&p!;QTn!<3#t!<<)p!<<)p!<3#m!<<)s!;ulp!!*&s +!.k0&s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N*!rr`?%!!*&s!!*&s!!*&p!!*&m!!*&o!;lfr!;lfl!;lfr +!;?Hm!;uls!<<)p!<<)p!<)rn!<<)c!<<)s!;ull!<3#o!<<)o!<<)p!;QTi!<3#o!;ZZj!;ZZp +!<)rt!<3#r!;QTo!;lfl!<3#o!<<)n!!*&p!;QTn!<3#t!<<)p!<<)p!<3#m!<<)s!;ulp!!*&s +!.k0&s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N*!rr`?%!!*&s!!*&s!!*&p!!*&m!!*&o!;lfr!;lfl!;lfr +!;?Hm!;uls!<<)p!<<)p!<)rn!<<)c!<<)s!;ull!<3#o!<<)o!<<)p!;QTi!<3#o!;ZZj!;ZZp +!<)rt!<3#r!;QTo!;lfl!<3#o!<<)n!!*&p!;QTn!<3#t!<<)p!<<)p!<3#m!<<)s!;ulp!!*&s +!.k0&s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs82los8N)us8N)us8N)ts8N*!s8Duus8E!$rr<'!s8E#ts8E#r +s8N)ss8E#ss8E#rs8N)ms8N)ss8N'!s8E#ss8E#ts8N)qs8E#ss8E#ts8;rts8N'!s8Duus8E!" +rr<&ss8N)rs8E#ts8N)us8N)ts8N)us8E#ts8N)ts8N)ls8E#ss8E#ss8N)ls8N)ts8N)ps7lZl +s8N)os8N)rs8E#ts8Duus8E#ss8E#ts8;rts8N)us8N)ks8;ots8;rts8N)ts8N)ts8N)os8;rt +s8N)ss8N)qs8N)us8N(Ms+14Lm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs82los8N)us8N)us8N)ts8N*!s8Duus8E!$rr<'!s8E#ts8E#r +s8N)ss8E#ss8E#rs8N)ms8N)ss8N'!s8E#ss8E#ts8N)qs8E#ss8E#ts8;rts8N'!s8Duus8E!" +rr<&ss8N)rs8E#ts8N)us8N)ts8N)us8E#ts8N)ts8N)ls8E#ss8E#ss8N)ls8N)ts8N)ps7lZl +s8N)os8N)rs8E#ts8Duus8E#ss8E#ts8;rts8N)us8N)ks8;ots8;rts8N)ts8N)ts8N)os8;rt +s8N)ss8N)qs8N)us8N(Ms+14LklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs82los8N)us8N)us8N)ts8N*!s8Duus8E!$rr<'!s8E#ts8E#r +s8N)ss8E#ss8E#rs8N)ms8N)ss8N'!s8E#ss8E#ts8N)qs8E#ss8E#ts8;rts8N'!s8Duus8E!" +rr<&ss8N)rs8E#ts8N)us8N)ts8N)us8E#ts8N)ts8N)ls8E#ss8E#ss8N)ls8N)ts8N)ps7lZl +s8N)os8N)rs8E#ts8Duus8E#ss8E#ts8;rts8N)us8N)ks8;ots8;rts8N)ts8N)ts8N)os8;rt +s8N)ss8N)qs8N)us8N(Ms+14LirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs82lns8N'#rr<&ns8N*!s8N*!s8N*!s8N*!s8N)ss8N)ss8N)s +s8N)rs8N)fs8N)ss8N'#rr<&rs8N)us8N)qs8N)rs8N)us8E#qs8N*!s8N*!s8N)ss8N)rs8N)t +s8N)os8N)us8N)ts8N)ts8N)ls8N)rs8N)ts8N)fs8N)ps7lZls8N)os8N)rs8N)ss8N'#rr<&r +s8N)us8E#os8N)ks7cTis8N)ts8N)os8E#ms8N)ps8N'#rr<%Ms+11Ms8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs82lns8N'#rr<&ns8N*!s8N*!s8N*!s8N*!s8N)ss8N)ss8N)s +s8N)rs8N)fs8N)ss8N'#rr<&rs8N)us8N)qs8N)rs8N)us8E#qs8N*!s8N*!s8N)ss8N)rs8N)t +s8N)os8N)us8N)ts8N)ts8N)ls8N)rs8N)ts8N)fs8N)ps7lZls8N)os8N)rs8N)ss8N'#rr<&r +s8N)us8E#os8N)ks7cTis8N)ts8N)os8E#ms8N)ps8N'#rr<%Ms+11Ms8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs82lns8N'#rr<&ns8N*!s8N*!s8N*!s8N*!s8N)ss8N)ss8N)s +s8N)rs8N)fs8N)ss8N'#rr<&rs8N)us8N)qs8N)rs8N)us8E#qs8N*!s8N*!s8N)ss8N)rs8N)t +s8N)os8N)us8N)ts8N)ts8N)ls8N)rs8N)ts8N)fs8N)ps7lZls8N)os8N)rs8N)ss8N'#rr<&r +s8N)us8E#os8N)ks7cTis8N)ts8N)os8E#ms8N)ps8N'#rr<%Ms+11Ms8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N*!rr<&ps8E#rs7lZps8N*!s8N*!s8N*!s8N)ss8N)ss8N)s +s7ZN^s8N)ss8N'!s7ZNms8N)qs7ZNms8N)qs8N*!s8N*!s8N)ss8N)rs8N)ts8N)us7lZos8N)t +s8N)ts8N)ls8N)rs8N)ts8N)ls7lZjs8N)ts8N)rs8N)os8N)rs8N)ss8N'!s7ZNms8N)os8N)k +s8N'!s8E!$rr<'!s7lZns8N)os8N)ms8N)os8E"Ls+14Ms8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N*!rr<&ps8E#rs7lZps8N*!s8N*!s8N*!s8N)ss8N)ss8N)s +s7ZN^s8N)ss8N'!s7ZNms8N)qs7ZNms8N)qs8N*!s8N*!s8N)ss8N)rs8N)ts8N)us7lZos8N)t +s8N)ts8N)ls8N)rs8N)ts8N)ls7lZjs8N)ts8N)rs8N)os8N)rs8N)ss8N'!s7ZNms8N)os8N)k +s8N'!s8E!$rr<'!s7lZns8N)os8N)ms8N)os8E"Ls+14Ms8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N*!rr<&ps8E#rs7lZps8N*!s8N*!s8N*!s8N)ss8N)ss8N)s +s7ZN^s8N)ss8N'!s7ZNms8N)qs7ZNms8N)qs8N*!s8N*!s8N)ss8N)rs8N)ts8N)us7lZos8N)t +s8N)ts8N)ls8N)rs8N)ts8N)ls7lZjs8N)ts8N)rs8N)os8N)rs8N)ss8N'!s7ZNms8N)os8N)k +s8N'!s8E!$rr<'!s7lZns8N)os8N)ms8N)os8E"Ls+14Ms8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N)ts8N'#rr<&us7cTos8N*!s8N*!s8N*!s8N)ss8N)s +s8N)ss7ZN^s8N)ss8N'!s7ZNms8N)qs7ZNms8N)qs8N*!s8N*!s8N)ss8N)rs8N)ts8N*!s7cTn +s8N)ts8N)ts8N)ls8N)rs8N)ts8N)ms7cTis8N)ts8N)rs8N)os8N)rs8N)ss8N'!s7ZNms8N)o +s8N)ks8N*!rriE&rr<'!p]19mrrDiorrDcmrrDlprr<-#!!%TMJc>`Mrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N)ts8N'#rr<&us7cTos8N*!s8N*!s8N*!s8N)ss8N)s +s8N)ss7ZN^s8N)ss8N'!s7ZNms8N)qs7ZNms8N)qs8N*!s8N*!s8N)ss8N)rs8N)ts8N*!s7cTn +s8N)ts8N)ts8N)ls8N)rs8N)ts8N)ms7cTis8N)ts8N)rs8N)os8N)rs8N)ss8N'!s7ZNms8N)o +s8N)ks8N*!rriE&rr<'!p]19mrrDiorrDcmrrDlprr<-#!!%TMJc>`MrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N)ts8N'#rr<&us7cTos8N*!s8N*!s8N*!s8N)ss8N)s +s8N)ss7ZN^s8N)ss8N'!s7ZNms8N)qs7ZNms8N)qs8N*!s8N*!s8N)ss8N)rs8N)ts8N*!s7cTn +s8N)ts8N)ts8N)ls8N)rs8N)ts8N)ms7cTis8N)ts8N)rs8N)os8N)rs8N)ss8N'!s7ZNms8N)o +s8N)ks8N*!rriE&rr<'!p]19mrrDiorrDcmrrDlprr<-#!!%TMJc>`Mro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N)us8N)us8N*!s8N)ss8N*!s8N*!s8N*!s8N*!s8E#t +s8E#rs8N)ss8E#^s8N)ts8N*!s8E#ms8N)ts8N'!s8E#ms8N)qs8N*!s8N*!s8N)ss8N)rs8N)t +s8N*!s8N)ss8N)us8N)ts8N)ts8N)ts8N)rs8E#ss8E#ss8N)ms8N)ss8N)ps8N)ts8N)rs8N)o +s8N)rs8E#ts8Duus8E#ms8N)os8N)ts8N)qs8N)ss8N'#rr<&ss8N)ts8N)ts8N)us8N)ms8N)q +s8N)us8N(Ms+14Lm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N)us8N)us8N*!s8N)ss8N*!s8N*!s8N*!s8N*!s8E#t +s8E#rs8N)ss8E#^s8N)ts8N*!s8E#ms8N)ts8N'!s8E#ms8N)qs8N*!s8N*!s8N)ss8N)rs8N)t +s8N*!s8N)ss8N)us8N)ts8N)ts8N)ts8N)rs8E#ss8E#ss8N)ms8N)ss8N)ps8N)ts8N)rs8N)o +s8N)rs8E#ts8Duus8E#ms8N)os8N)ts8N)qs8N)ss8N'#rr<&ss8N)ts8N)ts8N)us8N)ms8N)q +s8N)us8N(Ms+14LklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N)us8N)us8N*!s8N)ss8N*!s8N*!s8N*!s8N*!s8E#t +s8E#rs8N)ss8E#^s8N)ts8N*!s8E#ms8N)ts8N'!s8E#ms8N)qs8N*!s8N*!s8N)ss8N)rs8N)t +s8N*!s8N)ss8N)us8N)ts8N)ts8N)ts8N)rs8E#ss8E#ss8N)ms8N)ss8N)ps8N)ts8N)rs8N)o +s8N)rs8E#ts8Duus8E#ms8N)os8N)ts8N)qs8N)ss8N'#rr<&ss8N)ts8N)ts8N)us8N)ms8N)q +s8N)us8N(Ms+14LirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7ZKns82iss6]jes8Duus8Duus7lZos7lZos7lZls8N)ns7cTn +s7lZns7lZps7lZps7lZps8;ots8Duus8Duus7lZps8;rts8;ots7ZKns8;rts8;rss7lZks7lZo +s7lZks7ZNjs8;rts8;rts7lZos7lZps7cTns7lZps7lZms7lZls82iss7-0hs7lWps7lZns7lZp +s82iss82kJs+C@Nm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7ZKns82iss6]jes8Duus8Duus7lZos7lZos7lZls8N)ns7cTn +s7lZns7lZps7lZps7lZps8;ots8Duus8Duus7lZps8;rts8;ots7ZKns8;rts8;rss7lZks7lZo +s7lZks7ZNjs8;rts8;rts7lZos7lZps7cTns7lZps7lZms7lZls82iss7-0hs7lWps7lZns7lZp +s82iss82kJs+C@NklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7ZKns82iss6]jes8Duus8Duus7lZos7lZos7lZls8N)ns7cTn +s7lZns7lZps7lZps7lZps8;ots8Duus8Duus7lZps8;rts8;ots7ZKns8;rts8;rss7lZks7lZo +s7lZks7ZNjs8;rts8;rts7lZos7lZps7cTns7lZps7lZms7lZls82iss7-0hs7lWps7lZns7lZp +s82iss82kJs+C@NirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7ZKns82iss82iss82iss7u]qs8Duus8E!#rr<'!r;cfrq#L?m +qZ-NnrrDfnq>gBlqZ-QoquHWoqZ-Zrq#LHpr;ZitrVururVuruq#LHpr;cltr;cltqu?`srVuru +r;cltr;cfrquHHjr;ccqq#L6jqu?`srW)iqr;cltr;cltq#LEoq#LHprVurur;c`pqZ-Zrq#L +!BU8[l0\NM!!rT)rrE'!rr<&ts7ZKns82iss82iss82iss7u]qs8Duus8E!#rr<'!r;cfrq#L?m +qZ-NnrrDfnq>gBlqZ-QoquHWoqZ-Zrq#LHpr;ZitrVururVuruq#LHpr;cltr;cltqu?`srVuru +r;cltr;cfrquHHjr;ccqq#L6jqu?`srW)iqr;cltr;cltq#LEoq#LHprVurur;c`pqZ-Zrq#L +!B:&Xj6cmG!!rT)rrE'!rr<&ts7ZKns82iss82iss82iss7u]qs8Duus8E!#rr<'!r;cfrq#L?m +qZ-NnrrDfnq>gBlqZ-QoquHWoqZ-Zrq#LHpr;ZitrVururVuruq#LHpr;cltr;cltqu?`srVuru +r;cltr;cfrquHHjr;ccqq#L6jqu?`srW)iqr;cltr;cltq#LEoq#LHprVurur;c`pqZ-Zrq#L +!BpJ^mHsrH!7:cG!.k0$s+13$s-Wicm/bd$J,~> +!BU8[l0\ND!7:cG!.k0$s+13$s-WicklK'jJ,~> +!B:&Xj6cm>!7:cG!.k0$s+13$s-WicirR%VJ,~> +!BpJ^mHsrH!7:cG!.k0$s+13$s-Wicm/bd$J,~> +!BU8[l0\ND!7:cG!.k0$s+13$s-WicklK'jJ,~> +!B:&Xj6cm>!7:cG!.k0$s+13$s-WicirR%VJ,~> +!BpJ^mBQ]h!.k0$s+13$s-iuem/bd$J,~> +!BU8[l*:9d!.k0$s+13$s-iueklK'jJ,~> +!B:&Xj0AX^!.k0$s+13$s-iueirR%VJ,~> +!BpJ^mBQ]h!.k0$s+13$s-iuem/bd$J,~> +!BU8[l*:9d!.k0$s+13$s-iueklK'jJ,~> +!B:&Xj0AX^!.k0$s+13$s-iueirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mA0d^!;?Hm!8mhV!;c`p!0@0[!.k0$s+14!s8MBdeieN~> +!BU8[l(n@Z!;?Hm!8mhV!;c`p!0@0[!.k0$s+14!s8M6`c8pI~> +!B:&Xj.u_T!;?Hm!8mhV!;c`p!0@0[!.k0$s+14!s8M$Z_`*)~> +!BpJ^mFqU=!!<0#!7LoI!;?Hm!8mhV!;c`p!9sOZ!3cG&!.k0$s+14!s8MBdeieN~> +!BU8[l.Z19!!<0#!7LoI!;?Hm!8mhV!;c`p!9sOZ!3cG&!.k0$s+14!s8M6`c8pI~> +!B:&Xj4aP3!!<0#!7LoI!;?Hm!8mhV!;c`p!9sOZ!3cG&!.k0$s+14!s8M$Z_`*)~> +!BpJ^mHsrH!;ull!7LoI!7LoI!;ZZp!9sOY!3lM'!.k0$s+14!s8MBdeieN~> +!BU8[l0\ND!;ull!7LoI!7LoI!;ZZp!9sOY!3lM'!.k0$s+14!s8M6`c8pI~> +!B:&Xj6cm>!;ull!7LoI!7LoI!;ZZp!9sOY!3lM'!.k0$s+14!s8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rs!<)rr!<3#t!!E6$!<<#us8W&u!<;utrr;rts8W#ts8VlprVucqr;Z`r +!<;utr;Z]q!<<#uqu?HlrVult!<;utqu?Tpp](6nrVuisrVufrrVufrs8W&u!<<#u"9/?$s8E#s +s8)fqs8Duus8;rps8;rrs8Duus8;rss7lYGs+13$s4@;Mm/bd$J,~> +!BU8[l0\ND!;uls!<)rs!<)rr!<3#t!!E6$!<<#us8W&u!<;utrr;rts8W#ts8VlprVucqr;Z`r +!<;utr;Z]q!<<#uqu?HlrVult!<;utqu?Tpp](6nrVuisrVufrrVufrs8W&u!<<#u"9/?$s8E#s +s8)fqs8Duus8;rps8;rrs8Duus8;rss7lYGs+13$s4@;MklK'jJ,~> +!B:&Xj6cm>!;uls!<)rs!<)rr!<3#t!!E6$!<<#us8W&u!<;utrr;rts8W#ts8VlprVucqr;Z`r +!<;utr;Z]q!<<#uqu?HlrVult!<;utqu?Tpp](6nrVuisrVufrrVufrs8W&u!<<#u"9/?$s8E#s +s8)fqs8Duus8;rps8;rrs8Duus8;rss7lYGs+13$s4@;MirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N*!s7lWps7QEms7cTos8E#us8;rts7lZns82lps7cTn +s7cTks7lZns7lZos7lZjs8N)ss8N*!s7lZps6Kacs7lZps7cTns7lZps7cTos7lYGs+13$s4@;M +m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N*!s7lWps7QEms7cTos8E#us8;rts7lZns82lps7cTn +s7cTks7lZns7lZos7lZjs8N)ss8N*!s7lZps6Kacs7lZps7cTns7lZps7cTos7lYGs+13$s4@;M +klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N*!s7lWps7QEms7cTos8E#us8;rts7lZns82lps7cTn +s7cTks7lZns7lZos7lZjs8N)ss8N*!s7lZps6Kacs7lZps7cTns7lZps7cTos7lYGs+13$s4@;M +irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)os8E#ss8Duus8Duus8E!$rr<'!s8E#ts8E#us8N)ts8N)t +s8N)ms8N)rs8E#ts8N*!s8E#ts8E#ns8N)ps8E#ts8N*!s8E#ss8E#ps8N)ts8Duus8E#ss8E#t +s8;rts8N'!s8Duus8E!&rr<'!rr<&ts8N)us8E#ts8N*!s8E#ss8E#us8E#ts8N)ts8N(Ms+13$ +s3q#Im/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)os8E#ss8Duus8Duus8E!$rr<'!s8E#ts8E#us8N)ts8N)t +s8N)ms8N)rs8E#ts8N*!s8E#ts8E#ns8N)ps8E#ts8N*!s8E#ss8E#ps8N)ts8Duus8E#ss8E#t +s8;rts8N'!s8Duus8E!&rr<'!rr<&ts8N)us8E#ts8N*!s8E#ss8E#us8E#ts8N)ts8N(Ms+13$ +s3q#IklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)os8E#ss8Duus8Duus8E!$rr<'!s8E#ts8E#us8N)ts8N)t +s8N)ms8N)rs8E#ts8N*!s8E#ts8E#ns8N)ps8E#ts8N*!s8E#ss8E#ps8N)ts8Duus8E#ss8E#t +s8;rts8N'!s8Duus8E!&rr<'!rr<&ts8N)us8E#ts8N*!s8E#ss8E#us8E#ts8N)ts8N(Ms+13$ +s3q#IirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N*!s8N)ts8N)t +s8N)ms8N)rs8N)ts8N*!s8N)ss8N)os8N)ps8N)ts8N*!s8N)rs8N)qs7lZps8N)rs8N)us8E#q +s8N*!s8N*!s8N)ps8N)us8N)ts8N*!s8N)rs8N*!s8N)ts8N)ts8N(Ms+13$s3q#Im/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N*!s8N)ts8N)t +s8N)ms8N)rs8N)ts8N*!s8N)ss8N)os8N)ps8N)ts8N*!s8N)rs8N)qs7lZps8N)rs8N)us8E#q +s8N*!s8N*!s8N)ps8N)us8N)ts8N*!s8N)rs8N*!s8N)ts8N)ts8N(Ms+13$s3q#IklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N*!s8N)ts8N)t +s8N)ms8N)rs8N)ts8N*!s8N)ss8N)os8N)ps8N)ts8N*!s8N)rs8N)qs7lZps8N)rs8N)us8E#q +s8N*!s8N*!s8N)ps8N)us8N)ts8N*!s8N)rs8N*!s8N)ts8N)ts8N(Ms+13$s3q#IirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N*!s8N)ts8N)t +s8N)ms8N)rs8N)ts8N*!s8N)ss8N)os8N)ps8N)ts8N*!s7ZNis7u`ps7ZNms8N)qs8N*!s8N*! +s8N*!s7lZos8N)ts8N*!s7ZNns8N)ts8N)ts8N(Ms+13$s3q#Im/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N*!s8N)ts8N)t +s8N)ms8N)rs8N)ts8N*!s8N)ss8N)os8N)ps8N)ts8N*!s7ZNis7u`ps7ZNms8N)qs8N*!s8N*! +s8N*!s7lZos8N)ts8N*!s7ZNns8N)ts8N)ts8N(Ms+13$s3q#IklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N*!s8N)ts8N)t +s8N)ms8N)rs8N)ts8N*!s8N)ss8N)os8N)ps8N)ts8N*!s7ZNis7u`ps7ZNms8N)qs8N*!s8N*! +s8N*!s7lZos8N)ts8N*!s7ZNns8N)ts8N)ts8N(Ms+13$s3q#IirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N*!s8N)ts8N)t +s8N)ms8N)rs8N)ts8N*!s8N)ss8N)os8N)ps8N)ts8N*!s7ZNis8N)ps7ZNms8N)qs8N*!s8N*! +s8N'!s7cTns8N)ts8N*!s7ZNns8N)ts8N)ts8N(Ms+13$s3q#Im/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N*!s8N)ts8N)t +s8N)ms8N)rs8N)ts8N*!s8N)ss8N)os8N)ps8N)ts8N*!s7ZNis8N)ps7ZNms8N)qs8N*!s8N*! +s8N'!s7cTns8N)ts8N*!s7ZNns8N)ts8N)ts8N(Ms+13$s3q#IklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N*!s8N)ts8N)t +s8N)ms8N)rs8N)ts8N*!s8N)ss8N)os8N)ps8N)ts8N*!s7ZNis8N)ps7ZNms8N)qs8N*!s8N*! +s8N'!s7cTns8N)ts8N*!s7ZNns8N)ts8N)ts8N(Ms+13$s3q#IirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E!,rr<'!rr<'!rr<'!s8E#ts8E#us8N)u +s8E#ss8N)ts8N)ss8N)rs8N)ts8N*!s8E#ts8E#ns8N)ts8N*!s8N)ts8N*!s8E#is8N)ps8E#m +s8N)qs8N*!s8N*!s8N'#rr<&ss8N)us8N)ts8N*!s8E#ns8N)ts8N)ts8N)ts8N(Ms+13$s4RGO +m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E!,rr<'!rr<'!rr<'!s8E#ts8E#us8N)u +s8E#ss8N)ts8N)ss8N)rs8N)ts8N*!s8E#ts8E#ns8N)ts8N*!s8N)ts8N*!s8E#is8N)ps8E#m +s8N)qs8N*!s8N*!s8N'#rr<&ss8N)us8N)ts8N*!s8E#ns8N)ts8N)ts8N)ts8N(Ms+13$s4RGO +klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E!,rr<'!rr<'!rr<'!s8E#ts8E#us8N)u +s8E#ss8N)ts8N)ss8N)rs8N)ts8N*!s8E#ts8E#ns8N)ts8N*!s8N)ts8N*!s8E#is8N)ps8E#m +s8N)qs8N*!s8N*!s8N'#rr<&ss8N)us8N)ts8N*!s8E#ns8N)ts8N)ts8N)ts8N(Ms+13$s4RGO +irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7cTos7lWps8;ots8Duus8Duus7lZos7cTns7lZps7lZps8;rt +s8;rts7lZis7lWps8;rts8;rts7lZks8)fns7lZps7lZps8;ots8Duus7?9ks8;rts8;rts7lZp +s8;rts8;rss7lYGs+13$s4RGOm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7cTos7lWps8;ots8Duus8Duus7lZos7cTns7lZps7lZps8;rt +s8;rts7lZis7lWps8;rts8;rts7lZks8)fns7lZps7lZps8;ots8Duus7?9ks8;rts8;rts7lZp +s8;rts8;rss7lYGs+13$s4RGOklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7cTos7lWps8;ots8Duus8Duus7lZos7cTns7lZps7lZps8;rt +s8;rts7lZis7lWps8;rts8;rts7lZks8)fns7lZps7lZps8;ots8Duus7?9ks8;rts8;rts7lZp +s8;rts8;rss7lYGs+13$s4RGOirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&qs82los8;rss8;ots8Duus8E!#rr<'!r;ccqr;ZitrW)osquH]q +q#LHpr;cltr;cisr;Zp!!!)cnquH`rr;cltr;cfrqZ-KmqZ-HlqZ-Zrq#LHpr;ZitrVururVuru +qu?`srVurur;cltr;cfrqZ-Zrr;cltr;cfrquD +!BU8[l0\NM!!rT)rrE'!rr<&qs82los8;rss8;ots8Duus8E!#rr<'!r;ccqr;ZitrW)osquH]q +q#LHpr;cltr;cisr;Zp!!!)cnquH`rr;cltr;cfrqZ-KmqZ-HlqZ-Zrq#LHpr;ZitrVururVuru +qu?`srVurur;cltr;cfrqZ-Zrr;cltr;cfrquD +!B:&Xj6cmG!!rT)rrE'!rr<&qs82los8;rss8;ots8Duus8E!#rr<'!r;ccqr;ZitrW)osquH]q +q#LHpr;cltr;cisr;Zp!!!)cnquH`rr;cltr;cfrqZ-KmqZ-HlqZ-Zrq#LHpr;ZitrVururVuru +qu?`srVurur;cltr;cfrqZ-Zrr;cltr;cfrquD +!BpJ^mHsrH!8IPR!65'=!.k0$s+13$s2tB@m/bd$J,~> +!BU8[l0\ND!8IPR!65'=!.k0$s+13$s2tB@klK'jJ,~> +!B:&Xj6cm>!8IPR!65'=!.k0$s+13$s2tB@irR%VJ,~> +!BpJ^mHsrH!8IPR!6>-=!.k0$s+13$s2tB@m/bd$J,~> +!BU8[l0\ND!8IPR!6>-=!.k0$s+13$s2tB@klK'jJ,~> +!B:&Xj6cm>!8IPR!6>-=!.k0$s+13$s2tB@irR%VJ,~> +!BpJ^mC`Js!6tQ@!.k0$s+13$s2k +!BU8[l+I&o!6tQ@!.k0$s+13$s2k +!B:&Xj1PEi!6tQ@!.k0$s+13$s2k +!BpJ^mC`Js!6tQA!.k0$s+13$s2b6>m/bd$J,~> +!BU8[l+I&o!6tQA!.k0$s+13$s2b6>klK'jJ,~> +!B:&Xj1PEi!6tQA!.k0$s+13$s2b6>irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mC`Ju!;6Bl!7LoI!;c`q!;c`p!7CiH!.k0$s+134s8MBdeieN~> +!BU8[l+I&q!;6Bl!7LoI!;c`q!;c`p!7CiH!.k0$s+134s8M6`c8pI~> +!B:&Xj1PEk!;6Bl!7LoI!;c`q!;c`p!7CiH!.k0$s+134s8M$Z_`*)~> +!BpJ^mG7g?!<<)s!:9ab!;6Bl!7LoI!;c`q!;c`p!;- +!BU8[l.uC;!<<)s!:9ab!;6Bl!7LoI!;c`q!;c`p!;- +!B:&Xj5'b5!<<)s!:9ab!;6Bl!7LoI!;c`q!;c`p!;- +!BpJ^mHsrH!<)rq!<<)s!:0[b!5&:2!;ZZp!;- +!BU8[l0\ND!<)rq!<<)s!:0[b!5&:2!;ZZp!;- +!B:&Xj6cm>!<)rq!<<)s!:0[b!5&:2!;ZZp!;- +!BpJ^mHsrH!;uls!;lfr!<3#s!<)rr!<<)u!<3#u!<<)t!<3#r!;ulr!!*&t!;ulq!!*&u!;lfp +!<3#s!!*&s!;ulm!<)rt!!*&t!;QTo!;lfr!<3#s!;lfp!!N<%!<<)p!;lfp!<)rr!<<)u!<)ro +!.k0$s+13Zs8MBdeieN~> +!BU8[l0\ND!;uls!;lfr!<3#s!<)rr!<<)u!<3#u!<<)t!<3#r!;ulr!!*&t!;ulq!!*&u!;lfp +!<3#s!!*&s!;ulm!<)rt!!*&t!;QTo!;lfr!<3#s!;lfp!!N<%!<<)p!;lfp!<)rr!<<)u!<)ro +!.k0$s+13Zs8M6`c8pI~> +!B:&Xj6cm>!;uls!;lfr!<3#s!<)rr!<<)u!<3#u!<<)t!<3#r!;ulr!!*&t!;ulq!!*&u!;lfp +!<3#s!!*&s!;ulm!<)rt!!*&t!;QTo!;lfr!<3#s!;lfp!!N<%!<<)p!;lfp!<)rr!<<)u!<)ro +!.k0$s+13Zs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N*!s8N*!s8N'!s7lZps7ZNns8N*!s8;rss82lps7cTns7cTk +s8;rss8;ots82lps7lZns7lZjs8N)rs8N'!s7lZos7lZps7lZns7lZps7ZNns7lYGs+13$s0r%- +m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N*!s8N*!s8N'!s7lZps7ZNns8N*!s8;rss82lps7cTns7cTk +s8;rss8;ots82lps7lZns7lZjs8N)rs8N'!s7lZos7lZps7lZns7lZps7ZNns7lYGs+13$s0r%- +klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N*!s8N*!s8N'!s7lZps7ZNns8N*!s8;rss82lps7cTns7cTk +s8;rss8;ots82lps7lZns7lZjs8N)rs8N'!s7lZos7lZps7lZns7lZps7ZNns7lYGs+13$s0r%- +irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N*!s8N*!s82lqs8E#ts8;rts8N*!s8N'!s8E#os8N)rs8E#t +s8N*!s8E#ts8E#os8N*!rr`?%rr<&ss8N)qs8N)ps8E#ts8N)os8N)ts8N'!s8E#ss8Duus8E#t +s8E#ss8N)qs8E#ss8E#ts8;rts8N*!s8N)ts8N(Ms+13$s0r%-m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N*!s8N*!s82lqs8E#ts8;rts8N*!s8N'!s8E#os8N)rs8E#t +s8N*!s8E#ts8E#os8N*!rr`?%rr<&ss8N)qs8N)ps8E#ts8N)os8N)ts8N'!s8E#ss8Duus8E#t +s8E#ss8N)qs8E#ss8E#ts8;rts8N*!s8N)ts8N(Ms+13$s0r%-klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N*!s8N*!s82lqs8E#ts8;rts8N*!s8N'!s8E#os8N)rs8E#t +s8N*!s8E#ts8E#os8N*!rr`?%rr<&ss8N)qs8N)ps8E#ts8N)os8N)ts8N'!s8E#ss8Duus8E#t +s8E#ss8N)qs8E#ss8E#ts8;rts8N*!s8N)ts8N(Ms+13$s0r%-irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N'!s8;ots8;rps8N)us8E#ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)os8N)ts8N'#rr<&rs8N'#rr<&ss8N)ts8N)q +s8N)rs8N)us8E#ps8;qKs+13$s0Mb)m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N'!s8;ots8;rps8N)us8E#ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)os8N)ts8N'#rr<&rs8N'#rr<&ss8N)ts8N)q +s8N)rs8N)us8E#ps8;qKs+13$s0Mb)klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N'!s8;ots8;rps8N)us8E#ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)os8N)ts8N'#rr<&rs8N'#rr<&ss8N)ts8N)q +s8N)rs8N)us8E#ps8;qKs+13$s0Mb)irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;ots8;rps8N)us8N)ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)ns8N*!s8N*!s7ZKprr<&ms8N)qs8N)rs8N)u +s8N)os8)eIs+13$s0ht,m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;ots8;rps8N)us8N)ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)ns8N*!s8N*!s7ZKprr<&ms8N)qs8N)rs8N)u +s8N)os8)eIs+13$s0ht,klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;ots8;rps8N)us8N)ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)ns8N*!s8N*!s7ZKprr<&ms8N)qs8N)rs8N)u +s8N)os8)eIs+13$s0ht,irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8E#us8E!"rr<&rs8N)us8N)ps8N'!s8E#os8N)rs8N)ts8N*! +s8N)ss8N)os8Duus8E#qs8N)qs8N)ps8N)ts8N)ns8N*!s8N*!s7ZKprr<&ms8N)qs8N)rs8N)u +s8N)ms82kJs+13$s0r%-m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8E#us8E!"rr<&rs8N)us8N)ps8N'!s8E#os8N)rs8N)ts8N*! +s8N)ss8N)os8Duus8E#qs8N)qs8N)ps8N)ts8N)ns8N*!s8N*!s7ZKprr<&ms8N)qs8N)rs8N)u +s8N)ms82kJs+13$s0r%-klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8E#us8E!"rr<&rs8N)us8N)ps8N'!s8E#os8N)rs8N)ts8N*! +s8N)ss8N)os8Duus8E#qs8N)qs8N)ps8N)ts8N)ns8N*!s8N*!s7ZKprr<&ms8N)qs8N)rs8N)u +s8N)ms82kJs+13$s0r%-irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8E#us8Duus8E#ss8E#ts8N)ps8N*!s8E#ps8N)rs8N)ts8N*! +s8E#ts8E#ns8Duus8E#qs8N)qs8N)ts8N*!s8N)ts8N)ms8;rss8E#os8E#ss8E#ts8N)ts8N'! +s8E#ss8E#ts8N)ps8N)ts8N(Ms+13$s0r%-m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8E#us8Duus8E#ss8E#ts8N)ps8N*!s8E#ps8N)rs8N)ts8N*! +s8E#ts8E#ns8Duus8E#qs8N)qs8N)ts8N*!s8N)ts8N)ms8;rss8E#os8E#ss8E#ts8N)ts8N'! +s8E#ss8E#ts8N)ps8N)ts8N(Ms+13$s0r%-klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8E#us8Duus8E#ss8E#ts8N)ps8N*!s8E#ps8N)rs8N)ts8N*! +s8E#ts8E#ns8Duus8E#qs8N)qs8N)ts8N*!s8N)ts8N)ms8;rss8E#os8E#ss8E#ts8N)ts8N'! +s8E#ss8E#ts8N)ps8N)ts8N(Ms+13$s0r%-irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N*!s7lZps7lZos8E#ts8;rts7lZps8;rts8;rts7lZi +s8N)us8N)us7lZns7lWps8;rts8;rls8;rrs7lZos7cTns7lZps7lZps7lZns7lYGs+13$s0r%- +m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N*!s7lZps7lZos8E#ts8;rts7lZps8;rts8;rts7lZi +s8N)us8N)us7lZns7lWps8;rts8;rls8;rrs7lZos7cTns7lZps7lZps7lZns7lYGs+13$s0r%- +klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N*!s7lZps7lZos8E#ts8;rts7lZps8;rts8;rts7lZi +s8N)us8N)us7lZns7lWps8;rts8;rls8;rrs7lZos7cTns7lZps7lZps7lZns7lYGs+13$s0r%- +irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N)ts8;rrs7lZos8E#ts8;rts7lZps8;rts8;rss8;p! +rr<&os8N)us8N)us7lZms82lrs8;rts8;rks8N)qs8)fps8)fns82los8;rrs7lZns7u_Hs+13$ +s0ht,m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N)ts8;rrs7lZos8E#ts8;rts7lZps8;rts8;rss8;p! +rr<&os8N)us8N)us7lZms82lrs8;rts8;rks8N)qs8)fps8)fns82los8;rrs7lZns7u_Hs+13$ +s0ht,klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N)ts8;rrs7lZos8E#ts8;rts7lZps8;rts8;rss8;p! +rr<&os8N)us8N)us7lZms82lrs8;rts8;rks8N)qs8)fps8)fns82los8;rrs7lZns7u_Hs+13$ +s0ht,irR%VJ,~> +!BpJ^mHsrH!4;e+!.k0$s+13$s0Vh*m/bd$J,~> +!BU8[l0\ND!4;e+!.k0$s+13$s0Vh*klK'jJ,~> +!B:&Xj6cm>!4;e+!.k0$s+13$s0Vh*irR%VJ,~> +!BpJ^mHsrH!4Dk+!.k0$s+13$s0Vh*m/bd$J,~> +!BU8[l0\ND!4Dk+!.k0$s+13$s0Vh*klK'jJ,~> +!B:&Xj6cm>!4Dk+!.k0$s+13$s0Vh*irR%VJ,~> +!BpJ^m@""O!.k0$s+13$s0Mb)m/bd$J,~> +!BU8[l'_SK!.k0$s+13$s0Mb)klK'jJ,~> +!B:&Xj-frE!.k0$s+13$s0Mb)irR%VJ,~> +!BpJ^m@""P!.k0$s+13$s0D\(m/bd$J,~> +!BU8[l'_SL!.k0$s+13$s0D\(klK'jJ,~> +!B:&Xj-frF!.k0$s+13$s0D\(irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mC`Ju!;6Bl!7LoI!;c`q!;c`p!1!Ta!:0[b!.k0$s+143s8MBdeieN~> +!BU8[l+I&q!;6Bl!7LoI!;c`q!;c`p!1!Ta!:0[b!.k0$s+143s8M6`c8pI~> +!B:&Xj1PEk!;6Bl!7LoI!;c`q!;c`p!1!Ta!:0[b!.k0$s+143s8M$Z_`*)~> +!BpJ^mG7g?!<<)s!:9ab!;6Bl!7LoI!;c`q!;c`p!:g*f!!<0#!6"p:!;ulr!;- +!BU8[l.uC;!<<)s!:9ab!;6Bl!7LoI!;c`q!;c`p!:g*f!!<0#!6"p:!;ulr!;- +!B:&Xj5'b5!<<)s!:9ab!;6Bl!7LoI!;c`q!;c`p!:g*f!!<0#!6"p:!;ulr!;- +!BpJ^mHsrH!<)rq!<<)s!:0[b!5&:2!;ZZp!;$6c!6"p:!;ulr!;- +!BU8[l0\ND!<)rq!<<)s!:0[b!5&:2!;ZZp!;$6c!6"p:!;ulr!;- +!B:&Xj6cm>!<)rq!<<)s!:0[b!5&:2!;ZZp!;$6c!6"p:!;ulr!;- +!BpJ^mHsrH!;uls!;lfr!<3#s!<)rr!<<)u!<3#u!<<)t!<3#r!;ulr!!*&t!;ulq!!*&u!;lfp +!<3#s!!*&s!;ulm!<)rt!!*&t!;QTo!<)rs!<3#s!!*&u!!*&u!<<)t!<)rp!<3#s!<<)u!;ulq +!;HNm!<3#t!<3#q!<3#o!<3#s!<<)u!<3#r!;c`o!!<0#!;ulq!;lfm!.k0$s,$dTm/bd$J,~> +!BU8[l0\ND!;uls!;lfr!<3#s!<)rr!<<)u!<3#u!<<)t!<3#r!;ulr!!*&t!;ulq!!*&u!;lfp +!<3#s!!*&s!;ulm!<)rt!!*&t!;QTo!<)rs!<3#s!!*&u!!*&u!<<)t!<)rp!<3#s!<<)u!;ulq +!;HNm!<3#t!<3#q!<3#o!<3#s!<<)u!<3#r!;c`o!!<0#!;ulq!;lfm!.k0$s,$dTklK'jJ,~> +!B:&Xj6cm>!;uls!;lfr!<3#s!<)rr!<<)u!<3#u!<<)t!<3#r!;ulr!!*&t!;ulq!!*&u!;lfp +!<3#s!!*&s!;ulm!<)rt!!*&t!;QTo!<)rs!<3#s!!*&u!!*&u!<<)t!<)rp!<3#s!<<)u!;ulq +!;HNm!<3#t!<3#q!<3#o!<3#s!<<)u!<3#r!;c`o!!<0#!;ulq!;lfm!.k0$s,$dTirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N*!s8N*!s8N'!s7lZps7ZNns8N*!s8;rss82lps7cTns7cTk +s8;rss8;ots82lps7lZns7lZjs8N)ss8N*!s7cQos8E#us8;rss7lZps7ZNns7lZjs8E#ts8E#u +s7lZps7lZos7ZNns82los7lZos7lZos7lYGs+13,s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N*!s8N*!s8N'!s7lZps7ZNns8N*!s8;rss82lps7cTns7cTk +s8;rss8;ots82lps7lZns7lZjs8N)ss8N*!s7cQos8E#us8;rss7lZps7ZNns7lZjs8E#ts8E#u +s7lZps7lZos7ZNns82los7lZos7lZos7lYGs+13,s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N*!s8N*!s8N'!s7lZps7ZNns8N*!s8;rss82lps7cTns7cTk +s8;rss8;ots82lps7lZns7lZjs8N)ss8N*!s7cQos8E#us8;rss7lZps7ZNns7lZjs8E#ts8E#u +s7lZps7lZos7ZNns82los7lZos7lZos7lYGs+13,s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N*!s8N*!s82lqs8E#ts8;rts8N*!s8N'!s8E#os8N)rs8E#t +s8N*!s8E#ts8E#os8N*!rr`?%rr<&ss8N)qs8N)ps8E#ts8N)ps82lps8E#ts8E#ts8N)ts8N)u +s8N)ts8N)ts8;rts8N'!s8E#ss8E#ps8;ots8;rts8N)ts8N)ts8N)os8;rts8N)ss8N)ss8E#t +s8E#us8E#ss8E#us8N)ts8N(Ms+13,s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N*!s8N*!s82lqs8E#ts8;rts8N*!s8N'!s8E#os8N)rs8E#t +s8N*!s8E#ts8E#os8N*!rr`?%rr<&ss8N)qs8N)ps8E#ts8N)ps82lps8E#ts8E#ts8N)ts8N)u +s8N)ts8N)ts8;rts8N'!s8E#ss8E#ps8;ots8;rts8N)ts8N)ts8N)os8;rts8N)ss8N)ss8E#t +s8E#us8E#ss8E#us8N)ts8N(Ms+13,s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N*!s8N*!s82lqs8E#ts8;rts8N*!s8N'!s8E#os8N)rs8E#t +s8N*!s8E#ts8E#os8N*!rr`?%rr<&ss8N)qs8N)ps8E#ts8N)ps82lps8E#ts8E#ts8N)ts8N)u +s8N)ts8N)ts8;rts8N'!s8E#ss8E#ps8;ots8;rts8N)ts8N)ts8N)os8;rts8N)ss8N)ss8E#t +s8E#us8E#ss8E#us8N)ts8N(Ms+13,s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N'!s8;ots8;rps8N)us8E#ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)os7u`qs8N)ss8N)us8N)ts8N)os8N)ts8E#q +s8N)rs8N)qs7cTis8N)ts8N)os8E#ms8N)ss8N)ss8N*!s8N)rs8N*!s8;qKs+13(s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N'!s8;ots8;rps8N)us8E#ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)os7u`qs8N)ss8N)us8N)ts8N)os8N)ts8E#q +s8N)rs8N)qs7cTis8N)ts8N)os8E#ms8N)ss8N)ss8N*!s8N)rs8N*!s8;qKs+13(s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N'!s8;ots8;rps8N)us8E#ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)os7u`qs8N)ss8N)us8N)ts8N)os8N)ts8E#q +s8N)rs8N)qs7cTis8N)ts8N)os8E#ms8N)ss8N)ss8N*!s8N)rs8N*!s8;qKs+13(s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;ots8;rps8N)us8N)ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)ls82iurr<&ss8N)us8N)ts8N)us7lZns8N)q +s7ZNis8N'!s8E!$rr<'!s7lZns8N)os8N)ms8N)ss8N)os7ZNms8)eIs+13+s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;ots8;rps8N)us8N)ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)ls82iurr<&ss8N)us8N)ts8N)us7lZns8N)q +s7ZNis8N'!s8E!$rr<'!s7lZns8N)os8N)ms8N)ss8N)os7ZNms8)eIs+13+s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;ots8;rps8N)us8N)ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)ls82iurr<&ss8N)us8N)ts8N)us7lZns8N)q +s7ZNis8N'!s8E!$rr<'!s7lZns8N)os8N)ms8N)ss8N)os7ZNms8)eIs+13+s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8E#us8E!"rr<&rs8N)us8N)ps8N'!s8E#os8N)rs8N)ts8N*! +s8N)ss8N)os8Duus8E#qs8N)qs8N)ps8N)ts8N)ps8N)ss8N'#rr<&ss8N)us8N)ts8N*!s7cTm +s8N)qs7ZNis8N*!rriE&rr<'!p]19mrrDiorrDcmrrDusrrDiopAk-kquD +!BU8[l0\NN!!`H'rrE'!s8E#qs8E#us8E!"rr<&rs8N)us8N)ps8N'!s8E#os8N)rs8N)ts8N*! +s8N)ss8N)os8Duus8E#qs8N)qs8N)ps8N)ts8N)ps8N)ss8N'#rr<&ss8N)us8N)ts8N*!s7cTm +s8N)qs7ZNis8N*!rriE&rr<'!p]19mrrDiorrDcmrrDusrrDiopAk-kquD +!B:&Xj6cmH!!`H'rrE'!s8E#qs8E#us8E!"rr<&rs8N)us8N)ps8N'!s8E#os8N)rs8N)ts8N*! +s8N)ss8N)os8Duus8E#qs8N)qs8N)ps8N)ts8N)ps8N)ss8N'#rr<&ss8N)us8N)ts8N*!s7cTm +s8N)qs7ZNis8N*!rriE&rr<'!p]19mrrDiorrDcmrrDusrrDiopAk-kquD +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8E#us8Duus8E#ss8E#ts8N)ps8N*!s8E#ps8N)rs8N)ts8N*! +s8E#ts8E#ns8Duus8E#qs8N)qs8N)ts8N*!s8N)ts8N)ps8;rss8N'!s8E#ts8E#ts8N)us8E#u +s8N)ss8N)ts8N)qs8E#is8N)ss8N'#rr<&ss8N)ts8N)ts8N)us8N)ms8N)ss8E#ss8Duus8E#n +s8N)ts8N(Ms+13,s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8E#us8Duus8E#ss8E#ts8N)ps8N*!s8E#ps8N)rs8N)ts8N*! +s8E#ts8E#ns8Duus8E#qs8N)qs8N)ts8N*!s8N)ts8N)ps8;rss8N'!s8E#ts8E#ts8N)us8E#u +s8N)ss8N)ts8N)qs8E#is8N)ss8N'#rr<&ss8N)ts8N)ts8N)us8N)ms8N)ss8E#ss8Duus8E#n +s8N)ts8N(Ms+13,s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8E#us8Duus8E#ss8E#ts8N)ps8N*!s8E#ps8N)rs8N)ts8N*! +s8E#ts8E#ns8Duus8E#qs8N)qs8N)ts8N*!s8N)ts8N)ps8;rss8N'!s8E#ts8E#ts8N)us8E#u +s8N)ss8N)ts8N)qs8E#is8N)ss8N'#rr<&ss8N)ts8N)ts8N)us8N)ms8N)ss8E#ss8Duus8E#n +s8N)ts8N(Ms+13,s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N*!s7lZps7lZos8E#ts8;rts7lZps8;rts8;rts7lZi +s8N)us8N)us7lZns7lWps8;rts8;ros7lZos7lZos7cQos7ZKns7lZns7lZks82iss7-0hs7lWp +s7lZns7lZos7cTos7lZos7lYGs+13,s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N*!s7lZps7lZos8E#ts8;rts7lZps8;rts8;rts7lZi +s8N)us8N)us7lZns7lWps8;rts8;ros7lZos7lZos7cQos7ZKns7lZns7lZks82iss7-0hs7lWp +s7lZns7lZos7cTos7lZos7lYGs+13,s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N*!s7lZps7lZos8E#ts8;rts7lZps8;rts8;rts7lZi +s8N)us8N)us7lZns7lWps8;rts8;ros7lZos7lZos7cQos7ZKns7lZns7lZks82iss7-0hs7lWp +s7lZns7lZos7cTos7lZos7lYGs+13,s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N)ts8;rrs7lZos8E#ts8;rts7lZps8;rts8;rss8;p! +rr<&os8N)us8N)us7lZms82lrs8;rts8;ros8N'!s8;rqs8;p!rr<&ts8;ots8E#us82iss8Duu +s7lZls8)fms82iss82iss82iss8E#ss82lrs7lZns7lZns8)fns8)fqs7u_Hs+13+s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N)ts8;rrs7lZos8E#ts8;rts7lZps8;rts8;rss8;p! +rr<&os8N)us8N)us7lZms82lrs8;rts8;ros8N'!s8;rqs8;p!rr<&ts8;ots8E#us82iss8Duu +s7lZls8)fms82iss82iss82iss8E#ss82lrs7lZns7lZns8)fns8)fqs7u_Hs+13+s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N)ts8;rrs7lZos8E#ts8;rts7lZps8;rts8;rss8;p! +rr<&os8N)us8N)us7lZms82lrs8;rts8;ros8N'!s8;rqs8;p!rr<&ts8;ots8E#us82iss8Duu +s7lZls8)fms82iss82iss82iss8E#ss82lrs7lZns7lZns8)fns8)fqs7u_Hs+13+s8M$Z_`*)~> +!BpJ^mHsrH!4;e+!4W".!.k0$s+13$rrE)um/bd$J,~> +!BU8[l0\ND!4;e+!4W".!.k0$s+13$rrE)uklK'jJ,~> +!B:&Xj6cm>!4;e+!4W".!.k0$s+13$rrE)uirR%VJ,~> +!BpJ^mHsrH!4Dk+!4W".!.k0$s+13$rrE)um/bd$J,~> +!BU8[l0\ND!4Dk+!4W".!.k0$s+13$rrE)uklK'jJ,~> +!B:&Xj6cm>!4Dk+!4W".!.k0$s+13$rrE)uirR%VJ,~> +!BpJ^m@""O!4`(,!.k0$s+13$s8MBdeieN~> +!BU8[l'_SK!4`(,!.k0$s+13$s8M6`c8pI~> +!B:&Xj-frE!4`(,!.k0$s+13$s8M$Z_`*)~> +!BpJ^m@""P!4W"+!.k0$s+13$s8MBdeieN~> +!BU8[l'_SL!4W"+!.k0$s+13$s8M6`c8pI~> +!B:&Xj-frF!4W"+!.k0$s+13$s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mC`Ju!;6Bl!7LoI!;c`q!;c`p!4i.0!6kKC!8@JN!.k0$s,@!Wm/bd$J,~> +!BU8[l+I&q!;6Bl!7LoI!;c`q!;c`p!4i.0!6kKC!8@JN!.k0$s,@!WklK'jJ,~> +!B:&Xj1PEk!;6Bl!7LoI!;c`q!;c`p!4i.0!6kKC!8@JN!.k0$s,@!WirR%VJ,~> +!BpJ^mG7g?!<<)s!:9ab!;6Bl!7LoI!;c`q!;c`p!:g*f!8RVN!;ZZp!6kKC!8@JN!;?Hj!.k0$ +s.',gm/bd$J,~> +!BU8[l.uC;!<<)s!:9ab!;6Bl!7LoI!;c`q!;c`p!:g*f!8RVN!;ZZp!6kKC!8@JN!;?Hj!.k0$ +s.',gklK'jJ,~> +!B:&Xj5'b5!<<)s!:9ab!;6Bl!7LoI!;c`q!;c`p!:g*f!8RVN!;ZZp!6kKC!8@JN!;?Hj!.k0$ +s.',girR%VJ,~> +!BpJ^mHsrH!<)rq!<<)s!:0[b!5&:2!;ZZp!;$6d!8dbN!1 +!BU8[l0\ND!<)rq!<<)s!:0[b!5&:2!;ZZp!;$6d!8dbN!1 +!B:&Xj6cm>!<)rq!<<)s!:0[b!5&:2!;ZZp!;$6d!8dbN!1 +!BpJ^mHsrH!;uls!;lfr!<3#s!<)rr!<<)u!<3#u!<<)t!<3#r!;ulr!!*&t!;ulq!!*&u!;lfp +!<3#s!!*&s!;ulm!<)rt!!*&t!;QTo!<)rt!<<)u!!*&t!;lfp!:g*h!<)rt!<3#r!<)rs!!E6$ +!<<#ur;Z]qrVuis!<;utr;ZTnrr;lrq>^BnrVuis!<;utr;ZWoqZ$Qqo`+jirVufrs8W&us8W#t +s8W&urVu`prr;oss8W#trr;fpJcC<$f)Pa:!S0Da~> +!BU8[l0\ND!;uls!;lfr!<3#s!<)rr!<<)u!<3#u!<<)t!<3#r!;ulr!!*&t!;ulq!!*&u!;lfp +!<3#s!!*&s!;ulm!<)rt!!*&t!;QTo!<)rt!<<)u!!*&t!;lfp!:g*h!<)rt!<3#r!<)rs!!E6$ +!<<#ur;Z]qrVuis!<;utr;ZTnrr;lrq>^BnrVuis!<;utr;ZWoqZ$Qqo`+jirVufrs8W&us8W#t +s8W&urVu`prr;oss8W#trr;fpJcC<$f)Pa6!R<`V~> +!B:&Xj6cm>!;uls!;lfr!<3#s!<)rr!<<)u!<3#u!<<)t!<3#r!;ulr!!*&t!;ulq!!*&u!;lfp +!<3#s!!*&s!;ulm!<)rt!!*&t!;QTo!<)rt!<<)u!!*&t!;lfp!:g*h!<)rt!<3#r!<)rs!!E6$ +!<<#ur;Z]qrVuis!<;utr;ZTnrr;lrq>^BnrVuis!<;utr;ZWoqZ$Qqo`+jirVufrs8W&us8W#t +s8W&urVu`prr;oss8W#trr;fpJcC<$f)Pa0!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N*!s8N*!s8N'!s7lZps7ZNns8N*!s8;rss82lps7cTns7cTk +s8;rss8;ots82lps7lZns7lZks8N)rs8N'!s7cTns7lZds8N)ss8N*!s82lqs7QHms7lZps7cTn +s7lZos82los7lZps7cTns7lZls8N)ks8;rrs7ZKns7ZNns7lZps8;rts8;rts7lYGs+14$s8MBd +eieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N*!s8N*!s8N'!s7lZps7ZNns8N*!s8;rss82lps7cTns7cTk +s8;rss8;ots82lps7lZns7lZks8N)rs8N'!s7cTns7lZds8N)ss8N*!s82lqs7QHms7lZps7cTn +s7lZos82los7lZps7cTns7lZls8N)ks8;rrs7ZKns7ZNns7lZps8;rts8;rts7lYGs+14$s8M6` +c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N*!s8N*!s8N'!s7lZps7ZNns8N*!s8;rss82lps7cTns7cTk +s8;rss8;ots82lps7lZns7lZks8N)rs8N'!s7cTns7lZds8N)ss8N*!s82lqs7QHms7lZps7cTn +s7lZos82los7lZps7cTns7lZls8N)ks8;rrs7ZKns7ZNns7lZps8;rts8;rts7lYGs+14$s8M$Z +_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N*!s8N*!s82lqs8E#ts8;rts8N*!s8N'!s8E#os8N)rs8E#t +s8N*!s8E#ts8E#os8N*!rr`?%rr<&ss8N)qs8N)ps8E#ts8N)qs8N)rs8N*!s8E#ts8N*!s8E#s +s8E#js8N)ss8N)ss8N)ss8Duus8E!#rr<'!rW)osrW)uurW)rtrrE&urrE#trrDrrrrDusrW)os +rW)uurW)rtrrE&urrE#trrDrrrrD`lrrE*!rrDusr;cltrrE&ur;cltrrE*!rrE#trrE&urrE#t +rrE&urrE#trr@WMJcF=$rp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N*!s8N*!s82lqs8E#ts8;rts8N*!s8N'!s8E#os8N)rs8E#t +s8N*!s8E#ts8E#os8N*!rr`?%rr<&ss8N)qs8N)ps8E#ts8N)qs8N)rs8N*!s8E#ts8N*!s8E#s +s8E#js8N)ss8N)ss8N)ss8Duus8E!#rr<'!rW)osrW)uurW)rtrrE&urrE#trrDrrrrDusrW)os +rW)uurW)rtrrE&urrE#trrDrrrrD`lrrE*!rrDusr;cltrrE&ur;cltrrE*!rrE#trrE&urrE#t +rrE&urrE#trr@WMJcF=$rojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N*!s8N*!s82lqs8E#ts8;rts8N*!s8N'!s8E#os8N)rs8E#t +s8N*!s8E#ts8E#os8N*!rr`?%rr<&ss8N)qs8N)ps8E#ts8N)qs8N)rs8N*!s8E#ts8N*!s8E#s +s8E#js8N)ss8N)ss8N)ss8Duus8E!#rr<'!rW)osrW)uurW)rtrrE&urrE#trrDrrrrDusrW)os +rW)uurW)rtrrE&urrE#trrDrrrrD`lrrE*!rrDusr;cltrrE&ur;cltrrE*!rrE#trrE&urrE#t +rrE&urrE#trr@WMJcF=$ro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N'!s8;ots8;rps8N)us8E#ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)qs8N)rs8N*!s8N)ts8N*!s8N)rs8N*!s7cTo +s8N)ss8N)ss8N)ss8N*!s8N*!s8N'#rr<&rs8N*!s8N)ts8N)us8;rls8N)ss8N)rs8N*!s8N)t +s8N)os8N)rs8N)ls8N*!s8N)ss8E#os8E#js8N)us8N)ts8N)us8;qKs+13us8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N'!s8;ots8;rps8N)us8E#ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)qs8N)rs8N*!s8N)ts8N*!s8N)rs8N*!s7cTo +s8N)ss8N)ss8N)ss8N*!s8N*!s8N'#rr<&rs8N*!s8N)ts8N)us8;rls8N)ss8N)rs8N*!s8N)t +s8N)os8N)rs8N)ls8N*!s8N)ss8E#os8E#js8N)us8N)ts8N)us8;qKs+13us8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N'!s8;ots8;rps8N)us8E#ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)qs8N)rs8N*!s8N)ts8N*!s8N)rs8N*!s7cTo +s8N)ss8N)ss8N)ss8N*!s8N*!s8N'#rr<&rs8N*!s8N)ts8N)us8;rls8N)ss8N)rs8N*!s8N)t +s8N)os8N)rs8N)ls8N*!s8N)ss8E#os8E#js8N)us8N)ts8N)us8;qKs+13us8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;ots8;rps8N)us8N)ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)qs8N)rs8N*!s8N)ts8N*!s7ZNns7cTos8N)s +s8N)ss8N)ss8N*!s8N*!s8N'!s7ZNns8N)ts8N)ts8)fms8N)ss8N)rs8N*!s8N)ts8N)us7lZl +s8N)ms7lZns8N)os8N)ps7lZns8N*!s8N)ss8)eIs+14#s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;ots8;rps8N)us8N)ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)qs8N)rs8N*!s8N)ts8N*!s7ZNns7cTos8N)s +s8N)ss8N)ss8N*!s8N*!s8N'!s7ZNns8N)ts8N)ts8)fms8N)ss8N)rs8N*!s8N)ts8N)us7lZl +s8N)ms7lZns8N)os8N)ps7lZns8N*!s8N)ss8)eIs+14#s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;ots8;rps8N)us8N)ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)qs8N)rs8N*!s8N)ts8N*!s7ZNns7cTos8N)s +s8N)ss8N)ss8N*!s8N*!s8N'!s7ZNns8N)ts8N)ts8)fms8N)ss8N)rs8N*!s8N)ts8N)us7lZl +s8N)ms7lZns8N)os8N)ps7lZns8N*!s8N)ss8)eIs+14#s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8E#us8E!"rr<&rs8N)us8N)ps8N'!s8E#os8N)rs8N)ts8N*! +s8N)ss8N)os8Duus8E#qs8N)qs8N)ps8N)ts8N)qs8N)rs8N*!s8N)ts8N*!s7ZNcs8N)ss8N)s +s8N)ss8N*!s8N*!s8N'!s7ZNns8N)ts8N)rs82los8N)ss8N)rs8N*!s8N)ts8N*!s7cTks8N)m +s7lZns8N)os8N)qs7cTms8N'#rr<&ps82kJs+14$s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8E#us8E!"rr<&rs8N)us8N)ps8N'!s8E#os8N)rs8N)ts8N*! +s8N)ss8N)os8Duus8E#qs8N)qs8N)ps8N)ts8N)qs8N)rs8N*!s8N)ts8N*!s7ZNcs8N)ss8N)s +s8N)ss8N*!s8N*!s8N'!s7ZNns8N)ts8N)rs82los8N)ss8N)rs8N*!s8N)ts8N*!s7cTks8N)m +s7lZns8N)os8N)qs7cTms8N'#rr<&ps82kJs+14$s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8E#us8E!"rr<&rs8N)us8N)ps8N'!s8E#os8N)rs8N)ts8N*! +s8N)ss8N)os8Duus8E#qs8N)qs8N)ps8N)ts8N)qs8N)rs8N*!s8N)ts8N*!s7ZNcs8N)ss8N)s +s8N)ss8N*!s8N*!s8N'!s7ZNns8N)ts8N)rs82los8N)ss8N)rs8N*!s8N)ts8N*!s7cTks8N)m +s7lZns8N)os8N)qs7cTms8N'#rr<&ps82kJs+14$s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8E#us8Duus8E#ss8E#ts8N)ps8N*!s8E#ps8N)rs8N)ts8N*! +s8E#ts8E#ns8Duus8E#qs8N)qs8N)ts8N*!s8N)ts8N)ps8N)ts8N)us8N)ts8N*!s8E#cs8N)t +s8N)rs8N)ss8N*!s8N*!s8N'!s8E#ns8N)ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N*! +s8N)ss8N)rs8N)ms8N)ts8N)ts8N)os8N)qs8N)ss8N)ss8;rqs8N)ts8N(Ms+14$s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8E#us8Duus8E#ss8E#ts8N)ps8N*!s8E#ps8N)rs8N)ts8N*! +s8E#ts8E#ns8Duus8E#qs8N)qs8N)ts8N*!s8N)ts8N)ps8N)ts8N)us8N)ts8N*!s8E#cs8N)t +s8N)rs8N)ss8N*!s8N*!s8N'!s8E#ns8N)ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N*! +s8N)ss8N)rs8N)ms8N)ts8N)ts8N)os8N)qs8N)ss8N)ss8;rqs8N)ts8N(Ms+14$s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8E#us8Duus8E#ss8E#ts8N)ps8N*!s8E#ps8N)rs8N)ts8N*! +s8E#ts8E#ns8Duus8E#qs8N)qs8N)ts8N*!s8N)ts8N)ps8N)ts8N)us8N)ts8N*!s8E#cs8N)t +s8N)rs8N)ss8N*!s8N*!s8N'!s8E#ns8N)ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N*! +s8N)ss8N)rs8N)ms8N)ts8N)ts8N)os8N)qs8N)ss8N)ss8;rqs8N)ts8N(Ms+14$s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N*!s7lZps7lZos8E#ts8;rts7lZps8;rts8;rts7lZi +s8N)us8N)us7lZns7lWps8;rts8;ros7lZps8;rts8;rts7lZes7cTns7lWps8;ots8Duus8Duu +s7lZps8;rts8;rts7lZos7lZos7lZps8;rts8;ots7ZNns7lZls82lss7? +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N*!s7lZps7lZos8E#ts8;rts7lZps8;rts8;rts7lZi +s8N)us8N)us7lZns7lWps8;rts8;ros7lZps8;rts8;rts7lZes7cTns7lWps8;ots8Duus8Duu +s7lZps8;rts8;rts7lZos7lZos7lZps8;rts8;ots7ZNns7lZls82lss7? +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N*!s7lZps7lZos8E#ts8;rts7lZps8;rts8;rts7lZi +s8N)us8N)us7lZns7lWps8;rts8;ros7lZps8;rts8;rts7lZes7cTns7lWps8;ots8Duus8Duu +s7lZps8;rts8;rts7lZos7lZos7lZps8;rts8;ots7ZNns7lZls82lss7? +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N)ts8;rrs7lZos8E#ts8;rts7lZps8;rts8;rss8;p! +rr<&os8N)us8N)us7lZms82lrs8;rts8;rms8;rrs8;rts8;rrs8)fgs7u`ns7lWps8;ots8Duu +s8E#ts8)frs8;rts8;rts7u`os7lZms8;rrs8;rts8;rts82iss8E#us7lZls82lss7? +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N)ts8;rrs7lZos8E#ts8;rts7lZps8;rts8;rss8;p! +rr<&os8N)us8N)us7lZms82lrs8;rts8;rms8;rrs8;rts8;rrs8)fgs7u`ns7lWps8;ots8Duu +s8E#ts8)frs8;rts8;rts7u`os7lZms8;rrs8;rts8;rts82iss8E#us7lZls82lss7? +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N)ts8;rrs7lZos8E#ts8;rts7lZps8;rts8;rss8;p! +rr<&os8N)us8N)us7lZms82lrs8;rts8;rms8;rrs8;rts8;rrs8)fgs7u`ns7lWps8;ots8Duu +s8E#ts8)frs8;rts8;rts7u`os7lZms8;rrs8;rts8;rts82iss8E#us7lZls82lss7? +!BpJ^mHsrH!4;e+!.k0$s7$'g!.k0$s2Y0=m/bd$J,~> +!BU8[l0\ND!4;e+!.k0$s7$'g!.k0$s2Y0=klK'jJ,~> +!B:&Xj6cm>!4;e+!.k0$s7$'g!.k0$s2Y0=irR%VJ,~> +!BpJ^mHsrH!4Dk+!.k0$s7--h!.k0$s2P* +!BU8[l0\ND!4Dk+!.k0$s7--h!.k0$s2P* +!B:&Xj6cm>!4Dk+!.k0$s7--h!.k0$s2P* +!BpJ^m@""O!.k0$s763e!.k0$s2b6>m/bd$J,~> +!BU8[l'_SK!.k0$s763e!.k0$s2b6>klK'jJ,~> +!B:&Xj-frE!.k0$s763e!.k0$s2b6>irR%VJ,~> +!BpJ^m@""P!.k0$s7--d!.k0$s2b6>m/bd$J,~> +!BU8[l'_SL!.k0$s7--d!.k0$s2b6>klK'jJ,~> +!B:&Xj-frF!.k0$s7--d!.k0$s2b6>irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mC`Ju!;6Bl!7LoI!;c`q!;c`p!4i.0!6kKC!8@JN!.k0$s,@!Wm/bd$J,~> +!BU8[l+I&q!;6Bl!7LoI!;c`q!;c`p!4i.0!6kKC!8@JN!.k0$s,@!WklK'jJ,~> +!B:&Xj1PEk!;6Bl!7LoI!;c`q!;c`p!4i.0!6kKC!8@JN!.k0$s,@!WirR%VJ,~> +!BpJ^mG7g?!<<)s!:9ab!;6Bl!7LoI!;c`q!;c`p!;- +!BU8[l.uC;!<<)s!:9ab!;6Bl!7LoI!;c`q!;c`p!;- +!B:&Xj5'b5!<<)s!:9ab!;6Bl!7LoI!;c`q!;c`p!;- +!BpJ^mHsrH!<)rq!<<)s!:0[b!5&:2!;ZZp!;- +!BU8[l0\ND!<)rq!<<)s!:0[b!5&:2!;ZZp!;- +!B:&Xj6cm>!<)rq!<<)s!:0[b!5&:2!;ZZp!;- +!BpJ^mHsrH!;uls!;lfr!<3#s!<)rr!<<)u!<3#u!<<)t!<3#r!;ulr!!*&t!;ulq!!*&u!;lfp +!<3#s!!*&s!;ulm!<)rt!!*&t!;ZZp!<<*!!<<*!!!*&t!<3#s!<3#s!:g*h!<)rt!<3#r!<)rs +!!E6$!<<#ur;Z]qrVuis!<;utr;ZTnrr;lrq>^BnrVuis!<;utr;ZWoqZ$Qqo`+jirVufrs8W&u +s8W#ts8W&urVu`prr;oss8W#trr;fpJcC<$f)Pa:!S0Da~> +!BU8[l0\ND!;uls!;lfr!<3#s!<)rr!<<)u!<3#u!<<)t!<3#r!;ulr!!*&t!;ulq!!*&u!;lfp +!<3#s!!*&s!;ulm!<)rt!!*&t!;ZZp!<<*!!<<*!!!*&t!<3#s!<3#s!:g*h!<)rt!<3#r!<)rs +!!E6$!<<#ur;Z]qrVuis!<;utr;ZTnrr;lrq>^BnrVuis!<;utr;ZWoqZ$Qqo`+jirVufrs8W&u +s8W#ts8W&urVu`prr;oss8W#trr;fpJcC<$f)Pa6!R<`V~> +!B:&Xj6cm>!;uls!;lfr!<3#s!<)rr!<<)u!<3#u!<<)t!<3#r!;ulr!!*&t!;ulq!!*&u!;lfp +!<3#s!!*&s!;ulm!<)rt!!*&t!;ZZp!<<*!!<<*!!!*&t!<3#s!<3#s!:g*h!<)rt!<3#r!<)rs +!!E6$!<<#ur;Z]qrVuis!<;utr;ZTnrr;lrq>^BnrVuis!<;utr;ZWoqZ$Qqo`+jirVufrs8W&u +s8W#ts8W&urVu`prr;oss8W#trr;fpJcC<$f)Pa0!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N*!s8N*!s8N'!s7lZps7ZNns8N*!s8;rss82lps7cTns7cTk +s8;rss8;ots82lps7lZns7lZks8N*!s8N*!s8N'!s8;rss8;ots7lZds8N)ss8N*!s82lqs7QHm +s7lZps7cTns7lZos82los7lZps7cTns7lZls8N)ks8;rrs7ZKns7ZNns7lZps8;rts8;rts7lYG +s+14$s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N*!s8N*!s8N'!s7lZps7ZNns8N*!s8;rss82lps7cTns7cTk +s8;rss8;ots82lps7lZns7lZks8N*!s8N*!s8N'!s8;rss8;ots7lZds8N)ss8N*!s82lqs7QHm +s7lZps7cTns7lZos82los7lZps7cTns7lZls8N)ks8;rrs7ZKns7ZNns7lZps8;rts8;rts7lYG +s+14$s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N*!s8N*!s8N'!s7lZps7ZNns8N*!s8;rss82lps7cTns7cTk +s8;rss8;ots82lps7lZns7lZks8N*!s8N*!s8N'!s8;rss8;ots7lZds8N)ss8N*!s82lqs7QHm +s7lZps7cTns7lZos82los7lZps7cTns7lZls8N)ks8;rrs7ZKns7ZNns7lZps8;rts8;rts7lYG +s+14$s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N*!s8N*!s82lqs8E#ts8;rts8N*!s8N'!s8E#os8N)rs8E#t +s8N*!s8E#ts8E#os8N*!rr`?%rr<&ss8N)qs8N)ps8E#ts8N)qs8N*!s8N*!s8N*!s8N*!rriE& +rr<'!rW)osrW)TjrrDusrrDusrrDusrVururW!'#!!*&u!<)rs!<<)u!<3#u!<3#u!<)rt!;lfr +!;ulr!<)rs!<<)u!<3#u!<3#u!<)rt!;lfr!;6Bl!<<*!!;ulq!<<*!!<3#s!<<*!!<<*!!<)rt +!<3#u!<)rt!<3#u!<)rt!.k0$s475Lm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N*!s8N*!s82lqs8E#ts8;rts8N*!s8N'!s8E#os8N)rs8E#t +s8N*!s8E#ts8E#os8N*!rr`?%rr<&ss8N)qs8N)ps8E#ts8N)qs8N*!s8N*!s8N*!s8N*!rriE& +rr<'!rW)osrW)TjrrDusrrDusrrDusrVururW!'#!!*&u!<)rs!<<)u!<3#u!<3#u!<)rt!;lfr +!;ulr!<)rs!<<)u!<3#u!<3#u!<)rt!;lfr!;6Bl!<<*!!;ulq!<<*!!<3#s!<<*!!<<*!!<)rt +!<3#u!<)rt!<3#u!<)rt!.k0$s475LklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N*!s8N*!s82lqs8E#ts8;rts8N*!s8N'!s8E#os8N)rs8E#t +s8N*!s8E#ts8E#os8N*!rr`?%rr<&ss8N)qs8N)ps8E#ts8N)qs8N*!s8N*!s8N*!s8N*!rriE& +rr<'!rW)osrW)TjrrDusrrDusrrDusrVururW!'#!!*&u!<)rs!<<)u!<3#u!<3#u!<)rt!;lfr +!;ulr!<)rs!<<)u!<3#u!<3#u!<)rt!;lfr!;6Bl!<<*!!;ulq!<<*!!<3#s!<<*!!<<*!!<)rt +!<3#u!<)rt!<3#u!<)rt!.k0$s475LirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N'!s8;ots8;rps8N)us8E#ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)ms8N)rs8N'!s8E!%rr<'!!!)orrrE*!p]1?o +rrDusrrDusrrDusrrE*!rrE*!rr<-#!!)orrrE*!rrE#trrE&ur;cTlrrDusrrDrrrrE*!rrE#t +rrDiorrDrrrrD`lrrE*!rrDusrW)corW)TjrrE&urrE#trrE&ur;_EKJcF0urp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N'!s8;ots8;rps8N)us8E#ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)ms8N)rs8N'!s8E!%rr<'!!!)orrrE*!p]1?o +rrDusrrDusrrDusrrE*!rrE*!rr<-#!!)orrrE*!rrE#trrE&ur;cTlrrDusrrDrrrrE*!rrE#t +rrDiorrDrrrrD`lrrE*!rrDusrW)corW)TjrrE&urrE#trrE&ur;_EKJcF0urojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N'!s8;ots8;rps8N)us8E#ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)ms8N)rs8N'!s8E!%rr<'!!!)orrrE*!p]1?o +rrDusrrDusrrDusrrE*!rrE*!rr<-#!!)orrrE*!rrE#trrE&ur;cTlrrDusrrDrrrrE*!rrE#t +rrDiorrDrrrrD`lrrE*!rrDusrW)corW)TjrrE&urrE#trrE&ur;_EKJcF0uro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;ots8;rps8N)us8N)ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)ms8N)rs8N'!s8E!%rr<'!!!)orrrE*!p]1?o +rrDusrrDusrrDusrrE*!rrE*!rr<'!pAk6nrrE#trrE#tqZ-KmrrDusrrDrrrrE*!rrE#trrE&u +q#L +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;ots8;rps8N)us8N)ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)ms8N)rs8N'!s8E!%rr<'!!!)orrrE*!p]1?o +rrDusrrDusrrDusrrE*!rrE*!rr<'!pAk6nrrE#trrE#tqZ-KmrrDusrrDrrrrE*!rrE#trrE&u +q#L +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;ots8;rps8N)us8N)ps82lls8N)rs8N)ts8N*!s8N)s +s8N)ps8N'!s8E!"rr<&ss8N)qs8N)ps8N)ts8N)ms8N)rs8N'!s8E!%rr<'!!!)orrrE*!p]1?o +rrDusrrDusrrDusrrE*!rrE*!rr<'!pAk6nrrE#trrE#tqZ-KmrrDusrrDrrrrE*!rrE#trrE&u +q#L +!BpJ^mHsrR!!`H'rrE'!s8E#qs8E#us8E!"rr<&rs8N)us8N)ps8N'!s8E#os8N)rs8N)ts8N*! +s8N)ss8N)os8Duus8E#qs8N)qs8N)ps8N)ts8N)ms8N)qs8Duus8E#us8N)rs8N)ks8N)ss8N)s +s8N)ss8N*!s8N*!s8N'!s7ZNns8N)ts8N)rs82los8N)ss8N)rs8N*!s8N)ts8N*!s7cTks8N)m +s7lZns8N)os8N)qs7cTms8N'#rr<&ps82kJs+14$s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8E#us8E!"rr<&rs8N)us8N)ps8N'!s8E#os8N)rs8N)ts8N*! +s8N)ss8N)os8Duus8E#qs8N)qs8N)ps8N)ts8N)ms8N)qs8Duus8E#us8N)rs8N)ks8N)ss8N)s +s8N)ss8N*!s8N*!s8N'!s7ZNns8N)ts8N)rs82los8N)ss8N)rs8N*!s8N)ts8N*!s7cTks8N)m +s7lZns8N)os8N)qs7cTms8N'#rr<&ps82kJs+14$s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8E#us8E!"rr<&rs8N)us8N)ps8N'!s8E#os8N)rs8N)ts8N*! +s8N)ss8N)os8Duus8E#qs8N)qs8N)ps8N)ts8N)ms8N)qs8Duus8E#us8N)rs8N)ks8N)ss8N)s +s8N)ss8N*!s8N*!s8N'!s7ZNns8N)ts8N)rs82los8N)ss8N)rs8N*!s8N)ts8N*!s7cTks8N)m +s7lZns8N)os8N)qs7cTms8N'#rr<&ps82kJs+14$s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8E#us8Duus8E#ss8E#ts8N)ps8N*!s8E#ps8N)rs8N)ts8N*! +s8E#ts8E#ns8Duus8E#qs8N)qs8N)ts8N*!s8N)ts8N)ms8N)qs8Duus8E#us8E#ss8E#js8N)t +s8N)rs8N)ss8N*!s8N*!s8N'!s8E#ns8N)ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N*! +s8N)ss8N)rs8N)ms8N)ts8N)ts8N)os8N)qs8N)ss8N)ss8;rqs8N)ts8N(Ms+14$s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8E#us8Duus8E#ss8E#ts8N)ps8N*!s8E#ps8N)rs8N)ts8N*! +s8E#ts8E#ns8Duus8E#qs8N)qs8N)ts8N*!s8N)ts8N)ms8N)qs8Duus8E#us8E#ss8E#js8N)t +s8N)rs8N)ss8N*!s8N*!s8N'!s8E#ns8N)ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N*! +s8N)ss8N)rs8N)ms8N)ts8N)ts8N)os8N)qs8N)ss8N)ss8;rqs8N)ts8N(Ms+14$s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8E#us8Duus8E#ss8E#ts8N)ps8N*!s8E#ps8N)rs8N)ts8N*! +s8E#ts8E#ns8Duus8E#qs8N)qs8N)ts8N*!s8N)ts8N)ms8N)qs8Duus8E#us8E#ss8E#js8N)t +s8N)rs8N)ss8N*!s8N*!s8N'!s8E#ns8N)ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N*! +s8N)ss8N)rs8N)ms8N)ts8N)ts8N)os8N)qs8N)ss8N)ss8;rqs8N)ts8N(Ms+14$s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N*!s7lZps7lZos8E#ts8;rts7lZps8;rts8;rts7lZi +s8N)us8N)us7lZns7lWps8;rts8;rns8)fos8N)us8N)us7lZes7cTns7lWps8;ots8Duus8Duu +s7lZps8;rts8;rts7lZos7lZos7lZps8;rts8;ots7ZNns7lZls82lss7? +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N*!s7lZps7lZos8E#ts8;rts7lZps8;rts8;rts7lZi +s8N)us8N)us7lZns7lWps8;rts8;rns8)fos8N)us8N)us7lZes7cTns7lWps8;ots8Duus8Duu +s7lZps8;rts8;rts7lZos7lZos7lZps8;rts8;ots7ZNns7lZls82lss7? +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N*!s7lZps7lZos8E#ts8;rts7lZps8;rts8;rts7lZi +s8N)us8N)us7lZns7lWps8;rts8;rns8)fos8N)us8N)us7lZes7cTns7lWps8;ots8Duus8Duu +s7lZps8;rts8;rts7lZos7lZos7lZps8;rts8;ots7ZNns7lZls82lss7? +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N)ts8;rrs7lZos8E#ts8;rts7lZps8;rts8;rss8;p! +rr<&os8N)us8N)us7lZms82lrs8;rts8;rns8)fos8N)us8N)ss8;rgs7u`ns7lWps8;ots8Duu +s8E#ts8)frs8;rts8;rts7u`os7lZms8;rrs8;rts8;rts82iss8E#us7lZls82lss7? +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N)ts8;rrs7lZos8E#ts8;rts7lZps8;rts8;rss8;p! +rr<&os8N)us8N)us7lZms82lrs8;rts8;rns8)fos8N)us8N)ss8;rgs7u`ns7lWps8;ots8Duu +s8E#ts8)frs8;rts8;rts7u`os7lZms8;rrs8;rts8;rts82iss8E#us7lZls82lss7? +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N)ts8;rrs7lZos8E#ts8;rts7lZps8;rts8;rss8;p! +rr<&os8N)us8N)us7lZms82lrs8;rts8;rns8)fos8N)us8N)ss8;rgs7u`ns7lWps8;ots8Duu +s8E#ts8)frs8;rts8;rts7u`os7lZms8;rrs8;rts8;rts82iss8E#us7lZls82lss7? +!BpJ^mHsrH!4;e+!.k0$s7$'g!.k0$s2Y0=m/bd$J,~> +!BU8[l0\ND!4;e+!.k0$s7$'g!.k0$s2Y0=klK'jJ,~> +!B:&Xj6cm>!4;e+!.k0$s7$'g!.k0$s2Y0=irR%VJ,~> +!BpJ^mHsrH!4Dk+!.k0$s7--h!.k0$s2P* +!BU8[l0\ND!4Dk+!.k0$s7--h!.k0$s2P* +!B:&Xj6cm>!4Dk+!.k0$s7--h!.k0$s2P* +!BpJ^m@""O!.k0$s763e!.k0$s2b6>m/bd$J,~> +!BU8[l'_SK!.k0$s763e!.k0$s2b6>klK'jJ,~> +!B:&Xj-frE!.k0$s763e!.k0$s2b6>irR%VJ,~> +!BpJ^m@""P!.k0$s7--d!.k0$s2b6>m/bd$J,~> +!BU8[l'_SL!.k0$s7--d!.k0$s2b6>klK'jJ,~> +!B:&Xj-frF!.k0$s7--d!.k0$s2b6>irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m>V)F!8IPR!9aC[!6kKC!:^$d!8[\P!9=+Z!:0[b!87DP!.k0$s4mYRm/bd$J,~> +!BU8[l&>ZB!8IPR!9aC[!6kKC!:^$d!8[\P!9=+Z!:0[b!87DP!.k0$s4mYRklK'jJ,~> +!B:&Xj,F$ +!BpJ^mFqU=!!<0#!4r41!8IPR!<3#o!:p0f!6kKC!:^$d!8dbP!;lfq!;ulr!;- +!BU8[l.Z19!!<0#!4r41!8IPR!<3#o!:p0f!6kKC!:^$d!8dbP!;lfq!;ulr!;- +!B:&Xj4aP3!!<0#!4r41!8IPR!<3#o!:p0f!6kKC!:^$d!8dbP!;lfq!;ulr!;- +!BpJ^mHsrH!;ull!0dH_!<)rm!:^$g!4Mq-!8dbU!;?Hl!;ulr!;- +!BU8[l0\ND!;ull!0dH_!<)rm!:^$g!4Mq-!8dbU!;?Hl!;ulr!;- +!B:&Xj6cm>!;ull!0dH_!<)rm!:^$g!4Mq-!8dbU!;?Hl!;ulr!;- +!BpJ^mHsrH!;uls!<)rs!<)rr!<)rs!!*&t!<3#s!<<)t!<)rr!<)rr!<<)u!<)ro!<3#r!;ZZn +!<)rs!!*&t!;-^Eorr;rtrr;iqrr;corr;oss8W&urr;lrqZ$Ko!ri6# +r;Z]qqu?Kmr;ZcsJcC<$h>dKA!S0Da~> +!BU8[l0\ND!;uls!<)rs!<)rr!<)rs!!*&t!<3#s!<<)t!<)rr!<)rr!<<)u!<)ro!<3#r!;ZZn +!<)rs!!*&t!;-^Eorr;rtrr;iqrr;corr;oss8W&urr;lrqZ$Ko!ri6# +r;Z]qqu?Kmr;ZcsJcC<$h>dK=!R<`V~> +!B:&Xj6cm>!;uls!<)rs!<)rr!<)rs!!*&t!<3#s!<<)t!<)rr!<)rr!<<)u!<)ro!<3#r!;ZZn +!<)rs!!*&t!;-^Eorr;rtrr;iqrr;corr;oss8W&urr;lrqZ$Ko!ri6# +r;Z]qqu?Kmr;ZcsJcC<$h>dK7!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N*!s7lZps7cTos8;rts8;rts7lZps7ZNns7lZos82lo +s7lZps7cTfs8N)rs8N)ss8N*!s7lZls8N)ss8;rts8;ots7cTns7lWps7QHms82los7lZls8N)r +s7lZjs7lZos7lZjs8E#ts8E#us7lZps7lZos7ZNns82los7lZos7lZos7lZls8N(Ms+14,s8MBd +eieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N*!s7lZps7cTos8;rts8;rts7lZps7ZNns7lZos82lo +s7lZps7cTfs8N)rs8N)ss8N*!s7lZls8N)ss8;rts8;ots7cTns7lWps7QHms82los7lZls8N)r +s7lZjs7lZos7lZjs8E#ts8E#us7lZps7lZos7ZNns82los7lZos7lZos7lZls8N(Ms+14,s8M6` +c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N*!s7lZps7cTos8;rts8;rts7lZps7ZNns7lZos82lo +s7lZps7cTfs8N)rs8N)ss8N*!s7lZls8N)ss8;rts8;ots7cTns7lWps7QHms82los7lZls8N)r +s7lZjs7lZos7lZjs8E#ts8E#us7lZps7lZos7ZNns82los7lZos7lZos7lZls8N(Ms+14,s8M$Z +_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)os8E#ss8E#us8E#ts8N)us8N)ts8N*!s8E#ss8E#ts8;rt +s8N*!s8N)ts8N)rs8N)ss8E#ss8E#us8E#ts8N)ms8N)rs8N)ts8Duus8E#ss8E#rs8N)rs8N)t +s8N)us8E#ts8N*!s8E#ss8Duus8Duus8E!"rr<&ss8N)rs8N)ts8N)rs8N)rs8N)ts8N)qs8E#s +s8E#ss8N)ls8;ots8;rts8N)ts8N)ts8N)os8;rts8N)ss8N)ss8E#ts8E#us8E#ss8E#us8N)t +s8N)rs8N(Ms+14,s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)os8E#ss8E#us8E#ts8N)us8N)ts8N*!s8E#ss8E#ts8;rt +s8N*!s8N)ts8N)rs8N)ss8E#ss8E#us8E#ts8N)ms8N)rs8N)ts8Duus8E#ss8E#rs8N)rs8N)t +s8N)us8E#ts8N*!s8E#ss8Duus8Duus8E!"rr<&ss8N)rs8N)ts8N)rs8N)rs8N)ts8N)qs8E#s +s8E#ss8N)ls8;ots8;rts8N)ts8N)ts8N)os8;rts8N)ss8N)ss8E#ts8E#us8E#ss8E#us8N)t +s8N)rs8N(Ms+14,s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)os8E#ss8E#us8E#ts8N)us8N)ts8N*!s8E#ss8E#ts8;rt +s8N*!s8N)ts8N)rs8N)ss8E#ss8E#us8E#ts8N)ms8N)rs8N)ts8Duus8E#ss8E#rs8N)rs8N)t +s8N)us8E#ts8N*!s8E#ss8Duus8Duus8E!"rr<&ss8N)rs8N)ts8N)rs8N)rs8N)ts8N)qs8E#s +s8E#ss8N)ls8;ots8;rts8N)ts8N)ts8N)os8;rts8N)ss8N)ss8E#ts8E#us8E#ss8E#us8N)t +s8N)rs8N(Ms+14,s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)os8N)rs8N*!s8N)ts8N)us8N)ts8N*!s8N)rs8N)us8E#p +s8;rls8N)ss8N)rs8N*!s8N)ts8N)ms8N)rs7lZps8N)rs8N)ss8N)rs8N)ts8N)us8N)ts8N*! +s8N)rs8N'+rr<'!rr<'!rr<&ss8N)ls8N)rs8N)rs8;rks8N)rs8N)ts8N)ls7cTis8N)ts8N)o +s8E#ms8N)ss8N)ss8N*!s8N)rs8N*!s8;rls8N(Ms+14,s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)os8N)rs8N*!s8N)ts8N)us8N)ts8N*!s8N)rs8N)us8E#p +s8;rls8N)ss8N)rs8N*!s8N)ts8N)ms8N)rs7lZps8N)rs8N)ss8N)rs8N)ts8N)us8N)ts8N*! +s8N)rs8N'+rr<'!rr<'!rr<&ss8N)ls8N)rs8N)rs8;rks8N)rs8N)ts8N)ls7cTis8N)ts8N)o +s8E#ms8N)ss8N)ss8N*!s8N)rs8N*!s8;rls8N(Ms+14,s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)os8N)rs8N*!s8N)ts8N)us8N)ts8N*!s8N)rs8N)us8E#p +s8;rls8N)ss8N)rs8N*!s8N)ts8N)ms8N)rs7lZps8N)rs8N)ss8N)rs8N)ts8N)us8N)ts8N*! +s8N)rs8N'+rr<'!rr<'!rr<&ss8N)ls8N)rs8N)rs8;rks8N)rs8N)ts8N)ls7cTis8N)ts8N)o +s8E#ms8N)ss8N)ss8N*!s8N)rs8N*!s8;rls8N(Ms+14,s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)os8N)rs8N*!s8N)ts8N)ts8N*!s8N)us7ZNms8N)os8)fm +s8N)ss8N)rs8N*!s8N)ts8N)ms8N)rs7u`ps8N)rs8N)ss8N)qs8N*!s8N)ts8N)ts8N*!s8N)r +s8N'+rr<'!rr<'!rr<&ss8N)rs7lZls8N)qs8)fls8N)rs8N)ts8N)ls8N'!s8E!$rr<'!s7lZn +s8N)os8N)ms8N)ss8N)os7ZNms8)fms8N(Ms+14,s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)os8N)rs8N*!s8N)ts8N)ts8N*!s8N)us7ZNms8N)os8)fm +s8N)ss8N)rs8N*!s8N)ts8N)ms8N)rs7u`ps8N)rs8N)ss8N)qs8N*!s8N)ts8N)ts8N*!s8N)r +s8N'+rr<'!rr<'!rr<&ss8N)rs7lZls8N)qs8)fls8N)rs8N)ts8N)ls8N'!s8E!$rr<'!s7lZn +s8N)os8N)ms8N)ss8N)os7ZNms8)fms8N(Ms+14,s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)os8N)rs8N*!s8N)ts8N)ts8N*!s8N)us7ZNms8N)os8)fm +s8N)ss8N)rs8N*!s8N)ts8N)ms8N)rs7u`ps8N)rs8N)ss8N)qs8N*!s8N)ts8N)ts8N*!s8N)r +s8N'+rr<'!rr<'!rr<&ss8N)rs7lZls8N)qs8)fls8N)rs8N)ts8N)ls8N'!s8E!$rr<'!s7lZn +s8N)os8N)ms8N)ss8N)os7ZNms8)fms8N(Ms+14,s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)os8N)rs8N*!s8N)ts8N)ts8N*!s8N)us7ZNms8N)ms82lo +s8N)ss8N)rs8N*!s8N)ts8N)ms8N)rs8N)ps8N)rs8N)ss8N)qs8N'#rr<&ss8N)ts8N*!s8N)r +s8N'+rr<'!rr<'!rr<&ss8N)ss7cTks8N)os82lns8N)rs8N)ts8N)ls8N*!rriE&rr<'!p]19m +rrDiorrDcmrrDusrrDiopAk-kquHWorr@WMJcFU,rp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)os8N)rs8N*!s8N)ts8N)ts8N*!s8N)us7ZNms8N)ms82lo +s8N)ss8N)rs8N*!s8N)ts8N)ms8N)rs8N)ps8N)rs8N)ss8N)qs8N'#rr<&ss8N)ts8N*!s8N)r +s8N'+rr<'!rr<'!rr<&ss8N)ss7cTks8N)os82lns8N)rs8N)ts8N)ls8N*!rriE&rr<'!p]19m +rrDiorrDcmrrDusrrDiopAk-kquHWorr@WMJcFU,rojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)os8N)rs8N*!s8N)ts8N)ts8N*!s8N)us7ZNms8N)ms82lo +s8N)ss8N)rs8N*!s8N)ts8N)ms8N)rs8N)ps8N)rs8N)ss8N)qs8N'#rr<&ss8N)ts8N*!s8N)r +s8N'+rr<'!rr<'!rr<&ss8N)ss7cTks8N)os82lns8N)rs8N)ts8N)ls8N*!rriE&rr<'!p]19m +rrDiorrDcmrrDusrrDiopAk-kquHWorr@WMJcFU,ro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#us8N)ts8N)ss8;rrs8E#ms8N)ps8N)t +s8N)rs8N)ss8E#ss8E#us8N)ts8N)ms8N)rs8N)ps8E#ss8E#rs8N)ps8;rqs8N)ts8N*!s8E#s +s8E!*rr<'!rr<'!rr<&ss8N)ss8N)ss8N)rs8N)rs8N)ts8N)qs8E#ss8E#ss8N)ls8N)ss8N'# +rr<&ss8N)ts8N)ts8N)us8N)ms8N)ss8E#ss8Duus8E#ns8N)ts8N)rs8N(Ms+14,s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#us8N)ts8N)ss8;rrs8E#ms8N)ps8N)t +s8N)rs8N)ss8E#ss8E#us8N)ts8N)ms8N)rs8N)ps8E#ss8E#rs8N)ps8;rqs8N)ts8N*!s8E#s +s8E!*rr<'!rr<'!rr<&ss8N)ss8N)ss8N)rs8N)rs8N)ts8N)qs8E#ss8E#ss8N)ls8N)ss8N'# +rr<&ss8N)ts8N)ts8N)us8N)ms8N)ss8E#ss8Duus8E#ns8N)ts8N)rs8N(Ms+14,s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#us8N)ts8N)ss8;rrs8E#ms8N)ps8N)t +s8N)rs8N)ss8E#ss8E#us8N)ts8N)ms8N)rs8N)ps8E#ss8E#rs8N)ps8;rqs8N)ts8N*!s8E#s +s8E!*rr<'!rr<'!rr<&ss8N)ss8N)ss8N)rs8N)rs8N)ts8N)qs8E#ss8E#ss8N)ls8N)ss8N'# +rr<&ss8N)ts8N)ts8N)us8N)ms8N)ss8E#ss8Duus8E#ns8N)ts8N)rs8N(Ms+14,s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7cTos7lZps8;rts8;rrs8;rqs7lZps7lZns7lZos7lZos7lZp +s8;rts8;rls8N)ss8)fns7lZos7lZms8E#rs8;rts8;rts7lWps8;ots8Duus8Duus7lZps7ZNn +s7lZos7lZjs7lZos7lZks82iss7-0hs7lWps7lZns7lZos7cTos7lZos7lZls8N(Ms+14,s8MBd +eieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7cTos7lZps8;rts8;rrs8;rqs7lZps7lZns7lZos7lZos7lZp +s8;rts8;rls8N)ss8)fns7lZos7lZms8E#rs8;rts8;rts7lWps8;ots8Duus8Duus7lZps7ZNn +s7lZos7lZjs7lZos7lZks82iss7-0hs7lWps7lZns7lZos7cTos7lZos7lZls8N(Ms+14,s8M6` +c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7cTos7lZps8;rts8;rrs8;rqs7lZps7lZns7lZos7lZos7lZp +s8;rts8;rls8N)ss8)fns7lZos7lZms8E#rs8;rts8;rts7lWps8;ots8Duus8Duus7lZps7ZNn +s7lZos7lZjs7lZos7lZks82iss7-0hs7lWps7lZns7lZos7cTos7lZos7lZls8N(Ms+14,s8M$Z +_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&qs82los8;rrs8;rts8;rqs8N)ps8)frs7lZns7u`os7lZms8;rr +s8;rts8;rks8N)ts8)fls8;rqs7lZms8N)rs8;rts8;rrs8;rss8;ots8Duus8Duus7lZos82is +s8E#us7lZos7u`hs8;rqs7lZks82iss82iss82iss8E#ss82lrs7lZns7lZns8)fns8)fqs7u`m +s8N(Ms+14+s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&qs82los8;rrs8;rts8;rqs8N)ps8)frs7lZns7u`os7lZms8;rr +s8;rts8;rks8N)ts8)fls8;rqs7lZms8N)rs8;rts8;rrs8;rss8;ots8Duus8Duus7lZos82is +s8E#us7lZos7u`hs8;rqs7lZks82iss82iss82iss8E#ss82lrs7lZns7lZns8)fns8)fqs7u`m +s8N(Ms+14+s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&qs82los8;rrs8;rts8;rqs8N)ps8)frs7lZns7u`os7lZms8;rr +s8;rts8;rks8N)ts8)fls8;rqs7lZms8N)rs8;rts8;rrs8;rss8;ots8Duus8Duus7lZos82is +s8E#us7lZos7u`hs8;rqs7lZks82iss82iss82iss8E#ss82lrs7lZns7lZns8)fns8)fqs7u`m +s8N(Ms+14+s8M$Z_`*)~> +!BpJ^mHsrH!/:IQ!87DP!.k0Vs8N(Ms+14+s8MBdeieN~> +!BU8[l0\ND!/:IQ!87DP!.k0Vs8N(Ms+14+s8M6`c8pI~> +!B:&Xj6cm>!/:IQ!87DP!.k0Vs8N(Ms+14+s8M$Z_`*)~> +!BpJ^mHsrH!/1CP!8IPR!.k0Vs8N(Ms+14*s8MBdeieN~> +!BU8[l0\ND!/1CP!8IPR!.k0Vs8N(Ms+14*s8M6`c8pI~> +!B:&Xj6cm>!/1CP!8IPR!.k0Vs8N(Ms+14*s8M$Z_`*)~> +!BpJ^m=G;us8N)Ts8)eIs0_n,!.k0$s4mYRm/bd$J,~> +!BU8[l%/lqs8N)Ts8)eIs0_n,!.k0$s4mYRklK'jJ,~> +!B:&Xj+76ks8N)Ts8)eIs0_n,!.k0$s4mYRirR%VJ,~> +!BpJ^m=G;Os8)eIs+13$s,R-Ym/bd$J,~> +!BU8[l%/lKs8)eIs+13$s,R-YklK'jJ,~> +!B:&Xj+76Es8)eIs+13$s,R-YirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6eq)D'eq)D'f"T]84b*~> +!BU73c@O8lc@O8lcG%R(3e.~> +!B:%0_h#^V_h#^V_nO"g2h1~> +JN\QIJN\QIJN^V.J,~> +JNA?CJNA?CJNCD(J,~> +JN&-=JN&-=JN(2"J,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/books/ps/v71numberpage.eps b/books/ps/v71numberpage.eps new file mode 100644 index 0000000..5cf97ff --- /dev/null +++ b/books/ps/v71numberpage.eps @@ -0,0 +1,3689 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner +%%Title: numberspage.eps +%%CreationDate: Sat Jun 21 11:08:08 2008 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 696 597 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 582.71192192525223 translate +681.59055118110246 -582.71192192525223 scale +% Image geometry +710 607 8 +% Transformation matrix +[ 710 0 0 607 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 710 string def +/gstr 710 string def +/bstr 710 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 208343 ASCII Bytes +colorimage +quD:2JN\QIJN\QI`BF,!J,~> +quD:/JNA?CJNA?C`B*nsJ,~> +quD:,JN&-=JN&-=`Ad\pJ,~> +rW)s]JcC<$JcC<$JcE^hs#p>]J,~> +rW)sZJcC<$JcC<$JcE^hs#U,ZJ,~> +rW)sWJcC<$JcC<$JcE^hs#9oWJ,~> +rr<*`rr.KIJc1/uJc1/u`Voi9!^-M`J,~> +rr<*]rr.KIJc1/uJc1/u`Voi9!]g;]J,~> +rr<*ZrV_ +!WYC^Jc()sJc()sNr84$rVYu>rVYu>rqliX4TL!~> +!WY:[Jbt#qJbt#qNr/.#rVPo=rVPo=rqccV3WO[~> +!WY1WJbjroJbjroNr&(!rVGi;rVGi;rqZ]T2ZS@~> +!WYC]JbjroJbjroO88m7bjGE6b_l8nMTkJf"jDl#qMNMars$])qYK/6!.Y~> +!WY:YJbalmJbalmO8/g6bjGE6b_l5lMTkJf"jDl"q23D`rs$])q>&u1!.Y~> +!WY1VJbXfkJbXfkO8&a4bjGE6b_c,iM9PAe"jDhupkd5^rs$](q"Wc+!.Y~> +!Bp>Xq#LHro)O@;JbalmJbc):!K-jCr!!%Vq>#pHmJI.dMY[(*rU'L`rJLUM!T?1l~> +!BU)TpAk6po)O@9JbO`iJbPr6!K$dBr!!%Up\0OCmJI.dM>-b$rU'L`rJCOJ!T,qg~> +!B9iPo`5$no)O@7Jb=TeJb>f2!JgX@qZZqRp%=+=mJ@(cL\:=qrU'I_rJ1CF!So\b~> +!Bp;WpB/E6`%CW^JbO`iJbO`iU\=eGr9a=ar/(1BM>Zc;"oO5OpPJh8q>pMNrq?HN4b*~> +!BU&So`N34`%CW^Jb=TeJb=TeU\+YCqsF1_qhOk;L\pK7"oF)JonWG3q#UAJrq- +!B9fOo)m!2`%CW^Jb+HaJb+HaU[nM@qsF.^qhF_6LAUB5"oF&Go7m/0p]:8Hrpp0F2h1~> +!Bp;Wp(.1.qQ+s_PA6:)B9P$56BcuoJbJL)!B;b3p&R-+j7WI4r\"=mJ$k^M"^OuqsF.ZqhY7F!T#ti~> +!BU#RoFLt,qQ+s_PA6:)B9P$56BcumJb8@%!B2Y1oDpm'j7E=1r[n7:En#[4Jb8!p!JgO=p'(;J +o^mq8mIg_[L\14oqX*tWqM5(B!Sf_d~> +!B9cNnIPY)qQ+s_PA6:)B9P$56BcujJar-t!AuJ.nGtL!j7*+,r[e18E6s1+Jaqdj!JU=9oEG#D +naV>.mIUSWL%4\eq!I\SpkA_;!SKD^~> +!Bp5UoFLu0rRn3jg"`aZgP!Sqn*,DqJb8@%!B;b3oDpp)j7ER90=\&s00%=0oRZYqoDsaDmIg_[ +L\14oqYU!^!;lHnqM4_8L\goArrE#krrDri!W%TNoE!`1J,~> +!BTuQndkc.rRn3jg"`aZgP!Sqn*,DoJb&4!!B)S0nc:X$j73F50"7in/iLt*nq$Amnc=L?mIUSW +L@Xniq"s^Z!;lBlpkJA1LA:Z +!B9]LmLT?*rRn3jg"`aZgP!Sqn*,DkJaVpn!AuJ.mK#0sj6d.0/[VEf/N(\%mXafemK&"8mI:AS +K^S8]p\XLV!;l9ipOqu&K_PB6rrE#frrDrd!V_9HmK(ouJ,~> +!Bp5Uo+1j^q.'!S]bf~> +!BTrPn.5O[q.'=Kq;_S5;$s8()tXJai=$!JU:8nHJZ@nF2/+qsjI^qsajaL%+Sc +p\XL[!<;Tg!;l9epP&V9!SBG`~> +!B9ZKljs+Wq.'rqsF1Zqs=RZK'_iU +o_\%T!<;Hc!;l-aoRd)/!S',Z~> +!Bp2TnIM9cSg;Z[PNqO4eC2_7]E!NQJar-t!B2\2Zlq:[naX"?D=QmSRIMpd@VIK2n_lPt_JM!T +nO,$*M"*DWrp^W@008X&035j%<%k2602J^[R+d,]JarC&!JU:8nHJZ@naV>-qsaXdqsaXdqsaja +L%4\ep\OFW!;c3dpP&V:!SKVd~> +!BToOmLPs`Sg;Z[PNqO4eC2_7]E!NNJaVpn!B)S0YotqVmd@D6D!pLMR-lR^@:q3,mbTul^hb[N +mQrO#L$giOrpCE:/ii?s/lfQr;_Fo./kr@SQe-fVJaW0u!JL.5mKN9:md>c$qsFFaqsFFaqsFX\ +K^S8]p%n+R!;c*aon<>4!S9A_~> +!B9TIl49O\Sg;Z[PNqO4eC2_7]E!NJJa2Xf!AuJ.Y9>YQlKYT*C?jkAPj0hT?Y1m&lJ" +!Bp/SnGWCrR)/p$U':T##6Y89!.jWjnEo]F2u>9.n/^gX1ukMmj7"]_l.n!Qn=VFeiMS?!n3\kb +nF/@irpUEO0/;rh0@'(VbqD^X0?o(;Jai0u!JU46mfiB +!BTlNm/?tnR)/p$U':T##6Y89!.jKfm-X->2Z#-,llG7O1Z+uchs;sUjk27Gm%,h\h4lTjlp<>Y +m-HV_rp1-G/hlW`0$qqs+4^qs+4^qs+FWK'_iUoD._N +!;Yp]o7Hu.!S'5]~> +!B9QHkPbGiR)/p$U':T##6Y89!.j]!*k8iSD1#&BYgZL.Ji7'>;kF4&Pfq9p_k/MH9X/]Qu:`%=MG/]<5'J`lOc!J'\,jot7)kN@BbqrRkYqrRkYqrS(OJEQ*GnG25F +!;YaXn::N$!RNcU~> +!BouNkl(Pb/K"OJ,l%Fkk^hsbkQ*UqroaAA0E1/FHnV'iHKaQG6g3Yc0B\/h0*?jj6SJH&!B2\2 +kRPH_7-HBZjlkph0/>78idp +!BTZHj8K#]/K"OJ,l%Fkj+67XirM%jro4#;0)jl@GV5F_GN7^960$oV0&hT_/d$[b5q`/s!B)S0 +isrdU6fTmRi8`kU/ho%4h1=U;j7)(0Ic0V;"lOjij*oq`bQ%Y?bQ%Y?bQZpRj5YUHq98d;q9/lt +IfA@.brU@~> +!B99@g\q0U/K"OJ,l%FkgO\,HgAs,_rn@H1/cOK7F=ibRF5,G$5MOjC/_YdR/H^CT5:ulh!AlD- +gCCYD6/+%Eg"Y96/MAb/eUcJ+g[NquH.hT#"ke1UgNhKL^]4B3^]4B3^]iD:gY7#,q7uq/q7m$a +H2cP!`]&D~> +!BouNkl1Vb#V@VJpAfd.J`uLb!B2\2kQ*Uqroap-01.D6kiaZekgqITkaX;Qr9+/K0E1/92_Y0o% +X9XRkXmMKkig#>91CSJJ`q[KnE9n'jmCP$jacRYJE?[X!!)oG!!)oG"m(9uk^_dkeGB7Be,eZ]r +oaC14b*~> +!BTZHj8T)]#V@VJpAfd)J`H.X!B)S0irM%jro4R#/jV,.j5VaXj3oVIj-_NFr8RfD0)jl32D5!h% +WsCLj%(f?j5[s.8OP2AJ`D=AnDaOui9e_li-s_HIc1+I!!)o?!!)o?"lOjij*oq_bkhD:bQ6XNr +o4%(3e.~> +!B99@g]%6U#V@VJpAfd!J_TSH!AlD-gAs,_rnA!j/O(i#gY4;EgWM06gQX:4r7_6:/cOK*1bJ^]% +WO(CgI +!BouNkl1Vc*9u5B"o&(Kk^hsbkQ*UqroaAA0E1/;k=714roanH4N;n)K]q/U1Q8W6XQW#)rob.W +0=Iir01=FUUb>]X\5P&VQ7kY"\":fpk^hsikQ-4qqpbEAqpYf2JEZ3IjnmO-!;k7G!;k7LjacRY +JE?[XrW)uJrW)iF!Tek2kQ0'oJ,~> +!BT]IjSo2_*9u5B"o&(KjFQCZj8h.kro=)<0)jo6j$kY,ro=VC4MlP"J`PEI0oE0+WoQGuro=kR +0!_?h/k"1LTIs0O[8JWMP:f4oZ^]'fjFQCaj8j_fqonj9qof6%IcTR=i;:^u!;jt?!;jtDi-sbJ +Ic1+IrW)uBrW)i>!T8G+j8mOeJ,~> +!B96a>O"EYbXd6hTgk"8Qg];`SqnW"-qnNBgHJI;%g&&Pb!;jP3!;jP8fm;H/ +HJ/22rW)u6rW)i2!SMeug]>DRJ,~> +!Bp#Ol2CYh`gQi;/L:B8*$kL`Ja%aMmHFX10E12:2_Y-o!fAY7rosD8%5r=fl06H-3\WspksI-' +kls("0/,eCf`(+EX&_&7=0(TLSPM$t9uV\JJa)gk!J0A0eG0+Ae-4rbl03c\qpbEAqpYf2Ja)EM +jnmR-!<(FI!;k7HjamEq!Ra,]~> +!BT]IjSf,c`gQi;/L:B8*$kL`J`MCCmGn:+0)jo42D4sh!f&D.roF&2%5i1^jQ+Eq3%mUgj?YEt +j9@Lp/h]V?e,JD;W)PQ0Ll9>Q2?J`QIa!Iiu(bkV89bQZpRjQ(dJqonj9qof6%IcTR= +i;:au!<(.A!;jt@i-t[d!R<`V~> +!B9 +!Bp#Ol2CYh`gZq,[EWpW`6nPaJa%aMiopM`7Ha[7!A?fkl%/*AklH@smF2=$Ja)EMjmCP$jal[\ +J`Z:K!Ten3klK3qJ,~> +!BT]Ijo,5d`gZq,[EWpW`6nPaJ`VIEioL5[7-":.!A6ZhjalO9jT0khmE>alJ*#dAi9e_li.'kM +J)K_ +!B9?Bh>RB\`gZq,[EWpW`6nPaJ_bn5inXZO6ehUr!A-Neh1=D)h#ViUmD/t[HJRD'g?l][g3VT2 +HJ7c&!SVl!h#YPTJ,~> +!Bp#OlM^bi`gQl,3g9Tn"BYR&Ja.gOj6?]S09uM$!A?fkl@J6Cl2cIumF;C&Ja2NOk3^\&k(2g_ +J`c@M!Tnt4l2f?sJ,~> +!BT]Ijo,5d`gQl,3g9Tn"BYR&J`VIEj5g?J/s6+o!A6ZhjalO9jT0kimEGgnJ*#dAiU+kniIBtN +J)Te>!TAP-jT3[gJ,~> +!B9?BhYmK]`gQl,3g9Tn"BYR&J_kt7j5'j>/WK_c!A-QfhLXP+h>quWmD/t[Hf!V+g?l][g3_]5 +HeRl'!SVo"h>t\VJ,~> +!Bp#OlMghk&_t2%fn@#Go66o-!.jEdlJq.2Sqc&!l2dfcJa.gOb3B"Yk3^\&k(2g_J`c@M"m1C$ +l@J*beH+f`rosO54b*~> +!BT`Jk5PDg&_t2%fn@#Go66o-!.j9`k2YS*S:oSojoM9YJ`_OGb2r_SiU+kniIC"PJ)Te>"lXsn +k'u@WblQdQroO7-3e.~> +!B9?BhZ!Q_&_t2%fn@#Go66o-!.j!XhW*GoQ@RB]h>s4EJ_kt7b2*/Gg?l][g3_]5HeRl'"kn=[ +hL!uD_#`8:rn[[s2h1~> +!Bp#OlMghk'5_SV(2[7W6#A@U!.jEdl@J5OlD*VFJ[k+0"h9-Kl@HJ4jor8GlKWr1mH+GZJc=p8 +dli3~> +!BT`Jk5PDg'5_SV(2[7W6#A@U!.j9`k(2ZGk+h&>J$eV%"gidAk'sc*i +!B9BChu +!Bp&PlgXt+l[eAQl[eArlg&`mlg&`mlg&`mlN,KuJ,~> +!BTcKkOAP'kCMfIkCMfjkNd-dkNd-dkNd-dk5ipjJ,~> +!B9BCi:-eui.9g;i.9g\i9P1Wi9P1Wi9P1WhuUtZJ,~> +!Bp%*l[eAQl[eAQlbD`de3/<~> +!BTb%kCMfIkCMfIkJ-0\coQ[~> +!B9@ri.9g;i.9g;i4n1Nau=h~> +!Boe#i.9g;i.9g;i4e+L4b*~> +!BTIrg4@t/g4@t/g:l8@3e.~> +!B9%id"0Ppd"0Ppd([j,2h1~> +!'PmaJUrB'JUrB']n$/HJ,~> +!'5[SJTcTfJTcTf]ljB:J,~> +!&oIAJS0OHJS0OH]k7=(J,~> +!BpJ^m5t=JrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&c!S0Da~> +!BU8[kr\nFrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&_!R<`V~> +!B:&Xj#d8@rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&Y!Q-jH~> +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rp9a;4b*~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rojI/3e.~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!ro4$s2h1~> +!BpJ^mDo8,!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)um/bd$J,~> +!BU8[l,Wi(!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uklK'jJ,~> +!B:&Xj2_3"!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uirR%VJ,~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls-s&g!.k0B +rriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#us8N'! +rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!*&u +m/bd$J,~> +!BU8[kl:__rrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls-s&g!.k0B +rriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#us8N'! +rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!*&u +klK'jJ,~> +!B:&XirB)YrrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls-s&g!.k0B +rriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#us8N'! +rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!*&u +irR%VJ,~> +!BpJ^m0 +!BU8[km%.frrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcGNF +r;c3a!!(sWrW)uur;c']!!(jTp],mFc2RbDrr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcGNF +r;c3a!!(sWrW)uur;c']!!(jTp],mFc2RbDrr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1B +rr<&crr<&Vs8N)trr<&^rr<&Trr<&urr<&urr<%Ms31KH!<3'!!<;rs!<;rs-N=)G!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1B +rr<&crr<&Vs8N)trr<&^rr<&Trr<&urr<&urr<%Ms31KH!<3'!!<;rs!<;rs-N=)G!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1B +rr<&crr<&Vs8N)trr<&^rr<&Trr<&urr<&urr<%Ms31KH!<3'!!<;rs!<;rs-N=)G!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcGHD!W`6#b5VMCrrE&u!!)3^!!(jT!!*#u!!*#u!!%TMc2RbDrr3'#rrE)u!!<0#s8E!F +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p8!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<;lq(B4C7!<3'!!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcGHD!W`6#b5VMCrrE&u!!)3^!!(jT!!*#u!!*#u!!%TMc2RbDrr3'#rrE)u!!<0#s8E!F +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p8!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<;lq(B4C7!<3'!!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1C +rrN3#!;ulr!<<)u!;ulr!;ZZn!<)rt!!`H'!<<'!!;QQq!<3&urr<&us8N)ts8N*!s8N''rr<'! +rr<&trrE-"r;c`pr;ccqrVururW)`n!!*#u!!*#u!W`9#rW)rtrW)uurr<'!r;c`pr;c]or;Zlu +!.k1ErriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr3]5rrE'!rrE'!rrE'!rrE'!rrE'!s7cR.rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8MBd +eieN~> +!BU8[kl:__rrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1C +rrN3#!;ulr!<<)u!;ulr!;ZZn!<)rt!!`H'!<<'!!;QQq!<3&urr<&us8N)ts8N*!s8N''rr<'! +rr<&trrE-"r;c`pr;ccqrVururW)`n!!*#u!!*#u!W`9#rW)rtrW)uurr<'!r;c`pr;c]or;Zlu +!.k1ErriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr3]5rrE'!rrE'!rrE'!rrE'!rrE'!s7cR.rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M6` +c8pI~> +!B:&XirB)YrrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1C +rrN3#!;ulr!<<)u!;ulr!;ZZn!<)rt!!`H'!<<'!!;QQq!<3&urr<&us8N)ts8N*!s8N''rr<'! +rr<&trrE-"r;c`pr;ccqrVururW)`n!!*#u!!*#u!W`9#rW)rtrW)uurr<'!r;c`pr;c]or;Zlu +!.k1ErriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr3]5rrE'!rrE'!rrE'!rrE'!rrE'!s7cR.rrE'!rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z +_`*)~> +!BpJ^m0!lqYpNqr;Q`srVultrVlit +rVlitrVlitr;Q`srVultJcGNF!!*#u!s&?$s8E!"rrE)u!%.^GrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'! +!<3'!!<<#urp9a;4b*~> +!BU8[km%.frrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcGKE!!*#u!!)rs!!)ut!!)ip!!)lq!!)ut!!)utrrE*!rrE*!!!)ip"p"]'!<<'!rVlit +r;Q`srr;uus8W*!s8N'!rr;uurVlitrVlitrVlitqu?Zrrr2rup&>!lqYpNqr;Q`srVultrVlit +rVlitrVlitr;Q`srVultJcGNF!!*#u!s&?$s8E!"rrE)u!%.^GrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'! +!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcGKE!!*#u!!)rs!!)ut!!)ip!!)lq!!)ut!!)utrrE*!rrE*!!!)ip"p"]'!<<'!rVlit +r;Q`srr;uus8W*!s8N'!rr;uurVlitrVlitrVlitqu?Zrrr2rup&>!lqYpNqr;Q`srVultrVlit +rVlitrVlitr;Q`srVultJcGNF!!*#u!s&?$s8E!"rrE)u!%.^GrrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8E#srtPP6!<3'!!<3'!!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'! +!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls7ZHm!<2uu!;lcu!<<'!q#:UX!s8N*!rrE#t!!)rs!!*#u!!*#u!!*#u!!*#u!!)or!s&B$ +!;lcr!;uis!:^!g!;c]q!;uis!<)ot!;lcu!<<'!qu6WrrVlitr;Q`sJcGKE"T\Q&rrE)s!!*&s +!!<0#s7u]srrE)u!!*&u!!*&u!!<0#s7u]urrE'!s8E#urr<&urt,82!<3'!!<3'!!<3'!!<3'! +n,O%"!<3'!!<3'!!<3'!!<3'!rVururp9a;4b*~> +!BU8[kl:__rrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls7ZHm!<2uu!;lcu!<<'!q#:UX!s8N*!rrE#t!!)rs!!*#u!!*#u!!*#u!!*#u!!)or!s&B$ +!;lcr!;uis!:^!g!;c]q!;uis!<)ot!;lcu!<<'!qu6WrrVlitr;Q`sJcGKE"T\Q&rrE)s!!*&s +!!<0#s7u]srrE)u!!*&u!!*&u!!<0#s7u]urrE'!s8E#urr<&urt,82!<3'!!<3'!!<3'!!<3'! +n,O%"!<3'!!<3'!!<3'!!<3'!rVururojI/3e.~> +!B:&XirB)YrrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls7ZHm!<2uu!;lcu!<<'!q#:UX!s8N*!rrE#t!!)rs!!*#u!!*#u!!*#u!!*#u!!)or!s&B$ +!;lcr!;uis!:^!g!;c]q!;uis!<)ot!;lcu!<<'!qu6WrrVlitr;Q`sJcGKE"T\Q&rrE)s!!*&s +!!<0#s7u]srrE)u!!*&u!!*&u!!<0#s7u]urrE'!s8E#urr<&urt,82!<3'!!<3'!!<3'!!<3'! +n,O%"!<3'!!<3'!!<3'!!<3'!rVururo4$s2h1~> +!BpJ^m0UEprr2rur;Q`squ6]ts8Vlpr;Z`rJcGEC!!*#u!s&?$s7cQqrrE)o!!*&k!!*&o!!<0#s8E#s +rt,82!<3'!!<3'!!<3'!!<3'!l2V=o!<3'!!<3'!!<3'!!<<#urp9a;4b*~> +!BU8[km%.frrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcGNF!!)rs!!)orrrDfn!!)or!!)or!!*#u +!!*#u!!*#u!!)ip!!*#u!W`6#rVlitr;Q`srr2rurr2rurr2rurr2ruqu6]ts8Vlpr;Q`snG`Ig +q>UEprr2rur;Q`squ6]ts8Vlpr;Z`rJcGEC!!*#u!s&?$s7cQqrrE)o!!*&k!!*&o!!<0#s8E#s +rt,82!<3'!!<3'!!<3'!!<3'!l2V=o!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcGNF!!)rs!!)orrrDfn!!)or!!)or!!*#u +!!*#u!!*#u!!)ip!!*#u!W`6#rVlitr;Q`srr2rurr2rurr2rurr2ruqu6]ts8Vlpr;Q`snG`Ig +q>UEprr2rur;Q`squ6]ts8Vlpr;Z`rJcGEC!!*#u!s&?$s7cQqrrE)o!!*&k!!*&o!!<0#s8E#s +rt,82!<3'!!<3'!!<3'!!<3'!l2V=o!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!BU8[kl:__rrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!B:&XirB)YrrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!BpJ^m0UEp +qYpNqrVls"s8N)orr<&rrr<&rrr<&urr<&urr<&urr<&prr<&ts8N)trr<&srr<&urr<&urr<&u +rr<&urr<&rrrW9$rrD`l!!)Ng!!)fo!W`6#qu6Wrqu6`us8N)mrr<&srr<%Ms7lTo!<3!#!<3'! +rW!$"!<<#u!<;rs!ri9#rVurun,NOi!<<#u!ri9#rW)os'`e76rrE'!rrE'!rrE'!rrE'!rrE)i +!##;3rrE'!rrE'!rrE'!rrE'!s8E#tm/bd$J,~> +!BU8[km%.frrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLq>UEp +qYpNqrVls"s8N)orr<&rrr<&rrr<&urr<&urr<&urr<&prr<&ts8N)trr<&srr<&urr<&urr<&u +rr<&urr<&rrrW9$rrD`l!!)Ng!!)fo!W`6#qu6Wrqu6`us8N)mrr<&srr<%Ms7lTo!<3!#!<3'! +rW!$"!<<#u!<;rs!ri9#rVurun,NOi!<<#u!ri9#rW)os'`e76rrE'!rrE'!rrE'!rrE'!rrE)i +!##;3rrE'!rrE'!rrE'!rrE'!s8E#tklK'jJ,~> +!B:&Xis,M`rrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLq>UEp +qYpNqrVls"s8N)orr<&rrr<&rrr<&urr<&urr<&urr<&prr<&ts8N)trr<&srr<&urr<&urr<&u +rr<&urr<&rrrW9$rrD`l!!)Ng!!)fo!W`6#qu6Wrqu6`us8N)mrr<&srr<%Ms7lTo!<3!#!<3'! +rW!$"!<<#u!<;rs!ri9#rVurun,NOi!<<#u!ri9#rW)os'`e76rrE'!rrE'!rrE'!rrE'!rrE)i +!##;3rrE'!rrE'!rrE'!rrE'!s8E#tirR%VJ,~> +!BpJ^m/R.crrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0g6hquHQm!!)lq! +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLqZ$Korr;os +!<<#us8W&urVu]or;Z]qrVuiss8W*!s8W*!qu?Tprr2rur;Z]q"9/?$s8E#us8N*!s8N'$rr<'! +r;c`pr;ccqq>g6hquHQm!!)lq! +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLqZ$Korr;os +!<<#us8W&urVu]or;Z]qrVuiss8W*!s8W*!qu?Tprr2rur;Z]q"9/?$s8E#us8N*!s8N'$rr<'! +r;c`pr;ccqq>g6hquHQm!!)lq! +!BpJ^m/R.crrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLJcFs6 +!!)ip!!%TMh#@?Srr3'#rrE)u!!<0#s8Duus82iurrE)u!!*&g!!rT)rrE'!rrE)u!<)p4!<3'! +!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLJcFs6 +!!)ip!!%TMh#@?Srr3'#rrE)u!!<0#s8Duus82iurrE)u!!*&g!!rT)rrE'!rrE)u!<)p4!<3'! +!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLJcG'9quHWor;_EKhZ!QUrr3'# +rrE)u!!<0#s8E!"rrE)o!!*&k!!*&o!!<0#s8E#ss#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NLJcG'9quHWor;_EKhZ!QUrr3'# +rrE)u!!<0#s8E!"rrE)o!!*&k!!*&o!!<0#s8E#ss#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BU8[kl:__rrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!B:&XirB)YrrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/[4ea8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8MBdeieN~> +!BU8[klCeaa8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M6`c8pI~> +!B:&XirK/[a8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M$Z_`*)~> +!BpJ^m/[1+!<<) +!BU8[klCb'!<<) +!B:&XirK,!!<<) +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8MBdeieN~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M6`c8pI~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mG\*F!9=+X!;$6h!;c`o!.k1As8;rNs8N(Ms5j:\!2]_o!:^$g!;HNl!.k1Lm/bd$J,~> +!BU8[l/D[B!9=+X!;$6h!;c`o!.k1As8;rNs8N(Ms5j:\!2]_o!:^$g!;HNl!.k1LklK'jJ,~> +!B:&Xj5L% +!BpJ^mHjlJ!<2uu!9F.[!:9^c!;HKn!9*qX!8[YT!4r11!7_#K!.k1;rr<&prr<&$rr<&nrr<&f +rr<&krr<&^rr<%hs8MBdeieN~> +!BU8[l0SHF!<2uu!9F.[!:9^c!;HKn!9*qX!8[YT!4r11!7_#K!.k1;rr<&prr<&$rr<&nrr<&f +rr<&krr<&^rr<%hs8M6`c8pI~> +!B:&Xj6Zg@!<2uu!9F.[!:9^c!;HKn!9*qX!8[YT!4r11!7_#K!.k1;rr<&prr<&$rr<&nrr<&f +rr<&krr<&^rr<%hs8M$Z_`*)~> +!BpJ^mHjiQ!<2uu!<2uu!<2uu!9O4\!:0Xb!;HKn!9*qX!8[YT!5&72!7UrJ!.k1;rr<&prr<&$ +rr<&nrr<&frr<&krr<&^rr<%hs8MBdeieN~> +!BU8[l0SEM!<2uu!<2uu!<2uu!9O4\!:0Xb!;HKn!9*qX!8[YT!5&72!7UrJ!.k1;rr<&prr<&$ +rr<&nrr<&frr<&krr<&^rr<%hs8M6`c8pI~> +!B:&Xj6ZdG!<2uu!<2uu!<2uu!9O4\!:0Xb!;HKn!9*qX!8[YT!5&72!7UrJ!.k1;rr<&prr<&$ +rr<&nrr<&frr<&krr<&^rr<%hs8M$Z_`*)~> +!BpJ^mHjiQ!<2uu!<2uu!<2uu!9O4\!:0Xb!;HKn!5/=3!5&72!7UrJ!.k1;rr<&prr<%nrr<&f +rr<&krr<%Ms8MBdeieN~> +!BU8[l0SEM!<2uu!<2uu!<2uu!9O4\!:0Xb!;HKn!5/=3!5&72!7UrJ!.k1;rr<&prr<%nrr<&f +rr<&krr<%Ms8M6`c8pI~> +!B:&Xj6ZdG!<2uu!<2uu!<2uu!9O4\!:0Xb!;HKn!5/=3!5&72!7UrJ!.k1;rr<&prr<%nrr<&f +rr<&krr<%Ms8M$Z_`*)~> +!BpJ^mHjiQ!<2uu!<2uu!<3!!!<;utqu?TppAashr;Z]qq#:^Bnr;Z`rrr;rtrVuis +qu?Zr!<;utqu?Tp!ri6#q>^9krr;rtrr;rts8W*!!<;utqu?TpqZ$Ko!WN/os8;rps7u`ks8N'! +s8;rrs8N)ts8N*!s8N''rr<'!rr<&trrE-"r;c`pr;ccqrVururW)iqr;Zlu!;HNl!;ulr!!*&u +!;lfp!;6Bj!<)rt!!`H'!<<'!!;ulq!;uls!!*&t!;lfp!!<0#!;ZZk!<)ou!<;utqu?TpqZ$Ko +!WN/ts8;rjs8;rqs8E#ts8E#ss8;ros8E#mrr<&ps8;rprrE-"r;cZn!!)ipr;cNjrW)iqrr<'! +r;`hsrp9a;4b*~> +!BU8[l0SEM!<2uu!<2uu!<3!!!<;utqu?TppAashr;Z]qq#:^Bnr;Z`rrr;rtrVuis +qu?Zr!<;utqu?Tp!ri6#q>^9krr;rtrr;rts8W*!!<;utqu?TpqZ$Ko!WN/os8;rps7u`ks8N'! +s8;rrs8N)ts8N*!s8N''rr<'!rr<&trrE-"r;c`pr;ccqrVururW)iqr;Zlu!;HNl!;ulr!!*&u +!;lfp!;6Bj!<)rt!!`H'!<<'!!;ulq!;uls!!*&t!;lfp!!<0#!;ZZk!<)ou!<;utqu?TpqZ$Ko +!WN/ts8;rjs8;rqs8E#ts8E#ss8;ros8E#mrr<&ps8;rprrE-"r;cZn!!)ipr;cNjrW)iqrr<'! +r;`hsrojI/3e.~> +!B:&Xj6ZdG!<2uu!<2uu!<3!!!<;utqu?TppAashr;Z]qq#:^Bnr;Z`rrr;rtrVuis +qu?Zr!<;utqu?Tp!ri6#q>^9krr;rtrr;rts8W*!!<;utqu?TpqZ$Ko!WN/os8;rps7u`ks8N'! +s8;rrs8N)ts8N*!s8N''rr<'!rr<&trrE-"r;c`pr;ccqrVururW)iqr;Zlu!;HNl!;ulr!!*&u +!;lfp!;6Bj!<)rt!!`H'!<<'!!;ulq!;uls!!*&t!;lfp!!<0#!;ZZk!<)ou!<;utqu?TpqZ$Ko +!WN/ts8;rjs8;rqs8E#ts8E#ss8;ros8E#mrr<&ps8;rprrE-"r;cZn!!)ipr;cNjrW)iqrr<'! +r;`hsro4$s2h1~> +!BpJ^mHFQM!;c`q!<)ot!<)ot!<)ot!;6?l!;ZWp!<)ot!;ZWp!;HKn!;c]q!<)ot!;uis!;uis +!;c]q!;c`q!<)ot!<)ot!<)rt!;?Em!;ZWp!;uis!<)rt!<)ot!<)ot!<)ot!;uis!<)rt!;QQo +!<)ot!;c]q!;- +!BU8[l0/-I!;c`q!<)ot!<)ot!<)ot!;6?l!;ZWp!<)ot!;ZWp!;HKn!;c]q!<)ot!;uis!;uis +!;c]q!;c`q!<)ot!<)ot!<)rt!;?Em!;ZWp!;uis!<)rt!<)ot!<)ot!<)ot!;uis!<)rt!;QQo +!<)ot!;c]q!;- +!B:&Xj66LC!;c`q!<)ot!<)ot!<)ot!;6?l!;ZWp!<)ot!;ZWp!;HKn!;c]q!<)ot!;uis!;uis +!;c]q!;c`q!<)ot!<)ot!<)rt!;?Em!;ZWp!;uis!<)rt!<)ot!<)ot!<)ot!;uis!<)rt!;QQo +!<)ot!;c]q!;- +!BpJ^mHFQM!;c]q!;uis!<2uu!;lcr!;?Em!;c]q!;lcr!;c]q!;HKn!;lcr!;lcr!<)p%!<<'! +s8N)qrr<&qrr<&srr<&urr<&rrr<&mrr<&prr<&srr<&trr<&rrrW9$rrDrr!!)ut!!)rs!!)ip +!!)or!!)or!!)Zk!!)rs!!)ut!!)rs!!*#u!!*#u!!*#u!!*#u!!)or!s&B$!;lcr!;uis!;QQo +!;uis!;$3j!;lcr!;ZWp!;lcr!;$3j!<)ot!<2uu!<3!#!<<'!qu6WrrVlitr;Q`srr2ruqu6Wr +pAY*mq>UEpr;Q`srr2ruqu6WrrVlitr;Q`srr2ruqu6WroD\djqu6Wrrr2rup\t3nq>UEpp\t3n +p&>!lr;Q`squ6Wrqu6Wrqu6Wrqu6Wrp&>!lqYpNqr;Q`sWrN(c!S0Da~> +!BU8[l0/-I!;c]q!;uis!<2uu!;lcr!;?Em!;c]q!;lcr!;c]q!;HKn!;lcr!;lcr!<)p%!<<'! +s8N)qrr<&qrr<&srr<&urr<&rrr<&mrr<&prr<&srr<&trr<&rrrW9$rrDrr!!)ut!!)rs!!)ip +!!)or!!)or!!)Zk!!)rs!!)ut!!)rs!!*#u!!*#u!!*#u!!*#u!!)or!s&B$!;lcr!;uis!;QQo +!;uis!;$3j!;lcr!;ZWp!;lcr!;$3j!<)ot!<2uu!<3!#!<<'!qu6WrrVlitr;Q`srr2ruqu6Wr +pAY*mq>UEpr;Q`srr2ruqu6WrrVlitr;Q`srr2ruqu6WroD\djqu6Wrrr2rup\t3nq>UEpp\t3n +p&>!lr;Q`squ6Wrqu6Wrqu6Wrqu6Wrp&>!lqYpNqr;Q`sWrN(_!R<`V~> +!B:&Xj66LC!;c]q!;uis!<2uu!;lcr!;?Em!;c]q!;lcr!;c]q!;HKn!;lcr!;lcr!<)p%!<<'! +s8N)qrr<&qrr<&srr<&urr<&rrr<&mrr<&prr<&srr<&trr<&rrrW9$rrDrr!!)ut!!)rs!!)ip +!!)or!!)or!!)Zk!!)rs!!)ut!!)rs!!*#u!!*#u!!*#u!!*#u!!)or!s&B$!;lcr!;uis!;QQo +!;uis!;$3j!;lcr!;ZWp!;lcr!;$3j!<)ot!<2uu!<3!#!<<'!qu6WrrVlitr;Q`srr2ruqu6Wr +pAY*mq>UEpr;Q`srr2ruqu6WrrVlitr;Q`srr2ruqu6WroD\djqu6Wrrr2rup\t3nq>UEpp\t3n +p&>!lr;Q`squ6Wrqu6Wrqu6Wrqu6Wrp&>!lqYpNqr;Q`sWrN(Y!Q-jH~> +!BpJ^mHFQM!;c]q!;uis!<3#o!;?Em!;c]q!;lcr!;c]q!;HKn!;lcr!;lcr!<)p%!<<'!s8N)q +rr<&qrr<&srr<&urr<&rrr<&mrr<&orr<&urr<&srr<&rrrN3#s7lZms8E#lrr<&rrr<&rrr<&k +rr<&srr<&trr<&srr<&urr<&urr<&urr<&urr<&rrrN3#s7lZmrr<&ns8E#ks8)fnrr<&ps7lZi +s8)fprr<&urr<&urrW9$rrDrr!!)ut!!)rs!!*#u!!)or!!)`m!!)ip!!)rs!!*#u!!)or!!)rs +rW)iqq#L3iqZ-Nn!!*#u!!)rsqZ-Hl!!)cn!!)lqqZ-Qo!!)or!!)or!!)orq#L*f!!)lq!!)rs +!!'&!rp9a;4b*~> +!BU8[l0/-I!;c]q!;uis!<3#o!;?Em!;c]q!;lcr!;c]q!;HKn!;lcr!;lcr!<)p%!<<'!s8N)q +rr<&qrr<&srr<&urr<&rrr<&mrr<&orr<&urr<&srr<&rrrN3#s7lZms8E#lrr<&rrr<&rrr<&k +rr<&srr<&trr<&srr<&urr<&urr<&urr<&urr<&rrrN3#s7lZmrr<&ns8E#ks8)fnrr<&ps7lZi +s8)fprr<&urr<&urrW9$rrDrr!!)ut!!)rs!!*#u!!)or!!)`m!!)ip!!)rs!!*#u!!)or!!)rs +rW)iqq#L3iqZ-Nn!!*#u!!)rsqZ-Hl!!)cn!!)lqqZ-Qo!!)or!!)or!!)orq#L*f!!)lq!!)rs +!!'&!rojI/3e.~> +!B:&Xj66LC!;c]q!;uis!<3#o!;?Em!;c]q!;lcr!;c]q!;HKn!;lcr!;lcr!<)p%!<<'!s8N)q +rr<&qrr<&srr<&urr<&rrr<&mrr<&orr<&urr<&srr<&rrrN3#s7lZms8E#lrr<&rrr<&rrr<&k +rr<&srr<&trr<&srr<&urr<&urr<&urr<&urr<&rrrN3#s7lZmrr<&ns8E#ks8)fnrr<&ps7lZi +s8)fprr<&urr<&urrW9$rrDrr!!)ut!!)rs!!*#u!!)or!!)`m!!)ip!!)rs!!*#u!!)or!!)rs +rW)iqq#L3iqZ-Nn!!*#u!!)rsqZ-Hl!!)cn!!)lqqZ-Qo!!)or!!)or!!)orq#L*f!!)lq!!)rs +!!'&!ro4$s2h1~> +!BpJ^mHFQM!;c]q!;uis!<2uu!:Tpf!;c]q!;lcr!;c]q!;HKn!;lcr!;lcr!<)p%!<3'!!<3&q +rr<&qrr<&srr<&urr<&rrr<&mrr<&orr<&urr<&srr<&rrrW9$rrDWirrDio!!)or!!)or!!)Zk +!!)rs!!)ut!!)rs!!*#u!!*#u!!*#u!!*#u!!)or!s&B$!;6?l!;-UEpr;Q`srr2ru +qu6Wrq>^HprVlito)A[ir;Q`sqYpTsrrDus!!)rs!!)ip!!)cn!!)or!!)rs!!)rs!!)or!!)or +!!)or!!)He!!)lq!!)rs!!'&!rp9a;4b*~> +!BU8[l0/-I!;c]q!;uis!<2uu!:Tpf!;c]q!;lcr!;c]q!;HKn!;lcr!;lcr!<)p%!<3'!!<3&q +rr<&qrr<&srr<&urr<&rrr<&mrr<&orr<&urr<&srr<&rrrW9$rrDWirrDio!!)or!!)or!!)Zk +!!)rs!!)ut!!)rs!!*#u!!*#u!!*#u!!*#u!!)or!s&B$!;6?l!;-UEpr;Q`srr2ru +qu6Wrq>^HprVlito)A[ir;Q`sqYpTsrrDus!!)rs!!)ip!!)cn!!)or!!)rs!!)rs!!)or!!)or +!!)or!!)He!!)lq!!)rs!!'&!rojI/3e.~> +!B:&Xj66LC!;c]q!;uis!<2uu!:Tpf!;c]q!;lcr!;c]q!;HKn!;lcr!;lcr!<)p%!<3'!!<3&q +rr<&qrr<&srr<&urr<&rrr<&mrr<&orr<&urr<&srr<&rrrW9$rrDWirrDio!!)or!!)or!!)Zk +!!)rs!!)ut!!)rs!!*#u!!*#u!!*#u!!*#u!!)or!s&B$!;6?l!;-UEpr;Q`srr2ru +qu6Wrq>^HprVlito)A[ir;Q`sqYpTsrrDus!!)rs!!)ip!!)cn!!)or!!)rs!!)rs!!)or!!)or +!!)or!!)He!!)lq!!)rs!!'&!ro4$s2h1~> +!BpJ^mHFQM!;c]q!;uis!<2uu!:Tpf!;c]q!;lcr!;c]q!;HKn!;lcr!;lcr!<)p%!<3'!!<3&q +rr<&qrr<&srr<&urr<&rrr<&mrr<&nrrN3#!;lcr!;lcu!<<'!pAY*mr;Q`sq>UEpqu6Wrqu6Wr +o`"mkr;Q`srVlitr;Q`srr2rurr2rurr2rurr2ruqu6`us8N)lrr<&orr<&srr<&prr<&srr<&r +rr<&prr<&irr<&srr<&trr<&urr<&urrW9$rrDrr!!)ut!!)rs!!*#u!!)or!!)`m!!)ip!!)rs +!!*#u!!)or!!)ut!!)rs!!*#u!!)Ti!!)rs!!)lq!W`6#r;Q`sr;Q`sq>UEpp\t3nqu6Wrr;Q`s +r;Q`squ6Wrqu6Wrqu6Wrmf*7eqYpNqr;Q`sWrN(c!S0Da~> +!BU8[l0/-I!;c]q!;uis!<2uu!:Tpf!;c]q!;lcr!;c]q!;HKn!;lcr!;lcr!<)p%!<3'!!<3&q +rr<&qrr<&srr<&urr<&rrr<&mrr<&nrrN3#!;lcr!;lcu!<<'!pAY*mr;Q`sq>UEpqu6Wrqu6Wr +o`"mkr;Q`srVlitr;Q`srr2rurr2rurr2rurr2ruqu6`us8N)lrr<&orr<&srr<&prr<&srr<&r +rr<&prr<&irr<&srr<&trr<&urr<&urrW9$rrDrr!!)ut!!)rs!!*#u!!)or!!)`m!!)ip!!)rs +!!*#u!!)or!!)ut!!)rs!!*#u!!)Ti!!)rs!!)lq!W`6#r;Q`sr;Q`sq>UEpp\t3nqu6Wrr;Q`s +r;Q`squ6Wrqu6Wrqu6Wrmf*7eqYpNqr;Q`sWrN(_!R<`V~> +!B:&Xj66LC!;c]q!;uis!<2uu!:Tpf!;c]q!;lcr!;c]q!;HKn!;lcr!;lcr!<)p%!<3'!!<3&q +rr<&qrr<&srr<&urr<&rrr<&mrr<&nrrN3#!;lcr!;lcu!<<'!pAY*mr;Q`sq>UEpqu6Wrqu6Wr +o`"mkr;Q`srVlitr;Q`srr2rurr2rurr2rurr2ruqu6`us8N)lrr<&orr<&srr<&prr<&srr<&r +rr<&prr<&irr<&srr<&trr<&urr<&urrW9$rrDrr!!)ut!!)rs!!*#u!!)or!!)`m!!)ip!!)rs +!!*#u!!)or!!)ut!!)rs!!*#u!!)Ti!!)rs!!)lq!W`6#r;Q`sr;Q`sq>UEpp\t3nqu6Wrr;Q`s +r;Q`squ6Wrqu6Wrqu6Wrmf*7eqYpNqr;Q`sWrN(Y!Q-jH~> +!BpJ^mHFQM!;c]q!;uis!<)ot!<)rt!;?Em!;ZWp!<)ot!;ZWp!;HKn!;c]q!<)ot!;lcr!<2uu +!;ZWp!;c]q!;uis!<)ot!<)rt!;?Em!<)ot!;uiu!<3&rs8N)trr<&trr<&ts8N)ts8N)trr<&o +rr<&trr<&qrr<&krr<&srr<&trr<&ts8N)urr<&urr<&urr<&us8N)trr<&trr<&ts8N)srr<&o +s8N)trr<&prr<&ts8N)rrr<&orr<&ts8N)prr<&ts8N)trr<&urr<&urr<&urr<&trr<&srr<&s +rr<&trr<&ts8N)mrr<&trr<&urr<&srr<&trr<&trr<&ss8N)trr<&trr<&ts8N)prr<&ts8N)p +rr<&rrr<&ts8N)prr<&nrr<&rrr<&ts8N)ss8N)trr<&qrr<&qrr<&ts8N)lrr<&qrr<&srr<&! +s8MBdeieN~> +!BU8[l0/-I!;c]q!;uis!<)ot!<)rt!;?Em!;ZWp!<)ot!;ZWp!;HKn!;c]q!<)ot!;lcr!<2uu +!;ZWp!;c]q!;uis!<)ot!<)rt!;?Em!<)ot!;uiu!<3&rs8N)trr<&trr<&ts8N)ts8N)trr<&o +rr<&trr<&qrr<&krr<&srr<&trr<&ts8N)urr<&urr<&urr<&us8N)trr<&trr<&ts8N)srr<&o +s8N)trr<&prr<&ts8N)rrr<&orr<&ts8N)prr<&ts8N)trr<&urr<&urr<&urr<&trr<&srr<&s +rr<&trr<&ts8N)mrr<&trr<&urr<&srr<&trr<&trr<&ss8N)trr<&trr<&ts8N)prr<&ts8N)p +rr<&rrr<&ts8N)prr<&nrr<&rrr<&ts8N)ss8N)trr<&qrr<&qrr<&ts8N)lrr<&qrr<&srr<&! +s8M6`c8pI~> +!B:&Xj66LC!;c]q!;uis!<)ot!<)rt!;?Em!;ZWp!<)ot!;ZWp!;HKn!;c]q!<)ot!;lcr!<2uu +!;ZWp!;c]q!;uis!<)ot!<)rt!;?Em!<)ot!;uiu!<3&rs8N)trr<&trr<&ts8N)ts8N)trr<&o +rr<&trr<&qrr<&krr<&srr<&trr<&ts8N)urr<&urr<&urr<&us8N)trr<&trr<&ts8N)srr<&o +s8N)trr<&prr<&ts8N)rrr<&orr<&ts8N)prr<&ts8N)trr<&urr<&urr<&urr<&trr<&srr<&s +rr<&trr<&ts8N)mrr<&trr<&urr<&srr<&trr<&trr<&ss8N)trr<&trr<&ts8N)prr<&ts8N)p +rr<&rrr<&ts8N)prr<&nrr<&rrr<&ts8N)ss8N)trr<&qrr<&qrr<&ts8N)lrr<&qrr<&srr<&! +s8M$Z_`*)~> +!BpJ^mHX`L!<)rs!<3#t!<)rr!;?Hh!;ulq!;lfm!<)ro!;ulq!;c]q!<2uu!;uln!<3#t!<3#t +!<)rr!!3*"p&FsjqYpNqqYpQrs8;rps8;rprrE-"r;cQkr;c`pq>g?krW)rtrW)osr;Zs"!!*&u +!<<*!!<<*!!!E6$!<;utqu?Tpr;ZTnr;Qcts8;rls8;ots8E#us7u`ms8;rks8;ots8Duus8E#u +s8N*!s8N)us8;rqs8E#ts8E#ss8;ourrD`lr;cisrW)rtrW)osr;c`p! +!BU8[l0Ag?krW)rtrW)osr;Zs"!!*&u +!<<*!!<<*!!!E6$!<;utqu?Tpr;ZTnr;Qcts8;rls8;ots8E#us7u`ms8;rks8;ots8Duus8E#u +s8N*!s8N)us8;rqs8E#ts8E#ss8;ourrD`lr;cisrW)rtrW)osr;c`p! +!B:&Xj6H[B!<)rs!<3#t!<)rr!;?Hh!;ulq!;lfm!<)ro!;ulq!;c]q!<2uu!;uln!<3#t!<3#t +!<)rr!!3*"p&FsjqYpNqqYpQrs8;rps8;rprrE-"r;cQkr;c`pq>g?krW)rtrW)osr;Zs"!!*&u +!<<*!!<<*!!!E6$!<;utqu?Tpr;ZTnr;Qcts8;rls8;ots8E#us7u`ms8;rks8;ots8Duus8E#u +s8N*!s8N)us8;rqs8E#ts8E#ss8;ourrD`lr;cisrW)rtrW)osr;c`p! +!BpJ^m=G<#rr<&arr<&qrr<%Ms-N`c!.k0$s6K^am/bd$J,~> +!BU8[l%/ltrr<&arr<&qrr<%Ms-N`c!.k0$s6K^aklK'jJ,~> +!B:&Xj+76nrr<&arr<&qrr<%Ms-N`c!.k0$s6K^airR%VJ,~> +!BpJ^m=G<#rr<&brr<&prr<%Ms-N`c!.k0$s6K^am/bd$J,~> +!BU8[l%/ltrr<&brr<&prr<%Ms-N`c!.k0$s6K^aklK'jJ,~> +!B:&Xj+76nrr<&brr<&prr<%Ms-N`c!.k0$s6K^airR%VJ,~> +!BpJ^m=G<$rr<&arr<&prr<%Ms-Wfd!.k0$s6BX`m/bd$J,~> +!BU8[l%/lurr<&arr<&prr<%Ms-Wfd!.k0$s6BX`klK'jJ,~> +!B:&Xj+76orr<&arr<&prr<%Ms-Wfd!.k0$s6BX`irR%VJ,~> +!BpJ^m=G<)s82l`s82los8;qKs.B>h!.k0$s69R_m/bd$J,~> +!BU8[l%/m%s82l`s82los8;qKs.B>h!.k0$s69R_klK'jJ,~> +!B:&Xj+76ts82l`s82los8;qKs.B>h!.k0$s69R_irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mHafN!:9^c!.k0$s+13$s+14Cs8MBdeieN~> +!BU8[l0JBJ!:9^c!.k0$s+13$s+14Cs8M6`c8pI~> +!B:&Xj6QaD!:9^c!.k0$s+13$s+14Cs8M$Z_`*)~> +!BpJ^mHFQM!:9^c!.k0$s+13$s+14Cs8MBdeieN~> +!BU8[l0/-I!:9^c!.k0$s+13$s+14Cs8M6`c8pI~> +!B:&Xj66LC!:9^c!.k0$s+13$s+14Cs8M$Z_`*)~> +!BpJ^mHOWP!<3%Ms+13$s+13$s5 +!BU8[l083L!<3%Ms+13$s+13$s5 +!B:&Xj6?RF!<3%Ms+13$s+13$s5 +!BpJ^mHOWP!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<%Ms+13$s+131s8MBdeieN~> +!BU8[l083L!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<%Ms+13$s+131s8M6`c8pI~> +!B:&Xj6?RF!<3&ss8E#us8E#rs8E#os8;rrs8N''rr<'!rr<%Ms+13$s+131s8M$Z_`*)~> +!BpJ^mHX]O!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!.k0$s+13$s,[3Zm/bd$ +J,~> +!BU8[l0A9K!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!.k0$s+13$s,[3ZklK'j +J,~> +!B:&Xj6HXE!<2uu!;uis!<)ot!;ZWp!;c]q!<)ot!<)rt!<<*!!<<'!!.k0$s+13$s,[3ZirR%V +J,~> +!BpJ^mHX]O!<2uu!;lcu!<<'!q#: +!BU8[l0A9K!<2uu!;lcu!<<'!q#: +!B:&Xj6HXE!<2uu!;lcu!<<'!q#:!Q-jH~> +!BpJ^mHacP!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!.k0$s+13$s,[3Zm/bd$J,~> +!BU8[l0J?L!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!.k0$s+13$s,[3ZklK'jJ,~> +!B:&Xj6Q^F!;uis!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!.k0$s+13$s,[3ZirR%VJ,~> +!BpJ^mHafK!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!.k0$s+13$s,[3Zm/bd$J,~> +!BU8[l0JBG!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!.k0$s+13$s,[3ZklK'jJ,~> +!B:&Xj6QaA!;lfr!;HKn!;lcr!;lcr!<2uu!<2uu!<2uu!.k0$s+13$s,[3ZirR%VJ,~> +!BpJ^mHjiQ!;c]q!<)p"!<<'!q#: +!BU8[l0SEM!;c]q!<)p"!<<'!q#: +!B:&Xj6ZdG!;c]q!<)p"!<<'!q#:!Q-jH~> +!BpJ^mHjiQ!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;uls!.k0$s+13$s-E]a +m/bd$J,~> +!BU8[l0SEM!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;uls!.k0$s+13$s-E]a +klK'jJ,~> +!B:&Xj6ZdG!;c]q!<2uu!<)ot!;ZWp!;c]q!<)ot!<)ot!<2uu!<2uu!;uls!.k0$s+13$s-E]a +irR%VJ,~> +!BpJ^mHsrP!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!<)rt!.k0$s+13$s-E]am/bd$ +J,~> +!BU8[l0\NL!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!<)rt!.k0$s+13$s-E]aklK'j +J,~> +!B:&Xj6cmF!<3#s!!*&u!<<)u!<)ro!;ulq!<)rs!<<*!!<<*!!<)rt!.k0$s+13$s-E]airR%V +J,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mD],*!.k0as8N(gs8N)Ts8N),s8;r_s8;qKs2"a7m/bd$J,~> +!BU8[l,E]&!.k0as8N(gs8N)Ts8N),s8;r_s8;qKs2"a7klK'jJ,~> +!B:&Xj2M&u!.k0as8N(gs8N)Ts8N),s8;r_s8;qKs2"a7irR%VJ,~> +!BpJ^mG.a;!:p0i!.k17s8;rarr<&orr<&prr<&Vrr<&mrr<&Srr<&orr<&prr<&Srr<&krr<&o +rr<&Lrr<&nrr<&^rr<&=rr<&drr<%^s8MBdeieN~> +!BU8[l.l=7!:p0i!.k17s8;rarr<&orr<&prr<&Vrr<&mrr<&Srr<&orr<&prr<&Srr<&krr<&o +rr<&Lrr<&nrr<&^rr<&=rr<&drr<%^s8M6`c8pI~> +!B:&Xj4s\1!:p0i!.k17s8;rarr<&orr<&prr<&Vrr<&mrr<&Srr<&orr<&prr<&Srr<&krr<&o +rr<&Lrr<&nrr<&^rr<&=rr<&drr<%^s8M$Z_`*)~> +!BpJ^mHsrH!;ulm!:p0i!.k14rr<&crr<&orr<&prr<&Vrr<&mrr<&Srr<&orr<&prr<&Srr<&k +rr<&orr<&Lrr<&nrr<&^rr<&=rr<&drr<%^s8MBdeieN~> +!BU8[l0\ND!;ulm!:p0i!.k14rr<&crr<&orr<&prr<&Vrr<&mrr<&Srr<&orr<&prr<&Srr<&k +rr<&orr<&Lrr<&nrr<&^rr<&=rr<&drr<%^s8M6`c8pI~> +!B:&Xj6cm>!;ulm!:p0i!.k14rr<&crr<&orr<&prr<&Vrr<&mrr<&Srr<&orr<&prr<&Srr<&k +rr<&orr<&Lrr<&nrr<&^rr<&=rr<&drr<%^s8M$Z_`*)~> +!BpJ^mHsrH!;ZZp!;ulr!!*&t!<3#o!;lfp!;lfp!!*&u!<)rr!<)rr!<<)u!<)ro!2KPq!<3&Z +rr<&prr<&Vrr<&=rr<&prr<&Srr<&arr<&Arr<&^rr<&(rr<%^s8MBdeieN~> +!BU8[l0\ND!;ZZp!;ulr!!*&t!<3#o!;lfp!;lfp!!*&u!<)rr!<)rr!<<)u!<)ro!2KPq!<3&Z +rr<&prr<&Vrr<&=rr<&prr<&Srr<&arr<&Arr<&^rr<&(rr<%^s8M6`c8pI~> +!B:&Xj6cm>!;ZZp!;ulr!!*&t!<3#o!;lfp!;lfp!!*&u!<)rr!<)rr!<<)u!<)ro!2KPq!<3&Z +rr<&prr<&Vrr<&=rr<&prr<&Srr<&arr<&Arr<&^rr<&(rr<%^s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#os8N)ss7cTos7lZns7lZos7cTos7lZps7ZNns7lYirrN3#!;ulr +!!*&u!;lfq!;c`l!<)ou!<;utrr;uu#6+Z's8N'!r;Z]qqu?Kmr;Z`rq>^Bn!WN/qs8E#ts8E#s +s8E#ps7u`orrE-"r;cQkr;ccqrVururW)lr! +!BU8[l0\NN!!`H'rrE'!s8E#os8N)ss7cTos7lZns7lZos7cTos7lZps7ZNns7lYirrN3#!;ulr +!!*&u!;lfq!;c`l!<)ou!<;utrr;uu#6+Z's8N'!r;Z]qqu?Kmr;Z`rq>^Bn!WN/qs8E#ts8E#s +s8E#ps7u`orrE-"r;cQkr;ccqrVururW)lr! +!B:&Xj6cmH!!`H'rrE'!s8E#os8N)ss7cTos7lZns7lZos7cTos7lZps7ZNns7lYirrN3#!;ulr +!!*&u!;lfq!;c`l!<)ou!<;utrr;uu#6+Z's8N'!r;Z]qqu?Kmr;Z`rq>^Bn!WN/qs8E#ts8E#s +s8E#ps7u`orrE-"r;cQkr;ccqrVururW)lr! +!BpJ^mHsrQ!!rT)rrE'!rr<&ps8N)rs8E#ts8N)ts8N)qs8E#ss8Duus8E#ts8E#us8E#ss8E#t +s8;rts8N*!s8N)ts8N(prr<&urr<&rs8N)urr<&qrr<&orr<&ps8N)trr<&us8N*!s8N*!rr<&u +rr<&trr<&qrr<&mrr<&qrr<&ts8N)orr<&srr<&qrr<&orr<&ps8N)trr<&orr<&trr<&rs8N)u +rr<&ts8N)trr<&qrr<&orr<&os8N)urr<&trr<&trr<&rs8N)urr<&qrr<&nrr<&qrr<&srr<&l +rr<&qrr<&trr<&rs8N)urr<&trr<&ts8N)trr<&trr<&krr<&qs8N)trr<&rrr<&prr<&trr<&s +rr<&ts8N)trr<&trr<&rs8N)urr<&trr<&ts8N)Ds8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ps8N)rs8E#ts8N)ts8N)qs8E#ss8Duus8E#ts8E#us8E#ss8E#t +s8;rts8N*!s8N)ts8N(prr<&urr<&rs8N)urr<&qrr<&orr<&ps8N)trr<&us8N*!s8N*!rr<&u +rr<&trr<&qrr<&mrr<&qrr<&ts8N)orr<&srr<&qrr<&orr<&ps8N)trr<&orr<&trr<&rs8N)u +rr<&ts8N)trr<&qrr<&orr<&os8N)urr<&trr<&trr<&rs8N)urr<&qrr<&nrr<&qrr<&srr<&l +rr<&qrr<&trr<&rs8N)urr<&trr<&ts8N)trr<&trr<&krr<&qs8N)trr<&rrr<&prr<&trr<&s +rr<&ts8N)trr<&trr<&rs8N)urr<&trr<&ts8N)Ds8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ps8N)rs8E#ts8N)ts8N)qs8E#ss8Duus8E#ts8E#us8E#ss8E#t +s8;rts8N*!s8N)ts8N(prr<&urr<&rs8N)urr<&qrr<&orr<&ps8N)trr<&us8N*!s8N*!rr<&u +rr<&trr<&qrr<&mrr<&qrr<&ts8N)orr<&srr<&qrr<&orr<&ps8N)trr<&orr<&trr<&rs8N)u +rr<&ts8N)trr<&qrr<&orr<&os8N)urr<&trr<&trr<&rs8N)urr<&qrr<&nrr<&qrr<&srr<&l +rr<&qrr<&trr<&rs8N)urr<&trr<&ts8N)trr<&trr<&krr<&qs8N)trr<&rrr<&prr<&trr<&s +rr<&ts8N)trr<&trr<&rs8N)urr<&trr<&ts8N)Ds8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)qs8N)rs8N'#rr<&ss8N*!s8N)rs8N)u +s8E#ps8;qjrr<&urr<&rrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrDrr!!)or!!)`m +!!)or!!)or!!)fo"p"]'!<<'!qYpNqq#:UEpr;Q`soD\djqu6Wrq#:!lp\t3nqYpNqr;Q`sp&>!lp&>!lqu6Wrq>UEpqu6Wrrr2ruqu6Wrp&>!l +qYpNqr;Q`squ6WrqYpNqqu6Wrrr2ruqu6Wrrr2ruqu6Wrr;Q`sq#: +!BU8[l0\NN!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)qs8N)rs8N'#rr<&ss8N*!s8N)rs8N)u +s8E#ps8;qjrr<&urr<&rrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrDrr!!)or!!)`m +!!)or!!)or!!)fo"p"]'!<<'!qYpNqq#:UEpr;Q`soD\djqu6Wrq#:!lp\t3nqYpNqr;Q`sp&>!lp&>!lqu6Wrq>UEpqu6Wrrr2ruqu6Wrp&>!l +qYpNqr;Q`squ6WrqYpNqqu6Wrrr2ruqu6Wrrr2ruqu6Wrr;Q`sq#: +!B:&Xj6cmH!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)qs8N)rs8N'#rr<&ss8N*!s8N)rs8N)u +s8E#ps8;qjrr<&urr<&rrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrDrr!!)or!!)`m +!!)or!!)or!!)fo"p"]'!<<'!qYpNqq#:UEpr;Q`soD\djqu6Wrq#:!lp\t3nqYpNqr;Q`sp&>!lp&>!lqu6Wrq>UEpqu6Wrrr2ruqu6Wrp&>!l +qYpNqr;Q`squ6WrqYpNqqu6Wrrr2ruqu6Wrrr2ruqu6Wrr;Q`sq#: +!BpJ^mHsrQ!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N*!s7ZNms8N)os8)el +rr<&srr<&srr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrN3#s7lZlrr<&mrr<&rrr<&hrrrK' +rrE*!!;c]q!;QQo!;ZWp!;uis!;QTk!;lcr!;QQo!;lcr!;lcr!;QQo!;QQo!;QTk!;lcr!;6?l +!;HKn!;ZWp!<2uu!;-9k!;c`m!;lcr!;ZWp!;lcr!<3#o!;6?l!;c]q!;uis!;lcr!;c`k!<2uu +!;lcr!<3#o!;uis!;HNm!6Y?@m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N*!s7ZNms8N)os8)el +rr<&srr<&srr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrN3#s7lZlrr<&mrr<&rrr<&hrrrK' +rrE*!!;c]q!;QQo!;ZWp!;uis!;QTk!;lcr!;QQo!;lcr!;lcr!;QQo!;QQo!;QTk!;lcr!;6?l +!;HKn!;ZWp!<2uu!;-9k!;c`m!;lcr!;ZWp!;lcr!<3#o!;6?l!;c]q!;uis!;lcr!;c`k!<2uu +!;lcr!<3#o!;uis!;HNm!6Y?@klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N*!s7ZNms8N)os8)el +rr<&srr<&srr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrN3#s7lZlrr<&mrr<&rrr<&hrrrK' +rrE*!!;c]q!;QQo!;ZWp!;uis!;QTk!;lcr!;QQo!;lcr!;lcr!;QQo!;QQo!;QTk!;lcr!;6?l +!;HKn!;ZWp!<2uu!;-9k!;c`m!;lcr!;ZWp!;lcr!<3#o!;6?l!;c]q!;uis!;lcr!;c`k!<2uu +!;lcr!<3#o!;uis!;HNm!6Y?@irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N*!s7ZNms8N)ms82kn +s7u`nrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrD]k!!)`m!!)or!!)Qh"p"Z'rrE'! +qYpNqq#:UEpr;Q`sq>UEpr;Q`squ6Wrq#:UEpr;Q`squ6Wr +p&>!lp\t3nq>UEprr2ruo`"mkqu6Wrr;Q`squ6Wrq>UEpqu6Wrrr2rumf*7eqYpNqr;Q`squ6Wr +qYpNqp\t3nqu6Wrrr2rup&>!lo`+pkbl@\0!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N*!s7ZNms8N)ms82kn +s7u`nrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrD]k!!)`m!!)or!!)Qh"p"Z'rrE'! +qYpNqq#:UEpr;Q`sq>UEpr;Q`squ6Wrq#:UEpr;Q`squ6Wr +p&>!lp\t3nq>UEprr2ruo`"mkqu6Wrr;Q`squ6Wrq>UEpqu6Wrrr2rumf*7eqYpNqr;Q`squ6Wr +qYpNqp\t3nqu6Wrrr2rup&>!lo`+pkbl@\,!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#os8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N*!s7ZNms8N)ms82kn +s7u`nrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrD]k!!)`m!!)or!!)Qh"p"Z'rrE'! +qYpNqq#:UEpr;Q`sq>UEpr;Q`squ6Wrq#:UEpr;Q`squ6Wr +p&>!lp\t3nq>UEprr2ruo`"mkqu6Wrr;Q`squ6Wrq>UEpqu6Wrrr2rumf*7eqYpNqr;Q`squ6Wr +qYpNqp\t3nqu6Wrrr2rup&>!lo`+pkbl@\&!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)ts8N'!s8E#os8E#ts8E#us8E#ms8N)p +s8N)ts8N(rrr<&qrr<&trr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrD]k!!)`m!!)or +!!)Qh"p"Z'rrE'!qYpNqq#:UEpr;Q`sq>UEpr;Q`squ6Wrq#:UEpr;Q`squ6Wrp&>!lp\t3nq#:BqrrDZj!!)or!!)rs!!)or!!)ip!!)or!!*#u!!)He!!)lq +!!)rs!!)or!!)lq!!)cn!!)or!!*#u!!)]l!!)fo!!)rs!!(:Drp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)ts8N'!s8E#os8E#ts8E#us8E#ms8N)p +s8N)ts8N(rrr<&qrr<&trr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrD]k!!)`m!!)or +!!)Qh"p"Z'rrE'!qYpNqq#:UEpr;Q`sq>UEpr;Q`squ6Wrq#:UEpr;Q`squ6Wrp&>!lp\t3nq#:BqrrDZj!!)or!!)rs!!)or!!)ip!!)or!!*#u!!)He!!)lq +!!)rs!!)or!!)lq!!)cn!!)or!!*#u!!)]l!!)fo!!)rs!!(:DrojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ps8N)rs8N)ts8N)ts8N)ts8N'!s8E#os8E#ts8E#us8E#ms8N)p +s8N)ts8N(rrr<&qrr<&trr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrD]k!!)`m!!)or +!!)Qh"p"Z'rrE'!qYpNqq#:UEpr;Q`sq>UEpr;Q`squ6Wrq#:UEpr;Q`squ6Wrp&>!lp\t3nq#:BqrrDZj!!)or!!)rs!!)or!!)ip!!)or!!*#u!!)He!!)lq +!!)rs!!)or!!)lq!!)cn!!)or!!*#u!!)]l!!)fo!!)rs!!(:Dro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZps8;rts8;rss7lZps7lZos7lZos7lZps7lZns7lYlrr<&q +rr<&trr<&lrr<&orr<&trr<&urr<&srr<&urr<&urr<&urr<&urr<&ts8N)rrr<&trr<&rrr<&q +rr<&ts8N)nrr<&urr<&prr<&orr<&trr<&urr<&srr<&prr<&ts8N)rrr<&os8N)trr<&qrr<&o +rr<&trr<&trr<&prr<&ts8N)rrr<&lrr<&nrr<&orrN3#!;$3j!;lcr!<)rt!;lcr!;QQo!<)rt +!<)ot!<)rt!;6?l!;c]q!;uis!;lcr!<)ot!<2uu!<)rt!<)ot!<)rt!<)ot!<)rt!;uis!;QTo +!<)ot!;lfr!7h,Km/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZps8;rts8;rss7lZps7lZos7lZos7lZps7lZns7lYlrr<&q +rr<&trr<&lrr<&orr<&trr<&urr<&srr<&urr<&urr<&urr<&urr<&ts8N)rrr<&trr<&rrr<&q +rr<&ts8N)nrr<&urr<&prr<&orr<&trr<&urr<&srr<&prr<&ts8N)rrr<&os8N)trr<&qrr<&o +rr<&trr<&trr<&prr<&ts8N)rrr<&lrr<&nrr<&orrN3#!;$3j!;lcr!<)rt!;lcr!;QQo!<)rt +!<)ot!<)rt!;6?l!;c]q!;uis!;lcr!<)ot!<2uu!<)rt!<)ot!<)rt!<)ot!<)rt!;uis!;QTo +!<)ot!;lfr!7h,KklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZps8;rts8;rss7lZps7lZos7lZos7lZps7lZns7lYlrr<&q +rr<&trr<&lrr<&orr<&trr<&urr<&srr<&urr<&urr<&urr<&urr<&ts8N)rrr<&trr<&rrr<&q +rr<&ts8N)nrr<&urr<&prr<&orr<&trr<&urr<&srr<&prr<&ts8N)rrr<&os8N)trr<&qrr<&o +rr<&trr<&trr<&prr<&ts8N)rrr<&lrr<&nrr<&orrN3#!;$3j!;lcr!<)rt!;lcr!;QQo!<)rt +!<)ot!<)rt!;6?l!;c]q!;uis!;lcr!<)ot!<2uu!<)rt!<)ot!<)rt!<)ot!<)rt!;uis!;QTo +!<)ot!;lfr!7h,KirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7lZps8;rts8;rrs82los8)fps8;p!rr<&ss8)frs7lZns7u_m +s8;rss8;ots7u`ns7u`ls8;rss8E#ts8Duus8E#us8N*!s8N)us8;rms8;rrs7u`ns8;rjrr<&u +rr<&ss7u`ls8;rss8E#ts8E#os8;ots8E#us7u`os8N'!s8;rqs7u`ls8;rss7u`ns8;ots8E#u +s7u`ns7u`os7u`lrr<&ls7u`os8;ots8E#us7u`ms8;ourrDusr;cQkq>gNprW)rtrW)iqr;ccq +r;c]or;Zlu!;ulq!;uln!;uit!<;utqZ$Qqec5X9!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ss7lZps8;rts8;rrs82los8)fps8;p!rr<&ss8)frs7lZns7u_m +s8;rss8;ots7u`ns7u`ls8;rss8E#ts8Duus8E#us8N*!s8N)us8;rms8;rrs7u`ns8;rjrr<&u +rr<&ss7u`ls8;rss8E#ts8E#os8;ots8E#us7u`os8N'!s8;rqs7u`ls8;rss7u`ns8;ots8E#u +s7u`ns7u`os7u`lrr<&ls7u`os8;ots8E#us7u`ms8;ourrDusr;cQkq>gNprW)rtrW)iqr;ccq +r;c]or;Zlu!;ulq!;uln!;uit!<;utqZ$Qqec5X5!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss7lZps8;rts8;rrs82los8)fps8;p!rr<&ss8)frs7lZns7u_m +s8;rss8;ots7u`ns7u`ls8;rss8E#ts8Duus8E#us8N*!s8N)us8;rms8;rrs7u`ns8;rjrr<&u +rr<&ss7u`ls8;rss8E#ts8E#os8;ots8E#us7u`os8N'!s8;rqs7u`ls8;rss7u`ns8;ots8E#u +s7u`ns7u`os7u`lrr<&ls7u`os8;ots8E#us7u`ms8;ourrDusr;cQkq>gNprW)rtrW)iqr;ccq +r;c]or;Zlu!;ulq!;uln!;uit!<;utqZ$Qqec5X/!Q-jH~> +!BpJ^mHsrH!6Y?A!.k0$s+14=rr<&Err<&2rr<&#s8MBdeieN~> +!BU8[l0\ND!6Y?A!.k0$s+14=rr<&Err<&2rr<&#s8M6`c8pI~> +!B:&Xj6cm>!6Y?A!.k0$s+14=rr<&Err<&2rr<&#s8M$Z_`*)~> +!BpJ^mHsrH!6bEA!.k0$s+14>rr<&Drr<&2rr<&#s8MBdeieN~> +!BU8[l0\ND!6bEA!.k0$s+14>rr<&Drr<&2rr<&#s8M6`c8pI~> +!B:&Xj6cm>!6bEA!.k0$s+14>rr<&Drr<&2rr<&#s8M$Z_`*)~> +!BpJ^mB?Qe!.k0$s+14=rr<&Err<&2rr<&"s8MBdeieN~> +!BU8[l*(-a!.k0$s+14=rr<&Err<&2rr<&"s8M6`c8pI~> +!B:&Xj0/L[!.k0$s+14=rr<&Err<&2rr<&"s8M$Z_`*)~> +!BpJ^mB?Qf!.k0$s+14?s82lHs82l3s82kss8MBdeieN~> +!BU8[l*(-b!.k0$s+14?s82lHs82l3s82kss8M6`c8pI~> +!B:&Xj0/L\!.k0$s+14?s82lHs82l3s82kss8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mB?Qi!;?Hm!.k0bs8;rJs8N)-s8N)-s8;rfs8;qKs2tB@m/bd$J,~> +!BU8[l*(-e!;?Hm!.k0bs8;rJs8N)-s8N)-s8;rfs8;qKs2tB@klK'jJ,~> +!B:&Xj0/L_!;?Hm!.k0bs8;rJs8N)-s8N)-s8;rfs8;qKs2tB@irR%VJ,~> +!BpJ^mG7g:!8[\T!;?Hm!0.$T!:Tpf!;?Em!7q/M!7_#K!4Dh,!42\*!:p-i!8%5N!;?Em!.k1K +s8MBdeieN~> +!BU8[l.uC6!8[\T!;?Hm!0.$T!:Tpf!;?Em!7q/M!7_#K!4Dh,!42\*!:p-i!8%5N!;?Em!.k1K +s8M6`c8pI~> +!B:&Xj5'b0!8[\T!;?Hm!0.$T!:Tpf!;?Em!7q/M!7_#K!4Dh,!42\*!:p-i!8%5N!;?Em!.k1K +s8M$Z_`*)~> +!BpJ^mHsrH!<)rl!8[\T!.k1Mrr<&srr<&grr<&mrr<&Mrr<&Krr<&,rr<&*rr<&jrr<&Mrr<&m +rr<%Ms8Dusm/bd$J,~> +!BU8[l0\ND!<)rl!8[\T!.k1Mrr<&srr<&grr<&mrr<&Mrr<&Krr<&,rr<&*rr<&jrr<&Mrr<&m +rr<%Ms8DusklK'jJ,~> +!B:&Xj6cm>!<)rl!8[\T!.k1Mrr<&srr<&grr<&mrr<&Mrr<&Krr<&,rr<&*rr<&jrr<&Mrr<&m +rr<%Ms8DusirR%VJ,~> +!BpJ^mHsrH!;lfr!<)rt!!*&t!<<)u!<)rp!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln +!3lJ'!;uis!:^!g!6Y +!BU8[l0\ND!;lfr!<)rt!!*&t!<<)u!<)rp!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln +!3lJ'!;uis!:^!g!6Y +!B:&Xj6cm>!;lfr!<)rt!!*&t!<<)u!<)rp!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln +!3lJ'!;uis!:^!g!6Y +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N*!rr`?%!!*&n!<<)p!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o +!3lJ'!;uis!;ulq!;lfm!;ulr!;ZZn!;uls!!*&t!;lfp!;QQo!;?Hm!!*&t!<)rt!<)rt!<<*! +!!`H'!<<'!!<)ou!<;utqu?Tpr;Z`r!<<#uqu?Tp!WN/os8;rqs8N'!s8;rps8;ourrDfnr;Zp! +!!)utr;ccqrr<'!r;c`pr;ccqrVururW)iqr;cWm!!)]lq>gNprVururW)iqr;c]or;Zlu!<)ro +!;ulr!;ZZn!;uls!!*&t!;lfp!!3*"U&Y,Z!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N*!rr`?%!!*&n!<<)p!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o +!3lJ'!;uis!;ulq!;lfm!;ulr!;ZZn!;uls!!*&t!;lfp!;QQo!;?Hm!!*&t!<)rt!<)rt!<<*! +!!`H'!<<'!!<)ou!<;utqu?Tpr;Z`r!<<#uqu?Tp!WN/os8;rqs8N'!s8;rps8;ourrDfnr;Zp! +!!)utr;ccqrr<'!r;c`pr;ccqrVururW)iqr;cWm!!)]lq>gNprVururW)iqr;c]or;Zlu!<)ro +!;ulr!;ZZn!;uls!!*&t!;lfp!!3*"U&Y,V!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N*!rr`?%!!*&n!<<)p!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o +!3lJ'!;uis!;ulq!;lfm!;ulr!;ZZn!;uls!!*&t!;lfp!;QQo!;?Hm!!*&t!<)rt!<)rt!<<*! +!!`H'!<<'!!<)ou!<;utqu?Tpr;Z`r!<<#uqu?Tp!WN/os8;rqs8N'!s8;rps8;ourrDfnr;Zp! +!!)utr;ccqrr<'!r;c`pr;ccqrVururW)iqr;cWm!!)]lq>gNprVururW)iqr;c]or;Zlu!<)ro +!;ulr!;ZZn!;uls!!*&t!;lfp!!3*"U&Y,P!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs82los8;rts8N*!s8N)ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#s +s8E#us8E#ts8N)us8N)ts8N)'rr<&trr<&srr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<&t +rr<&trr<&prr<&ls8N)trr<&trr<&srr<&us8N*!s8N*!rr<&us8N)trr<&trr<&trr<&rs8N)u +rr<&trr<&ts8N)orr<&trr<&ss8N)trr<&trr<&ts8N)orr<&ts8N)trr<&trr<&ss8N)trr<&t +rr<&trr<&rs8N)urr<&trr<&trr<&prr<&jrr<&os8N)urr<&trr<&trr<&srr<&ts8N)rrr<&m +rr<&qrr<&trr<&ss8N)trr<&trr<&ts8N(ms8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs82los8;rts8N*!s8N)ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#s +s8E#us8E#ts8N)us8N)ts8N)'rr<&trr<&srr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<&t +rr<&trr<&prr<&ls8N)trr<&trr<&srr<&us8N*!s8N*!rr<&us8N)trr<&trr<&trr<&rs8N)u +rr<&trr<&ts8N)orr<&trr<&ss8N)trr<&trr<&ts8N)orr<&ts8N)trr<&trr<&ss8N)trr<&t +rr<&trr<&rs8N)urr<&trr<&trr<&prr<&jrr<&os8N)urr<&trr<&trr<&srr<&ts8N)rrr<&m +rr<&qrr<&trr<&ss8N)trr<&trr<&ts8N(ms8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs82los8;rts8N*!s8N)ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#s +s8E#us8E#ts8N)us8N)ts8N)'rr<&trr<&srr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<&t +rr<&trr<&prr<&ls8N)trr<&trr<&srr<&us8N*!s8N*!rr<&us8N)trr<&trr<&trr<&rs8N)u +rr<&trr<&ts8N)orr<&trr<&ss8N)trr<&trr<&ts8N)orr<&ts8N)trr<&trr<&ss8N)trr<&t +rr<&trr<&rs8N)urr<&trr<&trr<&prr<&jrr<&os8N)urr<&trr<&trr<&srr<&ts8N)rrr<&m +rr<&qrr<&trr<&ss8N)trr<&trr<&ts8N(ms8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs82los8E#js8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)t +s8N)us8;r!s82ljrr<&qrr<&mrr<&rrr<&rrr<&trr<&srr<&orr<&prr<&lrr<&srr<&trr<&s +rr<&urr<&urr<&urr<&urr<&rrrW9$rrDrr!!)rs!!)fo!!)rs!!)Wj!!)rs!!)rs!!*#u!!)or +!!)ip!!)or!!*#u!!)or!!)ut!!)rs!!*#u!!)or!!)rs!!)Wj!!)ip!!)Wj!!)fo!!)Wj!!)ut +!!)or!!)or!!)`m!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!&_mrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#qs82los8E#js8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)t +s8N)us8;r!s82ljrr<&qrr<&mrr<&rrr<&rrr<&trr<&srr<&orr<&prr<&lrr<&srr<&trr<&s +rr<&urr<&urr<&urr<&urr<&rrrW9$rrDrr!!)rs!!)fo!!)rs!!)Wj!!)rs!!)rs!!*#u!!)or +!!)ip!!)or!!*#u!!)or!!)ut!!)rs!!*#u!!)or!!)rs!!)Wj!!)ip!!)Wj!!)fo!!)Wj!!)ut +!!)or!!)or!!)`m!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!&_mrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs82los8E#js8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)t +s8N)us8;r!s82ljrr<&qrr<&mrr<&rrr<&rrr<&trr<&srr<&orr<&prr<&lrr<&srr<&trr<&s +rr<&urr<&urr<&urr<&urr<&rrrW9$rrDrr!!)rs!!)fo!!)rs!!)Wj!!)rs!!)rs!!*#u!!)or +!!)ip!!)or!!*#u!!)or!!)ut!!)rs!!*#u!!)or!!)rs!!)Wj!!)ip!!)Wj!!)fo!!)Wj!!)ut +!!)or!!)or!!)`m!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!&_mro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N*!rr<&rs8N)ps7lZps8N)ms8N)ms8N)ss8N)rs8N*!s8N)t +s8N)ts8)f"rr<&trr<&ss8)fmrr<&mrr<&rrr<&rrr<&trr<&srr<&ts8)flrr<&lrr<&srr<&t +rr<&srr<&urr<&urr<&urr<&urr<&rrrN3#s7lZmrr<&ns8E#ks8)forr<&srr<&urr<&rrr<&p +rr<&rrr<&us7lZnrr<&srr<&us7lZmrr<&os8)flrr<&jrr<&orr<&os8)fprr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&ss8E"is8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N*!rr<&rs8N)ps7lZps8N)ms8N)ms8N)ss8N)rs8N*!s8N)t +s8N)ts8)f"rr<&trr<&ss8)fmrr<&mrr<&rrr<&rrr<&trr<&srr<&ts8)flrr<&lrr<&srr<&t +rr<&srr<&urr<&urr<&urr<&urr<&rrrN3#s7lZmrr<&ns8E#ks8)forr<&srr<&urr<&rrr<&p +rr<&rrr<&us7lZnrr<&srr<&us7lZmrr<&os8)flrr<&jrr<&orr<&os8)fprr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&ss8E"is8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N*!rr<&rs8N)ps7lZps8N)ms8N)ms8N)ss8N)rs8N*!s8N)t +s8N)ts8)f"rr<&trr<&ss8)fmrr<&mrr<&rrr<&rrr<&trr<&srr<&ts8)flrr<&lrr<&srr<&t +rr<&srr<&urr<&urr<&urr<&urr<&rrrN3#s7lZmrr<&ns8E#ks8)forr<&srr<&urr<&rrr<&p +rr<&rrr<&us7lZnrr<&srr<&us7lZmrr<&os8)flrr<&jrr<&orr<&os8)fprr<&krr<&mrr<&r +rr<&rrr<&trr<&srr<&ss8E"is8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)os8N)qs7cTos8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)r +s82l$rr<&trr<&trr<&srr<&qrr<&mrr<&rrr<&rrr<&trr<&srr<&urr<&srr<&prr<&lrr<&s +rr<&trr<&srr<&urr<&urr<&urr<&urr<&rrrW9$rrD`l!!)ZkrrDio!!)rs!!)rs!!)rs!!*#u +!!)or!!)ip!!)or!!*#u!!)`m!!)rs!!*#u!!)]l!!)ip!!)rs!!)ip!!)Wj!!)fo!!)ip!!)rs +!!)ut!!)Zk!!)`m!!)or!!)or!!)ut!!)rs!!)iprrA_lrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)os8N)qs7cTos8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)r +s82l$rr<&trr<&trr<&srr<&qrr<&mrr<&rrr<&rrr<&trr<&srr<&urr<&srr<&prr<&lrr<&s +rr<&trr<&srr<&urr<&urr<&urr<&urr<&rrrW9$rrD`l!!)ZkrrDio!!)rs!!)rs!!)rs!!*#u +!!)or!!)ip!!)or!!*#u!!)`m!!)rs!!*#u!!)]l!!)ip!!)rs!!)ip!!)Wj!!)fo!!)ip!!)rs +!!)ut!!)Zk!!)`m!!)or!!)or!!)ut!!)rs!!)iprrA_lrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)os8N)qs7cTos8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)r +s82l$rr<&trr<&trr<&srr<&qrr<&mrr<&rrr<&rrr<&trr<&srr<&urr<&srr<&prr<&lrr<&s +rr<&trr<&srr<&urr<&urr<&urr<&urr<&rrrW9$rrD`l!!)ZkrrDio!!)rs!!)rs!!)rs!!*#u +!!)or!!)ip!!)or!!*#u!!)`m!!)rs!!*#u!!)]l!!)ip!!)rs!!)ip!!)Wj!!)fo!!)ip!!)rs +!!)ut!!)Zk!!)`m!!)or!!)or!!)ut!!)rs!!)iprrA_lro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)os8N)qs8N)ss8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#s +s8E#us8N)ts8N)us8N)ts8N)'rr<&srr<&urr<&srr<&qrr<&mrr<&rrr<&rrr<&trr<&srr<&u +rr<&srr<&prr<&lrr<&srr<&trr<&srr<&urr<&urr<&urr<&urr<&rrrW9$rrD`l!!)fo!!)rs +!!)ip!!)rs!!)rs!!)rs!!*#u!!)or!!)ip!!)or!!*#u!!)`m!!)rs!!*#u!!)]l!!)ip!!)rs +!!)ip!!)Wj!!)fo!!)ip!!)rs!!)ut!!)Zk!!)`m!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!&_m +rp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)os8N)qs8N)ss8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#s +s8E#us8N)ts8N)us8N)ts8N)'rr<&srr<&urr<&srr<&qrr<&mrr<&rrr<&rrr<&trr<&srr<&u +rr<&srr<&prr<&lrr<&srr<&trr<&srr<&urr<&urr<&urr<&urr<&rrrW9$rrD`l!!)fo!!)rs +!!)ip!!)rs!!)rs!!)rs!!*#u!!)or!!)ip!!)or!!*#u!!)`m!!)rs!!*#u!!)]l!!)ip!!)rs +!!)ip!!)Wj!!)fo!!)ip!!)rs!!)ut!!)Zk!!)`m!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!&_m +rojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)os8N)qs8N)ss8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#s +s8E#us8N)ts8N)us8N)ts8N)'rr<&srr<&urr<&srr<&qrr<&mrr<&rrr<&rrr<&trr<&srr<&u +rr<&srr<&prr<&lrr<&srr<&trr<&srr<&urr<&urr<&urr<&urr<&rrrW9$rrD`l!!)fo!!)rs +!!)ip!!)rs!!)rs!!)rs!!*#u!!)or!!)ip!!)or!!*#u!!)`m!!)rs!!*#u!!)]l!!)ip!!)rs +!!)ip!!)Wj!!)fo!!)ip!!)rs!!)ut!!)Zk!!)`m!!)or!!)or!!)ut!!)rs!!)ut!!)rs!!&_m +ro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7u`os7lZos7ZNns7cTns7lZps7lZos7lZps8;rts8;rts7lZ! +rr<&srr<&urr<&ts8N)qrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&urr<&ts8N)prr<&lrr<&s +rr<&trr<&ts8N)urr<&urr<&urr<&us8N)trr<&trr<&ts8N)srr<&os8N)trr<&prr<&ts8N)s +rr<&srr<&trr<&ts8N)orr<&ts8N)trr<&ts8N)trr<&srr<&trr<&ts8N)srr<&prr<&ts8N)p +rr<&jrr<&orr<&prr<&ts8N)srr<&ts8N)rrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&ts8N)t +rr<&rs8N(us8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7u`os7lZos7ZNns7cTns7lZps7lZos7lZps8;rts8;rts7lZ! +rr<&srr<&urr<&ts8N)qrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&urr<&ts8N)prr<&lrr<&s +rr<&trr<&ts8N)urr<&urr<&urr<&us8N)trr<&trr<&ts8N)srr<&os8N)trr<&prr<&ts8N)s +rr<&srr<&trr<&ts8N)orr<&ts8N)trr<&ts8N)trr<&srr<&trr<&ts8N)srr<&prr<&ts8N)p +rr<&jrr<&orr<&prr<&ts8N)srr<&ts8N)rrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&ts8N)t +rr<&rs8N(us8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7u`os7lZos7ZNns7cTns7lZps7lZos7lZps8;rts8;rts7lZ! +rr<&srr<&urr<&ts8N)qrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&urr<&ts8N)prr<&lrr<&s +rr<&trr<&ts8N)urr<&urr<&urr<&us8N)trr<&trr<&ts8N)srr<&os8N)trr<&prr<&ts8N)s +rr<&srr<&trr<&ts8N)orr<&ts8N)trr<&ts8N)trr<&srr<&trr<&ts8N)srr<&prr<&ts8N)p +rr<&jrr<&orr<&prr<&ts8N)srr<&ts8N)rrr<&trr<&rrr<&qrr<&trr<&srr<&srr<&ts8N)t +rr<&rs8N(us8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7u`os7lZns82iss8E#ts8)fns82lqs7lZms8;rrs8;rts8;rt +s7u`"s8;rrs8N*!s8;ots8E#qs8;rrs7u`ns8;rqs8E#ts8E#ts8;ots8E#ts7u`ks8E#ts8E#s +s8;p"rr<'!rW)uurrE*!rr<0$!!*&t!;lfp!;uln!;uit!<;utp](0l!<<#us8W&urr;rtrVufr +!ri6#q#C9m!WN/ts8;rqs8E#ts8E#ss8;rqs7u`ns8;ots8E#ts7u`js7u`ps7u`ns8;ots8E#s +s8;rms8;rrs7u`ns8;rqs8E#ts8E#trrE-"r;c]orrB%urp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ts7u`os7lZns82iss8E#ts8)fns82lqs7lZms8;rrs8;rts8;rt +s7u`"s8;rrs8N*!s8;ots8E#qs8;rrs7u`ns8;rqs8E#ts8E#ts8;ots8E#ts7u`ks8E#ts8E#s +s8;p"rr<'!rW)uurrE*!rr<0$!!*&t!;lfp!;uln!;uit!<;utp](0l!<<#us8W&urr;rtrVufr +!ri6#q#C9m!WN/ts8;rqs8E#ts8E#ss8;rqs7u`ns8;ots8E#ts7u`js7u`ps7u`ns8;ots8E#s +s8;rms8;rrs7u`ns8;rqs8E#ts8E#trrE-"r;c]orrB%urojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts7u`os7lZns82iss8E#ts8)fns82lqs7lZms8;rrs8;rts8;rt +s7u`"s8;rrs8N*!s8;ots8E#qs8;rrs7u`ns8;rqs8E#ts8E#ts8;ots8E#ts7u`ks8E#ts8E#s +s8;p"rr<'!rW)uurrE*!rr<0$!!*&t!;lfp!;uln!;uit!<;utp](0l!<<#us8W&urr;rtrVufr +!ri6#q#C9m!WN/ts8;rqs8E#ts8E#ss8;rqs7u`ns8;ots8E#ts7u`js7u`ps7u`ns8;ots8E#s +s8;rms8;rrs7u`ns8;rqs8E#ts8E#trrE-"r;c]orrB%uro4$s2h1~> +!BpJ^mHsrH!.k0$s+14>rr<%Ms+14Es8MBdeieN~> +!BU8[l0\ND!.k0$s+14>rr<%Ms+14Es8M6`c8pI~> +!B:&Xj6cm>!.k0$s+14>rr<%Ms+14Es8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+14>rr<%Ms+14Es8MBdeieN~> +!BU8[l0\ND!.k0$s+14>rr<%Ms+14Es8M6`c8pI~> +!B:&Xj6cm>!.k0$s+14>rr<%Ms+14Es8M$Z_`*)~> +!BpJ^m=G:gs+13trr<%Ms+14Ds8MBdeieN~> +!BU8[l%/kcs+13trr<%Ms+14Ds8M6`c8pI~> +!B:&Xj+75]s+13trr<%Ms+14Ds8M$Z_`*)~> +!BpJ^m=G:gs+14$s82kJs+14Cs8MBdeieN~> +!BU8[l%/kcs+14$s82kJs+14Cs8M6`c8pI~> +!B:&Xj+75]s+14$s82kJs+14Cs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mC`Ju!;6Bl!7h,I!9F1[!20Al!.k1>s8N)Ds8;rss8;qKs.KDkm/bd$J,~> +!BU8[l+I&q!;6Bl!7h,I!9F1[!20Al!.k1>s8N)Ds8;rss8;qKs.KDkklK'jJ,~> +!B:&Xj1PEk!;6Bl!7h,I!9F1[!20Al!.k1>s8N)Ds8;rss8;qKs.KDkirR%VJ,~> +!BpJ^mG7gA!;ulr!:0[a!;6Bl!9*tP!<<)s!9F1[!7LoC!;c]q!8d_U!6P6@!:9^c!5AI5!;-9k +!8RSS!;HKn!94"Y!;?Em!5SU7!:Bdd!2KSnm/bd$J,~> +!BU8[l.uC=!;ulr!:0[a!;6Bl!9*tP!<<)s!9F1[!7LoC!;c]q!8d_U!6P6@!:9^c!5AI5!;-9k +!8RSS!;HKn!94"Y!;?Em!5SU7!:Bdd!2KSnklK'jJ,~> +!B:&Xj5'b7!;ulr!:0[a!;6Bl!9*tP!<<)s!9F1[!7LoC!;c]q!8d_U!6P6@!:9^c!5AI5!;-9k +!8RSS!;HKn!94"Y!;?Em!5SU7!:Bdd!2KSnirR%VJ,~> +!BpJ^mHsrH!<)rs!;ulr!:'Ua!7UuB!;uls!9F1[!7CfH!;uis!;c]q!8d_U!6P6@!:9^c!5AI5 +!;-9k!8[YT!;?Em!94"Y!;?Em!5SU7!:Bdd!2KSnm/bd$J,~> +!BU8[l0\ND!<)rs!;ulr!:'Ua!7UuB!;uls!9F1[!7CfH!;uis!;c]q!8d_U!6P6@!:9^c!5AI5 +!;-9k!8[YT!;?Em!94"Y!;?Em!5SU7!:Bdd!2KSnklK'jJ,~> +!B:&Xj6cm>!<)rs!;ulr!:'Ua!7UuB!;uls!9F1[!7CfH!;uis!;c]q!8d_U!6P6@!:9^c!5AI5 +!;-9k!8[YT!;?Em!94"Y!;?Em!5SU7!:Bdd!2KSnirR%VJ,~> +!BpJ^mHsrH!;ulr!<3#t!<3#q!;ulq!!<0#!<3#u!!*&t!<)rq!;ulr!!*&t!;lfp!;?Hm!<)rt +!;uls!;ZZn!;lfn!<3#o!;uln!9*qX!;uis!7q/M!.k1=rr<&Frr<&mrr<&Yrr<%krr<%os8MBd +eieN~> +!BU8[l0\ND!;ulr!<3#t!<3#q!;ulq!!<0#!<3#u!!*&t!<)rq!;ulr!!*&t!;lfp!;?Hm!<)rt +!;uls!;ZZn!;lfn!<3#o!;uln!9*qX!;uis!7q/M!.k1=rr<&Frr<&mrr<&Yrr<%krr<%os8M6` +c8pI~> +!B:&Xj6cm>!;ulr!<3#t!<3#q!;ulq!!<0#!<3#u!!*&t!<)rq!;ulr!!*&t!;lfp!;?Hm!<)rt +!;uls!;ZZn!;lfn!<3#o!;uln!9*qX!;uis!7q/M!.k1=rr<&Frr<&mrr<&Yrr<%krr<%os8M$Z +_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8E#ts8E#us7lZos7lZos7lZos82lps7cTns7lZis8N*!rrW9$ +!!)rsrrDrrq#LEoq#LHpq#LBnq#KCR!!)rs!!)rsrW)iqrW)uurW)lrr;c]or;Zlu!;ZZp!!*&t +!<)rs!!*&u!;lfp!;c`o!!3*"r;Z`rq>^Bn!WN/ts8E#os8;rqs8N'!s8;rns8N''rr<'!rr<&s +s8;ros8;ourrE#t! +!BU8[l0\NN!!`H'rrE'!s8E#rs8E#ts8E#us7lZos7lZos7lZos82lps7cTns7lZis8N*!rrW9$ +!!)rsrrDrrq#LEoq#LHpq#LBnq#KCR!!)rs!!)rsrW)iqrW)uurW)lrr;c]or;Zlu!;ZZp!!*&t +!<)rs!!*&u!;lfp!;c`o!!3*"r;Z`rq>^Bn!WN/ts8E#os8;rqs8N'!s8;rns8N''rr<'!rr<&s +s8;ros8;ourrE#t! +!B:&Xj6cmH!!`H'rrE'!s8E#rs8E#ts8E#us7lZos7lZos7lZos82lps7cTns7lZis8N*!rrW9$ +!!)rsrrDrrq#LEoq#LHpq#LBnq#KCR!!)rs!!)rsrW)iqrW)uurW)lrr;c]or;Zlu!;ZZp!!*&t +!<)rs!!*&u!;lfp!;c`o!!3*"r;Z`rq>^Bn!WN/ts8E#os8;rqs8N'!s8;rns8N''rr<'!rr<&s +s8;ros8;ourrE#t! +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8;ots8;rts8N)ts8N*!s8E#ts8E#ts8E#ts8N)rs8N)rs8E#t +s8N*!s8E#ss8E#os82lms8N)ss8E#ss8E#us8N)ts8N)ts8N)ps8N)ts8N)XrrW9$rrDfn!!)lq +!!)ut!!)rs!!)ut!!)rs!!)utrrDiorrE#t!!)rsrrE&u!!)ut!!)ut!!)rs!!)utrrDoq!!)lq +!!)utrrDoq!!)lq!!)ut!!)rsrrE#t!!)iprrE*!rrE*!!!*#u!!)ut!!)rs!!)utrrE#trrE#t +!!)lq!!)lqrrE#t!!)ut!!)ut!!)]l!!)`m!!)lq!!)ut!!)rs!!)ut!!)lq!!)`m!!)lqrrE#t +!!)ut!!)utrrDWirrE#t!!)ut!!)ut!!)ip!!)lqrrE#t!!)or!!&eorp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8;ots8;rts8N)ts8N*!s8E#ts8E#ts8E#ts8N)rs8N)rs8E#t +s8N*!s8E#ss8E#os82lms8N)ss8E#ss8E#us8N)ts8N)ts8N)ps8N)ts8N)XrrW9$rrDfn!!)lq +!!)ut!!)rs!!)ut!!)rs!!)utrrDiorrE#t!!)rsrrE&u!!)ut!!)ut!!)rs!!)utrrDoq!!)lq +!!)utrrDoq!!)lq!!)ut!!)rsrrE#t!!)iprrE*!rrE*!!!*#u!!)ut!!)rs!!)utrrE#trrE#t +!!)lq!!)lqrrE#t!!)ut!!)ut!!)]l!!)`m!!)lq!!)ut!!)rs!!)ut!!)lq!!)`m!!)lqrrE#t +!!)ut!!)utrrDWirrE#t!!)ut!!)ut!!)ip!!)lqrrE#t!!)or!!&eorojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8;ots8;rts8N)ts8N*!s8E#ts8E#ts8E#ts8N)rs8N)rs8E#t +s8N*!s8E#ss8E#os82lms8N)ss8E#ss8E#us8N)ts8N)ts8N)ps8N)ts8N)XrrW9$rrDfn!!)lq +!!)ut!!)rs!!)ut!!)rs!!)utrrDiorrE#t!!)rsrrE&u!!)ut!!)ut!!)rs!!)utrrDoq!!)lq +!!)utrrDoq!!)lq!!)ut!!)rsrrE#t!!)iprrE*!rrE*!!!*#u!!)ut!!)rs!!)utrrE#trrE#t +!!)lq!!)lqrrE#t!!)ut!!)ut!!)]l!!)`m!!)lq!!)ut!!)rs!!)ut!!)lq!!)`m!!)lqrrE#t +!!)ut!!)utrrDWirrE#t!!)ut!!)ut!!)ip!!)lqrrE#t!!)or!!&eoro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7cTis8N*!s8N)ss8N)us8N)ts8N)rs8N)rs8N)ts8N*!s8N)r +s8N)ps82lms8N)ss8N)rs8N)ps8N)ts8N)ps8;rRs8;rlrr<&prrW9$rrDus!!)or!!*#u!!)or +!!)fo!!)or!!)ut!!)ip!!)or!!*#u!!)or!!)lq!!)lq!!)rs!!)lq!!)or!!)or!!)ut!!)rs +!!)ip!!*#u!!*#u!!)ip!!)ut!!)or!!)ut!!)rs!!)lq!!)lq!!)rs!!*#u!!)or!!)`m!!)`m +!!)or!!)or!!)fo!!)lq!!)`m!!)lq!!)rs!!*#u!!)or!!*#uq#LBn!!)or!s&B$!;lcr!;c]q +!;c]q!;uis!;lcr!2KSnm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7cTis8N*!s8N)ss8N)us8N)ts8N)rs8N)rs8N)ts8N*!s8N)r +s8N)ps82lms8N)ss8N)rs8N)ps8N)ts8N)ps8;rRs8;rlrr<&prrW9$rrDus!!)or!!*#u!!)or +!!)fo!!)or!!)ut!!)ip!!)or!!*#u!!)or!!)lq!!)lq!!)rs!!)lq!!)or!!)or!!)ut!!)rs +!!)ip!!*#u!!*#u!!)ip!!)ut!!)or!!)ut!!)rs!!)lq!!)lq!!)rs!!*#u!!)or!!)`m!!)`m +!!)or!!)or!!)fo!!)lq!!)`m!!)lq!!)rs!!*#u!!)or!!*#uq#LBn!!)or!s&B$!;lcr!;c]q +!;c]q!;uis!;lcr!2KSnklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7cTis8N*!s8N)ss8N)us8N)ts8N)rs8N)rs8N)ts8N*!s8N)r +s8N)ps82lms8N)ss8N)rs8N)ps8N)ts8N)ps8;rRs8;rlrr<&prrW9$rrDus!!)or!!*#u!!)or +!!)fo!!)or!!)ut!!)ip!!)or!!*#u!!)or!!)lq!!)lq!!)rs!!)lq!!)or!!)or!!)ut!!)rs +!!)ip!!*#u!!*#u!!)ip!!)ut!!)or!!)ut!!)rs!!)lq!!)lq!!)rs!!*#u!!)or!!)`m!!)`m +!!)or!!)or!!)fo!!)lq!!)`m!!)lq!!)rs!!*#u!!)or!!*#uq#LBn!!)or!s&B$!;lcr!;c]q +!;c]q!;uis!;lcr!2KSnirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8E!$rr<'!s7lZps8N)ns8N)ts8N)rs8N)rs8N)ts8N*! +s7ZNhs8N*!rr<&ps8N)ss8N)rs8N*!s7lZns8N)os8)fSrrW9$rrDfn!!)forrDrrq#LEo!!)or +!!)fo!!)or!!)ut!!)ipq#LEo!!)Wj!!)iprW)]m!!)or!!)or!!)ut!!)rs!!)ip!!*#u!!*#u +!!*#uqZ-Tp!!)`m!!)rs!!)lq!!)lq!!)rs!!*#uq#L-g!!)`m!!)or!!)or!!)utqZ-Km!!)`m +!!)lq!!)rs!!*#u!!)or!!)Ti!!)or!s&B$!;lcr!;c]q!;c]q!;uis!;lcr!2KSnm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8E!$rr<'!s7lZps8N)ns8N)ts8N)rs8N)rs8N)ts8N*! +s7ZNhs8N*!rr<&ps8N)ss8N)rs8N*!s7lZns8N)os8)fSrrW9$rrDfn!!)forrDrrq#LEo!!)or +!!)fo!!)or!!)ut!!)ipq#LEo!!)Wj!!)iprW)]m!!)or!!)or!!)ut!!)rs!!)ip!!*#u!!*#u +!!*#uqZ-Tp!!)`m!!)rs!!)lq!!)lq!!)rs!!*#uq#L-g!!)`m!!)or!!)or!!)utqZ-Km!!)`m +!!)lq!!)rs!!*#u!!)or!!)Ti!!)or!s&B$!;lcr!;c]q!;c]q!;uis!;lcr!2KSnklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8E!$rr<'!s7lZps8N)ns8N)ts8N)rs8N)rs8N)ts8N*! +s7ZNhs8N*!rr<&ps8N)ss8N)rs8N*!s7lZns8N)os8)fSrrW9$rrDfn!!)forrDrrq#LEo!!)or +!!)fo!!)or!!)ut!!)ipq#LEo!!)Wj!!)iprW)]m!!)or!!)or!!)ut!!)rs!!)ip!!*#u!!*#u +!!*#uqZ-Tp!!)`m!!)rs!!)lq!!)lq!!)rs!!*#uq#L-g!!)`m!!)or!!)or!!)utqZ-Km!!)`m +!!)lq!!)rs!!*#u!!)or!!)Ti!!)or!s&B$!;lcr!;c]q!;c]q!;uis!;lcr!2KSnirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N*!rriE&rr<'!p]1?orrDfnrrE#trrDrrrrDrrrrE#trrE*! +pAk$hrrDcmrrDusrrDrrrr<'!p]19mrrDcmquG^U!!)Zk!!)forrDrr!!)cn!!)or!!)fo!!)or +!!)ut!!)ip!!)cn!!)Wj!!)`mrrDlp!!)or!!)or!!)ut!!)rs!!)ip!!*#u!!*#u!s&B$!;uis +!<)ot!;?Em!;uis!;c]q!;c]q!;uis!<2uu!:Tpf!;?Em!;lcr!;lcr!<2uu!;uis!;c]q!;?Em +!;c]q!;uis!<2uu!;lcr!:p-i!;lcu!<<'!qu6WrqYpNqqYpNqr;Q`squ6WrU]:>\!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N*!rriE&rr<'!p]1?orrDfnrrE#trrDrrrrDrrrrE#trrE*! +pAk$hrrDcmrrDusrrDrrrr<'!p]19mrrDcmquG^U!!)Zk!!)forrDrr!!)cn!!)or!!)fo!!)or +!!)ut!!)ip!!)cn!!)Wj!!)`mrrDlp!!)or!!)or!!)ut!!)rs!!)ip!!*#u!!*#u!s&B$!;uis +!<)ot!;?Em!;uis!;c]q!;c]q!;uis!<2uu!:Tpf!;?Em!;lcr!;lcr!<2uu!;uis!;c]q!;?Em +!;c]q!;uis!<2uu!;lcr!:p-i!;lcu!<<'!qu6WrqYpNqqYpNqr;Q`squ6WrU]:>X!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N*!rriE&rr<'!p]1?orrDfnrrE#trrDrrrrDrrrrE#trrE*! +pAk$hrrDcmrrDusrrDrrrr<'!p]19mrrDcmquG^U!!)Zk!!)forrDrr!!)cn!!)or!!)fo!!)or +!!)ut!!)ip!!)cn!!)Wj!!)`mrrDlp!!)or!!)or!!)ut!!)rs!!)ip!!*#u!!*#u!s&B$!;uis +!<)ot!;?Em!;uis!;c]q!;c]q!;uis!<2uu!:Tpf!;?Em!;lcr!;lcr!<2uu!;uis!;c]q!;?Em +!;c]q!;uis!<2uu!;lcr!:p-i!;lcu!<<'!qu6WrqYpNqqYpNqr;Q`squ6WrU]:>R!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'#rr<&ss8N*!s8E#ss8E#us8N)ts8N)rs8N)rs8N)t +s8N*!s8E#hs8N)ms8N)ss8E#ss8E!"rr<&ss8N)ts8N)ts8N*!s8N)ts8N)Xrr<&krr<&prrW9$ +rrDus!!)cn!!)or!!)fo!!)or!!)ut!!)ip!!)cn!!)Wj!!)lq!!)rs!!)lq!!)or!!)or!!)ut +!!)rs!!)ip!!*#u!!*#u!s&B$!;uis!<)ot!;?Em!;uis!;c]q!;c]q!;uis!<2uu!:Tpf!;?Em +!;lcr!;lcr!<2uu!;uis!;c]q!;?Em!;c]q!;uis!<2uu!;lcr!:p-i!;lcu!<<'!qu6WrqYpNq +qYpNqr;Q`squ6WrU]:>\!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'#rr<&ss8N*!s8E#ss8E#us8N)ts8N)rs8N)rs8N)t +s8N*!s8E#hs8N)ms8N)ss8E#ss8E!"rr<&ss8N)ts8N)ts8N*!s8N)ts8N)Xrr<&krr<&prrW9$ +rrDus!!)cn!!)or!!)fo!!)or!!)ut!!)ip!!)cn!!)Wj!!)lq!!)rs!!)lq!!)or!!)or!!)ut +!!)rs!!)ip!!*#u!!*#u!s&B$!;uis!<)ot!;?Em!;uis!;c]q!;c]q!;uis!<2uu!:Tpf!;?Em +!;lcr!;lcr!<2uu!;uis!;c]q!;?Em!;c]q!;uis!<2uu!;lcr!:p-i!;lcu!<<'!qu6WrqYpNq +qYpNqr;Q`squ6WrU]:>X!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'#rr<&ss8N*!s8E#ss8E#us8N)ts8N)rs8N)rs8N)t +s8N*!s8E#hs8N)ms8N)ss8E#ss8E!"rr<&ss8N)ts8N)ts8N*!s8N)ts8N)Xrr<&krr<&prrW9$ +rrDus!!)cn!!)or!!)fo!!)or!!)ut!!)ip!!)cn!!)Wj!!)lq!!)rs!!)lq!!)or!!)or!!)ut +!!)rs!!)ip!!*#u!!*#u!s&B$!;uis!<)ot!;?Em!;uis!;c]q!;c]q!;uis!<2uu!:Tpf!;?Em +!;lcr!;lcr!<2uu!;uis!;c]q!;?Em!;c]q!;uis!<2uu!;lcr!:p-i!;lcu!<<'!qu6WrqYpNq +qYpNqr;Q`squ6WrU]:>R!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss82iss7-0is7cQos8;rts8;rts7lZps8;rts8;rts7lZks7u`n +s7lZos7lZps7ZNms7lZps7lZRrr<&krr<&qrr<&trr<&srr<&ts8N)trr<&ts8N)os8N)trr<&s +rr<&orr<&ts8N)trr<&ts8N)qrr<&qs8N)trr<&qrr<&qrr<&trr<&srr<&srr<&prr<&urr<&u +rrW9$rrE#trrDus!!)utrrE#t!!)rs!!)lq!!)lq!!)rs!!)ut!!)utrrDcm!!)`m!!)lq!!)ut +!!)ut!!)utrrDoq!!)ut!!)or!!)lq!!)rs!!)ut!!)utrrDWirrE#t!!)ut!!)ut!!)ip!!)lq +!!)rs!!)or!!)ut!!)rsrrB8&rp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#ss82iss7-0is7cQos8;rts8;rts7lZps8;rts8;rts7lZks7u`n +s7lZos7lZps7ZNms7lZps7lZRrr<&krr<&qrr<&trr<&srr<&ts8N)trr<&ts8N)os8N)trr<&s +rr<&orr<&ts8N)trr<&ts8N)qrr<&qs8N)trr<&qrr<&qrr<&trr<&srr<&srr<&prr<&urr<&u +rrW9$rrE#trrDus!!)utrrE#t!!)rs!!)lq!!)lq!!)rs!!)ut!!)utrrDcm!!)`m!!)lq!!)ut +!!)ut!!)utrrDoq!!)ut!!)or!!)lq!!)rs!!)ut!!)utrrDWirrE#t!!)ut!!)ut!!)ip!!)lq +!!)rs!!)or!!)ut!!)rsrrB8&rojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss82iss7-0is7cQos8;rts8;rts7lZps8;rts8;rts7lZks7u`n +s7lZos7lZps7ZNms7lZps7lZRrr<&krr<&qrr<&trr<&srr<&ts8N)trr<&ts8N)os8N)trr<&s +rr<&orr<&ts8N)trr<&ts8N)qrr<&qs8N)trr<&qrr<&qrr<&trr<&srr<&srr<&prr<&urr<&u +rrW9$rrE#trrDus!!)utrrE#t!!)rs!!)lq!!)lq!!)rs!!)ut!!)utrrDcm!!)`m!!)lq!!)ut +!!)ut!!)utrrDoq!!)ut!!)or!!)lq!!)rs!!)ut!!)utrrDWirrE#t!!)ut!!)ut!!)ip!!)lq +!!)rs!!)or!!)ut!!)rsrrB8&ro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts82iss82iss82iss8E#ts8)fqs8;rts8;rts7lZps8;rts8;rr +s8)fms7u`ns7lZms8;rqs82iss8E#ss82lqs7u`Ss8;rns7u`ps8E#us8E#rs8;ros8;p!rr<&p +rrE-"r;cfrq>gEmr;c]or;c`pq>gKo! +!BU8[l0\NM!!rT)rrE'!rr<&ts82iss82iss82iss8E#ts8)fqs8;rts8;rts7lZps8;rts8;rr +s8)fms7u`ns7lZms8;rqs82iss8E#ss82lqs7u`Ss8;rns7u`ps8E#us8E#rs8;ros8;p!rr<&p +rrE-"r;cfrq>gEmr;c]or;c`pq>gKo! +!B:&Xj6cmG!!rT)rrE'!rr<&ts82iss82iss82iss8E#ts8)fqs8;rts8;rts7lZps8;rts8;rr +s8)fms7u`ns7lZms8;rqs82iss8E#ss82lqs7u`Ss8;rns7u`ps8E#us8E#rs8;ros8;p!rr<&p +rrE-"r;cfrq>gEmr;c]or;c`pq>gKo! +!BpJ^mHsrH!.k02rr<%Ms+14Crr<&irr<%Ms7QEkm/bd$J,~> +!BU8[l0\ND!.k02rr<%Ms+14Crr<&irr<%Ms7QEkklK'jJ,~> +!B:&Xj6cm>!.k02rr<%Ms+14Crr<&irr<%Ms7QEkirR%VJ,~> +!BpJ^mHsrH!.k02rr<%Ms+14Crr<&irr<%Ms7QEkm/bd$J,~> +!BU8[l0\ND!.k02rr<%Ms+14Crr<&irr<%Ms7QEkklK'jJ,~> +!B:&Xj6cm>!.k02rr<%Ms+14Crr<&irr<%Ms7QEkirR%VJ,~> +!BpJ^m=G:gs6osf!.k0$s7ZHm!:g'h!.k1Cs8MBdeieN~> +!BU8[l%/kcs6osf!.k0$s7ZHm!:g'h!.k1Cs8M6`c8pI~> +!B:&Xj+75]s6osf!.k0$s7ZHm!:g'h!.k1Cs8M$Z_`*)~> +!BpJ^m=G:gs7$'e!.k0$s8Duq!:g*f!.k1Es8MBdeieN~> +!BU8[l%/kcs7$'e!.k0$s8Duq!:g*f!.k1Es8M6`c8pI~> +!B:&Xj+75]s7$'e!.k0$s8Duq!:g*f!.k1Es8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mCWDr!7q2L!0@0[!.k0fs8N)=s8;r?s8N(Ms6BX`m/bd$J,~> +!BU8[l+?un!7q2L!0@0[!.k0fs8N)=s8;r?s8N(Ms6BX`klK'jJ,~> +!B:&Xj1G?h!7q2L!0@0[!.k0fs8N)=s8;r?s8N(Ms6BX`irR%VJ,~> +!BpJ^mG7g +!BU8[l.uC8!9aC[!;HNm!<<)s!:'U`!2TYn!:Tpf!;-9k!;QQo!1Eie!:9^c!87AP!9F.[!9*qX +!8RSS!;QQo!;ZWp!8meV!;?Em!1EldklK'jJ,~> +!B:&Xj5'b2!9aC[!;HNm!<<)s!:'U`!2TYn!:Tpf!;-9k!;QQo!1Eie!:9^c!87AP!9F.[!9*qX +!8RSS!;QQo!;ZWp!8meV!;?Em!1EldirR%VJ,~> +!BpJ^mHsrH!<)rm!9O7\!;HNl!!*&s!9sO`!29Dm!:Tpf!;-9k!;QQo!1Eie!:9^c!87AP!9F.[ +!9*qX!8RSS!;QQo!;ZWp!8meV!;?Em!1Eldm/bd$J,~> +!BU8[l0\ND!<)rm!9O7\!;HNl!!*&s!9sO`!29Dm!:Tpf!;-9k!;QQo!1Eie!:9^c!87AP!9F.[ +!9*qX!8RSS!;QQo!;ZWp!8meV!;?Em!1EldklK'jJ,~> +!B:&Xj6cm>!<)rm!9O7\!;HNl!!*&s!9sO`!29Dm!:Tpf!;-9k!;QQo!1Eie!:9^c!87AP!9F.[ +!9*qX!8RSS!;QQo!;ZWp!8meV!;?Em!1EldirR%VJ,~> +!BpJ^mHsrH!;uls!<)rs!<)rr!;lfn!;c`q!;?Hl!<3#u!<<)u!<<)t!!*&u!!E6$!<<#urr;uu +!<;utqu?TprVufrs8W&urVu]oao;DBrrDQg!!)UEphu +!BU8[l0\ND!;uls!<)rs!<)rr!;lfn!;c`q!;?Hl!<3#u!<<)u!<<)t!!*&u!!E6$!<<#urr;uu +!<;utqu?TprVufrs8W&urVu]oao;DBrrDQg!!)UEphu +!B:&Xj6cm>!;uls!<)rs!<)rr!;lfn!;c`q!;?Hl!<3#u!<<)u!<<)t!!*&u!!E6$!<<#urr;uu +!<;utqu?TprVufrs8W&urVu]oao;DBrrDQg!!)UEphu +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZos7lZls8N)ms8;rts8N*!s8E#us8;ots7QHm +s7lZos7lZps7ZNns7lZ:rrN3#!;ulr!!*&u!;uit!<;utqu?WqqZ$Blrr;rt!<<#uqu?Tpr;Z`r +!<<#urVuisrr;rtqZ$Qq!<;utrVuis!<<#uqu?TpqZ$Ko!WN/ts8E#os8;ourrDusrW)cor;ccq +rr<'!r;cQkr;Zlu!;ulq!;c`o!!3*"r;Z`rr;Zcs#6+Z's8N'!r;Z]qq#: +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZos7lZls8N)ms8;rts8N*!s8E#us8;ots7QHm +s7lZos7lZps7ZNns7lZ:rrN3#!;ulr!!*&u!;uit!<;utqu?WqqZ$Blrr;rt!<<#uqu?Tpr;Z`r +!<<#urVuisrr;rtqZ$Qq!<;utrVuis!<<#uqu?TpqZ$Ko!WN/ts8E#os8;ourrDusrW)cor;ccq +rr<'!r;cQkr;Zlu!;ulq!;c`o!!3*"r;Z`rr;Zcs#6+Z's8N'!r;Z]qq#: +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZos7lZls8N)ms8;rts8N*!s8E#us8;ots7QHm +s7lZos7lZps7ZNns7lZ:rrN3#!;ulr!!*&u!;uit!<;utqu?WqqZ$Blrr;rt!<<#uqu?Tpr;Z`r +!<<#urVuisrr;rtqZ$Qq!<;utrVuis!<<#uqu?TpqZ$Ko!WN/ts8E#os8;ourrDusrW)cor;ccq +rr<'!r;cQkr;Zlu!;ulq!;c`o!!3*"r;Z`rr;Zcs#6+Z's8N'!r;Z]qq#: +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E#us8N)ts8N)rs8N)ms8N'&rrE*!!!*#u +rrE#trrE*!rVururW!*$!!*'!rW)rtrVururW)osrW)rtr;cltrrE*!rrE#trrC4A!!*#u!!)or +rrE&u!!)utrrE#t!!)lq!!)fo!!)forrE&u!!)ut!!)ut!!)orrrE&u!!)ut!!)rs!!)forrE#t +!!)rsrrE&u!!)ut!!)ut!!)rs!!)utrrDoq!!)lq!!)utrrDoq!!)lq!!)ut!!)rsrrE#t!!)fo +!!)utrrE#t!!)ut!!)rs!!)utrrDoq!!)orrrE*!rrE*!!!*#u!!)ut!!)ip!!)]l!!)ut!!)or +rrE&u!!)lq!!)fo!!)iprrE#t!!*#urrE*!rrE*!!!*#u!!)ut!!)lq!!)`m!!)lq!!)utrrAts +rp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E#us8N)ts8N)rs8N)ms8N'&rrE*!!!*#u +rrE#trrE*!rVururW!*$!!*'!rW)rtrVururW)osrW)rtr;cltrrE*!rrE#trrC4A!!*#u!!)or +rrE&u!!)utrrE#t!!)lq!!)fo!!)forrE&u!!)ut!!)ut!!)orrrE&u!!)ut!!)rs!!)forrE#t +!!)rsrrE&u!!)ut!!)ut!!)rs!!)utrrDoq!!)lq!!)utrrDoq!!)lq!!)ut!!)rsrrE#t!!)fo +!!)utrrE#t!!)ut!!)rs!!)utrrDoq!!)orrrE*!rrE*!!!*#u!!)ut!!)ip!!)]l!!)ut!!)or +rrE&u!!)lq!!)fo!!)iprrE#t!!*#urrE*!rrE*!!!*#u!!)ut!!)lq!!)`m!!)lq!!)utrrAts +rojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E#us8N)ts8N)rs8N)ms8N'&rrE*!!!*#u +rrE#trrE*!rVururW!*$!!*'!rW)rtrVururW)osrW)rtr;cltrrE*!rrE#trrC4A!!*#u!!)or +rrE&u!!)utrrE#t!!)lq!!)fo!!)forrE&u!!)ut!!)ut!!)orrrE&u!!)ut!!)rs!!)forrE#t +!!)rsrrE&u!!)ut!!)ut!!)rs!!)utrrDoq!!)lq!!)utrrDoq!!)lq!!)ut!!)rsrrE#t!!)fo +!!)utrrE#t!!)ut!!)rs!!)utrrDoq!!)orrrE*!rrE*!!!*#u!!)ut!!)ip!!)]l!!)ut!!)or +rrE&u!!)lq!!)fo!!)iprrE#t!!*#urrE*!rrE*!!!*#u!!)ut!!)lq!!)`m!!)lq!!)utrrAts +ro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZps8N)rs8N)ps8N)rs8N)ms8N'&rr<'!!!*#urrE#trrE*! +rrE*!rrE*!rrE*!rrDusrr<-#!!)orrrE&urW)fpr;ak;!!*#u!!)or!!)fo!!)or!!)or!!)fo +!!)fo!!)Wj!!)or!!)fo!!)rs!!)fo!!)or!!)ut!!)ip!!)or!!*#u!!)or!!)lq!!)lq!!)rs +!!)lq!!)or!!)or!!)ut!!)rs!!)ip!!)or!!*#u!!)or!!*#u!!)or!!)lq!!)or!!*#u!!*#u +!!)ip!!)ip!!)Ng!!)or!!)]l!!)fo!!)ip!!)rs!!*#u!!*#u!!*#u!s&B$!;lcr!;lcr!;?Em +!;lcr!;lcr!2okrm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZps8N)rs8N)ps8N)rs8N)ms8N'&rr<'!!!*#urrE#trrE*! +rrE*!rrE*!rrE*!rrDusrr<-#!!)orrrE&urW)fpr;ak;!!*#u!!)or!!)fo!!)or!!)or!!)fo +!!)fo!!)Wj!!)or!!)fo!!)rs!!)fo!!)or!!)ut!!)ip!!)or!!*#u!!)or!!)lq!!)lq!!)rs +!!)lq!!)or!!)or!!)ut!!)rs!!)ip!!)or!!*#u!!)or!!*#u!!)or!!)lq!!)or!!*#u!!*#u +!!)ip!!)ip!!)Ng!!)or!!)]l!!)fo!!)ip!!)rs!!*#u!!*#u!!*#u!s&B$!;lcr!;lcr!;?Em +!;lcr!;lcr!2okrklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZps8N)rs8N)ps8N)rs8N)ms8N'&rr<'!!!*#urrE#trrE*! +rrE*!rrE*!rrE*!rrDusrr<-#!!)orrrE&urW)fpr;ak;!!*#u!!)or!!)fo!!)or!!)or!!)fo +!!)fo!!)Wj!!)or!!)fo!!)rs!!)fo!!)or!!)ut!!)ip!!)or!!*#u!!)or!!)lq!!)lq!!)rs +!!)lq!!)or!!)or!!)ut!!)rs!!)ip!!)or!!*#u!!)or!!*#u!!)or!!)lq!!)or!!*#u!!*#u +!!)ip!!)ip!!)Ng!!)or!!)]l!!)fo!!)ip!!)rs!!*#u!!*#u!!*#u!s&B$!;lcr!;lcr!;?Em +!;lcr!;lcr!2okrirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7u`ps7ZNns7lZls8N)ms8N*!rrW9$!!*#urrE#trrE*!rrE*! +rrE*!rrE*!rrDusrr<'!pAk3mrrDioqZ+e=!!)rs!!)rs!!)fo!!)or!!)or!!)fo!!)fo!!)fo +qZ-Nn!!)cn!!*#u!!)cn!!)or!!)ut!!)ipq#LEo!!)Wj!!)iprW)]m!!)or!!)or!!)ut!!)rs +!!)ip!!)or!!*#uq#LEo!!)Wj!!)or!!*#u!!*#u!!*#uqZ-Hl!!)]lqZ-Nn!!)]l!!)fo!!)ip +!!)rs!!*#u!!*#u!!*#u!W`9#q#L +!BU8[l0\NM!!rT)rrE'!rr<&ss7u`ps7ZNns7lZls8N)ms8N*!rrW9$!!*#urrE#trrE*!rrE*! +rrE*!rrE*!rrDusrr<'!pAk3mrrDioqZ+e=!!)rs!!)rs!!)fo!!)or!!)or!!)fo!!)fo!!)fo +qZ-Nn!!)cn!!*#u!!)cn!!)or!!)ut!!)ipq#LEo!!)Wj!!)iprW)]m!!)or!!)or!!)ut!!)rs +!!)ip!!)or!!*#uq#LEo!!)Wj!!)or!!*#u!!*#u!!*#uqZ-Hl!!)]lqZ-Nn!!)]l!!)fo!!)ip +!!)rs!!*#u!!*#u!!*#u!W`9#q#L +!B:&Xj6cmG!!rT)rrE'!rr<&ss7u`ps7ZNns7lZls8N)ms8N*!rrW9$!!*#urrE#trrE*!rrE*! +rrE*!rrE*!rrDusrr<'!pAk3mrrDioqZ+e=!!)rs!!)rs!!)fo!!)or!!)or!!)fo!!)fo!!)fo +qZ-Nn!!)cn!!*#u!!)cn!!)or!!)ut!!)ipq#LEo!!)Wj!!)iprW)]m!!)or!!)or!!)ut!!)rs +!!)ip!!)or!!*#uq#LEo!!)Wj!!)or!!*#u!!*#u!!*#uqZ-Hl!!)]lqZ-Nn!!)]l!!)fo!!)ip +!!)rs!!*#u!!*#u!!*#u!W`9#q#L +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)us8E#us7ZKns7cTks8N)ms8N*!s8;rss8N)ts8N*!s8N*! +s8N*!s8N*!s8N)ss8N'!s7ZNms8N)ms82l?s7u`nrr<&orr<&rrr<&rrr<&orr<&orr<&prr<&s +rr<&rrr<&nrr<&urr<&nrr<&rrr<&trr<&prr<&nrr<&jrr<&ms8N)prr<&rrr<&rrr<&trr<&s +rr<&prr<&rrr<&urr<&nrr<&jrr<&rrr<&urr<&urrW9$rrDus!!)ip!!)`m!!)rs!!)or!!)]l +!!)fo!!)ip!!)rs!!*#u!!*#u!!*#u!s&B$!;-9k!;?Em!;lcr!20Akm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)us8E#us7ZKns7cTks8N)ms8N*!s8;rss8N)ts8N*!s8N*! +s8N*!s8N*!s8N)ss8N'!s7ZNms8N)ms82l?s7u`nrr<&orr<&rrr<&rrr<&orr<&orr<&prr<&s +rr<&rrr<&nrr<&urr<&nrr<&rrr<&trr<&prr<&nrr<&jrr<&ms8N)prr<&rrr<&rrr<&trr<&s +rr<&prr<&rrr<&urr<&nrr<&jrr<&rrr<&urr<&urrW9$rrDus!!)ip!!)`m!!)rs!!)or!!)]l +!!)fo!!)ip!!)rs!!*#u!!*#u!!*#u!s&B$!;-9k!;?Em!;lcr!20AkklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)us8E#us7ZKns7cTks8N)ms8N*!s8;rss8N)ts8N*!s8N*! +s8N*!s8N*!s8N)ss8N'!s7ZNms8N)ms82l?s7u`nrr<&orr<&rrr<&rrr<&orr<&orr<&prr<&s +rr<&rrr<&nrr<&urr<&nrr<&rrr<&trr<&prr<&nrr<&jrr<&ms8N)prr<&rrr<&rrr<&trr<&s +rr<&prr<&rrr<&urr<&nrr<&jrr<&rrr<&urr<&urrW9$rrDus!!)ip!!)`m!!)rs!!)or!!)]l +!!)fo!!)ip!!)rs!!*#u!!*#u!!*#u!s&B$!;-9k!;?Em!;lcr!20AkirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8Duus8E#os8N)ss8N)rs8N)ms8N)us8E#ts8N)us8E#u +s8N*!s8N*!s8N*!s8E#ts8Duus8E#ms8N)ps8N)ts8N)Crr<&qrr<&trr<&orr<&rrr<&rrr<&o +rr<&orr<&prr<&srr<&rrr<&mrrN3#!;?Em!;lcr!<)ot!;ZWp!;HKn!;$3j!;c]q!;uis!;c]q +!;lcr!;lcr!<)ot!;uis!;ZWp!;lcr!<2uu!;HKn!;$3j!;lcr!<2uu!<3!#!<<'!r;Q`sq>UEp +pAY*mr;Q`squ6Wrp&>!lq#:UEpr;Q`srr2rurr2rurr3'#s8N)krr<&mrr<&rrr<%ls8MBd +eieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8Duus8E#os8N)ss8N)rs8N)ms8N)us8E#ts8N)us8E#u +s8N*!s8N*!s8N*!s8E#ts8Duus8E#ms8N)ps8N)ts8N)Crr<&qrr<&trr<&orr<&rrr<&rrr<&o +rr<&orr<&prr<&srr<&rrr<&mrrN3#!;?Em!;lcr!<)ot!;ZWp!;HKn!;$3j!;c]q!;uis!;c]q +!;lcr!;lcr!<)ot!;uis!;ZWp!;lcr!<2uu!;HKn!;$3j!;lcr!<2uu!<3!#!<<'!r;Q`sq>UEp +pAY*mr;Q`squ6Wrp&>!lq#:UEpr;Q`srr2rurr2rurr3'#s8N)krr<&mrr<&rrr<%ls8M6` +c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8Duus8E#os8N)ss8N)rs8N)ms8N)us8E#ts8N)us8E#u +s8N*!s8N*!s8N*!s8E#ts8Duus8E#ms8N)ps8N)ts8N)Crr<&qrr<&trr<&orr<&rrr<&rrr<&o +rr<&orr<&prr<&srr<&rrr<&mrrN3#!;?Em!;lcr!<)ot!;ZWp!;HKn!;$3j!;c]q!;uis!;c]q +!;lcr!;lcr!<)ot!;uis!;ZWp!;lcr!<2uu!;HKn!;$3j!;lcr!<2uu!<3!#!<<'!r;Q`sq>UEp +pAY*mr;Q`squ6Wrp&>!lq#:UEpr;Q`srr2rurr2rurr3'#s8N)krr<&mrr<&rrr<%ls8M$Z +_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8)frs8Duus7lZps7ZNns7lZks82iss8E#ts7?9ks8Duus7HBk +s7lZps7lZns7lZ=rr<&qrr<&trr<&os8N)trr<&qrr<&orr<&trr<&trr<&prr<&ts8N)rrr<&m +rrN3#!;?Hm!<)ot!;uis!;QQo!<)rt!<)ot!<)rt!;c]q!;c`q!<)ot!;c]q!;c]q!<)ot!;uis +!;uis!;QQo!<)rt!<)ot!<)rt!<)ot!<)rt!;c]q!;lcr!<2uu!<3!#!<<'!rVultq>UEppAY*m +rVultqu6Wrp&>!lq#: +!BU8[l0\NN!!`H'rrE'!s8E#ss8)frs8Duus7lZps7ZNns7lZks82iss8E#ts7?9ks8Duus7HBk +s7lZps7lZns7lZ=rr<&qrr<&trr<&os8N)trr<&qrr<&orr<&trr<&trr<&prr<&ts8N)rrr<&m +rrN3#!;?Hm!<)ot!;uis!;QQo!<)rt!<)ot!<)rt!;c]q!;c`q!<)ot!;c]q!;c]q!<)ot!;uis +!;uis!;QQo!<)rt!<)ot!<)rt!<)ot!<)rt!;c]q!;lcr!<2uu!<3!#!<<'!rVultq>UEppAY*m +rVultqu6Wrp&>!lq#: +!B:&Xj6cmH!!`H'rrE'!s8E#ss8)frs8Duus7lZps7ZNns7lZks82iss8E#ts7?9ks8Duus7HBk +s7lZps7lZns7lZ=rr<&qrr<&trr<&os8N)trr<&qrr<&orr<&trr<&trr<&prr<&ts8N)rrr<&m +rrN3#!;?Hm!<)ot!;uis!;QQo!<)rt!<)ot!<)rt!;c]q!;c`q!<)ot!;c]q!;c]q!<)ot!;uis +!;uis!;QQo!<)rt!<)ot!<)rt!<)ot!<)rt!;c]q!;lcr!<2uu!<3!#!<<'!rVultq>UEppAY*m +rVultqu6Wrp&>!lq#: +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8)frs8E#ts8)fqs82iss8E#us7lZks82lss8N)ts8;ots7u]q +s8Duus8)crs8;rps8)frs7lZns7u`>s8;rss8;ots7u`os8N'!s8;rqs7u`ls8;rss7u`ns8;ot +s8E#us7u`krr<&lrrE-"r;cfrq>gEmr;c]or;c`pq>gKo! +!BU8[l0\NM!!rT)rrE'!rr<&ts8)frs8E#ts8)fqs82iss8E#us7lZks82lss8N)ts8;ots7u]q +s8Duus8)crs8;rps8)frs7lZns7u`>s8;rss8;ots7u`os8N'!s8;rqs7u`ls8;rss7u`ns8;ot +s8E#us7u`krr<&lrrE-"r;cfrq>gEmr;c]or;c`pq>gKo! +!B:&Xj6cmG!!rT)rrE'!rr<&ts8)frs8E#ts8)fqs82iss8E#us7lZks82lss8N)ts8;ots7u]q +s8Duus8)crs8;rps8)frs7lZns7u`>s8;rss8;ots7u`os8N'!s8;rqs7u`ls8;rss7u`ns8;ot +s8E#us7u`krr<&lrrE-"r;cfrq>gEmr;c]or;c`pq>gKo! +!BpJ^mHsrH!.k0$s7$$g!;6?l!.k0$s+LFOm/bd$J,~> +!BU8[l0\ND!.k0$s7$$g!;6?l!.k0$s+LFOklK'jJ,~> +!B:&Xj6cm>!.k0$s7$$g!;6?l!.k0$s+LFOirR%VJ,~> +!BpJ^mHsrH!.k0$s7-*h!;-9k!.k0$s+LFOm/bd$J,~> +!BU8[l0\ND!.k0$s7-*h!;-9k!.k0$s+LFOklK'jJ,~> +!B:&Xj6cm>!.k0$s7-*h!;-9k!.k0$s+LFOirR%VJ,~> +!BpJ^m=G:gs3^iH!;-9k!.k0$s+LFOm/bd$J,~> +!BU8[l%/kcs3^iH!;-9k!.k0$s+LFOklK'jJ,~> +!B:&Xj+75]s3^iH!;-9k!.k0$s+LFOirR%VJ,~> +!BpJ^m=G:gs4%)H!;?Hk!.k0$s+^RQm/bd$J,~> +!BU8[l%/kcs4%)H!;?Hk!.k0$s+^RQklK'jJ,~> +!B:&Xj+75]s4%)H!;?Hk!.k0$s+^RQirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mBHWg!5SX6!1Elc!5JR6!.k1Bs8;qKs.KDkm/bd$J,~> +!BU8[l*13c!5SX6!1Elc!5JR6!.k1Bs8;qKs.KDkklK'jJ,~> +!B:&Xj08R]!5SX6!1Elc!5JR6!.k1Bs8;qKs.KDkirR%VJ,~> +!BpJ^mFqU=!!<0#!8dbR!9*tW!<<)s!:'U`!5nj8!!3*"gA_-Q^Ae05cMmkEV>gMqJcDDCrp9a; +4b*~> +!BU8[l.Z19!!<0#!8dbR!9*tW!<<)s!:'U`!5nj8!!3*"gA_-Q^Ae05cMmkEV>gMqJcDDCrojI/ +3e.~> +!B:&Xj4aP3!!<0#!8dbR!9*tW!<<)s!:'U`!5nj8!!3*"gA_-Q^Ae05cMmkEV>gMqJcDDCro4$s +2h1~> +!BpJ^mHsrH!;ull!8IPR!9*tV!!*&s!9sO`!6,! +!BU8[l0\ND!;ull!8IPR!9*tV!!*&s!9sO`!6,! +!B:&Xj6cm>!;ull!8IPR!9*tV!!*&s!9sO`!6,! +!BpJ^mHsrH!;uls!<)rs!<)rr!<3#t!!E6$!<<#us8W&u!<;utqZ$Qqq>^BnrVucq!<;rsqu?Wq +rr;uus8W&us8W#t!<<#u"9/?$s8E#ts8N'!s8;rps8;rrs8;rts8E#ss7u`^rr<&rrr<&Qrr<&5 +rr<%Ms7-*h!.k0Cs8MBdeieN~> +!BU8[l0\ND!;uls!<)rs!<)rr!<3#t!!E6$!<<#us8W&u!<;utqZ$Qqq>^BnrVucq!<;rsqu?Wq +rr;uus8W&us8W#t!<<#u"9/?$s8E#ts8N'!s8;rps8;rrs8;rts8E#ss7u`^rr<&rrr<&Qrr<&5 +rr<%Ms7-*h!.k0Cs8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rs!<)rr!<3#t!!E6$!<<#us8W&u!<;utqZ$Qqq>^BnrVucq!<;rsqu?Wq +rr;uus8W&us8W#t!<<#u"9/?$s8E#ts8N'!s8;rps8;rrs8;rts8E#ss7u`^rr<&rrr<&Qrr<&5 +rr<%Ms7-*h!.k0Cs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N*!s7lWps7QEms7cTks8N)rs7lZps82iss82los8;rt +s8N*!s8E#us8;ots7QHms7lZos7lZps7ZNns7lZ^rr<&ls8;rrs8N''rr<'!rr<&us8N'!s8;rn +rr<&ps8;rqs8E#us8E#os8N'!s8;rrs8N)ts8N*!s8N''rr<'!rr<&trrE-"r;c`pr;ccqrVuru +rW)iqr;Zlu!;HNm!;lfr!!*&t!;?Hk!!<0#!<)rr!;uls!!*&t!;lfp!;ulr!!*&u!;lfp!;QQo +!.k0Cs8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N*!s7lWps7QEms7cTks8N)rs7lZps82iss82los8;rt +s8N*!s8E#us8;ots7QHms7lZos7lZps7ZNns7lZ^rr<&ls8;rrs8N''rr<'!rr<&us8N'!s8;rn +rr<&ps8;rqs8E#us8E#os8N'!s8;rrs8N)ts8N*!s8N''rr<'!rr<&trrE-"r;c`pr;ccqrVuru +rW)iqr;Zlu!;HNm!;lfr!!*&t!;?Hk!!<0#!<)rr!;uls!!*&t!;lfp!;ulr!!*&u!;lfp!;QQo +!.k0Cs8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N*!s7lWps7QEms7cTks8N)rs7lZps82iss82los8;rt +s8N*!s8E#us8;ots7QHms7lZos7lZps7ZNns7lZ^rr<&ls8;rrs8N''rr<'!rr<&us8N'!s8;rn +rr<&ps8;rqs8E#us8E#os8N'!s8;rrs8N)ts8N*!s8N''rr<'!rr<&trrE-"r;c`pr;ccqrVuru +rW)iqr;Zlu!;HNm!;lfr!!*&t!;?Hk!!<0#!<)rr!;uls!!*&t!;lfp!;ulr!!*&u!;lfp!;QQo +!.k0Cs8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)os8E#ss8Duus8Duus8E!$rr<'!s8E#ts8E#rs8N)ss8E#s +s8E#ts8N)us8N)ps8N'&rrE*!!!*#urrE#trrE*!rVururW!*$!!*'!rW)rtrVururW)osrW)rt +r;cltrrE*!rrE#trrDHd!!)`m!!)ut!!)utrrE*!rrE*!!!*#urrE#t!!)lq!!)lq!!)ut!!)rs +!!)ut!!)cnrrE#t!!)ut!!)rs!!*#urrE*!rrE*!!!*#urrE#t!!)ut!!)ut!!)orrrE&u!!)ut +!!)utrrD`l!!)lqrrE#t!!)fo!!)utrrE#t!!)ut!!)rsrrE#t!!)ut!!)ut!!)orrrE&u!!)ut +!!)ut!!)ip!!%TMT`>#Y!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)os8E#ss8Duus8Duus8E!$rr<'!s8E#ts8E#rs8N)ss8E#s +s8E#ts8N)us8N)ps8N'&rrE*!!!*#urrE#trrE*!rVururW!*$!!*'!rW)rtrVururW)osrW)rt +r;cltrrE*!rrE#trrDHd!!)`m!!)ut!!)utrrE*!rrE*!!!*#urrE#t!!)lq!!)lq!!)ut!!)rs +!!)ut!!)cnrrE#t!!)ut!!)rs!!*#urrE*!rrE*!!!*#urrE#t!!)ut!!)ut!!)orrrE&u!!)ut +!!)utrrD`l!!)lqrrE#t!!)fo!!)utrrE#t!!)ut!!)rsrrE#t!!)ut!!)ut!!)orrrE&u!!)ut +!!)ut!!)ip!!%TMT`>#U!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)os8E#ss8Duus8Duus8E!$rr<'!s8E#ts8E#rs8N)ss8E#s +s8E#ts8N)us8N)ps8N'&rrE*!!!*#urrE#trrE*!rVururW!*$!!*'!rW)rtrVururW)osrW)rt +r;cltrrE*!rrE#trrDHd!!)`m!!)ut!!)utrrE*!rrE*!!!*#urrE#t!!)lq!!)lq!!)ut!!)rs +!!)ut!!)cnrrE#t!!)ut!!)rs!!*#urrE*!rrE*!!!*#urrE#t!!)ut!!)ut!!)orrrE&u!!)ut +!!)utrrD`l!!)lqrrE#t!!)fo!!)utrrE#t!!)ut!!)rsrrE#t!!)ut!!)ut!!)orrrE&u!!)ut +!!)ut!!)ip!!%TMT`>#O!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N)ss8N)ss8N)r +s8N)ts8N'#rr<&os8N'&rr<'!!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<-#!!)orrrE&u +rW)fpr;c*^!!)cn!!)or!!*#u!!*#u!!*#u!!*#u!!)or!!)or!!)or!!)or!!)rs!s&B$!;?Em +!;uis!<)ot!;uis!<2uu!<2uu!<2uu!<2uu!;lcu!<<'!qu6Wrr;Q`sq#:!lqYpNq +r;Q`sq>UEpqu6Wrrr2ruqu6WrrVlitr;Q`srr2ruqu6Wrr;Q`soD\djq>UEpJcDDCrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N)ss8N)ss8N)r +s8N)ts8N'#rr<&os8N'&rr<'!!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<-#!!)orrrE&u +rW)fpr;c*^!!)cn!!)or!!*#u!!*#u!!*#u!!*#u!!)or!!)or!!)or!!)or!!)rs!s&B$!;?Em +!;uis!<)ot!;uis!<2uu!<2uu!<2uu!<2uu!;lcu!<<'!qu6Wrr;Q`sq#:!lqYpNq +r;Q`sq>UEpqu6Wrrr2ruqu6WrrVlitr;Q`srr2ruqu6Wrr;Q`soD\djq>UEpJcDDCrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N)ss8N)ss8N)r +s8N)ts8N'#rr<&os8N'&rr<'!!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<-#!!)orrrE&u +rW)fpr;c*^!!)cn!!)or!!*#u!!*#u!!*#u!!*#u!!)or!!)or!!)or!!)or!!)rs!s&B$!;?Em +!;uis!<)ot!;uis!<2uu!<2uu!<2uu!<2uu!;lcu!<<'!qu6Wrr;Q`sq#:!lqYpNq +r;Q`sq>UEpqu6Wrrr2ruqu6WrrVlitr;Q`srr2ruqu6Wrr;Q`soD\djq>UEpJcDDCro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N)ss8N)ss7ZNk +s8E#ms8N*!rrW9$!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<'!pAk3mrrDioqZ-!_!!)cn +!!)or!!*#u!!*#u!!*#u!!*#u!!)or!!)or!!)orq#L#Y!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N)ss8N)ss7ZNk +s8E#ms8N*!rrW9$!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<'!pAk3mrrDioqZ-!_!!)cn +!!)or!!*#u!!*#u!!*#u!!*#u!!)or!!)or!!)orq#L#U!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N)ss8N)ss7ZNk +s8E#ms8N*!rrW9$!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<'!pAk3mrrDioqZ-!_!!)cn +!!)or!!*#u!!*#u!!*#u!!*#u!!)or!!)or!!)orq#L#O!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N)ss8N)ss7ZNl +s8N'#rr<&os8N*!s8;rss8N)ts8N*!s8N*!s8N*!s8N*!s8N)ss8N'!s7ZNms8N)ms82larr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&rrr<&ks8N)lrr<&srr<&trr<&srr<&urr<&u +rr<&urr<&urr<&rrrW9$rrD`l!!)ZkrrD]k!!)lq!!)rs!!)ip!!)or!!*#u!!)`m!!)rs!!*#u +!!)]l!!)ip!!)rs!!)ip!!%TMT`>#Y!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N)ss8N)ss7ZNl +s8N'#rr<&os8N*!s8;rss8N)ts8N*!s8N*!s8N*!s8N*!s8N)ss8N'!s7ZNms8N)ms82larr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&rrr<&ks8N)lrr<&srr<&trr<&srr<&urr<&u +rr<&urr<&urr<&rrrW9$rrD`l!!)ZkrrD]k!!)lq!!)rs!!)ip!!)or!!*#u!!)`m!!)rs!!*#u +!!)]l!!)ip!!)rs!!)ip!!%TMT`>#U!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)os8N)rs8N'/rr<'!rr<'!rr<'!rr<&ss8N)ss8N)ss7ZNl +s8N'#rr<&os8N*!s8;rss8N)ts8N*!s8N*!s8N*!s8N*!s8N)ss8N'!s7ZNms8N)ms82larr<&n +rr<&rrr<&urr<&urr<&urr<&urr<&rrr<&rrr<&rrr<&ks8N)lrr<&srr<&trr<&srr<&urr<&u +rr<&urr<&urr<&rrrW9$rrD`l!!)ZkrrD]k!!)lq!!)rs!!)ip!!)or!!*#u!!)`m!!)rs!!*#u +!!)]l!!)ip!!)rs!!)ip!!%TMT`>#O!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E!,rr<'!rr<'!rr<'!s8E#ts8E#rs8N)s +s8E#ms8N)us8N)ps8N)us8E#ts8N)us8E#us8N*!s8N*!s8N*!s8E#ts8Duus8E#ms8N)ps8N)t +s8N)crr<&rrrW9$rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!)or!!)or!!)]l!s&B$!;?Em!;uis +!<)ot!;uis!<2uu!<2uu!<2uu!<2uu!;lcu!<<'!p&>!lq#:!lqYpNqr;Q`sq>UEp +qu6Wrrr2rupAY*mr;Q`srr2rup&>!lq>UEpr;Q`sq>UEpJcDDCrp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E!,rr<'!rr<'!rr<'!s8E#ts8E#rs8N)s +s8E#ms8N)us8N)ps8N)us8E#ts8N)us8E#us8N*!s8N*!s8N*!s8E#ts8Duus8E#ms8N)ps8N)t +s8N)crr<&rrrW9$rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!)or!!)or!!)]l!s&B$!;?Em!;uis +!<)ot!;uis!<2uu!<2uu!<2uu!<2uu!;lcu!<<'!p&>!lq#:!lqYpNqr;Q`sq>UEp +qu6Wrrr2rupAY*mr;Q`srr2rup&>!lq>UEpr;Q`sq>UEpJcDDCrojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E!,rr<'!rr<'!rr<'!s8E#ts8E#rs8N)s +s8E#ms8N)us8N)ps8N)us8E#ts8N)us8E#us8N*!s8N*!s8N*!s8E#ts8Duus8E#ms8N)ps8N)t +s8N)crr<&rrrW9$rrDrr!!*#u!!*#u!!*#u!!*#u!!)or!!)or!!)or!!)]l!s&B$!;?Em!;uis +!<)ot!;uis!<2uu!<2uu!<2uu!<2uu!;lcu!<<'!p&>!lq#:!lqYpNqr;Q`sq>UEp +qu6Wrrr2rupAY*mr;Q`srr2rup&>!lq>UEpr;Q`sq>UEpJcDDCro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7cTos7lWps8;ots8Duus8Duus7lZos7lZos7lZps82iss82lp +s82iss8E#ts7?9ks8Duus7HBks7lZps7lZns7lZ]s8N)trr<&trr<&trr<&trr<&urr<&urr<&u +s8N)trr<&qrr<&qrr<&ts8N)trr<&trr<&nrr<&srr<&trr<&ts8N)urr<&urr<&urr<&us8N)t +rr<&trr<&ts8N)srr<&os8N)trr<&lrr<&qrr<&srr<&orr<&ts8N)trr<&ts8N)trr<&srr<&t +rr<&ts8N)srr<&prr<&ts8N)prr<&os8N(Ms/Z2!m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7cTos7lWps8;ots8Duus8Duus7lZos7lZos7lZps82iss82lp +s82iss8E#ts7?9ks8Duus7HBks7lZps7lZns7lZ]s8N)trr<&trr<&trr<&trr<&urr<&urr<&u +s8N)trr<&qrr<&qrr<&ts8N)trr<&trr<&nrr<&srr<&trr<&ts8N)urr<&urr<&urr<&us8N)t +rr<&trr<&ts8N)srr<&os8N)trr<&lrr<&qrr<&srr<&orr<&ts8N)trr<&ts8N)trr<&srr<&t +rr<&ts8N)srr<&prr<&ts8N)prr<&os8N(Ms/Z2!klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7cTos7lWps8;ots8Duus8Duus7lZos7lZos7lZps82iss82lp +s82iss8E#ts7?9ks8Duus7HBks7lZps7lZns7lZ]s8N)trr<&trr<&trr<&trr<&urr<&urr<&u +s8N)trr<&qrr<&qrr<&ts8N)trr<&trr<&nrr<&srr<&trr<&ts8N)urr<&urr<&urr<&us8N)t +rr<&trr<&ts8N)srr<&os8N)trr<&lrr<&qrr<&srr<&orr<&ts8N)trr<&ts8N)trr<&srr<&t +rr<&ts8N)srr<&prr<&ts8N)prr<&os8N(Ms/Z2!irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&qs82los8;rss8;ots8Duus8E!#rr<'!r;cfrq#L?mqZ-Zrqu?`s +quHZpquHcsrrE#tr;Zitq>^NqrVuruqZ$Wrr;c`pqZ-Zrq#LBnq>fd[r;c`pr;cfrrW)uurrE*! +rrE*!!gNprW)rtrW)`nr;Zlu!;ulq!;ulr!<3#t!<)rr!;uln!;ulq!!*&u +!<3#p!;lfr!.k0Ns8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&qs82los8;rss8;ots8Duus8E!#rr<'!r;cfrq#L?mqZ-Zrqu?`s +quHZpquHcsrrE#tr;Zitq>^NqrVuruqZ$Wrr;c`pqZ-Zrq#LBnq>fd[r;c`pr;cfrrW)uurrE*! +rrE*!!gNprW)rtrW)`nr;Zlu!;ulq!;ulr!<3#t!<)rr!;uln!;ulq!!*&u +!<3#p!;lfr!.k0Ns8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&qs82los8;rss8;ots8Duus8E!#rr<'!r;cfrq#L?mqZ-Zrqu?`s +quHZpquHcsrrE#tr;Zitq>^NqrVuruqZ$Wrr;c`pqZ-Zrq#LBnq>fd[r;c`pr;cfrrW)uurrE*! +rrE*!!gNprW)rtrW)`nr;Zlu!;ulq!;ulr!<3#t!<)rr!;uln!;ulq!!*&u +!<3#p!;lfr!.k0Ns8M$Z_`*)~> +!BpJ^mHsrH!8IPR!.k0urr<%Ms5*bU!.k0$s5F"Wm/bd$J,~> +!BU8[l0\ND!8IPR!.k0urr<%Ms5*bU!.k0$s5F"WklK'jJ,~> +!B:&Xj6cm>!8IPR!.k0urr<%Ms5*bU!.k0$s5F"WirR%VJ,~> +!BpJ^mHsrH!8IPR!.k0urr<%Ms5*bU!.k0$s5F"Wm/bd$J,~> +!BU8[l0\ND!8IPR!.k0urr<%Ms5*bU!.k0$s5F"WklK'jJ,~> +!B:&Xj6cm>!8IPR!.k0urr<%Ms5*bU!.k0$s5F"WirR%VJ,~> +!BpJ^mC`Js!.k1"rr<%Ms53hV!.k0$s5 +!BU8[l+I&o!.k1"rr<%Ms53hV!.k0$s5 +!B:&Xj1PEi!.k1"rr<%Ms53hV!.k0$s5 +!BpJ^mC`Js!.k1#s8;qKs5s@Z!.k0$s53kUm/bd$J,~> +!BU8[l+I&o!.k1#s8;qKs5s@Z!.k0$s53kUklK'jJ,~> +!B:&Xj1PEi!.k1#s8;qKs5s@Z!.k0$s53kUirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mEYb3!:Bgd!;c`q!8IPR!:^$d!;?Hl!20Al!1*Zb!.k0$s0_n+m/bd$J,~> +!BU8[l-B>/!:Bgd!;c`q!8IPR!:^$d!;?Hl!20Al!1*Zb!.k0$s0_n+klK'jJ,~> +!B:&Xj3I])!:Bgd!;c`q!8IPR!:^$d!;?Hl!20Al!1*Zb!.k0$s0_n+irR%VJ,~> +!BpJ^mG7g:!;uls!:Bgd!;c`q!:'UY!;uls!:^$d!;?Hl!6bE@!:9^c!;QQo!;ZWp!8meV!;?Em +!9a@^!8meV!6P6@!9!kW!:Bdd!;?Em!.k0Ts8MBdeieN~> +!BU8[l.uC6!;uls!:Bgd!;c`q!:'UY!;uls!:^$d!;?Hl!6bE@!:9^c!;QQo!;ZWp!8meV!;?Em +!9a@^!8meV!6P6@!9!kW!:Bdd!;?Em!.k0Ts8M6`c8pI~> +!B:&Xj5'b0!;uls!:Bgd!;c`q!:'UY!;uls!:^$d!;?Hl!6bE@!:9^c!;QQo!;ZWp!8meV!;?Em +!9a@^!8meV!6P6@!9!kW!:Bdd!;?Em!.k0Ts8M$Z_`*)~> +!BpJ^mHsrH!<)rl!8[\T!:'UY!9X=]!;6Bl!6G0?!:9^c!;QQo!;ZWp!8meV!;?Em!9a@^!8meV +!6P6@!9!kW!:Bdd!;?Em!.k0Ts8MBdeieN~> +!BU8[l0\ND!<)rl!8[\T!:'UY!9X=]!;6Bl!6G0?!:9^c!;QQo!;ZWp!8meV!;?Em!9a@^!8meV +!6P6@!9!kW!:Bdd!;?Em!.k0Ts8M6`c8pI~> +!B:&Xj6cm>!<)rl!8[\T!:'UY!9X=]!;6Bl!6G0?!:9^c!;QQo!;ZWp!8meV!;?Em!9a@^!8meV +!6P6@!9!kW!:Bdd!;?Em!.k0Ts8M$Z_`*)~> +!BpJ^mHsrH!;lfr!<)rt!<<)s!;ulr!!*&t!<)rq!;ulm!;lfp!;?Hm!<)rt!<<)s!;ZZn!;ZZp +!;c`o!!<0#!<)ro!7_#M!<3&Zrr<&prr<&Vrr<&/rr<&@rr<&Brr<%Ms/#bpm/bd$J,~> +!BU8[l0\ND!;lfr!<)rt!<<)s!;ulr!!*&t!<)rq!;ulm!;lfp!;?Hm!<)rt!<<)s!;ZZn!;ZZp +!;c`o!!<0#!<)ro!7_#M!<3&Zrr<&prr<&Vrr<&/rr<&@rr<&Brr<%Ms/#bpklK'jJ,~> +!B:&Xj6cm>!;lfr!<)rt!<<)s!;ulr!!*&t!<)rq!;ulm!;lfp!;?Hm!<)rt!<<)s!;ZZn!;ZZp +!;c`o!!<0#!<)ro!7_#M!<3&Zrr<&prr<&Vrr<&/rr<&@rr<&Brr<%Ms/#bpirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N*!rriE&!!*'!quHZpp]1gHnrW)cor;Zlu!;HNm!;lfr!!*&t!;?Hk!!3*"rVllus8;rps8;rqs8Duus8E#q +s8;ros8;ourrE#tq>gHnr;ccqrVururW)iqrW)cor;Zlu!<)ro!;ulr!;ZZn!!3*"q>^Hp!<;ut +JcF$qrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N*!rriE&!!*'!quHZpp]1gHnrW)cor;Zlu!;HNm!;lfr!!*&t!;?Hk!!3*"rVllus8;rps8;rqs8Duus8E#q +s8;ros8;ourrE#tq>gHnr;ccqrVururW)iqrW)cor;Zlu!<)ro!;ulr!;ZZn!!3*"q>^Hp!<;ut +JcF$qrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N*!rriE&!!*'!quHZpp]1gHnrW)cor;Zlu!;HNm!;lfr!!*&t!;?Hk!!3*"rVllus8;rps8;rqs8Duus8E#q +s8;ros8;ourrE#tq>gHnr;ccqrVururW)iqrW)cor;Zlu!<)ro!;ulr!;ZZn!!3*"q>^Hp!<;ut +JcF$qro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs82lms8N)rs8E#ts8N)rs8N)qs8N)qs8E#ss8E#os82lms8N)s +s8E#ss8E#rs8N)ss8E#ts8E#ts8N)ts8N)Lrr<&urr<&rs8N)urr<&qrr<&orr<&ps8N)trr<&u +s8N*!s8N*!rr<&urr<&trr<&qrr<&mrr<&qrr<&ts8N)lrr<&qs8N)trr<&orr<&ts8N)ts8N)t +rr<&trr<&trr<&rs8N)urr<&trr<&trr<&srr<&ts8N)rrr<&prr<&trr<&rs8N)urr<&qrr<&q +rr<&ts8N)rrr<&mrr<&qrr<&ts8N)os8N)trr<%Ms3L`Em/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs82lms8N)rs8E#ts8N)rs8N)qs8N)qs8E#ss8E#os82lms8N)s +s8E#ss8E#rs8N)ss8E#ts8E#ts8N)ts8N)Lrr<&urr<&rs8N)urr<&qrr<&orr<&ps8N)trr<&u +s8N*!s8N*!rr<&urr<&trr<&qrr<&mrr<&qrr<&ts8N)lrr<&qs8N)trr<&orr<&ts8N)ts8N)t +rr<&trr<&trr<&rs8N)urr<&trr<&trr<&srr<&ts8N)rrr<&prr<&trr<&rs8N)urr<&qrr<&q +rr<&ts8N)rrr<&mrr<&qrr<&ts8N)os8N)trr<%Ms3L`EklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs82lms8N)rs8E#ts8N)rs8N)qs8N)qs8E#ss8E#os82lms8N)s +s8E#ss8E#rs8N)ss8E#ts8E#ts8N)ts8N)Lrr<&urr<&rs8N)urr<&qrr<&orr<&ps8N)trr<&u +s8N*!s8N*!rr<&urr<&trr<&qrr<&mrr<&qrr<&ts8N)lrr<&qs8N)trr<&orr<&ts8N)ts8N)t +rr<&trr<&trr<&rs8N)urr<&trr<&trr<&srr<&ts8N)rrr<&prr<&trr<&rs8N)urr<&qrr<&q +rr<&ts8N)rrr<&mrr<&qrr<&ts8N)os8N)trr<%Ms3L`EirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs82lms8N)rs8N)ts8N)rs8N)qs8N)qs8N)rs8N)ps82lms8N)s +s8N)rs8N)ss8N)ss8N)ss8N)us8;rFrr<&urr<&rrr<&lrr<&orr<&prr<&srr<&urr<&urr<&u +rrW9$rrDrr!!)or!!)`m!!)or!!)or!!)]l!!)lq!!)rs!!)ip!!)or!!)ut!!)rs!!)fo!!)or +!!)Wj!!)ut!!)or!!)or!!)lq!!)or!!)rs!!)]l!!)lq!!)rs!!)or!!)`m!!)or!!)or!!)fo +!!)or!!%TMd/X+4!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#qs82lms8N)rs8N)ts8N)rs8N)qs8N)qs8N)rs8N)ps82lms8N)s +s8N)rs8N)ss8N)ss8N)ss8N)us8;rFrr<&urr<&rrr<&lrr<&orr<&prr<&srr<&urr<&urr<&u +rrW9$rrDrr!!)or!!)`m!!)or!!)or!!)]l!!)lq!!)rs!!)ip!!)or!!)ut!!)rs!!)fo!!)or +!!)Wj!!)ut!!)or!!)or!!)lq!!)or!!)rs!!)]l!!)lq!!)rs!!)or!!)`m!!)or!!)or!!)fo +!!)or!!%TMd/X+0!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs82lms8N)rs8N)ts8N)rs8N)qs8N)qs8N)rs8N)ps82lms8N)s +s8N)rs8N)ss8N)ss8N)ss8N)us8;rFrr<&urr<&rrr<&lrr<&orr<&prr<&srr<&urr<&urr<&u +rrW9$rrDrr!!)or!!)`m!!)or!!)or!!)]l!!)lq!!)rs!!)ip!!)or!!)ut!!)rs!!)fo!!)or +!!)Wj!!)ut!!)or!!)or!!)lq!!)or!!)rs!!)]l!!)lq!!)rs!!)or!!)`m!!)or!!)or!!)fo +!!)or!!%TMd/X+*!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N*!rr<&ps8N)rs8N)ts8N)rs8N)qs8N)qs7ZNhs8N*!rr<&p +s8N)ss7ZNks8N)ss8N)ss8N)ts8)fHrr<&srr<&srr<&lrr<&orr<&prr<&srr<&urr<&urr<&u +rrN3#s7lZlrr<&mrr<&rrr<&err<&qrr<&srr<&prr<&mrr<&srr<&ts8)fnrr<&os8)fprr<&k +rr<&qs7lZmrr<&lrr<&ps8E#nrr<&mrr<&rrr<&hrr<&rrr<%Ms3UfFm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N*!rr<&ps8N)rs8N)ts8N)rs8N)qs8N)qs7ZNhs8N*!rr<&p +s8N)ss7ZNks8N)ss8N)ss8N)ts8)fHrr<&srr<&srr<&lrr<&orr<&prr<&srr<&urr<&urr<&u +rrN3#s7lZlrr<&mrr<&rrr<&err<&qrr<&srr<&prr<&mrr<&srr<&ts8)fnrr<&os8)fprr<&k +rr<&qs7lZmrr<&lrr<&ps8E#nrr<&mrr<&rrr<&hrr<&rrr<%Ms3UfFklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N*!rr<&ps8N)rs8N)ts8N)rs8N)qs8N)qs7ZNhs8N*!rr<&p +s8N)ss7ZNks8N)ss8N)ss8N)ts8)fHrr<&srr<&srr<&lrr<&orr<&prr<&srr<&urr<&urr<&u +rrN3#s7lZlrr<&mrr<&rrr<&err<&qrr<&srr<&prr<&mrr<&srr<&ts8)fnrr<&os8)fprr<&k +rr<&qs7lZmrr<&lrr<&ps8E#nrr<&mrr<&rrr<&hrr<&rrr<%Ms3UfFirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ms8N)rs8N)ts8N)rs8N)qs8N)qs7ZNhs8N)ms8N)ss7ZNk +s8N)ss8N)ss8N)rs82lJs7u`nrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrD]k!!)`m +!!)or!!)He!!)lq!!)rs!!)ip!!)`m!!)rs!!*#u!!)rs!!)or!!)ip!!)rs!!)ut!!)Zk!!)lq +!!)]l!!)]l!!)`mrrDoq!!)`m!!)or!!)Qh!!)or!!%TMd/X+4!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ms8N)rs8N)ts8N)rs8N)qs8N)qs7ZNhs8N)ms8N)ss7ZNk +s8N)ss8N)ss8N)rs82lJs7u`nrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrD]k!!)`m +!!)or!!)He!!)lq!!)rs!!)ip!!)`m!!)rs!!*#u!!)rs!!)or!!)ip!!)rs!!)ut!!)Zk!!)lq +!!)]l!!)]l!!)`mrrDoq!!)`m!!)or!!)Qh!!)or!!%TMd/X+0!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ms8N)rs8N)ts8N)rs8N)qs8N)qs7ZNhs8N)ms8N)ss7ZNk +s8N)ss8N)ss8N)rs82lJs7u`nrr<&lrr<&orr<&prr<&srr<&urr<&urr<&urrW9$rrD]k!!)`m +!!)or!!)He!!)lq!!)rs!!)ip!!)`m!!)rs!!*#u!!)rs!!)or!!)ip!!)rs!!)ut!!)Zk!!)lq +!!)]l!!)]l!!)`mrrDoq!!)`m!!)or!!)Qh!!)or!!%TMd/X+*!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ms8N)rs8N)ts8N)rs8N)qs8N)ts8N'!s8E#hs8N)ms8N)s +s8E#ks8N)ss8E#ts8E#ts8N)ts8N)Nrr<&qrr<&trr<&lrr<&orr<&prr<&srr<&urr<&urr<&u +rrW9$rrD]k!!)`m!!)or!!)He!!)lq!!)rs!!)ip!!)`m!!)rs!!*#u!!)rs!!)or!!)ip!!)rs +!!)ut!!)Zk!!)lq!!)]l!!)]l!!)lq!!)rs!!)or!!)`m!!)or!!)Qh!!)or!!%TMd/X+4!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ms8N)rs8N)ts8N)rs8N)qs8N)ts8N'!s8E#hs8N)ms8N)s +s8E#ks8N)ss8E#ts8E#ts8N)ts8N)Nrr<&qrr<&trr<&lrr<&orr<&prr<&srr<&urr<&urr<&u +rrW9$rrD]k!!)`m!!)or!!)He!!)lq!!)rs!!)ip!!)`m!!)rs!!*#u!!)rs!!)or!!)ip!!)rs +!!)ut!!)Zk!!)lq!!)]l!!)]l!!)lq!!)rs!!)or!!)`m!!)or!!)Qh!!)or!!%TMd/X+0!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ms8N)rs8N)ts8N)rs8N)qs8N)ts8N'!s8E#hs8N)ms8N)s +s8E#ks8N)ss8E#ts8E#ts8N)ts8N)Nrr<&qrr<&trr<&lrr<&orr<&prr<&srr<&urr<&urr<&u +rrW9$rrD]k!!)`m!!)or!!)He!!)lq!!)rs!!)ip!!)`m!!)rs!!*#u!!)rs!!)or!!)ip!!)rs +!!)ut!!)Zk!!)lq!!)]l!!)]l!!)lq!!)rs!!)or!!)`m!!)or!!)Qh!!)or!!%TMd/X+*!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7u`ns7lZps8;rts8;rts7lZns7lZps7lZks7u`ns7lZos7lZo +s7lZos7cTos7lZHrr<&qrr<&trr<&lrr<&orr<&trr<&urr<&srr<&urr<&urr<&urr<&urr<&t +s8N)rrr<&trr<&rrr<&qrr<&ts8N)lrr<&qrr<&srr<&orr<&ts8N)trr<&srr<&urr<&ts8N)r +rr<&prr<&ts8N)srr<&ts8N)rrr<&trr<&urr<&ts8N)srr<&lrr<&qs8N)trr<&rrr<&trr<&r +rr<&qrr<&ts8N)os8N)trr<&rs8N(Ms4@;Mm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7u`ns7lZps8;rts8;rts7lZns7lZps7lZks7u`ns7lZos7lZo +s7lZos7cTos7lZHrr<&qrr<&trr<&lrr<&orr<&trr<&urr<&srr<&urr<&urr<&urr<&urr<&t +s8N)rrr<&trr<&rrr<&qrr<&ts8N)lrr<&qrr<&srr<&orr<&ts8N)trr<&srr<&urr<&ts8N)r +rr<&prr<&ts8N)srr<&ts8N)rrr<&trr<&urr<&ts8N)srr<&lrr<&qs8N)trr<&rrr<&trr<&r +rr<&qrr<&ts8N)os8N)trr<&rs8N(Ms4@;MklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7u`ns7lZps8;rts8;rts7lZns7lZps7lZks7u`ns7lZos7lZo +s7lZos7cTos7lZHrr<&qrr<&trr<&lrr<&orr<&trr<&urr<&srr<&urr<&urr<&urr<&urr<&t +s8N)rrr<&trr<&rrr<&qrr<&ts8N)lrr<&qrr<&srr<&orr<&ts8N)trr<&srr<&urr<&ts8N)r +rr<&prr<&ts8N)srr<&ts8N)rrr<&trr<&urr<&ts8N)srr<&lrr<&qs8N)trr<&rrr<&trr<&r +rr<&qrr<&ts8N)os8N)trr<&rs8N(Ms4@;MirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7u`ns7lZps8;rts8;rts7lZms82los8)fms7u`ns7lZms8)fq +s7lZns8;ots8E#us7u`Is8;rss8;ots7u`ns7u`ls8;rss8E#ts8Duus8E#us8N*!s8N)us8;rm +s8;rrs7u`ns8;rks7u`ps8E#ts8E#ns8;rqs8E#ts8E#ts8;ots8E#us7u`ns8;ots8E#ss8;rm +s8;rqs8;rqs7u`ns7u`orrE-"r;cZnr;cfrq>gHnr;cQk! +!BU8[l0\NM!!rT)rrE'!rr<&ts7u`ns7lZps8;rts8;rts7lZms82los8)fms7u`ns7lZms8)fq +s7lZns8;ots8E#us7u`Is8;rss8;ots7u`ns7u`ls8;rss8E#ts8Duus8E#us8N*!s8N)us8;rm +s8;rrs7u`ns8;rks7u`ps8E#ts8E#ns8;rqs8E#ts8E#ts8;ots8E#us7u`ns8;ots8E#ss8;rm +s8;rqs8;rqs7u`ns7u`orrE-"r;cZnr;cfrq>gHnr;cQk! +!B:&Xj6cmG!!rT)rrE'!rr<&ts7u`ns7lZps8;rts8;rts7lZms82los8)fms7u`ns7lZms8)fq +s7lZns8;ots8E#us7u`Is8;rss8;ots7u`ns7u`ls8;rss8E#ts8Duus8E#us8N*!s8N)us8;rm +s8;rrs7u`ns8;rks7u`ps8E#ts8E#ns8;rqs8E#ts8E#ts8;ots8E#us7u`ns8;ots8E#ss8;rm +s8;rqs8;rqs7u`ns7u`orrE-"r;cZnr;cfrq>gHnr;cQk! +!BpJ^mHsrH!.k0$s+13Arr<%Ms2k +!BU8[l0\ND!.k0$s+13Arr<%Ms2k +!B:&Xj6cm>!.k0$s+13Arr<%Ms2k +!BpJ^mHsrH!.k0$s+13Arr<%Ms2k +!BU8[l0\ND!.k0$s+13Arr<%Ms2k +!B:&Xj6cm>!.k0$s+13Arr<%Ms2k +!BpJ^m=G:gs+13$s8N#u!.k0ls8MBdeieN~> +!BU8[l%/kcs+13$s8N#u!.k0ls8M6`c8pI~> +!B:&Xj+75]s+13$s8N#u!.k0ls8M$Z_`*)~> +!BpJ^m=G:gs+13$s8W,t!.k0ns8MBdeieN~> +!BU8[l%/kcs+13$s8W,t!.k0ns8M6`c8pI~> +!B:&Xj+75]s+13$s8W,t!.k0ns8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mG%[@!;QTo!5&:0!.k0$s+13$s2+g8m/bd$J,~> +!BU8[l.c7 +!B:&Xj4jV6!;QTo!5&:0!.k0$s+13$s2+g8irR%VJ,~> +!BpJ^mHafN!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Hf!9O4\!.k0$s+13$s7?9im/bd$J,~> +!BU8[l0JBJ!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Hf!9O4\!.k0$s+13$s7?9iklK'jJ,~> +!B:&Xj6QaD!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Hf!9O4\!.k0$s+13$s7?9iirR%VJ,~> +!BpJ^mHFQM!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Em!<2uu!<2uu!9O4\!.k0$s+13$s7?9i +m/bd$J,~> +!BU8[l0/-I!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Em!<2uu!<2uu!9O4\!.k0$s+13$s7?9i +klK'jJ,~> +!B:&Xj66LC!;-9k!;HKn!;c]q!;QQo!;?Em!7q/M!;?Em!<2uu!<2uu!9O4\!.k0$s+13$s7?9i +irR%VJ,~> +!BpJ^mHOWP!<3&lrr<&nrr<&grr<&Arr<&mrr<&urr<&urr<%Ms+13$s+14$s8MBdeieN~> +!BU8[l083L!<3&lrr<&nrr<&grr<&Arr<&mrr<&urr<&urr<%Ms+13$s+14$s8M6`c8pI~> +!B:&Xj6?RF!<3&lrr<&nrr<&grr<&Arr<&mrr<&urr<&urr<%Ms+13$s+14$s8M$Z_`*)~> +!BpJ^mHOWP!<3&qs8;ourrDusr;Zlu!;ulr!;c`l!;ulr!;ZZn!;uls!!*&t!;lfp!;QQo!;?Em +!<2uu!<2uu!<)rr!;uls!!*&t!;lfq!;ZZn!!3*"r;Z]q!WN.Ns+13$s,@!Wm/bd$J,~> +!BU8[l083L!<3&qs8;ourrDusr;Zlu!;ulr!;c`l!;ulr!;ZZn!;uls!!*&t!;lfp!;QQo!;?Em +!<2uu!<2uu!<)rr!;uls!!*&t!;lfq!;ZZn!!3*"r;Z]q!WN.Ns+13$s,@!WklK'jJ,~> +!B:&Xj6?RF!<3&qs8;ourrDusr;Zlu!;ulr!;c`l!;ulr!;ZZn!;uls!!*&t!;lfp!;QQo!;?Em +!<2uu!<2uu!<)rr!;uls!!*&t!;lfq!;ZZn!!3*"r;Z]q!WN.Ns+13$s,@!WirR%VJ,~> +!BpJ^mHX]O!<2uu!;uis!<)rt!<)ot!<)rt!;c]q!;QQo!;?Em!;c]q!<)ot!;uls!<)ot!<)ot +!<)ot!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!.k0$s+13/s8MBd +eieN~> +!BU8[l0A9K!<2uu!;uis!<)rt!<)ot!<)rt!;c]q!;QQo!;?Em!;c]q!<)ot!;uls!<)ot!<)ot +!<)ot!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!.k0$s+13/s8M6` +c8pI~> +!B:&Xj6HXE!<2uu!;uis!<)rt!<)ot!<)rt!;c]q!;QQo!;?Em!;c]q!<)ot!;uls!<)ot!<)ot +!<)ot!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)ot!<)rt!.k0$s+13/s8M$Z +_`*)~> +!BpJ^mHX]O!<2uu!<)ot!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!;QQo +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!.k0$s+13/s8MBdeieN~> +!BU8[l0A9K!<2uu!<)ot!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!;QQo +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!.k0$s+13/s8M6`c8pI~> +!B:&Xj6HXE!<2uu!<)ot!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!;QQo +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;lcr!<)ot!;uis!.k0$s+13/s8M$Z_`*)~> +!BpJ^mHacP!;uis!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<)rp +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;6Bk!.k0$s+13,s8MBdeieN~> +!BU8[l0J?L!;uis!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<)rp +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;6Bk!.k0$s+13,s8M6`c8pI~> +!B:&Xj6Q^F!;uis!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<)rp +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!;6Bk!.k0$s+13,s8M$Z_`*)~> +!BpJ^mHafK!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<2uu!;uis +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!:p0i!.k0$s+13.s8MBdeieN~> +!BU8[l0JBG!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<2uu!;uis +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!:p0i!.k0$s+13.s8M6`c8pI~> +!B:&Xj6QaA!<2uu!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr!<)ot!;uis!<2uu!;uis +!;ZWp!:p-i!;lcr!;lcr!<)ot!;lcr!;lcr!;lcr!:p0i!.k0$s+13.s8M$Z_`*)~> +!BpJ^mHjiQ!;c]t!<<'!qu6Wrrr2ruqu6WrqYpNqq#:UEpo)A[iqu6Wrqu6WrrVlitqu6Wrqu6Wrqu6WrpAY*mr;Q`sJcC<$JcC]/rp9a;4b*~> +!BU8[l0SEM!;c]t!<<'!qu6Wrrr2ruqu6WrqYpNqq#:UEpo)A[iqu6Wrqu6WrrVlitqu6Wrqu6Wrqu6WrpAY*mr;Q`sJcC<$JcC]/rojI/3e.~> +!B:&Xj6ZdG!;c]t!<<'!qu6Wrrr2ruqu6WrqYpNqq#:UEpo)A[iqu6Wrqu6WrrVlitqu6Wrqu6Wrqu6WrpAY*mr;Q`sJcC<$JcC]/ro4$s2h1~> +!BpJ^mHjiQ!;c]q!<2uu!<)rt!<)ot!<)rt!;c]q!;QQo!<)ot!;lcr!;c]q!<)ot!;uis!;uis +!<2uu!<)rt!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot!.k0$s+13/ +s8MBdeieN~> +!BU8[l0SEM!;c]q!<2uu!<)rt!<)ot!<)rt!;c]q!;QQo!<)ot!;lcr!;c]q!<)ot!;uis!;uis +!<2uu!<)rt!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot!.k0$s+13/ +s8M6`c8pI~> +!B:&Xj6ZdG!;c]q!<2uu!<)rt!<)ot!<)rt!;c]q!;QQo!<)ot!;lcr!;c]q!<)ot!;uis!;uis +!<2uu!<)rt!;ZWp!:p-i!;c]q!<)ot!;uls!<)ot!;c]q!;c]q!<)rt!<)rt!<)ot!.k0$s+13/ +s8M$Z_`*)~> +!BpJ^mHsrP!<3#s!<3#s!!<0#!<)rr!!<0#!<3#p!;c`o!<)ro!;ulq!;ulr!<3#t!<3#s!!*&u +!<3#p!;HNk!;lfp!;lcs!<;utr;ZTnr;Z]qqu6Zss8;qKs+13$s,6pVm/bd$J,~> +!BU8[l0\NL!<3#s!<3#s!!<0#!<)rr!!<0#!<3#p!;c`o!<)ro!;ulq!;ulr!<3#t!<3#s!!*&u +!<3#p!;HNk!;lfp!;lcs!<;utr;ZTnr;Z]qqu6Zss8;qKs+13$s,6pVklK'jJ,~> +!B:&Xj6cmF!<3#s!<3#s!!<0#!<)rr!!<0#!<3#p!;c`o!<)ro!;ulq!;ulr!<3#t!<3#s!!*&u +!<3#p!;HNk!;lfp!;lcs!<;utr;ZTnr;Z]qqu6Zss8;qKs+13$s,6pVirR%VJ,~> +!BpJ^m=G;srr<%Ms+13$s+143s8MBdeieN~> +!BU8[l%/lorr<%Ms+13$s+143s8M6`c8pI~> +!B:&Xj+76irr<%Ms+13$s+143s8M$Z_`*)~> +!BpJ^m=G;srr<%Ms+13$s+143s8MBdeieN~> +!BU8[l%/lorr<%Ms+13$s+143s8M6`c8pI~> +!B:&Xj+76irr<%Ms+13$s+143s8M$Z_`*)~> +!BpJ^m=G;srr<%Ms+13$s+143s8MBdeieN~> +!BU8[l%/lorr<%Ms+13$s+143s8M6`c8pI~> +!B:&Xj+76irr<%Ms+13$s+143s8M$Z_`*)~> +!BpJ^m=G;ts8;qKs+13$s+145s8MBdeieN~> +!BU8[l%/lps8;qKs+13$s+145s8M6`c8pI~> +!B:&Xj+76js8;qKs+13$s+145s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m@sX\!5AL5!;?Hm!.k0$s+13$s7lWnm/bd$J,~> +!BU8[l(\4X!5AL5!;?Hm!.k0$s+13$s7lWnklK'jJ,~> +!B:&Xj.cSR!5AL5!;?Hm!.k0$s+13$s7lWnirR%VJ,~> +!BpJ^mG7gA!<<)s!7:cG!:9a[!8[\T!;?Hm!.k0$s+13$s7lWnm/bd$J,~> +!BU8[l.uC=!<<)s!7:cG!:9a[!8[\T!;?Hm!.k0$s+13$s7lWnklK'jJ,~> +!B:&Xj5'b7!<<)s!7:cG!:9a[!8[\T!;?Hm!.k0$s+13$s7lWnirR%VJ,~> +!BpJ^mHsrH!<)rr!!*&s!4i.(!8[\T!.k0$s+13$s6K^am/bd$J,~> +!BU8[l0\ND!<)rr!!*&s!4i.(!8[\T!.k0$s+13$s6K^aklK'jJ,~> +!B:&Xj6cm>!<)rr!!*&s!4i.(!8[\T!.k0$s+13$s6K^airR%VJ,~> +!BpJ^mHsrH!;ulr!<3#u!<<)u!<<)t!!*&u!!E6$!<<#ur;Z]qrVufrs8W&urr;lrqZ$Ko!ri6# +q#C?orVult!<<#us8W#ts8W&u!<;utr;Z]q"TJH%s8VlprVucqq>^BnrVuis!<;utr;ZTnJcC<$ +JcD8?rp9a;4b*~> +!BU8[l0\ND!;ulr!<3#u!<<)u!<<)t!!*&u!!E6$!<<#ur;Z]qrVufrs8W&urr;lrqZ$Ko!ri6# +q#C?orVult!<<#us8W#ts8W&u!<;utr;Z]q"TJH%s8VlprVucqq>^BnrVuis!<;utr;ZTnJcC<$ +JcD8?rojI/3e.~> +!B:&Xj6cm>!;ulr!<3#u!<<)u!<<)t!!*&u!!E6$!<<#ur;Z]qrVufrs8W&urr;lrqZ$Ko!ri6# +q#C?orVult!<<#us8W#ts8W&u!<;utr;Z]q"TJH%s8VlprVucqq>^BnrVuis!<;utr;ZTnJcC<$ +JcD8?ro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8;rts8N*!s8E#us8;ots7QHms7lZps7ZNns82los7lZis8N*! +rr`?%!!*&u!<<)t!<<)o!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!.k0$s+13?s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8;rts8N*!s8E#us8;ots7QHms7lZps7ZNns82los7lZis8N*! +rr`?%!!*&u!<<)t!<<)o!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!.k0$s+13?s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8;rts8N*!s8E#us8;ots7QHms7lZps7ZNns82los7lZis8N*! +rr`?%!!*&u!<<)t!<<)o!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!.k0$s+13?s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'&rrE*!!!*#urrE#trrE*!rVururW!'#!!*&u!<)rs!<3#s +!<<*!!;uls!;ulr!<3#t!;QTl!;uls!<)rt!<3#t!<3#u!<<)u!<3#t!<)rt!;?Hm!;ulr!<)rs +!<<)u!<3#u!<3#u!<)rt!.k0$s+13?s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'&rrE*!!!*#urrE#trrE*!rVururW!'#!!*&u!<)rs!<3#s +!<<*!!;uls!;ulr!<3#t!;QTl!;uls!<)rt!<3#t!<3#u!<<)u!<3#t!<)rt!;?Hm!;ulr!<)rs +!<<)u!<3#u!<3#u!<)rt!.k0$s+13?s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'&rrE*!!!*#urrE#trrE*!rVururW!'#!!*&u!<)rs!<3#s +!<<*!!;uls!;ulr!<3#t!;QTl!;uls!<)rt!<3#t!<3#u!<<)u!<3#t!<)rt!;?Hm!;ulr!<)rs +!<<)u!<3#u!<3#u!<)rt!.k0$s+13?s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N'&rr<'!!!*#urrE#trrE*!rrE*!rrE*!rr<-#!!)orrrE&u +rW)]mrrDusrrDusrrDioquHZprrE#trrE&urrE#trrE*!rrDusrrE#trrDcmrrDusrrDrrrrE*! +rrE#trrE&ur;_EKJcC<$R/d0Q!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N'&rr<'!!!*#urrE#trrE*!rrE*!rrE*!rr<-#!!)orrrE&u +rW)]mrrDusrrDusrrDioquHZprrE#trrE&urrE#trrE*!rrDusrrE#trrDcmrrDusrrDrrrrE*! +rrE#trrE&ur;_EKJcC<$R/d0M!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N'&rr<'!!!*#urrE#trrE*!rrE*!rrE*!rr<-#!!)orrrE&u +rW)]mrrDusrrDusrrDioquHZprrE#trrE&urrE#trrE*!rrDusrrE#trrDcmrrDusrrDrrrrE*! +rrE#trrE&ur;_EKJcC<$R/d0G!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N*!rrW9$!!*#urrE#trrE*!rrE*!rrE*!rr<'!pAk3mrrDcm +rrDusrrDThrrE*!!!)rsrrE#trrE&urrE#trrE*!rrDcmrrDcmrrDusrrDrrrrE*!rrE#trrE#t +qZ)3IJcC<$S,`KT!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N*!rrW9$!!*#urrE#trrE*!rrE*!rrE*!rr<'!pAk3mrrDcm +rrDusrrDThrrE*!!!)rsrrE#trrE&urrE#trrE*!rrDcmrrDcmrrDusrrDrrrrE*!rrE#trrE#t +qZ)3IJcC<$S,`KP!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N*!rrW9$!!*#urrE#trrE*!rrE*!rrE*!rr<'!pAk3mrrDcm +rrDusrrDThrrE*!!!)rsrrE#trrE&urrE#trrE*!rrDcmrrDcmrrDusrrDrrrrE*!rrE#trrE#t +qZ)3IJcC<$S,`KJ!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N*!s8;rss8N)ts8N*!s8N*!s8N*!s8N'!s7ZNms8N)ms8N)s +s8N)hs8N)ps8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+13$ +s.',gm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N*!s8;rss8N)ts8N*!s8N*!s8N*!s8N'!s7ZNms8N)ms8N)s +s8N)hs8N)ps8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+13$ +s.',gklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N*!s8;rss8N)ts8N*!s8N*!s8N*!s8N'!s7ZNms8N)ms8N)s +s8N)hs8N)ps8N)ts8N)us8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+13$ +s.',girR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)us8E#ts8N)us8E#us8N*!s8N*!s8N'!s8E#ms8N)ms8N)s +s8E#ss8E#os8N)ps8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#ss8E#us8N)t +s8N)us8N)ts8N(Ms+13$s.',gm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)us8E#ts8N)us8E#us8N*!s8N*!s8N'!s8E#ms8N)ms8N)s +s8E#ss8E#os8N)ps8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#ss8E#us8N)t +s8N)us8N)ts8N(Ms+13$s.',gklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)us8E#ts8N)us8E#us8N*!s8N*!s8N'!s8E#ms8N)ms8N)s +s8E#ss8E#os8N)ps8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#ss8E#us8N)t +s8N)us8N)ts8N(Ms+13$s.',girR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss82iss8E#ts7?9ks8Duus8Duus7lZps7lZns7lZos7cTks7u`n +s7cQos8;rts8;rts7cTns7lZps7lZos7lZps8;rts8;rts7lYGs+13$s.',gm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss82iss8E#ts7?9ks8Duus8Duus7lZps7lZns7lZos7cTks7u`n +s7cQos8;rts8;rts7cTns7lZps7lZos7lZps8;rts8;rts7lYGs+13$s.',gklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss82iss8E#ts7?9ks8Duus8Duus7lZps7lZns7lZos7cTks7u`n +s7cQos8;rts8;rts7cTns7lZps7lZos7lZps8;rts8;rts7lYGs+13$s.',girR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts82lss8N)ts8;ots7u]qs8Duus8E#ts8)frs7lZns7lZns8)fl +s7u`ms8;ots8Duus8;rts8;rss8)fns82lqs7lZms8;rrs8;rts8;rts7u_Hs+13$s-s&fm/bd$ +J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts82lss8N)ts8;ots7u]qs8Duus8E#ts8)frs7lZns7lZns8)fl +s7u`ms8;ots8Duus8;rts8;rss8)fns82lqs7lZms8;rrs8;rts8;rts7u_Hs+13$s-s&fklK'j +J,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts82lss8N)ts8;ots7u]qs8Duus8E#ts8)frs7lZns7lZns8)fl +s7u`ms8;ots8Duus8;rts8;rss8)fns82lqs7lZms8;rrs8;rts8;rts7u_Hs+13$s-s&firR%V +J,~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mC*&o!;lfr!9O7Y!7q2L!.k0$s+13$s6BX`m/bd$J,~> +!BU8[l*gWk!;lfr!9O7Y!7q2L!.k0$s+13$s6BX`klK'jJ,~> +!B:&Xj0o!e!;lfr!9O7Y!7q2L!.k0$s+13$s6BX`irR%VJ,~> +!BpJ^mFqU=!!<0#!9F1Z!;lfr!9O7Y!;HNm!<<)s!:'U`!.k0$s+13$s6BX`m/bd$J,~> +!BU8[l.Z19!!<0#!9F1Z!;lfr!9O7Y!;HNm!<<)s!:'U`!.k0$s+13$s6BX`klK'jJ,~> +!B:&Xj4aP3!!<0#!9F1Z!;lfr!9O7Y!;HNm!<<)s!:'U`!.k0$s+13$s6BX`irR%VJ,~> +!BpJ^mHsrH!;ull!9=+Z!8@JQ!;HNl!!*&s!9sO`!.k0$s+13$s6BX`m/bd$J,~> +!BU8[l0\ND!;ull!9=+Z!8@JQ!;HNl!!*&s!9sO`!.k0$s+13$s6BX`klK'jJ,~> +!B:&Xj6cm>!;ull!9=+Z!8@JQ!;HNl!!*&s!9sO`!.k0$s+13$s6BX`irR%VJ,~> +!BpJ^mHsrH!;uls!<)rs!<3#q!<3#s!<<)u!<)rr!!<0#!<3#r!;ulr!!*&t!;ulo!;c`q!;?Hl +!<3#u!<<)u!<<)t!!*&u!!E6$!<<#urr;uu!<;utqu?TprVufrs8W&urVu]oJcC<$JcCl4rp9a; +4b*~> +!BU8[l0\ND!;uls!<)rs!<3#q!<3#s!<<)u!<)rr!!<0#!<3#r!;ulr!!*&t!;ulo!;c`q!;?Hl +!<3#u!<<)u!<<)t!!*&u!!E6$!<<#urr;uu!<;utqu?TprVufrs8W&urVu]oJcC<$JcCl4rojI/ +3e.~> +!B:&Xj6cm>!;uls!<)rs!<3#q!<3#s!<<)u!<)rr!!<0#!<3#r!;ulr!!*&t!;ulo!;c`q!;?Hl +!<3#u!<<)u!<<)t!!*&u!!E6$!<<#urr;uu!<;utqu?TprVufrs8W&urVu]oJcC<$JcCl4ro4$s +2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N*!s7lZps7ZNns7lZos82lps7cTns7lZls8N)ms8;rt +s8N*!s8E#us8;ots7QHms7lZos7lZps7ZNns7lYGs+13$s,m?\m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N*!s7lZps7ZNns7lZos82lps7cTns7lZls8N)ms8;rt +s8N*!s8E#us8;ots7QHms7lZos7lZps7ZNns7lYGs+13$s,m?\klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N*!s7lZps7ZNns7lZos82lps7cTns7lZls8N)ms8;rt +s8N*!s8E#us8;ots7QHms7lZos7lZps7ZNns7lYGs+13$s,m?\irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)ns8N)ts8N)ts8;rts8N'!s8E#ts8E#qs8N)rs8E#ts8N)u +s8N)ts8N)rs8N)ms8N'&rrE*!!!*#urrE#trrE*!rVururW!*$!!*'!rW)rtrVururW)osrW)rt +r;cltrrE*!rrE#trr@WMJcC<$OoPFJ!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)ns8N)ts8N)ts8;rts8N'!s8E#ts8E#qs8N)rs8E#ts8N)u +s8N)ts8N)rs8N)ms8N'&rrE*!!!*#urrE#trrE*!rVururW!*$!!*'!rW)rtrVururW)osrW)rt +r;cltrrE*!rrE#trr@WMJcC<$OoPFF!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)ns8N)ts8N)ts8;rts8N'!s8E#ts8E#qs8N)rs8E#ts8N)u +s8N)ts8N)rs8N)ms8N'&rrE*!!!*#urrE#trrE*!rVururW!*$!!*'!rW)rtrVururW)osrW)rt +r;cltrrE*!rrE#trr@WMJcC<$OoPF@!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)hs8N)ts8E#qs8N)ss8N)rs8N)rs8N)ts8N)os8N)rs8N)m +s8N'&rr<'!!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<-#!!)orrrE&urW)fpr;_EKJcC<$ +NW9"F!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)hs8N)ts8E#qs8N)ss8N)rs8N)rs8N)ts8N)os8N)rs8N)m +s8N'&rr<'!!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<-#!!)orrrE&urW)fpr;_EKJcC<$ +NW9"B!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)hs8N)ts8E#qs8N)ss8N)rs8N)rs8N)ts8N)os8N)rs8N)m +s8N'&rr<'!!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<-#!!)orrrE&urW)fpr;_EKJcC<$ +NW9" +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)ns7lZns8N)qs8N)ss8N)rs8N)rs8N)ts8N)us7lZls8N)m +s8N*!rrW9$!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<'!pAk3mrrDioqZ)3IJcC<$OT5=I +!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)ns7lZns8N)qs8N)ss8N)rs8N)rs8N)ts8N)us7lZls8N)m +s8N*!rrW9$!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<'!pAk3mrrDioqZ)3IJcC<$OT5=E +!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)ns7lZns8N)qs8N)ss8N)rs8N)rs8N)ts8N)us7lZls8N)m +s8N*!rrW9$!!*#urrE#trrE*!rrE*!rrE*!rrE*!rrDusrr<'!pAk3mrrDioqZ)3IJcC<$OT5=? +!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)os7cTms8N)qs8N)ss8N)rs8N)rs8N)ts8N*!s7cTks8N)m +s8N*!s8;rss8N)ts8N*!s8N*!s8N*!s8N*!s8N)ss8N'!s7ZNms8N)ms82kJs+13$s,m?\m/bd$ +J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)os7cTms8N)qs8N)ss8N)rs8N)rs8N)ts8N*!s7cTks8N)m +s8N*!s8;rss8N)ts8N*!s8N*!s8N*!s8N*!s8N)ss8N'!s7ZNms8N)ms82kJs+13$s,m?\klK'j +J,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)os7cTms8N)qs8N)ss8N)rs8N)rs8N)ts8N*!s7cTks8N)m +s8N*!s8;rss8N)ts8N*!s8N*!s8N*!s8N*!s8N)ss8N'!s7ZNms8N)ms82kJs+13$s,m?\irR%V +J,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'#rr<&ss8N)ts8N)qs8E#ts8E#qs8N)rs8N)ts8N*! +s8N)ss8N)rs8N)ms8N)us8E#ts8N)us8E#us8N*!s8N*!s8N*!s8E#ts8Duus8E#ms8N)ps8N)t +s8N(Ms+13$s,m?\m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'#rr<&ss8N)ts8N)qs8E#ts8E#qs8N)rs8N)ts8N*! +s8N)ss8N)rs8N)ms8N)us8E#ts8N)us8E#us8N*!s8N*!s8N*!s8E#ts8Duus8E#ms8N)ps8N)t +s8N(Ms+13$s,m?\klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'#rr<&ss8N)ts8N)qs8E#ts8E#qs8N)rs8N)ts8N*! +s8N)ss8N)rs8N)ms8N)us8E#ts8N)us8E#us8N*!s8N*!s8N*!s8E#ts8Duus8E#ms8N)ps8N)t +s8N(Ms+13$s,m?\irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7cQos7ZKns7lZns7cTos7lZps8;rts8;ots7ZNns7lZks82is +s8E#ts7?9ks8Duus7HBks7lZps7lZns7lYGs+13$s,m?\m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7cQos7ZKns7lZns7cTos7lZps8;rts8;ots7ZNns7lZks82is +s8E#ts7?9ks8Duus7HBks7lZps7lZns7lYGs+13$s,m?\klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7cQos7ZKns7lZns7cTos7lZps8;rts8;ots7ZNns7lZks82is +s8E#ts7?9ks8Duus7HBks7lZps7lZns7lYGs+13$s,m?\irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&qs82lqs82iss8Duus7lZms8;ots8E#us7lZps8;rts8;rts82is +s8E#us7lZks82lss8N)ts8;ots7u]qs8Duus8)crs8;rps8)frs7lZns7u_Hs+13$s,d9[m/bd$ +J,~> +!BU8[l0\NM!!rT)rrE'!rr<&qs82lqs82iss8Duus7lZms8;ots8E#us7lZps8;rts8;rts82is +s8E#us7lZks82lss8N)ts8;ots7u]qs8Duus8)crs8;rps8)frs7lZns7u_Hs+13$s,d9[klK'j +J,~> +!B:&Xj6cmG!!rT)rrE'!rr<&qs82lqs82iss8Duus7lZms8;ots8E#us7lZps8;rts8;rts82is +s8E#us7lZks82lss8N)ts8;ots7u]qs8Duus8)crs8;rps8)frs7lZns7u_Hs+13$s,d9[irR%V +J,~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mC`Ju!;6Bl!6kKC!9!nV!94%Y!.k0$s+13:s8MBdeieN~> +!BU8[l+I&q!;6Bl!6kKC!9!nV!94%Y!.k0$s+13:s8M6`c8pI~> +!B:&Xj1PEk!;6Bl!6kKC!9!nV!94%Y!.k0$s+13:s8M$Z_`*)~> +!BpJ^mG7gA!;ulr!:0[a!;6Bl!6kKC!9!nV!;ZZj!:p0i!.k0$s+13:s8MBdeieN~> +!BU8[l.uC=!;ulr!:0[a!;6Bl!6kKC!9!nV!;ZZj!:p0i!.k0$s+13:s8M6`c8pI~> +!B:&Xj5'b7!;ulr!:0[a!;6Bl!6kKC!9!nV!;ZZj!:p0i!.k0$s+13:s8M$Z_`*)~> +!BpJ^mHsrH!<)rs!;ulr!:'Ua!1Nrf!;ZZj!:p0i!.k0$s+13:s8MBdeieN~> +!BU8[l0\ND!<)rs!;ulr!:'Ua!1Nrf!;ZZj!:p0i!.k0$s+13:s8M6`c8pI~> +!B:&Xj6cm>!<)rs!;ulr!:'Ua!1Nrf!;ZZj!:p0i!.k0$s+13:s8M$Z_`*)~> +!BpJ^mHsrH!;ulr!<3#t!<3#q!;ulq!!<0#!<3#u!!*&t!<)rq!;ulr!!*&t!;lfp!:^$b!<3#r +!;lfl!;ulq!;lfp!!<0#!;?Hm!;ulr!!*&t!<3#o!;lfp!;lfp!!*&u!<)rr!<)rr!<<)u!<)ro +!.k0$s+14!s8MBdeieN~> +!BU8[l0\ND!;ulr!<3#t!<3#q!;ulq!!<0#!<3#u!!*&t!<)rq!;ulr!!*&t!;lfp!:^$b!<3#r +!;lfl!;ulq!;lfp!!<0#!;?Hm!;ulr!!*&t!<3#o!;lfp!;lfp!!*&u!<)rr!<)rr!<<)u!<)ro +!.k0$s+14!s8M6`c8pI~> +!B:&Xj6cm>!;ulr!<3#t!<3#q!;ulq!!<0#!<3#u!!*&t!<)rq!;ulr!!*&t!;lfp!:^$b!<3#r +!;lfl!;ulq!;lfp!!<0#!;?Hm!;ulr!!*&t!<3#o!;lfp!;lfp!!*&u!<)rr!<)rr!<<)u!<)ro +!.k0$s+14!s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8E#ts8E#us7lZos7lZos7lZos82lps7cTns7lZds7lZos82lo +s7lZos7lZos7lZgs8N)ss7cTos7lZns7lZos7cTos7lZps7ZNns7lYGs+13$s3q#Im/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8E#ts8E#us7lZos7lZos7lZos82lps7cTns7lZds7lZos82lo +s7lZos7lZos7lZgs8N)ss7cTos7lZns7lZos7cTos7lZps7ZNns7lYGs+13$s3q#IklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8E#ts8E#us7lZos7lZos7lZos82lps7cTns7lZds7lZos82lo +s7lZos7lZos7lZgs8N)ss7cTos7lZns7lZos7cTos7lZps7ZNns7lYGs+13$s3q#IirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8;ots8;rts8N)ts8N*!s8E#ts8E#ts8E#ts8N)rs8N)rs8E#t +s8N*!s8E#ss8E#js8N)ts8N)rs8N)rs8N)us8N)us8E#ss8Duus8E#ts8E#ls8N)rs8E#ts8N)t +s8N)qs8E#ss8Duus8E#ts8E#us8E#ss8E#ts8;rts8N*!s8N)ts8N(Ms+13$s3q#Im/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8;ots8;rts8N)ts8N*!s8E#ts8E#ts8E#ts8N)rs8N)rs8E#t +s8N*!s8E#ss8E#js8N)ts8N)rs8N)rs8N)us8N)us8E#ss8Duus8E#ts8E#ls8N)rs8E#ts8N)t +s8N)qs8E#ss8Duus8E#ts8E#us8E#ss8E#ts8;rts8N*!s8N)ts8N(Ms+13$s3q#IklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8;ots8;rts8N)ts8N*!s8E#ts8E#ts8E#ts8N)rs8N)rs8E#t +s8N*!s8E#ss8E#js8N)ts8N)rs8N)rs8N)us8N)us8E#ss8Duus8E#ts8E#ls8N)rs8E#ts8N)t +s8N)qs8E#ss8Duus8E#ts8E#us8E#ss8E#ts8;rts8N*!s8N)ts8N(Ms+13$s3q#IirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7cTis8N*!s8N)ss8N)us8N)ts8N)rs8N)rs8N)ts8N*!s8N)r +s8N*!s7cTos8;rls8N)ns8N)ts8N)rs8N'#rr<&ss8N)ms8N)rs8N)ts8N)ts8N)qs8N)rs8N'# +rr<&ss8N*!s8N)rs8N)us8E#ps8;qKs+13$s3L`Em/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7cTis8N*!s8N)ss8N)us8N)ts8N)rs8N)rs8N)ts8N*!s8N)r +s8N*!s7cTos8;rls8N)ns8N)ts8N)rs8N'#rr<&ss8N)ms8N)rs8N)ts8N)ts8N)qs8N)rs8N'# +rr<&ss8N*!s8N)rs8N)us8E#ps8;qKs+13$s3L`EklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7cTis8N*!s8N)ss8N)us8N)ts8N)rs8N)rs8N)ts8N*!s8N)r +s8N*!s7cTos8;rls8N)ns8N)ts8N)rs8N'#rr<&ss8N)ms8N)rs8N)ts8N)ts8N)qs8N)rs8N'# +rr<&ss8N*!s8N)rs8N)us8E#ps8;qKs+13$s3L`EirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8E!$rr<'!s7lZps8N)ns8N)ts8N)rs8N)rs8N)ts8N*! +s7ZNns7cTns8)fms8N)os8N)ss7ZKprr<&ss8N)ms8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N*! +s7ZNms8N)os8)eIs+13$s3grHm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8E!$rr<'!s7lZps8N)ns8N)ts8N)rs8N)rs8N)ts8N*! +s7ZNns7cTns8)fms8N)os8N)ss7ZKprr<&ss8N)ms8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N*! +s7ZNms8N)os8)eIs+13$s3grHklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8E!$rr<'!s7lZps8N)ns8N)ts8N)rs8N)rs8N)ts8N*! +s7ZNns7cTns8)fms8N)os8N)ss7ZKprr<&ss8N)ms8N)rs8N)ts8N)ts8N)qs7ZKprr<&ss8N*! +s7ZNms8N)os8)eIs+13$s3grHirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N*!rriE&rr<'!p]1?orrDfnrrE#trrDrrrrDrrrrE#trrE*! +pAja`quHWorrDlprrDrrpAb9p!!)rsrrDcmrrDrrrrE#trrE#trrDoqpAb9p!!)rsrrE*!pAk3m +rrDcmquD +!BU8[l0\NN!!`H'rrE'!s8E#rs8N*!rriE&rr<'!p]1?orrDfnrrE#trrDrrrrDrrrrE#trrE*! +pAja`quHWorrDlprrDrrpAb9p!!)rsrrDcmrrDrrrrE#trrE#trrDoqpAb9p!!)rsrrE*!pAk3m +rrDcmquD +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N*!rriE&rr<'!p]1?orrDfnrrE#trrDrrrrDrrrrE#trrE*! +pAja`quHWorrDlprrDrrpAb9p!!)rsrrDcmrrDrrrrE#trrE#trrDoqpAb9p!!)rsrrE*!pAk3m +rrDcmquD +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'#rr<&ss8N*!s8E#ss8E#us8N)ts8N)rs8N)rs8N)t +s8N*!s8E#cs8N)ts8N)rs8N)qs8N)us8N*!s8E#os8E#ts8E#ls8N)rs8N)ts8N)ts8N)ts8N'! +s8E#os8E#ts8E#us8E#ms8N)ps8N)ts8N(Ms+13$s3q#Im/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'#rr<&ss8N*!s8E#ss8E#us8N)ts8N)rs8N)rs8N)t +s8N*!s8E#cs8N)ts8N)rs8N)qs8N)us8N*!s8E#os8E#ts8E#ls8N)rs8N)ts8N)ts8N)ts8N'! +s8E#os8E#ts8E#us8E#ms8N)ps8N)ts8N(Ms+13$s3q#IklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'#rr<&ss8N*!s8E#ss8E#us8N)ts8N)rs8N)rs8N)t +s8N*!s8E#cs8N)ts8N)rs8N)qs8N)us8N*!s8E#os8E#ts8E#ls8N)rs8N)ts8N)ts8N)ts8N'! +s8E#os8E#ts8E#us8E#ms8N)ps8N)ts8N(Ms+13$s3q#IirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss82iss7-0is7cQos8;rts8;rts7lZps8;rts8;rts7lZds7lZo +s7lZos7lZos7lZos7cTjs7lZps8;rts8;rss7lZps7lZos7lZos7lZps7lZns7lYGs+13$s3q#I +m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss82iss7-0is7cQos8;rts8;rts7lZps8;rts8;rts7lZds7lZo +s7lZos7lZos7lZos7cTjs7lZps8;rts8;rss7lZps7lZos7lZos7lZps7lZns7lYGs+13$s3q#I +klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss82iss7-0is7cQos8;rts8;rts7lZps8;rts8;rts7lZds7lZo +s7lZos7lZos7lZos7cTjs7lZps8;rts8;rss7lZps7lZos7lZos7lZps7lZns7lYGs+13$s3q#I +irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts82iss82iss82iss8E#ts8)fqs8;rts8;rts7lZps8;rts8;rr +s8)ffs7u`os7lZos7lZms8)fps8;ots8E#ps7lZps8;rts8;rrs82los8)fps8;p!rr<&ss8)fr +s7lZns7u_Hs+13$s3grHm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts82iss82iss82iss8E#ts8)fqs8;rts8;rts7lZps8;rts8;rr +s8)ffs7u`os7lZos7lZms8)fps8;ots8E#ps7lZps8;rts8;rrs82los8)fps8;p!rr<&ss8)fr +s7lZns7u_Hs+13$s3grHklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts82iss82iss82iss8E#ts8)fqs8;rts8;rts7lZps8;rts8;rr +s8)ffs7u`os7lZos7lZms8)fps8;ots8E#ps7lZps8;rts8;rrs82los8)fps8;p!rr<&ss8)fr +s7lZns7u_Hs+13$s3grHirR%VJ,~> +!BpJ^mHsrH!.k0Ys8N(Ms+13$s0D\(m/bd$J,~> +!BU8[l0\ND!.k0Ys8N(Ms+13$s0D\(klK'jJ,~> +!B:&Xj6cm>!.k0Ys8N(Ms+13$s0D\(irR%VJ,~> +!BpJ^mHsrH!.k0Zs8E"Ls+13$s0D\(m/bd$J,~> +!BU8[l0\ND!.k0Zs8E"Ls+13$s0D\(klK'jJ,~> +!B:&Xj6cm>!.k0Zs8E"Ls+13$s0D\(irR%VJ,~> +!BpJ^m=G;,s8)eIs+13$s0;V'm/bd$J,~> +!BU8[l%/l(s8)eIs+13$s0;V'klK'jJ,~> +!B:&Xj+76"s8)eIs+13$s0;V'irR%VJ,~> +!BpJ^m=G;,s82kJs+13$s02P&m/bd$J,~> +!BU8[l%/l(s82kJs+13$s02P&klK'jJ,~> +!B:&Xj+76"s82kJs+13$s02P&irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G;os82kJs+13$s+14;s8MBdeieN~> +!BU8[l%/lks82kJs+13$s+14;s8M6`c8pI~> +!B:&Xj+76es82kJs+13$s+14;s8M$Z_`*)~> +!BpJ^mG7g +!BU8[l.uC8!6tQC!<<)s!6G3 +!B:&Xj5'b2!6tQC!<<)s!6G3 +!BpJ^mHsrH!<)rm!7(WC!!*&s!6,! +!BU8[l0\ND!<)rm!7(WC!!*&s!6,! +!B:&Xj6cm>!<)rm!7(WC!!*&s!6,! +!BpJ^mHsrH!;uls!<)rs!<)rr!<3#t!!E6$!<<#urVu`prr;rt!<;utq#C +!BU8[l0\ND!;uls!<)rs!<)rr!<3#t!!E6$!<<#urVu`prr;rt!<;utq#C +!B:&Xj6cm>!;uls!<)rs!<)rr!<3#t!!E6$!<<#urVu`prr;rt!<;utq#C +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lWps7QHms7lZps7cTis8;rts8N*!s8E#us8;ot +s7QHms7lZps7ZNns7lZls8N)rs7lYGs+13$s+14Is8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lWps7QHms7lZps7cTis8;rts8N*!s8E#us8;ot +s7QHms7lZps7ZNns7lZls8N)rs7lYGs+13$s+14Is8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lWps7QHms7lZps7cTis8;rts8N*!s8E#us8;ot +s7QHms7lZps7ZNns7lZls8N)rs7lYGs+13$s+14Is8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8Duus8Duus8E!&rr<'!rr<&ts8N)us8E#t +s8N)ps8N'&rrE*!!!*#urrE#trrE*!rVururW!'#!!*&u!<)rs!<3#s!<<*!!<<*!!<)rt!;lfr +!;lfr!<)rt!.k0$s+13$s82iqm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8Duus8Duus8E!&rr<'!rr<&ts8N)us8E#t +s8N)ps8N'&rrE*!!!*#urrE#trrE*!rVururW!'#!!*&u!<)rs!<3#s!<<*!!<<*!!<)rt!;lfr +!;lfr!<)rt!.k0$s+13$s82iqklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8Duus8Duus8E!&rr<'!rr<&ts8N)us8E#t +s8N)ps8N'&rrE*!!!*#urrE#trrE*!rVururW!'#!!*&u!<)rs!<3#s!<<*!!<<*!!<)rt!;lfr +!;lfr!<)rt!.k0$s+13$s82iqirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZps8N)rs8N'+rr<'!rr<'!rr<&ps8N)us8N)ts8N)ps8N'& +rr<'!!!*#urrE#trrE*!rrE*!rrE*!rr<-#!!)orrrE&urW)TjrrDrrrrDrrr;_EKJcC<$JcGKE +rp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZps8N)rs8N'+rr<'!rr<'!rr<&ps8N)us8N)ts8N)ps8N'& +rr<'!!!*#urrE#trrE*!rrE*!rrE*!rr<-#!!)orrrE&urW)TjrrDrrrrDrrr;_EKJcC<$JcGKE +rojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZps8N)rs8N'+rr<'!rr<'!rr<&ps8N)us8N)ts8N)ps8N'& +rr<'!!!*#urrE#trrE*!rrE*!rrE*!rr<-#!!)orrrE&urW)TjrrDrrrrDrrr;_EKJcC<$JcGKE +ro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7u`ps8N)rs8N'-rr<'!rr<'!rr<'!s7lZos8N)ts8N)ps8N*! +rrW9$!!*#urrE#trrE*!rrE*!rrE*!rr<'!pAk3mrrDlpq#L +!BU8[l0\NM!!rT)rrE'!rr<&ss7u`ps8N)rs8N'-rr<'!rr<'!rr<'!s7lZos8N)ts8N)ps8N*! +rrW9$!!*#urrE#trrE*!rrE*!rrE*!rr<'!pAk3mrrDlpq#L +!B:&Xj6cmG!!rT)rrE'!rr<&ss7u`ps8N)rs8N'-rr<'!rr<'!rr<'!s7lZos8N)ts8N)ps8N*! +rrW9$!!*#urrE#trrE*!rrE*!rrE*!rr<'!pAk3mrrDlpq#L +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)us8E#us8N)rs8N',rr<'!rr<'!rr<'!p]1 +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)us8E#us8N)rs8N',rr<'!rr<'!rr<'!p]1 +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)us8E#us8N)rs8N',rr<'!rr<'!rr<'!p]1 +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E!-rr<'!rr<'!rr<'!!!)rsrrE&urrE#t +rrDlprrE&urW)rtrrE&urW)uurrE*!rrE*!rr<'!rW)]mrrDoqrrDusrrDrrrrDrrrrE#trr@WM +JcC<$JcGWIrp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E!-rr<'!rr<'!rr<'!!!)rsrrE&urrE#t +rrDlprrE&urW)rtrrE&urW)uurrE*!rrE*!rr<'!rW)]mrrDoqrrDusrrDrrrrDrrrrE#trr@WM +JcC<$JcGWIrojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E!-rr<'!rr<'!rr<'!!!)rsrrE&urrE#t +rrDlprrE&urW)rtrrE&urW)uurrE*!rrE*!rr<'!rW)]mrrDoqrrDusrrDrrrrDrrrrE#trr@WM +JcC<$JcGWIro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8)frs8Duus7lWps8;ots8Duus7?9ks8;rts8;rps82iss8E#t +s7?9ks8Duus8Duus7lZps7lZos7ZNns7lZos7lYGs+13$s+14Is8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8)frs8Duus7lWps8;ots8Duus7?9ks8;rts8;rps82iss8E#t +s7?9ks8Duus8Duus7lZps7lZos7ZNns7lZos7lYGs+13$s+14Is8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8)frs8Duus7lWps8;ots8Duus7?9ks8;rts8;rps82iss8E#t +s7?9ks8Duus8Duus7lZps7lZos7ZNns7lZos7lYGs+13$s+14Is8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8)frs8E#ts8;rss8;ots8Duus8Duus82iss8Duus8;rts8;rp +s82lss8N)ts8;ots7u]qs8Duus8E#ts8)frs7lZns82iss8E#us7lZos7u_Hs+13$s+14Hs8MBd +eieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8)frs8E#ts8;rss8;ots8Duus8Duus82iss8Duus8;rts8;rp +s82lss8N)ts8;ots7u]qs8Duus8E#ts8)frs7lZns82iss8E#us7lZos7u_Hs+13$s+14Hs8M6` +c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8)frs8E#ts8;rss8;ots8Duus8Duus82iss8Duus8;rts8;rp +s82lss8N)ts8;ots7u]qs8Duus8E#ts8)frs7lZns82iss8E#us7lZos7u_Hs+13$s+14Hs8M$Z +_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mCN>t!;?Hm!7h,K!6kKC!;?Hm!.k0$s+131s8MBdeieN~> +!BU8[l+6op!;?Hm!7h,K!6kKC!;?Hm!.k0$s+131s8M6`c8pI~> +!B:&Xj1>9j!;?Hm!7h,K!6kKC!;?Hm!.k0$s+131s8M$Z_`*)~> +!BpJ^mFqU=!!<0#!9jI_!;?Hm!7h,K!;c`i!8[\T!;?Hm!.k0$s+131s8MBdeieN~> +!BU8[l.Z19!!<0#!9jI_!;?Hm!7h,K!;c`i!8[\T!;?Hm!.k0$s+131s8M6`c8pI~> +!B:&Xj4aP3!!<0#!9jI_!;?Hm!7h,K!;c`i!8[\T!;?Hm!.k0$s+131s8M$Z_`*)~> +!BpJ^mHsrH!;ull!9jI_!6>->!;c`i!8[\T!.k0$s+13$s8MBdeieN~> +!BU8[l0\ND!;ull!9jI_!6>->!;c`i!8[\T!.k0$s+13$s8M6`c8pI~> +!B:&Xj6cm>!;ull!9jI_!6>->!;c`i!8[\T!.k0$s+13$s8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rs!<)rr!<)rs!!*&t!<3#o!<)rq!;ulr!!*&t!<3#t!<<)t!;ulq!;lfp +!!<0#!;QTo!<)rt!!*&t!<<)u!<)rp!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!.k0$ +s+13Us8MBdeieN~> +!BU8[l0\ND!;uls!<)rs!<)rr!<)rs!!*&t!<3#o!<)rq!;ulr!!*&t!<3#t!<<)t!;ulq!;lfp +!!<0#!;QTo!<)rt!!*&t!<<)u!<)rp!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!.k0$ +s+13Us8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rs!<)rr!<)rs!!*&t!<3#o!<)rq!;ulr!!*&t!<3#t!<<)t!;ulq!;lfp +!!<0#!;QTo!<)rt!!*&t!<<)u!<)rp!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!.k0$ +s+13Us8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N*!s7lZps7cTos7lZns82lps7cTos8E#us8;rss7lZo +s7lZis8N*!rr`?%!!*&n!<<)p!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!.k0$s+13Us8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N*!s7lZps7cTos7lZns82lps7cTos8E#us8;rss7lZo +s7lZis8N*!rr`?%!!*&n!<<)p!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!.k0$s+13Us8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N*!s7lZps7cTos7lZns82lps7cTos8E#us8;rss7lZo +s7lZis8N*!rr`?%!!*&n!<<)p!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!.k0$s+13Us8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)os8E#ss8E#us8E#ts8N)ts8N)ms8N)rs8E#ts8N)us8N)t +s8N*!s8E#ss8Duus8E#ts8E#ns82los8;rts8N*!s8N)ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#s +s8E#us8E#ts8N)us8N)ts8N(Ms+13$s0D\(m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)os8E#ss8E#us8E#ts8N)ts8N)ms8N)rs8E#ts8N)us8N)t +s8N*!s8E#ss8Duus8E#ts8E#ns82los8;rts8N*!s8N)ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#s +s8E#us8E#ts8N)us8N)ts8N(Ms+13$s0D\(klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)os8E#ss8E#us8E#ts8N)ts8N)ms8N)rs8E#ts8N)us8N)t +s8N*!s8E#ss8Duus8E#ts8E#ns82los8;rts8N*!s8N)ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#s +s8E#us8E#ts8N)us8N)ts8N(Ms+13$s0D\(irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)os8N)rs8N*!s8N)ts8N)ts8N)ms8N)rs8N)ts8N)us8N)t +s8N*!s8N)rs8N'#rr<&ss8N)os82los8E#js8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)t +s8N)us8;qKs+13$s/uD$m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)os8N)rs8N*!s8N)ts8N)ts8N)ms8N)rs8N)ts8N)us8N)t +s8N*!s8N)rs8N'#rr<&ss8N)os82los8E#js8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)t +s8N)us8;qKs+13$s/uD$klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)os8N)rs8N*!s8N)ts8N)ts8N)ms8N)rs8N)ts8N)us8N)t +s8N*!s8N)rs8N'#rr<&ss8N)os82los8E#js8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)t +s8N)us8;qKs+13$s/uD$irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)os8N)rs8N*!s8N)ts8N)ts8N)ms8N)rs8N)ts8N)us8N)t +s8N*!s7ZKprr<&ss8N)os8N*!rr<&rs8N)ps7lZps8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)t +s8)eIs+13$s0;V'm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)os8N)rs8N*!s8N)ts8N)ts8N)ms8N)rs8N)ts8N)us8N)t +s8N*!s7ZKprr<&ss8N)os8N*!rr<&rs8N)ps7lZps8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)t +s8)eIs+13$s0;V'klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)os8N)rs8N*!s8N)ts8N)ts8N)ms8N)rs8N)ts8N)us8N)t +s8N*!s7ZKprr<&ss8N)os8N*!rr<&rs8N)ps7lZps8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)t +s8)eIs+13$s0;V'irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)os8N)rs8N*!s8N)ts8N)ts8N)ms8N)rs8N)ts8N)us8N)t +s8N*!s7ZKprr<&ss8N)os8N)os8N)qs7cTos8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82kJ +s+13$s0D\(m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)os8N)rs8N*!s8N)ts8N)ts8N)ms8N)rs8N)ts8N)us8N)t +s8N*!s7ZKprr<&ss8N)os8N)os8N)qs7cTos8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82kJ +s+13$s0D\(klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)os8N)rs8N*!s8N)ts8N)ts8N)ms8N)rs8N)ts8N)us8N)t +s8N*!s7ZKprr<&ss8N)os8N)os8N)qs7cTos8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82kJ +s+13$s0D\(irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#us8N)ts8N)ts8N)ts8N)ss8N)rs8N)t +s8N)us8N)us8E#us8E#os8E#ts8E#ns8N)os8N)qs8N)ss8N*!s8E#ss8E#ts8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13$s0D\(m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#us8N)ts8N)ts8N)ts8N)ss8N)rs8N)t +s8N)us8N)us8E#us8E#os8E#ts8E#ns8N)os8N)qs8N)ss8N*!s8E#ss8E#ts8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13$s0D\(klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N'!s8E#ss8E#us8N)ts8N)ts8N)ts8N)ss8N)rs8N)t +s8N)us8N)us8E#us8E#os8E#ts8E#ns8N)os8N)qs8N)ss8N*!s8E#ss8E#ts8N)ts8N)ss8N)s +s8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13$s0D\(irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7cTos7lZps8;rts8;rss7lZps7lZps8;rts8;rts7cTos7lZo +s7cTks7u`os7lZos7ZNns7cTns7lZps7lZos7lZps8;rts8;rts7lYGs+13$s0D\(m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7cTos7lZps8;rts8;rss7lZps7lZps8;rts8;rts7cTos7lZo +s7cTks7u`os7lZos7ZNns7cTns7lZps7lZos7lZps8;rts8;rts7lYGs+13$s0D\(klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7cTos7lZps8;rts8;rss7lZps7lZps8;rts8;rts7cTos7lZo +s7cTks7u`os7lZos7ZNns7cTns7lZps7lZos7lZps8;rts8;rts7lYGs+13$s0D\(irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&qs82los8;rrs8;rts8;rrs82lqs7lZps8;rts8;rss8;ots8E#s +s8)fps8;ots8E#qs7u`os7lZns82iss8E#ts8)fns82lqs7lZms8;rrs8;rts8;rts7u_Hs+13$ +s0;V'm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&qs82los8;rrs8;rts8;rrs82lqs7lZps8;rts8;rss8;ots8E#s +s8)fps8;ots8E#qs7u`os7lZns82iss8E#ts8)fns82lqs7lZms8;rrs8;rts8;rts7u_Hs+13$ +s0;V'klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&qs82los8;rrs8;rts8;rrs82lqs7lZps8;rts8;rss8;ots8E#s +s8)fps8;ots8E#qs7u`os7lZns82iss8E#ts8)fns82lqs7lZms8;rrs8;rts8;rts7u_Hs+13$ +s0;V'irR%VJ,~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mCN>t!;?Hm!:^$d!6P9@!;?Hm!.k0$s+13$s7lWnm/bd$J,~> +!BU8[l+6op!;?Hm!:^$d!6P9@!;?Hm!.k0$s+13$s7lWnklK'jJ,~> +!B:&Xj1>9j!;?Hm!:^$d!6P9@!;?Hm!.k0$s+13$s7lWnirR%VJ,~> +!BpJ^mG7g +!BU8[l.uC8!9X=]!;?Hm!:^$d!;HNf!8[\T!;?Hm!.k0$s+13$s7lWnklK'jJ,~> +!B:&Xj5'b2!9X=]!;?Hm!:^$d!;HNf!8[\T!;?Hm!.k0$s+13$s7lWnirR%VJ,~> +!BpJ^mHsrH!<)rm!9aC^!9!nW!;HNf!8[\T!.k0$s+13$s6K^am/bd$J,~> +!BU8[l0\ND!<)rm!9aC^!9!nW!;HNf!8[\T!.k0$s+13$s6K^aklK'jJ,~> +!B:&Xj6cm>!<)rm!9aC^!9!nW!;HNf!8[\T!.k0$s+13$s6K^airR%VJ,~> +!BpJ^mHsrH!;uls!<)rs!<3#q!<3#s!<<)u!<<)p!<)rq!;c`m!;c`q!;6Bl!<)rt!!*&t!<<)u +!<)rp!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!.k0$s+13?s8MBdeieN~> +!BU8[l0\ND!;uls!<)rs!<3#q!<3#s!<<)u!<<)p!<)rq!;c`m!;c`q!;6Bl!<)rt!!*&t!<<)u +!<)rp!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!.k0$s+13?s8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rs!<3#q!<3#s!<<)u!<<)p!<)rq!;c`m!;c`q!;6Bl!<)rt!!*&t!<<)u +!<)rp!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!.k0$s+13?s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7ZKns7lZns82los7lZls8N)ls8N*!rr`?% +!!*&n!<<)p!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!.k0$s+13?s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7ZKns7lZns82los7lZls8N)ls8N*!rr`?% +!!*&n!<<)p!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!.k0$s+13?s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7ZKns7lZns82los7lZls8N)ls8N*!rr`?% +!!*&n!<<)p!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!.k0$s+13?s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8E#us8N)ts8N)ts8;rts8N)us8N)ms8N)rs8N)ts8N)r +s8N)ls82los8;rts8N*!s8N)ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)t +s8N(Ms+13$s.',gm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8E#us8N)ts8N)ts8;rts8N)us8N)ms8N)rs8N)ts8N)r +s8N)ls82los8;rts8N*!s8N)ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)t +s8N(Ms+13$s.',gklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8E#us8N)ts8N)ts8;rts8N)us8N)ms8N)rs8N)ts8N)r +s8N)ls82los8;rts8N*!s8N)ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)t +s8N(Ms+13$s.',girR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZis8N)ts8E#os8N)ms8N)ls8N)rs8N)ls82los8E#js8N*! +s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+13$s-Wicm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZis8N)ts8E#os8N)ms8N)ls8N)rs8N)ls82los8E#js8N*! +s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+13$s-WicklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZis8N)ts8E#os8N)ms8N)ls8N)rs8N)ls82los8E#js8N*! +s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+13$s-WicirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7u`os7lZns8N)os8N)ms8N)rs7lZls8N)ls8N*!rr<&rs8N)p +s7lZps8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)eIs+13$s-s&fm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss7u`os7lZns8N)os8N)ms8N)rs7lZls8N)ls8N*!rr<&rs8N)p +s7lZps8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)eIs+13$s-s&fklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss7u`os7lZns8N)os8N)ms8N)rs7lZls8N)ls8N*!rr<&rs8N)p +s7lZps8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)eIs+13$s-s&firR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ps7cTms8N)os8N)ms8N)ss7cTks8N)ls8N)os8N)qs7cTo +s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+13$s.',gm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ps7cTms8N)os8N)ms8N)ss7cTks8N)ls8N)os8N)qs7cTo +s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+13$s.',gklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ps7cTms8N)os8N)ms8N)ss7cTks8N)ls8N)os8N)qs7cTo +s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+13$s.',girR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ps8N)ss8N)ts8N)os8N)ts8N)ss8N)ss8N)ss8N)rs8N)l +s8N)os8N)qs8N)ss8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(M +s+13$s.',gm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ps8N)ss8N)ts8N)os8N)ts8N)ss8N)ss8N)ss8N)rs8N)l +s8N)os8N)qs8N)ss8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(M +s+13$s.',gklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ps8N)ss8N)ts8N)os8N)ts8N)ss8N)ss8N)ss8N)rs8N)l +s8N)os8N)qs8N)ss8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(M +s+13$s.',girR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8)fos7ZKns7lZms7lZps7lZps7ZNns7lZks7u`os7lZos7ZNn +s7cTns7lZps7lZos7lZps8;rts8;rts7lYGs+13$s.',gm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8)fos7ZKns7lZms7lZps7lZps7ZNns7lZks7u`os7lZos7ZNn +s7cTns7lZps7lZos7lZps8;rts8;rts7lYGs+13$s.',gklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8)fos7ZKns7lZms7lZps7lZps7ZNns7lZks7u`os7lZos7ZNn +s7cTns7lZps7lZos7lZps8;rts8;rts7lYGs+13$s.',girR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8)fns82iss8Duus7lZls82lqs7lZos82iss8E#us7lZks7u`o +s7lZns82iss8E#ts8)fns82lqs7lZms8;rrs8;rts8;rts7u_Hs+13$s-s&fm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8)fns82iss8Duus7lZls82lqs7lZos82iss8E#us7lZks7u`o +s7lZns82iss8E#ts8)fns82lqs7lZms8;rrs8;rts8;rts7u_Hs+13$s-s&fklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8)fns82iss8Duus7lZls82lqs7lZos82iss8E#us7lZks7u`o +s7lZns82iss8E#ts8)fns82lqs7lZms8;rrs8;rts8;rts7u_Hs+13$s-s&firR%VJ,~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mCN>t!7h,L!.k0$s+13$s1JC2m/bd$J,~> +!BU8[l+6op!7h,L!.k0$s+13$s1JC2klK'jJ,~> +!B:&Xj1>9j!7h,L!.k0$s+13$s1JC2irR%VJ,~> +!BpJ^mFqU=!9O7\!7h,L!.k0$s+13$s1JC2m/bd$J,~> +!BU8[l.Z19!9O7\!7h,L!.k0$s+13$s1JC2klK'jJ,~> +!B:&Xj4aP3!9O7\!7h,L!.k0$s+13$s1JC2irR%VJ,~> +!BpJ^mHsrH!;ulm!9aC^!.k0$s+13$s,R-Ym/bd$J,~> +!BU8[l0\ND!;ulm!9aC^!.k0$s+13$s,R-YklK'jJ,~> +!B:&Xj6cm>!;ulm!9aC^!.k0$s+13$s,R-YirR%VJ,~> +!BpJ^mHsrH!;uls!<)rt!<<)u!<<)t!<)rp!<3#o!;lfp!<)rr!<<)u!<<)u!!*&t!<)rq!;ZZn +!<)rs!!*&t!;uln!.k0$s+13$s5 +!BU8[l0\ND!;uls!<)rt!<<)u!<<)t!<)rp!<3#o!;lfp!<)rr!<<)u!<<)u!!*&t!<)rq!;ZZn +!<)rs!!*&t!;uln!.k0$s+13$s5 +!B:&Xj6cm>!;uls!<)rt!<<)u!<<)t!<)rp!<3#o!;lfp!<)rr!<<)u!<<)u!!*&t!<)rq!;ZZn +!<)rs!!*&t!;uln!.k0$s+13$s5 +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N'!s8E#us8;rss7lZps7lZns7lZps7ZKns7cTns82lo +s7lZps7cTns7lYGs+13$s+14.s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N'!s8E#us8;rss7lZps7lZns7lZps7ZKns7cTns82lo +s7lZps7cTns7lYGs+13$s+14.s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N'!s8E#us8;rss7lZps7lZns7lZps7ZKns7cTns82lo +s7lZps7cTns7lYGs+13$s+14.s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)rs8N*!s8N)ts8N)us8N)ts8N)ts8N)qs8E#ss8E#ts8;rt +s8N*!s8E#ts8N)rs8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N(Ms+13$s+14.s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)rs8N*!s8N)ts8N)us8N)ts8N)ts8N)qs8E#ss8E#ts8;rt +s8N*!s8E#ts8N)rs8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N(Ms+13$s+14.s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)rs8N*!s8N)ts8N)us8N)ts8N)ts8N)qs8E#ss8E#ts8;rt +s8N*!s8E#ts8N)rs8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N(Ms+13$s+14.s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ts8N)os8N)ts8N)qs8N)rs8N)us8E#ps8N)t +s8N)rs8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+13$s+14*s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ts8N)os8N)ts8N)qs8N)rs8N)us8E#ps8N)t +s8N)rs8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+13$s+14*s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ts8N)os8N)ts8N)qs8N)rs8N)us8E#ps8N)t +s8N)rs8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+13$s+14*s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)rs8N*!s8N)ts8N)us7lZns8N)qs7ZNms8N)ps8N)ts8N)r +s8N)ss8N)rs8N*!s8N)ts8N)ts8)eIs+13$s+14-s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)rs8N*!s8N)ts8N)us7lZns8N)qs7ZNms8N)ps8N)ts8N)r +s8N)ss8N)rs8N*!s8N)ts8N)ts8)eIs+13$s+14-s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)rs8N*!s8N)ts8N)us7lZns8N)qs7ZNms8N)ps8N)ts8N)r +s8N)ss8N)rs8N*!s8N)ts8N)ts8)eIs+13$s+14-s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ts8N*!s7cTms8N)qs7ZNms8N)ps8N)ts8N)r +s8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+13$s+14.s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ts8N*!s7cTms8N)qs7ZNms8N)ps8N)ts8N)r +s8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+13$s+14.s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N*!s8N)ts8N*!s7cTms8N)qs7ZNms8N)ps8N)ts8N)r +s8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+13$s+14.s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8N)us8N)us8E#us8N)ss8N)ts8N)ts8N'!s8E#ms8N)p +s8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13$s+14.s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8N)us8N)us8E#us8N)ss8N)ts8N)ts8N'!s8E#ms8N)p +s8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13$s+14.s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8N)us8N)us8E#us8N)ss8N)ts8N)ts8N'!s8E#ms8N)p +s8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13$s+14.s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7cQos7ZNms7lZps7lZps7lZos8;rts8;rts7lZos7lZp +s8;rts8;rts7lYGs+13$s+14.s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7cQos7ZNms7lZps7lZps7lZos8;rts8;rts7lZos7lZp +s8;rts8;rts7lYGs+13$s+14.s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7cQos7ZNms7lZps7lZps7lZos8;rts8;rts7lZos7lZp +s8;rts8;rts7lYGs+13$s+14.s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&qs8;rtrr<&us8;ots8E#us82iss8E#ss82los8)frs7lZos8;rt +s8;rts7lZms8;rrs8;rts8;rts7u_Hs+13$s+14-s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&qs8;rtrr<&us8;ots8E#us82iss8E#ss82los8)frs7lZos8;rt +s8;rts7lZms8;rrs8;rts8;rts7u_Hs+13$s+14-s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&qs8;rtrr<&us8;ots8E#us82iss8E#ss82los8)frs7lZos8;rt +s8;rts7lZms8;rrs8;rts8;rts7u_Hs+13$s+14-s8M$Z_`*)~> +!BpJ^mHsrH!;lfl!.k0$s+13$s+14As8MBdeieN~> +!BU8[l0\ND!;lfl!.k0$s+13$s+14As8M6`c8pI~> +!B:&Xj6cm>!;lfl!.k0$s+13$s+14As8M$Z_`*)~> +!BpJ^mHsrH!;lfr!<<)u!.k0$s+13$s+14@s8MBdeieN~> +!BU8[l0\ND!;lfr!<<)u!.k0$s+13$s+14@s8M6`c8pI~> +!B:&Xj6cm>!;lfr!<<)u!.k0$s+13$s+14@s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mD],*!9!nW!.k0$s+13$s/,hqm/bd$J,~> +!BU8[l,E]&!9!nW!.k0$s+13$s/,hqklK'jJ,~> +!B:&Xj2M&u!9!nW!.k0$s+13$s/,hqirR%VJ,~> +!BpJ^mFqU=!:^$g!9!nW!.k0$s+13$s/,hqm/bd$J,~> +!BU8[l.Z19!:^$g!9!nW!.k0$s+13$s/,hqklK'jJ,~> +!B:&Xj4aP3!:^$g!9!nW!.k0$s+13$s/,hqirR%VJ,~> +!BpJ^mHsrH!;ulm!:p0i!.k0$s+13$s+C@Nm/bd$J,~> +!BU8[l0\ND!;ulm!:p0i!.k0$s+13$s+C@NklK'jJ,~> +!B:&Xj6cm>!;ulm!:p0i!.k0$s+13$s+C@NirR%VJ,~> +!BpJ^mHsrH!;uls!<)rt!<)rr!!N<%!<<)p!;lfp!<)rs!!*&t!<)rq!;ZZn!<)rs!!*&t!;uln +!.k0$s+13$s2tB@m/bd$J,~> +!BU8[l0\ND!;uls!<)rt!<)rr!!N<%!<<)p!;lfp!<)rs!!*&t!<)rq!;ZZn!<)rs!!*&t!;uln +!.k0$s+13$s2tB@klK'jJ,~> +!B:&Xj6cm>!;uls!<)rt!<)rr!!N<%!<<)p!;lfp!<)rs!!*&t!<)rq!;ZZn!<)rs!!*&t!;uln +!.k0$s+13$s2tB@irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N*!s7lZps7lZns7lZps7cTns82los7lZps7cTns7lYG +s+13$s+13ms8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N*!s7lZps7lZns7lZps7cTns82los7lZps7cTns7lYG +s+13$s+13ms8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N*!s7lZps7lZns7lZps7cTns82los7lZps7cTns7lYG +s+13$s+13ms8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)rs8N'!s8E#ts8E#ss8N)qs8E#ss8E#us8E#ts8N)rs8N)s +s8E#ss8E#us8E#ts8N)us8N)ts8N(Ms+13$s+13ms8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)rs8N'!s8E#ts8E#ss8N)qs8E#ss8E#us8E#ts8N)rs8N)s +s8E#ss8E#us8E#ts8N)us8N)ts8N(Ms+13$s+13ms8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)rs8N'!s8E#ts8E#ss8N)qs8E#ss8E#us8E#ts8N)rs8N)s +s8E#ss8E#us8E#ts8N)us8N)ts8N(Ms+13$s+13ms8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N'#rr<&ss8N)ts8N)qs8N)rs8N*!s8N)ts8N)rs8N)s +s8N)rs8N*!s8N)ts8N)us8;qKs+13$s+13is8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N'#rr<&ss8N)ts8N)qs8N)rs8N*!s8N)ts8N)rs8N)s +s8N)rs8N*!s8N)ts8N)us8;qKs+13$s+13is8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N'#rr<&ss8N)ts8N)qs8N)rs8N*!s8N)ts8N)rs8N)s +s8N)rs8N*!s8N)ts8N)us8;qKs+13$s+13is8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)rs8N'#rr<&ms8N)qs8N)rs8N*!s8N)ts8N)rs8N)ss8N)r +s8N*!s8N)ts8N)ts8)eIs+13$s+13ls8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)rs8N'#rr<&ms8N)qs8N)rs8N*!s8N)ts8N)rs8N)ss8N)r +s8N*!s8N)ts8N)ts8)eIs+13$s+13ls8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)rs8N'#rr<&ms8N)qs8N)rs8N*!s8N)ts8N)rs8N)ss8N)r +s8N*!s8N)ts8N)ts8)eIs+13$s+13ls8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N'#rr<&ms8N)qs8N)rs8N*!s8N)ts8N)rs8N)ss8N)r +s8N*!s8N)ts8N)rs82kJs+13$s+13ms8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N'#rr<&ms8N)qs8N)rs8N*!s8N)ts8N)rs8N)ss8N)r +s8N*!s8N)ts8N)rs82kJs+13$s+13ms8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N'#rr<&ms8N)qs8N)rs8N*!s8N)ts8N)rs8N)ss8N)r +s8N*!s8N)ts8N)rs82kJs+13$s+13ms8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ss8E#ts8N)ts8N'!s8E#ss8E#us8N)ts8N)r +s8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13$s+13ms8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ss8E#ts8N)ts8N'!s8E#ss8E#us8N)ts8N)r +s8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13$s+13ms8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8N*!s8E#ss8E#ts8N)ts8N'!s8E#ss8E#us8N)ts8N)r +s8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13$s+13ms8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7cTns7lZps7lZps8;rts8;rts7lZos7lZps8;rts8;rt +s7lYGs+13$s+13ms8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7cTns7lZps7lZps8;rts8;rts7lZos7lZps8;rts8;rt +s7lYGs+13$s+13ms8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7cTns7lZps7lZps8;rts8;rts7lZos7lZps8;rts8;rt +s7lYGs+13$s+13ms8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&qs8;rps8)fns82los8;rrs8;rts8;rts7lZms8;rrs8;rts8;rt +s7u_Hs+13$s+13ls8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&qs8;rps8)fns82los8;rrs8;rts8;rts7lZms8;rrs8;rts8;rt +s7u_Hs+13$s+13ls8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&qs8;rps8)fns82los8;rrs8;rts8;rts7lZms8;rrs8;rts8;rt +s7u_Hs+13$s+13ls8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mA0d^!;?Hm!5/@3!9O7Y!.k0$s+13 +!BU8[l(n@Z!;?Hm!5/@3!9O7Y!.k0$s+13 +!B:&Xj.u_T!;?Hm!5/@3!9O7Y!.k0$s+13 +!BpJ^mG7g +!BU8[l.uC8!7:cG!;?Hm!9*tS!9=+Z!9O7Y!.k0$s+13 +!B:&Xj5'b2!7:cG!;?Hm!9*tS!9=+Z!9O7Y!.k0$s+13 +!BpJ^mHsrH!<)rm!7CiH!7_&D!6"p;!.k0$s+13 +!BU8[l0\ND!<)rm!7CiH!7_&D!6"p;!.k0$s+13 +!B:&Xj6cm>!<)rm!7CiH!7_&D!6"p;!.k0$s+13 +!BpJ^mHsrH!;uls!<)rs!<)rr!<)rs!!*&t!;lfp!;lfn!<3#o!<)rq!;ulr!!*&t!;ulq!!*&u +!;c`q!<)rt!;ulq!;lfp!!<0#!<3#r!<)rs!!E6$!<<#urVu`pqZ$QqqZ$BlJcC<$JcDYJrp9a; +4b*~> +!BU8[l0\ND!;uls!<)rs!<)rr!<)rs!!*&t!;lfp!;lfn!<3#o!<)rq!;ulr!!*&t!;ulq!!*&u +!;c`q!<)rt!;ulq!;lfp!!<0#!<3#r!<)rs!!E6$!<<#urVu`pqZ$QqqZ$BlJcC<$JcDYJrojI/ +3e.~> +!B:&Xj6cm>!;uls!<)rs!<)rr!<)rs!!*&t!;lfp!;lfn!<3#o!<)rq!;ulr!!*&t!;ulq!!*&u +!;c`q!<)rt!;ulq!;lfp!!<0#!<3#r!<)rs!!E6$!<<#urVu`pqZ$QqqZ$BlJcC<$JcDYJro4$s +2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7cTns7lZos7lZps7lZns82lps7cTns7cTj +s8N)ss8N*!s7lZos7lZos82lqs7QHms7lZls8N)rs7lYGs+13$s/5nrm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7cTns7lZos7lZps7lZns82lps7cTns7cTj +s8N)ss8N*!s7lZos7lZos82lqs7QHms7lZls8N)rs7lYGs+13$s/5nrklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7cTns7lZos7lZps7lZns82lps7cTns7cTj +s8N)ss8N*!s7lZos7lZos82lqs7QHms7lZls8N)rs7lYGs+13$s/5nrirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E#us8E#ts8Duus8E#ss8E#us8N)ts8N)t +s8N)ms8N)rs8E#ts8N*!s8E#ts8E#os8N)ss8N'!s8E#ss8Duus8E#ts8E#qs8N)ss8Duus8E!& +rr<'!rr<&ts8N)rs8N)rs8N)ts8N(Ms+13$s/5nrm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E#us8E#ts8Duus8E#ss8E#us8N)ts8N)t +s8N)ms8N)rs8E#ts8N*!s8E#ts8E#os8N)ss8N'!s8E#ss8Duus8E#ts8E#qs8N)ss8Duus8E!& +rr<'!rr<&ts8N)rs8N)rs8N)ts8N(Ms+13$s/5nrklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E#us8E#ts8Duus8E#ss8E#us8N)ts8N)t +s8N)ms8N)rs8E#ts8N*!s8E#ts8E#os8N)ss8N'!s8E#ss8Duus8E#ts8E#qs8N)ss8Duus8E!& +rr<'!rr<&ts8N)rs8N)rs8N)ts8N(Ms+13$s/5nrirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZps8N)rs8N*!s8N)ss8N'#rr<&rs8N)ps8N)ts8N)ms8N)r +s8N)ts8N*!s8N)ss8N)ps8N)ss8N'#rr<&rs8N'#rr<&ss8N)rs8N)ss8N*!s8N*!s8N)ps8N)r +s8N)rs8;qKs+13$s.fVnm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZps8N)rs8N*!s8N)ss8N'#rr<&rs8N)ps8N)ts8N)ms8N)r +s8N)ts8N*!s8N)ss8N)ps8N)ss8N'#rr<&rs8N'#rr<&ss8N)rs8N)ss8N*!s8N*!s8N)ps8N)r +s8N)rs8;qKs+13$s.fVnklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZps8N)rs8N*!s8N)ss8N'#rr<&rs8N)ps8N)ts8N)ms8N)r +s8N)ts8N*!s8N)ss8N)ps8N)ss8N'#rr<&rs8N'#rr<&ss8N)rs8N)ss8N*!s8N*!s8N)ps8N)r +s8N)rs8;qKs+13$s.fVnirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7u`ps7ZNns8N)ss8N'!s7ZNns7lZns8N)ms8N)rs8N)ts8N*! +s8N)ss8N)ps8N)ss8N'!s7ZKprr<&ks8N)ss8N*!s8N*!s8N*!s7lZls8N)qs8)eIs+13$s/,hq +m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss7u`ps7ZNns8N)ss8N'!s7ZNns7lZns8N)ms8N)rs8N)ts8N*! +s8N)ss8N)ps8N)ss8N'!s7ZKprr<&ks8N)ss8N*!s8N*!s8N*!s7lZls8N)qs8)eIs+13$s/,hq +klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss7u`ps7ZNns8N)ss8N'!s7ZNns7lZns8N)ms8N)rs8N)ts8N*! +s8N)ss8N)ps8N)ss8N'!s7ZKprr<&ks8N)ss8N*!s8N*!s8N*!s7lZls8N)qs8)eIs+13$s/,hq +irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)us8E#us7ZNns8N)ss8N'!s7ZKns7cTms8N)ms8N)rs8N)t +s8N*!s8N)ss8N)ps8N)ss8N'!s7ZKprr<&ks8N)ss8N*!s8N*!s8N'!s7cTks8N)os82kJs+13$ +s/5nrm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)us8E#us7ZNns8N)ss8N'!s7ZKns7cTms8N)ms8N)rs8N)t +s8N*!s8N)ss8N)ps8N)ss8N'!s7ZKprr<&ks8N)ss8N*!s8N*!s8N'!s7cTks8N)os82kJs+13$ +s/5nrklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)us8E#us7ZNns8N)ss8N'!s7ZKns7cTms8N)ms8N)rs8N)t +s8N*!s8N)ss8N)ps8N)ss8N'!s7ZKprr<&ks8N)ss8N*!s8N*!s8N'!s7cTks8N)os82kJs+13$ +s/5nrirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8Duus8E#ns8E#ts8Duus8E#os8N)ss8N)ts8N)ts8N)s +s8N)rs8N)ts8N*!s8E#ts8E#os8N)ts8N*!s8E#os8E#ss8E#rs8N)ss8N*!s8N*!s8N'#rr<&s +s8N)rs8N)rs8N)ts8N(Ms+13$s/5nrm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8Duus8E#ns8E#ts8Duus8E#os8N)ss8N)ts8N)ts8N)s +s8N)rs8N)ts8N*!s8E#ts8E#os8N)ts8N*!s8E#os8E#ss8E#rs8N)ss8N*!s8N*!s8N'#rr<&s +s8N)rs8N)rs8N)ts8N(Ms+13$s/5nrklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8Duus8E#ns8E#ts8Duus8E#os8N)ss8N)ts8N)ts8N)s +s8N)rs8N)ts8N*!s8E#ts8E#os8N)ts8N*!s8E#os8E#ss8E#rs8N)ss8N*!s8N*!s8N'#rr<&s +s8N)rs8N)rs8N)ts8N(Ms+13$s/5nrirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8)frs8Duus7lZos7lZos7lZps7ZNms7lZps7lZps8;rts8;rt +s7lZks7cTns7lZos7cTos7lWps8;ots8Duus7? +!BU8[l0\NN!!`H'rrE'!s8E#ss8)frs8Duus7lZos7lZos7lZps7ZNms7lZps7lZps8;rts8;rt +s7lZks7cTns7lZos7cTos7lWps8;ots8Duus7? +!B:&Xj6cmH!!`H'rrE'!s8E#ss8)frs8Duus7lZos7lZos7lZps7ZNms7lZps7lZps8;rts8;rt +s7lZks7cTns7lZos7cTos7lWps8;ots8Duus7? +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8)frs8E#ts8)fqs8N'!s8;rps8)fqs82iss8E#ss82lqs7lZp +s8;rts8;rss8;p!rr<&qs7u`ls8)fps8)fps7lWps8;ots8Duus8Duus82iss8E#us7lZos7u_H +s+13$s/,hqm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8)frs8E#ts8)fqs8N'!s8;rps8)fqs82iss8E#ss82lqs7lZp +s8;rts8;rss8;p!rr<&qs7u`ls8)fps8)fps7lWps8;ots8Duus8Duus82iss8E#us7lZos7u_H +s+13$s/,hqklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8)frs8E#ts8)fqs8N'!s8;rps8)fqs82iss8E#ss82lqs7lZp +s8;rts8;rss8;p!rr<&qs7u`ls8)fps8)fps7lWps8;ots8Duus8Duus82iss8E#us7lZos7u_H +s+13$s/,hqirR%VJ,~> +!BpJ^mHsrH!9X=]!5&:2!.k0$s+13$s2tB@m/bd$J,~> +!BU8[l0\ND!9X=]!5&:2!.k0$s+13$s2tB@klK'jJ,~> +!B:&Xj6cm>!9X=]!5&:2!.k0$s+13$s2tB@irR%VJ,~> +!BpJ^mHsrH!9X=]!5/@2!.k0$s+13$s2tB@m/bd$J,~> +!BU8[l0\ND!9X=]!5/@2!.k0$s+13$s2tB@klK'jJ,~> +!B:&Xj6cm>!9X=]!5/@2!.k0$s+13$s2tB@irR%VJ,~> +!BpJ^mDo8)!5ed5!.k0$s+13$s2k +!BU8[l,Wi%!5ed5!.k0$s+13$s2k +!B:&Xj2_2t!5ed5!.k0$s+13$s2k +!BpJ^mDo8)!5ed6!.k0$s+13$s2b6>m/bd$J,~> +!BU8[l,Wi%!5ed6!.k0$s+13$s2b6>klK'jJ,~> +!B:&Xj2_2t!5ed6!.k0$s+13$s2b6>irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mA0d^!;?Hm!7LoI!/:IQ!.k0$s+14.s8MBdeieN~> +!BU8[l(n@Z!;?Hm!7LoI!/:IQ!.k0$s+14.s8M6`c8pI~> +!B:&Xj.u_T!;?Hm!7LoI!/:IQ!.k0$s+14.s8M$Z_`*)~> +!BpJ^mG7g +!BU8[l.uC8!7:cG!;?Hm!9*tR!;c`q!6bE:!6,! +!B:&Xj5'b2!7:cG!;?Hm!9*tR!;c`q!6bE:!6,! +!BpJ^mHsrH!<)rm!7CiH!7_&D!5nj2!.k0$s+13Es8MBdeieN~> +!BU8[l0\ND!<)rm!7CiH!7_&D!5nj2!.k0$s+13Es8M6`c8pI~> +!B:&Xj6cm>!<)rm!7CiH!7_&D!5nj2!.k0$s+13Es8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rs!<)rr!<)rs!!*&t!;lfp!;lfn!<3#o!<)rq!;ulr!!*&t!;ulq!!*&u +!;ZZp!<3#u!<3#r!;ulr!!*&t!;ulo!<3#s!<<)u!<<)t!<<)t!;ZZp!<)rt!!*&s!!*&p!!*&t +!;ulo!<3#t!!*&t!;uln!<3#r!;ZZn!<)rs!!*&t!;uln!.k0$s+LFOm/bd$J,~> +!BU8[l0\ND!;uls!<)rs!<)rr!<)rs!!*&t!;lfp!;lfn!<3#o!<)rq!;ulr!!*&t!;ulq!!*&u +!;ZZp!<3#u!<3#r!;ulr!!*&t!;ulo!<3#s!<<)u!<<)t!<<)t!;ZZp!<)rt!!*&s!!*&p!!*&t +!;ulo!<3#t!!*&t!;uln!<3#r!;ZZn!<)rs!!*&t!;uln!.k0$s+LFOklK'jJ,~> +!B:&Xj6cm>!;uls!<)rs!<)rr!<)rs!!*&t!;lfp!;lfn!<3#o!<)rq!;ulr!!*&t!;ulq!!*&u +!;ZZp!<3#u!<3#r!;ulr!!*&t!;ulo!<3#s!<<)u!<<)t!<<)t!;ZZp!<)rt!!*&s!!*&p!!*&t +!;ulo!<3#t!!*&t!;uln!<3#r!;ZZn!<)rs!!*&t!;uln!.k0$s+LFOirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7cTns7lZos7lZps7lZns82lps7cTns7cTi +s8N)us8N)us82lps7cTns7lZps7ZKns8;rts8;rns8N*!rr`?%!!*&s!!*&j!<3#o!<<)o!<3#o +!<3#r!;lfl!<<)o!<3#o!.k0$s+LFOm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7cTns7lZos7lZps7lZns82lps7cTns7cTi +s8N)us8N)us82lps7cTns7lZps7ZKns8;rts8;rns8N*!rr`?%!!*&s!!*&j!<3#o!<<)o!<3#o +!<3#r!;lfl!<<)o!<3#o!.k0$s+LFOklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7cTns7lZos7lZps7lZns82lps7cTns7cTi +s8N)us8N)us82lps7cTns7lZps7ZKns8;rts8;rns8N*!rr`?%!!*&s!!*&j!<3#o!<<)o!<3#o +!<3#r!;lfl!<<)o!<3#o!.k0$s+LFOirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E#us8E#ts8Duus8E#ss8E#us8N)ts8N)t +s8N)ms8N)rs8E#ts8N*!s8E#ts8E#ns8)fms8N)rs8E#ts8N)us8N)ts8N)ts8;rts8N*!s8N)t +s8N)os82los8N)us8N)us8E#ts8E#us8N)ts8N)us8E#ts8N)us8N)ts8N)rs8N)ss8E#ss8E#u +s8E#ts8N)us8N)ts8N(Ms+13's8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E#us8E#ts8Duus8E#ss8E#us8N)ts8N)t +s8N)ms8N)rs8E#ts8N*!s8E#ts8E#ns8)fms8N)rs8E#ts8N)us8N)ts8N)ts8;rts8N*!s8N)t +s8N)os82los8N)us8N)us8E#ts8E#us8N)ts8N)us8E#ts8N)us8N)ts8N)rs8N)ss8E#ss8E#u +s8E#ts8N)us8N)ts8N(Ms+13's8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E#us8E#ts8Duus8E#ss8E#us8N)ts8N)t +s8N)ms8N)rs8E#ts8N*!s8E#ts8E#ns8)fms8N)rs8E#ts8N)us8N)ts8N)ts8;rts8N*!s8N)t +s8N)os82los8N)us8N)us8E#ts8E#us8N)ts8N)us8E#ts8N)us8N)ts8N)rs8N)ss8E#ss8E#u +s8E#ts8N)us8N)ts8N(Ms+13's8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZps8N)rs8N*!s8N)ss8N'#rr<&rs8N)ps8N)ts8N)ms8N)r +s8N)ts8N*!s8N)ss8N)os7u`ms8N)rs8N)ts8N)os8N)ts8E#ps8N)ts8N)os82lns8N'#rr<&t +s8N)ss8N)ps8N)us8N)ts8N)us8;rls8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+13$rrE)um/bd$ +J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZps8N)rs8N*!s8N)ss8N'#rr<&rs8N)ps8N)ts8N)ms8N)r +s8N)ts8N*!s8N)ss8N)os7u`ms8N)rs8N)ts8N)os8N)ts8E#ps8N)ts8N)os82lns8N'#rr<&t +s8N)ss8N)ps8N)us8N)ts8N)us8;rls8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+13$rrE)uklK'j +J,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZps8N)rs8N*!s8N)ss8N'#rr<&rs8N)ps8N)ts8N)ms8N)r +s8N)ts8N*!s8N)ss8N)os7u`ms8N)rs8N)ts8N)os8N)ts8E#ps8N)ts8N)os82lns8N'#rr<&t +s8N)ss8N)ps8N)us8N)ts8N)us8;rls8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+13$rrE)uirR%V +J,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7u`ps7ZNns8N)ss8N'!s7ZNns7lZns8N)ms8N)rs8N)ts8N*! +s8N)ss8N)os8N)ts8N)ss8N)rs8N)ts8N)us7lZns8N)os8N*!s8N)ns8N*!rr<&ps8E#rs8N)s +s8N*!s7lZos8N)ts8N)ts8)fms8N)ss8N)rs8N*!s8N)ts8N)ts8)eIs+13&s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss7u`ps7ZNns8N)ss8N'!s7ZNns7lZns8N)ms8N)rs8N)ts8N*! +s8N)ss8N)os8N)ts8N)ss8N)rs8N)ts8N)us7lZns8N)os8N*!s8N)ns8N*!rr<&ps8E#rs8N)s +s8N*!s7lZos8N)ts8N)ts8)fms8N)ss8N)rs8N*!s8N)ts8N)ts8)eIs+13&s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss7u`ps7ZNns8N)ss8N'!s7ZNns7lZns8N)ms8N)rs8N)ts8N*! +s8N)ss8N)os8N)ts8N)ss8N)rs8N)ts8N)us7lZns8N)os8N*!s8N)ns8N*!rr<&ps8E#rs8N)s +s8N*!s7lZos8N)ts8N)ts8)fms8N)ss8N)rs8N*!s8N)ts8N)ts8)eIs+13&s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)us8E#us7ZNns8N)ss8N'!s7ZKns7cTms8N)ms8N)rs8N)t +s8N*!s8N)ss8N)os8N)ts8N)ss8N)rs8N)ts8N*!s7cTms8N)os8N'#rr<&ms8N)ts8N)ts8N'# +rr<&ts8N)ss8N'!s7cTns8N)ts8N)rs82los8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+13's8MBd +eieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)us8E#us7ZNns8N)ss8N'!s7ZKns7cTms8N)ms8N)rs8N)t +s8N*!s8N)ss8N)os8N)ts8N)ss8N)rs8N)ts8N*!s7cTms8N)os8N'#rr<&ms8N)ts8N)ts8N'# +rr<&ts8N)ss8N'!s7cTns8N)ts8N)rs82los8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+13's8M6` +c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)us8E#us7ZNns8N)ss8N'!s7ZKns7cTms8N)ms8N)rs8N)t +s8N*!s8N)ss8N)os8N)ts8N)ss8N)rs8N)ts8N*!s7cTms8N)os8N'#rr<&ms8N)ts8N)ts8N'# +rr<&ts8N)ss8N'!s7cTns8N)ts8N)rs82los8N)ss8N)rs8N*!s8N)ts8N)rs82kJs+13's8M$Z +_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8Duus8E#ns8E#ts8Duus8E#os8N)ss8N)ts8N)ts8N)s +s8N)rs8N)ts8N*!s8E#ts8E#ns8N)ts8N)ss8N)rs8N)ts8N*!s8N)ss8N)ts8N)ns8;rks8N)t +s8N)us8N)us8N)us8E#ts8E!"rr<&ss8N)us8N)ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8N)t +s8N)us8N)ts8N(Ms+13's8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8Duus8E#ns8E#ts8Duus8E#os8N)ss8N)ts8N)ts8N)s +s8N)rs8N)ts8N*!s8E#ts8E#ns8N)ts8N)ss8N)rs8N)ts8N*!s8N)ss8N)ts8N)ns8;rks8N)t +s8N)us8N)us8N)us8E#ts8E!"rr<&ss8N)us8N)ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8N)t +s8N)us8N)ts8N(Ms+13's8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8Duus8E#ns8E#ts8Duus8E#os8N)ss8N)ts8N)ts8N)s +s8N)rs8N)ts8N*!s8E#ts8E#ns8N)ts8N)ss8N)rs8N)ts8N*!s8N)ss8N)ts8N)ns8;rks8N)t +s8N)us8N)us8N)us8E#ts8E!"rr<&ss8N)us8N)ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8N)t +s8N)us8N)ts8N(Ms+13's8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8)frs8Duus7lZos7lZos7lZps7ZNms7lZps7lZps8;rts8;rt +s7lZks7cTns7lZps8;rts8;ots7ZKns7lZls8E#ms7ZKns82iss82iss7lZps7ZKns8;rts8;rt +s7lZos7lZos7lZps8;rts8;rts7lYGs+13's8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8)frs8Duus7lZos7lZos7lZps7ZNms7lZps7lZps8;rts8;rt +s7lZks7cTns7lZps8;rts8;ots7ZKns7lZls8E#ms7ZKns82iss82iss7lZps7ZKns8;rts8;rt +s7lZos7lZos7lZps8;rts8;rts7lYGs+13's8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8)frs8Duus7lZos7lZos7lZps7ZNms7lZps7lZps8;rts8;rt +s7lZks7cTns7lZps8;rts8;ots7ZKns7lZls8E#ms7ZKns82iss82iss7lZps7ZKns8;rts8;rt +s7lZos7lZos7lZps8;rts8;rts7lYGs+13's8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8)frs8E#ts8)fqs8N'!s8;rps8)fqs82iss8E#ss82lqs7lZp +s8;rts8;rss8;p!rr<&qs7lZns7lZps8;rts8;rts82iss8Duus7lZls8N)ms7ZKns82iss82j! +rr<'!r;cfrqu?`srVurur;cltr;cltq>gKoq#L?mr;cfrr;cltr;cltq>c*HJcCB&rp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8)frs8E#ts8)fqs8N'!s8;rps8)fqs82iss8E#ss82lqs7lZp +s8;rts8;rss8;p!rr<&qs7lZns7lZps8;rts8;rts82iss8Duus7lZls8N)ms7ZKns82iss82j! +rr<'!r;cfrqu?`srVurur;cltr;cltq>gKoq#L?mr;cfrr;cltr;cltq>c*HJcCB&rojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8)frs8E#ts8)fqs8N'!s8;rps8)fqs82iss8E#ss82lqs7lZp +s8;rts8;rss8;p!rr<&qs7lZns7lZps8;rts8;rts82iss8Duus7lZls8N)ms7ZKns82iss82j! +rr<'!r;cfrqu?`srVurur;cltr;cltq>gKoq#L?mr;cfrr;cltr;cltq>c*HJcCB&ro4$s2h1~> +!BpJ^mHsrH!9X=]!5&:2!5SX7!8mhV!.k0$s+13Ts8MBdeieN~> +!BU8[l0\ND!9X=]!5&:2!5SX7!8mhV!.k0$s+13Ts8M6`c8pI~> +!B:&Xj6cm>!9X=]!5&:2!5SX7!8mhV!.k0$s+13Ts8M$Z_`*)~> +!BpJ^mHsrH!9X=]!5/@2!5\^8!8dbU!.k0$s+13Ts8MBdeieN~> +!BU8[l0\ND!9X=]!5/@2!5\^8!8dbU!.k0$s+13Ts8M6`c8pI~> +!B:&Xj6cm>!9X=]!5/@2!5\^8!8dbU!.k0$s+13Ts8M$Z_`*)~> +!BpJ^mDo8)!5ed5!5ed5!9*tU!.k0$s+13Vs8MBdeieN~> +!BU8[l,Wi%!5ed5!5ed5!9*tU!.k0$s+13Vs8M6`c8pI~> +!B:&Xj2_2t!5ed5!5ed5!9*tU!.k0$s+13Vs8M$Z_`*)~> +!BpJ^mDo8)!5ed6!5\^4!9*tU!.k0$s+13Vs8MBdeieN~> +!BU8[l,Wi%!5ed6!5\^4!9*tU!.k0$s+13Vs8M6`c8pI~> +!B:&Xj2_2t!5ed6!5\^4!9*tU!.k0$s+13Vs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mA0d^!;?Hm!3cG%!9O7\!9O7Y!3uS(!.k0$s-Ncbm/bd$J,~> +!BU8[l(n@Z!;?Hm!3cG%!9O7\!9O7Y!3uS(!.k0$s-NcbklK'jJ,~> +!B:&Xj.u_T!;?Hm!3cG%!9O7\!9O7Y!3uS(!.k0$s-NcbirR%VJ,~> +!BpJ^mG7g +!BU8[l.uC8!7:cG!;?Hm!9*tV!<<)t!87DO!9O7\!9O7Y!;HNf!6,! +!B:&Xj5'b2!7:cG!;?Hm!9*tV!<<)t!87DO!9O7\!9O7Y!;HNf!6,! +!BpJ^mHsrH!<)rm!7CiH!7_&I!<<)t!8.>O!6"p;!;HNf!.k0$s+14's8MBdeieN~> +!BU8[l0\ND!<)rm!7CiH!7_&I!<<)t!8.>O!6"p;!;HNf!.k0$s+14's8M6`c8pI~> +!B:&Xj6cm>!<)rm!7CiH!7_&I!<<)t!8.>O!6"p;!;HNf!.k0$s+14's8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rs!<)rr!<)rs!!*&t!;lfp!;lfn!<3#o!<)rq!;ulr!!*&t!;ulq!!*&u +!;c`q!<)rt!;ulq!<)rq!!*&s!<<)r!;ulq!!<0#!;ulq!;lfp!!<0#!<3#r!<)rs!!E6$!<<#u +rVu`pqZ$Qqp&G$lrVult!<;rs!<;ip!<;utr;ZWorr;rt!<;utr;ZTnrr;lrq>^BnrVuis!<;ut +r;ZTnJcC<$]Dqlt!S0Da~> +!BU8[l0\ND!;uls!<)rs!<)rr!<)rs!!*&t!;lfp!;lfn!<3#o!<)rq!;ulr!!*&t!;ulq!!*&u +!;c`q!<)rt!;ulq!<)rq!!*&s!<<)r!;ulq!!<0#!;ulq!;lfp!!<0#!<3#r!<)rs!!E6$!<<#u +rVu`pqZ$Qqp&G$lrVult!<;rs!<;ip!<;utr;ZWorr;rt!<;utr;ZTnrr;lrq>^BnrVuis!<;ut +r;ZTnJcC<$]Dqlp!R<`V~> +!B:&Xj6cm>!;uls!<)rs!<)rr!<)rs!!*&t!;lfp!;lfn!<3#o!<)rq!;ulr!!*&t!;ulq!!*&u +!;c`q!<)rt!;ulq!<)rq!!*&s!<<)r!;ulq!!<0#!;ulq!;lfp!!<0#!<3#r!<)rs!!E6$!<<#u +rVu`pqZ$Qqp&G$lrVult!<;rs!<;ip!<;utr;ZWorr;rt!<;utr;ZTnrr;lrq>^BnrVuis!<;ut +r;ZTnJcC<$]Dqlj!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7cTns7lZos7lZps7lZns82lps7cTns7cTj +s8N)ts8N)us7lZps82iss82iss7lZos7lZos7lZos7lZos82lqs7QHms7lZls8N)ls8N*!rr`?% +!!*&s!!*&j!<3#o!<<)o!<3#o!<3#r!;lfl!<<)o!<3#o!.k0$s1A=1m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7cTns7lZos7lZps7lZns82lps7cTns7cTj +s8N)ts8N)us7lZps82iss82iss7lZos7lZos7lZos7lZos82lqs7QHms7lZls8N)ls8N*!rr`?% +!!*&s!!*&j!<3#o!<<)o!<3#o!<3#r!;lfl!<<)o!<3#o!.k0$s1A=1klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7cTns7lZos7lZps7lZns82lps7cTns7cTj +s8N)ts8N)us7lZps82iss82iss7lZos7lZos7lZos7lZos82lqs7QHms7lZls8N)ls8N*!rr`?% +!!*&s!!*&j!<3#o!<<)o!<3#o!<3#r!;lfl!<<)o!<3#o!.k0$s1A=1irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E#us8E#ts8Duus8E#ss8E#us8N)ts8N)t +s8N)ms8N)rs8E#ts8N*!s8E#ts8E#os7lZps8E#ss8E#ts8N)us8N)us8N)ts8N*!s8E#ts8E#u +s8E#ss8Duus8E#ts8E#qs8N)ss8Duus8E!&rr<'!rr<&ts8N)rs8N)ls82los8N)us8N)us8E#t +s8E#us8N)ts8N)us8E#ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N(Ms+13^ +s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E#us8E#ts8Duus8E#ss8E#us8N)ts8N)t +s8N)ms8N)rs8E#ts8N*!s8E#ts8E#os7lZps8E#ss8E#ts8N)us8N)us8N)ts8N*!s8E#ts8E#u +s8E#ss8Duus8E#ts8E#qs8N)ss8Duus8E!&rr<'!rr<&ts8N)rs8N)ls82los8N)us8N)us8E#t +s8E#us8N)ts8N)us8E#ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N(Ms+13^ +s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8E#us8E#ts8Duus8E#ss8E#us8N)ts8N)t +s8N)ms8N)rs8E#ts8N*!s8E#ts8E#os7lZps8E#ss8E#ts8N)us8N)us8N)ts8N*!s8E#ts8E#u +s8E#ss8Duus8E#ts8E#qs8N)ss8Duus8E!&rr<'!rr<&ts8N)rs8N)ls82los8N)us8N)us8E#t +s8E#us8N)ts8N)us8E#ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N(Ms+13^ +s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZps8N)rs8N*!s8N)ss8N'#rr<&rs8N)ps8N)ts8N)ms8N)r +s8N)ts8N*!s8N)ss8N)ps7lZps8N)rs8N)ts8N'#rr<&ns8N*!s8N)ss8N*!s8N)rs8N'#rr<&s +s8N)rs8N)ss8N*!s8N*!s8N)ps8N)rs8N)ls82lns8N'#rr<&ts8N)ss8N)ps8N)us8N)ts8N)u +s8;rls8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+13Zs8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZps8N)rs8N*!s8N)ss8N'#rr<&rs8N)ps8N)ts8N)ms8N)r +s8N)ts8N*!s8N)ss8N)ps7lZps8N)rs8N)ts8N'#rr<&ns8N*!s8N)ss8N*!s8N)rs8N'#rr<&s +s8N)rs8N)ss8N*!s8N*!s8N)ps8N)rs8N)ls82lns8N'#rr<&ts8N)ss8N)ps8N)us8N)ts8N)u +s8;rls8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+13Zs8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZps8N)rs8N*!s8N)ss8N'#rr<&rs8N)ps8N)ts8N)ms8N)r +s8N)ts8N*!s8N)ss8N)ps7lZps8N)rs8N)ts8N'#rr<&ns8N*!s8N)ss8N*!s8N)rs8N'#rr<&s +s8N)rs8N)ss8N*!s8N*!s8N)ps8N)rs8N)ls82lns8N'#rr<&ts8N)ss8N)ps8N)us8N)ts8N)u +s8;rls8N)ss8N)rs8N*!s8N)ts8N)us8;qKs+13Zs8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7u`ps7ZNns8N)ss8N'!s7ZNns7lZns8N)ms8N)rs8N)ts8N*! +s8N)ss8N)ps8N)ts8N*!s7ZNks8E#rs7lZps8N)ss8N*!s7ZKprr<&ks8N)ss8N*!s8N*!s8N*! +s7lZls8N)ls8N*!rr<&ps8E#rs8N)ss8N*!s7lZos8N)ts8N)ts8)fms8N)ss8N)rs8N*!s8N)t +s8N)ts8)eIs+13]s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss7u`ps7ZNns8N)ss8N'!s7ZNns7lZns8N)ms8N)rs8N)ts8N*! +s8N)ss8N)ps8N)ts8N*!s7ZNks8E#rs7lZps8N)ss8N*!s7ZKprr<&ks8N)ss8N*!s8N*!s8N*! +s7lZls8N)ls8N*!rr<&ps8E#rs8N)ss8N*!s7lZos8N)ts8N)ts8)fms8N)ss8N)rs8N*!s8N)t +s8N)ts8)eIs+13]s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss7u`ps7ZNns8N)ss8N'!s7ZNns7lZns8N)ms8N)rs8N)ts8N*! +s8N)ss8N)ps8N)ts8N*!s7ZNks8E#rs7lZps8N)ss8N*!s7ZKprr<&ks8N)ss8N*!s8N*!s8N*! +s7lZls8N)ls8N*!rr<&ps8E#rs8N)ss8N*!s7lZos8N)ts8N)ts8)fms8N)ss8N)rs8N*!s8N)t +s8N)ts8)eIs+13]s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)us8E#us7ZNns8N)ss8N'!s7ZKns7cTms8N)ms8N)rs8N)t +s8N*!s8N)ss8N)ps8N)ts8N*!s7ZNls8N'#rr<&us7cTos8N)ss8N*!s7ZKprr<&ks8N)ss8N*! +s8N*!s8N'!s7cTks8N)ls8N)ts8N)ts8N'#rr<&ts8N)ss8N'!s7cTns8N)ts8N)rs82los8N)s +s8N)rs8N*!s8N)ts8N)rs82kJs+13^s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)us8E#us7ZNns8N)ss8N'!s7ZKns7cTms8N)ms8N)rs8N)t +s8N*!s8N)ss8N)ps8N)ts8N*!s7ZNls8N'#rr<&us7cTos8N)ss8N*!s7ZKprr<&ks8N)ss8N*! +s8N*!s8N'!s7cTks8N)ls8N)ts8N)ts8N'#rr<&ts8N)ss8N'!s7cTns8N)ts8N)rs82los8N)s +s8N)rs8N*!s8N)ts8N)rs82kJs+13^s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)us8E#us7ZNns8N)ss8N'!s7ZKns7cTms8N)ms8N)rs8N)t +s8N*!s8N)ss8N)ps8N)ts8N*!s7ZNls8N'#rr<&us7cTos8N)ss8N*!s7ZKprr<&ks8N)ss8N*! +s8N*!s8N'!s7cTks8N)ls8N)ts8N)ts8N'#rr<&ts8N)ss8N'!s7cTns8N)ts8N)rs82los8N)s +s8N)rs8N*!s8N)ts8N)rs82kJs+13^s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8Duus8E#ns8E#ts8Duus8E#os8N)ss8N)ts8N)ts8N)s +s8N)rs8N)ts8N*!s8E#ts8E#os8N)ts8N*!s8E#ms8N)us8N*!s8N)ss8N*!s8E#ts8E#us8E#o +s8E#ss8E#rs8N)ss8N*!s8N*!s8N'#rr<&ss8N)rs8N)ls8N)ts8N)us8N)us8N)us8E#ts8E!" +rr<&ss8N)us8N)ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13^s8MBd +eieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8Duus8E#ns8E#ts8Duus8E#os8N)ss8N)ts8N)ts8N)s +s8N)rs8N)ts8N*!s8E#ts8E#os8N)ts8N*!s8E#ms8N)us8N*!s8N)ss8N*!s8E#ts8E#us8E#o +s8E#ss8E#rs8N)ss8N*!s8N*!s8N'#rr<&ss8N)rs8N)ls8N)ts8N)us8N)us8N)us8E#ts8E!" +rr<&ss8N)us8N)ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13^s8M6` +c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8Duus8E#ns8E#ts8Duus8E#os8N)ss8N)ts8N)ts8N)s +s8N)rs8N)ts8N*!s8E#ts8E#os8N)ts8N*!s8E#ms8N)us8N*!s8N)ss8N*!s8E#ts8E#us8E#o +s8E#ss8E#rs8N)ss8N*!s8N*!s8N'#rr<&ss8N)rs8N)ls8N)ts8N)us8N)us8N)us8E#ts8E!" +rr<&ss8N)us8N)ts8N)us8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N(Ms+13^s8M$Z +_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8)frs8Duus7lZos7lZos7lZps7ZNms7lZps7lZps8;rts8;rt +s7lZks8;rts8;rts7lZps82iss7-0is7cTos7lZos7cTos7lWps8;ots8Duus7? +!BU8[l0\NN!!`H'rrE'!s8E#ss8)frs8Duus7lZos7lZos7lZps7ZNms7lZps7lZps8;rts8;rt +s7lZks8;rts8;rts7lZps82iss7-0is7cTos7lZos7cTos7lWps8;ots8Duus7? +!B:&Xj6cmH!!`H'rrE'!s8E#ss8)frs8Duus7lZos7lZos7lZps7ZNms7lZps7lZps8;rts8;rt +s7lZks8;rts8;rts7lZps82iss7-0is7cTos7lZos7cTos7lWps8;ots8Duus7? +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8)frs8E#ts8)fqs8N'!s8;rps8)fqs82iss8E#ss82lqs7lZp +s8;rts8;rss8;p!rr<&qs8;rts8;rrs8)frs82iss82iss82iss8E#ts8;ots8E#ss8)fps8)fp +s7lWps8;ots8Duus8Duus82iss8E#us7lZks7ZKns82iss82j!rr<'!r;cfrqu?`srVurur;clt +r;cltq>gKoq#L?mr;cfrr;cltr;cltq>c*HJcE=]rp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8)frs8E#ts8)fqs8N'!s8;rps8)fqs82iss8E#ss82lqs7lZp +s8;rts8;rss8;p!rr<&qs8;rts8;rrs8)frs82iss82iss82iss8E#ts8;ots8E#ss8)fps8)fp +s7lWps8;ots8Duus8Duus82iss8E#us7lZks7ZKns82iss82j!rr<'!r;cfrqu?`srVurur;clt +r;cltq>gKoq#L?mr;cfrr;cltr;cltq>c*HJcE=]rojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8)frs8E#ts8)fqs8N'!s8;rps8)fqs82iss8E#ss82lqs7lZp +s8;rts8;rss8;p!rr<&qs8;rts8;rrs8)frs82iss82iss82iss8E#ts8;ots8E#ss8)fps8)fp +s7lWps8;ots8Duus8Duus82iss8E#us7lZks7ZKns82iss82j!rr<'!r;cfrqu?`srVurur;clt +r;cltq>gKoq#L?mr;cfrr;cltr;cltq>c*HJcE=]ro4$s2h1~> +!BpJ^mHsrH!9X=]!5&:2!.k13s8N(Ms+13$s60L^m/bd$J,~> +!BU8[l0\ND!9X=]!5&:2!.k13s8N(Ms+13$s60L^klK'jJ,~> +!B:&Xj6cm>!9X=]!5&:2!.k13s8N(Ms+13$s60L^irR%VJ,~> +!BpJ^mHsrH!9X=]!5/@2!.k13s8N(Ms+13$s60L^m/bd$J,~> +!BU8[l0\ND!9X=]!5/@2!.k13s8N(Ms+13$s60L^klK'jJ,~> +!B:&Xj6cm>!9X=]!5/@2!.k13s8N(Ms+13$s60L^irR%VJ,~> +!BpJ^mDo8)!5ed5!.k13s82kJs+13$s6BX`m/bd$J,~> +!BU8[l,Wi%!5ed5!.k13s82kJs+13$s6BX`klK'jJ,~> +!B:&Xj2_2t!5ed5!.k13s82kJs+13$s6BX`irR%VJ,~> +!BpJ^mDo8)!5ed6!.k12s82kJs+13$s6BX`m/bd$J,~> +!BU8[l,Wi%!5ed6!.k12s82kJs+13$s6BX`klK'jJ,~> +!B:&Xj2_2t!5ed6!.k12s82kJs+13$s6BX`irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m?dkQ!7LoI!8mhV!;c`p!.k0$s+133s8MBdeieN~> +!BU8[l'MGM!7LoI!8mhV!;c`p!.k0$s+133s8M6`c8pI~> +!B:&Xj-TfG!7LoI!8mhV!;c`p!.k0$s+133s8M$Z_`*)~> +!BpJ^mG7g:!6,! +!BU8[l.uC6!6,! +!B:&Xj5'b0!6,! +!BpJ^mHsrH!<)rl!.k1>s8N)ps8N)Us7cSFs+13$s1JC2m/bd$J,~> +!BU8[l0\ND!<)rl!.k1>s8N)ps8N)Us7cSFs+13$s1JC2klK'jJ,~> +!B:&Xj6cm>!<)rl!.k1>s8N)ps8N)Us7cSFs+13$s1JC2irR%VJ,~> +!BpJ^mHsrH!;lfr!<)rt!!*&s!!*&p!!*&t!;ulo!<3#t!!*&t!;uln!<3#r!;ZZn!<)rs!!*&t +!;uln!;ZZm!;ulr!!*&t!;?Hk!<)rn!<)rt!!*&t!;lfp!<)rr!<<)u!;QTo!<3#u!<)rp!;uln +!;ulq!;lfm!.k0$s+146s8MBdeieN~> +!BU8[l0\ND!;lfr!<)rt!!*&s!!*&p!!*&t!;ulo!<3#t!!*&t!;uln!<3#r!;ZZn!<)rs!!*&t +!;uln!;ZZm!;ulr!!*&t!;?Hk!<)rn!<)rt!!*&t!;lfp!<)rr!<<)u!;QTo!<3#u!<)rp!;uln +!;ulq!;lfm!.k0$s+146s8M6`c8pI~> +!B:&Xj6cm>!;lfr!<)rt!!*&s!!*&p!!*&t!;ulo!<3#t!!*&t!;uln!<3#r!;ZZn!<)rs!!*&t +!;uln!;ZZm!;ulr!!*&t!;?Hk!<)rn!<)rt!!*&t!;lfp!<)rr!<<)u!;QTo!<3#u!<)rp!;uln +!;ulq!;lfm!.k0$s+146s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N*!rr`?%!!*&s!!*&j!<3#o!<<)o!<3#o!<3#r!;lfl!<<)o +!<3#o!;ZZm!;ull!;ZZj!<<)p!<)rn!<3#o!<<)n!;ZZp!<3#u!<3#o!<3#o!<3#o!<3#o!.k0$ +s+146s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N*!rr`?%!!*&s!!*&j!<3#o!<<)o!<3#o!<3#r!;lfl!<<)o +!<3#o!;ZZm!;ull!;ZZj!<<)p!<)rn!<3#o!<<)n!;ZZp!<3#u!<3#o!<3#o!<3#o!<3#o!.k0$ +s+146s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N*!rr`?%!!*&s!!*&j!<3#o!<<)o!<3#o!<3#r!;lfl!<<)o +!<3#o!;ZZm!;ull!;ZZj!<<)p!<)rn!<3#o!<<)n!;ZZp!<3#u!<3#o!<3#o!<3#o!<3#o!.k0$ +s+146s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs82los8N)us8N)us8E#ts8E#us8N)ts8N)us8E#ts8N)us8N)t +s8N)rs8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N)ms8N)rs8E#ts8N)qs8E#ss8E#ts8N)ps8E#t +s8N*!s8E#ss8E#ts8;rts8N)ps8)fps8N)ts8N)us8N)ts8N*!s8E#ss8E#us8N)ts8N(Ms+13$ +s60L^m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs82los8N)us8N)us8E#ts8E#us8N)ts8N)us8E#ts8N)us8N)t +s8N)rs8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N)ms8N)rs8E#ts8N)qs8E#ss8E#ts8N)ps8E#t +s8N*!s8E#ss8E#ts8;rts8N)ps8)fps8N)ts8N)us8N)ts8N*!s8E#ss8E#us8N)ts8N(Ms+13$ +s60L^klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs82los8N)us8N)us8E#ts8E#us8N)ts8N)us8E#ts8N)us8N)t +s8N)rs8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N)ms8N)rs8E#ts8N)qs8E#ss8E#ts8N)ps8E#t +s8N*!s8E#ss8E#ts8;rts8N)ps8)fps8N)ts8N)us8N)ts8N*!s8E#ss8E#us8N)ts8N(Ms+13$ +s60L^irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs82lns8N'#rr<&ts8N)ss8N)ps8N)us8N)ts8N)us8;rls8N)s +s8N)rs8N*!s8N)ts8N)us8;rgs8N)rs8N)ts8N)qs8N)rs8N)us8N)ps8N)ts8N*!s8N)rs8N)u +s8E#js7u`js8N)us8;rps8N)rs8N*!s8;qKs+13$s5a4Zm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs82lns8N'#rr<&ts8N)ss8N)ps8N)us8N)ts8N)us8;rls8N)s +s8N)rs8N*!s8N)ts8N)us8;rgs8N)rs8N)ts8N)qs8N)rs8N)us8N)ps8N)ts8N*!s8N)rs8N)u +s8E#js7u`js8N)us8;rps8N)rs8N*!s8;qKs+13$s5a4ZklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs82lns8N'#rr<&ts8N)ss8N)ps8N)us8N)ts8N)us8;rls8N)s +s8N)rs8N*!s8N)ts8N)us8;rgs8N)rs8N)ts8N)qs8N)rs8N)us8N)ps8N)ts8N*!s8N)rs8N)u +s8E#js7u`js8N)us8;rps8N)rs8N*!s8;qKs+13$s5a4ZirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N*!rr<&ps8E#rs8N)ss8N*!s7lZos8N)ts8N)ts8)fms8N)s +s8N)rs8N*!s8N)ts8N)ts8)fhs8N)rs8N)ts8N)qs8N)rs8N)us8N)ps8N)ts8N*!s7ZNms8N)j +s8N)ts8N*!s7lZns8)fqs7ZNms8)eIs+13$s6'F]m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N*!rr<&ps8E#rs8N)ss8N*!s7lZos8N)ts8N)ts8)fms8N)s +s8N)rs8N*!s8N)ts8N)ts8)fhs8N)rs8N)ts8N)qs8N)rs8N)us8N)ps8N)ts8N*!s7ZNms8N)j +s8N)ts8N*!s7lZns8)fqs7ZNms8)eIs+13$s6'F]klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N*!rr<&ps8E#rs8N)ss8N*!s7lZos8N)ts8N)ts8)fms8N)s +s8N)rs8N*!s8N)ts8N)ts8)fhs8N)rs8N)ts8N)qs8N)rs8N)us8N)ps8N)ts8N*!s7ZNms8N)j +s8N)ts8N*!s7lZns8)fqs7ZNms8)eIs+13$s6'F]irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N)ts8N'#rr<&ts8N)ss8N'!s7cTns8N)ts8N)rs82lo +s8N)ss8N)rs8N*!s8N)ts8N)rs82ljs8N)rs8N)ts8N)qs8N)rs8N)us8N)ps8N)ts8N*!s7ZNm +s8N)js8N)ts8N'!s7cTks82lss7ZNks82kJs+13$s60L^m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N)ts8N'#rr<&ts8N)ss8N'!s7cTns8N)ts8N)rs82lo +s8N)ss8N)rs8N*!s8N)ts8N)rs82ljs8N)rs8N)ts8N)qs8N)rs8N)us8N)ps8N)ts8N*!s7ZNm +s8N)js8N)ts8N'!s7cTks82lss7ZNks82kJs+13$s60L^klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N)ts8N'#rr<&ts8N)ss8N'!s7cTns8N)ts8N)rs82lo +s8N)ss8N)rs8N*!s8N)ts8N)rs82ljs8N)rs8N)ts8N)qs8N)rs8N)us8N)ps8N)ts8N*!s7ZNm +s8N)js8N)ts8N'!s7cTks82lss7ZNks82kJs+13$s60L^irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N)us8N)us8N)us8E#ts8E!"rr<&ss8N)us8N)ts8N)u +s8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)ms8N)rs8N)ts8N)qs8E#ss8E#ts8N)t +s8N*!s8N)ts8N*!s8E#ms8N)js8N)ts8N'#rr<&ss8N)us8N)ts8N*!s8E#ns8N)ts8N(Ms+13$ +s60L^m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N)us8N)us8N)us8E#ts8E!"rr<&ss8N)us8N)ts8N)u +s8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)ms8N)rs8N)ts8N)qs8E#ss8E#ts8N)t +s8N*!s8N)ts8N*!s8E#ms8N)js8N)ts8N'#rr<&ss8N)us8N)ts8N*!s8E#ns8N)ts8N(Ms+13$ +s60L^klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N)us8N)us8N)us8E#ts8E!"rr<&ss8N)us8N)ts8N)u +s8N)ts8N)rs8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)ms8N)rs8N)ts8N)qs8E#ss8E#ts8N)t +s8N*!s8N)ts8N*!s8E#ms8N)js8N)ts8N'#rr<&ss8N)us8N)ts8N*!s8E#ns8N)ts8N(Ms+13$ +s60L^irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7ZKns82iss82iss7lZps7ZKns8;rts8;rts7lZos7lZos7lZp +s8;rts8;rts7lZjs7lZps8;rts8;ros7lZns7lWps8;rts8;rts7lZps7lZjs7cTos7ZNns7lZo +s7lZos7lYGs+13$s60L^m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7ZKns82iss82iss7lZps7ZKns8;rts8;rts7lZos7lZos7lZp +s8;rts8;rts7lZjs7lZps8;rts8;ros7lZns7lWps8;rts8;rts7lZps7lZjs7cTos7ZNns7lZo +s7lZos7lYGs+13$s60L^klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7ZKns82iss82iss7lZps7ZKns8;rts8;rts7lZos7lZos7lZp +s8;rts8;rts7lZjs7lZps8;rts8;ros7lZns7lWps8;rts8;rts7lZps7lZjs7cTos7ZNns7lZo +s7lZos7lYGs+13$s60L^irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7ZKns82iss82j!rr<'!r;cfrqu?`srVurur;cltr;cltq>gKo +q#L?mr;cfrr;cltr;cltq>ggEmqZ-Wqq>c*HJcC<$kPtPK!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ts7ZKns82iss82j!rr<'!r;cfrqu?`srVurur;cltr;cltq>gKo +q#L?mr;cfrr;cltr;cltq>ggEmqZ-Wqq>c*HJcC<$kPtPG!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts7ZKns82iss82j!rr<'!r;cfrqu?`srVurur;cltr;cltq>gKo +q#L?mr;cfrr;cltr;cltq>ggEmqZ-Wqq>c*HJcC<$kPtPA!Q-jH~> +!BpJ^mHsrH!9X=]!.k0$s+13$s+::Mm/bd$J,~> +!BU8[l0\ND!9X=]!.k0$s+13$s+::MklK'jJ,~> +!B:&Xj6cm>!9X=]!.k0$s+13$s+::MirR%VJ,~> +!BpJ^mHsrH!9X=]!.k0$s+13$s+::Mm/bd$J,~> +!BU8[l0\ND!9X=]!.k0$s+13$s+::MklK'jJ,~> +!B:&Xj6cm>!9X=]!.k0$s+13$s+::MirR%VJ,~> +!BpJ^mDo8)!.k0$s+13$s+LFOm/bd$J,~> +!BU8[l,Wi%!.k0$s+13$s+LFOklK'jJ,~> +!B:&Xj2_2t!.k0$s+13$s+LFOirR%VJ,~> +!BpJ^mDo8)!.k0$s+13$s+LFOm/bd$J,~> +!BU8[l,Wi%!.k0$s+13$s+LFOklK'jJ,~> +!B:&Xj2_2t!.k0$s+13$s+LFOirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6eq)D'eq)D'f"T]84b*~> +!BU73c@O8lc@O8lcG%R(3e.~> +!B:%0_h#^V_h#^V_nO"g2h1~> +JN\QIJN\QIJN^V.J,~> +JNA?CJNA?CJNCD(J,~> +JN&-=JN&-=JN(2"J,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/books/ps/v71polynomialpage.eps b/books/ps/v71polynomialpage.eps new file mode 100644 index 0000000..15ee2ea --- /dev/null +++ b/books/ps/v71polynomialpage.eps @@ -0,0 +1,2435 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner +%%Title: polynomialpage.eps +%%CreationDate: Sat Jun 21 10:51:01 2008 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 696 475 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 459.83362537429304 translate +681.59055118110246 -459.83362537429304 scale +% Image geometry +710 479 8 +% Transformation matrix +[ 710 0 0 479 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 710 string def +/gstr 710 string def +/bstr 710 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 121886 ASCII Bytes +colorimage +quD:2JN\QIJN\QI`BF,!J,~> +quD:/JNA?CJNA?C`B*nsJ,~> +quD:,JN&-=JN&-=`Ad\pJ,~> +rW)s]JcC<$JcC<$JcE^hs#p>]J,~> +rW)sZJcC<$JcC<$JcE^hs#U,ZJ,~> +rW)sWJcC<$JcC<$JcE^hs#9oWJ,~> +rr<*`rr.KIJc1/uJc1/u`Voi9!^-M`J,~> +rr<*]rr.KIJc1/uJc1/u`Voi9!]g;]J,~> +rr<*ZrV_ +!WYC^Jc()sJc()sNr84$rVYu>rVYu>rqliX4TL!~> +!WY:[Jbt#qJbt#qNr/.#rVPo=rVPo=rqccV3WO[~> +!WY1WJbjroJbjroNr&(!rVGi;rVGi;rqZ]T2ZS@~> +!WYC]JbjroJbjroO88m7bjGE6b_l8nMTkJf"jDl#qMNMars$])qYK/6!.Y~> +!WY:YJbalmJbalmO8/g6bjGE6b_l5lMTkJf"jDl"q23D`rs$])q>&u1!.Y~> +!WY1VJbXfkJbXfkO8&a4bjGE6b_c,iM9PAe"jDhupkd5^rs$](q"Wc+!.Y~> +!Bp>Xq#LHro)O@;JbalmJbc):!K-jCr!!%Vq>#pHmJI.dMY[(*rU'L`rJLUM!T?1l~> +!BU)TpAk6po)O@9JbO`iJbPr6!K$dBr!!%Up\0OCmJI.dM>-b$rU'L`rJCOJ!T,qg~> +!B9iPo`5$no)O@7Jb=TeJb>f2!JgX@qZZqRp%=+=mJ@(cL\:=qrU'I_rJ1CF!So\b~> +!Bp;WpB/E6`%CW^JbO`iJbO`iU\=eGr9a=ar/(1BM>Zc;"oO5OpPJh8q>pMNrq?HN4b*~> +!BU&So`N34`%CW^Jb=TeJb=TeU\+YCqsF1_qhOk;L\pK7"oF)JonWG3q#UAJrq- +!B9fOo)m!2`%CW^Jb+HaJb+HaU[nM@qsF.^qhF_6LAUB5"oF&Go7m/0p]:8Hrpp0F2h1~> +!Bp;Wp(.1.qQ+s_PA6:)B9P$56BcuoJbJL)!B;b3p&R-+j7WI4r\"=mJ$k^M"^OuqsF.ZqhY7F!T#ti~> +!BU#RoFLt,qQ+s_PA6:)B9P$56BcumJb8@%!B2Y1oDpm'j7E=1r[n7:En#[4Jb8!p!JgO=p'(;J +o^mq8mIg_[L\14oqX*tWqM5(B!Sf_d~> +!B9cNnIPY)qQ+s_PA6:)B9P$56BcujJar-t!AuJ.nGtL!j7*+,r[e18E6s1+Jaqdj!JU=9oEG#D +naV>.mIUSWL%4\eq!I\SpkA_;!SKD^~> +!Bp5UoFLu0rRn3jg"`aZgP!Sqn*,DqJb8@%!B;b3oDpp)j7ER90=\&s00%=0oRZYqoDsaDmIg_[ +L\14oqYU!^!;lHnqM4_8L\goArrE#krrDri!W%TNoE!`1J,~> +!BTuQndkc.rRn3jg"`aZgP!Sqn*,DoJb&4!!B)S0nc:X$j73F50"7in/iLt*nq$Amnc=L?mIUSW +L@Xniq"s^Z!;lBlpkJA1LA:Z +!B9]LmLT?*rRn3jg"`aZgP!Sqn*,DkJaVpn!AuJ.mK#0sj6d.0/[VEf/N(\%mXafemK&"8mI:AS +K^S8]p\XLV!;l9ipOqu&K_PB6rrE#frrDrd!V_9HmK(ouJ,~> +!Bp5Uo+1j^q.'!S]bf~> +!BTrPn.5O[q.'=Kq;_S5;$s8()tXJai=$!JU:8nHJZ@nF2/+qsjI^qsajaL%+Sc +p\XL[!<;Tg!;l9epP&V9!SBG`~> +!B9ZKljs+Wq.'rqsF1Zqs=RZK'_iU +o_\%T!<;Hc!;l-aoRd)/!S',Z~> +!Bp2TnIM9cSg;Z[PNqO4eC2_7]E!NQJar-t!B2\2Zlq:[naX"?D=QmSRIMpd@VIK2n_lPt_JM!T +nO,$*M"*DWrp^W@008X&035j%<%k2602J^[R+d,]JarC&!JU:8nHJZ@naV>-qsaXdqsaXdqsaja +L%4\ep\OFW!;c3dpP&V:!SKVd~> +!BToOmLPs`Sg;Z[PNqO4eC2_7]E!NNJaVpn!B)S0YotqVmd@D6D!pLMR-lR^@:q3,mbTul^hb[N +mQrO#L$giOrpCE:/ii?s/lfQr;_Fo./kr@SQe-fVJaW0u!JL.5mKN9:md>c$qsFFaqsFFaqsFX\ +K^S8]p%n+R!;c*aon<>4!S9A_~> +!B9TIl49O\Sg;Z[PNqO4eC2_7]E!NJJa2Xf!AuJ.Y9>YQlKYT*C?jkAPj0hT?Y1m&lJ" +!Bp/SnGWCrR)/p$U':T##6Y89!.jWjnEo]F2u>9.n/^gX1ukMmj7"]_l.n!Qn=VFeiMS?!n3\kb +nF/@irpUEO0/;rh0@'(VbqD^X0?o(;Jai0u!JU46mfiB +!BTlNm/?tnR)/p$U':T##6Y89!.jKfm-X->2Z#-,llG7O1Z+uchs;sUjk27Gm%,h\h4lTjlp<>Y +m-HV_rp1-G/hlW`0$qqs+4^qs+4^qs+FWK'_iUoD._N +!;Yp]o7Hu.!S'5]~> +!B9QHkPbGiR)/p$U':T##6Y89!.j]!*k8iSD1#&BYgZL.Ji7'>;kF4&Pfq9p_k/MH9X/]Qu:`%=MG/]<5'J`lOc!J'\,jot7)kN@BbqrRkYqrRkYqrS(OJEQ*GnG25F +!;YaXn::N$!RNcU~> +!BouNkl(Pb/K"OJ,l%Fkk^hsbkQ*UqroaAA0E1/FHnV'iHKaQG6g3Yc0B\/h0*?jj6SJH&!B2\2 +kRPH_7-HBZjlkph0/>78idp +!BTZHj8K#]/K"OJ,l%Fkj+67XirM%jro4#;0)jl@GV5F_GN7^960$oV0&hT_/d$[b5q`/s!B)S0 +isrdU6fTmRi8`kU/ho%4h1=U;j7)(0Ic0V;"lOjij*oq`bQ%Y?bQ%Y?bQZpRj5YUHq98d;q9/lt +IfA@.brU@~> +!B99@g\q0U/K"OJ,l%FkgO\,HgAs,_rn@H1/cOK7F=ibRF5,G$5MOjC/_YdR/H^CT5:ulh!AlD- +gCCYD6/+%Eg"Y96/MAb/eUcJ+g[NquH.hT#"ke1UgNhKL^]4B3^]4B3^]iD:gY7#,q7uq/q7m$a +H2cP!`]&D~> +!BouNkl1Vb#V@VJpAfd.J`uLb!B2\2kQ*Uqroap-01.D6kiaZekgqITkaX;Qr9+/K0E1/92_Y0o% +X9XRkXmMKkig#>91CSJJ`q[KnE9n'jmCP$jacRYJE?[X!!)oG!!)oG"m(9uk^_dkeGB7Be,eZ]r +oaC14b*~> +!BTZHj8T)]#V@VJpAfd)J`H.X!B)S0irM%jro4R#/jV,.j5VaXj3oVIj-_NFr8RfD0)jl32D5!h% +WsCLj%(f?j5[s.8OP2AJ`D=AnDaOui9e_li-s_HIc1+I!!)o?!!)o?"lOjij*oq_bkhD:bQ6XNr +o4%(3e.~> +!B99@g]%6U#V@VJpAfd!J_TSH!AlD-gAs,_rnA!j/O(i#gY4;EgWM06gQX:4r7_6:/cOK*1bJ^]% +WO(CgI +!BouNkl1Vc*9u5B"o&(Kk^hsbkQ*UqroaAA0E1/;k=714roanH4N;n)K]q/U1Q8W6XQW#)rob.W +0=Iir01=FUUb>]X\5P&VQ7kY"\":fpk^hsikQ-4qqpbEAqpYf2JEZ3IjnmO-!;k7G!;k7LjacRY +JE?[XrW)uJrW)iF!Tek2kQ0'oJ,~> +!BT]IjSo2_*9u5B"o&(KjFQCZj8h.kro=)<0)jo6j$kY,ro=VC4MlP"J`PEI0oE0+WoQGuro=kR +0!_?h/k"1LTIs0O[8JWMP:f4oZ^]'fjFQCaj8j_fqonj9qof6%IcTR=i;:^u!;jt?!;jtDi-sbJ +Ic1+IrW)uBrW)i>!T8G+j8mOeJ,~> +!B96a>O"EYbXd6hTgk"8Qg];`SqnW"-qnNBgHJI;%g&&Pb!;jP3!;jP8fm;H/ +HJ/22rW)u6rW)i2!SMeug]>DRJ,~> +!Bp#Ol2CYh`gQi;/L:B8*$kL`Ja%aMmHFX10E12:2_Y-o!fAY7rosD8%5r=fl06H-3\WspksI-' +kls("0/,eCf`(+EX&_&7=0(TLSPM$t9uV\JJa)gk!J0A0eG0+Ae-4rbl03c\qpbEAqpYf2Ja)EM +jnmR-!<(FI!;k7HjamEq!Ra,]~> +!BT]IjSf,c`gQi;/L:B8*$kL`J`MCCmGn:+0)jo42D4sh!f&D.roF&2%5i1^jQ+Eq3%mUgj?YEt +j9@Lp/h]V?e,JD;W)PQ0Ll9>Q2?J`QIa!Iiu(bkV89bQZpRjQ(dJqonj9qof6%IcTR= +i;:au!<(.A!;jt@i-t[d!R<`V~> +!B9 +!Bp#Ol2CYh`gZq,[EWpW`6nPaJa%aMiopM`7Ha[7!A?fkl%/*AklH@smF2=$Ja)EMjmCP$jal[\ +J`Z:K!Ten3klK3qJ,~> +!BT]Ijo,5d`gZq,[EWpW`6nPaJ`VIEioL5[7-":.!A6ZhjalO9jT0khmE>alJ*#dAi9e_li.'kM +J)K_ +!B9?Bh>RB\`gZq,[EWpW`6nPaJ_bn5inXZO6ehUr!A-Neh1=D)h#ViUmD/t[HJRD'g?l][g3VT2 +HJ7c&!SVl!h#YPTJ,~> +!Bp#OlM^bi`gQl,3g9Tn"BYR&Ja.gOj6?]S09uM$!A?fkl@J6Cl2cIumF;C&Ja2NOk3^\&k(2g_ +J`c@M!Tnt4l2f?sJ,~> +!BT]Ijo,5d`gQl,3g9Tn"BYR&J`VIEj5g?J/s6+o!A6ZhjalO9jT0kimEGgnJ*#dAiU+kniIBtN +J)Te>!TAP-jT3[gJ,~> +!B9?BhYmK]`gQl,3g9Tn"BYR&J_kt7j5'j>/WK_c!A-QfhLXP+h>quWmD/t[Hf!V+g?l][g3_]5 +HeRl'!SVo"h>t\VJ,~> +!Bp#OlMghk&_t2%fn@#Go66o-!.jEdlJq.2Sqc&!l2dfcJa.gOb3B"Yk3^\&k(2g_J`c@M"m1C$ +l@J*beH+f`rosO54b*~> +!BT`Jk5PDg&_t2%fn@#Go66o-!.j9`k2YS*S:oSojoM9YJ`_OGb2r_SiU+kniIC"PJ)Te>"lXsn +k'u@WblQdQroO7-3e.~> +!B9?BhZ!Q_&_t2%fn@#Go66o-!.j!XhW*GoQ@RB]h>s4EJ_kt7b2*/Gg?l][g3_]5HeRl'"kn=[ +hL!uD_#`8:rn[[s2h1~> +!Bp#OlMghk'5_SV(2[7W6#A@U!.jEdl@J5OlD*VFJ[k+0"h9-Kl@HJ4jor8GlKWr1mH+GZJc=p8 +dli3~> +!BT`Jk5PDg'5_SV(2[7W6#A@U!.j9`k(2ZGk+h&>J$eV%"gidAk'sc*i +!B9BChu +!Bp&PlgXt+l[eAQl[eArlg&`mlg&`mlg&`mlN,KuJ,~> +!BTcKkOAP'kCMfIkCMfjkNd-dkNd-dkNd-dk5ipjJ,~> +!B9BCi:-eui.9g;i.9g\i9P1Wi9P1Wi9P1WhuUtZJ,~> +!Bp%*l[eAQl[eAQlbD`de3/<~> +!BTb%kCMfIkCMfIkJ-0\coQ[~> +!B9@ri.9g;i.9g;i4n1Nau=h~> +!Boe#i.9g;i.9g;i4e+L4b*~> +!BTIrg4@t/g4@t/g:l8@3e.~> +!B9%id"0Ppd"0Ppd([j,2h1~> +!'PmaJUrB'JUrB']n$/HJ,~> +!'5[SJTcTfJTcTf]ljB:J,~> +!&oIAJS0OHJS0OH]k7=(J,~> +!BpJ^m5t=JrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&c!S0Da~> +!BU8[kr\nFrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&_!R<`V~> +!B:&Xj#d8@rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE&u3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!JcC<$JcE:\3WT0[rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rVnnYrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE&Y!Q-jH~> +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rp9a;4b*~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rojI/3e.~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\,SAerrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<<'\!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!ro4$s2h1~> +!BpJ^mDo8,!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)um/bd$J,~> +!BU8[l,Wi(!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uklK'jJ,~> +!B:&Xj2_3"!<2uu!6P9@!.k0$s+13\rr<&?rr<&trr<&@s8N)uirR%VJ,~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&um/bd$J,~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uklK'jJ,~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!.k0$s+13Zs#0rX!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<<#us8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!!*&uirR%VJ,~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!W!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls1n[5!4`(- +!.k0lrriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!!*&um/bd$J,~> +!BU8[kl:__rrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls1n[5!4`(- +!.k0lrriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!!*&uklK'jJ,~> +!B:&XirB)YrrE-"p&G[(!<3'!!<3'!!<3'!!<3'!rW!T2!<3'!!<3'!!<3'!!<3'!!<<#urr2ru +rr3!!s82iss82j,rrE'!rrE'!rrE'!rrE)s!##;3rrE'!rrE'!rrE'!rrE'!s8E"Ls1n[5!4`(- +!.k0lrriE&!<3'!qu?`squA)D!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u +s8N'!rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u +!!*&uirR%VJ,~> +!BpJ^m0fs`!!(4B!!)Bc!!%TMb5VGArr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[km%.frrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcFC& +q>fs`!!(4B!!)Bc!!%TMb5VGArr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s7cR*rrE'!rrE'!rrE'!rrE'!s82j0rrE'!rrE'!rrE'!rrE'!rrE)u!<3!% +!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'!!<<#uJcFC& +q>fs`!!(4B!!)Bc!!%TMb5VGArr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1$ +rr<&srr<&frr<&Brr<&crr<%Ms2k9E!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1$ +rr<&srr<&frr<&Brr<&crr<%Ms2k9E!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?fu!<<#u%fZP/!<3'!!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1$ +rr<&srr<&frr<&Brr<&crr<%Ms2k9E!<3'!!<;rs!<;rs-N=)G!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcF@%!!)or!!)Ng!!'G,!!%TMb5VGArr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p8!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<;lq(B4C7 +!<3'!!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!6rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcF@%!!)or!!)Ng!!'G,!!%TMb5VGArr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p8!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<;lq(B4C7 +!<3'!!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1$ +rr<&rrr<&ts8;rmrr<&rs8E#ts8E#us8N'!s8;rps8;rrs8N''rr<'!rr<&ss8E#os8;rmrr<&p +s8;ourr@WMfDc!SrrE'!s82iss82jDrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<<'!!<3!5!<3'!!<3'!!<3'!!<3'!!<3'!!<;fo'`S15!<3'!!<3'!!<3'!!<3'!!<<#u +!<<&c!S0Da~> +!BU8[kl:__rrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1$ +rr<&rrr<&ts8;rmrr<&rs8E#ts8E#us8N'!s8;rps8;rrs8N''rr<'!rr<&ss8E#os8;rmrr<&p +s8;ourr@WMfDc!SrrE'!s82iss82jDrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<<'!!<3!5!<3'!!<3'!!<3'!!<3'!!<3'!!<;fo'`S15!<3'!!<3'!!<3'!!<3'!!<<#u +!<<&_!R<`V~> +!B:&XirB)YrrE-"qu@l>!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!qu?s$!<3'!!<<#u +rr2rurr3!!s82iss82j.rrE'!rrE'!rrE'!rrE'!s8E!2rrE'!rrE'!rrE'!rrE'!rrE)u!.k1$ +rr<&rrr<&ts8;rmrr<&rs8E#ts8E#us8N'!s8;rps8;rrs8N''rr<'!rr<&ss8E#os8;rmrr<&p +s8;ourr@WMfDc!SrrE'!s82iss82jDrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<<'!!<3!5!<3'!!<3'!!<3'!!<3'!!<3'!!<;fo'`S15!<3'!!<3'!!<3'!!<3'!!<<#u +!<<&Y!Q-jH~> +!BpJ^m0 +!BU8[km%.frrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcF@%!!)or!!*#u!!)ut!!)ip!!)lq!!)rs!!)utrrE#t!!)ut!!)ut!!)utrrE*!rrE*! +!!)or!!)lq!!)ut!!)ip!!)lq!!)utrr@WMf`(pOrr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3 +!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s8E!BrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!!rT)rrE'! +rrE)u!<3!%!<3'!!<<#u!ri9#rW!N0!<3'!!<3'!!<3'!!<3'!qu@B0!<3'!!<3'!!<3'!!<3'! +!<<#uJcF@%!!)or!!*#u!!)ut!!)ip!!)lq!!)rs!!)utrrE#t!!)ut!!)ut!!)utrrE*!rrE*! +!!)or!!)lq!!)ut!!)ip!!)lq!!)utrr@WMf`(pOrr3'#rrE)u!!<0#s8E!FrrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE)u!<)p4!<3'!!<3'!!<3'!!<3'!!<3'!!<;Ti')qt3 +!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls472M!;uis!<2uu!;lcr!;c]q +!;c]q!;uis!<)ot!;uis!<2uu!;lcr!<2uu!<2uu!<2uu!;lcr!;6?l!;ZWp!;c]q!;uis!.k1% +rriE&!<3'!qu?`squ?fu!<;lq!ri9#rVururVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'! +rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__rrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls472M!;uis!<2uu!;lcr!;c]q +!;c]q!;uis!<)ot!;uis!<2uu!;lcr!<2uu!<2uu!<2uu!;lcr!;6?l!;ZWp!;c]q!;uis!.k1% +rriE&!<3'!qu?`squ?fu!<;lq!ri9#rVururVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'! +rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)YrrE-"qu?`srW!$"!<;rs!<;rs!ri9#qu?m"!<3'!p&G0o!<<#urr2rurr3!!s82is +s82iurrE)q!!`H'rrE'!s8E!$rrE'!s8Duus82j"rrE'!s8E"Ls472M!;uis!<2uu!;lcr!;c]q +!;c]q!;uis!<)ot!;uis!<2uu!;lcr!<2uu!<2uu!<2uu!;lcr!;6?l!;ZWp!;c]q!;uis!.k1% +rriE&!<3'!qu?`squ?fu!<;lq!ri9#rVururVururW!$"!<;lq"TJK%!<<#us8N'!rr3Q1rrE'! +rrE'!rrE'!rrE'!s6p""rrE'!rrE'!rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m0 +!BU8[km%.frrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcF@%qZ-Tp!!)or!!)lq!!)ip!!*#u!!)rs +!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)lqqZ-Hl!!)iprW%NLec,ULrr3'#rrE)o!!<0# +s7cQos7?9ks7cQqrrE)u!<)p0!<3'!!<3'!!<3'!!<3'!!<; +!B:&Xis,M`rrE'!s7u]srrE)s!!<0#s8E!$rrE'!s82j"rrE'!s7cQsrrE'!s8E#trriE&!<3'! +p](Bq!<;fo"TJK%!<;rs"TJK%!<;fo"TJK%!<<#uJcF@%qZ-Tp!!)or!!)lq!!)ip!!*#u!!)rs +!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)lqqZ-Hl!!)iprW%NLec,ULrr3'#rrE)o!!<0# +s7cQos7?9ks7cQqrrE)u!<)p0!<3'!!<3'!!<3'!!<3'!!<; +!BpJ^m/R.crrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!BU8[kl:__rrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!B:&XirB)YrrE-"p](Bq!<;rs!<<#u#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt!!*#u +! +!BpJ^m0 +!BU8[km%.frrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLfDbgN +q#: +!B:&Xis,M`rrE'!s8E!(rrE'!rrE'!s7u^"rrE'!rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs!ri9#rW!*$!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLfDbgN +q#: +!BpJ^m/R.crrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@$&!<3'!!<3'!qu@$&!<3'!!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0^Bn +qu?KmqYpNqqu?Wqrr;rtrVufrrVuiss8W*!s8W*!s8VoqrVufr!<<#urr;fprVllus8;qKs4@8N +!<3!#!<3'!rW!$"!<<#u!<;rs!ri9#rVurul2Unc!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'! +s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u!<2?deieN~> +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLf`1jLq>^Bn +qu?KmqYpNqqu?Wqrr;rtrVufrrVuiss8W*!s8W*!s8VoqrVufr!<<#urr;fprVllus8;qKs4@8N +!<3!#!<3'!rW!$"!<<#u!<;rs!ri9#rVurul2Unc!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'! +s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u!<23`c8pI~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)s!!`H'rrE'!s82j$rrE'!rrE)u!!rT)rrE'!rrE)u +!<3!%!<3'!!<<#u!ri9#rVurup&G6q!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NLf`1jLq>^Bn +qu?KmqYpNqqu?Wqrr;rtrVufrrVuiss8W*!s8W*!s8VoqrVufr!<<#urr;fprVllus8;qKs4@8N +!<3!#!<3'!rW!$"!<<#u!<;rs!ri9#rVurul2Unc!<<#urVmT4rrE'!rrE'!rrE'!rrE'!rrE'! +s7-.&rrE'!rrE'!rrE'!rrE'!rrE)u!<2!Z_`*)~> +!BpJ^m/R.crrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu@*(!<3'!!<3'!!<;rs#6+]'!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NL[/U++ +JcCN*!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus6p!orrE'!rrE'!s8E#srtPP6!<3'!!<3'! +!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'!!<<#urojI/3e.~> +!B:&Xis,M`rrE'!s8E!*rrE'!rrE'!rrE)q!!N<%rrE)s!!`H'rrE'!s8E!(rrE'!rrE'!s8E#t +rriE&!<3'!rW!$"!<<#u!<;rs$NC,+!<3'!!<3'!qu?m"!<3'!rW!$"!<;rs!ri9#rW%NL[/U++ +JcCN*!!*#u!s&?$s8E!"rrE)u!!*&s!!<0#s8Duus6p!orrE'!rrE'!s8E#srtPP6!<3'!!<3'! +!<3'!!<3'!!<3'!nc0=&!<3'!!<3'!!<3'!!<3'!!<<#uro4$s2h1~> +!BpJ^m/R.crrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BU8[kl:__rrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!B:&XirB)YrrE-"qu?fu!<<#u!ri9#rVuruqu?m"!<3'!rW!0&!<3'!!<;rs#6+]'!<3'!rW)rt +!!*#u! +!BpJ^m0 +!BU8[km%.frrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NL\,Z@+JcCQ+!!*#u!s&?$s8E!" +rrE)u!!<0#s7cQos7?9ks7cQqrrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xis,M`rrE'!s7cQqrrE)u!!<0#s82iurrE)s!!`H'rrE'!s7u]urrE'!s8E#trriE&!<3'! +rW!$"!<<#u!ri9#p](Hs!<3'!qu?m"!<3'!p](Hs!<3'!rW%NL\,Z@+JcCQ+!!*#u!s&?$s8E!" +rrE)u!!<0#s7cQos7?9ks7cQqrrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.crrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BU8[kl:__rrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!B:&XirB)YrrE-"p&G*mqu?`squ?fu!<;lq#6+]'!<3'!qu?m"!<3'!rW)rt!!*#u! +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/R.cs"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8MBdeieN~> +!BU8[kl:__s"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M6`c8pI~> +!B:&XirB)Ys"aZT!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<<#urr2rurr48ErrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!s82j&rrE'!rrE'! +s8E"Ls+13$s0r"e!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!rW)uu!!*#u1B@FTrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!s8Duus8M$Z_`*)~> +!BpJ^m5Y+GrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rb!S0Da~> +!BU8[krA\CrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)r^!R<`V~> +!B:&Xj#I&=rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE)u!<3!I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<<#u$NC,+!<3'! +!<3'!rW%NLJcC<$\c2X0rr4bSrrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE)u!<)pV!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!rW)rX!Q-jH~> +!BpJ^m/[4ea8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8MBdeieN~> +!BU8[klCeaa8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M6`c8pI~> +!B:&XirK/[a8l5>!W`9#aT-nlJcC<$\,QI/s2Y3?rrN3#s2b6@s8M$Z_`*)~> +!BpJ^m/[1+!<<) +!BU8[klCb'!<<) +!B:&XirK,!!<<) +!BpJ^m5b7I!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8MBdeieN~> +!BU8[krJhE!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M6`c8pI~> +!B:&Xj#R2?!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3!Z!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3%Ms+13$s0r#Q!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'!!<3'! +!<3'!!<3'!!<3'!!<3'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'!rrE'! +rrE'!rrE'!rrE'!rrE'!s8M$Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=>7g!.b-$!.b-h!<2?deieN~> +!BU8[l%&hc!.b-$!.b-h!<23`c8pI~> +!B:&Xj+.2]!.b-$!.b-h!<2!Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mC<2r!5AL5!;?Hm!.k0ss8N)-s8;r3s8;r-s8;qKs7lWnm/bd$J,~> +!BU8[l+$cn!5AL5!;?Hm!.k0ss8N)-s8;r3s8;r-s8;qKs7lWnklK'jJ,~> +!B:&Xj1,-h!5AL5!;?Hm!.k0ss8N)-s8;r3s8;r-s8;qKs7lWnirR%VJ,~> +!BpJ^mG7g +!BU8[l.uC8!9F1[!:9a[!8[\T!;?Hm!3lM%!!3*"g]%6Rc2RbDeGfLKiVrlXmJd.dd/O(GbPqPB +m/I%cJcGNFrojI/3e.~> +!B:&Xj5'b2!9F1[!:9a[!8[\T!;?Hm!3lM%!!3*"g]%6Rc2RbDeGfLKiVrlXmJd.dd/O(GbPqPB +m/I%cJcGNFro4$s2h1~> +!BpJ^mHsrH!<)rm!7(W=!8[\T!2]_q!<)rt!8IMR!6tND!7_#K!9*qX!:Bdd!7:`G!6bBB!:9^c +!.k1Fs8MBdeieN~> +!BU8[l0\ND!<)rm!7(W=!8[\T!2]_q!<)rt!8IMR!6tND!7_#K!9*qX!:Bdd!7:`G!6bBB!:9^c +!.k1Fs8M6`c8pI~> +!B:&Xj6cm>!<)rm!7(W=!8[\T!2]_q!<)rt!8IMR!6tND!7_#K!9*qX!:Bdd!7:`G!6bBB!:9^c +!.k1Fs8M$Z_`*)~> +!BpJ^mHsrH!;lfr!<3#u!<)rp!;uln!<3#r!;c`o!!<0#!;QTo!<)rt!!*&u!<<)t!<<)u!!*&t +!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!7q/M!;lcr!8IMR!6tND!42\*!:Bdd!7:`G +!4Dh,!.k1Fs8MBdeieN~> +!BU8[l0\ND!;lfr!<3#u!<)rp!;uln!<3#r!;c`o!!<0#!;QTo!<)rt!!*&u!<<)t!<<)u!!*&t +!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!7q/M!;lcr!8IMR!6tND!42\*!:Bdd!7:`G +!4Dh,!.k1Fs8M6`c8pI~> +!B:&Xj6cm>!;lfr!<3#u!<)rp!;uln!<3#r!;c`o!!<0#!;QTo!<)rt!!*&u!<<)t!<<)u!!*&t +!;ulq!!N<%!<<)p!<)rq!;ZZn!<)rs!!*&t!;uln!7q/M!;lcr!8IMR!6tND!42\*!:Bdd!7:`G +!4Dh,!.k1Fs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)us8N)us7lZos7lZos82los7lZis8N*!rr`?%!!*&u!<<)t +!<<)o!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!8%5N!;HNm!!*&u!;lfp!;c`o!;lfm!;ulq!;6Bj +!;uls!!*&t!;lfp!!3*"qZ$Qq#6+Z's8N'!r;Z]qr;Zcs!<;utqu?Wqqu?Zr!<;utrVultrVult +qYpNqq>^Bnqu?Kmr;Z]qp](6n!<;utqu?Tpq#:^Bnq#:^Bn!WN.Ss8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)us8N)us7lZos7lZos82los7lZis8N*!rr`?%!!*&u!<<)t +!<<)o!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!8%5N!;HNm!!*&u!;lfp!;c`o!;lfm!;ulq!;6Bj +!;uls!!*&t!;lfp!!3*"qZ$Qq#6+Z's8N'!r;Z]qr;Zcs!<;utqu?Wqqu?Zr!<;utrVultrVult +qYpNqq>^Bnqu?Kmr;Z]qp](6n!<;utqu?Tpq#:^Bnq#:^Bn!WN.Ss8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)us8N)us7lZos7lZos82los7lZis8N*!rr`?%!!*&u!<<)t +!<<)o!<3#o!<<)p!<)rq!;lfl!<<)o!<3#o!8%5N!;HNm!!*&u!;lfp!;c`o!;lfm!;ulq!;6Bj +!;uls!!*&t!;lfp!!3*"qZ$Qq#6+Z's8N'!r;Z]qr;Zcs!<;utqu?Wqqu?Zr!<;utrVultrVult +qYpNqq>^Bnqu?Kmr;Z]qp](6n!<;utqu?Tpq#:^Bnq#:^Bn!WN.Ss8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8)fps8N)ts8N)us8N)ts8N)rs8N)ss8E#ts8E#ns82lps8N)t +s8N)us8E#ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N)Nrr<&ls8N)u +rr<&trr<&trr<&srr<&trr<&qrr<&prr<&trr<&nrr<&trr<&ss8N)trr<&trr<&ts8N)ps8N*! +s8N*!rr<&urr<&trr<&ss8N)trr<&qrr<&qs8N)trr<&trr<&srr<&qrr<&qrr<&trr<&qrr<&p +rr<&trr<&ns8N)trr<&trr<&trr<&prr<&qrr<&srr<&ts8N)trr<&trr<&trr<&ts8N*!s8N*! +rr<&rrr<&qrr<&trr<&prr<&qrr<&ts8N(Rs8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8)fps8N)ts8N)us8N)ts8N)rs8N)ss8E#ts8E#ns82lps8N)t +s8N)us8E#ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N)Nrr<&ls8N)u +rr<&trr<&trr<&srr<&trr<&qrr<&prr<&trr<&nrr<&trr<&ss8N)trr<&trr<&ts8N)ps8N*! +s8N*!rr<&urr<&trr<&ss8N)trr<&qrr<&qs8N)trr<&trr<&srr<&qrr<&qrr<&trr<&qrr<&p +rr<&trr<&ns8N)trr<&trr<&trr<&prr<&qrr<&srr<&ts8N)trr<&trr<&trr<&ts8N*!s8N*! +rr<&rrr<&qrr<&trr<&prr<&qrr<&ts8N(Rs8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8)fps8N)ts8N)us8N)ts8N)rs8N)ss8E#ts8E#ns82lps8N)t +s8N)us8E#ts8N*!s8E#ts8E#ss8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N)Nrr<&ls8N)u +rr<&trr<&trr<&srr<&trr<&qrr<&prr<&trr<&nrr<&trr<&ss8N)trr<&trr<&ts8N)ps8N*! +s8N*!rr<&urr<&trr<&ss8N)trr<&qrr<&qs8N)trr<&trr<&srr<&qrr<&qrr<&trr<&qrr<&p +rr<&trr<&ns8N)trr<&trr<&trr<&prr<&qrr<&srr<&ts8N)trr<&trr<&trr<&ts8N*!s8N*! +rr<&rrr<&qrr<&trr<&prr<&qrr<&ts8N(Rs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs7u`js8N)us8;rls8N)ss8N)ss8N)os82lps8N)ts8N)us8N)t +s8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;rHrr<&lrr<&prr<&rrr<&orr<&q +rr<&qrr<&rrr<&jrr<&srr<&srr<&urr<&rrr<&prr<&urr<&urr<&prr<&srr<&srr<&qrr<&q +rr<&rrr<&urr<&srr<&qrr<&lrr<&qrr<&qrr<&rrr<&orr<&rrrW9$rrDrr!!)lq!!)lq!!)rs +!!)ut!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)]l!!)ip!!)lq!!)rs!!%cRrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#qs7u`js8N)us8;rls8N)ss8N)ss8N)os82lps8N)ts8N)us8N)t +s8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;rHrr<&lrr<&prr<&rrr<&orr<&q +rr<&qrr<&rrr<&jrr<&srr<&srr<&urr<&rrr<&prr<&urr<&urr<&prr<&srr<&srr<&qrr<&q +rr<&rrr<&urr<&srr<&qrr<&lrr<&qrr<&qrr<&rrr<&orr<&rrrW9$rrDrr!!)lq!!)lq!!)rs +!!)ut!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)]l!!)ip!!)lq!!)rs!!%cRrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs7u`js8N)us8;rls8N)ss8N)ss8N)os82lps8N)ts8N)us8N)t +s8N*!s8N)ss8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;rHrr<&lrr<&prr<&rrr<&orr<&q +rr<&qrr<&rrr<&jrr<&srr<&srr<&urr<&rrr<&prr<&urr<&urr<&prr<&srr<&srr<&qrr<&q +rr<&rrr<&urr<&srr<&qrr<&lrr<&qrr<&qrr<&rrr<&orr<&rrrW9$rrDrr!!)lq!!)lq!!)rs +!!)ut!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)]l!!)ip!!)lq!!)rs!!%cRro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N*!s7lZns8)fms8N)ss8N)hs8N*!rr<&ss8N)ts8N)u +s8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)fIrr<&lrr<&ps7lZns8)fmrr<&q +s7lZis8)forr<&srr<&urr<&rrr<&prr<&urr<&urr<&us8)forr<&srr<&qrr<&qrr<&rrr<&u +rr<&srr<&qrr<&qs8)fmrr<&qs7lZirr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u +!!)or!!*#u!!*#u!!*#u!!)or!!)lqqZ-Hl!!)iprW%TNrp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N*!s7lZns8)fms8N)ss8N)hs8N*!rr<&ss8N)ts8N)u +s8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)fIrr<&lrr<&ps7lZns8)fmrr<&q +s7lZis8)forr<&srr<&urr<&rrr<&prr<&urr<&urr<&us8)forr<&srr<&qrr<&qrr<&rrr<&u +rr<&srr<&qrr<&qs8)fmrr<&qs7lZirr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u +!!)or!!*#u!!*#u!!*#u!!)or!!)lqqZ-Hl!!)iprW%TNrojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N*!s7lZns8)fms8N)ss8N)hs8N*!rr<&ss8N)ts8N)u +s8N)ts8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)fIrr<&lrr<&ps7lZns8)fmrr<&q +s7lZis8)forr<&srr<&urr<&rrr<&prr<&urr<&urr<&us8)forr<&srr<&qrr<&qrr<&rrr<&u +rr<&srr<&qrr<&qs8)fmrr<&qs7lZirr<&rrrW9$rrDrr!!)lq!!)ip!!*#u!!)rs!!)rs!!*#u +!!)or!!*#u!!*#u!!*#u!!)or!!)lqqZ-Hl!!)iprW%TNro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)ts8N'!s7cTks82los8N)ss8N)hs8N)ps8N)ts8N)us8N)t +s8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82lKrr<&lrr<&prr<&nrr<&srr<&qrr<&q +rr<&irr<&srr<&srr<&srr<&urr<&rrr<&prr<&urr<&urrW9$rrDus!!)rs!!)rs!!)lq!!)lq +!!)or!!*#u!!)rs!!)lq!!)or!!)rs!!)lq!!)lq!!)Qh!!)or!s&B$!;lcr!;c]q!;ZWp!<2uu +!;uis!;uis!<2uu!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;uis!;ZWp!;?Hm!/:IPm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)ts8N'!s7cTks82los8N)ss8N)hs8N)ps8N)ts8N)us8N)t +s8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82lKrr<&lrr<&prr<&nrr<&srr<&qrr<&q +rr<&irr<&srr<&srr<&srr<&urr<&rrr<&prr<&urr<&urrW9$rrDus!!)rs!!)rs!!)lq!!)lq +!!)or!!*#u!!)rs!!)lq!!)or!!)rs!!)lq!!)lq!!)Qh!!)or!s&B$!;lcr!;c]q!;ZWp!<2uu +!;uis!;uis!<2uu!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;uis!;ZWp!;?Hm!/:IPklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)ts8N'!s7cTks82los8N)ss8N)hs8N)ps8N)ts8N)us8N)t +s8N*!s8N)ms8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82lKrr<&lrr<&prr<&nrr<&srr<&qrr<&q +rr<&irr<&srr<&srr<&srr<&urr<&rrr<&prr<&urr<&urrW9$rrDus!!)rs!!)rs!!)lq!!)lq +!!)or!!*#u!!)rs!!)lq!!)or!!)rs!!)lq!!)lq!!)Qh!!)or!s&B$!;lcr!;c]q!;ZWp!<2uu +!;uis!;uis!<2uu!;lcr!<2uu!<2uu!<2uu!;lcr!;lcr!;uis!;ZWp!;?Hm!/:IPirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)ts8N'#rr<&ss8N)us8N)ts8N)rs8N)ss8E#ss8E#os8N)p +s8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)M +rr<&rrr<&trr<&prr<&nrr<&srr<&qrr<&qrr<&irr<&srr<&srr<&srr<&urr<&rrr<&prr<&u +rr<&urrW9$rrDus!!)rs!!)rs!!)lq!!)lq!!)or!!*#u!!)rs!!)lq!!)or!!)rs!!)lq!!)lq +!!)Qh!!)or!s&B$!;lcr!;c]q!;QQq!<3&rrr<&srr<&urr<&rrr<&urr<&urr<&urr<&rrr<&r +rr<&srr<&prr<&qrr<&srr<%Rs8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)ts8N'#rr<&ss8N)us8N)ts8N)rs8N)ss8E#ss8E#os8N)p +s8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)M +rr<&rrr<&trr<&prr<&nrr<&srr<&qrr<&qrr<&irr<&srr<&srr<&srr<&urr<&rrr<&prr<&u +rr<&urrW9$rrDus!!)rs!!)rs!!)lq!!)lq!!)or!!*#u!!)rs!!)lq!!)or!!)rs!!)lq!!)lq +!!)Qh!!)or!s&B$!;lcr!;c]q!;QQq!<3&rrr<&srr<&urr<&rrr<&urr<&urr<&urr<&rrr<&r +rr<&srr<&prr<&qrr<&srr<%Rs8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)ts8N'#rr<&ss8N)us8N)ts8N)rs8N)ss8E#ss8E#os8N)p +s8N)us8E#ts8N)ts8N*!s8E#ss8E#ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)M +rr<&rrr<&trr<&prr<&nrr<&srr<&qrr<&qrr<&irr<&srr<&srr<&srr<&urr<&rrr<&prr<&u +rr<&urrW9$rrDus!!)rs!!)rs!!)lq!!)lq!!)or!!*#u!!)rs!!)lq!!)or!!)rs!!)lq!!)lq +!!)Qh!!)or!s&B$!;lcr!;c]q!;QQq!<3&rrr<&srr<&urr<&rrr<&urr<&urr<&urr<&rrr<&r +rr<&srr<&prr<&qrr<&srr<%Rs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7cTos7ZNns7lZos7lZos7cTks7u`ns7cQos8;rts8;rts7cTn +s7lZps7lZos7lZps8;rts8;rts7lZGs8N)trr<&srr<&orr<&ts8N)urr<&ts8N)qrr<&trr<&u +rr<&ts8N)prr<&ts8N)srr<&srr<&trr<&ts8N)prr<&urr<&urrW9$rrE#trrDus!!)rs!!)lq +!!)lqrrE#t!!)ut!!)utrrDoq!!)or!!)utrrDoq!!)ut!!*#u!!)utrrDiorrE#t!!)ut!!)ut +!!)ip!!)fo!W`6#qu6Wrr;Q`srVlitrVlitrVlitrr2rurr2ruqu6Wrqu6WrrVultq>UEpqZ$Qq +rVlitqu?ZrNrT+G!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7cTos7ZNns7lZos7lZos7cTks7u`ns7cQos8;rts8;rts7cTn +s7lZps7lZos7lZps8;rts8;rts7lZGs8N)trr<&srr<&orr<&ts8N)urr<&ts8N)qrr<&trr<&u +rr<&ts8N)prr<&ts8N)srr<&srr<&trr<&ts8N)prr<&urr<&urrW9$rrE#trrDus!!)rs!!)lq +!!)lqrrE#t!!)ut!!)utrrDoq!!)or!!)utrrDoq!!)ut!!*#u!!)utrrDiorrE#t!!)ut!!)ut +!!)ip!!)fo!W`6#qu6Wrr;Q`srVlitrVlitrVlitrr2rurr2ruqu6Wrqu6WrrVultq>UEpqZ$Qq +rVlitqu?ZrNrT+C!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7cTos7ZNns7lZos7lZos7cTks7u`ns7cQos8;rts8;rts7cTn +s7lZps7lZos7lZps8;rts8;rts7lZGs8N)trr<&srr<&orr<&ts8N)urr<&ts8N)qrr<&trr<&u +rr<&ts8N)prr<&ts8N)srr<&srr<&trr<&ts8N)prr<&urr<&urrW9$rrE#trrDus!!)rs!!)lq +!!)lqrrE#t!!)ut!!)utrrDoq!!)or!!)utrrDoq!!)ut!!*#u!!)utrrDiorrE#t!!)ut!!)ut +!!)ip!!)fo!W`6#qu6Wrr;Q`srVlitrVlitrVlitrr2rurr2ruqu6Wrqu6WrrVultq>UEpqZ$Qq +rVlitqu?ZrNrT+=!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7lZns82iss8E#us7u`os7lZns8)fls7u`ms8;ots8Duus8;rt +s8;rss8)fns82lqs7lZms8;rrs8;rts8;rts7u`Es8;rrs7u`ms8;rps8;ots8E#qs8;rqs8;rk +s8;ots8E#us8E#ts8E#ss8;p!rr<&rs8E#us8N*!s8N*!s8;ots8E#us8E#ts8E#ts7u`orrE-" +r;c`pr;Zp!!!*#uq>gKor;ZitrW)iqr;ccqr;cQk! +!BU8[l0\NM!!rT)rrE'!rr<&ts7lZns82iss8E#us7u`os7lZns8)fls7u`ms8;ots8Duus8;rt +s8;rss8)fns82lqs7lZms8;rrs8;rts8;rts7u`Es8;rrs7u`ms8;rps8;ots8E#qs8;rqs8;rk +s8;ots8E#us8E#ts8E#ss8;p!rr<&rs8E#us8N*!s8N*!s8;ots8E#us8E#ts8E#ts7u`orrE-" +r;c`pr;Zp!!!*#uq>gKor;ZitrW)iqr;ccqr;cQk! +!B:&Xj6cmG!!rT)rrE'!rr<&ts7lZns82iss8E#us7u`os7lZns8)fls7u`ms8;ots8Duus8;rt +s8;rss8)fns82lqs7lZms8;rrs8;rts8;rts7u`Es8;rrs7u`ms8;rps8;ots8E#qs8;rqs8;rk +s8;ots8E#us8E#ts8E#ss8;p!rr<&rs8E#us8N*!s8N*!s8;ots8E#us8E#ts8E#ts7u`orrE-" +r;c`pr;Zp!!!*#uq>gKor;ZitrW)iqr;ccqr;cQk! +!BpJ^mHsrH!.k0$s.')h!5&72!8d_U!.k0Ys8MBdeieN~> +!BU8[l0\ND!.k0$s.')h!5&72!8d_U!.k0Ys8M6`c8pI~> +!B:&Xj6cm>!.k0$s.')h!5&72!8d_U!.k0Ys8M$Z_`*)~> +!BpJ^mHsrH!.k0$s.')h!5&72!8meV!.k0Xs8MBdeieN~> +!BU8[l0\ND!.k0$s.')h!5&72!8meV!.k0Xs8M6`c8pI~> +!B:&Xj6cm>!.k0$s.')h!5&72!8meV!.k0Xs8M$Z_`*)~> +!BpJ^m=G:gs+14Jrr<&2rr<&Vrr<%Ms0_n+m/bd$J,~> +!BU8[l%/kcs+14Jrr<&2rr<&Vrr<%Ms0_n+klK'jJ,~> +!B:&Xj+75]s+14Jrr<&2rr<&Vrr<%Ms0_n+irR%VJ,~> +!BpJ^m=G:gs+14Ks8;r3s8;rYs82kJs0ht,m/bd$J,~> +!BU8[l%/kcs+14Ks8;r3s8;rYs82kJs0ht,klK'jJ,~> +!B:&Xj+75]s+14Ks8;r3s8;rYs82kJs0ht,irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mDo8+!:9ac!;?Hm!;c`q!:Bgd!;?Hm!.k1K!42_(!4`(-!.k0$s7QEkm/bd$J,~> +!BU8[l,Wi'!:9ac!;?Hm!;c`q!:Bgd!;?Hm!.k1K!42_(!4`(-!.k0$s7QEkklK'jJ,~> +!B:&Xj2_3!!:9ac!;?Hm!;c`q!:Bgd!;?Hm!.k1K!42_(!4`(-!.k0$s7QEkirR%VJ,~> +!BpJ^mFqU=!!<0#!;6Bk!:9ac!;?Hm!;c`q!:Bgd!;?Hm!2KSi!9F.[!94"Y!7:`G!6bBB!:9^c +!.k0$s7QEkm/bd$J,~> +!BU8[l.Z19!!<0#!;6Bk!:9ac!;?Hm!;c`q!:Bgd!;?Hm!2KSi!9F.[!94"Y!7:`G!6bBB!:9^c +!.k0$s7QEkklK'jJ,~> +!B:&Xj4aP3!!<0#!;6Bk!:9ac!;?Hm!;c`q!:Bgd!;?Hm!2KSi!9F.[!94"Y!7:`G!6bBB!:9^c +!.k0$s7QEkirR%VJ,~> +!BpJ^mHsrH!;ull!;- +!BU8[l0\ND!;ull!;- +!B:&Xj6cm>!;ull!;- +!BpJ^mHsrH!;uls!<)rs!!*&u!<<)t!<3#u!!*&t!;uln!<<)p!<)rq!;ulm!<3#t!<<)t!<<)p +!<)rq!;ZZn!<)rs!!*&t!;uln!65$=!;uis!9F.[!94"Y!7:`G!4Dh,!.k0$s7QEkm/bd$J,~> +!BU8[l0\ND!;uls!<)rs!!*&u!<<)t!<3#u!!*&t!;uln!<<)p!<)rq!;ulm!<3#t!<<)t!<<)p +!<)rq!;ZZn!<)rs!!*&t!;uln!65$=!;uis!9F.[!94"Y!7:`G!4Dh,!.k0$s7QEkklK'jJ,~> +!B:&Xj6cm>!;uls!<)rs!!*&u!<<)t!<3#u!!*&t!;uln!<<)p!<)rq!;ulm!<3#t!<<)t!<<)p +!<)rq!;ZZn!<)rs!!*&t!;uln!65$=!;uis!9F.[!94"Y!7:`G!4Dh,!.k0$s7QEkirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'!s8E#us8;rss7lZos7lZps7lZns82lps7lZos8E#u +s8;rts7lZns82los7lZps7cTns7lZ7rr<&srr<&us8E#ts8E#ss8;rmrr<&rs8N)ts8N)ss8;rp +s7u`ns8;rls8N'!s8;rps8;rmrr<&rs8E#ts8E#us8N'!s8;rps8;rrs8N''rr<'!rr<&ss8E#o +s8;rmrr<&ps8;ourr@WMKE(r +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'!s8E#us8;rss7lZos7lZps7lZns82lps7lZos8E#u +s8;rts7lZns82los7lZps7cTns7lZ7rr<&srr<&us8E#ts8E#ss8;rmrr<&rs8N)ts8N)ss8;rp +s7u`ns8;rls8N'!s8;rps8;rmrr<&rs8E#ts8E#us8N'!s8;rps8;rrs8N''rr<'!rr<&ss8E#o +s8;rmrr<&ps8;ourr@WMKE(r8!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'!s8E#us8;rss7lZos7lZps7lZns82lps7lZos8E#u +s8;rts7lZns82los7lZps7cTns7lZ7rr<&srr<&us8E#ts8E#ss8;rmrr<&rs8N)ts8N)ss8;rp +s7u`ns8;rls8N'!s8;rps8;rmrr<&rs8E#ts8E#us8N'!s8;rps8;rrs8N''rr<'!rr<&ss8E#o +s8;rmrr<&ps8;ourr@WMKE(r2!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss82los8N)ts8N)us8E#ts8E#us8N)ts8N)ts8N)ms8N)qs8N)p +s8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N)=rrW9$rrDoq!!)rs!!)ut!!)ut +!!)ip!!)lq!!)rs!!)ut!!)ut!!)lq!!)ip!!)ut!!)cnrrE#t!!)ut!!)ut!!)ip!!)lq!!)rs +!!)utrrE#t!!)ut!!)ut!!)utrrE*!rrE*!!!)or!!)lq!!)ut!!)ip!!)lq!!)utrr@WMKE(r< +!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ss82los8N)ts8N)us8E#ts8E#us8N)ts8N)ts8N)ms8N)qs8N)p +s8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N)=rrW9$rrDoq!!)rs!!)ut!!)ut +!!)ip!!)lq!!)rs!!)ut!!)ut!!)lq!!)ip!!)ut!!)cnrrE#t!!)ut!!)ut!!)ip!!)lq!!)rs +!!)utrrE#t!!)ut!!)ut!!)utrrE*!rrE*!!!)or!!)lq!!)ut!!)ip!!)lq!!)utrr@WMKE(r8 +!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss82los8N)ts8N)us8E#ts8E#us8N)ts8N)ts8N)ms8N)qs8N)p +s8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)us8N)ts8N)=rrW9$rrDoq!!)rs!!)ut!!)ut +!!)ip!!)lq!!)rs!!)ut!!)ut!!)lq!!)ip!!)ut!!)cnrrE#t!!)ut!!)ut!!)ip!!)lq!!)rs +!!)utrrE#t!!)ut!!)ut!!)utrrE*!rrE*!!!)or!!)lq!!)ut!!)ip!!)lq!!)utrr@WMKE(r2 +!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs7u`ps8N)ts8N)us8N)ss8N*!s8;rns8N)ms8N)qs8N)ps8N)t +s8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;r7s8;rnrr<&urr<&nrr<&prr<&qrr<&srr<&o +rr<&qrr<&qrr<&rrr<&orr<&rrrW9$rrDrr!!)lq!!)lq!!)rs!!)ut!!)rs!!*#u!!)or!!*#u +!!*#u!!*#u!!)or!!)]l!!)ip!!)lq!!)rs!!%TMKE(r +!BU8[l0\NN!!`H'rrE'!s8E#qs7u`ps8N)ts8N)us8N)ss8N*!s8;rns8N)ms8N)qs8N)ps8N)t +s8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;r7s8;rnrr<&urr<&nrr<&prr<&qrr<&srr<&o +rr<&qrr<&qrr<&rrr<&orr<&rrrW9$rrDrr!!)lq!!)lq!!)rs!!)ut!!)rs!!*#u!!)or!!*#u +!!*#u!!*#u!!)or!!)]l!!)ip!!)lq!!)rs!!%TMKE(r8!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs7u`ps8N)ts8N)us8N)ss8N*!s8;rns8N)ms8N)qs8N)ps8N)t +s8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)us8;r7s8;rnrr<&urr<&nrr<&prr<&qrr<&srr<&o +rr<&qrr<&qrr<&rrr<&orr<&rrrW9$rrDrr!!)lq!!)lq!!)rs!!)ut!!)rs!!*#u!!)or!!*#u +!!*#u!!*#u!!)or!!)]l!!)ip!!)lq!!)rs!!%TMKE(r2!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&os82lss8N)ts8N)us8N)ss8N)us8)fos8N)ms8N)qs8N)ps8N)t +s8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)f8rrW9$rrDlp!!*#u!!)rsqZ-Hl!!)lq!!)rs +!!)utqZ-Km!!)lqq#L3i!!)or!s&B$!;lcr!;c]q!;ZWp!<2uu!;uis!;uis!<2uu!;lcr!<2uu +!<2uu!<2uu!;lcr!;c`m!;ZWp!;ZZo!.k0$rrE)um/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&os82lss8N)ts8N)us8N)ss8N)us8)fos8N)ms8N)qs8N)ps8N)t +s8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)f8rrW9$rrDlp!!*#u!!)rsqZ-Hl!!)lq!!)rs +!!)utqZ-Km!!)lqq#L3i!!)or!s&B$!;lcr!;c]q!;ZWp!<2uu!;uis!;uis!<2uu!;lcr!<2uu +!<2uu!<2uu!;lcr!;c`m!;ZWp!;ZZo!.k0$rrE)uklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&os82lss8N)ts8N)us8N)ss8N)us8)fos8N)ms8N)qs8N)ps8N)t +s8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)ts8)f8rrW9$rrDlp!!*#u!!)rsqZ-Hl!!)lq!!)rs +!!)utqZ-Km!!)lqq#L3i!!)or!s&B$!;lcr!;c]q!;ZWp!<2uu!;uis!;uis!<2uu!;lcr!<2uu +!<2uu!<2uu!;lcr!;c`m!;ZWp!;ZZo!.k0$rrE)uirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s8N)ts8N)us8N)ss8N)ss82lqs8N)ms8N)qs8N)p +s8N)ts8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82l:rr<&srr<&rrrN3#!;uis!;uis!;ZWp +!;c]q!;uis!<2uu!;uis!;c]q!;c]q!:g'h!;lcu!<<'!qu6WrqYpNqq>UEprr2rur;Q`sr;Q`s +rr2ruqu6Wrrr2rurr2rurr2ruqu6Wrqu6Wrr;Q`sq>UEppAb-mJcC?%rp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s8N)ts8N)us8N)ss8N)ss82lqs8N)ms8N)qs8N)p +s8N)ts8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82l:rr<&srr<&rrrN3#!;uis!;uis!;ZWp +!;c]q!;uis!<2uu!;uis!;c]q!;c]q!:g'h!;lcu!<<'!qu6WrqYpNqq>UEprr2rur;Q`sr;Q`s +rr2ruqu6Wrrr2rurr2rurr2ruqu6Wrqu6Wrr;Q`sq>UEppAb-mJcC?%rojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s8N)ts8N)us8N)ss8N)ss82lqs8N)ms8N)qs8N)p +s8N)ts8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)rs82l:rr<&srr<&rrrN3#!;uis!;uis!;ZWp +!;c]q!;uis!<2uu!;uis!;c]q!;c]q!:g'h!;lcu!<<'!qu6WrqYpNqq>UEprr2rur;Q`sr;Q`s +rr2ruqu6Wrrr2rurr2rurr2ruqu6Wrqu6Wrr;Q`sq>UEppAb-mJcC?%ro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8;rss8N*!s8N)us8E#ts8E#ts8E#us8N)ts8N)ts8N)ts8N)s +s8N)qs8N)ts8N*!s8N)us8E#ss8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)=rr<&s +rr<&rrrN3#!;uis!;uis!;ZWp!;c]q!;uis!<2uu!;uis!;c]q!;c]q!:g'h!;lcu!<<'!qu6Wr +qYpNqq#:BqrrDrr!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)or!!)rs!!)ip!!)lq!!)rs +!!%TMKE(r +!BU8[l0\NM!!rT)rrE'!rr<&ss8;rss8N*!s8N)us8E#ts8E#ts8E#us8N)ts8N)ts8N)ts8N)s +s8N)qs8N)ts8N*!s8N)us8E#ss8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)=rr<&s +rr<&rrrN3#!;uis!;uis!;ZWp!;c]q!;uis!<2uu!;uis!;c]q!;c]q!:g'h!;lcu!<<'!qu6Wr +qYpNqq#:BqrrDrr!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)or!!)rs!!)ip!!)lq!!)rs +!!%TMKE(r8!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8;rss8N*!s8N)us8E#ts8E#ts8E#us8N)ts8N)ts8N)ts8N)s +s8N)qs8N)ts8N*!s8N)us8E#ss8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)us8N)ts8N)=rr<&s +rr<&rrrN3#!;uis!;uis!;ZWp!;c]q!;uis!<2uu!;uis!;c]q!;c]q!:g'h!;lcu!<<'!qu6Wr +qYpNqq#:BqrrDrr!!)rs!!*#u!!)or!!*#u!!*#u!!*#u!!)or!!)or!!)rs!!)ip!!)lq!!)rs +!!%TMKE(r2!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7cQos7cTns7lZns7lZps7lZns7lZps7cTns7lZps7lZo +s7lZps8;rts8;rts7lZ7rr<&srr<&qrr<&rrr<&ts8N)prr<&qrr<&ts8N)urr<&ts8N)qrr<&t +rr<&urr<&ts8N)os8N)trr<&trr<&trr<&prr<&orrN3#!;lcr!;uis!<)ot!<)ot!<)ot!<2uu +!<2uu!;lcr!;lcr!<)rt!;ZWp!;c`q!<)ot!;lfr!.k0.s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7cQos7cTns7lZns7lZps7lZns7lZps7cTns7lZps7lZo +s7lZps8;rts8;rts7lZ7rr<&srr<&qrr<&rrr<&ts8N)prr<&qrr<&ts8N)urr<&ts8N)qrr<&t +rr<&urr<&ts8N)os8N)trr<&trr<&trr<&prr<&orrN3#!;lcr!;uis!<)ot!<)ot!<)ot!<2uu +!<2uu!;lcr!;lcr!<)rt!;ZWp!;c`q!<)ot!;lfr!.k0.s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7cQos7cTns7lZns7lZps7lZns7lZps7cTns7lZps7lZo +s7lZps8;rts8;rts7lZ7rr<&srr<&qrr<&rrr<&ts8N)prr<&qrr<&ts8N)urr<&ts8N)qrr<&t +rr<&urr<&ts8N)os8N)trr<&trr<&trr<&prr<&orrN3#!;lcr!;uis!<)ot!<)ot!<)ot!<2uu +!<2uu!;lcr!;lcr!<)rt!;ZWp!;c`q!<)ot!;lfr!.k0.s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;rqs8;ots8Duus8Duus8;rrs7u`ms82lqs7lZms82lp +s8;ots8E#ss82lqs7lZms8;rrs8;rts8;rts7u`8s7lZkrr<&qs8;ots8E#ts7u`ns8;p!rr<&u +s8;ots8E#qs8;rqs8;rkrrE-"r;c`pr;c`pq>gBl!!)orrW)rtrW)osr;cfrrW)uurrE*!rrE*! +q>gKor;ZitrW)rtq>gKo! +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;rqs8;ots8Duus8Duus8;rrs7u`ms82lqs7lZms82lp +s8;ots8E#ss82lqs7lZms8;rrs8;rts8;rts7u`8s7lZkrr<&qs8;ots8E#ts7u`ns8;p!rr<&u +s8;ots8E#qs8;rqs8;rkrrE-"r;c`pr;c`pq>gBl!!)orrW)rtrW)osr;cfrrW)uurrE*!rrE*! +q>gKor;ZitrW)rtq>gKo! +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;rqs8;ots8Duus8Duus8;rrs7u`ms82lqs7lZms82lp +s8;ots8E#ss82lqs7lZms8;rrs8;rts8;rts7u`8s7lZkrr<&qs8;ots8E#ts7u`ns8;p!rr<&u +s8;ots8E#qs8;rqs8;rkrrE-"r;c`pr;c`pq>gBl!!)orrW)rtrW)osr;cfrrW)uurrE*!rrE*! +q>gKor;ZitrW)rtq>gKo! +!BpJ^mHsrH!.k0$s4I>O!8d_U!.k0$s0Mb)m/bd$J,~> +!BU8[l0\ND!.k0$s4I>O!8d_U!.k0$s0Mb)klK'jJ,~> +!B:&Xj6cm>!.k0$s4I>O!8d_U!.k0$s0Mb)irR%VJ,~> +!BpJ^mHsrH!.k0$s4I>O!8meV!.k0$s0D\(m/bd$J,~> +!BU8[l0\ND!.k0$s4I>O!8meV!.k0$s0D\(klK'jJ,~> +!B:&Xj6cm>!.k0$s4I>O!8meV!.k0$s0D\(irR%VJ,~> +!BpJ^m=G:gs1&(/!8meV!.k0$s0D\(m/bd$J,~> +!BU8[l%/kcs1&(/!8meV!.k0$s0D\(klK'jJ,~> +!B:&Xj+75]s1&(/!8meV!.k0$s0D\(irR%VJ,~> +!BpJ^m=G:gs1/1.!9F1X!.k0$s0Mb)m/bd$J,~> +!BU8[l%/kcs1/1.!9F1X!.k0$s0Mb)klK'jJ,~> +!B:&Xj+75]s1/1.!9F1X!.k0$s0Mb)irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mCN>t!9!nW!9F1[!;?Hm!.k0is8N)es8;ros8;qKs+13_s8MBdeieN~> +!BU8[l+6op!9!nW!9F1[!;?Hm!.k0is8N)es8;ros8;qKs+13_s8M6`c8pI~> +!B:&Xj1>9j!9!nW!9F1[!;?Hm!.k0is8N)es8;ros8;qKs+13_s8M$Z_`*)~> +!BpJ^mG7g:!9jI_!9!nW!9F1[!;?Hm!3Z@t!9O4\!8IMR!9F.[!;c]q!;HKn!;HKn!6kHC!7CfH +!9*qX!.k0cs8MBdeieN~> +!BU8[l.uC6!9jI_!9!nW!9F1[!;?Hm!3Z@t!9O4\!8IMR!9F.[!;c]q!;HKn!;HKn!6kHC!7CfH +!9*qX!.k0cs8M6`c8pI~> +!B:&Xj5'b0!9jI_!9!nW!9F1[!;?Hm!3Z@t!9O4\!8IMR!9F.[!;c]q!;HKn!;HKn!6kHC!7CfH +!9*qX!.k0cs8M$Z_`*)~> +!BpJ^mHsrH!<)rl!9jI_!5\^8!20>l!;uis!9O4\!8IMR!9F.[!;c]q!;QQo!;HKn!6bBB!7CfH +!9*qX!.k0cs8MBdeieN~> +!BU8[l0\ND!<)rl!9jI_!5\^8!20>l!;uis!9O4\!8IMR!9F.[!;c]q!;QQo!;HKn!6bBB!7CfH +!9*qX!.k0cs8M6`c8pI~> +!B:&Xj6cm>!<)rl!9jI_!5\^8!20>l!;uis!9O4\!8IMR!9F.[!;c]q!;QQo!;HKn!6bBB!7CfH +!9*qX!.k0cs8M$Z_`*)~> +!BpJ^mHsrH!;lfr!<)rt!<3#q!;ulq!!N<%!<<)p!;lfp!<)rr!<<)u!<3#r!;lfl!<)rp!<3#o +!<)rq!;ZZn!<)rs!!*&t!6+s +!BU8[l0\ND!;lfr!<)rt!<3#q!;ulq!!N<%!<<)p!;lfp!<)rr!<<)u!<3#r!;lfl!<)rp!<3#o +!<)rq!;ZZn!<)rs!!*&t!6+s +!B:&Xj6cm>!;lfr!<)rt!<3#q!;ulq!!N<%!<<)p!;lfp!<)rr!<<)u!<3#r!;lfl!<)rp!<3#o +!<)rq!;ZZn!<)rs!!*&t!6+s +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N*!rriE&!!*'!q#LEoq#LHpq#LBnq#LHppAk6nquHWoq#LEo +q#LHpq#LBnquHWoq#LHpp]/>6!!)rs!!)rsr;c]or;Zlu!<)ro!;ulq!;ulr!!*&u!;?Hl!;lfr +!!*&t!;?Hk!!3*"r;Z`rqZ$BlrVu]or;Z]qr;Z`r!<<#uqu?Tpr;Zcs!<;utr;ZTnp](0l!WN/t +s8;rqs8N'!s8;rqs7u`ns8;rqs8E#us8E#ss7u`ns8;ourr@WMci="3!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N*!rriE&!!*'!q#LEoq#LHpq#LBnq#LHppAk6nquHWoq#LEo +q#LHpq#LBnquHWoq#LHpp]/>6!!)rs!!)rsr;c]or;Zlu!<)ro!;ulq!;ulr!!*&u!;?Hl!;lfr +!!*&t!;?Hk!!3*"r;Z`rqZ$BlrVu]or;Z]qr;Z`r!<<#uqu?Tpr;Zcs!<;utr;ZTnp](0l!WN/t +s8;rqs8N'!s8;rqs7u`ns8;rqs8E#us8E#ss7u`ns8;ourr@WMci="/!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N*!rriE&!!*'!q#LEoq#LHpq#LBnq#LHppAk6nquHWoq#LEo +q#LHpq#LBnquHWoq#LHpp]/>6!!)rs!!)rsr;c]or;Zlu!<)ro!;ulq!;ulr!!*&u!;?Hl!;lfr +!!*&t!;?Hk!!3*"r;Z`rqZ$BlrVu]or;Z]qr;Z`r!<<#uqu?Tpr;Zcs!<;utr;ZTnp](0l!WN/t +s8;rqs8N'!s8;rqs7u`ns8;rqs8E#us8E#ss7u`ns8;ourr@WMci=")!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs82lps8N)ts8N*!s8E#ts8E#ss8N)qs8E#ss8E#ts8;rts8N)s +s8N)rs8N)us8N)ts8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)=rrW9$rrDoq!!)ut!!)rs +!!)utrrDrr!!)ip!!)ut!!)orrrE&u!!)]l!!)lqrrE#t!!)fo!!)utrrDoq!!)fo!!)cn!!)ip +!!)ut!!)orrrE&u!!)ut!!)ut!!)rsrrE#t!!)or!!)Zk!!)utrrE#t!!)ut!!)rsrrE#t!!)or +!!)ip!!)ut!!)rs!!)ut!!)lq!!)ip!!)utrr@WMci="3!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&rs82lps8N)ts8N*!s8E#ts8E#ss8N)qs8E#ss8E#ts8;rts8N)s +s8N)rs8N)us8N)ts8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)=rrW9$rrDoq!!)ut!!)rs +!!)utrrDrr!!)ip!!)ut!!)orrrE&u!!)]l!!)lqrrE#t!!)fo!!)utrrDoq!!)fo!!)cn!!)ip +!!)ut!!)orrrE&u!!)ut!!)ut!!)rsrrE#t!!)or!!)Zk!!)utrrE#t!!)ut!!)rsrrE#t!!)or +!!)ip!!)ut!!)rs!!)ut!!)lq!!)ip!!)utrr@WMci="/!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs82lps8N)ts8N*!s8E#ts8E#ss8N)qs8E#ss8E#ts8;rts8N)s +s8N)rs8N)us8N)ts8N)ts8N)ts8N)ms8N)ss8E#ss8E#us8E#ts8N)=rrW9$rrDoq!!)ut!!)rs +!!)utrrDrr!!)ip!!)ut!!)orrrE&u!!)]l!!)lqrrE#t!!)fo!!)utrrDoq!!)fo!!)cn!!)ip +!!)ut!!)orrrE&u!!)ut!!)ut!!)rsrrE#t!!)or!!)Zk!!)utrrE#t!!)ut!!)rsrrE#t!!)or +!!)ip!!)ut!!)rs!!)ut!!)lq!!)ip!!)utrr@WMci=")!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs82ljs8N*!s8N)ss8N)ts8N)qs8N)rs8N)us8E#ms8N)ns8N)m +s8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)=s8;rjrr<&trr<&rrr<&rrr<&qrr<&rrr<&srr<&g +rr<&qrr<&srr<&prr<&rrr<&qrr<&orr<&nrr<&qrr<&rrr<&srr<&prr<&rrr<&trr<&srr<&r +rr<&lrr<&rrr<&urr<&rrr<&trr<&srr<&rrr<&qrr<&rrr<&srrW9$rrDlp!!)ip!!)rs!!%TM +ci="3!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#qs82ljs8N*!s8N)ss8N)ts8N)qs8N)rs8N)us8E#ms8N)ns8N)m +s8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)=s8;rjrr<&trr<&rrr<&rrr<&qrr<&rrr<&srr<&g +rr<&qrr<&srr<&prr<&rrr<&qrr<&orr<&nrr<&qrr<&rrr<&srr<&prr<&rrr<&trr<&srr<&r +rr<&lrr<&rrr<&urr<&rrr<&trr<&srr<&rrr<&qrr<&rrr<&srrW9$rrDlp!!)ip!!)rs!!%TM +ci="/!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs82ljs8N*!s8N)ss8N)ts8N)qs8N)rs8N)us8E#ms8N)ns8N)m +s8N)ts8N)ms8N)ss8N)rs8N*!s8N)ts8N)=s8;rjrr<&trr<&rrr<&rrr<&qrr<&rrr<&srr<&g +rr<&qrr<&srr<&prr<&rrr<&qrr<&orr<&nrr<&qrr<&rrr<&srr<&prr<&rrr<&trr<&srr<&r +rr<&lrr<&rrr<&urr<&rrr<&trr<&srr<&rrr<&qrr<&rrr<&srrW9$rrDlp!!)ip!!)rs!!%TM +ci=")!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N*!rr<&ss7lZps8N)ms8N)qs8N)rs8N)us8N)ms8N)os8N)r +s7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N)=rrW9$rrDoqqZ-Tp!!)Zk!!)lq!!)or!!)rs!!)Ng +!!)lq!!)rs!!)ip!!)or!!)lq!!)fo!!)cn!!)lqq#L?m!!)ipq#LBn!!)rs!!)or!!)]l!!)cn +!!)or!!)ut!!)rs!!)or!!)lqq#L +!BU8[l0\NM!!rT)rrE'!rr<&rs8N*!rr<&ss7lZps8N)ms8N)qs8N)rs8N)us8N)ms8N)os8N)r +s7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N)=rrW9$rrDoqqZ-Tp!!)Zk!!)lq!!)or!!)rs!!)Ng +!!)lq!!)rs!!)ip!!)or!!)lq!!)fo!!)cn!!)lqq#L?m!!)ipq#LBn!!)rs!!)or!!)]l!!)cn +!!)or!!)ut!!)rs!!)or!!)lqq#L +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N*!rr<&ss7lZps8N)ms8N)qs8N)rs8N)us8N)ms8N)os8N)r +s7lZns8N)ms8N)ss8N)rs8N*!s8N)ts8N)=rrW9$rrDoqqZ-Tp!!)Zk!!)lq!!)or!!)rs!!)Ng +!!)lq!!)rs!!)ip!!)or!!)lq!!)fo!!)cn!!)lqq#L?m!!)ipq#LBn!!)rs!!)or!!)]l!!)cn +!!)or!!)ut!!)rs!!)or!!)lqq#L +!BpJ^mHsrR!!`H'rrE'!s8E#qs8N)qs7cTos8N)ms8N)qs8N)rs8N)us8N)ms8N)ps8N)rs7cTm +s8N)ms8N)ss8N)rs8N*!s8N)ts8N)=rr<&orr<&srr<&trr<&krr<&qrr<&rrr<&srr<&grr<&q +rr<&srr<&prr<&rrr<&qrr<&orr<&nrr<&qrr<&lrr<&prr<&mrr<&srr<&rrr<&lrr<&nrr<&r +rr<&trr<&srr<&rrr<&qrr<&ks8N)orr<&ls8N(Ms3CZDm/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#qs8N)qs7cTos8N)ms8N)qs8N)rs8N)us8N)ms8N)ps8N)rs7cTm +s8N)ms8N)ss8N)rs8N*!s8N)ts8N)=rr<&orr<&srr<&trr<&krr<&qrr<&rrr<&srr<&grr<&q +rr<&srr<&prr<&rrr<&qrr<&orr<&nrr<&qrr<&lrr<&prr<&mrr<&srr<&rrr<&lrr<&nrr<&r +rr<&trr<&srr<&rrr<&qrr<&ks8N)orr<&ls8N(Ms3CZDklK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs8N)qs7cTos8N)ms8N)qs8N)rs8N)us8N)ms8N)ps8N)rs7cTm +s8N)ms8N)ss8N)rs8N*!s8N)ts8N)=rr<&orr<&srr<&trr<&krr<&qrr<&rrr<&srr<&grr<&q +rr<&srr<&prr<&rrr<&qrr<&orr<&nrr<&qrr<&lrr<&prr<&mrr<&srr<&rrr<&lrr<&nrr<&r +rr<&trr<&srr<&rrr<&qrr<&ks8N)orr<&ls8N(Ms3CZDirR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8N)qs8N)ss8N*!s8E#ss8E#ts8N)ts8N'!s8E#ss8E#ts8N)m +s8N)qs8N)us8N*!s8N)ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)=rr<&orr<&srr<&t +rr<&krr<&qrr<&rrr<&srr<&grr<&qrr<&srr<&prr<&rrr<&qrr<&orr<&nrr<&qrr<&lrr<&p +rr<&mrr<&srr<&rrr<&lrr<&nrr<&rrr<&trr<&srr<&rrr<&qrr<&lrrW9$rrDlp!!)ip!!)rs +!!%TMci="3!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8N)qs8N)ss8N*!s8E#ss8E#ts8N)ts8N'!s8E#ss8E#ts8N)m +s8N)qs8N)us8N*!s8N)ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)=rr<&orr<&srr<&t +rr<&krr<&qrr<&rrr<&srr<&grr<&qrr<&srr<&prr<&rrr<&qrr<&orr<&nrr<&qrr<&lrr<&p +rr<&mrr<&srr<&rrr<&lrr<&nrr<&rrr<&trr<&srr<&rrr<&qrr<&lrrW9$rrDlp!!)ip!!)rs +!!%TMci="/!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8N)qs8N)ss8N*!s8E#ss8E#ts8N)ts8N'!s8E#ss8E#ts8N)m +s8N)qs8N)us8N*!s8N)ss8N)ts8N)ts8N)ss8N)ss8E#ss8E#us8N)ts8N)=rr<&orr<&srr<&t +rr<&krr<&qrr<&rrr<&srr<&grr<&qrr<&srr<&prr<&rrr<&qrr<&orr<&nrr<&qrr<&lrr<&p +rr<&mrr<&srr<&rrr<&lrr<&nrr<&rrr<&trr<&srr<&rrr<&qrr<&lrrW9$rrDlp!!)ip!!)rs +!!%TMci=")!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7u`os7ZNns7cTns7lZps7lZps7lZns7lZos7lZps7ZNms7lZp +s7lZos7lZps8;rts8;r +!BU8[l0\NN!!`H'rrE'!s8E#ss7u`os7ZNns7cTns7lZps7lZps7lZns7lZos7lZps7ZNms7lZp +s7lZos7lZps8;rts8;r +!B:&Xj6cmH!!`H'rrE'!s8E#ss7u`os7ZNns7cTns7lZps7lZps7lZns7lZos7lZps7ZNms7lZp +s7lZos7lZps8;rts8;r +!BpJ^mHsrQ!!rT)rrE'!rr<&ts7u`ns82iss8E#ts8)fns82los8;rrs7lZns7lZos7lZos82is +s8E#ss82lqs7lZms8;rrs8;rts8;r=s8;rns8;ots8E#ss8;rms8;rqs8;rqs7u`is7u`ps8E#t +s8E#ns8;p!rr<&us7u`os7u`os7u`ns8;rqs7u`ms8;rqs8E#ts8E#qs8;rls8;ros8;rqs8E#t +s8E#qs8;rqs8;rqs8E#us8E#ps8;rrrrE-"r;c]orr@WMfDkj;!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ts7u`ns82iss8E#ts8)fns82los8;rrs7lZns7lZos7lZos82is +s8E#ss82lqs7lZms8;rrs8;rts8;r=s8;rns8;ots8E#ss8;rms8;rqs8;rqs7u`is7u`ps8E#t +s8E#ns8;p!rr<&us7u`os7u`os7u`ns8;rqs7u`ms8;rqs8E#ts8E#qs8;rls8;ros8;rqs8E#t +s8E#qs8;rqs8;rqs8E#us8E#ps8;rrrrE-"r;c]orr@WMfDkj7!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts7u`ns82iss8E#ts8)fns82los8;rrs7lZns7lZos7lZos82is +s8E#ss82lqs7lZms8;rrs8;rts8;r=s8;rns8;ots8E#ss8;rms8;rqs8;rqs7u`is7u`ps8E#t +s8E#ns8;p!rr<&us7u`os7u`os7u`ns8;rqs7u`ms8;rqs8E#ts8E#qs8;rls8;ros8;rqs8E#t +s8E#qs8;rqs8;rqs8E#us8E#ps8;rrrrE-"r;c]orr@WMfDkj1!Q-jH~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m?%AI!9!nW!9!nV!.k0Js8N(Ms+14*s8MBdeieN~> +!BU8[l&brE!9!nW!9!nV!.k0Js8N(Ms+14*s8M6`c8pI~> +!B:&Xj,j +!BpJ^mFqU=!!<0#!<)rr!!E6$!<;lqdJs1GqZ$9inc/Uhi;`cVcN!hC!WN/Srr<&Xrr<%srr<&q +rr<&crr<&3rr<%Ms1n[6m/bd$J,~> +!BU8[l.Z19!!<0#!<)rr!!E6$!<;lqdJs1GqZ$9inc/Uhi;`cVcN!hC!WN/Srr<&Xrr<%srr<&q +rr<&crr<&3rr<%Ms1n[6klK'jJ,~> +!B:&Xj4aP3!!<0#!<)rr!!E6$!<;lqdJs1GqZ$9inc/Uhi;`cVcN!hC!WN/Srr<&Xrr<%srr<&q +rr<&crr<&3rr<%Ms1n[6irR%VJ,~> +!BpJ^mHsrH!;ull!<<)o!!*&o!7LoI!;c`i!6tQD!7:cG!<)rt!8IMR!9*qX!2ohs!;c]q!:9^c +!5/=3!.k0cs8MBdeieN~> +!BU8[l0\ND!;ull!<<)o!!*&o!7LoI!;c`i!6tQD!7:cG!<)rt!8IMR!9*qX!2ohs!;c]q!:9^c +!5/=3!.k0cs8M6`c8pI~> +!B:&Xj6cm>!;ull!<<)o!!*&o!7LoI!;c`i!6tQD!7:cG!<)rt!8IMR!9*qX!2ohs!;c]q!:9^c +!5/=3!.k0cs8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rs!<<*!!<)rs!<<*!!<)rt!<)ro!;QTk!<3#t!!*&t!;ulq!!<0#!;QTo +!<)rt!!*&t!<<)u!<3#r!;ZZn!<)rs!!*&t!;ulq!!<0#!<)ro!8IMR!;lcr!8IMR!9*qX!2ohs +!1s2j!.k0cs8MBdeieN~> +!BU8[l0\ND!;uls!<)rs!<<*!!<)rs!<<*!!<)rt!<)ro!;QTk!<3#t!!*&t!;ulq!!<0#!;QTo +!<)rt!!*&t!<<)u!<3#r!;ZZn!<)rs!!*&t!;ulq!!<0#!<)ro!8IMR!;lcr!8IMR!9*qX!2ohs +!1s2j!.k0cs8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rs!<<*!!<)rs!<<*!!<)rt!<)ro!;QTk!<3#t!!*&t!;ulq!!<0#!;QTo +!<)rt!!*&t!<<)u!<3#r!;ZZn!<)rs!!*&t!;ulq!!<0#!<)ro!8IMR!;lcr!8IMR!9*qX!2ohs +!1s2j!.k0cs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)rs8N'#rr<&rs8N*!s8N)ss8N*!s7lZjs7lZps7cTns7lZi +s8N*!rr`?%!!*&n!<<)s!;lfl!<<)o!<3#o!<3#o!8RSS!;HNm!!*&u!;lfp!;c`o!;lfm!;ulq +!;c`o!!3*"rVu]op](0l!WN/ts8;rrs8N'2rr<'!rr<'!rr<'!!!*'!!!)rsr;ccqrr<'!r;cQk +r;Zlu!;ulr!;lfq!<3#t!<)rs!;ZZn!!3*"r;Z]qr;Z`r!<<#uqu?Tp!WN/os8;rps7u`ns8;ou +rr@WMci="3!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)rs8N'#rr<&rs8N*!s8N)ss8N*!s7lZjs7lZps7cTns7lZi +s8N*!rr`?%!!*&n!<<)s!;lfl!<<)o!<3#o!<3#o!8RSS!;HNm!!*&u!;lfp!;c`o!;lfm!;ulq +!;c`o!!3*"rVu]op](0l!WN/ts8;rrs8N'2rr<'!rr<'!rr<'!!!*'!!!)rsr;ccqrr<'!r;cQk +r;Zlu!;ulr!;lfq!<3#t!<)rs!;ZZn!!3*"r;Z]qr;Z`r!<<#uqu?Tp!WN/os8;rps7u`ns8;ou +rr@WMci="/!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)rs8N'#rr<&rs8N*!s8N)ss8N*!s7lZjs7lZps7cTns7lZi +s8N*!rr`?%!!*&n!<<)s!;lfl!<<)o!<3#o!<3#o!8RSS!;HNm!!*&u!;lfp!;c`o!;lfm!;ulq +!;c`o!!3*"rVu]op](0l!WN/ts8;rrs8N'2rr<'!rr<'!rr<'!!!*'!!!)rsr;ccqrr<'!r;cQk +r;Zlu!;ulr!;lfq!<3#t!<)rs!;ZZn!!3*"r;Z]qr;Z`r!<<#uqu?Tp!WN/os8;rps7u`ns8;ou +rr@WMci=")!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)os8N)ns8N)ss8N*!s8N)ts8N)ps8N)ts8N)us8E#ts8N*! +s8E#ts8E#ns82los8;rts8N)ss8N)ss8E#ss8E#us8E#ts8N*!s8E#ts8E#ts8N)ts8N)Srr<&l +s8N)urr<&trr<&trr<&srr<&trr<&qrr<&prr<&trr<&srr<&ts8N)rrr<&krr<&ts8N)trr<&t +rr<&ts8N*!s8N*!rsJi,rr<'!rr<'!rrE&u!!)ut!!)rsrrE#t!!)fo!!)utrrDoq!!)lq!!)rs +!!)lq!!)lq!!)utrrE#t!!)ut!!)orrrE&u!!)ut!!)utrrDio!!)ut!!)lq!!)ip!!)utrr@WM +ci="3!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)os8N)ns8N)ss8N*!s8N)ts8N)ps8N)ts8N)us8E#ts8N*! +s8E#ts8E#ns82los8;rts8N)ss8N)ss8E#ss8E#us8E#ts8N*!s8E#ts8E#ts8N)ts8N)Srr<&l +s8N)urr<&trr<&trr<&srr<&trr<&qrr<&prr<&trr<&srr<&ts8N)rrr<&krr<&ts8N)trr<&t +rr<&ts8N*!s8N*!rsJi,rr<'!rr<'!rrE&u!!)ut!!)rsrrE#t!!)fo!!)utrrDoq!!)lq!!)rs +!!)lq!!)lq!!)utrrE#t!!)ut!!)orrrE&u!!)ut!!)utrrDio!!)ut!!)lq!!)ip!!)utrr@WM +ci="/!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)os8N)ns8N)ss8N*!s8N)ts8N)ps8N)ts8N)us8E#ts8N*! +s8E#ts8E#ns82los8;rts8N)ss8N)ss8E#ss8E#us8E#ts8N*!s8E#ts8E#ts8N)ts8N)Srr<&l +s8N)urr<&trr<&trr<&srr<&trr<&qrr<&prr<&trr<&srr<&ts8N)rrr<&krr<&ts8N)trr<&t +rr<&ts8N*!s8N*!rsJi,rr<'!rr<'!rrE&u!!)ut!!)rsrrE#t!!)fo!!)utrrDoq!!)lq!!)rs +!!)lq!!)lq!!)utrrE#t!!)ut!!)orrrE&u!!)ut!!)utrrDio!!)ut!!)lq!!)ip!!)utrr@WM +ci=")!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)os8N)ns8N)ss8N*!s8;rds8N)us8N)ts8N*!s8N)ss8N)o +s82los8E#ms8N)ss8N)rs8N*!s8N)ts8N*!s8N)ss8N)us8;rMrr<&lrr<&prr<&rrr<&orr<&q +rr<&qrr<&rrr<&trr<&srr<&rrr<&lrr<&rrr<&urr<&rrr<&urr<&urr<&urrW9$rrE&u!!*#u +!s&B$!;lcr!<)ot!;uis!;ZWp!;lcr!;c]q!;ZWp!<2uu!;ZWp!;c]q!;uis!<2uu!;lcr!;uis +!;QQo!;uis!;ZWp!;lcr!;lcr!;c]q!;lcr!.k0rs8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)os8N)ns8N)ss8N*!s8;rds8N)us8N)ts8N*!s8N)ss8N)o +s82los8E#ms8N)ss8N)rs8N*!s8N)ts8N*!s8N)ss8N)us8;rMrr<&lrr<&prr<&rrr<&orr<&q +rr<&qrr<&rrr<&trr<&srr<&rrr<&lrr<&rrr<&urr<&rrr<&urr<&urr<&urrW9$rrE&u!!*#u +!s&B$!;lcr!<)ot!;uis!;ZWp!;lcr!;c]q!;ZWp!<2uu!;ZWp!;c]q!;uis!<2uu!;lcr!;uis +!;QQo!;uis!;ZWp!;lcr!;lcr!;c]q!;lcr!.k0rs8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)os8N)ns8N)ss8N*!s8;rds8N)us8N)ts8N*!s8N)ss8N)o +s82los8E#ms8N)ss8N)rs8N*!s8N)ts8N*!s8N)ss8N)us8;rMrr<&lrr<&prr<&rrr<&orr<&q +rr<&qrr<&rrr<&trr<&srr<&rrr<&lrr<&rrr<&urr<&rrr<&urr<&urr<&urrW9$rrE&u!!*#u +!s&B$!;lcr!<)ot!;uis!;ZWp!;lcr!;c]q!;ZWp!<2uu!;ZWp!;c]q!;uis!<2uu!;lcr!;uis +!;QQo!;uis!;ZWp!;lcr!;lcr!;c]q!;lcr!.k0rs8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)us7lZhs8N)ss8N)us8)fks7lZos8N)ts8N*!s8N)ss8N)o +s8N*!rr<&rs8N)ms8N)ss7ZNns8N)ts8N*!s8N)ss8N)ts8)fNrr<&ss8;rsrr<&ps7lZns8)fm +rr<&qs7lZms8E#nrr<&lrr<&nrr<&rrr<&urr<&urr<&urrW9$rrE&u!!*#u!s&B$!;lcr!<)ot +!;uis!;ZWp!;lcr!;c]q!;ZWp!<2uu!;ZWp!;ZZo!;lcr!;lcr!;uis!;HNm!;?Hg!;lcr!;c]q +!.k0ks8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)us7lZhs8N)ss8N)us8)fks7lZos8N)ts8N*!s8N)ss8N)o +s8N*!rr<&rs8N)ms8N)ss7ZNns8N)ts8N*!s8N)ss8N)ts8)fNrr<&ss8;rsrr<&ps7lZns8)fm +rr<&qs7lZms8E#nrr<&lrr<&nrr<&rrr<&urr<&urr<&urrW9$rrE&u!!*#u!s&B$!;lcr!<)ot +!;uis!;ZWp!;lcr!;c]q!;ZWp!<2uu!;ZWp!;ZZo!;lcr!;lcr!;uis!;HNm!;?Hg!;lcr!;c]q +!.k0ks8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)us7lZhs8N)ss8N)us8)fks7lZos8N)ts8N*!s8N)ss8N)o +s8N*!rr<&rs8N)ms8N)ss7ZNns8N)ts8N*!s8N)ss8N)ts8)fNrr<&ss8;rsrr<&ps7lZns8)fm +rr<&qs7lZms8E#nrr<&lrr<&nrr<&rrr<&urr<&urr<&urrW9$rrE&u!!*#u!s&B$!;lcr!<)ot +!;uis!;ZWp!;lcr!;c]q!;ZWp!<2uu!;ZWp!;ZZo!;lcr!;lcr!;uis!;HNm!;?Hg!;lcr!;c]q +!.k0ks8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)us7lZhs8N)ss8N)ss82lns7cTns8N)ts8N*!s8N)ss8N)o +s8N)os8N)ms8N)ss7ZNns8N)ts8N*!s8N)ss8N)rs82lPrr<&qrr<&trr<&prr<&nrr<&srr<&q +rr<&qrr<&is8N)qrr<&lrr<&nrr<&rrr<&urr<&urr<&urrW9$rrE&u!!*#u!s&B$!;lcr!<)ot +!;uis!;ZWp!;lcr!;c]q!;QQq!<3&orr<&ms8N)trr<&rrr<&srr<&ks8N)orr<&krr<&qrr<%M +s2b6>m/bd$J,~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)us7lZhs8N)ss8N)ss82lns7cTns8N)ts8N*!s8N)ss8N)o +s8N)os8N)ms8N)ss7ZNns8N)ts8N*!s8N)ss8N)rs82lPrr<&qrr<&trr<&prr<&nrr<&srr<&q +rr<&qrr<&is8N)qrr<&lrr<&nrr<&rrr<&urr<&urr<&urrW9$rrE&u!!*#u!s&B$!;lcr!<)ot +!;uis!;ZWp!;lcr!;c]q!;QQq!<3&orr<&ms8N)trr<&rrr<&srr<&ks8N)orr<&krr<&qrr<%M +s2b6>klK'jJ,~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)us7lZhs8N)ss8N)ss82lns7cTns8N)ts8N*!s8N)ss8N)o +s8N)os8N)ms8N)ss7ZNns8N)ts8N*!s8N)ss8N)rs82lPrr<&qrr<&trr<&prr<&nrr<&srr<&q +rr<&qrr<&is8N)qrr<&lrr<&nrr<&rrr<&urr<&urr<&urrW9$rrE&u!!*#u!s&B$!;lcr!<)ot +!;uis!;ZWp!;lcr!;c]q!;QQq!<3&orr<&ms8N)trr<&rrr<&srr<&ks8N)orr<&krr<&qrr<%M +s2b6>irR%VJ,~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ss8N*!s8N)ss8N*!s8N)ts8N)us8N)ts8N)qs8N)ss8N)u +s8N)ts8N*!s8E#ts8E#ns8N)os8N)ms8N)ss8E#ns8N)ts8N*!s8E#ts8E#ts8N)ts8N)Rrr<&r +rr<&trr<&prr<&nrr<&srr<&qrr<&qrr<&mrr<&srr<&rrr<&lrr<&nrr<&rrr<&urr<&urr<&u +rrW9$rrE&u!!*#u!s&B$!;lcr!<)ot!;uis!;ZWp!;lcr!;c]q!;QQq!<3&orr<&qrr<&srr<&u +rr<&rrr<&srr<&orr<&srr<&prr<&krr<&qrr<%Ms2b6>m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ss8N*!s8N)ss8N*!s8N)ts8N)us8N)ts8N)qs8N)ss8N)u +s8N)ts8N*!s8E#ts8E#ns8N)os8N)ms8N)ss8E#ns8N)ts8N*!s8E#ts8E#ts8N)ts8N)Rrr<&r +rr<&trr<&prr<&nrr<&srr<&qrr<&qrr<&mrr<&srr<&rrr<&lrr<&nrr<&rrr<&urr<&urr<&u +rrW9$rrE&u!!*#u!s&B$!;lcr!<)ot!;uis!;ZWp!;lcr!;c]q!;QQq!<3&orr<&qrr<&srr<&u +rr<&rrr<&srr<&orr<&srr<&prr<&krr<&qrr<%Ms2b6>klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ss8N*!s8N)ss8N*!s8N)ts8N)us8N)ts8N)qs8N)ss8N)u +s8N)ts8N*!s8E#ts8E#ns8N)os8N)ms8N)ss8E#ns8N)ts8N*!s8E#ts8E#ts8N)ts8N)Rrr<&r +rr<&trr<&prr<&nrr<&srr<&qrr<&qrr<&mrr<&srr<&rrr<&lrr<&nrr<&rrr<&urr<&urr<&u +rrW9$rrE&u!!*#u!s&B$!;lcr!<)ot!;uis!;ZWp!;lcr!;c]q!;QQq!<3&orr<&qrr<&srr<&u +rr<&rrr<&srr<&orr<&srr<&prr<&krr<&qrr<%Ms2b6>irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7cTos7cQos7cTns7lZks7ZKns8;rts8;rts7cTks7u`os7lZn +s7lZos7lZps8;rts8;rts7cTos7lZLs8N)trr<&srr<&orr<&ts8N)urr<&ts8N)qrr<&trr<&u +rr<&ts8N)ts8N)trr<&rrr<&trr<&prr<&ts8N)trr<&trr<&trr<&urr<&urrW9$rrE&u!!*#u +!!*#u!!)ut!!)rs!!)rs!!)fo!!)utrrDoq!!)cn!!)cn!!)lqrrE#t!!)ut!!)ut!!)or!!)fo +rrE#t!!)fo!!)utrrDrr!!)ut!!*#u!!)utrrDrrrrDiorr@WMirB#F!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7cTos7cQos7cTns7lZks7ZKns8;rts8;rts7cTks7u`os7lZn +s7lZos7lZps8;rts8;rts7cTos7lZLs8N)trr<&srr<&orr<&ts8N)urr<&ts8N)qrr<&trr<&u +rr<&ts8N)ts8N)trr<&rrr<&trr<&prr<&ts8N)trr<&trr<&trr<&urr<&urrW9$rrE&u!!*#u +!!*#u!!)ut!!)rs!!)rs!!)fo!!)utrrDoq!!)cn!!)cn!!)lqrrE#t!!)ut!!)ut!!)or!!)fo +rrE#t!!)fo!!)utrrDrr!!)ut!!*#u!!)utrrDrrrrDiorr@WMirB#B!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7cTos7cQos7cTns7lZks7ZKns8;rts8;rts7cTks7u`os7lZn +s7lZos7lZps8;rts8;rts7cTos7lZLs8N)trr<&srr<&orr<&ts8N)urr<&ts8N)qrr<&trr<&u +rr<&ts8N)ts8N)trr<&rrr<&trr<&prr<&ts8N)trr<&trr<&trr<&urr<&urrW9$rrE&u!!*#u +!!*#u!!)ut!!)rs!!)rs!!)fo!!)utrrDoq!!)cn!!)cn!!)lqrrE#t!!)ut!!)ut!!)or!!)fo +rrE#t!!)fo!!)utrrDrr!!)ut!!*#u!!)utrrDrrrrDiorr@WMirB# +!BpJ^mHsrQ!!rT)rrE'!rr<&qs8)fos82lrs7u`ns7u`js82iss8Duus8;rts8;rss8;ots8E#q +s7u`os7lZns7lZms8)frs8;rts8;rss8;ots8E#us7u`Js8;rrs7u`ms8;rps8;ots8E#qs8;rq +s8;rprrE-"r;cZnr;cTlr;c]or;cfrrW)uurrE*!quHcsrrE*!rrE&ur;ccqrW)rtrW)`nr;Zp! +!!*#uq>gBl!!)lqq>gKo!^Hpq#C?oJcFa0 +rp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&qs8)fos82lrs7u`ns7u`js82iss8Duus8;rts8;rss8;ots8E#q +s7u`os7lZns7lZms8)frs8;rts8;rss8;ots8E#us7u`Js8;rrs7u`ms8;rps8;ots8E#qs8;rq +s8;rprrE-"r;cZnr;cTlr;c]or;cfrrW)uurrE*!quHcsrrE*!rrE&ur;ccqrW)rtrW)`nr;Zp! +!!*#uq>gBl!!)lqq>gKo!^Hpq#C?oJcFa0 +rojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&qs8)fos82lrs7u`ns7u`js82iss8Duus8;rts8;rss8;ots8E#q +s7u`os7lZns7lZms8)frs8;rts8;rss8;ots8E#us7u`Js8;rrs7u`ms8;rps8;ots8E#qs8;rq +s8;rprrE-"r;cZnr;cTlr;c]or;cfrrW)uurrE*!quHcsrrE*!rrE&ur;ccqrW)rtrW)`nr;Zp! +!!*#uq>gBl!!)lqq>gKo!^Hpq#C?oJcFa0 +ro4$s2h1~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mCN>t!.k0as8N)Is8N)Ns8N)Ys8;rPs8;qKs+14Ks8MBdeieN~> +!BU8[l+6op!.k0as8N)Is8N)Ns8N)Ys8;rPs8;qKs+14Ks8M6`c8pI~> +!B:&Xj1>9j!.k0as8N)Is8N)Ns8N)Ys8;rPs8;qKs+14Ks8M$Z_`*)~> +!BpJ^mG7g +!BU8[l.uC8!9X=]!.k1.s8;rss8;r^rr<&[rr<&orr<&prr<&Mrr<&Vrr<&Srr<&3rr<%Ms1eU5 +klK'jJ,~> +!B:&Xj5'b2!9X=]!.k1.s8;rss8;r^rr<&[rr<&orr<&prr<&Mrr<&Vrr<&Srr<&3rr<%Ms1eU5 +irR%VJ,~> +!BpJ^mHsrH!<)rm!9aC^!.k1-rr<&qrr<&_rr<&[rr<&orr<&prr<&Mrr<&Vrr<&Trr<&2rr<%M +s1eU5m/bd$J,~> +!BU8[l0\ND!<)rm!9aC^!.k1-rr<&qrr<&_rr<&[rr<&orr<&prr<&Mrr<&Vrr<&Trr<&2rr<%M +s1eU5klK'jJ,~> +!B:&Xj6cm>!<)rm!9aC^!.k1-rr<&qrr<&_rr<&[rr<&orr<&prr<&Mrr<&Vrr<&Trr<&2rr<%M +s1eU5irR%VJ,~> +!BpJ^mHsrH!;uls!<)rs!<)rr!;c`o!<)rn!;uln!.k1=rr<&urr<&urr<&_rr<&Qrr<&prr<&M +rr<&Vrr<&Trr<&2rr<%Ms1eU5m/bd$J,~> +!BU8[l0\ND!;uls!<)rs!<)rr!;c`o!<)rn!;uln!.k1=rr<&urr<&urr<&_rr<&Qrr<&prr<&M +rr<&Vrr<&Trr<&2rr<%Ms1eU5klK'jJ,~> +!B:&Xj6cm>!;uls!<)rs!<)rr!;c`o!<)rn!;uln!.k1=rr<&urr<&urr<&_rr<&Qrr<&prr<&M +rr<&Vrr<&Trr<&2rr<%Ms1eU5irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZos7lZps7lZns7lYGs6osf!<2uu!<2uu!<)rr +!;ulr!!*&u!;uiu!<<)t!;ZZo!<3#t!<)rs!;c`l!<)ou!<;utpAb'kr;Zcs!<;utqu?Tp!WN/o +s8;ourrDusr;cWm!!)orrW)rtrW)osr;cQkq>gHnr;ccqrVururW)`nrVururW)iqr;c]or;c`p +q>gHnr;Zlu!.k0qs8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZos7lZps7lZns7lYGs6osf!<2uu!<2uu!<)rr +!;ulr!!*&u!;uiu!<<)t!;ZZo!<3#t!<)rs!;c`l!<)ou!<;utpAb'kr;Zcs!<;utqu?Tp!WN/o +s8;ourrDusr;cWm!!)orrW)rtrW)osr;cQkq>gHnr;ccqrVururW)`nrVururW)iqr;c]or;c`p +q>gHnr;Zlu!.k0qs8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZos7lZps7lZns7lYGs6osf!<2uu!<2uu!<)rr +!;ulr!!*&u!;uiu!<<)t!;ZZo!<3#t!<)rs!;c`l!<)ou!<;utpAb'kr;Zcs!<;utqu?Tp!WN/o +s8;ourrDusr;cWm!!)orrW)rtrW)osr;cQkq>gHnr;ccqrVururW)`nrVururW)iqr;c]or;c`p +q>gHnr;Zlu!.k0qs8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8Duus8E#ss8E#ts8N)ps8N)ts8N(Ms6osf +!<2uu!<2uu!<2uu!<)ot!;lfr!<2uu!<)ot!<2uu!;?Em!;uis!;c]q!;QQo!;ZZp!<)ot!;QQo +!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)rt!<)ot!<)ot!;ZWp!;c]q!;uis!<)ot!<)ot!;6?l +!;ZWp!<)ot!;lfr!<2uu!;HNn!<2uu!<)ot!<)ot!;uis!<)ot!;c]q!;ZWp!<)rt!.k0qs8MBd +eieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8Duus8E#ss8E#ts8N)ps8N)ts8N(Ms6osf +!<2uu!<2uu!<2uu!<)ot!;lfr!<2uu!<)ot!<2uu!;?Em!;uis!;c]q!;QQo!;ZZp!<)ot!;QQo +!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)rt!<)ot!<)ot!;ZWp!;c]q!;uis!<)ot!<)ot!;6?l +!;ZWp!<)ot!;lfr!<2uu!;HNn!<2uu!<)ot!<)ot!;uis!<)ot!;c]q!;ZWp!<)rt!.k0qs8M6` +c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8Duus8E#ss8E#ts8N)ps8N)ts8N(Ms6osf +!<2uu!<2uu!<2uu!<)ot!;lfr!<2uu!<)ot!<2uu!;?Em!;uis!;c]q!;QQo!;ZZp!<)ot!;QQo +!<)ot!;uls!<)ot!<)ot!<)rt!;QQo!<)rt!<)ot!<)ot!;ZWp!;c]q!;uis!<)ot!<)ot!;6?l +!;ZWp!<)ot!;lfr!<2uu!;HNn!<2uu!<)ot!<)ot!;uis!<)ot!;c]q!;ZWp!<)rt!.k0qs8M$Z +_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZps8N)rs8N'#rr<&rs8N)us8N)ps8;qKs6BUg!<3'!!<3&u +rr<&rrr<&srr<&orrW9$rrD`l"p"]'!<<'!qYpNqq#:UEpr;Q`soD\djr;Q`sr;Q`srr2ru +qu6Wrq#:UEprr2rurVlitqu6WrpAY*mqYpNqqu6Wrr;Q`so)A[i +q>UEpqu6Wrrr2ruqu6Wrqu6Wrq>UEpr;Q`sJcF$qrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZps8N)rs8N'#rr<&rs8N)us8N)ps8;qKs6BUg!<3'!!<3&u +rr<&rrr<&srr<&orrW9$rrD`l"p"]'!<<'!qYpNqq#:UEpr;Q`soD\djr;Q`sr;Q`srr2ru +qu6Wrq#:UEprr2rurVlitqu6WrpAY*mqYpNqqu6Wrr;Q`so)A[i +q>UEpqu6Wrrr2ruqu6Wrqu6Wrq>UEpr;Q`sJcF$qrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZps8N)rs8N'#rr<&rs8N)us8N)ps8;qKs6BUg!<3'!!<3&u +rr<&rrr<&srr<&orrW9$rrD`l"p"]'!<<'!qYpNqq#:UEpr;Q`soD\djr;Q`sr;Q`srr2ru +qu6Wrq#:UEprr2rurVlitqu6WrpAY*mqYpNqqu6Wrr;Q`so)A[i +q>UEpqu6Wrrr2ruqu6Wrqu6Wrq>UEpr;Q`sJcF$qro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss7u`ps8N)rs8N'#rr<&rs8N)us8N)os8)eIs6]gj!<3'!!<3&u +rr<&rrr<&srr<&os8E#jrrrK'rrE*!!;c]q!;QQo!;ZWp!;uis!;QTk!;uis!;uis!<2uu!;lcr +!;HNm!;lcr!;lcr!;c]q!;ZWp!<2uu!<)rn!;?Em!;c]q!;lcr!;uis!:p-i!;ZWp!;lcr!<2uu +!;lcr!;lcr!;QTn!.k0ns8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss7u`ps8N)rs8N'#rr<&rs8N)us8N)os8)eIs6]gj!<3'!!<3&u +rr<&rrr<&srr<&os8E#jrrrK'rrE*!!;c]q!;QQo!;ZWp!;uis!;QTk!;uis!;uis!<2uu!;lcr +!;HNm!;lcr!;lcr!;c]q!;ZWp!<2uu!<)rn!;?Em!;c]q!;lcr!;uis!:p-i!;ZWp!;lcr!<2uu +!;lcr!;lcr!;QTn!.k0ns8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss7u`ps8N)rs8N'#rr<&rs8N)us8N)os8)eIs6]gj!<3'!!<3&u +rr<&rrr<&srr<&os8E#jrrrK'rrE*!!;c]q!;QQo!;ZWp!;uis!;QTk!;uis!;uis!<2uu!;lcr +!;HNm!;lcr!;lcr!;c]q!;ZWp!<2uu!<)rn!;?Em!;c]q!;lcr!;uis!:p-i!;ZWp!;lcr!<2uu +!;lcr!;lcr!;QTn!.k0ns8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)us8E#us8N)rs8N'#rr<&rs8N)us8N)ms82kJs6fmk!<3'! +!<3&urr<&rrr<&srr<&orrW9$rrD`l"p"Z'rrE'!qYpNqq#:UEpr;Q`sq>UEpr;Q`sr;Q`s +r;Q`srr2ruqu6Wro`+pkrVlitqu6WrqYpNqq#:BqrrDus!!)Kf!!)lq!!)or!!)rs!!)Ti!!)ip +!!)or!!*#u!!)or!!)or!!)]lrr@WMc2[e1!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)us8E#us8N)rs8N'#rr<&rs8N)us8N)ms82kJs6fmk!<3'! +!<3&urr<&rrr<&srr<&orrW9$rrD`l"p"Z'rrE'!qYpNqq#:UEpr;Q`sq>UEpr;Q`sr;Q`s +r;Q`srr2ruqu6Wro`+pkrVlitqu6WrqYpNqq#:BqrrDus!!)Kf!!)lq!!)or!!)rs!!)Ti!!)ip +!!)or!!*#u!!)or!!)or!!)]lrr@WMc2[e-!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)us8E#us8N)rs8N'#rr<&rs8N)us8N)ms82kJs6fmk!<3'! +!<3&urr<&rrr<&srr<&orrW9$rrD`l"p"Z'rrE'!qYpNqq#:UEpr;Q`sq>UEpr;Q`sr;Q`s +r;Q`srr2ruqu6Wro`+pkrVlitqu6WrqYpNqq#:BqrrDus!!)Kf!!)lq!!)or!!)rs!!)Ti!!)ip +!!)or!!*#u!!)or!!)or!!)]lrr@WMc2[e'!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8Duus8E#ss8E#ts8N)ts8N*!s8N)ts8N(M +s6fmk!<3'!!<3&urr<&rrr<&srr<&orr<&urr<&mrrrK'!<3'!!;c]q!;QQo!;ZWp!;uis!;ZWp +!;uis!;uis!;uis!<2uu!;lcr!;QQo!;uis!<2uu!;lcr!;c]q!;QQq!<3&srr<&frr<&qrr<&r +rr<&srr<&irr<&prr<&rrr<&urr<&rrr<&rrr<&prr<&srr<%Ms3CZDm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8Duus8E#ss8E#ts8N)ts8N*!s8N)ts8N(M +s6fmk!<3'!!<3&urr<&rrr<&srr<&orr<&urr<&mrrrK'!<3'!!;c]q!;QQo!;ZWp!;uis!;ZWp +!;uis!;uis!;uis!<2uu!;lcr!;QQo!;uis!<2uu!;lcr!;c]q!;QQq!<3&srr<&frr<&qrr<&r +rr<&srr<&irr<&prr<&rrr<&urr<&rrr<&rrr<&prr<&srr<%Ms3CZDklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N)ts8Duus8E#ss8Duus8E#ss8E#ts8N)ts8N*!s8N)ts8N(M +s6fmk!<3'!!<3&urr<&rrr<&srr<&orr<&urr<&mrrrK'!<3'!!;c]q!;QQo!;ZWp!;uis!;ZWp +!;uis!;uis!;uis!<2uu!;lcr!;QQo!;uis!<2uu!;lcr!;c]q!;QQq!<3&srr<&frr<&qrr<&r +rr<&srr<&irr<&prr<&rrr<&urr<&rrr<&rrr<&prr<&srr<%Ms3CZDirR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8)frs8Duus7lZos7lZns7lZps7lYGs6]gd!<2uu!;uis!<)ot +!;lcr!;QQo!<)ot!;?Em!<2uu!;ZWp!;QQo!<)ot!<2uu!;uis!;ZWp!<)rt!;uis!;uis!<)ot +!<)rt!;QTo!<)ot!<)ot!<)ot!;ZWp!;HKn!;c]q!<)rt!;?Em!;ZWp!<)ot!;lcr!:p-i!;QQo +!<)ot!;uis!<)ot!;c]q!<)ot!<3#u!<)ot!;lfr!.k1$s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8)frs8Duus7lZos7lZns7lZps7lYGs6]gd!<2uu!;uis!<)ot +!;lcr!;QQo!<)ot!;?Em!<2uu!;ZWp!;QQo!<)ot!<2uu!;uis!;ZWp!<)rt!;uis!;uis!<)ot +!<)rt!;QTo!<)ot!<)ot!<)ot!;ZWp!;HKn!;c]q!<)rt!;?Em!;ZWp!<)ot!;lcr!:p-i!;QQo +!<)ot!;uis!<)ot!;c]q!<)ot!<3#u!<)ot!;lfr!.k1$s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8)frs8Duus7lZos7lZns7lZps7lYGs6]gd!<2uu!;uis!<)ot +!;lcr!;QQo!<)ot!;?Em!<2uu!;ZWp!;QQo!<)ot!<2uu!;uis!;ZWp!<)rt!;uis!;uis!<)ot +!<)rt!;QTo!<)ot!<)ot!<)ot!;ZWp!;HKn!;c]q!<)rt!;?Em!;ZWp!<)ot!;lcr!:p-i!;QQo +!<)ot!;uis!<)ot!;c]q!<)ot!<3#u!<)ot!;lfr!.k1$s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8)frs8E#ts8;ros8;ros82lqs7u_Hs6Tac!<2uu!;lfp!;uln +!<)rt!<3#s!;QQo!<2uu!;uln!;c`o!<3#t!<3#t!;ZZn!!*&u!<<)u!<3#t!<)rr!!<0#!;ZWq +!<;utqu?Tpqu?KmqYpNqq>^BnpAashr;Z]qr;ZTnq#C0jqu?TpqZ$Koq#C9mrVllus8;ros8N(M +s475Lm/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8)frs8E#ts8;ros8;ros82lqs7u_Hs6Tac!<2uu!;lfp!;uln +!<)rt!<3#s!;QQo!<2uu!;uln!;c`o!<3#t!<3#t!;ZZn!!*&u!<<)u!<3#t!<)rr!!<0#!;ZWq +!<;utqu?Tpqu?KmqYpNqq>^BnpAashr;Z]qr;ZTnq#C0jqu?TpqZ$Koq#C9mrVllus8;ros8N(M +s475LklK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8)frs8E#ts8;ros8;ros82lqs7u_Hs6Tac!<2uu!;lfp!;uln +!<)rt!<3#s!;QQo!<2uu!;uln!;c`o!<3#t!<3#t!;ZZn!!*&u!<<)u!<3#t!<)rr!!<0#!;ZWq +!<;utqu?Tpqu?KmqYpNqq>^BnpAashr;Z]qr;ZTnq#C0jqu?TpqZ$Koq#C9mrVllus8;ros8N(M +s475LirR%VJ,~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^mHsrH!.k0$s+13$s+143s8MBdeieN~> +!BU8[l0\ND!.k0$s+13$s+143s8M6`c8pI~> +!B:&Xj6cm>!.k0$s+13$s+143s8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mB-Eg!;QTk!;uls!.k08s8;r>s8;qKs+14+s8MBdeieN~> +!BU8[l)k!c!;QTk!;uls!.k08s8;r>s8;qKs+14+s8M6`c8pI~> +!B:&Xj/r@]!;QTk!;uls!.k08s8;r>s8;qKs+14+s8M$Z_`*)~> +!BpJ^mFqU=!!<0#!8IPR!;ZZk!;uls!:9a[!2BMm!;ulr!36&!!;HKn!;HKn!9a@^!:9^c!6kHC +!;?Em!.k0>s8MBdeieN~> +!BU8[l.Z19!!<0#!8IPR!;ZZk!;uls!:9a[!2BMm!;ulr!36&!!;HKn!;HKn!9a@^!:9^c!6kHC +!;?Em!.k0>s8M6`c8pI~> +!B:&Xj4aP3!!<0#!8IPR!;ZZk!;uls!:9a[!2BMm!;ulr!36&!!;HKn!;HKn!9a@^!:9^c!6kHC +!;?Em!.k0>s8M$Z_`*)~> +!BpJ^mHsrH!;ull!7CiH!9!nO!29Gm!;uls!3,tu!;QQo!;?Em!9a@^!:Bdd!6bBB!;?Em!.k0> +s8MBdeieN~> +!BU8[l0\ND!;ull!7CiH!9!nO!29Gm!;uls!3,tu!;QQo!;?Em!9a@^!:Bdd!6bBB!;?Em!.k0> +s8M6`c8pI~> +!B:&Xj6cm>!;ull!7CiH!9!nO!29Gm!;uls!3,tu!;QQo!;?Em!9a@^!:Bdd!6bBB!;?Em!.k0> +s8M$Z_`*)~> +!BpJ^mHsrH!;uls!<)rs!!*&u!!*&t!;lfp!;lfp!!<0#!<3#r!;lfl!<3#r!;c`o!!<0#!;c`q +!<<*!!<<*!!!*&t!<<)t!!*&u!!*&t!;lfp!;lfm!6kHE!<3&urrN3#!2'8k!65$=!6bBB!.k02 +s8MBdeieN~> +!BU8[l0\ND!;uls!<)rs!!*&u!!*&t!;lfp!;lfp!!<0#!<3#r!;lfl!<3#r!;c`o!!<0#!;c`q +!<<*!!<<*!!!*&t!<<)t!!*&u!!*&t!;lfp!;lfm!6kHE!<3&urrN3#!2'8k!65$=!6bBB!.k02 +s8M6`c8pI~> +!B:&Xj6cm>!;uls!<)rs!!*&u!!*&t!;lfp!;lfp!!<0#!<3#r!;lfl!<3#r!;c`o!!<0#!;c`q +!<<*!!<<*!!!*&t!<<)t!!*&u!!*&t!;lfp!;lfm!6kHE!<3&urrN3#!2'8k!65$=!6bBB!.k02 +s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'!s7cTns7lZos7lZos82los7lZos82los7lZks8N*! +s8N*!s8N'!s8;rts8;ots7cTns7lZos7lZ=rrN3#!<3!"!<3&ts8;rqs8Duus8E#qs8;rjs8;ou +rrE&urr<'!r;c`pr;c]or;Zlu!;ulr!;c`l!;ulr!;ZZn!!3*"p](3mqu?Zr!<;utr;ZTnr;Z]q +r;Z`r!<<#urr;uu#6+Z's8N'!r;Z]qqu?Kmr;Z`rq>^Bnr;Zcs!<;utJcE(Vrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'!s7cTns7lZos7lZos82los7lZos82los7lZks8N*! +s8N*!s8N'!s8;rts8;ots7cTns7lZos7lZ=rrN3#!<3!"!<3&ts8;rqs8Duus8E#qs8;rjs8;ou +rrE&urr<'!r;c`pr;c]or;Zlu!;ulr!;c`l!;ulr!;ZZn!!3*"p](3mqu?Zr!<;utr;ZTnr;Z]q +r;Z`r!<<#urr;uu#6+Z's8N'!r;Z]qqu?Kmr;Z`rq>^Bnr;Zcs!<;utJcE(VrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'!s7cTns7lZos7lZos82los7lZos82los7lZks8N*! +s8N*!s8N'!s8;rts8;ots7cTns7lZos7lZ=rrN3#!<3!"!<3&ts8;rqs8Duus8E#qs8;rjs8;ou +rrE&urr<'!r;c`pr;c]or;Zlu!;ulr!;c`l!;ulr!;ZZn!!3*"p](3mqu?Zr!<;utr;ZTnr;Z]q +r;Z`r!<<#urr;uu#6+Z's8N'!r;Z]qqu?Kmr;Z`rq>^Bnr;Zcs!<;utJcE(Vro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss82los8E#ts8Duus8E#ss8Duus8E#ts8E#qs8N)ps8N)ns8N)s +s8E#ts8E#ps8N*!s8N*!s8N*!s8N)ts8N)us8E#ts8Duus8E#ss8E#us8N)ts8N)Crs/W)rrE'! +s8N)urr<&trr<&rs8N)urr<&trr<&trr<&nrr<&ts8N)ts8N)trr<&trr<&trr<&srr<&ts8N)q +rr<&orr<&mrr<&qrr<&ts8N)lrr<&qs8N)trr<&rrr<&prr<&trr<&rs8N)urr<&us8N*!s8N*! +rr<&urr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<%Ms0Vh*m/bd$J,~> +!BU8[l0\NM!!rT)rrE'!rr<&ss82los8E#ts8Duus8E#ss8Duus8E#ts8E#qs8N)ps8N)ns8N)s +s8E#ts8E#ps8N*!s8N*!s8N*!s8N)ts8N)us8E#ts8Duus8E#ss8E#us8N)ts8N)Crs/W)rrE'! +s8N)urr<&trr<&rs8N)urr<&trr<&trr<&nrr<&ts8N)ts8N)trr<&trr<&trr<&srr<&ts8N)q +rr<&orr<&mrr<&qrr<&ts8N)lrr<&qs8N)trr<&rrr<&prr<&trr<&rs8N)urr<&us8N*!s8N*! +rr<&urr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<%Ms0Vh*klK'jJ,~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss82los8E#ts8Duus8E#ss8Duus8E#ts8E#qs8N)ps8N)ns8N)s +s8E#ts8E#ps8N*!s8N*!s8N*!s8N)ts8N)us8E#ts8Duus8E#ss8E#us8N)ts8N)Crs/W)rrE'! +s8N)urr<&trr<&rs8N)urr<&trr<&trr<&nrr<&ts8N)ts8N)trr<&trr<&trr<&srr<&ts8N)q +rr<&orr<&mrr<&qrr<&ts8N)lrr<&qs8N)trr<&rrr<&prr<&trr<&rs8N)urr<&us8N*!s8N*! +rr<&urr<&trr<&qrr<&mrr<&qrr<&trr<&ss8N)trr<%Ms0Vh*irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs7u`ps8N)ss8N'#rr<&rs8N'#rr<&ss8N)rs8N)ps8N)ns8N)s +s8N)ss8N)ms8N)rs8N)ts8N)us8N)ss8N'#rr<&rs8N*!s8;r=rsJi,rrE'!s8N*!rrDrr!!)rs +!!)ip!!)or!!)fo!!)rs!!)ut!!)or!s&B$!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr +!;6?l!;c]q!;uis!;lcr!;c]q!;lcr!;uis!;ZWp!<2uu!<2uu!;ZWp!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!.k0Ws8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs7u`ps8N)ss8N'#rr<&rs8N'#rr<&ss8N)rs8N)ps8N)ns8N)s +s8N)ss8N)ms8N)rs8N)ts8N)us8N)ss8N'#rr<&rs8N*!s8;r=rsJi,rrE'!s8N*!rrDrr!!)rs +!!)ip!!)or!!)fo!!)rs!!)ut!!)or!s&B$!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr +!;6?l!;c]q!;uis!;lcr!;c]q!;lcr!;uis!;ZWp!<2uu!<2uu!;ZWp!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!.k0Ws8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs7u`ps8N)ss8N'#rr<&rs8N'#rr<&ss8N)rs8N)ps8N)ns8N)s +s8N)ss8N)ms8N)rs8N)ts8N)us8N)ss8N'#rr<&rs8N*!s8;r=rsJi,rrE'!s8N*!rrDrr!!)rs +!!)ip!!)or!!)fo!!)rs!!)ut!!)or!s&B$!;lcr!<2uu!;lcr!;c]q!;QQo!;?Em!;lcr!;lcr +!;6?l!;c]q!;uis!;lcr!;c]q!;lcr!;uis!;ZWp!<2uu!<2uu!;ZWp!;c]q!;?Em!;lcr!;lcr +!<)ot!;uis!.k0Ws8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&os82lss8N)ss8N'!s7ZKprr<&ks8N)ps8N)ns8N)ss8N)fs8N)q +s8N*!s8N)ts8N)ss8N'!s7ZNms8)f>rr<&urr<&urrW9$rrDrr!!)rs!!)ipq#L0hrW)fp!!)or +!W`9#q#LEo!!)Wj!!)fo!!)`m!!)or!!)He!!)lq!!)rs!!)or!!)lq!!)or!!)rs!!)ip!!*#u +!!*#u!!*#uqZ-Km!!)`m!!)or!!)or!!)ut!!)rs!!%TM[/^-m!S0Da~> +!BU8[l0\NM!!rT)rrE'!rr<&os82lss8N)ss8N'!s7ZKprr<&ks8N)ps8N)ns8N)ss8N)fs8N)q +s8N*!s8N)ts8N)ss8N'!s7ZNms8)f>rr<&urr<&urrW9$rrDrr!!)rs!!)ipq#L0hrW)fp!!)or +!W`9#q#LEo!!)Wj!!)fo!!)`m!!)or!!)He!!)lq!!)rs!!)or!!)lq!!)or!!)rs!!)ip!!*#u +!!*#u!!*#uqZ-Km!!)`m!!)or!!)or!!)ut!!)rs!!%TM[/^-i!R<`V~> +!B:&Xj6cmG!!rT)rrE'!rr<&os82lss8N)ss8N'!s7ZKprr<&ks8N)ps8N)ns8N)ss8N)fs8N)q +s8N*!s8N)ts8N)ss8N'!s7ZNms8)f>rr<&urr<&urrW9$rrDrr!!)rs!!)ipq#L0hrW)fp!!)or +!W`9#q#LEo!!)Wj!!)fo!!)`m!!)or!!)He!!)lq!!)rs!!)or!!)lq!!)or!!)rs!!)ip!!*#u +!!*#u!!*#uqZ-Km!!)`m!!)or!!)or!!)ut!!)rs!!%TM[/^-c!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s8N)ss8N'!s7ZKprr<&ks8N)ps8N)ns8N)ss8N)f +s8N)qs8N'#rr<&ss8N)ss8N'!s7ZNks82l@rr<&urr<&urrW9$rrDrr!!)rs!!)ip!!)EdrrDus +!!)or!s&B$!;HKn!;$3j!;QQo!;?Em!;lcr!:Kje!;c]q!;uis!;lcr!;c]q!;lcr!;uis!;ZWp +!<2uu!<3!#!<<'!r;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`sJcE+Wrp9a;4b*~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s8N)ss8N'!s7ZKprr<&ks8N)ps8N)ns8N)ss8N)f +s8N)qs8N'#rr<&ss8N)ss8N'!s7ZNks82l@rr<&urr<&urrW9$rrDrr!!)rs!!)ip!!)EdrrDus +!!)or!s&B$!;HKn!;$3j!;QQo!;?Em!;lcr!:Kje!;c]q!;uis!;lcr!;c]q!;lcr!;uis!;ZWp +!<2uu!<3!#!<<'!r;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`sJcE+WrojI/3e.~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s8N)ss8N'!s7ZKprr<&ks8N)ps8N)ns8N)ss8N)f +s8N)qs8N'#rr<&ss8N)ss8N'!s7ZNks82l@rr<&urr<&urrW9$rrDrr!!)rs!!)ip!!)EdrrDus +!!)or!s&B$!;HKn!;$3j!;QQo!;?Em!;lcr!:Kje!;c]q!;uis!;lcr!;c]q!;lcr!;uis!;ZWp +!<2uu!<3!#!<<'!r;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`sJcE+Wro4$s2h1~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8;rss8N*!s8E#ts8Duus8E#os8E#ss8E#rs8N)ps8N)ns8N)s +s8E#ss8E#ms8N)ps8;rqs8E#ts8Duus8E#ns8N)ts8N)Crr<&qrrW9$rrDrr!!)rs!!)ip!!)Qh +!!)rs!!)ut!!)or!s&B$!;HKn!;$3j!;QQo!;?Em!;lcr!:Kje!;c]q!;uis!;lcr!;c]q!;lcr +!;uis!;ZWp!<2uu!<3!#!<<'!r;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`sJcE+Wrp9a;4b*~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8;rss8N*!s8E#ts8Duus8E#os8E#ss8E#rs8N)ps8N)ns8N)s +s8E#ss8E#ms8N)ps8;rqs8E#ts8Duus8E#ns8N)ts8N)Crr<&qrrW9$rrDrr!!)rs!!)ip!!)Qh +!!)rs!!)ut!!)or!s&B$!;HKn!;$3j!;QQo!;?Em!;lcr!:Kje!;c]q!;uis!;lcr!;c]q!;lcr +!;uis!;ZWp!<2uu!<3!#!<<'!r;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`sJcE+WrojI/3e.~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8;rss8N*!s8E#ts8Duus8E#os8E#ss8E#rs8N)ps8N)ns8N)s +s8E#ss8E#ms8N)ps8;rqs8E#ts8Duus8E#ns8N)ts8N)Crr<&qrrW9$rrDrr!!)rs!!)ip!!)Qh +!!)rs!!)ut!!)or!s&B$!;HKn!;$3j!;QQo!;?Em!;lcr!:Kje!;c]q!;uis!;lcr!;c]q!;lcr +!;uis!;ZWp!<2uu!<3!#!<<'!r;Q`sqYpNqpAY*mqu6Wrqu6WrrVlitr;Q`sJcE+Wro4$s2h1~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTos7lZos7lZos7lZos7cTis8)fns8E#q +s7lZos7lZos7lZ=rr<&qrr<&urr<&trr<&rrr<&orr<&ts8N)os8N)trr<&ts8N)trr<&trr<&t +s8N)trr<&ts8N)qrr<&orr<&mrr<&qrr<&ts8N)lrr<&qrr<&srr<&rrr<&prr<&trr<&rrr<&p +rr<&urr<&urrW9$rrE#trrDoq!!)ut!!)or!!)lq!!)ut!!)rs!!)rs!!)orrr@WM]`7uu!S0Da~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTos7lZos7lZos7lZos7cTis8)fns8E#q +s7lZos7lZos7lZ=rr<&qrr<&urr<&trr<&rrr<&orr<&ts8N)os8N)trr<&ts8N)trr<&trr<&t +s8N)trr<&ts8N)qrr<&orr<&mrr<&qrr<&ts8N)lrr<&qrr<&srr<&rrr<&prr<&trr<&rrr<&p +rr<&urr<&urrW9$rrE#trrDoq!!)ut!!)or!!)lq!!)ut!!)rs!!)rs!!)orrr@WM]`7uq!R<`V~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7lZos7lZos7cTos7lZos7lZos7lZos7cTis8)fns8E#q +s7lZos7lZos7lZ=rr<&qrr<&urr<&trr<&rrr<&orr<&ts8N)os8N)trr<&ts8N)trr<&trr<&t +s8N)trr<&ts8N)qrr<&orr<&mrr<&qrr<&ts8N)lrr<&qrr<&srr<&rrr<&prr<&trr<&rrr<&p +rr<&urr<&urrW9$rrE#trrDoq!!)ut!!)or!!)lq!!)ut!!)rs!!)rs!!)orrr@WM]`7uk!Q-jH~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;rrs8N'!s8;rps8)fps8)fps7lZos7lZos7lZns8)fj +s8)fns8N)qs8N'!s8;rps8)fqs7u`>s8;rss8;rss8;rqs7u`ms8;rkrrE-"r;ccq! +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;rrs8N'!s8;rps8)fps8)fps7lZos7lZos7lZns8)fj +s8)fns8N)qs8N'!s8;rps8)fqs7u`>s8;rss8;rss8;rqs7u`ms8;rkrrE-"r;ccq! +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;rrs8N'!s8;rps8)fps8)fps7lZos7lZos7lZns8)fj +s8)fns8N)qs8N'!s8;rps8)fqs7u`>s8;rss8;rss8;rqs7u`ms8;rkrrE-"r;ccq! +!BpJ^mHsrH!:g*h!2TYp!;c`q!.k1Arr<%Ms+13$s6fpdm/bd$J,~> +!BU8[l0\ND!:g*h!2TYp!;c`q!.k1Arr<%Ms+13$s6fpdklK'jJ,~> +!B:&Xj6cm>!:g*h!2TYp!;c`q!.k1Arr<%Ms+13$s6fpdirR%VJ,~> +!BpJ^mHsrH!:g*h!2]_q!;ZZp!.k1Arr<%Ms+13$s6fpdm/bd$J,~> +!BU8[l0\ND!:g*h!2]_q!;ZZp!.k1Arr<%Ms+13$s6fpdklK'jJ,~> +!B:&Xj6cm>!:g*h!2]_q!;ZZp!.k1Arr<%Ms+13$s6fpdirR%VJ,~> +!BpJ^mF)%4!3-"q!;ulp!.k1Crr<%Ms+13$s6fpdm/bd$J,~> +!BU8[l-fV0!3-"q!;ulp!.k1Crr<%Ms+13$s6fpdklK'jJ,~> +!B:&Xj3mu*!3-"q!;ulp!.k1Crr<%Ms+13$s6fpdirR%VJ,~> +!BpJ^mF)%4!3-"q!;ulp!.k1Ds8;qKs+13$s7$'fm/bd$J,~> +!BU8[l-fV0!3-"q!;ulp!.k1Ds8;qKs+13$s7$'fklK'jJ,~> +!B:&Xj3mu*!3-"q!;ulp!.k1Ds8;qKs+13$s7$'firR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6m=FYUm=FYUmD&#heieN~> +!BU73l%/)Ml%/)Ml+cH`c8pI~> +!B:%0j+66Aj+66Aj1jUT_`*)~> +!BpI6eq)D'eq)D'f"T]84b*~> +!BU73c@O8lc@O8lcG%R(3e.~> +!B:%0_h#^V_h#^V_nO"g2h1~> +JN\QIJN\QIJN^V.J,~> +JNA?CJNA?CJNCD(J,~> +JN&-=JN&-=JN(2"J,~> +%%EndData +showpage +%%Trailer +end +%%EOF